进程管理(进程的概念)

现代操作系统的重要特点是在保证安全的情况下,程序并发执行、系统所拥有的资源被共享、用户随机地使用系统资源。操作系统的重要任务之一是使用户充分、有效的利用系统资源。那么应该采用一个什么样的概念来描述计算机程序的执行过程和作为资源分配的基本单位,才能充分反映操作系统的执行并发、资源共享及用户随机使用的特点呢?

由于程序是静态、顺序的,不适合作为并发和资源分配单位的描述,于是引入进程的概念。进程是操作系统中最基础和最重要的概念。“进程管理”系列文章主要介绍进程的概念、进程的状态及转换、进程控制、进程的同步和互斥、进程通信、进程死锁,最后简单介绍线程的概念。

 

一:进程的概念

1.进程的引入:程序是用来描述计算机索要完成的独立功能,并在时间上严格地按照前后次序相继地进行计算机操作的序列集合,是一个静态的概念。它体现了变成人员要求计算机完成相应功能时所应该采取的顺序步骤。

  • 程序的顺序执行:

通常可以把一个应用程序分成若干个程序段,在各程序段之间,必须按照某种先后次序顺序执行,仅当前操作(程序段)执行完后,才能执行后继动作。例如:在进行计算时,总须先输入用户的程序和数据,然后进行计算,才能打印结果。

程序顺序执行的特征如下:

顺序性。处理机的操作严格按照程序所规定的顺序执行,即每一操作必须在上一个操作结束之后开始。

封闭性。程序是在封闭的环境下执行的,即程序运行时独占全机资源,资源的状态只有本程序才能改变。程序一旦开始执行,执行结果不受外界因素影响。

可再现性。只要程序的执行时的环境以及初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是“走走停停”地执行,都将获得相同的执行结果。

程序的顺序执行为程序员检测和校正程序的错误带来了很大的方便。

  • 程序的并发执行:

并发执行是一种增强计算机系统的处理能力和提高资源利用率的技术。程序的并发执行可以分为两种。

第一种是多道程序系统(最初CPU和输入/输出设备的运行是串行的,即在程序进行输入/输出时,CPU只能等待。CPU需要不断地探询输入/输出是否完成,因此不能执行别的程序。由于输出/输出设备的运行速度远低于CPU,所以开发人员设计让CPU和输入/输出设备并发执行,即在一个程序进行输入/输出时,让另一个程序继续执行。这就是多道程序系统。)的程序执行环境变化所引起的多道程序的并发执行。在多道程序系统环境下,各道程序在逻辑上独立,具备了独立执行的条件。而程序与数据输入的随机性以及执行起始时间的随机性又导致了多道程序要求同时执行的客观要求。由于资源的有限性,多道程序的并发执行总是伴随着资源的共享与竞争,从而制约了各道程序的执行速度,因此无法做到在微观上的同时执行。因此,尽管多道程序的并发执行在宏观上是同时进行的,但在微观上仍是顺序执行的。

第二种是在某道程序的几个程序段中,包含着一部分可以同时执行或顺序颠倒执行的代码。如

read(a);                 read(b);

它们既可以同时执行,也可以颠倒次序执行。也就是说,对于这样的语句,同时执行不会改变顺序程序所具有的逻辑性质。因此,可以采用并发执行来充分利用系统资源,以提高计算机的处理能力。

程序的并发执行虽然提高了系统的吞吐量,单页产生了一些与程序顺序执行时不同的特征:

间断性。程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的程序之间,形成了相互制约的关系。相互制约将导致并发程序具有“执行-暂停-执行”这种间断性的活动规律。

失去封闭性。程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行失去了封闭性。因此某程序执行时,必然会收到其他程序的影响。例如:当处理机这一资源已经被某个程序占用时,另一个程序必须等待。

不可再现性。程序在并发执行时,由于失去了封闭性,也将导致其失去可再现性。

