Windows内核学习笔记(五)
一点定义 作业(job) 是由执行体支持的一种内核对象,它能够将一个或多个进程视为一个整体来进行管理和控制。管理程序借助 Windows API,能够对作业所使用的系统资源(包括 CPU 或内存)的诸多限制进行控制,比如用户模式 CPU 时间的限制、进程的处理器亲和性、工作集的最大值与最小值、虚拟内存的使用限制等。 迁程(fiber) 是一种用户线程,对于内核来说是不可见的,是由 kernel32.dll 来实现的。应用程序可以在一个线程环境中创建多个迁程,并且可以手动控制这些迁程的执行。迁程不会自动执行,应用程序需要明确地选择某个迁程来执行。一旦迁程开始运行,它会一直运行,直到它退出,或者它显式地切换到另一个迁程。 目前没有看到这俩的用处,先记录下来,像这种定义却没有实际接触的东西可不好背,记下来方便以后回顾 同步、自旋锁 Windows根据执行环境中的IRQL大于APC_LEVEL 或者等于PASSIVE_LEVEL,将同步机制分为“不依赖线程调度的同步机制”和“基于线程调度的同步机制”。 不依赖线程调度的同步机制主要是在IRQL的高优先级下执行的,通常用于中断处理程序和内核模式代码中,以确保在处理中断或执行关键内核代码时,不会被其他线程打断。常见的不依赖线程调度的同步机制包括: 自旋锁(Spin Lock):自旋锁用于在多个线程之间互斥的访问共享资源,本质上是一种忙等待(busy-wait),意思是线程会一直自旋(忙等待)直到锁可用为止,而不会被挂起等待。常使用在高IRQL下,因为此时是不允许切换线程的,使用自旋锁可以确保关键代码不会被其他线程打断。一些自旋锁扩展:执行体自旋锁(支持共享和独占的语义)、排队自旋锁(queued spin lock)和栈内排队自旋锁(in-stack queued spin lock)。 中断服务例程(ISR):ISR用于响应硬件中断,当硬件设备触发中断时,操作系统会立即执行ISR来处理中断。ISR运行在IRQL的高优先级下,不允许进行线程调度,以确保快速响应中断。 延迟过程调用(Deferred Procedure Call,DPC):DPC用于延迟执行一些代码块或处理程序,常与中断处理有关。当硬件设备触发中断时,操作系统会将中断服务例程(ISR) 用于快速响应中断,但有时需要执行一些耗时的操作,例如数据传输或资源释放,这时就会使用DPC来延迟执行这些操作。 另一种基于线程调度的同步机制:当一个线程的执行条件不满足时,该线程进入等待状态,系统将控制权交由其他满足执行条件但没有得到处理器资源的线程;以后,当该线程的执行条件满足时,它又有机会继续执行。这里的执行条件正是Windows提供的线程同步机制中的语义。Windows定义了统一的机制来支持各种线程同步原语:分发器对象(dispatcher object),其数据结构头部为DISAPATCH_HEADER。 ...