2012-11-13 28 views
0

我知道内核可以通过自旋锁方法同步进程。但是,当它涉及到一个处理器时,它是如何做到的?它如何使用同步对象来确保互斥?监视器,互斥锁和信号量使用的同步级别(执行或内核)

是行政人员级别的信号量吗?内核如何在这里发挥作用?

互斥锁是否仅在内核级别实现?当资源空闲时,他们不会发出信号或消息。

+0

用户级同步对象从哪里获得它们的功能? – user1261710

回答

1

你有几个问题在这里:

据我所知,内核可以通过 自旋锁的方法同步过程。但是,当它涉及到一个处理器时,它如何做到这一点?它如何使用同步对象来确保互斥 排除?

在单处理器机器,获取自旋锁简单地升高至> DISPATCH_LEVEL的IRQL - 在这种升高的IRQL一个线程不能被抢占,那么同步得到保证。

是行政人员级别的信号量吗?内核如何在这里发挥 ?

信号量,互斥量,(和大多数等待的对象,就此而言)是Kernel Dispatch Objects。这些对象由内核实现,并通过由KERNEL32.DLL(CreateEvent/Mutex/Semaphore,et.al.)导出的各种函数提供给用户模式应用程序。另外,通过调度线程等待和唤醒正在等待同步对象的线程,“内核发挥作用”。

互斥量仅在内核级别实现吗?

互斥对象确实是内核调度对象(KMUTEX)。互斥对象在未拥有时发出信号。当一个线程获得一个互斥锁时,状态转到非信号状态,这意味着任何其他尝试获取它的线程都将进入等待状态,直到获取互斥锁或等待超时。

有关内核调度程序对象以及Windows同步的更多详细说明,请查看最新版本的“Windows Internals” - 每个Windows开发人员都应该在他们的桌面上有一份副本,恕我直言。

0

'当资源空闲时,它们不会发出信号或消息' - 确定它们是 - 它们是线程间信号机制!当受保护的资源被释放时,等待互斥体的线程被发信号并准备就绪,因此获取互斥体。

自旋锁通常不在单核处理器上使用 - 没有意义。 TBH,自旋锁在多核和群集系统上也需要非常小心,只要它们的使用不会适得其反。

+0

大多数软件并不专用于多核或单核系统,因此您不会有基于此的不同版本 – SomeWittyUsername