操作系统——进程
1、进程描述
1.1 进程的定义
- 一个具有独立功能的程序在一个数据集合上的一次动态执行过程
1.2 进程的组成
- 程序的代码
- 程序处理的数据
- 程序计数器中的值,指示下一条运行的指令
- 一组通用的二级窜起的当前值,堆,栈
- 一组抽象资源
- 总之,进程包含了正在运行的一个程序的所有状态信息
1.3 进程与程序
- 联系
- 程序是产生进程的基础
- 程序的每次运行构成不同的进程
- 进程是程序功能的体现
- 通过多次执行,一个程序可对应多个进程
- 通过调用关系,一个进程可包含多个程序
- 区别
- 进程是动态的,程序是静态的
- 程序是有序代码的集合
- 进程是程序的执行,进程有核心态/用户态
- 进程是一个状态变化的过程
- 进程的组成包括程序、数据和进程控制块
1.4 进程的特点
-
动态性:可动态地创建
-
并发性:进程可以被独立调度并占用处理机运行
-
独立性:不同进程的工作不相互影响
-
制约性:访问共享数据/资源或进程同步而产生的问题
1.5 进程控制结构
- 进程控制块(PCB):描述进程的数据结构
- 操作系统为每个进程都维护了一个PCB,用来保存于该进程有关的各种状态信息
- 使用进程控制块
- 进程的创建:生成PCB
- 进程的终止:回收PCB
- 进程的组织管理
- PCB具体信息
- 进程标识信息
- 本进程的标识
- 本进程的产生者标识
- 用户标识
- 处理机状态信息保护区,保存进程的运行现场信息
- 用户可见寄存器:用户程序可以使用数据,地址等寄存器
- 控制和状态寄存器:如程序计数器(PC),程序状态字(PSW)
- 栈指针:过程调用/系统调用/中断处理和返回时需要
- 进程控制信息
- 调度和状态信息
- 进程间通信信息:进程间的与通信相关的各种标识、信号等
- 存储管理信息:指向本进程映像存储空间中的数据结构
- 进程所用资源
- 有关数据结构连接信息:进程可以连接到一个进程队列中,或连接到相关的其它进程的PCB
- 进程标识信息
- PCB的组织方式
- 链表:同一状态的进程其PCB组成一个链表,如就绪链表、阻塞链表
- 索引表:同一状态的进程归入一个index表中(由index指向PCB)
2、进程状态转换
2.1 进程的生命周期
- 进程创建
- 系统初始化时
- 用户请求创建一个新进程
- 正在运行的进程执行了创建进程的系统调用
- 进程就绪
- 进程运行
- 选择一个就绪的进程,并让它占用处理机并执行
- 进程等待
- 请求并等待系统服务(CPU读取硬盘文件),无法马上完成
- 启动某种操作,无法马上完成
- 需要的数据没有到达
- 注意:进程只能阻塞自己
- 进程唤醒
- 被组测进程需要的资源可被满足
- 被组测进程等待的事件到达
- 将该进程的PCB插入到队列
- 注意:进程只能被别的进程或操作系统唤醒
- 进程结束
- 正常退出(自愿的)
- 错误退出(资源的)
- 致命错误(强制性的)
- 被其它进程所杀(强制性的)
2.2 进程状态转换
-
基本状态
-
运行
-
等待
-
阻塞
-
-
进程其它基本状态
- 创建状态:正在创建,还未进入到就绪
- 结束状态:正在完成结束处理过程,还未完全消失
-
状态转换图
- 用时间片来控制运行态与就绪态的转换
- Runing -> Blocked:当进程请求某样东西且必须等待时
- Blocked -> Ready:当进程要等待某事件到来时
2.3 进程挂起
-
Why?更合理地充分利用系统资源。处在挂起状态的进程映像在磁盘上
-
挂起状态
- 阻塞挂起状态:进程在外存上并等待某事件的出现
- 就绪挂起状态:进程在外村,但只要进入内存即可运行
-
与挂起相关状态转化
- 挂起:把一个进程从内存转到外存
- 阻塞到阻塞挂起
- 就绪到就绪挂起
- 运行到就绪挂起
- 在外存转化
- 阻塞挂起到就绪挂起
- 解挂/激活
- 就绪挂起到就绪
- 阻塞挂起到阻塞
- 挂起:把一个进程从内存转到外存
-
问题:PCB如何帮助完成进程的调度?
-
状态队列
- 不同状态分别用不同的队列来标识
- 每个进程的PCB都根据它的状态加入到相应的队列中
3、线程管理
3.1 为什么使用线程
- 线程之间可以并发的执行
- 线程之间共享相同的地址空间
3.2 线程
- 进程当中的一条执行流程
- 线程又有自己的信息控制块(TCB)
- 进程下的线程在同一张页表中,具有相同地址空间
- 优点
- 一个进程中可以同时存在多个线程
- 各个线程之间可以并发地执行
- 各个线程之间可以共享地址空间和文件等资源
- 缺点
- 一个线程崩溃,会导致其所属进程的所有线程崩溃
3.3 与进程的比较
- 进程是资源分配单位,线程是CPU调度单位
- 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈
- 线程同样具有三种基本状态,具有状态转换
- 线程能减少并发执行的时间和空间开销
- 线程创建时间短
- 线程终止时间短
- 同一进程内各线程切换时间短
- 同一进程内各线程共享内存和文件资源,可直接进行不通过内核的通信
3.4 线程的实现
-
用户线程
-
在用户空间进行,操作系统无法看见
-
由应用系统,线程库管理
-
缺点
- 用户管理库没有调动CPU的权利,所以,如何一个线程发起系统调用而阻塞,则整个进程等待
- 在用户线程中,当一个线程开始运行后,除非它主动地交出CPU地使用权,否则它所在的进程中的其它线程无法执行
- 在用户线程中,多线程时间片较少,执行会较慢
-
-
内核线程
- 在内核中进行,操作系统可以看见
- 由操作系统的内核来完成线程的创建、终止和管理
- 缺点
- 开销大,需要在用户线程和内核线程之间转换
-
轻量级进程
- 一个进程可拥有一个或多个轻量级线程
拓展
- 程序 = 算法 + 数据结构
- 线程 = 进程 - 共享资源