操作系统精髓与设计原理(原书第6版)——学习笔记(11)

来源:互联网 发布:高仿鞋进货渠道网络 编辑:程序博客网 时间:2024/05/22 10:36

3进程描述和控制

        操作系统的设计必须反映某些一般性的要求。所有多道程序操作系统,从诸如Windows 98的单用户到诸如IBM z/OS的可支持成千上万个用户的主机系统,它们的创建都围绕着进程的概念。因此,操作系统必须满足的大多数需求表示都涉及进程:

  • 操作系统必须交替执行多个进程,在合理的响应时间范围内使处理前期的利用率最大。

  • 操作系统必须按照特定的策略(例如某些函数或引用程序具有较高的优先级)给进程分配资源,同时避免死锁。

  • 操作系统可以支持进程间的通信和用户创建进程,它们对构造应用程序很有帮助。

3.1     什么是进程

3.1.1 背景

在给进程下定义之前,首先总结一些第一章和第二章介绍的一些概念:

  1. 一个计算机平台包括一组硬件资源,比如处理器、内存、I/O模块、定时器和磁盘驱动器等。

  2. 计算机程序时为执行某些任务而开发的。在典型的情况下,它们接受外来的输入,做一些处理之后,输出结果。

  3. 直接根据给定的硬件平台写应用程序效率是低下,主要原因如下:

  1. 针对相同的平台可以开发出很多应用程序,所以开发出这些应用程序访问计算机资源的通用例程是很有意义的。

  2. 处理器本身只能对多道程序设计提供有限的支持,需要用软件去管理处理器和其他资源同时被多个程序共享。

  3. 如果多个程序在同一时间都是活跃的,那么需要保护每个程序的数据、I/O使用和其他资源不被其他程序占用。

  1. 开发操作系统是为了给应用程序提供一个方便、安全和一致的接口。操作系统是计算机硬件和应用程序之间的一层软件(如图2.1所示),对应用程序和工具提供了支持。

  2. 可以把操作系统想象为资源的统一抽象表示,可以被应用程序请求和访问。资源包括内存、网络接口和文件系统等。一旦操作系统为应用程序创建了这些资源的抽象表示,就必须管理它们的使用,例如一个操作系统可以允许资源共享和资源保护。

有了应用程序、系统软件和资源管理的概念,就可以讨论操作系统怎样以一个有序的方式管理应用程序的执行,以达到以下目的:

  • 资源对多个应用程序是可用的。

  • 物理处理器在多个应用程序间切换以保证所有程序都在执行中。

  • 处理器和I/O设备能得到充分的利用。

所有现代操作系统采用的方法都是依据对应于一个或多个进程存在的应用程序执行的一种模型。

3.1.2进程和进程控制块

进程以下几个定义:

  • 正在执行的程序

  • 正在计算机上执行的程序实例

  • 能分配给处理器并由处理器执行的实体

  • 具有以下特征的活动单元:一组指令序列的执行、一个当前状态和相关的系统资源集。

也可以把进程当成一组元素组成的实体,进程的两个基本的元素是程序代码和代码相关联的数据集。假设处理器开始执行这个程序代码,且我们把这个执行实体叫进程。在进程执行时,任意一个给定时间,进程都可以唯一地被表征为以下元素:

  • 标识符:跟这个进程相关的唯一标识符,用来区别其他进程。

  • 状态:如果进程正在执行,那么进程处于运行状态

  • 优先级:相对于其他进程的优先级

  • 程序计数器:程序中即将被执行的下一条指令的地址

  • 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享内存块的指针。

  • 上下文数据:进程执行时处理器的寄存器中的数据

  • I/O状态信息:包括显示的I/O请求、分配给进行的I/O设备(例如磁带驱动器)和被进程使用的文件列表等。

  • 记账信息:可能包括处理器时间总和、使用的时钟数总和、时间限制、记账号等。

上述的列表信息存放字进程控制块中(如图3.1所示)的数据结构中,该控制块由操作系统创建和管理。

