(七)进程控制理论

概念-进程

进程是一个具有一定独立功能的程 序的一次运行活动。

进程特点 

动态性:

进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。

并发性:

指多个进程实体,同存于内存中,能在一段时间内同时运行,并发性是进程的重要特征,同时也是操作系统的重要特征。引入进程的目的就是为了使程序能与其他进程的程序并发执行,以提高资源利用率。

独立性:

指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。凡未建立PCB的程序都不能作为一个独立的单位参与运行。

异步性:

由于进程的相互制约,使进程具有执行的间断性,即进程按各自独立的、 不可预知的速度向前推进。异步性会导致执行结果的不可再现性,为此,在操作系统中必须配置相应的进程同步机制。

结构性:
每个进程都配置一个PCB对其进行描述。从结构上看,进程实体是由程序段、数据段和进程控制段三部分组成的。

 进程状态

创建状态:

进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态

就绪状态:

进程已经准备好,已分配到所需资源,只要分配到CPU就能够立即运行

执行状态:

进程处于就绪状态被调度后,进程进入执行状态

阻塞状态:

正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用

终止状态:

进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

如果进程运行时间片使用完也会进入就绪状态。 
另外进程还有挂起和激活两种操作。挂起后进程处于静止状态进程不再被系统调用,对于操作是激活操作。

 

概念-进程ID

进程ID                   (PID):标识进程的唯一数字

父进程的ID            (PPID)

启动进程的用户ID (UID)

概念-进程互斥

进程互斥是指当有若干进程都要使用某一资源时,但该资源在同一时 刻最多允许一个进程使用,这时其他进程必须等待,直到占用该资源 者释放了该资源为止

概念-临界资源

操作系统中将同一时刻只允许一个 进程访问的资源称为临界资源。

概念-临界区

进程中访问临界资源的那段程序代码称为 临界区

为实现对临界资源的互斥访问, 应保证诸进程互斥地进入各自的临界区

概念 -进程同步

一组进程按一定的顺序执行的过程称为进程 间的同步.

具有同步关系的这组进程称为合作进程,

最为有名的是生产者和消费者进程 

设生产者进程和消费者进程是互相等效的,其中,各生产者进程使用的过程deposit(data)和各消费者使用的进程remove(data)可描述如下:
首先,可以看到,上述生产者-消费者问题是一个同步问题。即生产者和消费者之间满足如下条 

另外,由于有界缓冲区是临界资源,因此,各生产者进程和各消费者进程之间必须互斥执行 

 

设公用信号量mutex保证生产者进程和消费者进程之间的互斥,设信号量avail为生产者进程的私用信号量,信号量full为消费者进程的私用信号量。

信号量avail表示有界缓冲区中的空单元数,初值为n;信号量full表示有界缓冲区中非空单元数,初始值为0。信号量mutex表示可用有界缓冲区的个数,初始值为1。

  • (1)消费者想接收数据时,有界缓冲区至少有一个单元是满的。
  • (2)生产者想发送数据时,有界缓冲区至少有一个单元是空的。
  •  
deposit(data):
    begin
        P(avail)  // 检查是否有空单元可以使用
        P(mutex)  // 检查临界区是否被占用
        送数据入缓冲区某单元
        V(full)
        V(mutex)
    end

 

remove(data):
    begin
        P(full)  // 检查是否有非空单元
        P(mutex)  // 检查临界区
        取缓冲区中某单元数据
        V(avail)
        V(mutex)
    end

在这个例子中,由于包含多个公用信号量和私用信号量,因此P、V原语的操作顺序需要非常小心。

一般来说,由于V原语是释放资源,所以可以以任意次序出现。但P原语则不然,如果次序混乱,将会造成进程之间的死锁。

例如:如果我们调换P(full)和P(mutex),便有可能导致程序一直占用临界区,而无法得到资源(如果此时full=0,mutex >= 0,程序进入临界区后得不到资源,但又无法释放临界区),从而导致死锁。

概念-进程调度

按一定算法,从一组待运行的进程中选 出一个来占有CPU运行

什么时候调度?

按调度时机,调度可分为:

     • 抢占式调度

     • 非抢占式调度

 

调度算法

在操作系统中,常见的调度算法有:

1. 先来先服务  2. 短进程优先调度  3. 高优先级优先调度 4. 时间片轮转法

概念-死锁

多个进程因竞争资源而形成一种僵局, 导致这些进程都无法继续往前执行。

(两个小孩在一起玩耍,一个在玩皮球,另一个玩自动步枪,如果这两个小孩都要对方手中的玩具,而又不肯先放掉自己拿着的玩具,这时就发生了僵持局面。)


产生死锁的原因 

(1)系统资源不足 
(2)资源分配不当 
(3)进程运行推进顺序不合适

死锁的四个必要条件

  • 互斥条件:        涉及的资源是非共享的
  • 不剥夺条件:    不能强行剥夺进程拥有的资源
  • 部分分配条件:进程在等待新资源时,依然占者已有资源
  • 环路条件:        存在一种进程的循环链,链中的每一个进程已获得的资源同时被链中的下一个进程所请求

处理死锁的策略 

  • 预防死锁:通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来防止死锁的发生。
  • 避免死锁:在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免死锁的发生。
  • 检测死锁:允许系统在运行过程中发生死锁,但可设置检测机构及时检测死锁的发生,并采取适当措施加以清除。
  • 解除死锁:当检测出死锁后,便采取适当措施将进程从死锁状态中解脱出来。

死锁预防 

  • (1)破坏互斥条件 

没法破坏,是资源本身的性质所引起的。 

 

  • (2)破坏请求与保持条件 

①所有进程在开始运行之前,必须一次性获得所有资源,如果无法获得完全,释放已经获得的资源,等待; 
②所有进程在开始运行之前,只获得初始运行所需要的资源,然后在运行过程中不断请求新的资源,同时释放自己已经用完的资源。     
相比第一种而言,第二种方式要更加节省资源,不会浪费(因为第一种可能出现一种资源只在进程结束用那么一小下,但却从头到尾都被占用,使用效率极低),而且,减少了进程饥饿的情况。 

 

  • (3)破坏不可抢占条件 

说起来简单,只要当一个进程申请一个资源,然而却申请不到的时候,必须释放已经申请到的所有资源。但是做起来很复杂,需要付出很大的代价,加入该进程已经持有了类似打印机(或者其他的有必要连续工作的)这样的设备,申请其他资源的时候失败了,必须释放打印机资源,但是人家用打印机已经用过一段时间了,此时释放打印机资源很可能造成之后再次是用打印机时两次运行的信息不连续(得不到正确的结果)。 

 

  • (4)破坏循环等待条件 

设立一个规则,让进程获取资源的时候按照一定的顺序依次申请,不能违背这个顺序的规则。必须按照顺序申请和释放,想要申请后面的资源必须先把该资源之前的资源全部申请,想要申请前面的资源必须先把该资源之后的资源(前提是已获得)全部释放。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值