一个进程由 PCB、程序段、数据段、BSS 段、堆段、栈段组成。

正文段包括程序段和数据段。

创建进程的原因有:

  1. 用户登录
  2. 高级调度
  3. 系统处理用户程序的请求
  4. 用户程序的应用请求

动态的是进程,静态的是程序。

进程的组成

进程控制块 PCB

常用的组织方式有链接方式索引方式

链接方式:将同一状态的 PCB 链接成一个队列,不同状态对应不同队列,也可以将阻塞态的进程的 PCB,根据阻塞原因的不同,排成多个阻塞队列。

索引方式:将同一状态的进程组织在一个索引表中,索引表的表项指向相应的 PCB,不同状态对应不同的索引表。

程序段

程序段就是能被进程调度程序调度到 CPU 执行的程序代码段。

程序段放二进制代码、常量

程序可被多个进程共享,即多个进程可以运行同一个程序。共享程序段要使用:可重入代码 (Reentry code) ,也叫纯代码 (Pure code) ,是一种允许多个进程同时访问的代码

BSS 段

存储未初始化的全局变量和静态变量。

数据段

一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。

数据段放已初始化的全局变量和静态变量.

堆段

数据堆段放动态分配的存储区

栈段

数据栈段放临时变量和函数调用实参传递。

进程状态

进程有执行态;就绪态;阻塞态;创建态;终止态 五种状态。

Tip

当创建进程时,所需的资源不能得到满足,即创建工作尚未完成,进程不能被调度运行,那么此时进程的状态为创建态。

进程的通信

共享存储

在对共享空间进行读/写操作时,需要使用同步互斥工具(如 P 操作、V 操作)对共享空间的读/写进行控制。

共享存储分为两种:低级方式的共享是基于数据结构的共享;高级方式的共享是基于存储区的共享。

消息传递

进程间的数据交换以格式化的消息(Message)的为单位。

消息传递分为直接通信方式间接通信方式两种。

管道通信

管道是一个特殊的共享文件,又称 pipe 文件。管道通信允许两个进程按生产者-消费者方式进行通信。

管道的大小通常是内存上的一页,满了之后写入会发生阻塞。

空管道读取时会阻塞;满管道写入时会阻塞。

管道通信时需要保持:互斥;同步;确定对方的存在。

管道是半双工通信,双向通信需要两个管道。