进程管理笔记一、进程的概念及其产生的背景

进程管理笔记一、进程的概念及其产生的背景

引言:计算机的根本特征是其本身为人造学科。进程从根本上说,是操作系统对CPU进行的抽象和装扮。关于进程的系列笔记,会由进程产生背景讲起,本篇是我们故事的起源。



一、进程产生的背景

1.1、单道处理系统—效率低下

  在单道处理系统下,CPU和I/O设备的运行是串行的,即在程序进行输入输出时,CPU只能等待。CPU只能不断询问I/O操作是否完成,因而不能执行别的程序。由于I/O设备的运行速度相对于CPU来说实在太慢,这种让高速设备等待低速设备的状况效率较低。


1.2、改进策略—多道编程

  人们想,能否将CPU运行和I/O设备的运行重叠起来而改善整个系统的效率呢?基于此想法,人们想起将多个程序同时加载到计算机里面,并发执行。这些同时存在于计算机内存中的程序就称为进程。进程让每个用户感觉到自己独占CPU,因此进程就是为了在CPU上实现多道编程而出现的概念,如下图1所示。

这里写图片描述
图1、进程让每个用户感觉到自己独占CPU


1.3、多道编程的好处

1)、提高CPU利用率
  人们发明进程是为了支持多道编程,进行多道编程的目的则是提高计算机CPU的效率,或者说系统的吞吐量。

  实例分析:假定一个进程有20%的时间使用CPU进行计算,另外80%的时间来进行I/O,如果使用单道编程,CPU的利用率为20%,但如果是同时运行两个这样的进程,则CPU的利用率将提高至36%(CPU仅在两个进程同时进行I/O时才处于闲置状态,因此利用率为1 - 0.8 * 0.8 = 0.36%)。

  随着进程数量的增加,CPU的利用率会逐步提升,但提升的幅度则逐步降低,直到某个临界点时为止,这个临界点为多道编程的极限。之后CPU利用率的提升空间就很小了,进行进程切换带来的开销则变得非常明显。

这里写图片描述
图2、多道编程度数与CPU利用率的关系

2)、改善响应时间—提升用户体验
  多道编程的第二个好处是改善系统的响应时间,即用户等待时间。毕竟,对于大多数用户来说,关心的是计算机的响应速度。下图为多道编程时事件的发生顺序,其为逻辑并发。

这里写图片描述
图3、多道编程时事件的发生顺序

  实例分析:我们可以举一个生活中例子,假定我们去银行取号办理业务,1号客户在阐述清楚需要办理的业务后,就在柜台前面填写单子,耗时很长很长,在这个阶段,我们只有排队等待。如果可以让出柜台,那其他人排队等待时间会明显缩短。同理,多道编程,当进程处于I/O时,可以让出CPU处理其他进程,会缩短用户等待的时间,提升用户体验。


1.4、I/O操作脱离CPU如何实现?

  这是关于并发实现的问题,简单回答是I/O占用的CPU资源非常少,大部分工作是派给DMA完成的。其I/O过程可以简化如下:CPU计算文件地址 ->委托DMA读取文件 ->DMA接管总线 ->CPU进程A阻塞,挂起 ->CPU切换到进程B ->DMA读完文件后通知CPU(一个中断异常)->CPU切换回A进程操作文件。

  正是这样派发任务,并发系统才彰显出它的意义,假定原先读取文件CPU需要等待50ns,现在尽管两次切换上下文各耗时5ns,CPU还是赚取了40ns的执行时间。


二、进程相关概念

  人们发明进程是为了支持多道编程,进而提高CPU的利用率,改善用户体验。在深入剖析fork函数、学习进程通信方式等之前,介绍进程逻辑并发概念、进程管理涉及的位置及属性信息、进程的产生及消亡过程、进程的状态转换等。

2.1、进程—逻辑并发

  进程,顾名思义就是进展中的程序,一个程序加载到内存后就变为进程,即进程 = 程序 + 执行。下图为不同视角下的进程模型。因为CPU在任意时刻执行的进程只能有一个,概括讲,进程实际是逻辑并发

这里写图片描述
图4、进程模型的三个视角

  进程是操作系统对CPU进行的抽象和装扮。这种抽象同样需要一个物理基础,内存管理让多个进程共享同一个物理内存而不发生冲突。进程调度将CPU在多个进程间切换。


