进程定义
- 定义:一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。
- 组成:
- 程序代码
- 程序处理的数据
- 程序计数器中的值,指示下一条将运行的指令
- 一组通用的寄存器的当前值,堆栈
- 一组系统资源(如打开的文件)
总之,一个进程包含了正在运行的程序的所有状态信息。
- 进程与程序的联系
- 程序是产生进程的基础
- 程序的每次运行构成不用的进程
- 进程是程序功能的体现
- 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。(多个程序合并成一个进程)
- 多对多的映射关系
- 进程和程序区别
- 进程是动态的,程序是静态的。
- 进程是程序的执行,进程有核心态、用户态。
- 进程是暂存的,状态变化的过程
- CPU会从一个进程跳到另一个进程执行
- 进程特点
- 动态性:可以在不同进程间来回切换
- 并行:一个时间点,多个进程被执行(多CPU)
- 并发:进程可以被独立调度并占用处理机运行(单CPU)
- 独立性:多个进程执行不互相影响(数据方面),操作系统为每个进程分配了独立的页帧,互相不受影响。
- 制约性:因访问共享数据、资源或者进程间同步而产生制约。
进程控制块
- PCB:操作系统为每个进程维护了一个PCB,用来保存与进程相关的各种状态信息。
- 进程存在的唯一标识
- PCB包括:
- 进程标识信息。如本进程标识,父进程标识,用户标识
- 处理器状态信息保存区:
- 用户可见寄存器(用户程序可以使用的数据地址等寄存器)
- 控制和状态寄存器(程序计数器PC、程序状态字)
- 栈指针(过程调用/系统调用/中断处理需要用到)
- PCB组织方式:一般使用链表结构,因为PCB管理进程的创建删除操作,链表效率比较高。但也有固定数量进程,一直不变,数组也可以。所以针对具体系统功能实现不用组织方式。
进程生命周期
- 创建、就绪、执行、阻塞(等待)、唤醒、结束
- 进程阻塞只能自己阻塞自己,只有自己知道何时需要等待某种事件发生。释放CPU。
- 进程唤醒只能被别的进程或者操作系统。因为自身已经不占用CPU了。
- 结束:正常退出、错误推出、强制性(操作系统、其他进程)推出
- 三种基本状态:运行、就绪、阻塞(创建、结束)
- 创建-》就绪,等待进程初始化完成以后,进入就绪态,时间不会很久。
- 就绪-》执行,等待被调度器选中,取决于调度系统算法。
- 运行-》结束,正常运行完或者出现异常
- 运行-》就绪,CPU时间片分配到该进程就执行,分配给其他就就绪,让出CPU,这是操作系统完成。
- 运行-》阻塞,例如等待定时器、读文件、写文件
- 阻塞-》就绪,事件来了之后,由操作系统完成状态转变
进程挂起
- 目的:合理且充分的利用系统资源
- 进程挂起状态,意味着进程没有占用内存空间。处在挂起状态的进程映像在硬盘上。
- 挂起状态
- 阻塞挂起:处于阻塞状态被挂起,进程在外存等待某个事件。
- 就绪挂起:处于就绪状态被挂起,进程在外存,但只要进内存,即可运行。
- 状态转换
- 阻塞-阻塞挂起:操作系统发现内存空间不够,将处于阻塞状态的进程挂起,腾出内存,给其他就绪或执行进程使用。
- 就绪-就绪挂起:一般优先级就绪>阻塞,但是高优先级的进程处于阻塞状态,系统会把低优先级的就绪进程挂起。
- 运行-就绪挂起:对于抢占式分时系统,低优先级进程运行时,内存不够,高优先级抢占,低优先级进程要从运行到就绪挂起。
- 阻塞挂起-就绪挂起:当在外存中挂起的处于阻塞状态的进程条件满足时,会转为就绪挂起状态。
- 与挂起相关状态
- 解挂/激活:进程从外存转到内存
- 就绪挂起-就绪:挂起的时候时就绪,解挂的时候也是就绪。
- 阻塞挂起-阻塞:挂起的时候阻塞,解挂后仍处于阻塞。条件满足就变成就绪。
- 解挂/激活:进程从外存转到内存
- 状态队列
就绪队列有多个,代表多个优先级。1没有再去执行2
等待事件1到来,可能影响一个进程,从阻塞状态变为就绪态,也可影响一个队列,从阻塞变为就绪态。