浅谈进程控制
摘要
CPU是计算机中最宝贵的资源,为了对CPU进行有效的管理,使之能够得到充分的利用,操作系统引入了并行处理与资源共享的概念,而正因为要实现并行运行和资源共享,操作系统引入了进程,以它作为分配资源和运行的独立单元。通常通过进程控制块、进程的几种状态来描述进程。
进程控制是通过使用一些具有特殊功能的程序段来创建、撤销进程以及完成进程间的各状态间的转换的,从而达到多进程高效率并发执行和协调、实现资源共享的目的。而进程调度算法是一种服务于系统目标的策略,对于不同的系统和系统目标,采用不同的调度算法。
进程的同步和互斥是多个进程,既独立又并发地执行,进程之间可以合作的完成一项任务,可以共享一种系统资源,可以相互支持和依赖,甚至制约对方。运行同步与互斥的概念,可以解决现实生活中类似“生产者--消费者”等诸多问题。
线程是为了将进程的调度和资源分配独立开,线程仅作为独立运行的实体,不进行资源的分配。
最后是死锁的预防、避免、检测和解除等。对于理解死锁的一系列问题,可以解决现实生活中类似“银行家算法”等问题。
正文
一、进程的定义和特征
1.1 进程的定义
进程 的概念有两个要素:一个是有一段程序代码,另一个是处于运行过程中。两个要素缺一不可。同一个程序同时被系统的两个用户启动,则两个运行过程视为不同的两个进程。国内学术界较为一致的看法是:进程是一个具有独立功能的程序关于某个数据结合的一次运行活动。
1.2 进程的特征
a)动态性:进程是程序在数据集合上的一次执行过程,是动态概念,同时,它还有生命周期,由创建而产生,由撤销而消灭;而程序是一组有序的指令集合,是静态概念,所以,程序作为一种系统资源是永远存在的;
b)独立性:进程既是系统中资源分配和保护的基本单位,也是系统调用的独立单位(单线程进程)。凡是未建立进程的程序,都不能作为独立单元参与运行。通常,每个进程都可以以各自独立的速度在CPU上进行。
c)异步性:是指进程由于共享资源和协同合作时产生的相互制约关系,造成进程执行的间断性,即进程以各自独立的、不可预知的方向和速度向前推进,或者说。,进程实体按异步方式执行。为此,系统必须提供某种设施,来保证进程间能协同操作和共享内存;
d)并发性:进程可以并发地执行。对于一个单处理器的系统来说,m个进程P1,P2……Pm是轮流占用处理器并发执行。
1.3 进程与程序
a)进程是程序的一次执行过程,而程序是一组指令的有序集合;
b)进程具有动态性、独立性、并发性和异步性等,但程序不具有这些特性;
c)进程包含程序、数据和PCB;
d)程序多次运行,边可以产生多个进程。
从以上四点可以看出进程和程序的差异,即程序是静态的概念,而进程是动态的概念。程序可以长期保存,而进程是短暂存在的,它动态地产生、变化和消灭。程序和相应的进程之间,有点像乐谱和相应演奏之间的关系,乐谱可以长期保存,而演奏是一个动态的过程。
二、进程的描述
一个进程是一个程序对某种数据集的执行过程,是分配资源的基本单位。
2.1 进程的表示
为了能够描述进程的动态变化过程,使之能独立运行,应为每一个进程配置一个PCB。这样,每个进程都有程序段、数据和一个PCB三部分组成,下面分别描述这三个部分:
a)程序段:描述了进程所要完成的功能;
b)数据段:程序执行时所需要的数据和工作区;
c)PCB:为了描述和控制进程的运行,系统为每一个进程定义了一个数据结构,
2.2进程的调度状态及其转换
进程执行时的间断性,决定了进程可能有多种状态。实际上,在进程的生命周期中,进程至少具有以下三种状态:
a)就绪状态(ready):进程以获得除处理机以外的所有资源,一旦分配到了处理机就可以立即执行,这时进程就处于就绪状态;
b)执行状态:执行状态又称为运行状态,当一个进程获得必要的资源,并占有处理机,即在处理机上运行时,进程所处了状态就是执行状态;
c)阻塞状态(blook):阻塞状态又称为等待状态,正在执行的进程,由于发生某事件而暂时无法执行下去(如等待输入/输出完成),此时进程所处的状态称为阻塞状态。
注:
1. 进程之间的状态转换并非都是可逆的。进程既不能从阻塞状态转换成运行状态,也不能从就绪状态转换为阻塞状态;
2.进程之间的状态转换并非是主动的。在很多情况下状态转换是被动的。
三、进程控制
所谓进程控制,就是系统使用一些具有特定功能的程序段来创建和撤销进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的功能。
进程控制功能是通过各种原语来实现的。所谓原语,是管态下执行的某种具有特殊功能的程序段。原语可分成两类:一类是机器指令级的,其特点是执行期间不允许中断。另一类是功能级的,其特征是作为原语的程序段不允许并行执行。
这两类原语都在系统态下执行,且都是为了完成系统管理所需要的功能和被高层软件所调用。用于进程控制的原语一般有创建原语、撤销原语、阻塞原语和唤醒原语。
四、进程调度
在多道程序处理系统中,用户进程数一般都多于处理机数,这将导致用户进程相互争夺处理机。另外,系统进程也同样需要使用处理机。这就需要程序按一定的策略,动态的把处理机分配于就绪队列中的某一个进程,使之执行。
4.1 进程调度的方式
a)抢占方式(优先级);
b)非 抢占方式(继续或阻塞);
c)选择抢占方式(特征位)。
4.2进程调度算法
a)先来先服务调度算法;
b)短执行进程优先算法;
c)最高优先级优先调度算法;
d)时间片轮转法。
五、进程的同步与互斥
在操作系统的支持下,多个进程即独立又并发的执行。然而,进程之间 可能合作完成一项任务,可能共享一种系统资源,可能互相支持和依赖,甚至制约对方。为了协调进程间的这种关系,操作系统必须进行进程间的协调。系统中的进程合作和资源共享,使进程间可能产生两种形式的制约关系,即直接相互制约和间接相互制约。
六、线程
6.1 线程的基本概念
进程是一个拥有资源的独立单元,进程同时又是一个被处理机独立调度和分配的基本单元。
线程是进程内一个相对独立的可以并行执行的单元,是进程内的一个可调度实体;
线程具有很多传统进程所具有的特征,所以又称为轻型进程或进程元。而把传统的进程称为重型进程,它相当于只有一个线程的任务。进程内至少包含一个线程,也可以包含多个线程。
6.2线程的类型
a)用户级线程:仅存在于用户空间,没有操作系统内核的支持,完全在用户级提供一个线程库来实现多线程;
b)内核级线程:是操作系统支持的线程,操作系统维护内核级线程的各种管理表格,负责线程在处理机上的调度和切换,线程是CPU调度的基本单位。
c)混合型线程:用户级线程和内核级线程实现方式各有优缺点,混合使用,这样有利于用户编写并发程序又能够最大限度的发挥多处理机的并发性。
6.3线程和进程的关系
进程是资源拥有的基本单元,而线程是调度和分派的基本单位;线程不拥有系统资源;操作系统对进程的创建与撤销所作的开销远大于对线程的创建与撤销。
七、死锁
7.1死锁产生的原因
a)竞争临界资源;
b)进程推进顺序不当。
7.2死锁的预防与避免
死锁的预防就是通过破坏产生死锁的必要条件之一,使系统中不发生死锁的一种操作系统来对付死锁的方法。这种方法是在系统运行之前就采取措施,即在系统设计时确定资源分配算法,消除发生死锁的任何可能性。方法:1.静态资源分配法;2.有序资源使用法。
死锁的避免就是将限制条件弱化,设置一种安全状态。
7.3死锁的检测与解除
死锁检测程序的任务就是实际确定系统是否存在死锁,并试图找出陷入死锁的进程和资源。通常采用检测算法主要是通过对资源分配图的化解来确定资源分配时是否有循环等待事件。
当死锁检测程序检测到系统中出现死锁时,应该立即把系统从死锁状态中解脱出来。常见的死锁解除方法有两种:撤销进程法和挂起进程法。
注:1.化解资源分配图:是指依次把所有资源请求都能满足的进程结点变成孤立结点的过程(即消去其请求边和分配边,回收资源)。