【转】进程

转自:http://baike.baidu.com/view/19746.htm

进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动。多道程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行,何时停顿,也无法看出它与其它执行程序的关系,因此,程序这个静态概念已不能如实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质,人们引入“进程(Process)”概念。

概念提出

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。

定义

狭义定义:进程是正在运行的程序的实例(aninstanceof acomputer programthat is being executed)。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是 操作系统动态执行的 基本单元,在传统的 操作系统中,进程既是基本的 分配单元,也是基本的执行单元。
  • 主要两点
进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括 文本区域(text region)、数据区域(data region)和 堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有 处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为 进程
进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。

原因

操作系统引入进程的概念的原因:
从理论角度看,是对正在运行的程序过程的抽象;
从实现角度看,是一种 数据结构,目的在于清晰地刻画 动态系统的内在规律,有效管理和调度进入 计算机系统 主存储器运行的程序。

特征

动态性:进程的实质是程序在 多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
结构特征:进程由程序、数据和 进程控制块三部分组成。
多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。
内容
一个 计算机系统进程包括(或者说“拥有”)下列数据:
那个程序的可运行 机器码的一个在 存储器的映像。 分配到的 存储器(通常包括 虚拟内存的一个区域)。 存储器的内容包括可运行 代码、特定于进程的数据(输入、输出)、调用 堆栈、堆栈(用于保存运行时运数中途产生的数据)。 分配给该进程的资源的 操作系统描述符,诸如文件描述符( Unix术语)或 文件句柄(Windows)、数据源和数据终端。 安全特性,诸如进程拥有者和进程的权限集(可以容许的操作)。 处理器状态(内文),诸如 寄存器内容、 物理存储器寻址等。当进程正在运行时,状态通常储存在 寄存器,其他 情况存储器

切换

进行 进程切换就是从正在运行的进程中收回 处理器,然后再使待运行进程来占用 处理器
这里所说的从某个进程收回 处理器,实质上就是把进程存放在处理器的 寄存器中的中间数据找个地方存起来( 保护现场),从而把处理器的 寄存器腾出来让其他进程使用。那么被中止运行进程的中间数据存在何处好呢?当然这个地方应该是进程的私有 堆栈
让进程来占用处理器,实质上是把某个进程存放在私有 堆栈寄存器的数据(前一次本进程被中止时的中间数据)再恢复到处理器的寄存器中去,并把待运行进程的 断点送入处理器的程序 指针PC,于是待运行进程就开始被处理器运行了,也就是这个进程已经占有处理器的使用权了。
这就像多个同学要分时使用同一张课桌一样,所谓要收回正在使用课桌同学的课桌使用权,实质上就是让他把属于他的东西拿走;而赋予某个同学课桌使用权,只不过就是让他把他的东西放到课桌上罢了。
在切换时,一个进程存储在处理器各 寄存器中的中间数据叫做进程的上下文,所以进程的 切换实质上就是被中止运行进程与待运行 进程上下文的切换。在进程未占用处理器时,进程 的上下文是存储在进程的私有 堆栈中的。

状态


进程执行时的间断性,决定了进程可能具有多种状态。事实上,运行中的进程可能具有以下三种基本状态。
1) 就绪状态 (Ready)
进程已获得除处理器外的所需 资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个 优先级来划分 队列。例如,当一个进程由于时间片用完而进入 就绪状态时,排入低 优先级队列;当进程由 I/O操作完成而进入 就绪状态时,排入高优先级队列。
2) 运行状态(Running):
进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在 阻塞状态),通常会自动执行系统的空闲进程。
3) 阻塞状态( Blocked):
由于进程等待某种条件(如I/O操作或 进程同步),在条件满足之前无法继续执行。该事件发生前即使把 处理机分配给该进程,也无法运行。

区别

