进程描述和控制

来源:互联网 发布:软件alias怎么读 编辑:程序博客网 时间:2024/06/10 07:47
  • 操作系统必须交替执行多个进程,在合理的响应时间范围内使用处理器的利用率最大
  • 操作系统必须按照特定的策略(例如某些函数或应用程序具有较高的优先级)给进程分配资源,同时避免死锁
  • 操作系统可以支持进程间的通信和用户创建进程

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

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

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

  • 标识符:跟这个进程相关地唯一标识符,用来区别其他进程
  • 状态:如果进程正在执行,那么进程处于运行态
  • 优先级:相对于其他进程的优先级
  • 程序计数器:程序中即将被执行的下一条指令的地址
  • 内存地址:包括程序代码和进程相关数据的指针,还有和其他进程共享内存块的指针
  • 上下文数据:进程执行时处理器的寄存器中的数据
  • I/O状态信息:包括显式的I/O请求、分配给进程的I/O设备和被进程使用的文件列表
  • 记账信息

上述列表信息被存放在一个称为进程控制块的数据结构中,该控制块由操作系统创建和管理。

这里写图片描述

进程控制块是操作系统能够支持多进程和提供多重处理技术的关键工具。当进程被中断时,操作系统会把程序计数器和处理器寄存器(上下文数据)保存到进程控制块中的相应位置,进程状态也被改变为其他值,例如阻塞态或就绪态。现在操作系统可以自由地把其他进程置为运行态,把其他进程的程序计数器和进程上下文数据加载到处理器寄存器,这样其他进程就可以开始执行。

进程的创建和终止

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

进程终止的典型原因

这里写图片描述

五状态模型

这里写图片描述

阻塞/等待态:进程在某些事件发生前不能执行,如I/O操作完成。

下图给出了可能实现的排队规则:就绪队列和阻塞队列。进入系统的每个进程被放置在就绪队列中,当操作系统选择另一个进程运行时,将从就绪队列中选择。当事件发生时,相应队列中的所有进程都转换到就绪态。
这里写图片描述

被挂起的进程

挂起进程:

  • 进程不能立即执行
  • 进程可能是或不是正在等待一个事件。阻塞事件的发生不会使进程立即被执行
  • 为阻止进程执行,可以通过代理把这个进程置于挂起状态,代理可以是进程自己,也可以是父进程或操作系统
  • 除非代理显式地命令系统进行状态转换,否则进程无法从这个状态中转移。

这里写图片描述

进程描述

操作系统控制计算机系统内部的事件,它为处理器执行进程而进行调度和分派,给进程分配资源,并响应用户程序的基本服务请求。可以把操作系统视为管理系统资源的实体。
这里写图片描述

操作系统的控制结构

操作系统为了管理进程和资源,必须掌握关于每个进程和资源当前状态的信息。普遍使用的方法是:操作系统构造并维护它所管理的每个实体的信息表。操作系统维护着四种不同类型的表:内存、I/O、文件和进程。
这里写图片描述

内存表用于跟踪内(实)存和外存(虚拟内存)。
操作系统使用I/O表管理计算机系统的I/O设备和通道。
操作系统还维护着文件表,这些表提供关于文件是否存在、文件在外存中的位置、当前状态和其他属性的信息。
操作系统管理进程必须维护进程表

进程控制结构

操作系统在管理和控制进程时,首先必须知道进程的位置,然后,它必须知道在管理时所必需的进程属性(进程ID、进程状态)。

  • 进程位置:进程包括:一个或一组被执行的程序,与这些程序相关联的是局部变量、全局变量和任何已定义常量的数据单元。因此,一个进程至少包括足够的内存空间,以保存该进程的程序和数据;程序的执行通常涉及用于跟踪过程调用和过程间参数传递的栈。与每个进程相关联的还有操作系统用于控制进程的许多属性,属性的集合称为进程控制块。程序、数据、栈和属性的集合称为进程映像。
    这里写图片描述

  • 进程属性:复杂的多道程序系统需要关于每个进程的大量信息,该信息可以保留在进程控制块中。下面是操作系统所需要每个进程信息的简单分类
    这里写图片描述
    这里写图片描述
    这里写图片描述

可以把进程控制块信息分成三类:

  • 进程标识信息
  • 进程状态信息
  • 进程控制信息

处理器状态信息:包括处理器寄存器的内容。进程控制块中第三个主要的信息类可以称为进程控制信息,这是操作系统控制和协调各种活动进程所需要的额外信息。

下图给出了虚拟内存中进程映像的结构
这里写图片描述

进程控制块还可能包含构造信息,包括将进程控制块链接起来的指针。之前所述的队列可以由进程控制块的链表实现。
这里写图片描述

进程控制块的作用:进程控制块是操作系统中最重要的数据结构。每个进程控制块包含操作系统所需要的关于进程的所有信息。

进程控制

  • 执行模式:需要区分通常与操作系统相关联的及与用户程序相关联的处理器执行模式。

    非特权态常称为用户态,这是因为用户程序通常在该模式下运行;特权态可称为系统态、控制态或内核态,内核态指的是操作系统的内核。

操作系统内核中通常可以找到的功能
这里写图片描述

处理器如何知道它正在什么模式下执行及如何改变这一模式。

  • 程序状态字中有一位表示执行模式,这一位应某些事件的要求而改变。在典型情况下,当用户调用一个操作系统服务或中断触发系统例程的执行时,执行模式被设置为内核态,当从系统服务返回到用户进程时,执行模式被设置为用户态。

