Windows内核学习笔记(六)
常见的分发器对象 事件(event):用于线程之间的通信和同步,它有俩种状态:已触发和未触发。事件可以用于线程等待某个事件发生,或者通知其他线程事件的发生。 互斥量(Mutex)(或互斥锁):互斥量用于确保在同一时刻只有一个线程能够访问共享资源。它允许线程请求锁定,当一个线程获得锁定时,其他线程必须等待,直到锁被释放。 信号量(Semaphore):用于控制对共享资源的并发访问。它维护一个计数器,允许指定数量的线程同时访问资源。 条件变量(Condition Variable):条件变量用于线程之间传递信号和等待特定条件的发生。通常与互斥量一起使用,用于等待某个条件满足后执行操作。 读写锁(Read-Write Locks):读写锁用于控制对共享资源的读和写,它允许多个线程同时读取资源,但只允许一个线程写入资源。 计数器对象(Counting Semaphore):一种特殊的信号量,它可以增加和减少计数器的值,通常用于跟踪资源的可用性或完成的任务数量。 关于互斥锁和自旋锁:互斥锁基于线程调度,而自旋锁不依赖线程调度;还有一个区别是线程尝试获取锁时,如果该锁被占用,线程是被挂起还是一直自旋;互斥锁适用于长时间的临界区和资源竞争激烈的情况,而自旋锁适用于非常短暂的临界区。 Windows在上述基础上,实现了同步语义更为丰富的一些同步机制,包括:快速互斥体(fast mutex)、守护互斥体(guarded mutex)、执行体资源(executive resource)和推锁(push lock)。 一听又是历史,见过fastcall的都知道。 SSDT **系统服务描述表(System Services Descriptor Table,SSDT)**其在内核中的实际名称是 “KeServiceDescriptorTable”。 ...