操作系统期末复习

第一章 操作系统引论

操作系统的目标和作用

  • 目标

    • 方便高效
  • 作用

    • 用户与计算机硬件系统之间的接口
    • 计算机系统资源的管理者
    • 实现对计算机资源的抽象

操作系统的发展过程

  • 1 无操作系统的计算机系统
  • 2 单道批处理系统
  • 3 多道批处理系统
  • 4 分时系统
  • 5 实时系统
  • 6 微机操作系统
  • 7 嵌入式操作系统
  • 8 网络操作系统
  • 9 分布式操作系统

操作系统的基本特征

  • 并发

    • 并发vs并行

      • 并行性

        • 两个或多个事件在同一时刻发生
      • 并发性

        • 两个或多个事件在同一时间间隔内发生
    • 引入进程(任务):动态、并发

  • 共享

    • 概念

      • 系统中的资源可供内存中多个并发执行的进程共同使用
    • 分类

      • 互斥共享方式(临界资源)
      • 同时访问方式
  • 虚拟

    • 时分复用技术

      • 虚拟处理机
      • 虚拟设备
    • 空分复用技术

      • 虚拟存储
  • 异步

程是以人们不可预知的速度向前推进的

操作系统的运行环境

  • 硬件支持

  • 内核

    • 概念

      • 常驻内存,通常与硬件紧密相关的部分
    • 支撑功能

      • 中断处理
      • 时钟管理
      • 原语操作
    • 资源管理功能

      • 进程管理
      • 存储器管理
      • 设备管理
  • 处理机的双重工作模式

    • 特权指令与非特权指令

      • 特权指令

        • 概念

          • 在内核态下运行的指令
          • 如果误用,有可能引起系统崩溃的指令
        • 作用

          • 不仅能访问用户空间,还能访问系统空间
          • 如启动外部设备、设置系统时钟、管中断、切换执行状态、I/O指令
      • 非特权指令

        • 概念

          • 在用户态下运行的指令
          • 应用程序所使用的都是非特权指令
        • 作用

          • 仅能访问用户空间
          • 防止应用程序的运行异常对系统造成破坏
      • 用户态到内核态的切换

    • 内核态(管态、系统态)

      • 执行包括特权指令在内的一切指令
    • 用户态(目态)

      • 不能执行特权指令
    • 由硬件提供模式位

      • 区分用户态和内核态
      • 系统调用切换运行模式到内核态,并将调用结果返回给用户
  • 操作系统是中断驱动的

    • 中断

      • 由硬件引起
    • 异常/陷阱

      • 由软件引起

操作系统的主要功能

  • 处理机管理功能

    • 进程控制
    • 进程同步
    • 进程通信
    • 调度
  • 存储器管理功能

    • 内存分配和回收
    • 内存保护
    • 地址映射
    • 内存扩充(虚拟存储技术)
  • 设备管理功能

    • 缓冲管理
    • 设备分配
    • 设备处理
  • 文件管理功能

  • 用户接口功能

操作系统的结构设计

  • 简单结构
  • 模块化结构
  • 分层式结构
  • 微内核系统
  • 外核结构

系统调用

  • 概念

    • 应用程序请求OS内核完成某功能时的一种过程调用
    • 用户与内核的接口
  • 分类

    • 进程控制类
    • 进程通信类
    • 文件操纵类
    • 设备管理类
    • 信息维护类

第二章 进程的描述与控制

前趋图和程序执行

  • 前趋图

  • 程序并发执行的特征

    • 间断性
    • 失去封闭性
    • 不可再现性
  • 并发程序和顺序程序的对比

进程

  • 进程的描述

    • 定义

      • 进程是进程实体的运行过程,是系统进行资源分配调度的一个独立单位
    • 特征

      • 动态性
      • 并发性
      • 独立性
      • 异步性
    • 进程 vs 程序

      • 进程是程序的一个实例,
        是程序的一次执行
      • 进程是活动的,
        程序是静态的
      • 程序是进程的代码部分
      • 进程在内存中,
        程序在外存中
    • 进程的状态及转换

      • 进程的状态

        • 就绪状态

          • 除CPU外,其他资源已经全部获得‘
        • 执行状态

          • 已获得CPU,正在执行的状态
        • 阻塞状态

          • 正在执行的进程由于发生某事件而暂时无法继续执行的状态
      • 进程的转换

    • 进程控制块(PCB)

      • 概念

        • 是进程的一部分,是操作系统中最重要的记录型数据结构,是进程存在的唯一标志,常驻内存
      • 作用

        • 作为独立运行基本单位的标志
        • 能实现间断性运行方式
        • 提供进程管理所需要的信息;
        • 提供进程调度所需要的信息
        • 实现与其他进程的同步与通信
      • PCB的信息

        • 进程标识符PID
        • 处理机状态
        • 进程调度信息
        • 进程控制信息
      • PCB的组织方式

        • 线性方式

        • 链接方式

        • 索引方式

  • 进程的控制

    • 概念

      • 进程管理最基本的功能,一般由OS内核中的原语实现
    • 分类

      • 进程创建

        • 过程

          • 申请空白PCB
          • 分配所需资源
          • 初始化PCB
          • 插入就绪队列
        • 引起事件

          • 用户登录、作业调度、提供服务、应用请求
      • 进程终止

        • 引起事件

          • 正常结束、异常结束、外界干预
        • 过程

          • 读进程
          • 中止该进程,重新调度
          • 中止子孙进程
          • 归还资源
          • 移出所在队列
      • 进程阻塞与唤醒

        • 引起事件

          • 向系统请求共享资源失败;等待某种操作的完成;数据尚未到达;等待新任务的到达。
        • 进程阻塞过程

          • 阻塞原语Block()。 进程的阻塞是进程自身的一主动行为。
          • 具体过程:停止执行;状态由执行改为阻塞;将PCB插入阻塞队列
        • 进程唤醒过程

          • 唤醒原语Wakeup()
          • 具体过程:从阻塞队列中移出;状态由阻塞改为绪;将PCB插入就绪队列。
          • 必须成对使用Block和Wakeup原语
      • 进程挂起与激活

        • 挂起

          • Suspend()原语
        • 激活

          • Active()原语
  • 进程通信

    • 概念

      • 进程通信是指进程之间的信息交换
    • 分类

      • 低级进程通信

        • 示例:进程的同步和互斥
        • 效率低,通信对用户不透明
      • 高级进程通信

        • 使用方便,高效地传送大量数据
    • 类型

      • 共享存储器系统

        • 基于共享数据结构的通信方式(效率低)
        • 基于共享存储区的通信方式(高级)
      • 管道通信

        • 用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件
        • 管道机制的协调能力:互斥、同步、对方是否存在
      • 消息传递系统

        • 直接通信方式

          • 发送原语:send(receiver, message)
          • 接收原语:receive(sender, message)
        • 间接通信方式(通过邮箱)

          • 信箱结构

          • 发送原语:send(mailbox, message)

          • 接收原语:receive(mailbox, message)

          • 信箱类型

            • 私用邮箱
            • 公共邮箱
            • 共享邮箱
      • 客户机-服务器系统

        • 套接字(Socket)
        • 远程过程调用(RPC)和远程方法调用(RMI,Java)
    • Linux进程通信方式

      • 方式

        • 管道
        • 信号
        • 消息队列
        • 共享内存
        • 信号量
        • 套接字