程序
程序是指令和数据的有序 集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在 处理机上的一次执行过程,它是一个动态的概念。
程序可以作为一种 软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。
进程更能真实地描述并发,而程序不能;
进程是由 进程控制块程序段、数据段三部分组成;
进程具有创建其他进程的功能,而程序没有。
同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程,也就是说同一程序可以对应多个进程。
在传统的 操作系统中,程序并不能独立运行,作为资源分配和独立运行的 基本单元都是进程。
线程

通常在一个进程中可以包含若干个 线程,它们可以利用进程所拥有的资源,在引入 线程操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于 线程比进程更小,基本上不拥有 系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。
近年推出的 通用操作系统都引入了 线程,以便进一步提高系统的并发性,并把它视为 现代操作系统的一个重要指标。

控制

进程控制是进程管理中最基本的功能。它用于创建一个新进程,终止一个已完成的进程,或者去终止一个因出现某事件而使其无法运行下去的进程,还可负责进程运行中的状态转换。
创建进程
1.引起创建进程的事件
多道程序环境中,只有(作为)进程(时)才能在系统中运行。因此,为使程序能运行,就必须为它创建进程。导致一个进程去创建另一个进程的典型事件,可以有以下四类:
1) 用户登录
分时系统中,用户在 终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并把它插入到就绪 队列中。
批处理系统中,当作业调度程序按照一定的算法调度到某作业时,便将该作业装入到 内存,为它分配必要的资源,并立即为它创建进程,再插入到就绪 队列中。
3) 提供服务
当运行中的 用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务,例如,用户程序要求进行文件打印, 操作系统将为它创建一个打印进程,这样,不仅可以使打印进程与该用户进程并发执行,而且还便于计算出为完成打印任务所花费的时间。
4) 应用请求
在上述三种 情况中,都是由系统 内核为它创建一个新进程,而这一类事件则是基于应用进程的需求,由它创建一个新的进程,以便使新进程以并发的运行方式完成特定任务。
2.进程的创建过程
一旦 操作系统发现了要求创建新进程的事件后,便调用进程创建 原语Creat()按下述步骤创建一个新进程。
1) 申请空白PCB。为新进程申请获得唯一的数字 标识符,并从PCB集合中索取一个空白PCB。
2) 为新进程分配资源。为新进程的程序和数据以及 用户栈分配必要的 内存空间。显然,此时 操作系统必须知道新进程所需要的 内存大小。
3) 初始化 进程控制块。PCB的初始化包括:
①初始化标识信息,将系统分配的标识符和 父进程标识符,填入新的PCB中。
②初始化 处理机状态信息,使 程序计数器指向程序的入口地址,使栈 指针指向栈顶。
③初始化 处理机控制信息,将进程的状态设置为 就绪状态或静止就绪状态,对于优先级,通常是将它设置为最低优先级,除非用户以显式的方式提出高优先级要求。
4) 将新进程插入就绪队列,如果进程就绪 队列能够接纳新进程,便将新进程插入到就绪队列中。
进程终止
1.引起进程终止的事件
1)正常结束
在任何 计算机系统中,都应该有一个表示进程已经运行完成的指示。例如,在 批处理系统中,通常在程序的最后安排一条Hold指令或终止的系统调用。当程序运行到Hold指令时,将产生一个中断,去通知OS本进程已经完成。
2)异常结束
在进程运行期间,由于出现某些错误和故障而迫使进程终止。这类异常事件很多,常见的有:越界错误,保护错,非法指令, 特权指令错,运行超时,等待超时,算术运算错,I/O故障。
3)外界干预
外界干预并非指在本进程运行中出现了异常事件,而是指进程应外界的请求而终止运行。这些干预有:操作员或 操作系统干预, 父进程请求,父进程终止。
2. 进程的终止过程
如果系统发生了上述要求终止进程的某事件后,OS便调用进程终止 原语,按下述过程去终止指定的进程。
1)根据被终止进程的 标识符,从PCB集合中检索出该进程的PCB,从中读出该进程状态。
2)若被终止进程正处于 执行状态,应立即终止该进程的执行,并置调度标志为真。用于指示该进程被终止后应重新进行调度。
3)若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防他们成为不可控的进程。
4)将被终止的进程所拥有的全部资源,或者归还给其父进程,或者归还给系统。
5)将被终止进程(它的PCB)从所在队列(或链表)中移出,等待其它程序来搜集信息。
阻塞唤醒
1.引起进程阻塞和唤醒的事件
1)请求 系统服务
当正在执行的进程请求 操作系统提供服务时,由于某种原因,操作系统并不立即满足该进程的要求时,该进程只能转变为 阻塞状态来等待,一旦要求得到满足后,进程被唤醒。
2)启动某种操作
当进程启动某种操作后,如果该进程必须在该操作完成之后才能继续执行,则必须先使该进程阻塞,以等待该操作完成,该操作完成后,将该进程唤醒。
3)新数据尚未到达
对于相互合作的进程,如果其中一个进程需要先获得另一(合作)进程提供的数据才能运行以对数据进行处理,则是要其所需数据尚未到达,该进程只有(等待)阻塞,等到数据到达后,该进程被唤醒。
4)无新工作可做
系统往往设置一些具有某特定功能的 系统进程,每当这种进程完成任务后,便把自己阻塞起来以等待新任务到来,新任务到达后,该进程被唤醒。
2.进程阻塞过程
正在执行的进程,当发现上述某事件后,由于无法继续执行,于是进程便通过调用阻塞 原语block把自己阻塞。可见,进程的阻塞是进程自身的一种主动行为。进入block过程后,由于此时该进程还处于 执行状态,所以应先立即停止执行,把 进程控制块中的现行状态由执行改为阻塞,并将PCB插入阻塞 队列。如果系统中设置了因不同事件而阻塞的多个阻塞 队列,则应将本进程插入到具有相同事件的阻塞(等待)队列。最后,转调度程序进行重新调度,将 处理机分配给另一就绪进程,并进行切换,亦即,保留被阻塞进程的处理机状态(在PCB中),再按新进程的PCB中的处理机状态设置CPU环境。
3. 进程唤醒过程
当被阻塞的进程所期待的事件出现时,如I/O完成或者其所期待的数据已经到达,则由有关进程(比如,用完并释放了该I/O设备的进程)调用唤醒原语wakeup(),将等待该事件的进程唤醒。唤醒原语执行的过程是:首先把被阻塞的进程从等待该事件的阻塞 队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。

