进程基础
进程的概念
引入进程概念,是为了实现并发执行
进程实体: 包括程序段(要执行的代码),数据段(运行过程处理的数据),进程控制块(PCB)
进程控制块(PCB): 用于描述进程,如id,进程状态,进程优先级,进程资源需求(程序段指针,数据段指针,键盘,鼠标),各种寄存器等
操作系统所需的数据都在PCB中,程序本身运行所需的数据在数据段与程序段中
PCB是进程实体的唯一标志!
从不同的角度,进程有不同的经典定义,而引入进程实体的概念以后,我们可以把进程定义为:
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
组织进程
如何对数以千计的进程进行管理和组织?
我们先进行分类,一般会将进程按进程状态分为执行,就绪,阻塞(可能细分)
链接方式
根据分类,把PCB分为多个队列,操作系统持有指向各个队列的指针
索引方式
同理分为多个索引表,并给对应多个索引表的指针
进程的特征
- 动态性: 进程是程序的一次执行过程,是动态产生变化与消失的
- 并发性: 各个进程可并发执行
- 独立性: 进程是能独立运行,接受资源分配与调度的基本单位
- 异步性: 速度不可预知,操作系统需要提供进程同步机制来解决问题
- 结构性: 每个进程都有PCB+程序段+数据段
进程的状态
一般有5种,最重要的三种在组织进程中我们提到过:
- 运行态: 占CPU,并在CPU上运行
- 就绪态: 具备运行条件,但没有具体的CPU
- 阻塞态(也就是等待态): 因等待某件事暂时不能执行
进程的另外两种状态:
- 创建态(New,又称新建态):进程正在被创建,操作系统为进程分配资源、初始化PCB
- 终止态(Terminated,又称结束态):进程正在从系统中撤销,操作系统会回收进程拥有得资源、撤销PCB
经典裤衩图:
略
进程控制
进程控制就是要实现进程状态的转换
进程状态的转换所要做的一些事比如:
- 除去New和Terminated状态,进程状态的转换都需要修改PCB
- 运行态切到就绪或者阻塞的时候要保留运行环境
- 就绪态到运行态要恢复运行环境
- 到终止态要回收资源
原语可以实现进程控制,原语曾在上面微内核部分介绍过,其最大的特征就是不允许中断
在原语执行开始会发出"关中断"的指令,在原语执行结束会发出"开中断"的指令,"关中断"期间内的中断信号会被操作系统忽略
显然开关中断是基于系统的特权命令
进程通信
进程是分配系统资源的单位,因此各个进程之间拥有的内存地址空间相互独立,为了安全,进程不允许直接访问另一个进程的地址空间
这个时候需要进程通信,一般分为以下三种
共享存储
两个进程拥有一个共享空间,对于一个共享空间需要互斥访问
共享存储可分为基于数据结构和基于储存区
数据结构效率低限制多,是一种低级通信
储存区会在内存画出一片共享储存区,内容均有进程自己控制(而非操作系统),权限大,速度快,属于高级通信
管道通信
管道是用于链接读写进程的共享文件,又名pipe,是在内存区开辟的固定大小的缓冲区
- 一个管道只能采用半双工通信,同一个时间段只能单向,如果要双向通信,要至少两个管道
- 管道访问也需要互斥
- 管道没写满不许读,没读空不许写(保证某个时段只能单向,基于阻塞write和read实现)
消息传递
将信息格式化为消息(消息头+消息体),发送方将消息发送给接收方,接收方再将消息读取出来
系统会提供发送和接受原语
消息传递分为:
- 消息缓存队列读取
- 间接信箱读取