线程

  • 线程的基本概念

    • 进程 vs 线程

      • 进程是拥有资源的基本单位

      • 线程作为调度和分派的基本单位

      • 调度的基本单位

        • 在同一进程中,线程的切换不会引起进程切换,在一个进程中的线程切换到另一个进程中的线程时,将会引起进程切换
      • 并发性

        • 在引入线程的操作系统中,不仅进程之间可以并发行,而且在一个进程中的多个线程之间,也可并发执行
      • 拥有资源

        • 进程是系统中拥有资源的一个基本单位,它可以拥有资源
        • 线程本身不拥有系统资源,仅有一点保证独立运行的资源
        • 允许多个线程共享其隶属进程所拥有的资源
      • 独立性

        • 同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多
      • 系统开销

        • 在创建或撤消进程时OS所付出的开销将显著大于创建或撤消线程时的开销
        • 线程切换的代价远低于进程切换的代价
        • 同一进程中的多个线程之间的同步和通信也比进程的简单
      • 支持多处理机系统

    • 线程状态

      • 执行态
      • 就绪态
      • 阻塞态
    • 线程控制块TCB

  • 线程的实现

    • 内核支持线程KST

      • 内核支持线程的实现(利用系统调用)

      • 优点

        • 在多处理机系统中,内核可同时调度同一进程的多个线程
        • 如一个线程阻塞了,内核可调度其他线程(同一或其他进程)
        • 线程的切换比较快,开销小
        • 内核本身可采用多线程技术,提高执行速度和效率
      • 缺点

        • 对用户线程切换,开销较大
    • 用户级线程ULT

      • 用户级线程的实现(借助中间系统)

      • 优点

        • 线程切换不需要转换到内核空间
        • 调度算法可以是进程专用的
        • 线程的实现与OS平台无关
      • 缺点

        • 系统调用的阻塞问题
        • 多线程应用不能利用多处理机进行多重处理的优点
    • 组合方式

      • 多对一模型

        • 多个用户级线程映射到一个内核线程
      • 一对一模型

        • 每个用户级线程映射到一个内核线程
      • 多对多模型

        • 多个用户级线程映射为相等或小于数目的内核线程

第三章 处理机调度与死锁

处理机调度

  • 概述

    • 分类

      • 高级调度(长程调度/作业调度)

        • 调度对象:作业
        • 主要用于多道批处理系统中
        • 根据某种算法,决定将外存上处于后备队列中的作业调入内存,并为它们创建进程和分配必要的资源。然后,将新创建的进程排在就绪队列上等待调度。
      • 低级调度(短程调度/进程调度)

        • 调度对象:进程
        • 根据某种调度算法,决定就绪队列中的哪个进程应获得处理机
        • 应用在于多道批处理、分时和实时OS
      • 中级调度(中程调度/内存调度)

        • 即“对换” 功能
    • 进程调度的任务和方式

      • 进程调度的任务

        • 保存处理机的现场信息
        • 按某种算法选取进程
        • 把处理器分配给进程
      • 进程调度机制(调度程序分为三部分)

        • 排队器:用于将就绪进程插入相应的就绪队列
        • 分派器:用于将选定的进程移出就绪队列
        • 上下文切换器:进行新旧进程之间的上下文切换
      • 进程调度的方式

        • 非抢占方式

        • 抢占方式

          • 允许调度程序根据某种原则,去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一进程。(现代OS广泛采用)

          • 三种原则

            • 优先权原则:允许优先权高的新到进程抢占当前进程的处理机
            • 短作业优先原则:短作业可以抢占当前较长作业的处理机
            • 时间片原则:各进程按时间片运行,当一个时间片用完后,便停止该进程的执行而重新进行调度
      • 评价指标

        • 周转时间

          • 定义

            • 从作业提交给系统开始,到作业完成为止的这段时间隔
          • 平均周转时间

            • \(T=\frac{1}{n}\Sigma^n_{i=1}T_i\)
          • 带权周转时间

            • \(W=\frac{1}{n}\Sigma^n_{i=1}\frac{T_i}{T_{s_i}}\)
            • 权值为作业周转时间T与系统为之服务时间TS之比
        • 响应时间

          • 从用户通过键盘提交请求开始,直到系统首次显示出处理结果为止的一段时间。
        • 等待时间

          • 进程在就绪队列中等待调度的所有时间之和
  • 作业调度算法

    • 先来先服务调度算法(FCFS)

      • 比较有利于长作业,而不利于短作业

      • 评价

        • 该有利于CPU繁忙的作业,而不利于I/O繁忙的作业
    • 短作业优先调度算法(SJF)

      • 分类

        • 非抢占式SJF

        • 抢占式SJF

      • 评价

        • SJF比FCFS算法有明显改进
        • 只能估算进程的运行时间(估值不准确),所以通常用于作业调度
        • 对长作业不利
        • 采用SJF算法时,人-机无法实现交互
        • 完全未考虑作业的紧迫程度
    • 优先级调度算法(PR)

      • 基于作业/进程的紧迫程度,由外部赋予作业相应的优先级,调度算法根据优先级进行调度

        • 每个进程都有一个优先数,优先数为整数
        • 默认:小的优先数具有高优先级
        • 目前主流的操作系统调度算法
      • 分类

        • 抢占式

        • 非抢占式

        • 静态优先级

        • 动态优先级

      • 评价

        • 实现简单,考虑了进程的紧迫程度
        • 灵活,可模拟其它算法
        • 饥饿 ——低优先级的进程可能永远得不到运行
        • 老化 —— 视进程等待时间的延长提高其优先数
    • 高响应比优先调度算法(HRRN)

      • 高响应比优先调度算法是一种优先级调度算法

      • 既考虑作业的等到时间,又考虑作业的运行时间

      • 优先级

      • 响应比

      • 评价

        • 长作业可随其等待时间的增加而提高,也可得到服务
        • 缺点:每次调度之前,都需要计算响应比,增加系统开销
    • 时间片轮转(RR)调度算法

      • 时间片大小的确定

        • q 大

          • FCFS
        • q 小

          • 增加上下文切换的时间
        • 时间片设置应考虑

          • 系统对响应时间的要求
          • 就绪队列中进程的数目
          • 系统的处理能力
        • 一般准则:时间片/10>进程上下文切换时间

    • 多级队列调度算法

    • 多级反馈队列调度算法

    • 基于公平原则的调度算法

  • 实时调度

    • 实时调度是针对实时任务的调度

      • 实时任务,都联系着一个截止时间

        • 硬实时HRT任务
        • 软实时SRT任务
      • 实时调度应具备一定的条件

    • 实现实时调度的基本条件

        1. 提供必要的信息
        1. 系统处理能力强
        1. 采用抢占式调度机制
        1. 采用快速切换机制
    • 实时调度算法分类

      • 根据实时任务性质

        • HRT调度算法
        • SRT调度算法
      • 根据调度方式

        • 非抢占式调度算法

          • 非抢占式轮转调度算法
          • 非抢占式优先调度算法
        • 抢占式调度算法

          • 基于时钟中断的抢占式优先级调度
          • 立即抢占的优先级调度
    • 最早截止时间优先(EDF)调度算法

      • EDF根据任务的截止时间确定优先级,截止时间越早,优先级越高

      • 既可用于抢占式调度,也可用于非抢占式调度

        • 非抢占式调度用于非周期实时任务
        • 抢占式调度用户周期实时任务
    • 最低松弛度优先LLF算法

      • 根据任务的紧急程度(松弛度)确定任务优先级

        • 紧急程度越高(松弛度越低),优先级越高
        • 松弛度=必须完成时间-其本身的运行时间-当前时间
      • 两个周期性实时任务A和B,任务A要求每20 ms执行一次,执行时间为10 ms,任务B要求每50 ms执行一次,执行时间为25 ms

    • 优先级倒置

      • 采用优先级调度和抢占方式,可能产生优先级倒置。现象:高优先级进程被低优先级进程延迟或阻塞。

      • 解决方法

        • 制定一些规定,如规定低优先级进程执行后,其所占用的处理机不允许被抢占
        • 建立动态优先级继承
  • Linux进程调度