调度算法

进程的调度算法包括:
实时系统中: FIFO(First Input First Output 先进先出法),最短作业优先,最短剩余时间优先
交互式系统中:RR(round robin 时间片轮转算法),HPF(最高优先级算法),CTSS(Compatible Timesharing System)多级队列,最短进程优先,保证调度,彩票调度,公平分享调度

阶段

进程是由 进程控制块、程序段、数据段三部分组成。一个进程可以包含若干 线程(Thread),线程可以帮助应用程序同时做几件事(比如一个线程向 磁盘写入文件,另一个则接收用户的按键操作并及时做出反应,互相不干扰),在程序被运行后,系统首先要做的就是为该程序进程建立一个默认线程,然后程序可以根据需要自行添加或删除相关的线程。是可并发执行的 程序。在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位,也是称活动、路径或任务,它有两方面性质:活动性、 并发性。进程可以划分为运行、阻塞、就绪三种状态,并随一定条件而相互转化:就绪--运行,运行--阻塞,阻塞--就绪。
进程为应用程序的运行实例,是应用程序的一次动态执行。看似高深,我们可以简单地理解为:它是 操作系统当前运行的 执行程序。在系统当前运行的执行程序里包括: 系统管理计算机个体和完成各种操作所必需的程序;用户开启、执行的额外程序,当然也包括用户不知道,而自动运行的 非法程序(它们就有可能是 病毒程序)。

猜你喜欢

转载自7708801314520.iteye.com/blog/2174676
今日推荐