学习笔记——同步、通信与死锁(1)

来源:互联网 发布:一个能看网络攻击网站 编辑:程序博客网 时间:2024/06/15 04:05

所用教材为:操作系统教程(第5版)  费翔林 骆斌编著

并发进程

顺序程序设计

定义

程序顺序执行是指其在处理器上的执行时严格有序的,即只有在前一个操作结束后,才能开始后续操作,这称为程序内部顺序性。

特性

(1)程序执行的顺序性
(2)程序环境的封闭性
(3)执行结果的确定性
(4)计算过程的可再现性

并发程序设计

定义:

(1)进程执行的并发性:一组进程的执行在时间上是重叠的
(2)从宏观上看,并发性反映一个时间段中几个进程都在同一处理器上,处于运行还未运行结束状态。
(3)从微观上看,任一时刻仅有一个进程在处理器上运行。

进程并发的实质

  (1)并发的实质是一个处理器在几个进程之间的多路复用
 (2)并发是对有限的物理资源强制行使多用户共享,消除计算机部件之间的互等现象,以提高系统资源利用率。

特性:

并发程序分类:无关的、交往的

并发进程的无关性

 是进程的执行与时间无关的一个充分条件,又称为Bernstein条件。
只要满足Bernstein条件,并发执行的程序就可以保持封闭性和可再现性

交往的并发进程

  一组并发进程共享某些变量,一个进程的执行可能影响其他并发进程的结果
  交往进程之间存在直接的相互制约关系,不满足Bernstein条件

并发程序设计的优点

(1)对于单处理器系统,可让处理器和各I/O设备同时工作,发挥硬部件的并行能力
(2)对于多处理器系统,可让各进程在不同处理器上物理地并行,加快计算速度
(3)简化程序设计任务

进程的交互:竞争和协作

竞争

资源竞争的两个控制问题:一个是死锁,一个是饥饿

协作

进程同步

进程同步指为完成共同任务的并发进程基于某个条件来协调它们的活动,因为需要在某些位置上排定执行的先后次序而等待、传递信号或消息所产生的的协作制约关系。

协作关系

进程同步指两个以上进程基于某个条件来协调它们的活动。
一个进程的执行依赖于协作进程的消息或信号,当一个进程没有得到来自于协作进程的消息或信号时需等待,直到消息或信号到达才被唤醒

进程协作(同步)所依赖的机制:消息/信号

进程互斥

定义

(1)进程互斥是指若干个进程因相互争夺独占型资源时所产生的的竞争制约关系
(2)进程互斥关系是一种特殊的进程同步关系,即逐次使用互斥共享资源,是对进程使用资源次序上的一种协调。

临界区管理

互斥与临界区

概念介绍

(1)临界区:并发进程中与共享变量有关的程序段
(2)临界资源:共享变量所代表的资源,即一次仅能供一个进程使用的资源
(3)竞争条件的出现:进程结果依赖于执行的相对速度

关于临界区

(1)保证进程在临界区执行时,不让另一个进程进入临界区,就不会造成与时间有关的错误

临界区调度的原则(3个)

(1)一次至多一个进程能够进入临界区内执行   即互斥   互斥使用,空闲让进
(2)如果已有进程在临界区,其他试图进入的进程应等待   即等待   忙则等待,有限等待
(3)进入临界区内的进程应在有限时间内退出,以便让等待进程中的一个进入   即算法   择一而入,算法可行

实现临界区管理的软件方法

 为每个进程设置标志,当标志值为true时表示此进程要求进入临界区,另外再设置一个指示器turn以指示可以由哪个进程进入临界区,当turn为I时则可由进程Pi进入临界区
 

实现临界区管理的硬件设施

关中断

(1)实现互斥的最简单方法
(2)关中断适用场合:方法简单有效,对操作系统自身很有用,可在更新共享变量或链表的几条指令期间禁止中断
(3)缺点:不适合作为通用的互斥机制,不适用与多处理器系统

测试并设置指令

(1)定义
 使用硬件所提供的“测试并设置”机器指令TS
 TS指令管理临界区时,可把一个临界区与一个布尔变量s相连,由于变量s代表了临界资源的状态,可以把它看成一把锁。
 系统利用TS指令实现临界区的上锁和开锁的原语操作
(2)TS指令的处理过程
        

对换指令

(1)功能:交换两个字的内容
(2)处理过程:
       
(3)在每个临界区设置布尔型锁变量,再使用对换指令实现进程互斥
     lock位锁,其值为false时表示无进程在临界区内
     

信号量与PV操作

同步和同步机制

生产者-消费者问题:典型的进程同步问题

是计算机操作系统中并发进程内在关系的一种抽象

问题表述:有界缓冲问题