死锁

  • 概述

    • 概念

      • 一组等待的进程,其中每一个进程都持有资源,并且等待着由
        这个组中其他进程所持有的资源
    • 资源问题

      • 可抢占性和不可抢占性资源

        • 可抢占性资源:某进程在获得这类资源后,该资源可以再被其他进程或系统抢占,CPU(处理机)和主存区
        • 不可抢占资源:当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,打印机、磁带机
      • 可重用性资源和可消耗性资源

        • 可重用性资源:一次只能分配给一个进程,不允许多个进程共享
        • 可消耗性资源:由进程动态创建和消耗
    • 死锁原因

      • 竞争不可抢占性资源引起死锁

      • 竞争可消耗性资源引起死锁

      • 进程推进顺序不当引起死锁

    • 必要条件

      • 互斥

        • 一段时间内某资源只能被一个进程占用
      • 请求和保持

        • 一个至少持有一个资源的进程等待获得外的由其他进程所持有的资源
      • 不可抢占

        • 一个资源只有当持有它的进程完成任务后,自由的释放
      • 循环等待

        • 等待资源的进程之间存在环
    • 处理死锁的方法

      • 确保系统永远不会进入死锁状态

        • 死锁预防

          • 破坏死锁的四个必要条件中一个或几个
        • 死锁避免

          • 在资源动态分配时,防止系统进入不安全状态
      • 允许系统进入死锁状态,然后恢复系统

        • 死锁检测

          • 事先不采取任何措施,允许死锁发生,但及时检测死锁发发生
        • 死锁恢复

          • 检测到死锁发生时,采取相应措施,将进程从死锁状态中解脱出来
      • 忽略这个问题,假装系统中从未出现过死锁。这个方法被大部分的操作系统采用,包括UNIX

  • 预防死锁

    • 破坏死锁的四个必要条件中的一个或几个

    • 互斥

      • 互斥条件是共享资源必须的,不仅不能改变,还应加以保证
    • 请求和保持

      • 要求进程在执行前一次性申请全部的资源,只有没占有资源时才可以分配资源
      • 改进:进程只获得运行初期所需的资源后,便开始运行;其后在运行过程中逐步释放已分配的且用毕的全部资源,然后再请求新资源
      • 资源利用率低,可能出现饥饿
    • 非抢占

      • 如果一个进程的申请没有实现,它要释放所有占有的资源
      • 先占的资源放入进程等待资源列表中
      • 进程在重新得到旧的资源的时候可以重新开始
    • 循环等待

      • 对所有的资源类型排序进行线性排序,并赋予不同的序号,要求进程按照递增顺序申请资源
      • 如何规定每种资源的序号是十分重要的
      • 限制新类型设备的增加
      • 作业使用资源的顺序与系统规定的顺序不同
      • 限制用户简单、自主的编程
  • 避免死锁

    • 死锁避免算法

      • 动态检查资源分配状态以确保不会出现循环等待的情况

      • 安全状态

        • 当进程申请一个有效的资源的时候,系统必须确定分配后是安全的
        • 如果存在一个安全序列,则系统处于安全态
        • 进程序列<P1, P2, …, Pn>是安全的,如果每一个进程Pi所申请的可以被满足的资源数加上其他进程所持有的该资源数小于系统总数
        • 死锁避免 => 确保系统永远不会进入不安全状态
    • 银行家算法

      • n为进程的数目,m为资源类型的数目

      • 数据结构

        • Available

          • 长度为 m的向量
          • 如果available[j]=k,那么资源Rj有k个实例有效
        • Max

          • n x m 矩阵
          • 如果Max[i,j]=k,那么进程Pi可以最多请求资源Rj的k个实例
        • Allocation

          • n x m 矩阵
          • 如果Allocation[i,j]=k,那么进程Pj当前分配了k个资源Rj的实例
        • Need

          • n x m 矩阵
          • 如果Need[i,j]=k,那么进程Pj还需要k个资源Rj的实例Need [i,j] = Max[i,j] – Allocation [i,j]
      • 例子

        -

        -

    • 系统模型

      • 例子

      • 如果图没有环

        • 那么不会有死锁
      • 如果图有环

        • 如果每一种资源类型只有一个实例

          • 那么死锁发生
        • 如果一种资源类型有多个实例

          • 那么可能死锁
  • 死锁的检测与解除

    • 死锁的检测

      • 系统必须满足的两点

        • 保存有关资源的请求和分配信息
        • 提供一种算法,以利用这些信息来检测系统是否已进入死锁状态
      • 死锁定理

        • 当且仅当S状态的资源分配图是不可完全简化的
      • 例子

    • 死锁的解除

      • 抢占资源

        • 从一个或多个进程中抢占足够数量的资源给死锁进程,以解除死锁状态
      • 终止或撤消进程

        • 终止系统中一个或多个死锁进程,直到打破循环环路,使死锁状态消除为止

第四章 进程同步

进程同步基本概念

  • 主要任务

    • 使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性
  • 互斥与同步

    • 间接相互制约关系(互斥关系)

      • 进程互斥使用临界资源
    • 直接相互制约关系(同步关系)

      • 进程间相互合作
  • 临界区问题

    • 系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源或共享变量

    • 诸进程间应采取互斥方式,实现对这种资源的共享

    • 示例

    • 同步机制应遵循的准则

      • 空闲让进

        • 当无进程处于临界区,应允许一个请求进入临界区的进程立即进入自己的临界区
      • 忙则等待

        • 当无进程处于临界区,应允许一个请求进入临界区的进程立即进入自己的临界区
      • 有限等待

        • 等待进入临界区的进程不能"死等"
      • 让权等待

        • 不能进入临界区的进程,应释放CPU(如转换到阻塞状态)

进程同步机制

  • 软件同步机制

    • 使用编程方法解决临界区问题

      • Peterson解决方案

  • 硬件同步机制

    • 使用特殊的硬件指令,可有效实现进程互斥

    • 硬件指令

      • 关中断

      • Test-and-Set指令

      • Swap指令

    • 缺点

      • 不符合“让权等待”原则,浪费CPU时间
      • 很难解决复杂的同步问题
  • 信号量机制

    • 信号量机制介绍

      • 一种有效的进程同步机制,已被广泛应用

      • 过程

        • 保证两个或多个代码段不被并发调用
        • 在进入关键代码段前,进程必须获取一个信号量,否则不能运行
        • 执行完该关键代码段,必须释放信号量
        • 信号量有值,为正说明它空闲,为负说明其忙碌
      • 分类

        • 整型信号量

          • 信号量S-整型变量-------可作为资源的数量

          • 提供两个不可分割的[原子操作]访问信号量

            • Wait(s)又称为P(S)
            • Signal(s)又称为V(S)
          • 缺点:进程忙等

        • 记录型信号量

          • 每个信号量S除一个整数值S.value外,还有一个进程等待队列S.list,存放阻塞在该信号量的各个进程PCB

          • 访问

            • 初始化
            • 两个标准的原语PV
            • 作为OS核心代码执行,不受进程调度的打断
          • 初始化

            • 初始化指定一个非负整数值,表示空闲资源总数
            • 若为负值其绝对值表示当前等待临界区的进程数
          • PV操作

            -

        • AND型信号量

          • 将进程在整个运行过程中需要的所有资源,一次性全部分配给进程,待进程使用完后再一起释放
        • 信号量集

          • 对进程所申请的所有资源以及每类资源不同的资源需求量,在一次P、V原语操作中完成申请或释放
    • 信号量的应用

      • 利用信号量实现进程互斥

        • 设置互斥信号量

        • 示例

      • 利用信号量实现前驱关系

        • 示例

      • 利用信号量实现进程同步

        • 示例

  • 管程机制

    • 新的进程同步机制

    • 信号量的问题

      • 需要程序员实现,编程困难
      • 维护困难
      • 容易出错
    • 信号量vs管程

      • 信号量:分散式
      • 管程:集中式
    • 定义

      • 一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据

    • 功能

      • 互斥
      • 同步
    • 条件变量问题

      • 管程内可能存在不止1个进程

