(2)线程的实现 ·用户级线程的实现方法 若有关线程的管理工作都是由运行在用户空间的应用程序完成,那么这样的线程称 为“用户级”线程。完成线程管理的应用程序,称为“线程库”,它将被系统中的所有 用户程序共享使用。 。这时的一切活动都是针对同一个进程发生的,且都发 生在用户空间,系统一点也感知不到这些活动的存在。这时 用户空间 的系统内核,只是以进程为单位管理和调度进程,指定其所 线程库 处的状态(就绪、运行、阻塞)。 。内核级线程的实现方法 内核空间 进程- 若果有关线程的管理工作都由内核完成,用户空间 运行在 里没有任何进行线程管理的程序,只是向应用程序提供 用户态◆ 相应的系统调用和应用程序编程接口,以便用户程序可 的线程 以创建、执行、撤消线程。那么称为“内核级”线程。 用户空间 。采用这种方法,用户程序的所有线程都在一个进管理在 程内。内枝为该进程以及内部的每个线程(深色圆圈) 内核空间 维护上下文信息,调度在内核基于线程架构的基础上完 成,线程运行则在用户空间进行。 进程-
若有关线程的管理工作都是由运行在用户空间的应用程序完成,那么这样的线程称 为“用户级”线程。完成线程管理的应用程序,称为“线程库”,它将被系统中的所有 用户程序共享使用。 (2) 线程的实现 . 用户级线程的实现方法 这时的一切活动都是针对同一个进程发生的,且都发 生在用户空间,系统一点也感知不到这些活动的存在。这时 的系统内核,只是以进程为单位管理和调度进程,指定其所 处的状态(就绪、运行、阻塞)。 . 线程库 用户空间 内核空间 进程 P 线程 用户空间 内核空间 进程 P 运行在 用户态 的线程 管理在 核心态 的线程 . 内核级线程的实现方法 若果有关线程的管理工作都由内核完成,用户空间 里没有任何进行线程管理的程序,只是向应用程序提供 相应的系统调用和应用程序编程接口,以便用户程序可 以创建、执行、撤消线程。那么称为“内核级”线程。 . 采用这种方法,用户程序的所有线程都在一个进 程内。内核为该进程以及内部的每一个线程(深色圆圈) 维护上下文信息,调度在内核基于线程架构的基础上完 成,线程运行则在用户空间进行
(3)进程与线程的比较 单线程进程模式 单线程进程模式里,与进程有关的是进程控制块和用户的虚拟地 址空间:与线程有关的是用户堆栈和内核堆栈。当运行在用户空间时, 进程 用户 控制块 堆栈 利用用户堆栈记录和保护运行环境,若运行在内核空间,则用内核堆栈记 录和保护运行环境。 用户 内核 。在多线程进程模式里,与进程有关的仍是进程控制块和用户的虚 地址 空间 堆栈 拟地址空间:各线程都有自己的用户堆栈和内核堆栈,以便各自运行。 若运行在用户空间,则用自己的用户堆栈记录和保护运行环境:若运行 在内核空间,则用自己的内核堆栈记录和保护运行环境。 ·进程和线程间的不同 多线程进程模式 1)进程是拥有资源的基本单位,线程则是程序执 行的基本单位。 线程 线程 线程 2)不同进程的地址空间相互独立,同一进程的各 进程 线程 线程 线程 线程共享同一个地址空间。 控制块 控制块 控制块 控制块 3)不同进程间的通信,须使操作系统提供的进程 用户 通信机制。同一进程各线程间的通信,可直接通过访问 地址 户 空间 堆栈 堆栈 堆栈 共享的进程地址空间实现。 4)不同进程间的调度切换,系统要花费很大开销: 同一进程的线程间切换,无须转换地址空间。 内核 内核 内核 堆栈 堆栈 堆栈 )多个进程间可并发执行,多个线程间也可并发 执行
多个进程间可并发执行,多个线程间也可并发 执行。 不同进程间的调度切换,系统要花费很大开销; 同一进程的线程间切换,无须转换地址空间。 不同进程的地址空间相互独立,同一进程的各 线程共享同一个地址空间。 不同进程间的通信,须使操作系统提供的进程 通信机制。同一进程各线程间的通信,可直接通过访问 共享的进程地址空间实现。 进程是拥有资源的基本单位,线程则是程序执 行的基本单位。 (3) 进程与线程的比较 . 单线程进程模式里,与进程有关的是进程控制块和用户的虚拟地 址空间;与线程有关的是用户堆栈和内核堆栈。当运行在用户空间时, 利用用户堆栈记录和保护运行环境;若运行在内核空间,则用内核堆栈记 录和保护运行环境。 单线程进程模式 进程 控制块 用户 堆栈 内核 堆栈 多线程进程模式 进程 控制块 用户 地址 空间 线程 控制块 用户 堆栈 内核 堆栈 线程 用户 地址 空间 线程 控制块 用户 堆栈 内核 堆栈 线程 线程 控制块 用户 堆栈 内核 堆栈 线程 在多线程进程模式里,与进程有关的仍是进程控制块和用户的虚 拟地址空间;各线程都有自己的用户堆栈和内核堆栈,以便各自运行。 若运行在用户空间,则用自己的用户堆栈记录和保护运行环境;若运行 在内核空间,则用自己的内核堆栈记录和保护运行环境。 . . 进程和线程间的不同 1) 2) 3) 4) 5)
2.Windows XP线程的状态及状态变迁 Windows XP里,进程仍有就绪、运行、等待三种基本的状态。线程可有六种可能 的状态:就绪、备用、运行、 等待、转换和终止。 可运行 选择运行 切换 。就绪:这种线程已获得除 备用 处理机外所需的资源,因此可 被调度执行。 就绪 运行 ·备用:这种线程已被选 终止 为下一次在$MP的一个特定处 资源可用 抢占 理器上运行。该线程等待,直 到那个处理器可用。若备用线 不可运行 解除阻塞恢 程的优先级足够高,正在那个 复资源可用 处理器上运行的线程就可能被 转换 等待 终止 备用线程抢占。 解除阻塞 ·运行:拥有处理器的线 资源不可用 阻塞挂起 程,处于运行状态。 。等待:一个运行的线程,因某一事件(如O)而被阻塞,则进入等待状态。 ·转换:当处于等待状态的线程所等待的条件已经得到满足、但它所需要的资源此时 还不可能满足时,那么就转为转换状态。 ·终止:一个线程执行完毕或者被另一个线程撤销,它就成为终止状态
2. Windows XP线程的状态及状态变迁 Windows XP里,进程仍有就绪、运行、等待三种基本的状态。线程可有六种可能 的状态:就绪、备用、运行、 等待、转换和终止 。 . 切换 可运行 备用 就绪 运行 转换 等待 终止 终止 阻塞/挂起 解除阻塞 资源不可用 资源可用 选择运行 抢占 解除阻塞/恢 复资源可用 不可运行 . 就绪:这种线程已获得除 处理机外所需的资源,因此可 被调度执行。 . 备用:这种线程 已被选 为下一次在SMP的一个特定处 理器上运行。该线程等待,直 到那个处理器可用。若备用线 程的优先级足够高,正在那个 处理器上运行的线程就可能被 备用线程抢占。 . 运行:拥有处理器的线 程,处于运行状态。 . 等待:一个运行的线程,因某一事件(如I/O)而被阻塞,则进入等待状态。 . 转换:当处于等待状态的线程所等待的条件已经得到满足、但它所需要的资源此时 还不可能满足时,那么就转为转换状态。 . 终止:一个线程执行完毕或者被另一个线程撤销,它就成为终止状态
。7.1.3 Windows XP的线程调度 ·Windows XP处理机调度的对象是线程,进程只以资源和运行环境提供者的身份出 现。实施的是基于优先级的、抢占式的多处理机调度策略。调度时,只针对线程队列进 行,不考虑被调度线程属于哪一个进程。通常,一个线程可安排在任何可用处理机上运 行,但也可以限制只在指定的处理机(称为“亲合处理机”)上运行。 。引起线程调度的情况:一个线程进入就绪状态:一个线程运行的时间片到时:一 个线程的优先级被改变:一个运行线程改变其对亲合处理机的要求。 1.Windows XP进程的优先级 .在Windows XP里,进程可有四种优先级:实时、高、普通以及空闲。这四种优先 级的默认取值是:24、13、7/9、4。 ()实时优先级主要适用于核心态的系统进程,它们执行着存储器管理、高速缓存 管理、本地和网络文件系统、甚至设备驱动程序等。 (②)高优先级是为一些必须及时得到响应的进程设置的。 (3)用户进程创建时,都被默认赋予普通优先级。Windows XP根据进程是在前台还 是后台运行,给予9或7的优先级。 (4)空闲优先级是专为系统空闲时运行的进程设置的。具有空闲优先级的进程,是 那些在计算机无事可做时才去做的进程的优先级
实时优先级主要适用于核心态的系统进程,它们执行着存储器管理、高速缓存 管理、本地和网络文件系统、甚至设备驱动程序等。 • 7.1.3 Windows XP的线程调度 Windows XP处理机调度的对象是线程,进程只以资源和运行环境提供者的身份出 现。实施的是基于优先级的、抢占式的多处理机调度策略。调度时,只针对线程队列进 行,不考虑被调度线程属于哪一个进程。通常,一个线程可安排在任何可用处理机上运 行,但也可以限制只在指定的处理机(称为“亲合处理机”)上运行。 引起线程调度的情况:一个线程进入就绪状态;一个线程运行的时间片到时;一 个线程的优先级被改变;一个运行线程改变其对亲合处理机的要求。 1. Windows XP进程的优先级 . 在Windows XP里,进程可有四种优先级:实时、高、普通以及空闲。这四种优先 级的默认取值是:24、13、7/9、4。 高优先级是为一些必须及时得到响应的进程设置的。 用户进程创建时,都被默认赋予普通优先级。Windows XP根据进程是在前台还 是后台运行,给予9或7的优先级。 . . (1) (2) (3) (4) 空闲优先级是专为系统空闲时运行的进程设置的。具有空闲优先级的进程,是 那些在计算机无事可做时才去做的进程的优先级
2.Windows XP线程的优先级 .在Windows XP里,一旦线程被创建,就继承所属进程的优先级,在运行过程中又有 自己的优先级。线程优先级被分为三个部分:16个实时线程优先级(16~31):15个可 变线程优先级(1~15):1个系统线程优先级(0)。 。进程只能有单个优先级取值,称其为基本优先级。进程里的线程,除了仍然有所属 进程的基本优先级外,还有运行时的当前优先级。线程的当前优先级,随占用CPU时间 的长短等因素,会不断地得到调整。 3.线程时间的配额 线程时间的配额,即时间片,但它不是时间的长度值,而是一个配额单位的整数。 每个线程都有代表本次运行最大时间长度的时间配额。一个线程有可能在没有用完它的 时间配额时,被其他线程所抢先。 每次产生时钟中断,中断服务程序就从线程时间配额中减一个固定值。一个线程用 完自己的时间配额后,系统一方面会判断是否需要降低该线程的优先级,另一方面就去 查找是否有其他更高优先级的线程等待运行,并重新开始调度。 。线程运行时的时间配额,是由用户在注册时指定的。注册项由三个部分构成:“时 间配额长度”,“前后台变化”,以及“前台线程时间配额的提升”。系统根据这三个 取值,决定线程运行时的时间配额
2. Windows XP线程的优先级 在Windows XP里,一旦线程被创建,就继承所属进程的优先级,在运行过程中又有 自己的优先级。线程优先级被分为三个部分:16个实时线程优先级(16~31);15个可 变线程优先级(1~15);1个系统线程优先级(0)。 . 进程只能有单个优先级取值,称其为基本优先级。进程里的线程,除了仍然有所属 进程的基本优先级外,还有运行时的当前优先级。线程的当前优先级,随占用CPU时间 的长短等因素,会不断地得到调整。 . 3. 线程时间的配额 . 线程运行时的时间配额,是由用户在注册时指定的。注册项由三个部分构成:“时 间配额长度” , “前后台变化”,以及“前台线程时间配额的提升”。系统根据这三个 取值,决定线程运行时的时间配额。 线程时间的配额,即时间片,但它不是时间的长度值,而是一个配额单位的整数。 每个线程都有代表本次运行最大时间长度的时间配额。一个线程有可能在没有用完它的 时间配额时,被其他线程所抢先。 . 每次产生时钟中断,中断服务程序就从线程时间配额中减一个固定值。一个线程用 完自己的时间配额后,系统一方面会判断是否需要降低该线程的优先级,另一方面就去 查找是否有其他更高优先级的线程等待运行,并重新开始调度。