4.线程调度的管理 进程1 进程2 Windows XP用张所 线程调度器 就绪队列表 谓的“线程调度器就绪 线程到 线程2 线程1 线程2 线程n 队列”表、就绪位图、 31 空闲位图来管理有关线 30 程的调度。 29 5.Windows XP线程 调度遵循的原则 2 就绪位图 空闲位图 。相同优先级的就绪线 wMH HMWO 0 5n出 程排成先进先出队列,按 时间片轮转算法调度: 31 0 31 当一个线程变为就绪状态时,它可能立即投入运行,也可能排到相应优先级队列的 末尾等待: 。系统总是运行优先级最高的线程: 。当一个线程在属于自己的时间片里运行时,高优先级线程的到达会抢先执行,从而 打断原先线程的执行: 。在多处理机系统中,多个线程可以并行运行
4. 线程调度的管理 Windows XP用张所 谓的“线程调度器就绪 队列”表、就绪位图、 空闲位图来管理有关线 程的调度。 . 31 30 29 线程调度器 就绪队列表 2 1 0 进程1 进程2 线程1 线程2 线程1 线程2 线程n 31 0 就绪位图 31 空闲位图 5. Windows XP线程 调度遵循的原则 . 在多处理机系统中,多个线程可以并行运行。 相同优先级的就绪线 程排成先进先出队列,按 时间片轮转算法调度; . 当一个线程变为就绪状态时,它可能立即投入运行,也可能排到相应优先级队列的 末尾等待; . 系统总是运行优先级最高的线程; . 当一个线程在属于自己的时间片里运行时,高优先级线程的到达会抢先执行,从而 打断原先线程的执行;
6.线程优先级的升与降 一个线程在时间配额使用完后,其优先级一般都会降低,以便给别的线程有投入 运行的机会。 。在/O操作完成、所等待的事件或信号量到来、前台线程等待结束、图形用户接口 线程被唤醒、以及提高处理机饥饿线程(指在就绪队列长期等待而一直没得到运行机会 的那种线程)的优先级时,Windows XP都以基本优先级为基点,提升该线程的优先级。 。线程优先级的提升,是 线程 运行一个 以基本优先级为基点的,而不优先级 时间配额 是基于线程的当前优先级。 降级后又运行 一个时间配额 。总结 等待结束 时间配额用完前被抢先 (I)Windows XP采用基于优先 提升优先级 运行剩余的时间配额 级的、可抢先调度策略调度线程。 一个线程投入运行后,就一直运行 下去,直到被具有更高优先级的线 基本优先级 基本优洗级 程所抢先,或者时间配额用完、请 求I/O、终止等情况发生。 一等待 (2)在线程的时间配额用完时, 时间 如果它是属于可变型的,那么它的 优先级会下降。不过,优先级绝不会降到它的基本优先级之下。当可变型线程从等待状 态解脱时,其优先级会被提升
在线程的时间配额用完时, 如果它是属于可变型的,那么它的 优先级会下降。不过,优先级绝不会降到它的基本优先级之下。当可变型线程从等待状 态解脱时,其优先级会被提升。 Windows XP采用基于优先 级的、可抢先调度策略调度线程。 一个线程投入运行后,就一直运行 下去,直到被具有更高优先级的线 程所抢先,或者时间配额用完、请 求I/O、终止等情况发生。 6. 线程优先级的升与降 在I/O操作完成、所等待的事件或信号量到来、前台线程等待结束 、图形用户接口 线程被唤醒、以及提高处理机饥饿线程(指在就绪队列长期等待而一直没得到运行机会 的那种线程)的优先级时,Windows XP都以基本优先级为基点,提升该线程的优先级。 一个线程在时间配额使用完后,其优先级一般都会降低,以便给别的线程有投入 运行的机会。 . . 线程优先级的提升,是 以基本优先级为基点的,而不 是基于线程的当前优先级。 . 基本优先级 等待 等待结束 提升优先级 运行一个 时间配额 降级后又运行 一个时间配额 运行剩余的时间配额 基本优先级 时间配额用完前被抢先 线程 优先级 时间 . 总结 (1) (2)
。7.1.4 Windows XP的同步机制 1.等待函数 Windows XP提供两个同步对象的等待函数:WaitForSingleObject::在指定时间内 等待指定的对象为可用;WaitForMultipleObjects::在指定时间内等待多个对象为可用。 ·当线程调用等待函数时,函数会检查要求等待的条件是否已得到满足。若条件不 满足,等待函数就会使调用的线程阻塞自身的执行,进入等待状态。处于等待条件满足 的时候,该线程不会占用处理器的时间:在等待的条件满足后,等待函数才会返回。 2.同步对象 .互斥对象Mutex:是Windows XP中用来实现线程互斥的对象,它相当与一个用于 互斥的信号量。由于互斥对象在任何时刻只能被一个线程使用,因此可用来协调线程间 对共享资源的访问。 ,Windows XP的信号量对象:是一个计数信号量,相当于用来管理有若干数量的某 种资源的信号量,它可以在多个进程中被线程共享。 。事件对象:相当于是一个“触发器”,可用来通知一个或多个线程某事件的发生。 Windows XP里提供的事件对象API函数有: (I)CreateEvent:.创建一个事件对象; (2)OpenEvent:得到一个已创建的事件对象,以方便对事件对象的后续访问: (3)SetEvent/PulseEvent::设置指定事件对象为可用对象: (4)ResetEvent:设置指定事件对象为不可用状态
• 7.1.4 Windows XP的同步机制 1. 等待函数 Windows XP提供两个同步对象的等待函数:WaitForSingleObject:在指定时间内 等待指定的对象为可用;WaitForMultipleObjects: 在指定时间内等待多个对象为可用。 . 当线程调用等待函数时,函数会检查要求等待的条件是否已得到满足。若条件不 满足,等待函数就会使调用的线程阻塞自身的执行,进入等待状态。处于等待条件满足 的时候,该线程不会占用处理器的时间;在等待的条件满足后,等待函数才会返回。 . 2. 同步对象 互斥对象Mutex:是Windows XP中用来实现线程互斥的对象,它相当与一个用于 互斥的信号量。由于互斥对象在任何时刻只能被一个线程使用,因此可用来协调线程间 对共享资源的访问。 . . Windows XP的信号量对象:是一个计数信号量,相当于用来管理有若干数量的某 种资源的信号量,它可以在多个进程中被线程共享。 . 事件对象:相当于是一个“触发器”,可用来通知一个或多个线程某事件的发生。 Windows XP里提供的事件对象API函数有: (1) (3) (2) CreateEvent:创建一个事件对象; OpenEvent:得到一个已创建的事件对象,以方便对事件对象的后续访问; SetEvent/PulseEvent:设置指定事件对象为可用对象; (4) ResetEvent:设置指定事件对象为不可用状态
7.2 Vindows XP的存储管理 7.2.1 Windows XP进程的空间布局 1.虚拟地址空间 0x00000000 Windows XP采用的是32位虚拟地址结 64KB区域,用- 于空指针赋 构。因此,每个用户进程最大的虚拟地址 值(不可访问】 空间可以是22=4GB。 2GB的用户地址 2.虚拟地址空间的布局 空间(可使用)】 ,对于4GB这个空间,默认的布局是每64K区域,用 个用户进程占有其中的2GB,作为自己的私值不得嗣) 于坏指针赋 有地址空间,余下的2GB是所有进程共用的 0x80000000 操作系统地址空间。 默认的虚拟地址空间,由四个区域组成: 2GB的系统地址 0x000000000x0000FFFF: 空间(不可访问) 0x00010000~0x7FFEFFFF; 0x7FFF0000~0x7FFFFFFF: 0x80000000~0xFFFFFFFF 0xFFFFFFFF
• 7.2.1 Windows XP进程的空间布局 1. 虚拟地址空间 Windows XP采用的是32位虚拟地址结 构。因此,每个用户进程最大的虚拟地址 空间可以是2 32 = 4GB。 7.2 Windows XP的存储管理 对于4GB这个空间,默认的布局是每 个用户进程占有其中的2GB,作为自己的私 有地址空间,余下的2GB是所有进程共用的 操作系统地址空间。 2. 虚拟地址空间的布局 2GB的用户地址 空间(可使用) 2GB的系统地址 空间(不可访问) 0x00000000 0x80000000 0xFFFFFFFF 64KB区域,用 于空指针赋 值(不可访问) 64KB区域,用 于坏指针赋 值(不可访问) . . 0x80000000~0xFFFFFFFF。 默认的虚拟地址空间,由四个区域组成: 0x00000000~0x0000FFFF; 0x00010000~0x7FFEFFFF; 0x7FFF0000~0x7FFFFFFF;