概念
概念
进程实体(进程映像):静态的,可理解为进程的某一时刻的状态
进程:进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
PCB(进程控制块):存放管理进程时所需要的信息
组成

PCB 是给操作系统用的,程序段和数据段是给进程自己用的
PCB
PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB
1.进程描述信息:
进程标识符PID:当进程被创建时,操作系统为该进程分配唯一的、不重复的 PID
用户标识符UID:进程所属用户
2.进程控制和管理信息:
CPU、磁盘、网络流量使用情况统计…
进程当前状态:就绪态/阻塞态/运行态.…
3.资源分配清单:正在使用哪些文件、内存区域、I/O设备
4.处理机相关信息:各种寄存器的值(用于实现进程切换)
程序段与数据段
程序段:程序的指令序列
数据段:运行过程中产生的各种数据
进程状态、转换与组织
基本状态
创建态:进程正在被创建,OS为进程分配系统资源、初始化PCB,创建后将进程插入就绪队列
就绪态:已具有运行条件,但无空闲CPU,暂时不能运行
运行态:占有CPU,并在CPU上运行
阻塞态:因等待某一事件暂时不能运行
终止态:进程正从系统中消失,OS回收进程拥有的资源,撤销PCB
状态转换

创建态->就绪态:系统完成创建进程工作
就绪态->运行态:进程被调度
运行态->就绪态:时间片到或 CPU 被其他进程抢占
运行态->阻塞态:等待系统资源分配 or 等待某事件发生(主动行为)
阻塞态->就绪态:资源分配到位,等待的事件发生(被动行为)
运行态->终止态:进程运行结束 or 运行过程中遇到不可修复的错误
进程的组织
链式方式:将同一状态的进程的 PCB 组成一个双向链表,称为进程队列
索引方式:将所有的 PCB 存放在一张索引表中,每个表项包含一个 PCB 的地址和状态信息
进程控制
进程的控制依靠原语实现
原语:特殊程序,执行具有原子性。依靠“关中断指令”与“开中断指令”实现原子性(开中断后不再受中断信号的影响)
1.进程创建原语:创建态->就绪态
1)申请空白 PCB
2)为新进程分配所需资源
3)初始化 PCB
4)将 PCB 插入就绪队列
2.进程撤销原语:就绪态/阻塞态/运行态->终止态->无
1)找到目标的 PCB
2)若进程正在运行,立即剥夺 CPU
3)终止其所有子进程
4)将该进程拥有的所有资源归还给父进程或操作系统
5)删除 PCB
3.进程阻塞原语:运行态→阻塞态
1)找到目标 PCB
2)将运行环境存入 PCB ,状态信息设置为“阻塞态,暂时停止进程运行
3)将 PCB 插入相应事件的等待队列
4.进程唤醒原语:阻塞态→就绪态
1)在事件等待队列中找到 PCB
2)将 PCB 从等待队列移除,设置进程为就绪态
3)将 PCB 插入就绪队列,等待被调度
5.进程切换原语:运行态→就绪态 or 就绪态→运行态
1)将运行环境信息存入 PCB
2)PCB 移入相应队列
3)选择另一个进程执行,并更新其PCB
4)根据 PCB 恢复新进程所需的运行环境
注意:阻塞原语与唤醒原语必须成对使用
进程通信
各进程间内存地址相互独立
共享存储
设置一个共享空间,通过使用同步互斥工具的读/写操作实现信息交换

低级方式:基于数据结构的共享
1)比如共享空间里只能放一个长度为10的数组
2)这种共享方式速度慢、限制多,是一种低级通信方式
高级方式:基于存储区的共享
1)操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制
2)这种共享方式速度很快,是一种高级通信方式
消息传递
进程通过“发送消息/接收消息”两个原语传递格式化的消息交换数据

1.消息格式:
1)消息头:发送 PID、接受 PID、消息长度等格式化的信息
2)消息体
2.通信方式:
1)直接通信方式:直接把消息发送给接收进程的消息缓冲队列,接收进程从消息缓冲队列中取得消息
2)间接通信方式:依靠发送原语和接收原语,将消息发送到中间信箱,接收进程从信箱读取消息(一个新乡可以被多个进程读写)
管道通信
管道(pipe文件):
1)是在内存中开辟一个大小固定的缓冲区
2)管道通信允许两个进程互斥地访问管道,按生产者-消费者方式进行通信
3)写满之后才能读,读空之后才能写,数据读出便消失
4)一个管道只能实现半双工通信;实现双向同时通信要建立两个管道

子进程会继承父进程的管道
信号
用于通知进程某个特定事件已经发生,进程收到信号后,对信号进行处理
发送信号
进程之间相互发送信号、内核向进程发送信号、进程向自身发送信号
保存信号
两个 N bit 位的向量存储
要处理的信号:没有被屏蔽且待处理的信号

处理信号
处理时机:当进程从内核态转为用户态时,例行检查是否有待处理信号,若有则进行处理
处理方法:
1)操作系统内置默认处理方法
2)允许进程自定义处理方法(优先级高)