•有n个生产者和m个消费者,连接在一个有k个单位缓冲区的有界缓冲上,其中,pi和cj都是并发进程;
•只要缓冲区未满,生产者pi生产的产品就可投入缓冲区;
•只要缓冲区不空,消费者进程cj就可从缓冲区取走并消耗产品。

算法描述:

   

算法分析:

(1)生产者和消费者程序都是正确的,而且顺序执行时其结果也是正确的
(2)但在并发执行时,就会出现差错,问题就在于这两个进程共享变量counter
(3)生产者和消费者进程对counter的交替之星会使其结果不唯一
          生产者和消费者进程的交替执行会导致进程永远等待
    如何解决?引出——信号量机制

信号量与PV操作·

几个基本概念

信号量:一种软件资源

(1)一个进程在某一特殊点上被迫停止执行知道接收到一个对应的特殊变量值,这种特殊变量就是信号量。
(2)复杂的进程合作需求,窦娥可以通过适当的信号结构得到满足
(3)操作系统中,信号量表示物理资源的实体,它是一个与队列有关的整型变量
(4)实现时,信号量是一种记录型数据结构,有两个分量:一个是信号量的值,另一个是信号量队列的队列指针

原语:内核中执行时不可被中断的过程。

P操作原语和V操作原语

P操作
 (1)记为P(S),其中S为某一信号量。则S= S-1
            若S>=0,则进程继续运行
            若S<0,则该进程被阻塞,并将它插入该信号量的等待队列
            ——> Wait(S)操作
V操作
 (2)记为V(S),其中S为某一信号量。则S=S+1
                 若S>0,则进程继续运行
                 若S<=0,则从该信号量的等待队列中移出一个进程,使其变为就绪态,然后,再返回原进程继续执行
             ——>Signal(S)操作

信号量分类

按用途分为

(1)公用信号量
         进程均拥有PV操作权限
(2)私有信号量
      部分进程用于P操作权限,进程均拥有V操作权限

按取值分为

(1)二值信号量(整型信号量)
           互斥信号量,解决互斥问题
              s中的value只能取0或1,PV操作记为BP和BV
(2)一般信号量(记录型信号量)
            计数信号量,资源信号量:解决同步问题
       
              P(s):将信号量s减1,若结果小于0,则调用P(s)的进程将被置为等待信号量s的状态     
              V(s):将信号量加1,若结果不大于0,则释放一个等待信号量s的进程       
      推论:
           s是正值时,该值等于实际还可以使用的物理资源数
           s是负值时,其绝对值等于登记排列在该信号量s队列之中等待的进程个数                    
       通常,P操作意味着请求一个资源,V操作意味着释放一个资源
       在一定条件下,P操作代表挂起进程操作,V操作代表唤醒被挂起进程的操作

信号量实现互斥

             

信号量解决哲学家就餐问题


可能会出现永远等待,如何避免死锁:
 

  •至多允许四个哲学家同时吃;

  •奇数号先取左手边的筷子,偶数号先取右手边的筷子;

  •每个哲学家取到手边的两把筷子才吃,否则一把筷子也不取。


信号量解决生产者-消费者问题

问题描述

  (1)设公用缓冲池,具有n个缓冲区;

  (2)利用互斥信号量mutex实现对缓冲池的互斥使用;

  (3)资源信号量emptyfull分别表示空缓冲区和满缓冲区的数量。

  (4)只要缓冲池未满,生产者便可将消息送入缓冲池;

  (5)只要缓冲池未空,消费者便可从池中取走一个消息。

同步规则:(4)(5)

一个生产者、一个消费者、一个缓冲区

                         

多个生产者、多个消费者、多个缓冲区

                       

注意:(在生产者-消费者问题中)

(1)实现互斥的wait(mutex)和signal(mutex)必须成对地出现
(2)对资源信号量empty和full的wait和signal操作,通用需要成对地出现,但它们分别处于不同的程序中。
(3)多个wait操作顺序不能颠倒。
          应先执行对资源信号量的wait操作,然后再执行对互斥信号量的wait操作

信号量解决读者-写者问题

问题描述:

   有两组并发进程:读者和写者,共享一个文件F要求:

•允许多个读者同时执行读操作
•只允许一个写者执行写操作
•任一写者在完成写操作之前不允许其它读者或写者工作
•写者执行写操作前,应让已有的写者和读者全部退出
也就是两类进程(读、写)同步

解决:

资源信号量readcount表示正在读的进程数目;仅当redacount=0时才可以写。

因为readcount可能被多个readcount进程访问,设置互斥信号量mutex

为实现reader进程和write进程读或写时的互斥,设置互斥信号量writeblock

   


信号量解决睡眠理发师问题

问题

•理发店理有一位理发师、一把理发椅和n把供等候理发的顾客坐的椅子;
•如果没有顾客,理发师便在理发椅上睡觉
•一个顾客到来时,它必须叫醒理发师;
•如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,就坐下来等待,否则就离开。

解决




0 0
原创粉丝点击