计算机操作系统教程:互斥、同步与通信-期末复习大纲

  1. 前驱图

    1. 有向无环图,一个节点表示一条语句、计算步骤或一个进程

    2. 具有反身性,反对称性,传递性

    3. 没有前驱的节点为初始节点,没有后继的节点为终止节点

  2. 程序的顺序执行

    1. 内部顺序性:指令按顺序执行
    2. 外部顺序性:所有进程的活动依次执行
    3. 特性
      1. 连续性

      2. 封闭性:执行过程中独占系统总的全部资源

      3. 可再现性:只有可再现的结果才是正确的

  3. 程序的并发执行

    1. 内部并发性:一个程序内部的并发性
    2. 外部并发性:多个程序的并发性
    3. 特性
      1. 间断性:交叉执行,进程可中断
      2. 非封闭性:运行环境可能被其他进程改变
      3. 不可再现性:交叉是随机的,导致运行结果不定
    4. 程序并发执行的条件
      1. Bernstein条件(P86):是程序可并发执行的必要条件

    5. 并发程序的表示
      1. 并发语句:表示可以并发执行

  4. 并发带来的与时间有关的错误

    1. 是否发生错误和进程的推进速度有关,这种错误称与时间有关的错误。
      1. 可能发生错误,也可能不发生错误。

    2. 竞争条件:多个进程访问同一变量,因交叉次序不同导致变量失去了数据完整性,体现为运行结果不同。

  5. 进程互斥
    1. 进程互斥
      1. 同一组共享变量的多个临界区中,只允许其中一个临界区被一个进程使用。

        1. 是保证正确性的要求。

      2. 是一种间接性相互作用,运行进程感觉不到且不希望的。

      3. 多个进程不能同时进入关于同一组共享变量的临界区,否则会发生时间有关的错误。

      4. 共享变量:多个进程需要访问的变量。

        1. 既可能属于操作系统空间,也可能属于用户空间。

      5. 临界区(临界段):访问共享变量的程序段。临界区属于临界资源,是互斥的,独占型的。

      6. 临界资源:一次只许一个进程使用的资源。

      7. 死锁:两个进程因临界区访问冲突而导致均无法推进。

      8. 忙式等待:一个进程在某一条语句内原地踏步,不进入等待状态的等待,为就绪或运行态

  6. 进程互斥原则

    1. 编写进入区和退出区代码,使同一时刻最多一个进程在临界区内。

    2. 正确性原则
      1. 互斥性原则

      2. 进展性原则

      3. 有限等待性原则

    3. 调度原则
      1. 临界区空闲时,要求进入某一临界区的进程立即进入

      2. 某一临界区被占用时,要求进入某一临界区的进程应等待

      3. 进程离开临界区时,某一等待进入临界区的进程进入

  7. 进程互斥的软件实现

    1. 用机器指令实现,算法复杂,效率略低,一般适用于单处理器系统。存在忙式等待问题。

    2. Dekker互斥算法(两个进程)
    3. Peterson互斥算法(两个进程)
    4. Lamport互斥算法(多个进程)
      1. 按号执行进程,号相同时比较进程号

    5. Eisenberg-Mcguire算法(多个进程)
  8. 进程互斥的硬件支持

    1. 多处理器内可以并行执行的进程的效果,为重排序执行的结果时,可导致上述算法的结果发生错误。

    2. 解决方法
      1. 原子化的硬件指令:直接实现互斥
        1. 对一个基本变量的访问和修改不被分割的变量。

        2. 即一系列代码执行时不可被打断。

      2. 一般基础性支持:改进软硬件解法
        1. 硬件提供存储障碍语句

          1. 保证前面的指令先于后面指令执行

        2. 硬件提供“测试并重置”指令(两个指令周期)

          1. 取内存某一单元的值,再给他赋新值。该条指令为原子的。(单处理器每条指令都是原子的)

      3. 硬件提供“交换”指令(三个指令周期)
      4. 硬件提供“开关中断”指令
        1. 没有忙式等待耗费资源的问题。

        2. 实现效率高,简单易行,影响系统的并发性。故这种程序段一般较短时间内执行完毕。

        3. 仅在单处理器系统中有效。

  9. 进程同步

    1. 进程间直接的相互形式,发生在相关的,有逻辑关系的进程之间。

    2. 一组进程为了协调推进程度,在某些地方需要等待或者被唤醒,是一种相互制约的关系。

    3. 合作进程

      1. 单独不能执行,并发能够执行的进程。

  10. 进程同步机制

    1. 用于实现进程间同步的工具。

  11. 信号量与PV操作

    1. 分散型同步机制,易读性差,局部性差,正确性难以保证。

    2. 信号量类型(一种结构体)
      1. value。初值是非负整数。

        1. 初值为1:实现进程互斥。

        2. 初值为0:实现进程同步。

        3. 初值大于1:管理同种组合资源。

          1. 组合资源:若干相对独立的资源构成的集合。

          2. 同种组合资源:相同类型子资源构成的集合。

      2. queue。可指向一个等待队列的头部。

    3. PV操作
      1. 对信号量类型变量的操作。

      2. P
        1. 一个进程申请资源,进入队列尾部。如果此时没有足够的资源,则该进程进入等待状态,系统转入处理器调度,选择另一个进程来占据时间片。

      3. V
        1. 一个进程释放资源,从队列头部弹出。如果此时该进程确实存在(即弹出之前队列不为空,即value<0,此时value的绝对值为等待进程的个数),则该进程进入就绪状态。此时不关中断,方便其进行一系列的资源释放操作。

      4. 一段不可间断的程序称为原语。PV操作是原语。

      5. 信号量是共享变量,PV操作是其临界区。通常采用开关中断的互斥方法。

    4. PV操作的实现
      1. 采用开关中断:快,影响小。

    5. PV操作的应用
      1. 司机与售票员问题
        1. P1执行P(S1)时,P1被sleep,直到P2执行V(S1)。下同。

      2. 生产者-消费问题
        1. 生产者可能和生产者互斥,而生产者与消费者不互斥。(PV(S1),PV(S2)保证)

      3. 读者-写者问题
        1. 第一个来临的读操作、最后一个离开的读操作,和写操作互斥。

          1. 写者会出现饥饿:一旦有写者等待,则新到达的读者进入等待。

      4. 吸烟者问题
        1. 两个P操作不能同时进行,导致一个可以完成的进程被另一个同时进行的进程抢夺资源,导致死锁。

        2. 解决:SP,SV,同时进行一系列P或V操作。

          1. SP失败:将PCB连接到第一个S<t的队列中,重置该PCB的PC指针。

          2. SV:将S队列上所有PCB取出,送入就绪队列。(因为CPU调度处理就绪队列)

  12. 管程

    1. 集中式同步设施,不灵活,效率低。

    2. 将共享变量,对共享变量的操作集中在一个模块中,将分散在各个进程中互斥访问公共变量的临界区集中起来,提供对它们的保护。

    3. 管程的形式
      1. 共享变量声明:private

      2. define的函数名:可供外部使用的函数的名称

      3. use的函数名:本管程调用的函数的名称

      4. 其他函数:仅可在管程内部使用

      5. 外部只能通过define的函数,来间接访问共享变量,一次只有一个进程进入管程。

    4. 管程的特性
      1. 模块化

      2. 抽象数据类型,类似于c++的类

      3. 信息隐蔽

    5. 管程的语义
      1. 入口等待队列(管程外定义)
        1. 申请管程的互斥权。

        2. 一次只有一个进程进入管程,其余的在入口等待队列等待。或者说,每个时刻都有n-1个进程在各式各样的等待队列里。

      2. 条件队列(可有多个)
        1. 若进程不满足运行条件,比如刚进入时没有资源,则

          1. 选取目标共享变量的条件队列,进行一次wait()。

          2. 此进程进入该队列尾部等待。

          3. 从紧急等待队列,或入口等待队列选择一个进程运行。(优先紧急等待队列)因为这个进程wait了,CPU总得找点事情做。

        2. 若进程进入后满足运行条件,则无需进入条件队列,直接运行。

      3. 紧急等待队列
        1. 进程若不满足运行条件,比如即将结束,需要唤醒别的进程,则

          1. 选取特定共享变量的条件队列,执行一次signal()。

          2. 此进程进入紧急等待队列尾部,等待被唤醒(Hoare),或直接离开管程((Hansen))。

          3. 从选中的条件队列选择一个进程运行,如不存在进程,则不运行。

      4. 进程离开时:从紧急等待队列,或入口等待队列选择一个进程运行。(优先紧急等待队列)

  13. 磁头引臂调度问题

    1. 电梯调度算法

    2. Hansen管程

  14. 嗜睡理发师问题

  15. 管程和PV操作的等价性

    1. 等价表 4-1 4-2

    2. 采用构造方法实现的同步机制,比采用直接方法实现的机制效率低,即用管程模拟PV操作比直接用PV操作效率低,用PV模拟管程比直接用管程效率低

    3. 以被动成分(被进程所操作的对象,即公共区)为核心,都只适用单处理器系统和有公共内存的多处理器系统,不适合分布式系统

    4. 进程调用管程define的函数或使用PV操作时,是调用进程执行该代码段,而非将控制权交给其他进程。

  16. 管程嵌套调用

    1. 管程嵌套可能发生多层,调用后可能等待

    2. 禁止嵌套

    3. 允许嵌套,最内层发生等待时,释放其互斥权

    4. 允许嵌套,最内层发生等待时,释放所有层次的互斥权

    5. 允许嵌套,最内层发生等待时,释放所有除当前层次的互斥权

  17. 会合(调用)

    1. PV,管程的问题:当多个进程处于多个分布式主机时,信号量不能被共同访问

    2. 进程与进程之间可以通过会合的方式相互作用,不需要被动成分参与

    3. 当一个任务调用另一个任务,且被调用任务已经准备好时,发生会合

    4. 任务
      1. 主动成分称为任务。

      2. 有若干个入口及其先进先出队列,每个入口后有一段程序。

      3. 采取先到达者等待后者的方式,和一些选择语句(else部分相当于条件恒真),来调节调用者和被调用者的关系。

      4. 被调用者按照先到先服务的次序依次接受调用。

      5. 任务调用时,被调用者(被调用进程)执行接受语句后的程序段。

      6. 被调用者执行接受语句后,调用者已经返回。类似于委托机制。

  18. 进程间的通信

    1. 进程互斥与同步为低级通信,进程间交换大量信息称为高级通信,简称通信。

    2. 共享内存模式
      1. 一组在内存写,一组在内存读。

    3. 消息传递模式
      1. 通过系统调用命令(send,receive)来进行通信

      2. 直接方式
        1. 发送者指定接收者,接收者指定发送者

        2. 对称式
          1. 一对一

        3. 非对称式
          1. 发送者指定唯一接收者,接收者不指定发送者

          2. receive时返回进程的pid

        4. 有缓冲途径(非对称式)
          1. 存在自愿性中断;提高了并发性。

          2. send:①操作系统(核心态)为发送的消息分配缓冲区,将消息复制到缓冲区;②然后将缓冲区连接到互斥的接收进程的消息链中。

          3. receive:①操作系统(核心态)将缓冲区从消息链取出;②将信息复制到接收进程空间中;③缓冲区回到互斥的系统的空闲缓冲区链中。

          4. 缓冲区,发送和接收属于操作系统区,故操作系统应能访问用户区。

        5. 无缓冲途径
          1. send和receive相互等待

          2. ①发送进程唤醒接收进程,②发送进程等待接收进程接收消息(从发送进程空间直接传到接收进程空间,可用寄存器传输),③接收进程唤醒发送进程。

          3. 节省空间;并发性差。

      3. 间接方式
        1. 进程间通过信箱传递消息。信箱可存在操作系统空间,也能存在用户空间。由接收方调用系统创建信箱。

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值