[toc]
2.1 概念和特征#
-
是资源分配、调度的独立单位
-
进程包含以下内容:
- 程序段(代码段)
- 数据段(存数据)
- PCB进程控制块( 进程存在的唯一标志)
-
进程具有动态性,是一个动态的概念。
-
每个进程具有独立的PCB结构, 资源也独立。
2.2 进程状态机图#
2.3 进程状态变化时的具体过程#
2.3.1 进程创建#
- 创建过程:
- 分配进程;申请PCB
- 分配资源
- 初始化PCB
- 插入到系统的就绪队列
- 父进程创建子进程:
子进程可以继承父进程的所有资源。
父进程退出时,需要杀光子进程。
2.3.2 进程的终止#
终止有3种触发情况
- 正常结束——运行完毕
- 异常结束——越界、非法
- 外界干预——直接kill进程
终止的触发过程:
- 根据进程标识符,找到PCB控制块,读取进程状态
- 如果正常执行,则终止进程。 如果有子进程,则杀死子进程
- 归还资源给父进程或者操作系统
- 将PCB从系统PCB队列删除
2.3.3 进程的阻塞#
阻塞的过程:
- 根据标识符找到PCB
- 切换PCB状态为阻塞状态
- 把PCB插入到等待队列中
2.3.4 进程唤醒#
唤醒的过程:
- 根据标识符从等待队列中找到PCB
- 移出等待队列,修改运行状态为就绪
- 插入到就绪队列
2.3.5 进程切换#
- 保存当前处理器上下文信息,更新PCB并移入队列
- 选择另一个进程,更新PCB状态
- 更新内存管理
- 恢复处理器上下文
上面可以看到基本是围绕 PCB、等待队列、就绪队列、进程状态更新这4个概念展开的。
注意调度是一个决策行为, 而切换是一个执行行为, 因此都是先调度,再切换。
2.4 进程的组成#
2.4.1 PCB进程控制块#
pcb控制块在进程创建后, 就常驻内存中
是进程的唯一标志
PCB控制块包含以下内容:
- 进程描述
包括进程标识符 和 用户标识符 - 进程控制和管理
包括 当前运行状态、 优先级、 入口地址、 外村地址、 进入内存时间、 CPU占用时间、信号量 - 资源分配清单
包括 3个段指针(代码段、数据段、堆栈段), 文件描述符, 键盘/鼠标资源 - 处理器相关信息
寄存器值
程序状态字
PCB控制块的组织方式:
- 链接方式: 各运行状态都有1个队列, 相关状态PCB都会放在链表队列中(因此可以非顺序取出)。
- 索引方式: 建立一个索引表,指向对应pcb, 即用数组去组织
2.5 进程之间的通信#
进程的通信有3种方式
-
共享存储方式
由操作系统系统存储空间调用方式。
注意用户进程的空间是互相独立的,不会互相访问。 -
消息传递
直接通信: 发送到对方的消息队列,从消息队列去
间接通信: 发信到中间邮箱(非双方进程), 接收方自己去取。 -
管道通信:
管道: 链接读写进程之间的共享文件
功能为互斥、同步
属于一次性操作, 一旦被读取,数据就被从管道中抛弃
半双工, 只有1方能操作,要么存入要么写。
如果要实现双方互动,则需要2个管道。