概述
进程控制块的内容(process control block/PCB)
进程控制块(PCB)是进程的实例化。创建时,操作系统为每一个进程分配一个唯一标识符。该标识符p可以是指向PCB结构的指针,或是很多PCB的数组的索引。
PCB的具体实现和内容因操作系统而异,但以下是代表绝大多数现代操作系统的通用结构。
进程p的通用PCB
PCB区域 | 解释 |
---|---|
CPU_state | 当p停止时,由各种硬件寄存器(register)和状态标志(flag)组成的CPU当前状态保存在该区域中。当p恢复执行时,保存的信息被复制回CPU中。 |
process_state | 储存进程p当前的状态。如,正在运行,就绪或者堵塞。 |
memory | 描述分配给p的内存区域。在最简单的情况下,该区域会指向主储存器中。在使用虚拟内存的系统中,该区域也可以指向内存页或段的层次结构。 |
scheduling_information | 包含被调度器使用的信息,用来决定p将何时运行。该信息通常记录p的CPU时间(CPU time),系统中的真实时间(real time),优先级(priority)和任何可能的截止期限(deadlines)。 |
accounting_informaton | 跟踪计数和计费所需的信息。如,使用CPU的时间或内存量。 |
open_files | 跟踪当前由p打开的文件。 |
other_resources | 跟踪p已请求并成功获取的任何资源。如,打印机。 |
parent | 每一个进程都是由其他一些正在运行的进程创建的。进程p的父进程(parent process) 是创建p的进程。parent区域记录的p的父进程的信息。 |
children | 进程p的子进程c (child process) 是由p创建的进程。进程p是进程c的父进程。进程p每一个子进程的信息被记录在children区域中。 |
PCB的数据结构
PCB的条目由不同的数据类型组成。包括整数,字符或指针。因此,每个PCB都被实现为异数据结构(heterogeneous data structure) 例如:C语言的"struct"
—— | —— |
---|---|
CPU_state | 整数集 |
process_state | 整数或字符 |
memory | 指针 |
scheduling_information | 整数集 |
accounting_informaton | 整数集 |
open_files | 链表头节点 |
other_resources | 链表头节点 |
parent | 指针或索引 |
children | 链表头节点 |
组织PCB
操作系统必须在创建和删除进程时有效地分配和释放PCB。有两种组织所有PCB的方法。
- 一个结构的数组。PCB被标记为空闲(free)或已分配(allocated),此方法不需要动态内存管理。但缺点是浪费了大量的储存空间用来维持足够数量的PCB槽口。
- 一个指针的数组去动态分配PCB。指针数组浪费的空间很小,从而可以有数量比结构数组大得多的PCB。缺点是动态内存管理的开销。因为每个PCB需要分配和释放内存。
避免链表
链表需要动态内存管理,成本很高。Linux操作系统开创了一种消除这种开销的方法。
不同于锚定在父进程PCB中的单独链表,链接分布在子PCB上,这样每个链接都直接指向相对于该进程的前一个和后一个兄弟进程。在进程p的PCB中,原来的两个区域被四个新区域代替:
- parent:像以前一样指向进程p的单个父进程。
- first_child:指向p的第一个子进程。
- younger_sibling:指向紧跟在进程p后创建的兄弟进程。
- older_sibling:指向紧挨在进程p前创建的兄弟进程。
管理PCB
操作系统会维护组织在各种列表中的所有PCB。等待列表(waiting list/WL) 与所有资源相关联,并包含因为该资源不可用而阻塞的所有进程。另一个非常重要的列表是就绪列表(ready list/RL),它包含所有处于就绪状态并因此能在CPU上运行的进程。RL还包括当前正在运行的进程。RL按照重要性维护在列表中的进程。进程的重要性由称为优先级(priority)的整数值表示。RL可以是一个简单的链表,其中进程的优先级决定了在链表的位置。RL也可以依靠优先级在不同的列表中维护进程。
例:
- 由优先级0到n组成的RL当前包含优先级为0,5和7的进程。拥有最高优先级7的进程正在运行。
- 优先级为5的新进程进入RL。级别7的进程继续运行。
- 当一个新进程以高于7的优先级进入时,当前运行的进程(7)从运行状态变为就绪状态,新进程开始运行。
->2.4 进程上的操作
此博客仅用于自我学习的记录,如有不当请指正。08/15/2021
最后
以上就是哭泣白开水为你收集整理的2.3 进程控制块的全部内容,希望文章能够帮你解决2.3 进程控制块所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复