参考资料:

  1. 《Windows Internals》

  2. 自旋锁spinlock剖析与改进

  3. Lock指令前缀

  4. Lock指令前缀(二)

  5. Kernel Dispatcher Objects

  6. Windows同步机制原理

  

  知识点:

  ● Interlocked Operations:最简单的同步机制,基于硬件对安全多处理器整数操作的支持,包括:InterlockedIncrement、interlockedDecrement、InterlockedExchange和InterlockedCompareExchange。比如interlockedDecrement函数,会通过x86指令前缀来锁住多处理的总线(如,地址总线),防止修改某一内存空间。

  ● Spinlocks:与mutex比较类似,不同之处在于它的使用者往往保持时间比较短,且不会进入休眠状态。在使用的时候,可以设置尝试次数;如果超时,就放弃本次时间片。

  两个限制:① 被保护的资源必须被快速访问且不会被其它代码复杂的访问。

       ② 临界区代码不能被分页在内存外,不能引用可分页的数据,不能调用外部例程(包括系统服务)和不能产生中断和异常。

  

              图1 Spinlock使用实例

  ● Queued Spinlocks:为增减扩展性的特殊类型spinlock。工作原理:当某一个处理器想获取一个当前已被拥有的QS,它把它的标识符放到与该Spinlock相关的队列中去。让Spinlock被释放的时候,其拥有进程会将lock传递到队列中的第一个进程。 同时,一个进程会检查它前面进程的per-processosr标志位,以判断是否轮到自己了。Wndows定义了很多全局的QS。

  

                  图2 全局Queued Spinlocks

  

  ● 多处理器环境中,内核外的可执行程序同样需要同步对全局数据结构的访问。比如,内存管理器唯一的页帧数据库。

  ● 当spinlock不适用时的几种同步机制:①Kernel dispatcher objects、②Fast mutexes and guarded mutexes、③Pushlocks和④Executive resources。

  ● Windows支持的几种用户模式下的锁原子操作:①Condition variables、②Slim Reader-Writer Locks、③Run-once intialization和④Critical sections。

  ● Kernel Dispatcher Object:内核会以内核对象的形式提供额外的同步机制给执行程序,这些内核对象的集合即是Dispatcher Objects。线程通过对待内核调度对象的句柄来实现同步。内核会将该线程置于等待状态。任何时刻,内核调度对象都有两种状态:signaled状态和nonsignaled状态(具体对象的signaled状态定义是不同的)。

              表1 5种内核调度对象

Object Data Type Description
Event KEVENT Blocks a thread until some other thread detects that an event has occurred
Semaphore KSEMAPHORE Used instead of an event when an arbitrary number of wait calls can be satisfied
Mutex KMUTEX Excludes other threads from executing a particular section of code
Timer KTIMER Delays execution of a thread for some period of time
Thread KTHREAD Blocks one thread until another thread terminates

● Fast mutexes又被称为executive mutexes,被广泛使用在设备驱动中,通常提供比mutex对象更好的性能,尽管它也是建立在Dispatcher Event Object上的。它只有在该fast mutex被竞争的情况下才执行wait操作,而标准mutex总是会尝试得到该互斥量。

● Guarded mutexes同fast mutex很相似,只不过是它使用了另一种同步对象(KGATE)而已。

● Executive resource是一种支持共享和互斥访问的同步机制。它常用文件系统驱动程序。

● Pushlock是另一种基于Gate对象的优化同步机制。Pushlock可以以共享或互斥的模式被获得。

Windows Internals学习笔记(五)Synchronization的更多相关文章

  1. Windows Internals学习笔记(八)IO系统

    参考资料: 1. <Windows Internals> 知识点: ● 当一个进

  2. Windows Internals学习笔记(七)Image Loader

    参考资料: 1. <Windows Internals> 2. Fibers 知识点: ● 当一个进程在系统上启动时,内核将创建一个进程对象来代表它,并执行各种内核相关的初始化任务.然而, ...

  3. Windows Internals学习笔记(六)Windows关键系统组件

    参考资料: 1. <Windows Internals> 2. Dependency Walker 3. Ntoskrnl.exe 4. Livekd的使用 5. WinDbg的使用(一) ...

  4. Windows Internals学习笔记(四)Trap Dispatching

    参考资料: 1. <Windows Internals> 知识点: ● 陷阱trap:它是一种处理器机制,用以在某一异常或中断出现时,捕捉该执行线程,并将其控制权转交到操作系统中某一固定位 ...

  5. Windows Internals学习笔记(二)系统架构

    参考资料: 1. <Windows Internals> 2. http://bestcbooks.com 3. Windows Drive Kit 4. Microsoft Window ...

  6. Windows Internals学习笔记(一)概念与工具

    参考资料: 1. <Windows Internals> 2. Windows Drive Kit 3. Microsoft Windows SDK 4. WDK下载地址 知识点: 1. ...

  7. Windows Internals学习笔记(三)Procdump的使用

    参考资料: 1. 下载地址 2. 使用示例

  8. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

  9. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

随机推荐

  1. 所谓完整的linux系统包括哪些部分呢?【转】

    本文转载自:http://www.eeskill.com/article/index/id/1358.html 简介:三部分:bootloader.linux kernel(linux内核).root ...

  2. HDU 1269:迷宫城堡(强连通)

    http://acm.hdu.edu.cn/showproblem.php?pid=1269 题意:确定是否是一个强连通图. 思路:裸的tarjan算法. #include <cstdio> ...

  3. 使用percona xtradb cluster的IST方式添加新节点

    使用percona xtradb cluster的IST(Incremental State Transfer)特性添加新节点,防止新节点加入时使用SST(State SnapShop Transfe ...

  4. Mongodb 和Redis 的相同点和不同点

    MongoDB和Redis都是NoSQL,采用结构型数据存储.二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同.MongoDB建议集群部署,更多的考虑到集群 ...

  5. ACM题目————Aggressive cows

    Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stal ...

  6. js 表单操作

    order.aspx 订单页-  order-detail.aspx订单确认页-  操作:order.aspx提交订单@1,跳转到order-detail.aspx页面,确认页面操作:返回上一步@2- ...

  7. TCP数据流稳定性--TCP分片,重组及乱序

    http://www.cnblogs.com/derekchen/archive/2009/07/15/1524415.html 1.IP分片的情况.IP软件包有一个[分片]和[重组]模块,一个IP数 ...

  8. hiho 第118周 网络流四·最小路径覆盖

    描述 国庆期间正是旅游和游玩的高峰期. 小Hi和小Ho的学习小组为了研究课题,决定趁此机会派出若干个调查团去沿途查看一下H市内各个景点的游客情况. H市一共有N个旅游景点(编号1..N),由M条单向游 ...

  9. Poj(1469),二分图最大匹配

    题目链接:http://poj.org/problem?id=1469 COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

  10. WPF中父子窗口的层次关系

    关于子窗体的层级关系总结一下哈,希望能对大家有些帮助 假设有这样两个窗体:RootWindow,SubWindow,在RootWindow中引发某事件而显示SubWindow 1,如果弹出窗体(比如S ...