复习笔记|第十五章 Windows进程和线程管理《操作系统原理教程》
大纲问题回答(精简版)
1. 管理进程和线程的数据结构:
执行体进程块EPROCESS、执行体线程块ETHREAD、内核进程块KPROCESS、 内核线程块KTHREAD。
struct EPROCESS{ P285
KPROCESS PCB; 内核进程块
ObjectTable; 进程的句柄表
PageDirectoryPte; 页目录页面的页表项32位
ImageFileName; 进程的可执行映像文件名
SectionObject; 指向可执行映像文件的区域对象
SectionBaseAddress; 该区域的基地址
PhysicalVadRoot; 物理VAD树的根
WorkingSetPage; 进程工作集页面
Peb; 位于进程私有地址空间的环境块
Win32Process; 指向由Windows子系统管理的进程区域,此值不为空,说明是GUI进程。
PriorityClass; 进程的优先级
ThreadListHead; 线程链表
ActiveProcessLock; 所有活动进程连接在一起
……
}
struct KPROCESS{
DISPATCHER_Header; 调度程序对象
DirectoryTableBase; 页目录表的物理地址
BasePriority; 基本优先级
……
}
struct ETHREAD
{
KTHREAD TCB;
StartAddress;
线程的起始地址
……
}
struct KTHREAD {
1. 核心栈的栈指针
2. 与调度和同步有关的信息(优先级、时间片、当前的状态、等待块列表等)
3. 与本线程有关的APC列表
}
2. 创建进程:
CreateProcess( );创建线程:CreateThread( )
CreateProcess主要流程
① 打开可执行文件 (.exe),创建一个区域对象,建立可执行文件与虚拟内存之间的映射关系。
② 创建执行体进程对象EPROCESS。
③ 创建一个主线程。
④ 通知Win32子系统,对新进程和线程进行一系列初始化。
⑤ 完成地址空间的初始化,开始执行程序。
3. 线程的7种状态,及其解释。
◆就绪,备用,运行,等待,传输,终止,初始化状态
①就绪状态(ready)。 表明线程可以被调度执行,线程在就绪队列中排队。
②备用状态(standby)。 处于备用状态的线程已经被选中,作为下一一个要运行的线程,已选择好执行的处理机,正等待描述表切换,以便进入运行状态。
③运行状态(running)。 处于系统中的每个处理机,只能有一个线程可以处于运行状态。④等待状态(waiting)。线程等待某个事件或者等待某个对象成为有信号状态。
⑤传输状态(transition)。 传输状态类似于就绪状态,但线程在等待时,它的核心栈被调到外存。当线程核心栈被调回主存时,线程变为就绪状态。
⑥终止状态( terminated)。线程执行完成时进入终止状态。
⑦初始化状态( initialized)。正在创建过程中的线程状态。
4. 线程调度:基于优先级的抢先式的多处理机调度系统。线程调度程序的数据结构:32个就绪线程队列、32位线程就绪队列位图、32位处理机空闲位图。
◼ 基于优先级的抢先式的多处理器调度系统,优先级相同时按时间片轮转。
◼ 线程调度时,不考虑线程属于哪个进程。
◼ 32个就绪队列。每个优先级对应一个。
◼ 32位掩码的就绪位图。每一位指示一个优先级就绪队列中是否有线程等待运行。
◼ 32位掩码的空闲位图。每一位指示一个处理机是否处于空闲状态。
5. 线程优先级的提升时机。
❖ 系统会提升线程的优先级,以改善性能。
1. I/O操作完成后的线程。
2. 信号量或事件等待结束的线程。
3. 前台进程中的线程完成一个等待操作。
4. 由于窗口活动而唤醒GUI线程。
5. 线程处于就绪状态超过一定时间,仍未能进入运行状态(处理器饥饿)。
大纲问题回答
1. 管理进程和线程的数据结构:(2)
执行体进程块EPROCESS、执行体线程块ETHREAD、内核进程块KPROCESS、 内核线程块KTHREAD。
eprocess, ethread, kprocess, kthread
struct EPROCESS{ P285
KPROCESS PCB; 内核进程块
ObjectTable; 进程的句柄表
PageDirectoryPte; 页目录页面的页表项32位
ImageFileName; 进程的可执行映像文件名
SectionObject; 指向可执行映像文件的区域对象
SectionBaseAddress; 该区域的基地址
PhysicalVadRoot; 物理VAD树的根
WorkingSetPage; 进程工作集页面
Peb; 位于进程私有地址空间的环境块
Win32Process; 指向由Windows子系统管理的进
程区域,此值不为空,说明是GUI进程。
PriorityClass; 进程的优先级
ThreadListHead; 线程链表
ActiveProcessLock; 所有活动进程连接在一起
……
}
struct KPROCESS{
DISPATCHER_Header; 调度程序对象
DirectoryTableBase; 页目录表的物理地址
BasePriority; 基本优先级
……
}
struct ETHREAD
{
KTHREAD TCB;
StartAddress;
线程的起始地址
……
}
struct KTHREAD {
1. 核心栈的栈指针
2. 与调度和同步有关的信息(优先级、时间片、当前的状态、等待块列表等)
3. 与本线程有关的APC列表
}
2. 创建进程:(1)
CreateProcess( );创建线程:CreateThread( )
CreateProcess主要流程
① 打开可执行文件 (.exe),创建一个区域对象,建立可执行文件与虚拟内存之间的映射关系。
② 创建执行体进程对象EPROCESS。
③ 创建一个主线程。
④ 通知Win32子系统,对新进程和线程进行一系列初始化。
⑤ 完成地址空间的初始化,开始执行程序。
3. 线程的7种状态,及其解释。(2)
◆就绪,备用,运行,等待,传输,终止,初始化状态
①就绪状态(ready)。 已具备所有运行的条件,只是未选好处理机;
②备用状态(standby)。 已选好处理机,等待描述表切换以运行;
③运行状态(running)。
④等待状态(waiting)。线程等待某个事件或者等待某个对象成为有信号状态。
⑤传输状态(transition)。 核心栈被调到外存的就绪状态;
⑥终止状态( terminated)。线程执行完成时进入终止状态。
⑦初始化状态( initialized)。正在创建过程中的线程状态。
注:多了备用状态和传输状态,等待状态类似于阻塞态
4. 线程调度:基于优先级的抢先式的多处理机调度系统。线程调度程序的数据结构:32个就绪线程队列、32位线程就绪队列位图、32位处理机空闲位图。(5)
◼ 基于优先级的抢先式多处理机调度系统,优先级相同时按时间片轮转。
◼ 线程调度时,不考虑线程属于哪个进程。
◼ 32个就绪队列。每个优先级对应一个。
◼ 32位掩码的就绪位图。每一位指示一个优先级就绪队列中是否有线程等待运行。
◼ 32位掩码的空闲位图。每一位指示一个处理机是否处于空闲状态。
5. 线程优先级的提升时机。(1)
❖ 系统会提升线程的优先级,以改善性能。
1. I/O操作完成后的线程。
2. 信号量或事件等待结束的线程。
3. 前台进程中的线程完成一个等待操作。
4. 由于窗口活动而唤醒GUI线程。
5. 线程处于就绪状态超过一定时间,仍未能进入运行状态(处理器饥饿)。
注:I/O,信号量,等待,窗口,饥饿