进程简介


从诸如Windows98的单用户系统到诸如IBM z/OS的可以支持成千上万个用户的主机系统,他们的创建都围绕着进程的概念。所以,操作系统必须满足的大多数需求表示都涉及进程。

什么是进程

在给出进程定义之前,我们首先要了解这些概念:

  • 1)一个计算机平台包括一组资源,比如处理器、内存、I/O模块、定时器和磁盘驱动等。
  • 2)计算机程序是为执行某些任务而开发。
    1. 直接根据给定的硬件平台写应用程序的效率是底下的,缺少通用性。
  • 4)开发操作系统是为了给应用程序提供一个方便、安全和一致的接口。
  • 5)可以把操作系统想象成资源的同一抽象表示,可以被应用 程序请求和访问。包括内存、网络接口和文件系统等。

有了这些概念,我们就可以思考操作系统应该以怎样的方式管理应用程序的执行,才能达到资源对多个应用程序是可用的、物理处理器在多个应用程序间切换以保证所有程序都在执行中、处理器和I/O设备能得到充分利用的目的。

到此我们给出以下几个进程的定义:

  • 正在执行的程序
  • 正在计算机上执行的实例
  • 能分配给处理器并由处理器执行的实体
  • 具有以下特征的活动单元:一组指令序列的执行、一个当前状态和相关的系统资源集。

也可以把进程当成由一组元素组成的实体,进程的两个基本元素是程序代码(可能被执行相同程序的其他进程共享)和代码相关联的数据集。

进程控制块

在进程执行时,任意给定一个时间,进程都可以唯一地被表征为以下元素:

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

以上这些信息存放在一个叫做进程控制块的数据结构中,由操作系统创建和管理。
进程控制块是操作系统能够支持多进程和提供多处理的关键工具。因此,可以说进程是由程序代码和相关数据还有进程控制块组成。

进程状态

对于一个被执行的程序,操作系统会为该程序创建一个进程或任务。从处理器的角度看,它在指令序列中按某种顺序执行指令,这个顺序根据程序计数器寄存器中不断变化的值来指示,程序计数器可能指向不同进程中不同部分的程序代码;从程序自身角度看,它的执行涉及程序中的一系列指令。
每个进程有着它自己的轨迹,这些轨迹的交替可以描述处理器的行为,也就是进程的不同状态。

两状态进程模型

操作系统的基本职责是控制进程的执行,这包括确定交替执行的方式和给进程分配资源。在设计控制进程的程序时,第一步就是描述进程所表现出的行为。
我们可以观察到,一个进程,要么在执行,要么未执行,因而我们可以构造最简单的模型。一个进程可以处于以下两种状态之一:运行态或未运行态。
如下图所示,当操作系统给创建一个新进程时,它将该进程以未运行态加入到系统中,操作系统知道这个进程是存在的,并正在等待执行机会。当前正在运行的进程不时地被中断,操作系统中的分派器部分将选择一个新进程运行。前一个进程从运行态转化到未运行态,另一个进程转化到运行态。
在这里插入图片描述

进程终止和创建

在对简单的两状态模型进行改进之前,有必要讨论一下进程的创建和终止。无论使用哪种进程行为模型,进程的生存期都围绕着进程的创建和终止。

进程的创建

当一个新进程添加到那些正在被管理的进程集合中去时,操作系统需要建立用于管理该进程的数据结构,并在内存中给它分配地址空间。这些行为构成了一个新进程的 创建过程。
通常,以下四个事件会导致创建一个进程
在这里插入图片描述
传统地,操作系统创建进程地方式对用户和应用 程序都是透明地,这在当代操作系统中也很常见。但是,允许一个进程引发另一个进程地创建将是很有用的。当操作系统位另一个进程的显示请求创建一个进程时,这个动作称为进程派生。
当一个进程派生另一个进程时,前一个称做父进程,被派生的进程称做子进程

进程终止

在下面这张表中概括了进程终止的典型原因。任何一个计算机系统都必须位进程提供表示其完成的方法,批处理作业中应该包含一个Halt指令或用于终止的操作系统显示服务用来终止。
在有些操作系统中,进程可以被创建它的进程终止,或当父进程终止时而终止。
在这里插入图片描述

五状态进程模型

在前面提到的两状态模型中,对于可运行的进程队列处理器可以以一种轮转的方式操作。但是,对于简单的例子,这并不合适:这里存在着一些处于非运行态但已经等待就绪执行的进程,而同时还存在另一些处于阻塞状态等待I/O操作结束的进程。所以,使用单个队列不能只考虑队列中最老的进程。
解决这种问题的一种比较自然的方法是将非运行态分成两个状态:就绪和阻塞态。如下图:
在这里插入图片描述

  • 运行态:该进程正在执行。
  • 就绪态:进程做好了准白,只要有机会就开始执行。
  • 阻塞/等待态:进程在某些事件发生前不能执行,如I/O操作完成。
  • 新建态:刚刚创建的进程,操作系统还没有把它加入到可执行进程组中。通常是进程控制块已经创建但还没有加载到内存中的新进程。
  • 退出态:操作系统从可执行进程组中释放出的进程,或者是因为它自身停止了,或者是因为某种原因被取消。当一个父进程终止,与该父进程相关的所有子进程都将被终止。

之前我们提到可以将未运行态的进程分为就绪和阻塞态,但是,当一个事件发生时,所有位于阻塞队列中等待这个事件的进程都被转换到就绪态。
这种情况发生时,意味着操作系统必须扫描整个阻塞队列。
在这里插入图片描述
最后一种改进,按照优先级方案分派进程,维护多个就绪队列(每个优先级一个队列)将会带来很多的便利。操作系统可以很容易地确定哪个就绪进程具有最高的优先级且等待事件最长。

被挂起的进程

交换的需要

前面描述地三个基本状态(就绪态、运行态和组的态)提供了一种为进程行为建立模型地系统方法,并指导操作系统地实现。许多实际的操作系统都是按照这样地三种状态进行具体构造的。
但是,由于I/O的活动比计算速度慢很多,所以在单道系统中的处理器在大多数时候是空闲的。但是前面的模型并没有解决这个问题。即使是多道程序设计,大多数处理器仍然可能处于空闲状态。

一种解决方法是内存可以扩充以适应更多的进程,但是会有两个缺陷。首先是内存的价格问题,当内存大小增加时,价格也会随之增加。再者,程序对内存空间需求的增长速度比内存价格下降的速度快。因此更大的内存往往导致更大的进程,而不死更多的进程。
另一种解决方案是交换,包括把内存中某个进程的一部分或全部移到磁盘中。当内存中没有处于就绪状态的进程时,操作系统就把被阻塞的进程换出到磁盘的“挂起队列”,这是暂时保存从内存中被“驱逐”出的进程队列,或者说是被挂起的进程队列。
因此,我们需要重新考虑设计方式:如下图

  • 就绪态:进程在内存中并可以执行。
  • 阻塞态:进程在内存中等待一个事件。
  • 阻塞/挂起态:进程在外村中并等待一个事件
  • 就绪/挂起态:进程在外村中,但是只要被载入内存就可以被执行。
    在这里插入图片描述

挂起的其他用途

我们可以总结一下挂起进程的概念。按照以下特点定义挂起进程:

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

以下这张表给出了一些进程挂起的原因
在这里插入图片描述
在所有这些情况中,挂起进程的活动都是由最初请求的挂起的代理请求的。

参考资料:[1].操作系统精髓与设计原理(第六版)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

降温vae+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值