经典的进程同步问题

  • 生产者-消费者问题

    • 生产者-消费者问题是相互合作进程关系的一种抽象

    • 利用记录型信号量实现

      • 具有n个缓冲区,可利用互斥信号量mutex使诸进程实现对缓冲池的互斥使用
      • 利用资源信号量empty和full分别表示缓冲池中空缓冲区和满缓冲区的数量
      • 又假定这些生产者和消费者相互等效,只要缓冲池未满,生产者便可将消息送入缓冲池;只要缓冲池未空,消费者便可从缓冲池中取走一个消息
    • 互斥访问缓冲区

    • 同步关系

      • 分析

    • 实现

  • 哲学家进餐问题

    • 记录型信号量问题

      • 示例

      • 可能引起死锁

      • 解决方法

        • 最多允许4个哲学家同时坐在桌子周围
        • 仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子
        • 给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之
    • AND信号量机制

      • 示例

    • 管程

      • 示例

  • 写者-读者问题

    • 问题描述

      • 有两组并发进程

        • 读者和写者,共享一组数据区
      • 要求

        • 允许多个读者同时执行读操作
        • 不允许读者、写者同时操作
        • 不允许多个写者同时操作
      • 分类

        • 读者优先(第一类读者写者问题)
        • 写者优先(第二类读者写者问题)
    • 记录型信号量

      • 第一类

      • 第二类

    • 信号量集

      • 第一类

      • 第二类

信号量的总结

  • 信号量的使用

    • 信号量必须置一次且只能置一次初值,初值不能为负数
    • 除了初始化,只能通过执行P、V操作来访问信号量
  • 使用中存在的问题

    • 死锁

      • 两个或多个进程无限期地等待一个事件的发生,而该事件正是由其中的一个等待进程引起的
    • 饥饿

      • 无限期地阻塞,进程可能永远无法从它等待的信号量队列中移去(只涉及一个进程)
  • 互斥分析基本方法

    • 查找临界资源
    • 划分临界区
    • 定义互斥信号量并赋初值
    • 在临界区前的进入区加wait操作;退出区加signal操作
  • 同步分析

    • 找出需要同步的代码片段(关键代码)
    • 分析这些代码片段的执行次序
    • 增加同步信号量并赋初始值
    • 在关键代码前后加wait和signal操作
  • 信号量的物理含义

    • 信号量的初值应该大于等于0
    • S>0表示有S个资源可用
    • S=0表示无资源可用
    • S<0则| S |表示S等待队列中的进程个数
    • P(S):表示申请一个资源
    • V(S)表示释放一个资源
  • PV操作的使用

    • P.V操作必须成对出现,有一个P操作就一定有一个V操作
    • 当为互斥操作时,它们同处于同一进程
    • 当为同步操作时,则不在同一进程中出现
    • 如果P(S1)和P(S2)两个操作在一起,那么P操作的顺序至关重要,一个同步P操作与一个互斥P操作在一起时同步P操作在互斥P操作前,而两个V操作无关紧要
  • 缺点

    • 同步操作分散
    • 不利于修改和维护
    • 易读性差
    • 正确性难以保证

Linux进程同步机制

  • 同步方法

    • 原子操作
    • 自旋锁
    • 信号量
    • 互斥锁
    • 禁止中断

第五章 存储器管理

存储器的层次结构

  • 图示
    -

    • 可执行存储器:寄存器和主存储器
    • 主存储器:内存或主存
    • 高速缓存:介于寄存器和存储器之间
  • 层次越高,访问速度越快,价格也越高,存储容量也最小

  • 寄存器和主存掉电后存储的信息不再存在,辅存的信息长期保存

程序的装入与链接

  • 程序的运行过程

    • 编译
    • 链接
    • 装入
  • 地址绑定和内存保护

    • 逻辑地址

      • 由CPU产生的地址,即程序编译后使用的相对于0字节的地址
    • 物理地址

      • 物理内存的地址,内存以字节为单位编址
    • 内存保护

      • 目的

        • 保护OS不被用户访问
        • 保护用户进程不会相互影响
      • 实现:硬件

        • 基地址寄存器

          • 保存最小的合法物理内存地址(基地址)
        • 界限寄存器

          • 保存合法的地址范围大小(界限地址)
        • 判断“基地址≤物理地址<(基地址+界限地址)”是否成立

  • 程序的装入

    • 三种装入方式

      • 绝对装入方式

        • 编译时产生的地址使用绝对地址
        • 程序或数据被修改时,需要重新编译程序
      • 可重定位装入方式

        • 编译后的目标模块使用相对地址
        • 在装入时,完成重定位(静态重定位)
        • 需硬件支持
      • 动态运行时装入方式

        • 编译后的目标模块使用相对地址
        • 在运行时,完成重定位(动态重定位)
  • 程序的链接

    • 三种链接方式

      • 静态链接

        • 在程序运行前,将各目标模块及它们所需的库函数链接成一个完整的装配模块,以后不再拆开
      • 装入时动态链接

        • 在装入内存时,采用边装入边链接的链接方式
      • 运行时动态链接

        • 将某些目标模块的链接推迟到执行时才执行。即在执行过程中,若发现一个被调用模块尚未装入内存时,立即由OS去找到该模块并将它装入内存,并把它链接到调用者模块上