2.2、进程的位置

  我们知道进程最少必须包括一个或一组被执行的程序,与这些程序相关联的是局部变量、全局变量和已经定义常量的数据单元。因此,一个进程至少包括足够的内存空间,以保存该进程的程序和数据;此外程序的执行通常涉及用于跟踪过程调用和过程见参数传递的栈。最后,与每个进程相关联的还有操作系统用于控制进程属性的进程控制块(PCB)。程序、数据、栈和属性的集合称为进程映像(Process image)。其如下图5所示:

这里写图片描述
图5、进程映像中的典型元素

  进程映像的位置依赖于使用的内存管理方案,现代操作系统多采用段页式划分的方式 。为执行该程序,整个进程映像必须载入内存或至少载入虚拟内存中。(在任意时刻,进程映像的一部分可以在内存中,剩余部分可以在外存中),因此操作系统维护的进程表必须表明每个进程映像中每页的位置。

这里写图片描述
图6、操作系统控制表反映出系统资源使用情况

  尽管图6给出了四种不同的表,但是这些表必须以某种方式链接起来或者交叉使用。内存、I/O和文件是代表进程而被管理的,因此进程表中必须有对这些表的直接或间接引用。文件表中的文件可以通过I/O设备访问,有时他们也位于内存或者虚拟内存中,这些表必须可以被操作系统访问到,因此他们受制于内存管理。


2.3、进程的属性

  与一个社会管理人的过程类似,操作系统要管理进程就要维护关于进程的属性信息。当一个进程产生时,操作系统也为其创建记录。操作系统用于维护进程记录信息的结构就是进程控制块(Process Control Block, PCB),进程控制块中存放的信息即为有关该进程的资料。

进程控制块包括的信息:可以想象一个人的出生对于一个社会意味着什么。在一个人出生后,医院需要在几天内为其建立记录,该记录包括诸如姓名、性别、体重、身高、父母、何时何地出生、健康状态等,然后该记录用以登记户口,办理身份证,便于政府职能部门对其进行管理。

这里写图片描述
图7、进程控制块中的典型元素

  可以简单把进程控制块信息分为三类,即进程标识信息、进程状态信息、进程控制信息。
- 1、进程标识信息:每个进程分配了一个唯一的数字标识符(Process Indetification, 进程标识符PID),其可以简单的表示为主进程表的一个索引,使得操作系统可以根据进程标识符定位相应的表。用户标识符用于表明拥有该进程的用户。
- 2、处理器状态信息:包括处理器寄存器的内容,当一个进程正在运行时,其信息保存在寄存器中,当进程被中断时,所有的寄存器信息必须保存起来,使得进程恢复执行时这些信息可以恢复。
- 3、进程控制信息:这是操作系统控制和协调各种活动进程所需要的额外信息。

  进程控制块保持在操作系统所在的内核空间里,如下图8所示:

这里写图片描述
图8、进程表存放在操作系统所在的内核空间里面


2.4、进程的产生与消亡

1)、进程的产生:
- 1、系统初始化时,产生服务进程,使得新的进程和用户程序的执行成为可能。
- 2、 系统初始化后,用户双击可执行文件或者启动程序,系统为其创建进程
- 3、用户可以在程序里面调用fork生成新的进程

操作系统创建进程的步骤如下
1、分配进程控制块PCB(Process Control Block)
2、初始化机器寄存器
3、初始化页表
4、将程序代码从磁盘读进内存
5、将处理器状态设置为“用户态”
6、跳转到程序的起始地址(设置程序计数器)

2)、进程的消亡:
- 寿终:进程运行完成而退出
- 自杀:进程因错误而自行退出
- 他杀:进程被其他进程所终止
- 处决:进程因异常而被强行终结


2.5、进程的状态

  可简单将进程分为三种状态:执行、阻塞和就绪。其状态转换如下图5所示,我们在下篇笔记将介绍进程的调度算法。

这里写图片描述
图9、进程的三个典型状态


小结:本文介绍了多道编程下进程产生的背景、进程逻辑并发、进程位置、进程属性、进程产生于消亡等概念。

参考资料:
1、《操作系统的哲学》 邹恒明 著
2、《操作系统 - 精髓与设计原理 第七版》William Stallings著

纠错与建议
邮箱:[email protected]


猜你喜欢

转载自blog.csdn.net/xd_hebuters/article/details/79590441