进程创建

  • 给进程分配一个唯一的进程标识符。在主进程表中增加一个新表项,表中的每个表项对应着一个进程
  • 给进程分配空间。进程映像中的所有元素。私有用户地址空间(程序和数据)和用户栈需要多少空间。
  • 初始化进程控制块
  • 设置正确的连接:如果操作系统把每个调度队列都保存成链表,则新进程必须放置在就绪或就绪/挂起链表中。创建或者扩充其他数据结构。

进程切换

  • 何时切换进程:进程切换可以在操作系统从当前正在运行的进程中获得控制权的任何时刻发生。下表列出了可能把控制权交给操作系统的事件:
    这里写图片描述

大多数操作系统区分两种类型的系统中断。一种称为中断,另一种称为陷阱。前者与当前正在运行的进程无关的某种类型的外部事件相关。或者与当前正在运行的进程所产生的错误或异常条件相关,如非法的文件访问。

对于陷阱,操作系统确定错误或异常条件是否是致命的。如果是,当前正在运行的进程被转换为退出态,并发生进程切换。

如存在一个未处理的中断,处理器需要做以下工作:

  • 把程序计数器置成中断处理程序的开始地址
  • 从用户态切换为内核态,使得中断处理代码可以包含特权的指令

进程状态的变化

模式切换和进程切换是不同的。发生模式切换可以不改变正处于运行态的进程状态,在这种情况下,保存上下文环境和以后恢复上下文环境只需要很少的开销。

操作系统的执行

  • 操作系统与普通的计算机以同样的方式运行,也就是说,它也是由处理器执行的一个程序。
  • 操作系统经常释放控制权,并且依赖于处理器恢复控制权。

在用户进程中执行

在较小机器(PC、工作站)的操作系统中,常见的方法实际是在用户进程的上下文中执行几乎所有操作系统软件。操作系统从根本上说是用户调用的一组例程,在用户进程环境中执行,用于实现各种功能。在任何时刻,操作系统管理者n个进程映像,每个映像还要包括内核程序的程序、数据和栈区域。

下图表示一个典型的进程映像结构:当进程在内核模式下时,独立的内核栈用于管理调用/返回。操作系统代码和数据位于共享地址空间中,被所有的用户进程共享。
这里写图片描述

在某一个时候,一个进程可以保存它的状态信息,从就绪态进程中选择另一个进程,并把控制权释放给这个进程。在关键时候,在用户进程中执行的代码是共享的操作系统代码,而不是用户代码。基于用户态和内核态的概念,即使操作系统例程在用户进程环境中执行,用户也不能篡改或干涉操作系统例程。

基于进程的操作系统

下图:即把操作系统作为一组系统进程来实现。这里写图片描述

UNIX SVR4进程管理

UNIX采用大部分操作系统在用户进程环境中执行。UNIX使用两类进程,即系统进程和用户进程。系统进程在内核态下运行,执行操作系统代码以实现管理功能和内部处理,如内存空间的分配和进程交换;用户进程在用户态下运行以执行用户程序和实用程序,在内核态下运行以执行属于内核的指令。

进程状态

  • UNIX采用两个运行态表示进程是在用户态下执行还是内核态下执行。
  • UNIX区分内存中运行就绪态和被抢占态这两个状态。从本质上看,它们是同一个状态。当一个进程正在内核态下运行时(系统调用、时钟中断或I/O中断的结果),内核已经完成了其任务并准备将控制权返回给用户程序时,就可能会出现枪战的时机。这时,内核可能决定抢占当前进程,支持另一个已经就绪并具有较高优先级的进程。

只有当进程准备从内核态移到用户态时才可能发生抢占。进程在内核态下运行时是不会被抢占的,这使得UNIX不适用于实时处理。

UNIX中有两个独特的进程。进程0是一个特殊的进程,是在系统启动时创建的。进程0产生进程1,称为初始进程,进程1是系统中的所有其他进程的祖先。当新的交互用户登录到系统时,由进程1为该用户创建一个用户进程。随后,用户进程可以创建子进程,从而构成一颗分支树。因此,任何应用程序都是由一组相关进程组成。

进程描述

UNIX的进程是一组相当复杂的数据结构,它给操作系统提供管理和分派进程所需要的所有信息。下表概括了进程映像中的元素,它被组织成三部分:用户级上下文、寄存器上下文和系统级上下文。这里写图片描述

进程表项和U区的区别反映出了UNIX内核总是在某些进程的上下文环境中执行,大多数时候,内核都在处理与该进程相关的部分,但在某些时候,如当内核正在执行一个调度算法,准备分派另一个进程时,它需要访问其他进程的相关信息。当给定进程不是当前进程时,可以访问进程控制表中的信息。

进程控制

UNIX中的进程创建时通过内核系统调用fork()实现的。当一个进程产生一个fork请求时,操作系统执行以下功能:

  • 为新进程在进程表中分配一个空项;
  • 为子进程赋一个唯一的进程标识符;
  • 生成一个父进程上下文的逻辑副本,不包括共享内存区;
  • 增加父进程拥有的所有文件的计数器,以标识有一个另外的进程现在也拥有这些文件;
  • 把子进程置为就绪态;
  • 向父进程返回子进程的进程号;对子进程返回零

当从fork中返回时,测试返回参数,如果值为零,则它是子进程,可以转移到相应的用户程序中继续执行;如果值不为零,则它是父进程,继续执行主程序。

原创粉丝点击