因为并发执行会使程序失去封闭性,从而失去可再现性。也就是说,程序经过多次执行之后,虽然他们执行时的环境和初始条件相同,但得到的结果却各不相同。因此在支持多道程序并发的操作系统中应提供相应的机制解决以上问题,保证程序执行的正确性。

一般情况下,并发执行的个程序段如果共享软、硬件资源,都会造成其执行结果受执行速度影响的局面。显然,这是程序设计人员不希望看到的。为了使程序在并发执行时不出现错误结果,必须采取某些措施来制约、控制各并发程序段的执行速度。这在操作系统程序设计中尤为重要。因为操作系统用户随机性与各道程序逻辑独立的特点将使得每个用户程序所使用的软、硬件资源都收到其他并发程序的共享和竞争,从而得到非预料的或不正确的结果。为了控制和协调个程序段执行过程中软、硬件资源的共享和竞争,必须有一个描述各程序段执行过程和共享资源的基本单位。

从上述讨论可以看出,由于程序的顺序性、静态性以及独立性,用程序段作为描述其执行过程以及共享资源的基本单位是不合适的。需要有一个能描述程序的执行过程和用来分配共享资源的基本单位,这个基本单位称为进程(process)。

 

2.进程的定义:并发执行的程序在执行过程中分配和管理资源的基本单位。

进程和程序的异同:

进程是一个动态概念,程序是一个静态概念。程序是指令的有序集合,没有任何执行的含义。而进程则强调执行过程,它动态地被创建,并被调度执行后消亡。

进程具有并发特征,程序没有。

进程是竞争计算机系统资源的基本单位,从而其并发性收到共享资源的制约。

只要该程序段所对应的数据集不同,不同的进程就可以包含同一程序段。

 

3.进程的描述:一个进程是一个程序对某个数据集的执行过程,是分配资源的基本单位。

那么,从处理机来看,如何识别描述程序执行活动的进程呢?显然,系统中需要有描述进程存在和能够反映其变化的物理实体,即进程的静态描述。

进程的静态描述由三部分组成:进程控制块(PCB),有关程序段和该程序段对其进行操作的数据结构集。进程控制块包含了有关进程的描述信息、控制信息以及资源信息,是进程动态特征的集中反映。系统根据PCB感知进程的存在和通过PCB中所包含的各项变量的变化,掌握进程所处的状态以达到控制进程活动的目的。由于进程PCB是系统感知进程的唯一实体,因此,在几乎所有的多道操作系统中,一个进程的PCB结构都是全部或部分常驻内存的。

进程的程序部分描述进程所要完成的功能,而数据结构集是程序在执行时必不可少的工作区和操作对象。这两部分是进程完成所需功能的物质基础,在大部分多道操作系统中,这两部分内容放在外存中,直到该进程执行时再调入内存。

  • 进程控制块(PCB):

作用:描述和控制进程的运行,是进程实体的一部分,是操作系统中最重要的记录型数据结构。操作系统是根据PCB来对并发执行的进程进行控制和管理的。

例如:当操作系统要调度某进程执行时,要从该进程的PCB中查出其现行状态及优先级;在调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据;进程在执行过程中,当需要和与之合作的进程实现同步、通信或访问文件时,也都需要访问PCB;当进程由于某种原因而暂停执行时,又须将其断点的处理机环境保存在PCB中。综上也可以说,PCB是进程存在的唯一标志。

再如:当系统创建一个新进程时,就位它建立了一个PCB,进程结束时又回收其PCB,进程于是也随之消亡。PCB可以被操作系统中的多个模块读或者修改,如被调度程序、资源分配程序、中断处理程序以及监督和分析程序等读或修改。因为PCB经常被系统访问,故PCB应该常驻内存。系统将所有的PCB组织成若干个链表(或队列),存放在操作系统中专门开辟的PCB区内。像在linux中就用task_struct数据结构来描述每个进程的进程控制块。

PCB中的信息

