【博客】并发编程(003):基础知识之进程的PCB

什么是PCB?

Processing Control Block被译为进程控制块,简称为PCB。从字面上来理解进程控制块,它是进程的控制模块。但在操作系统里,它是一种专门用来管理进程设置的一种数据结构,也是用来记录进程的外部特征,描述进程的运动变化过程。

如何理解PCB?

进程它在被执行前其实是一个可执行程序。这个程序是被放在磁盘上的,当它要被执行的时候,它先被加载到内存当中,然后再放入到寄存器中,最后再让cpu执行该程序,这个时候一个静态的程序就变成了进程。

那么操作系统是怎么来管理这些进程的呢?操作系统通过一个双向链表把进程连起来。但是,对于进程其实它是一个抽象的概念,系统肯定要通过一个东西来描述进程,然后才能管理进程。于是PCB就出来了,操作系统通过PCB来描述进程,于是这个双向链表连接的其实是PCB。

进程的信息有哪些?

每个进程都有对应一个PCB,通常是系统内存占用区中的一个连续存区。在linux中这个PCB是一个叫做task_struct的结构体。每个进程都把它的信息放在task_struct这个数据结构里面,而task_struct包含以下内容:
1.标示符(pid)
描述本进程的唯一标示符,用来区别其他进程。通过ps与top命令查看PID。
2.状态
任务状态,退出代码,退出信号等。
3.优先级
相对于其他进程的优先级(数越小,优先级越高)。
4.程序计数器
程序中即将被执行的下一条指令的地址。
5.内存指针
包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
6.上下文数据
保存上下文就是把cpu寄存器中的值保存到内存中;恢复上下文就是把内存中的寄存器值恢复到cpu中去。
7.I/O状态信息
包括显示的I/O请求,分配给进程的I/O设备和正在被进程使用的文件列表。

进程与PCB如何交互?

1. 进程的创建
一旦操作系统发现了要求创建新进程的事件后,便调用进程创建原语Creat( )按下述步骤创建一个新进程。

2.进程的终止
(1) 根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态。
(2) 若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。
(3) 若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防它们成为不可控的进程。
(4) 将被终止进程所拥有的全部资源,或者归还给其父进程,或者归还给系统。
(5) 将被终止进程(PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息。
3.进程的阻塞与唤醒
当被阻塞进程所期待的事件出现时,如I/O完成或其所期待的数据已经到达,则由有关进程(比如用完并释放了该I/O设备的进程)调用唤醒原语wakeup( ),将等待该事件的进程唤醒。

4.进程的挂起和激活
当出现了引起进程挂起的事件时,比如,用户进程请求将自己挂起,或父进程请求将自己的某个子进程挂起,系统将利用挂起原语suspend( )将指定进程或处于阻塞状态的进程挂起。使进程暂不接受调度。

5.进程的激活

当发生激活进程的事件时。例如,父进程或用户进程请求激活动指定进程,系统将利用激活原语active()将指定进程激活。

PCB的组织与管理

通过PCB的组织方式能组织与管理多个PCB,组织的数据结构:
1.链接表方式
系统按照进程的状态将进程的PCB组成队列,从而形成就绪队列、阻塞队列、运行队列等。

2.索引表方式
该方式是线性表方式的改进,系统按照进程的状态分别建立就绪索引表、阻塞索引表等。

3.线性表方式
不论进程的状态如何,将所有的PCB连续地存放在内存的系统区。这种方式适用于系统中进程数目不多的情况。

最后

进程作为系统进行资源分配和调度的基本单位,是操作系统结构的基础。要想深入理解进程,PCB是不可缺少的一个知识点。与此同时,也会让加强对进程的控制与操作。
1、网军编程学院为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用。
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题。
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意。
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户。
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和网军编程学院的同意。
7、网军编程学院管理员和版主有权不事先通知发贴者而删除本文。

发表评论

发表评论

电子邮件地址不会被公开。