Skip to content
Default Title

进程基础

进程的概念

引入进程概念,是为了实现并发执行

进程实体: 包括程序段(要执行的代码),数据段(运行过程处理的数据),进程控制块(PCB)

进程控制块(PCB): 用于描述进程,如id,进程状态,进程优先级,进程资源需求(程序段指针,数据段指针,键盘,鼠标),各种寄存器等

操作系统所需的数据都在PCB中,程序本身运行所需的数据在数据段与程序段中

PCB是进程实体的唯一标志!

从不同的角度,进程有不同的经典定义,而引入进程实体的概念以后,我们可以把进程定义为:

进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位

组织进程

如何对数以千计的进程进行管理和组织?

我们先进行分类,一般会将进程按进程状态分为执行,就绪,阻塞(可能细分)

链接方式

根据分类,把PCB分为多个队列,操作系统持有指向各个队列的指针

索引方式

同理分为多个索引表,并给对应多个索引表的指针

进程的特征

  • 动态性: 进程是程序的一次执行过程,是动态产生变化与消失的
  • 并发性: 各个进程可并发执行
  • 独立性: 进程是能独立运行,接受资源分配与调度的基本单位
  • 异步性: 速度不可预知,操作系统需要提供进程同步机制来解决问题
  • 结构性: 每个进程都有PCB+程序段+数据段

进程的状态

一般有5种,最重要的三种在组织进程中我们提到过:

  • 运行态: 占CPU,并在CPU上运行
  • 就绪态: 具备运行条件,但没有具体的CPU
  • 阻塞态(也就是等待态): 因等待某件事暂时不能执行

进程的另外两种状态:

  • 创建态(New,又称新建态):进程正在被创建,操作系统为进程分配资源、初始化PCB
  • 终止态(Terminated,又称结束态):进程正在从系统中撤销,操作系统会回收进程拥有得资源、撤销PCB

经典裤衩图:

进程控制

进程控制就是要实现进程状态的转换

进程状态的转换所要做的一些事比如:

  • 除去New和Terminated状态,进程状态的转换都需要修改PCB
  • 运行态切到就绪或者阻塞的时候要保留运行环境
  • 就绪态到运行态要恢复运行环境
  • 到终止态要回收资源

原语可以实现进程控制,原语曾在上面微内核部分介绍过,其最大的特征就是不允许中断

在原语执行开始会发出"关中断"的指令,在原语执行结束会发出"开中断"的指令,"关中断"期间内的中断信号会被操作系统忽略

显然开关中断是基于系统的特权命令

进程通信

进程是分配系统资源的单位,因此各个进程之间拥有的内存地址空间相互独立,为了安全,进程不允许直接访问另一个进程的地址空间

这个时候需要进程通信,一般分为以下三种

共享存储

两个进程拥有一个共享空间,对于一个共享空间需要互斥访问

共享存储可分为基于数据结构和基于储存区

数据结构效率低限制多,是一种低级通信

储存区会在内存画出一片共享储存区,内容均有进程自己控制(而非操作系统),权限大,速度快,属于高级通信

管道通信

管道是用于链接读写进程的共享文件,又名pipe,是在内存区开辟的固定大小的缓冲区

  • 一个管道只能采用半双工通信,同一个时间段只能单向,如果要双向通信,要至少两个管道
  • 管道访问也需要互斥
  • 管道没写满不许读,没读空不许写(保证某个时段只能单向,基于阻塞write和read实现)

消息传递

将信息格式化为消息(消息头+消息体),发送方将消息发送给接收方,接收方再将消息读取出来

系统会提供发送和接受原语

消息传递分为:

  • 消息缓存队列读取
  • 间接信箱读取