操作系统(2)-进程管理-进程基本概念


🚀前言

进程管理也称处理机管理。在多道程序批处理系统和分时系统中有多个并发执行的程序,为了描述系统中程序执行时动态变化的过程引入了进程。进程是资源分配和独立运行的基本单位。进程管理重点需要研究诸进程之间的并发特性,以及进程之间相互合作与资源竞争产生的问题。

人们常常希望同时运行多个程序,操作系统通过虚拟化(virtualizing)CPU来提供这种假象。通过让一个进程只运行一个时间片,然后切换到其他进程,操作系统提供了存在多个虚拟CPU的假象。这就是时分共享(time sharing)CPU技术,允许用户如愿运行多个并发进程。潜在的开销就是性能损失,因为如果CPU必须共享,每个进程的运行就会慢一点。

🚀进程的定义

进程是计算机中正在运行的程序的实例。它是操作系统进行资源分配和管理的基本单位,包括代码、程序和执行状态等信息。
进系统中的每个程序都运行在某个进程的上下文(contex)中。上下文是由程序正确运行所需的状态组成的。这个状态包括存放在内存中的程序的代码和数据,它的栈,通用目的资存器的内容,程序计数器,环境变量以及打开文件描述符的集合。

🚀程序与进程

🚁进程的创建

操作系统运行程序必须做的第一件事是将代码和所有静态数据(例如初始化变量)加载(load)到内存中,加载到进程的地址空间中

程序最初以某种可执行格式驻留在磁盘上(disk,或者在某些现代系统中,在基于闪存的SSD上)。因此,将程序和静态数据加载到内存中的过程,需要操作系统从磁盘读取这些字节,并将它们放在内存中的某处。

将代码和静态数据加载到内存后,操作系统在运行此进程之前还需要执行其他一些操作。必须为程序的运行时栈(run-timestack或stack)分配一些内存

你可能已经知道,C程序使用栈存放局部变量、函数参数和返回地址。操作系统分配这些内存,并提供给进程。操作系统也可能会用参数初始化栈。具体来说,它会将参数填入main()函数,即argc和argv数组。

操作系统也可能为程序的堆(heap)分配一些内存

在C程序中,堆用于显式请求的动态分配数据。程序通过调用malloc()来请求这样的空间,并通过调用free()来明确地释放它。数据结构(如链表、散列表、树和其他有趣的数据结构)需要堆。起初堆会很小。随着程序运行,通过malloc()库API请求更多内存,操作系统可能会参与分配更多内存给进程,以满足这些调用。

操作系统还将执行一些其他初始化任务,特别是与输入/输出(I/O)相关的任务。

例如,在UNIX系统中,默认情况下每个进程都有3个打开的文件描述符(filedescriptor),用于标准输入、输出和错误。这些描述符让程序轻松读取来自终端的输入以及打印输出到屏幕。

通过将代码和静态数据加载到内存中,通过创建和初始化栈以及执行与I/O设置相关的其他工作,OS现在(终于)为程序执行搭好了舞台。然后它有最后一项任务:启动程序,在入口处运行,即main()。

🚁前趋图

前趋图(Precedence Graph),是指一个有向无循环图,可记为DAG(Directed Acyclic Graph),它用于描述进程之间执行的先后顺序。图中的每个结点可用来表示一个进程或程序段,乃至一条语句,结点间的有向边则表示两个结点之间存在的偏序(parialorder)或前趋关系(precedencerelation)。
程序段pi和Pj的前趋关系表示成Pi—Pj,其中,Pi是Pj的前趋,Pj是Pi的后继,其含义是Pi执行结束后Pj才能执行。

🚁程序顺序执行

🛴程序的顺序执行

通常,一个应用程序由若干个程序段组成,每一个程序段完成特定的功能,它们在执行时,都需要按照某种先后次序顺序执行,仅当前一程序段执行完后,才运行后一程序段。如,在进行计算时,应先运行输入程序,用于输入用户的程序和数据;然后运行计算程序,对所输入的数据进行计算;最后才是运行打印程序,打印计算结果。
image.png

🛴程序顺序执行时特征

顺序性:指处理机严格地按照程序所规定的顺序执行,即每一操作必须在下一个操作开始之前结束
封闭性:指程序在封闭的环境下运行,即程序运行时独占全机资源,资源的状态(除初始状态外)只
有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响
可再现性:指只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿
地执行,还是"停停走走"地执行,都可获得相同的结果。程序顺序执行时的这种特性,
为程序员检测和校正程序的错误带来了很大的方便。

