文章目录
进程
进程描述
进程的定义
进程: 一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。
进程的组成
一个进程应该包括:
- 程序的代码
- 程序处理的数据
- 程序计数器中的值,指示下一条即将运行的程序
- 一组通用的寄存器的当前值,堆、栈
- 一组系统资源(如打开的文件)
总之,进程包含了正在运行的一个程序的所有状态信息。
进程与程序之间的联系:
- 程序是产生进程的基础
- 程序的每次运行构成不同的进程
- 进程是程序功能的体现
- 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序
进程与程序之间的区别:
- 进程是动态的,程序是静态的
程序是有序代码的集合;进程是程序的执行,进程有核心态和用户态 - 进程是暂时的,程序是永久的
进程是一个状态变化的过程;程序可长久保存 - 进程与程序的组成不同
进程的组成包括程序、数据和进程控制块(即进程状态信息)
进程的特点
进程的特点:
- 动态性:可动态地创建、结束进程
- 并发性:进程可以被独立调度并占用处理机运行;并发运行
- 独立性:不同的进程工作不互相影响(页表保证进程独立性的重要机制)
- 制约性:因访问共享数据/资源或进程间同步而产生制约
进程的控制结构
描述进程的数据结构:进程控制块(Process Control Block, PCB)
操作系统为每个进程都维护了一个PCB,用来保存与该进程有关的各种状态信息。
进程控制块: OS管理控制进程运行所用的数据集合
OS用PCB来描述进程的基本情况以及运行变化的过程,PCB是进程存在的唯一标志
使用进程控制块:
- 进程的创建:为该进程生成一个PCB
- 进程的终止:回收它的PCB
- 进程的组织管理:通过对PCB的组织管理来实现
PCB的组成
PCB包含以下三类信息:
- 进程标识信息
如本进程的标识,本进程的产生者标识(父进程标识);用户标识 - 处理机状态信息保存区。保存进程的运行现场信息:
用户可见寄存器,用户程序可以使用的数据,地址等寄存器
控制和状态寄存器,如程序计数器(PC),程序状态字(PSW)
栈指针,过程调用、系统调用、中断处理和返回时需要用到它 - 进程控制信息
调度和状态信息,用于操作系统调度进程并占用处理机使用。
进程间通信信息,为支持进程间的与通信相关的各种标识、信号、信件等,这些信息存在接收方的进程控制块中。
存储管理信息,包含有指向本进程映像存储空间的数据结构。
进程所用资源,说明由进程打开、使用的系统资源,如打开的文件等。
有关数据结构连接信息,进程可以连接到一个进程队列中,或连接到相关的其他进程的PCB。
PCB的组织方式
进程状态
进程的生命期管理
进程的生命期管理:
- 进程创建
引起进程创建的三个主要事件:
1、系统初始化时;
2、用户请求创建一个新进程;
3、正在运行的进程执行了创建进程的系统调用; - 进程运行
内核选择一个就绪的进程,让它占用处理机并执行 - 进程等待
在以下情况下,进程等待(阻塞):
1、请求并等待系统服务,无法马上完成;
2、启动某种操作,无法马上完成;
3、需要的数据没有到达。
进程只能自己阻塞自己,因为只有进程自身才知道何时需要等待某种事件的发生。 - 进程唤醒
唤醒进程的原因:
1、被阻塞进程需要的资源可被满足
2、被阻塞进程等待的事件到达
3、将该进程的PCB插入到就绪队列
进程只能被别的进程或OS唤醒 - 进程结束
以下四种情况,进程结束:
1、正常退出(自愿的);
2、错误退出(自愿的);
3、致命错误(强制性的);
4、被其他进程所杀(强制性的)。
进程状态变化模型
进程的三种基本状态:进程在生命结束前处于且仅处于三种基本状态之一。
不同系统设置的进程状态数目不同。
- 运行状态(Running):当一个进程正在处理机上运行
- 就绪状态(Ready):一个进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行
- 等待状态(又称阻塞状态(blocked)):一个进程正在等待某一事件而暂停运行。如等待某资源,等待输入/输出完成。
进程挂起模型
进程挂起:进程没有占用内存空间,处在挂起状态的进程映像在磁盘上。
与挂起相关的状态转换
挂起状态:
- 阻塞挂起状态(Blocked-suspend):进程在外存并等待某事件的出现;
- 就绪挂起状态(Blocked-suspend):进程在外存,但只要进入内存就可以运行;
状态队列
进程控制
进程切换(上下文切换)
进程切换:
- 暂停当前运行进程,从运行状态变成其他状态
- 调度另一个进程从就绪状态变成运行状态
进程切换的要求:
- 切换前,保存进程上下文
- 切换后,恢复进程上下文
- 快速切换
进程切换(上下文切换)图示:
进程控制块PCB:内核的进程状态记录
内核为每个进程维护了对应的进程控制块(PCB)
内核将相同状态的进程的PCB放置在同一队列
创建进程
加载和执行进程
等待和终止进程
子进程exit()结束之后,其资源被释放,但是其PCB仍然存在,需要父进程来进行释放,所以需要wait()
进程控制状态
Zombie僵尸状态(子进程exit()之后,父进程wait()之前的状态)
进程间通信
进程互斥与同步
死锁
线程
线程定义
线程是比进程更小的单元,用于解决并发进行且能数据共享。
线程 = 进程 - 共享资源
线程的优点:
- 一个进程中可以同时存在多个线程
- 各个线程之间可以并发进行
- 各个线程共享地址空间和文件等资源
线程的缺点:
- 一个线程崩溃,会导致其所属进程的所有线程崩溃
线程与进程的比较
线程的实现
主要有三种线程实现方式:
- 用户线程:在用户空间实现
- 内核线程:在内核中实现
- 轻量级进程:在内核中实现,支持用户线程
用户线程
内核线程