我是靠谱客的博主 哭泣白开水,最近开发中收集的这篇文章主要介绍2.3 进程控制块,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

进程控制块的内容(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的方法。

  1. 一个结构的数组。PCB被标记为空闲(free)或已分配(allocated),此方法不需要动态内存管理。但缺点是浪费了大量的储存空间用来维持足够数量的PCB槽口。
  2. 一个指针的数组去动态分配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也可以依靠优先级在不同的列表中维护进程。

例:

  1. 由优先级0到n组成的RL当前包含优先级为0,5和7的进程。拥有最高优先级7的进程正在运行。
  2. 优先级为5的新进程进入RL。级别7的进程继续运行。
  3. 当一个新进程以高于7的优先级进入时,当前运行的进程(7)从运行状态变为就绪状态,新进程开始运行。

->2.4 进程上的操作

此博客仅用于自我学习的记录,如有不当请指正。08/15/2021

最后

以上就是哭泣白开水为你收集整理的2.3 进程控制块的全部内容,希望文章能够帮你解决2.3 进程控制块所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部