重点
进程和线程的各个状态,以及相互的切换。进程的组成,PCB的组织形式。
进程
进程的定义
程序的一次执行过程。
进程的特征
- 结构性
- 并发性
- 独立性
进程的基本状态
进程的三个基本状态分别是:就绪状态、运行状态和阻塞状态。
就绪状态
进程在内存中已经具备执行条件,等待分配处理器。多个处于就绪状态的进程可以以队列方式组织,称为就绪队列。运行状态
进程已经被分配处理器,并且正在执行。在单处理器系统中,一个时刻只有一个进程处于运行状态。阻塞状态
当正在运行的程序由于等待某事件的完成而不能继续执行,便转换到阻塞状态。
完整的状态:加上创建、结束和挂起
挂起是把内存中暂时不能或不需要运行的进程从内存换到外存。其和阻塞的区别在于阻塞是应用程序主动的,而挂起是操作系统执行的。
挂起的原因:
1. 系统资源的需要
2. 解决竞争或消除故障
3. 终端用户暂停程序运行
4. 父进程暂停
5. 定期执行的程序在空闲时间
进程的描述
进程包括进程控制块(PCB)、程序块、数据块和系统堆栈。
我们使用进程控制块来描述进程相关参数。其具有如下信息:
1. 进程标志信息 PID
2. 计算机状态信息
3. 进程调度信息
4. 进程控制信息
进程控制块的组织形式分为链接方式和索引方式,其根据进程状态分别建立就绪、阻塞等状态的PCB表。
链接方式通过链表实现,每次只需要在PCB表中添加块就可以。缺点是系统如果要查找一个PCB,需要O(n)时间。
而索引方式用索引表来储存对应进程的id,修改PCB状态只需要在索引表中添加或删除就好。
索引表可以用树来维护,感觉会快一点。
进程的控制
进程创建
1) 命名进程:为进程设置进程标识符
2) 申请一个新的PCB
3) 确定优先级
4) 分配内存空间并建立需要的链接指针
5) 分配其他资源
6) 初始化PCB
7) 如果可以,插入就绪队列
8) 通知操作系统进程结束
1) 通过结束进程的标识符,即PID找到对应PCB,并释放其资源
2) 将其从进程队列中删除,并释放PID
3) 处理子进程可能的原因:
○ 正常结束
○ 操作异常RE
○ 时间异常TLE
○ 资源竞争
○ 内存不足MLE
○ 父进程或操作系统结束进程阻塞和唤醒
1) 停止进程在处理器中执行,并修改、保存相应信息到PCB
2) 将PCB加入相应阻塞队列
3) 进程调度程序转跳到其它进程程序阻塞是进程自发的行为,可能是因为等待输入的情况。而唤醒则必须操作系统接受到中断,才能被唤醒。
进程挂起和激活
内核的模式
和操作系统有关的模式包括系统模式、控制模式和内核模式。如果用户程序中调用了操作系统服务,则处理器的模式会从用户模式切换到内核模式。
和用户有关的模式是较低特权模式。在内核模式下,系统软件对处理器和所有指令、寄存器、存储器拥有全部控制权。
系统中设置了一个标志位显示当前处理器所处的模式,该标志位因系统对事件的响应而改变。如果用户程序中调用了操作系统服务,这处理器的模式会从用户模式变为内核模式。服务结束后又变为用户模式。
操作系统的运行
1) 在进程以外运行
2) 在用户进程中运行
3) 作为独立进程运行
Unix操作系统的进程
- 9个进程状态
- 多级进程关系
线程
线程是在进程基础上提出来的,是进程的一部分。这样,进程只作为资源分配的单位,而线程作为调度的基本单位。线程切换比进程切换更快,开销更小。
在一个进程中允许多个并发执行的线程,同一进程的线程共享进程的内存空间和资源,但不独立拥有资源。
线程的特征
- 结构性
- 并发性
- 共享性
和进程的唯一不同是线程具有共享性,而进程具有独立性。
线程的状态
有:新建状态、就绪状态、运行状态、阻塞状态、结束状态
没有挂起状态的原因是:进程的所有线程共享进程的地址空间(在Java中是共享方法区和堆),如果要把线程置换出内存,那么相当于把整个进程都置换出内存。
线程库
在支持线程的操作系统中,通过线程库来实现对线程的控制。其分为用户空间的线程库、运行在内核空间的线程库和高级语言线程库。
运行在用户空间的线程库
优点是:总是运行在用户空间,不存在内核的开销、用户空间和内核之间状态切换的开销。调度算法可以由应用程序自己选择,可以运行在任何操作系统上。
缺点是:当一个线程阻塞时,整个进程也被阻塞。在多处理器环境下,不同线程可能在多个处理器执行,如果此时被阻塞,处理器效率极低。运行在内核空间的线程库
优缺点正好和用户空间的线程库相反。高级语言线程库
相当于一个可定制的中间层。
线程模型
线程库和线程模型我都不是很懂,主要没有具体的例子来帮助我理解。我这里简单抄一下定义。
运行空间线程库使用一对一模型。用户空间线程库使用多对一模型。
具体模型见P52。
多对多模型吸收了一对一和多对一模型的有点,克服了缺点。
这里是我的blog:有更多总结分享。排版可能也会更好看一点=v=
https://endlesslethe.com/operating-system-course-tutorial-1.html