进程定义:
一个具有独立功能的程序在一个数据集合上的动态执行过程。
进程包括:
- 程序代码(对应具有独立功能的程序)
- 程序处理的数据(对应一个数据集合)
- 程序计数器(记录当前执行的指令)
- 一组通用寄存器的当前值,堆,栈。
- 一组系统资源(打开的文件等)
程序和进程的关系:
- 程序是进程的基础(对应一个具有独立功能的程序)
- 程序的每次执行构成不同的进程(对应动态执行过程,因为每个数据集合可能不同)
- 进程是程序功能的体现
- 一个程序可以对应多个进程;一个进程可以调用多个程序。
区别:
- 一静(代码的集合)一动(程序的执行,进程分为核心态和用户态)
- 一个短暂(进程则是状态变化的过程),一个长久(只要代码不丢,程序永远在)
- 组成不同,进程除了包含程序之外,还包括要处理的数据和进程控制块(上面说到的程序计数器,堆栈,PCB是进程存在的唯一标志)
进程的特点:
- 动态性:可动态地创建和结束进程
- 并发性:进程可以被独立调度并占用处理机运行。
- 独立性:进程是系统中独立存在的实体,拥有自己独立的资源和地址空间
-制约性: 因访问共享数据/资源或进程间同步而产生制约
进程控制块:
- 进程标识信息:一些代表进程的数据
本进程标识,父进程标识,用户标识 - 进程状态信息:表示进程当前状态的一些信息
用户可见寄存器:用户程序的数据,地址等的寄存器。
控制和状态寄存器:程序计数器,
栈指针:用于保存进程现场,过程调用/程序调用/程序中断/程序回复等都需要他 - 进程控制信息:控制进程的信息
- PCB的组织方式
不同状态的进程组成不同的链表,比如就绪链表,阻塞链表。
进程状态:
进程创建:
- 系统初始化
- 用户请求创建进程
- 正在执行的进程执行进程创建的系统调用
进程运行
内核选择一个就绪的进程占用处理机并执行
进程等待:
一般是进程自己阻塞自己,因为只有进程自己知道何时需要等待某种事件的发生。
1:请求并等待系统服务
2:需要的数据还未到达
3:启动某种操作无法马上完成。
进程唤醒:
1:需要的资源得到满足
2:阻塞等待事件完成
进程结束:
- 正常退出
- 错误退出
- 严重错误
- 被其他进程杀死
进程三态:
- 运行态
- 阻塞态
- 就绪态
进程挂起:
进程挂起不同于进程阻塞,进程挂起指进程不占用内存空间,在硬盘上存在一个进程映像。
分为阻塞挂起,就绪挂起
挂起的进程的顺序应该是阻塞->就绪。运行挂起只存在云抢占式分时系统中,但这并不是绝对的,这个还和优先级有关。优先级低的进程就算式就绪态也可能比优先级高的阻塞态先挂起。
OS会维护一组队列来维护不同状态的进程,比如就绪队列,等待队列。这些队列并不唯一,根据等待条件不同可以划分为不同的队列。