当前位置:网站首页 > Haskell函数式编程 > 正文

进程控制块(进程控制块的组织方式有哪几种?)



什么是进程?

这里先给出比较官方的定义:进程是进程实体的运行过程,它是系统进行资源和调度的独立单位。从这句话可以看出,我们的进程实际上是一个过程,可以类比我们的日常生活,跑步,就是一个进程,上课也是一个进程。在我们的操作系统中,我们用进程控制块(PCB)来描述进程的基本情况和运行情况,进而对进程进行控制和管理,更进一步,我们将程序段,相关数据段,PCB三部分构成进程映像(进程实体)。

为什么要引入进程?

还记得之前说过的吗?我们的操作系统是允许多个程序并发执行,如果说我们不对程序及其数据进行状态的记录和管理,那么我们处理机进行切换的时候,我们将会丢失之前的状态以及一些数据,也就是没有封闭性,同时也会表现出间断性和不可再现性。所以我们引2入了进程,对程序的状态以及其数据进行记录,我们就可以对进程的。

那么?怎样对进程进行控制呢?

运行态:进程正在我们的处理机上运行。

就绪态:进程准备好运行了,只差处理机了,除了处理机的其他资源,进程都拥有了。

阻塞态:进程暂时运行,说明我们的进程缺资源了,或者说需要等待某一件事情发生才能继续运行,比如说等待I/O输入输出。

创建态:说明这个时候,进程还在被创建,会经历申请空白PCB->向PCB中填写一些控制和管理进程的信息->系统为该进程分配必要的资源->将进程转入就绪态。

结束态: 进程正在从系统中消失,系统会进行资源的释放和回收。

这里大家可以再看一下下面这个图,可以很清晰的理解它们之间是怎么转换的!

可以看到,就绪态和运行态以及阻塞态是可以相互转换的!

怎样对进程进行控制?

好了,介绍完进程的几种状态后,我们就来一起看看操作系统是怎样对进程进行控制的吧!

首先我们来看看怎么创建一个进程吧:

1) 当新进程创建的时候,会给新进程分配一个进程标识号(方便识别进程),并申请一个空白的PCB,如果PCB没有申请成功,那么就说明创建失败。

2) 为该进程分配资源,以及为程序和数据栈以及用户栈分配必要的内存空间,如果这步遇到问题,比如说资源不足,该进程会进入阻塞态,等待资源。

3) 初始化PCB,设置好相应的信息,比如说处理机状态信息。

4) 在进程就绪队列中插入该进程。

那么我们如何终止进程呢?

我们先了解一下什么时候进程会终止吧!

1)正常终止,进程的任务已经完成。

2)异常结束,进程在运行时发生了某种异常事件,比如说越界,非法指令,运行超时等。

3)外界干预,外界请求进程终止,比如说操作员要求进程停止。

那么进程终止的时候会发生什么呢?

1) 首先会根据进程的标识符来找到进程的PCB。

2) 如果说该进程处于执行态,那么就立即终止该进程,并将处理机资源分配给其他资源。

3) 如果该进程还有子孙进程,那么将其所有子孙进程终止。

4) 最后将进程所有的全部资源,都归还给其父进程,或归还给操作系统。

那么我们的进程是怎么进行切换的呢?

1) 首先,操作系统会保存相应的进程状态,以及当时处理机的运行环境(上下文),以及相关寄存器的状态。

2) 再将PCB里面的信息更新。

3) 再将PCB移动到相应的队列中,比如,就绪队列,阻塞队列。

4) 运行另外一个进程,同时也更新它的PCB,同时也更新内存管理的数据结构。

5) 最后恢复处理机的运行环境(上下文)。

进程阻塞和唤醒时会发生什么?

最后的最后,我们再来看一看,进程阻塞和唤醒的时候会发生什么吧!

前面说到,当进程期待的某种事件没有发生,或者想要的资源没有得到,的时候,进程会变成阻塞态,这个时候系统会执行阻塞原语(Block),而阻塞原语执行的过程如下:

1)找到将要阻塞的进程的标识号对应的PCB。

2)如果这个进程正在运行,那么我们就保护其现场,并将其状态转为阻塞态。

3)最后把该PCB插入相应事件的等待队列,并将处理机资源调度给其他进程。

那么如何唤醒一个进程呢?

2)将其状态设置为就绪态,并移出该等待队列

3)把该PCB插入到就绪队列中。

以上就是今天要讲的内容,五阿哥再给大家整理一下吧。

最后的最后,再用一道题来给大家巩固一下今天的知识吧!

下列选项中,导致创建新进程的操作是()

I.用户登录成功    II.设备分配    III.启动程序执行

A. 仅I和II

B. 仅II和III

C. 仅I和III

D. I,II,III

到此这篇进程控制块(进程控制块的组织方式有哪几种?)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • rmsd公式(rms计算公式)2025-09-07 19:00:08
  • pem文件生成(如何生成ped文件格式)2025-09-07 19:00:08
  • lead函数是聚合函数不是窗口函数(lead函数是聚合函数不是窗口函数对吗)2025-09-07 19:00:08
  • 多级列表样式怎么设置1-1(多级列表样式怎么设置第1章第2章)2025-09-07 19:00:08
  • 一级一套公式写出清晰答题小标题。二级一套公式写出清晰答题小标题。三级一套公式写出清晰答题小标题。是什么意思(论文一级一套公式写出清晰答题小标题。二级一套公式写出清晰答题小标题。三级一套公式写出清晰答题小标题。是什么意思)2025-09-07 19:00:08
  • conv1d函数keras(conv1d keras)2025-09-07 19:00:08
  • pcap 格式(pcap格式和cap格式的区别?)2025-09-07 19:00:08
  • 服务器上部署模型(服务器部署模式)2025-09-07 19:00:08
  • 支付方式图片图标(支付方式的搞笑图片)2025-09-07 19:00:08
  • conv2d参数解释(conv2d函数)2025-09-07 19:00:08
  • 全屏图片