Loading

复习笔记|第十五章 Windows进程和线程管理《操作系统原理教程》

参考教材:《操作系统原理教程(第4版)》刘美华 翟岩龙著

大纲问题回答(精简版)

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,信号量,等待,窗口,饥饿

posted @ 2023-08-07 14:00  LateSpring  阅读(160)  评论(0编辑  收藏  举报