🚁程序并发执行

🛴程序的并发执行

程序顺序执行时,虽然可以给程序员带来方便,但系统资源的利用率却很低。为此,在系统中引入了多道程序技术,使程序或程序段间能并发执行。

🛴程序并发执行的特征

在引入了程序间的并发执行功能后,虽然提高了系统的吞吐量和资源利用率,但由于他们共享系统资源,以及他们为完成同一项工作相互合作,致使在这些并发执行的程序之间形成相互制约的关系。
程序并发执行时的特征如下:

  • 失去封闭性:当系统中存在着多个可以并发执行的程序时,系统中的各种资源将为它们所共享,而这些资源的状态也由这些程序来改变,致使其中任一程序在运行时,其环境都必然会受到其它程序的影响。例如,当处理机已被分配给某个进程运行时,其它程序必须等待。显然,程序的运行已失去了封闭性
  • 不可再见性(程序和机器的执行程序的活动不再一一对应):程序在并发执行时,由于失去了封闭性,其计算结果必将与并发程序的执行速度有关,从而使程序的执行失去了可再现性。换而言之,程序经过多次执行后,虽然它们执行时的环境和初始条件相同,但得到的结果却各不相同。
  • 间断性(并发程序间的相互制约性):程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的程序之间形成了相互制约的关系。

🚀进程的组成

进程通常是由程序、数据和进程控制块(ProcessControlBlock,PCB)组成的。
程序:程序部分描述了进程需要完成的功能。假如一个程序能被多个进程同时共享执行,那么这一部分就应该以可再入(纯)码的形式编制,它是程序执行时不可修改的部分。
数据:数据部分包括程序执行时所需的数据及工作区。该部分只能为一个进程所专用,是进程的可修改部分。
PCB:PCB是进程存在的唯一标志,主要内容如下:

信息含义
进程标识符标明系统中的各个进程
状态说明进程当前的状态
位置信息指明程序及数据在主存或外存的物理位置
控制信息参数,信号量,消息等
队列指针链接同一状态的进程
优先级进程调度的依据
现场保护区将处理机的现场保护到该区域,以便再次调度时能继续正确运行
其他因不同的系统而异

🚀进程的状态

在多道程序系统中,进程在处理器上交替运行,状态也不断地发生变化,因此进程一般有3种基木状态:运行、就绪和阻塞。

  • 运行(running):在运行状态下,进程正在处理器上运行。这意味着它正在执行指令。
  • 就绪(ready):在就绪状态下,进程已准备好运行,但由于某种原因,操作系统选择不在此时运行。
  • 阻塞(blocked):在阻塞状态下,一个进程执行了某种操作,直到发生其他事件时才会准备运行。

一个常见的例子是,当进程向磁盘发起I/O请求时,它会被阻塞,因此其他进程可以使用处理器。

image.png

🚁具有挂起状态的进程状态

由于进程的不断创建,系统资源特别是主存资源已不能满足进程运行的要求。这时,就必须将某些进程挂起,放到磁盘对换区,暂时不参加调度,以平衡系统负载。或者是系统出现故障,或者是用户调试程序,也可能需要将进程挂起检查问题。

  • 活跃就绪:活跃就绪是指进程在主存并且可被调度的状态。
  • 静止就绪:静止就绪是指就绪进程被对换到辅存时的状态,它是不能被直接调度的状态,只有当主存中没有活跃就绪态进程,或者是挂起态进程具有更高的优先级时,系统将把挂起就绪态进程调回主存并转换为活跃就绪。
  • 活跃阻塞:活跃阻塞是指进程在主存,一旦等待的事件产生便进入活跃就绪状态。
  • 静止阻塞:静止阻塞是指阻塞进程对换到辅存时的状态,一旦等待的事件产生便进入静止就绪状态。

image.png

🚀小结

进程使操作系统最基本的抽象,它很简单地被视为一个正在运行的程序。

参考资料:

  • [1]《操作系统导论》
  • [2]《现代操作系统》
  • [3]《系统架构设计师教程》
  • [4]《计算机操作系统》
  • [5]《深入理解计算机系统》

系列文章连接:
操作系统(1)-操作系统概述
操作系统(2)-进程管理-进程基本概念
操作系统(3)-进程管理-受限直接执行
操作系统(4)-进程管理-进程间通信

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值