• 操作系统读书笔记04


    第六章 进程间的制约关系

    1) 在多道程序设计环境下,进程程序的执行具有并发性,在相同的前提条件下,两次执行的结果有可能不相同,使得一个进程对另一个进程的影响无法预测,在操作系统里把这种由于时间因素的影响而产生的错误称为:“与时间有关的错误”

    2) 进程间具有两种制约关系:互斥和同步

    a. 由于对共享资源的争夺,导致进程之间出现互斥关系

    b. 由于对任务的协调工作,导致进城之间出现同步关系

    3) 把那些可以共享的资源(文件、队列、缓冲区、表格、变量······)统称为共享变量或临界资源

    与一个共享变量(或共享资源)交往的多个进程,为了保证它们各自运行结果的正确性,当其中的一个进程正在对该变量(临界资源)进行操作时,就不允许其他进程同时对它操作。进程的这种制约关系被称为“互斥”

    4) 注意(互斥进程)

    a. 作为具有互斥关系的进程,它的一部分程序可能用于内部的计算以及内部的数据处理等,那么只有设计共享变量的那一部分程序,才真正需要保证互斥地执行,把进程程序中“真正需要保证互斥执行”的那一段程序(或在每个进程中访问临界资源的那段代码)称为该进程的临界区(临界段)

    b. 具有互斥关系的进程,并不关心对方的存在,即使对方不存在,自己也能够正确地运行

    c. 具有互斥关系的那些进程程序中的临界区,虽然都是针对同一个共享变量的程序,但在其上执行的操作可以相同也可以不同

    d. 进程的临界区是相对于某个共享变量而言的,不同共享变量的临界区之间,不存在互斥关系

    信号量及其定义在信号量上的P、V操作:

    1) 如何来保证进程在临界区执行的互斥性,由信号量及其定义在信号量上的P、V操作具体完成,但遵循如下规则

    a. 如果有若干个进程希望进入临界区时,至少应该允许一个进入,而不能谁也进不去

    b. 每次只允许一个进程进入临界区

    c. 进入临界区的进程不能无限期地把持临界区

    2) 同步

    a. 需要在某些点上协调相互的动作,谁先到达谁后到达是有顺序要求的

    b. 这些进程都应该了解对方的工作,对方如果不存在,或任何一方单独运行,就会出现差错

    c. 一方或双方的运行会直接地依赖于对方所产生的的信息,或发出的消息

    3) 一个进程运行到某一点时,除非合作进程已经完成了某种操作或发来了信息,否则就必须暂时等待那些操作的完成或信息的到来。

    进程间的这种关系被称为“同步”,暂停以取得同步的那一点称为“同步点”,需要等待一个进程完成的操作或发送的信息,称为“同步条件”

    4) 一个信号量的建立必须经过说明,即应该准确说明S的意义和初值(不能为负)

    每个信号量都有相应的队列,在建立信号量时,队列为空

    可进行原子操作 P(wait)、V(signal)操作

    5) 信号量S上的P操作

    ① Vs = Vs-1,把当前信号量S的取值减1

    ② 若Vs >= 0,则调用进程继续运行,若Vs < 0,则调用进程由运行状态变为阻塞状态,到与该信号量有关的队列Vq上排队等待,直到其他进程在S上执行V操作将其释放为止

    6) 信号量S上的V操作

    ① Vs = Vs + 1,把当前信号量S的取值加1

    ② 若Vs > 0,则调用进程继续执行,若Vs <= 0,则先从与该信号量有关的队列Vq上摘下一个等待进程,让它从阻塞状态变为就绪状态,到就绪队列里排队,然后调用进程继续执行

    注意:

    a. 设置的信号量初值一定是一个非负的整数。而运行过程中,信号量的取值就不再受“非负”所限了

    b. 只要进入了P(S)或V(S),这两个动作就必须顺序地做完,中间不能被打断,为保证执行时的不可分割性,常采用关、开中断的方法来具体实现信号量上的P、V操作

    c. 如果一个进程在做P操作后被阻塞,到关于信号量的队列上去排队等待,其含义是让进程的PCB到此队列上排队

    7) 用P、V操作实现资源分配

    做P操作即是申请一个资源,做V操作即是释放一个用完的资源

    P操作后,若Vs > 0时,Vs的值就是这种资源的剩余数

     若Vs < 0时,表示现在已经没有资源可以分配,申请资源的进程只能被阻塞到申请队列Vq上去排队等待,Vs的绝对值表示提出资源请求,但没有分配到资源的进程个数

    V操作后,若Vs <= 0,表示申请资源的等待队列上有进程在等待该资源(表示V操作之前Vs <= -1,即至少有一个进程在队列上等待使用该资源),所以将该队列上的一个进程摘下,让它到就绪队列中排队

     若Vs > 0,表示V操作之前Vs >= 0,即资源等待队列上没有进程在等待,只是收回了一个资源

    1) 死锁:多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程将无法向前推进

    2) 定义:即指系统中若存在一组(至少两个或以上)进程,它们中的每一个都占用了某种资源而又都在等待其中另一个所占用的资源,这种等待永远不会结束,这就是死锁

    3) 产生死锁的4个必要条件

    a. 互斥条件:进程对所分配的资源进行排它性使用,即在一段时间内,某资源只能被一个进程占用

    b. 部分分配条件(占用并等待):进程由于申请不到所需要的资源而等待时,仍然占据着已经分配到的资源

    c. 非剥夺条件:已经分配给进程的资源,别的进程不能强行夺取资源,只能被占用它的进程自己释放

    d. 循环等待条件:在多个进程之间,由于资源的占有和请求关系,从而形成了一个循环等待的态势

    4) 处理死锁的方法:

    a. 预防死锁:破坏产生死锁的4个必要条件之一,使系统不具备产生思索的条件

    b. 忽略死锁:任凭死锁出现,当系统中出现死锁时,就将系统重新启动

    c. 避免死锁:在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而可以避免死锁

    d. 检测死锁并恢复:在死锁发生后,采取相应措施加以恢复。如:撤销一些进程,回收它们的资源,将它们分配给已处于阻塞状态的进程,使其继续执行

    5) 预防死锁:

    a. 互斥条件是非共享设备所必须的,不仅不能改变,还应加以保证

    b. 破坏占用并等待条件:所有进程在开始运行之前,必须一次性地申请其在整个过程中所需要的全部资源,一次性分配

    c. 破坏“分剥夺条件”:当进程提出新的资源请求得不到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请

    d. 破坏循环等待条件:将系统中的所有资源进行统一编号,进程按编号的顺序,由小到大提出对资源使用的申请

    6) 在信号量上的P、V操作,可以看作是进程间的一种通信方式,这种通信并不在进程间真正交换信息,而只是双方事先的一种约定。因此,用P、V操作实现的通信,称为进程间的一种低级通信

    为了使进程间能够真正交换数据,操作系统备有高级通信命令,提供给用户在程序一级使用

    高级进程通信分为直接通信和间接通信两种方式

    间接通信是指通过信箱来传递消息

  • 相关阅读:
    leetcode[9]Palindrome Number
    leetcode[10]Regular Expression Matching
    leetcode[11]Container With Most Water
    leetcode[12]Integer to Roman
    leetcode[13]Roman to Integer
    leetcode[14]Longest Common Prefix
    leetcode[15]3Sum
    leetcode[16]3Sum Closest
    leetcode[17]Letter Combinations of a Phone Number
    leetcode[18]4Sum
  • 原文地址:https://www.cnblogs.com/XiaoGao128/p/14917584.html
Copyright © 2020-2023  润新知