比较有意义的一点是,进程控制块包含了充分的信息,这样就可以中断一个进程的执行,并且在后来恢复执行进程时就好像进程未被中断过。进程控制块时操作系统能够支持多进程和提供多处理的关键工具。当进程被中断时,操作系统会把程序计数器和处理器寄存器(上下文数据)保存到进程控制块中的相应位置,进程状态也被改变为其他的值,例如阻塞态或就绪态。现在操作系统可以自由地把其他进程设置为运行态,其他进程的程序计数器和进程上下文数据加载到处理器寄存器中,这样其他进程就可以开始执行了。

因此,可以说进程是由程序代码和相关数据还有进程控制块组成。对于一个单处理器计算机,在任何时间都最多只有一个进程在执行,正在执行的这个进程的状态位运行态。

3.2 进程状态

        对于一个被执行的程序,操作系统会为该程序创建一个进程或任务。从处理器的角度看,它在指令序列中按某种顺序执行指令,按这个顺序根据程序计数器寄存器中不断变化的值来提示,程序计数器可能指向不同进程中不同部分的程序代码;从程序自身的角度看,它的执行涉及程序中的一系列指令。

        可以通过列出为该进程执行的指令序列来描述单个进程的行为,这样的序列称作进程的轨迹。

        考虑一个非常简单的例子,图3.2给出三个进程在内存中的布局,为简化讨论,假设没有使用虚拟内存,因此所有三个进程都由完全载入内存中的程序表示,此外,有一个小的调度器使处理器从一个进程换到另一个进程。图3.3给出了这三个进程在执行过程早期的轨迹,给出了进程AC最初执行的12条指令,进程B执行4条指令,假设第4条指令调用了进程必须等待的I/O操作。

        现在从处理器的角度看这些轨迹。图3.4给出最初的52个指令周期中交替的轨迹(指令周期给出了编号)。在图中,阴影部分代表由调度器执行的代码。在每个实例中由调度器执行的指令顺序是相同的,因为是调度器的同一个功能在执行。假设操作系统仅允许一个进程最多连续执行6个指令周期,在此之后将被中断,这避免了任何一个进程独占处理器时间。如图3.4所示,进程A最初的6条指令。在进程B4条指令被执行后,进程B请求一个它必须等待的I/O动作,因此,处理器停止执行进程B,并通过分派转移到进程C。在超时后,处理器返回进程A,当这次处理超时时,进程B仍然等待那个I/O操作的完成,因此调度器再次转移到进程C

 

 

3.2.1两状态进程模型

        操作系统的基本职责是控制进程的执行,这包括确定交替执行的方式和给进程分配资源。在设计控制进程的程序时,第一步就是描述进程所表现出的行为。

        任何时刻,一个进程要么正在执行,要么没有执行,因而可以构造最简单的模型。一个进程处于以下两种状态:运行态、未运行态,如图3.5a所示。当操作系统创建一个新进程时,它将该进程以未运行态加入到系统中,操作系统知道这个进程是存在的,并等待执行机会。当前正在运行的进程不时被中断,操作系统中的调度器部分将选择一个新进程运行。前一个进程从运行态装转换到未运行态,另一个进程装换到运行态。

3.2.2进程的创建和终止

 3.2.2.1进程的创建

        当一个新进程添加到那些正在被管理的集合中去时,操作系统需要建立用于管理该进程的数据结构,并在内存中给它分配地址空间。

        通常有4个事件会导致创建一个进程,如表3.1所示。在批处理环境中,响应作业提交时会创建进程;在交互环境中,当一个新用户试图登录时会创建进程。不论在哪种情况下,操作系统都负责新进程的创建,操作系统也可能会代表应用程序创建进程。例如,如果用户请求打印一个文件,则操作系统可以创建一个管理打印的进程,进而使请求进程可以继续执行,与完成打印任务的时间无关。当操作系统为另一个进程的显示请求创建一个进程时,这个动作称为进程派生。当一个进程派生另一进程时,前一个称作父进程,被派生的进程称作子进程。

3.2.2.2进程中止

        3.2概括了进程终止的典型原因。

0 0
原创粉丝点击