一个进程由 PCB、程序段、数据段、BSS 段、堆段、栈段组成。
正文段包括程序段和数据段。
创建进程的原因有:
- 用户登录
- 高级调度
- 系统处理用户程序的请求
- 用户程序的应用请求
动态的是进程,静态的是程序。
进程的组成
进程控制块 PCB
常用的组织方式有链接方式和索引方式。
链接方式:将同一状态的 PCB 链接成一个队列,不同状态对应不同队列,也可以将阻塞态的进程的 PCB,根据阻塞原因的不同,排成多个阻塞队列。
索引方式:将同一状态的进程组织在一个索引表中,索引表的表项指向相应的 PCB,不同状态对应不同的索引表。
程序段
程序段就是能被进程调度程序调度到 CPU 执行的程序代码段。
程序段放二进制代码、常量
程序可被多个进程共享,即多个进程可以运行同一个程序。共享程序段要使用:可重入代码 (Reentry code) ,也叫纯代码 (Pure code) ,是一种允许多个进程同时访问的代码。
BSS 段
存储未初始化的全局变量和静态变量。
数据段
一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。
数据段放已初始化的全局变量和静态变量.
堆段
数据堆段放动态分配的存储区。
栈段
数据栈段放临时变量和函数调用实参传递。
进程状态
进程有执行态;就绪态;阻塞态;创建态;终止态 五种状态。
Tip
当创建进程时,所需的资源不能得到满足,即创建工作尚未完成,进程不能被调度运行,那么此时进程的状态为创建态。
进程的通信
共享存储
在对共享空间进行读/写操作时,需要使用同步互斥工具(如 P 操作、V 操作)对共享空间的读/写进行控制。
共享存储分为两种:低级方式的共享是基于数据结构的共享;高级方式的共享是基于存储区的共享。
消息传递
进程间的数据交换以格式化的消息(Message)的为单位。
消息传递分为直接通信方式、间接通信方式两种。
管道通信
管道是一个特殊的共享文件,又称 pipe 文件。管道通信允许两个进程按生产者-消费者方式进行通信。
管道的大小通常是内存上的一页,满了之后写入会发生阻塞。
空管道读取时会阻塞;满管道写入时会阻塞。
管道通信时需要保持:互斥;同步;确定对方的存在。
管道是半双工通信,双向通信需要两个管道。