进程标识符。用于唯一地标识一个进程。一个进程通常有两种标识符:内部标识符和外部标识符。内部标识符是系统为进程分配的一个数字标识符,主要用于方便系统调用。外部标识符由进程创建者提供,通常由数字、字母组成的,常用于用户在访问该进程时使用。为了描述进程的家族关系,还应设置父进程标识和子进程标识。还可以设置用户标识,以指示拥有该进程的用户。

处理机状态。处理机状态信息主要是由处理机的各种寄存器中的内容组成的。处理机在运行时,许多信息都放在寄存器中,当处理机被中断时,所有这些信息都必须保存在PCB中,以便在该进程重新执行时,能从断点继续执行。(寄存器包括一下一些寄存器:通用寄存器(用户程序可以访问的,用于暂存信息)。指令计数器(存放要访问的吓一跳指令的地址)。程序状态字PSW(其中含有状态信息,如条件码、执行方式、中断屏蔽标志等)。用户栈指针(每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址,栈指针指向该栈的栈顶))。

进程调度信息。进程状态,进程优先级,进程调度所需的其他信息(与所采用的进程调度算法有关,比如进程已等待CPU的时间总和、进程已执行的时间总和等),事件(进程由执行状态转变为阻塞状态锁等待发生的事件,即阻塞原因)。

进程控制信息。包括程序和数据的地址(程序和数据所在的内存或外存地址),进程同步和通信机制(消息队列指针、信号量等),资源清单(除CPU之外,进程所需的全部资源和已经分配到该进程的资源的清单),链接指针(本进程PCB所在队列中的下一个进程的PCB的首地址)。

进程控制块的组织方式

链接方式。这种方式把具有同一状态的PCB,用其中的链接字链接成一个队列。这样,就可以形成就绪队列、若干个阻塞队列和空闲队列等。对其中的就绪队列常按进程优先级的高低排列,把优先级高的进程的PCB排在队列前面。此外,也可以根据阻塞原因的不同而把处于阻塞状态的进程的PCB排成等待输入/输出操作完成的队列和等待分配内存的队列等。

索引方式。系统根据所有进程的状态建立几张索引表。例如就绪索引表、阻塞索引表等,并把各索引表在内存的首地址记录在内存的一些专用单元中。在每个索引表的表目中,记录具有相应状态的某个PCB在PCB表中的地址。

 

  • 进程上下文:

进程上下文实际上是进程执行过程中顺序关联的静态描述,是一个与进程切换和处理机状态发生变化有关的概念。

进程上下文是一个抽象的概念,它包含了每个进程执行过的、执行时的以及待执行的指令和数据在指令寄存器、堆栈(存放个调用子程序的返回点和参数等)、状态字寄存器等中的内容。

已执行过的进程指令和数据在相关寄存器与堆栈中的内容称为上文;把正在执行的指令和数据在寄存器与堆栈中的内容称为正文;把待执行的指令和数据在寄存器与堆栈的内容称为下文。

进程上下文的切换发生在进程调度的时候,而不是一个进程内部。

进程上下文切换过程一般包含3个部分,并涉及3个进程。即第一部分为保存被切换进程的正文部分(或当前状态)至有关存储区。第二部分是操作系统中有关调度和资源分配程序执行,选取新的进程。第三部分是将被选中的进程的原来被保存的正文部分从有关存储区中取出,并送至有关寄存器与堆栈中,激活被选中进程执行。

进程上下文切换涉及谁来保护和获取进程的正文问题。再者,进程上下文切换还涉及系统调度和分配程序,这些都比较耗费CPU时间。为了提高系统执行效率,有的计算机在设计时采用了多组寄存器技术,级进程上下文切换时,不把被切换进程上下文的正文保留到相关存储区,而直接切换相应的寄存器。这就减少了数据保存和获取所耗费的时间。

为了进一步提高执行效率,又提出了线程的概念(暂不说明)。

猜你喜欢

转载自blog.csdn.net/Dream_Ryoma/article/details/81564508