对换与覆盖

  • 对换

    • 概念

      • 把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需的程序或数据,调入内存
      • 对换是提高内存利用率的有效措施,广泛应用于OS中(时间换空间
    • 对换的类型

      • 整体对换

        • 概念

          • 对换以整个进程为单位,也称为进程对换
          • 被广泛应用于多道程序系统,并作为处理机中级调度
        • 必须能实现三方面的功能

          • 对换空间的管理
          • 进程的换出
          • 进程的换入
      • 页面(分段)对换

        • 概念

          • 对换是以“页”或“段”为单位进行的,又统称为“部分对换”
          • 目的是为了支持虚拟存储系统
    • 对换区的管理

      • 主要目标

        • 提高进程换入和换出的速度
        • 提高文件存储空间的利用率次之
        • 应采用连续分配方式,很少考虑碎片问题
      • 盘块管理中的数据结构

        • 用于记录外存对换区中的空闲盘块的使用情况
        • 与动态分区分配方式相似
        • 空闲分区表/空闲分区链:包含对换区首址及大小
      • 对换区的分配与回收

        • 与动态分区方式的内存分配与回收方法相似
  • 覆盖

    • 解决问题

      • 程序大小超过物理内存总和
    • 程序执行时

      • 只在内存中保留那些在任何时间都需要的指令和数据
      • 程序的不同部分在内存中相互替换
    • 由程序员声明覆盖结构,不需要操作系统的特别支持

    • 覆盖结构的程序设计很复杂

    • 应用于早期的操作系统

连续分配存储管理

  • 连续分配概念

    • 为一个用户程序分配一个连续的内存空间
  • 单一连续分配

    • 内存

      • 系统区:供OS使用、低址部分
      • 用户区:供用户使用
    • 分配方式

      • 单道程序环境下,仅装有一道用户程序,即整个内存的用户空间由该程序独占。

      • 优缺点

        • 内存分配管理十分简单,内存利用率低

        • 用于单用户、单任务OS

        • 未采取存储器保护措施

          • 节省硬件
          • 方案可行
  • 固定分区分配

    • 方案

      • 预先把可分配的主存储器空间分割成若干个连续区域,称为一个分区
      • 每个分区的大小可以相同也可以不同。但分区大小固定不变,每个分区装一个且只能装一个作业
      • 内存分配:如果有一个空闲区,则分配给进程
    • 划分分区的方法

      • 分区大小一样

        • 缺乏灵活性
        • 有些场合适用,如利用一台计算机同时控制多个相同对象
      • 分区大小不等

        • 多个小分区
        • 适量中分区
        • 少量大分区
    • 例子

    • 优缺点

      • 优点

        • 无外碎片
        • 易实现
        • 开销小
      • 缺点

        • 存在内碎片,浪费
        • 分区数量固定,限制并发执行的进程数量
        • 通用OS很少采用,部分控制系统采用
  • 可变分区分配

    • 概念

      • 又称为可变分区分配,根据进程的实际需要,动态地为之分配内存空间。

      • 数据结构

        • 空闲分区表

        • 空闲分区链

      • 分配算法

        • 顺序式分配算法

          • 依次搜索空闲分区链上的空闲分区,寻找一个其大小能够满足要求的分区

          • 分类

            • 首次适应算法

              • 空闲分区链以地址递增的次序链接
              • 从链首开始顺序查找,直到找到一个大小能满足要求的空闲分区为止
              • 缺点:低址部分留下许多小碎片
            • 循环首次适应算法

              • 从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区
              • 空闲分区分布更均匀,减少了查找的开销
              • 缺乏大的空闲分区
            • 最佳适应算法

              • 搜索整个序列,找到适合条件的最小的分区进行分配
              • 空闲分区按其容量从小到大的顺序链接
              • 但留下许多难以利用的小碎片
            • 最坏适应算法

              • 搜索整个序列,寻找最大的分区进行分配
              • 空闲分区按其容量从大到小的顺序链接
              • 分割后空闲块仍为较大空块;缺乏大的空闲分区
        • 索引式分配算法

          • 提高搜索空闲分区的速度,在大、中型系统中采用

          • 分类

            • 快速适应算法

              • 将空闲分区按其容量大小进行分类,具有相同容量的所有空闲分区设有一个空闲分区链表
              • 系统设有一张管理索引表,每一项对应一个空闲分区类型
              • 分配时,根据进程长度,从索引表中寻找到能容纳它的最小空闲分区链表;从链表中取下第一块进行分配
              • 优点:不分割分区,不产生碎片,查找效率高
              • 缺点:分区归还主存时算法复杂,系统开销较大,存在浪费
            • 伙伴系统

              • 分区大小均为2的k次幂

              • 主要用于多处理机系统中(Linux早期版本)

              • 示例

            • 哈希算法

              • 建立哈希函数,构造一张以空闲分区大小为关键字的哈希表,该表的每一个表项对应于一个空闲分区链表的头指针
              • 进行分配时,根据空闲区大小,通过计算哈希函数,得到在哈希表中的位置,找到对应的空闲分区链表
              • 优点:查找快速!
      • 分配操作

        • 分配内存

        • 回收内存

      • 优缺点

        • 无内碎片
        • 并发进程数量不限制
        • 存在外碎片,浪费
    • 动态分区分配

    • 动态重定位分区分配

      • 连续分配方式存在的问题

        • 碎片:不能被利用的小分区
        • 解决方案:紧凑,要求代码和数据可以在内存中移动
        • 紧凑:通过移动内存中的作业位置,以把原来多个分散的小分区拼接成一个大分区的方法,也叫“拼接
      • 动态重定位

        • 在指令运行时,实现地址转换(相对地址转换为绝对地址)
      • 分配算法

        • 类似于动态分区分配算法,增加了紧凑的功能

离散分配存储管理方式

  • 分页式存储管理方式

    • 基本概念

      • 物理块(frame)

        • 把物理内存分成大小固定的块
        • 大小为2的幂,通常为1KB~8KB
      • 页(page)

        • 把逻辑内存也分成固定大小的块
      • 运行一个有N页大小的程序,需要找到N个空的页框来装入程序

      • 页内碎片

        • 进程最后一页经常装不满,而形成不可利用的碎片
      • 地址结构

        • 分页地址中的结构(32位)

          • 页号P

            • 12-31位:20位
            • 地址空间最多允许有1M(220)页
          • 位移量W(页内地址)

            • 0-11:12位
            • 每页大小为4KB (212)
        • 对某特定机器,地址结构是一定的

          • 若给定一个逻辑地址空间中的地址为A,页面的大小为L

            • 页号P

            • 页内地址d

            • 例如

              • 系统页面大小为1KB,设A=5168B,则P=5,d=48
      • 页表

        • 作用

          • 实现从页号到块号的地址映射
        • 过程

          • 系统为每个进程建立了一张页表
          • 逻辑地址空间内的所有页,依次在页表中有一表项,记录相应页在内存中对应的物理块号
        • 图示

        • 实现

          • 页表被保存在主存中
          • 页表寄存器(PTR)指向页表的起始地址和长度
          • 在这个机制中,每一次的数据/指令存取需要两次内存访问,一次是访问页表,一次是访问数据/指令
          • 解决二次访存:采用小但专用且快速的硬件缓冲,这种缓冲称为转换表缓冲器(TLB)或联想寄存器
    • 基本的地址变换机构

      • 图示

    • 具有快表的地址变换机构

      • 图示

    • 有效访问时间EAT

      • 基本

        • 假设访问内存一次需要的时间为t,EAT = t + t = 2t (基本分页存储系统中)
      • 引入快表后

        • 查找快表需要的时间为 λ
        • 命中率假设为a
        • EAT = λ * a + (t + λ)(1 – a) + t
      • 例题

    • 页表结构

      • 问题

        • 现代的大多数计算机系统,都支持非常大的逻辑地址空间。在这样的环境下,页表就变得非常大,要占用相当大的内存空间

        • 解决办法

          • 对页表所需要的内存空间,采用离散分配方式
          • 部分页表调入内存
      • 分类

        • 两级页表

          • 以32位逻辑地址空间,页面大小为4KB时(12位)为例

            • 一级页表结构应具有20位的页号,即页表项应有1M个

            • 两级页表结构时,再对页表进行分页,使每页中包含210个页表项,最多允许有210个页表分页

        • 多级页表

          • 以64位的机器为例

        • 反置页表

          • 一个系统一张页表

          • 对每个内存物理块设置一个条目

          • 每个条目保存在真正内存位置的页的虚拟地址,以及包括拥有这个页的进程的信息

          • 示例

  • 分段式存储管理方式

    • 目的

      • 为了满足用户(程序员)在编程和使用上多方面的要求
    • 优点

      • 方便编程
      • 信息共享
      • 信息保护
      • 动态链接
      • 动态增长
    • 基本概念

      • 概念

        • 在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。
        • 段的长度由相应的逻辑信息组的长度决定,因此各段长度不等
      • 段表

        • 类似于分页系统,在系统中为每个进程建立一张段映射表(段表),用于实现从逻辑段到物理内存区的映射。
        • 每个段在表中占有一个表项,记录了该段在内存中的起始地址(基址)和段的长度
        • 段表保存在内存中,由控制寄存器保存其地址
      • 利用段表实现地址映射

      • 地址变换过程

    • 分页 vs 分段

    • 信息共享

      • 分段的一个突出优点
      • 允许若干个进程共享一个或多个分段
      • 比分页式实现共享方便
      • 可重入代码
  • 段页式存储管理方式

    • 分段和分页原理的结合

      • 先将用户程序分成若干段,再把每个段分成若干个页,并为每个段赋予一个段名
    • 优点

      • 既有分段系统的便于实现、可共享、易于保护、可动态链接
      • 又能像分页系统,很好地解决内存
        的外部碎片问题
    • 作业地址空间和地址结构

    • 地址变换过程

第六章 虚拟存储器

虚拟存储器概述

  • 局部性原理

    • 时间局部性

      • 一条指令被执行了,则在不久的将来它可能再被执行
    • 空间局部性

      • 若某一存储单元被使用,则在一定时间内,与该存储单元相邻的单元可能被使用
  • 定义与特性

    • 定义

      • 具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统
    • 特性

      • 多次性
      • 对换性
      • 虚拟性
  • 实现方法

    • 请求分页系统

      • 硬件支持:页表、缺页中断、地址变换机构
      • 软件支持:请求调页软件、页面置换软件
    • 请求分段系统

      • 硬件支持:段表、缺段中断、地址变换机构
      • 软件支持:请求调段软件、段置换软件
    • 段页式虚拟存储器

      • 增加请求调页和页面置换

请求分页式存储管理方式

  • 请求分页存储管理

    • 硬件支持

      • 请求页表机制

        • 状态位P

          • 指示该页是否在内存
        • 访问字段A

          • 记录该页在一段时间内被访问的次数
        • 修改位M

          • 也称脏位,标志该页是否被修改过
        • 外存地址

          • 指示该页在外存中的地址(物理块号)
      • 缺页中断机构

        • 找到页表项后检查页面是否已在内存,若没在内存,产生缺页中断
        • 缺页中断处理中,需要将目标页面调入内存,有必要时还要换出页面
        • 缺页中断属于内中断,属于内中断中的“故障”,即可能被系统修复的异常
        • 一条指令在执行过程中可能产生多次缺页中断
      • 地址变换机构

        • 找到页表项是需要检查页面是否在内存中
        • 若页面不在内存中,需要请求调页
        • 若内存空间不够,还需换出页面
        • 页面调入内存后,需要修改相应页表项
  • 页面置换算法

    • 最佳置换算法(OPT)

      • 被置换的页将是之后最长时间不被使用的页

      • 这是一种理想情况,无法实现的算法,可用来评价其他算法

      • 例子

    • 先进先出置换算法(FIFO)

      • 总是淘汰最先进入内存的页面

      • 例子

      • Belady现象

        • 原因

          • FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的。
        • 当为进程分配物理块数增大时,缺页次数不减反增的异常现象

    • 最近最久未使用置换算法(LRU)

      • 选择最近最久未使用的页面予以淘汰

      • 示例

    • 最少使用算法(LFU)

    • Clock置换算法

      • 简单的Clock算法

        • 每个页都与一个访问位相关联,初始值位0
        • 当页被访问时置访问位为1
        • 置换时选择访问位为0的页 ;若为1,重新置为0
        • 最多扫描两轮
      • 改进的时钟置换算法

        • 淘汰时,同时检查访问位A与修改位M

        • 第1类(A=0,M=0)

          • 表示该页最近既未被访问、又未被修改,是最佳淘汰页。
        • 第2类(A=0,M=1)

          • 表示该页最近未被访问,但已被修改,并不是很好的淘汰页
        • 第3类(A=1,M=0)

          • 表示该页最近已被访问,但未被修改,该页有可能再被访问
        • 第4类(A=1,M=1)

          • 表示该页最近已被访问且被修改,该页有可能再被访问
        • 置换时,循环依次查找第1类,并将访问位置0、第2类页,找到为止

        • 最多扫描四轮

    • 页面缓冲算法

  • 页面分配策略

    • 驻留集

      • 指请求分页存储管理中给进程分配的物理块的集合

      • 一般小于进程的总大小

      • 如果太小

        • 缺页频繁
      • 如果太大

        • 多道程序并发度下降,资源利率降低
      • 固定和可变分配

        • 固定分配

          • 驻留集大小不变
        • 可变分配

          • 驻留集大小可变
      • 局部和全局置换

        • 局部置换

          • 发生缺页时只能选进程中间的物理块进行置换
        • 全局置换

          • 可将操作系统保留的空闲物理块分配给缺页进程,也可将别的进程持有的物理块置换到外村,再分配给缺页进程
    • 页面分配、置换策略

      • 固定分配局部置换

        • 为每个进程分配一固定页数的内存空间,在整个运行期间都不再改变。如果进程在运行中发现缺页,则只能从该进程在内存的固定页面中选出一页换出,然后再调入另一页,保证分配给该进程的内存空间不变
      • 可变分配局部置换

        • 为每个进程分配一定数目的内存空间;但当某进程发生缺页时,只允许从该进程所在内存的页面中选出一页换出,而不影响其它进程的运行。
        • OS不断评估该进程的分配情况,增加或减少分配给它的物理块,以提高整体性能
      • 可变分配全局置换

        • 系统为每个进程分配一定数目的物理块,OS本身也保持一个空闲物理块队列。
        • 当某进程发现缺页时,系统从空闲物理块队列中,取出一物理块分配给该进程,并将欲调入的缺页装入其中。一个发生缺页的进程所拥有的内存物理块数量会逐渐增大。
        • 仅当空闲物理块队列中的物理块用完时,OS才能从内存中选择一页调出,该页可能是系统中任一进程的页。
    • 调入页面的时机

      • 预调页策略

        • 预先调入一些页面到内存
      • 请求调页策略

        • 发现需要访问的页面不在内存时,调入内存
    • 从何处调页

      • 如系统拥有足够的对换区空间,全部从对换区调入所需页面

      • 如系统缺少足够的对换区空间,凡是不会被修改的文件,都直接从文件区调入;当换出这些页面时,由于未被修改而不必再将它们重写磁盘,以后再调入时,仍从文件区直接调入

        • 图示

      • UNIX方式:未运行过的页面,从文件区调入;曾经运行过但又被换出的页面,从对换区调入

        • 图示

  • “抖动”与工作集

    • 抖动(Thrashing)

      • 一个进程的页面经常换入换出

      • 原因

        • 分配给进程的物理块不够
    • 工作集

      • 指在某段时间间隔里进程实际要访问页面的集合
      • 一般驻留集的大小不能小于工作集的大小

请求分段式管理方式

  • 硬件支持

    • 请求段表机制

      • 存取方式

        • 表示段存取属性为只执行、只读或允许读/写
      • 访问字段A

        • 记录该段在一段时间内被访问的次数
      • 修改位M

        • 标志该段调入内存后是否被修改过
      • 存在位P

        • 指示该段是否在内存
      • 增补位

        • 表示该段在运行过程中是否做过动态增长
      • 外存始址

        • 指示该段在外存中的起始地址(盘块号)
    • 缺段中断机构

      • 在指令执行期间产生和处理中断信号
      • 一条指令在执行期间,可能产生多次缺段中断
      • 由于段不是定长的,对缺段中断的处理要比对缺页中断的处理复杂
    • 地址变换机构

      • 若段不在内存中,则必须先将所缺的段调入内存,并修改段表,然后利用段表进行地址变换。
  • 分段的共享

    • 共享段表

      • 保存所有的共享段

      • 图示

      • 共享进程计数count

      • 存取控制字段

      • 段号

    • 共享段的分配

      • 对首次请求使用共享段的用户,分配内存,调入共享段,修改该进程段表相应项,再为共享段表增加一项,count=1
      • 对其他使用共享段的用户,修改该进程段表相应项,再为共享段表增加一项,count=count+1
    • 共享段的回收

      • 撤销在该进程段表中共享段所对应的表项,并执行count=count-1操作
      • 若为0,回收该共享段的内存,并取消共享段表中对应的表项
      • 若不为0,只取消调用者进程在共享段表中的有关记录
  • 分段保护

    • 越界检查
    • 存取控制检查
    • 环保护机构

第七章 输出/输出系统

I/O系统的功能与概念

  • I/O系统的基本功能

    • 能够隐藏物理设备的细节
    • 能够保证OS与设备无关
    • 能够提高处理机和I/O设备的利用率
    • 能够对I/O设备进行控制①轮询 ②中断 ③直接存储器访问DMA ④I/O通道
    • 能够确保对设备的正确共享
    • 能够处理错误
  • I/O系统的功能,模型和接口

    • I/O系统管理的对象是I/O设备和相应的设备控制器。

    • I/O系统的基本功能

      • 隐藏物理设备的细节
      • 与设备的无关性
      • 提高处理机和I/O设备的利用率
      • 对I/O设备进行控制
      • 确保对设备的正确共享
      • 错误处理
    • I/O软件的层次结构

      • 用户层I/O软件
      • 设备独立性软件
      • 设备驱动程序(厂家开发)
      • 中断处理程序
      • 硬件
    • I/O系统的分层

      • 中断处理程序
      • 设备驱动程序
      • 设备独立性软件
    • I/O系统接口

      • 块设备接口

        • 指以数据块为单位来组织和传送数据信息的设备

        • 典型的块设备是磁盘、光盘

        • 块设备的基本特征

          • ①传输速率较高,通常每秒钟为几兆位;
          • ②它是可寻址的,即可随机地读/写任意一块;
          • ③磁盘设备的I/O采用DMA方式。
      • 流设备接口

        • 又称字符设备指以单个字符为单位来传送数据信息的设备

        • 这类设备一般用于数据的输入和输出,有交互式终端、打印机

        • 字符设备的基本特征

          • ①传输速率较低;
          • ②不可寻址,即不能指定输入时的源地址或输出时的目标地址;
          • ③字符设备的I/O常采用中断驱动方式。
      • 网络通信接口

        • 提供网络接入功能,使计算机能通过网络与其他计算机进行通信或上网浏览。

I/O设备和设备控制器


  • 分类

    • 使用特性分

      • 存储设备
      • I/O设备
    • 传输速率分

      • 低速设备(几字节——几百字节)

        • 典型的设备有键盘、鼠标、语音的输入
      • 中速设备(数千——数万字节)

        • 典型的设备有行式打印机、激光打印机
      • 高速设备(数十万——千兆字节)

        • 典型的设备有磁带机、磁盘机、光盘机
  • 设备并不是直接与CPU进行通信,而是与设备控制器通信。在设备与设备控制器之间应该有一个接口。

    • 数据信号:控制器 ← 设备 ← 控制器

      • 传送数据信号,输入、输出bit
    • 控制信号: 控制器 → 设备

      • 执行读、写操作的信号
    • 状态信号:设备当前使用状态

  • 设备控制器

    • 主要功能:控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换

    • 基本功能

      • 接收和识别命令

        • 控制寄存器、命令译码器
      • 数据交换

        • 实现CPU与控制器,控制器与设备间的数据交换
      • 标识和报告设备的状态

      • 地址识别

        • 配置地址译码器,识别不同的设备
      • 数据缓冲区

      • 差错控制

    • 设备控制器的组成

      • 设备控制器与处理机(CPU)的接口

        • 实现CPU与设备控制器之间的通信
      • 设备控制器与设备的接口

        • 控制器可连接多个设备
      • I/O逻辑

        • 实现对设备的控制
        • CPU利用该逻辑向控制器发送I/O命令
        • 命令、地址译码
  • 内存映像I/O

    • 驱动程序将抽象I/O命令转换出的一系列具体的命令,参数等数据装入设备控制器的相应寄存器,由控制器来执行这些命令,具体实施对I/O设备的操作
  • I/O通道

    • 目的:建立独立的I/O操作(组织, 管理和结束),使由CPU处理的I/O工作转由通道完成(解放CPU,实现并行)

    • 什么是I/O通道?

      • 是一种特殊的处理机,具有通过执行通道程序完成I/O操作的指令
      • 特点:指令单一(局限于与I/O操作相关的指令),与CPU共享内存
    • 基本过程:

      • CPU向通道发出I/O指令->通道接收指令->从内存取出通道程序处理I/O->向CPU发出中断
    • 通道类型

      • 字节多路通道

        • 低中速连接子通道时间片轮转方式共享主通道
        • 字节多路通道不适于连接高速设备,这推动了按数组方式进行数据传送的数组选择通道的形成。
      • 数组选择通道

        • 这种通道可以连接多台高速设备,但只含有一个分配型子通道,在一段时间内只能执行一道通道程序, 控制一台设备进行数据传送, 直至该设备传送完毕释放该通道。这种通道的利用率很低。
      • 数组多路通道

        • 含有多个非分配型子通道,前两种通道的组合,通道利用率较好
    • 瓶颈问题

      • 原因;通道不足
      • 解决办法:增加设备到主机间的通路,而不增加通道(结果类似RS触发器)

I/O软件

  • 中断机构和中断处理程序

    • 中断

      • 分类

        • 中断(外部触发)

          • 对外部I/O设备发出的中断信号的响应
        • 陷入(内部原因:除0)

          • 由CPU内部事件引起的中断
      • 中断向量表(类比51单片机)

        • 中断程序的入口地址表
      • 中断优先级

        • 对紧急程度不同的中断处理方式
      • 对多中断源的处理方式

        • 屏蔽中断
        • 嵌套中断
    • 中断处理程序

      • 测定是否有未响应的中断信号
      • 保护被中断进程的CPU环境
      • 转入相应的设备处理程序
      • 中断处理
      • 恢复CPU 的现场并退出中断
  • 设备驱动程序

    • 是I/O进程与设备控制器之间的通信程序,又由于它常以进程的形式存在,故以后就简称为设备驱动进程

    • 主要任务是接受来自它上一层的与设备无关软件的抽象请求,并执行这个请求。

    • 功能

        1. 接收由I/O进程发来的命令和参数, 并将命令中的抽象要求转换为具体要求。例如,将磁盘块号转换为磁盘的盘面、 磁道号及扇区号。
        1. 检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式。
        1. 发出I/O命令,如果设备空闲,便立即启动I/O设备去完成指定的I/O操作;如果设备处于忙碌状态,则将请求者的请求块挂在设备队列上等待。
        1. 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。
        1. 对于设置有通道的计算机系统,驱动程序还应能够根据用户的I/O请求,自动地构成通道程序。
    • 设备驱动程序的处理过程

      • 将用户和上层软件对设备控制的抽象要求转换成对设备的具体要求,如对抽象要求的盘块号转换为磁盘的盘面、磁道及扇区。
      • 检查I/O请求的合理性。
      • 读出和检查设备的状态,确保设备处于就绪态。
      • 传送必要的参数,如传送的字节数,数据在主存的首址等。
      • 工作方式的设置。
      • 启动I/O设备,并检查启动是否成功,如成功则将控制返回给I/O控制系统,在I/O设备忙于传送数据时,该用户进程把自己阻塞,直至中断到来才将它唤醒,而CPU可干别的事。
    • 对I/O设备的控制方式

      • I/O控制的宗旨

        • 减少CPU对I/O控制的干预
        • 充分利用CPU完成数据处理工作
      • I/O 控制方式

        • 轮询的可编程I/O方式
        • 中断驱动I/O方式
        • DMA控制方式
        • I/O通道控制方式
    • DMA控制器组成

      • 主机与DMA控制器的接口
      • DMA控制器与块设备的接口
      • I/O控制逻辑
  • 与设备无关的I/O软件

    • 基本概念

      • 含义: 应用程序独立于具体使用的物理设备。

      • 驱动程序是一个与硬件(或设备)紧密相关的软件。为实现设备独立性,须在驱动程序上设置一层软件,称为设备独立性软件。

      • 设备独立性(Device Independence)的优点

        • 以物理设备名使用设备
        • 引入了逻辑设备名
        • 逻辑设备名称到物理设备名称的转换(易于实现I/O重定向)
    • 与设备无关的软件

      • 设备驱动程序的统一接口
      • 缓存管理
      • 差错控制
      • 对独立设备的分配与回收
      • 独立于设备的逻辑数据块
    • 设备分配中的数据结构

      • 设备控制表DCT
      • 控制器控制表COCT
      • 通道控制表CHCT
      • 显然,在有通道的系统中,一个进程只有获得了通道,控制器和所需设备三者之后,才具备了进行I/O操作的物理条件
      • 系统设备表SDT
      • 逻辑设备表LUT
      • 分配的流程,从资源多的到资源紧张的:LUT->SDT->DCT->COCT->CHCT
      • 在申请设备的过程中,根据用户请求的I/O设备的逻辑名,查找逻辑设备和物理设备的映射表;以物理设备为索引,查找SDT,找到该设备所连接的DCT;继续查找与该设备连接的COCT和CHCT,就找到了一条通路。
  • 用户层的I/O软件

    • 系统调用与库函数

      • OS向用户提供的所有功能,用户进程都必须通过系统调用来获取
      • 在C语言以及UNIX系统中,系统调用(如read)与各系统调用所使用的库函数(如read)之间几乎是一一对应的。而微软的叫Win32API
    • 假脱机系统(spooling)

      • spooling技术是对脱机输入/输出系统的模拟

      • 主要组成

        • 输入/输出井
        • 输入/输出缓冲区
        • 输入/输出进程
        • 井管理程序
      • 特点(体现操作系统的虚拟性)

        • 提高了I/O的速度

          • 对数据所进行的I/O操作,已从对低速设备演变为对输入井或输出井中的数据存取。
        • 将独占设备改造为共享设备

          • 实际分给用户进程的不是打印设备,而是共享输出井中的存储区域
        • 实现了虚拟设备功能

          • 将独占设备变成多台独占的虚拟设备。

中断机构和中断处理程序

  • 中断

    • 分类

      • 中断(外部触发)

        • 对外部I/O设备发出的中断信号的响应
      • 陷入(内部原因:除0)

        • 由CPU内部事件引起的中断
    • 中断向量表(类比51单片机)

      • 中断程序的入口地址表
    • 中断优先级

      • 对紧急程度不同的中断处理方式
    • 对多中断源的处理方式

      • 屏蔽中断
      • 嵌套中断
  • 中断处理程序

    • 测定是否有未响应的中断信号
    • 保护被中断进程的CPU环境
    • 转入相应的设备处理程序
    • 中断处理
    • 恢复CPU 的现场并退出中断

磁盘存储器的性能和调度

  • 数据的组织和格式

  • 磁盘的类型

    • 固定头磁盘(贵)
    • 移动头磁盘
  • 磁盘访问的时间(关键)

    • 寻道时间Ts=m*n+s
    • 旋转延迟时间Tr
    • 传输时间Tt=b/rN
    • 总时间Ta=Ts+1/2r+b/rN
  • 磁盘的调度算法(掌握图表)

    • 先来先服务(FCFS)

      • 优点:公平,简单
      • 缺点:可能导致某些进程的请求长期得不到满足
    • 最短寻道时间优先(SSTF)

      • 说明:要求访问的磁道和当前磁头所在的磁道距离最近,以使每次的寻道时间最短
    • 扫描算法(SCAN)

      • 扫描算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁道当前的移动方向
      • 联想电梯的运行
      • 可防止低优先级进程出现“饥饿”的现象
    • 循环扫描算法(CSCAN)

      • 算法规定磁头单向移动,例如,只是自里向外移动,当磁头移到最外的磁道并访问后,磁头立即返回到最里的欲访问磁道,亦即将最小磁道号紧接着最大磁道号构成循环,进行循环扫描
    • NStepScan算法

      • N步SCAN算法是将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次这些子队列。
    • FSCAN算法

      • 是Nstepscan算法的简化,将磁盘请求队列分成两个子队列

第八章 文件管理

数据项

  • 基本数据项
  • 组合数据项

记录

  • 记录是一组相关数据项的集合,用于描述一个对象在某个方面的属性

文件

  • 文件类型
  • 文件长度
  • 文件的物理位置
  • 文件的建立时间

文件操作

  • 创建文件
  • 删除文件
  • 读文件
  • 写文件
  • 设置文件读写的位置

文件的逻辑结构

  • 顺序文件
  • 记录寻址
  • 索引文件
  • 索引顺序文件
  • 直接文件和哈希文件

文件目录

  • 文件控制块(FCB)

    • 文件名+inode(属性)
  • 简单的文件目录

    • 单级文件目录

      • 查找慢
      • 不允许重名
      • 不便于实现文件共享
    • 两级文件目录

      • 提高检索速度,从M*N到M+N
  • 树形结构目录

    • 路径名

      • “..”是父目录
      • “/”是根目录
      • 区别绝对路径和相对路径(../.../.../1/2/3/)

文件共享

  • 有向无循环图(DAG)

  • 利用符号链接实现文件共享

    • 实际上就是“快捷方式”

文件保护

第九章 磁盘存储器系统

外存的组织方式

  • 连续组织方式

    • 为每个文件分配一组相邻接(连续)的磁盘块

      • 优点

        • 顺序访问容易
        • 顺序访问速度快
        • 支持随机访问
      • 缺点

        • 会产生许多外碎片
        • 不能灵活地删除和插入记录
        • 不能动态增长
  • 链接组织方式

    • 为文件分配不连续的盘块,通过链接指针将一个文件的所有盘块链接在一起

      • 优点

        • 消除了磁盘的外碎片
        • 对插入、删除和修改记录都非常容易
        • 文件可动态增长
      • 分类

        • 隐式链接

          • 指针存放在每个盘块中,只适合于顺序访问

            • 只适合于顺序访问

            • 启动磁盘次数过多

              • 每次都从第一个盘块开始,假设i=100,则需100次磁盘访问
        • 显式链接

          • 指针显式地存放在内存的文件分配表FAT中

            • 提高检索速度
            • 减少启动磁盘次数
  • 索引组织方式

    • 把所有的磁盘块号放在一个索引块(表)中

      • 缺点

        • 需要索引表
        • 对小文件,其索引块的利用率低
      • 优点

        • 支持随机访问
        • 动态存取没有外碎片,但索引块的负担较重

文件存储空间的管理

  • 基本分配单位是盘块

  • 管理方法

    • 空闲区表法

      • 系统为外存上所有空闲区建立一张空闲表,属于连续分配方式

      • 分配与回收

        • 分配类似于内存的分区动态分配,如首次适应算法和最佳适应算法等
        • 回收时,也类似于内存回收方法
    • 空闲链表法

      • 空闲盘块链

        • 以盘块为单位链接起来

        • 优点

          • 分配和回收简单
        • 缺点

          • 效率较低
      • 空闲盘区链

        • 将所有空闲盘区(每个盘区可包含若干个盘块)链接起来

        • 优点

          • 效率较高
        • 缺点

          • 分配和回收比较复杂
    • 位示图法

      • 利用二进制的一位来表示磁盘中一个盘块的使用情况

      • 图示

      • 分配和回收

        • 顺序扫描令map[i,j]=1
        • 将回收盘块的盘块号b转换成位示图中的行号和列号修改位示图,令map[i,j]=0
    • 成组链接法

      • 文件区中的所有空闲盘块,被分成若干个组

      • 将每一组含有的盘块总数N和该组所有的盘块号,记入其前一组的第一个盘块的S.free(0)~S.free(99)中。

      • 将第一组的盘块总数和所有的盘块号,记入空闲盘块号栈中,作为当前可供分配的空闲盘块号

      • 最末一组只有99个盘块

      • 图示

提高磁盘I/O速度的途径

  • 提高文件的访问速度

    • 减少目录查找时间
    • 提高对文件的访问速度
    • 将文件中的数据快速从磁盘传送到内存
  • 磁盘高速缓存

    • 在内存中为磁盘盘块设置一个缓冲区,在该缓冲区中保存了某些盘块的副本
  • 其他方法

    • 提前读
    • 延迟写
    • 优化物理块的分布
    • 虚拟盘

提高磁盘可靠性的技术

  • 容错技术

    • 设置冗余部件

存储新技术

  • 传统存储系统

    • 直连式存储DAS
    • 网络附加存储NAS
    • 存储区域网络SAN
  • 新型存储系统

    • .分布式存储系统
    • 云存储系统
  • 硬盘新技术

    • 机械磁盘(HDD)技术革新
    • 固态硬盘(SSD)

数据一致性控制

  • 指保存在多个文件中的同一个数据,在任何情况下都必须能保证相同。
posted @ 2024-07-05 13:30  xde_yt  阅读(34)  评论(0编辑  收藏  举报