完整知识点回顾,建议以思维导图形式进行回忆问答

一、概述

操作系统的概念

  • 管理计算机软件和硬件资源
  • 最基本的系统软件

特征

  • 并发

    • 区分并发(同一时间间隔)、并行(同时)
  • 共享
    • 互斥共享方式(临界资源)
    • 同时访问方式
  • 虚拟
    • 逻辑上变多变大。如:虚拟处理器的分时;空分复用的虚拟存储器

      • 采用多道程序设计
  • 异步
    • 由于资源有限,进程走走停停

      • 可能会导致进程产生与时间有关的错误。访问顺序

目的和功能

  • 1.管理计算机资源

    • 功能

      • 处理机管理、存储器管理、文件管理、设备管理
    • 目标:安全、有效
  • 2.作为用户与计算机硬件系统之家的接口

    • 命令接口

      用户操作作业执行

      • 联机命令接口

        • 用于分时或实时系统
      • 脱机命令接口
        • 用于批处理系统
    • 程序接口(系统调用)间接使用

      • 由系统调用组成,提供给用户(包括程序员)的接口
      • 用户可以使用系统调用请求操作系统服务
        • 例如GUI
  • 3.用作扩充机器(虚拟机)

操作系统的分类和发展

  • 1.手工操作阶段
  • 2.批处理阶段
    • 单道批处理系统
    • 多道批处理系统(操作系统开始出现)
      • 宏观上并行,微观上串行(多道程序同时装入内存,交替执行)

        • 无人机交互,无需人工干预
      • 多道批处理又分为抢占和非抢占,注意计算题中的计算,通过画图即可做出
    • 批处理系统的缺点是 缺乏交互性
  • 3.分时操作系统
    • 时间片轮转的方式(多个用户通过终端共享一台主机)
    • 支持多道程序设计,(解决了人机交互),但不能在极短时间内作出处理
  • 4.实时操作系统
    • 分类

      • 硬实时系统

        • 必须在某规定时间内执行

          • 飞机飞行系统
      • 软实时系统
        • 偶尔违反

          • 订票,银行管理
    • 可以优先反应一些紧急的任务
      • 及时性,可靠性
    • 抢占式优先级调度
  • 5.网络操纵系统
    • 6、分布式操作系统(peer同等地位、资源共享、协同工作)

      • 7、嵌入式操作系统

运行机制

  • 两种程序

    • 内核程序(时钟、中断、原语、系统数据结构)
    • 用户程序
  • 两种命令

    • 特权命令

      • 不允许用户直接使用的指令
    • 非特权命令
      • 访管指令
  • 两种处理器状态

    • 核心态(管态,内核态)
    • 用户态(目态)
  • 中断

    • 内中断(异常/陷入/例外)

      • CPU执行指令内部时发生错误比如非法操作,地址越界,算术溢出,缺页等等,一旦出现不能屏蔽,应该立即处理
    • 外中断(中断
      • 又叫强迫中断,比如IO外设请求,或者人的干预,这一类通常是与当前运行的程序无关的事件
  • 处理中断

    • 程序计数器PC保存断点
    • PC寻址,进入中断服务程序
    • 保存现场(指程序状态字寄存器PSWR和某些通用寄存器)
    • 执行中断服务程序
    • 恢复现场、返回断点处继续执行
  • 系统调用(广义指令)

    • 是操作系统为应用程序使用内核功能所提供的接口,只能通过用户程序间接使用
    • 用户在程序中调用操作系统提供的子功能
      • 设备文件的管理
      • 进程的控制与通信
      • 内存管理
  • 体系结构

    • 大内核(功能都整体运行在和心态)
    • 微内核(只保留基本功能在内核,其余在用户态,分离了用户与服务,但频繁切换性能消耗大)
  • 总结

    • 用户态核心态首先区分题目问的是执行还是调用

二、进程管理

进程

资源分配的基本单位

  • 组成(进程实体)

    • 程序段
    • 数据段
    • PCB(进程存在的唯一标志)
      • 包括标识符、状态信息、资源清单
      • 链接方式(PCB链接成队列)、索引方式(索引表项指向相应PCB)
  • 状态及转换
    • 运行态,就绪态(等待被调度),阻塞态(等外设),创建态,结束态,主要掌握前三个相互转换的条件
    • 就绪队列最多有 n-1个进程,阻塞队列最多有n个进程(死锁)
  • 进程控制
    • 进程创建

      • 用户登录
      • 作业调度
      • 提供服务
      • 应用请求
    • 进程终止
      • 正常结束
      • 异常结束:越界错误,非法指令,等待超时等等
      • 外界干预
    • 阻塞及唤醒
      • 请求共享资源失败
      • 等待操作完成:比如IO操作
      • 等待新任务到达
      • 新数据未到达
    • 进程切换
      • 掌握转换的原语
  • 通信
    • 共享存储
    • 消息传递
    • 管道通信
      • 固定大小的缓冲区,对管道两端进程而言就是一个文件
      • 半双工信道,同一时刻只能一个方向传输
      • 满时写被阻塞,空时读被阻塞(互斥访问)

线程

  • 线程是最基本的调度单位,但是最基本拥有资源的基本单位还是进程

    • 处理机的管理是对进程的管理
  • 进程可以创建多个进程,线程可以创建多个线程(线程之间共享父进程的资源)
  • 分类
    • 用户级线程
    • 内核级线程
  • 多线程模型
    • 多对一(用户空间进行线程管理,高效; 内核一阻塞用户线程都阻塞)
    • 一对一(并发能力强,开销也大)
    • 多对多(并发和开销的折中)

处理机调度

  • 不能进行进程调度和切换的时机:

    • 处理中断时
    • 进程处于临界区
    • 完全屏蔽中断的原子操作过程中(加锁解锁)
  • 三种调度

    • 作业调度(适用于多道批处理系统)
    • 内存调度(暂时不运行的进程调至外存)
    • 进程调度
  • 调度相关概念

    • CPU利用率
    • 周转时间(从提交到完成所经历时间)
    • 等待时间(处于就绪队列中的等待总时间)
    • 响应时间(提交请求到首次响应)
    • 平均周转时间
      • n个作业的周转时间相加最后除以n
    • 带权周转时间 (作业周转时间 / 运行时间)
  • 调度算法

    • 先来先服务 FCFS

      • 效率不高,对长作业更有利,不利于IO繁忙型
    • 短作业优先 SJF
      • 平均等待时间、平均周转时间最少
    • 优先级调度(适合实时OS)
      • 可分抢占式/非抢占
      • 一般优先级顺序:系统》用户,IO型》计算型
    • 高响应比优先 (等待时间+服务时间 / 服务时间
      • 同等待时间,短作业优先,SJF
      • 同服务时间,等待时间更长先被调度,FCFS
      • 克服了饥饿状态
    • 时间片轮转(适合分时)
      • 大小选择要恰当,很长就退化成FCFS
    • 多级反馈队列
      • 多个就绪队列,每个队列不同优先级,不同时间片大小
      • 第一个队列没运行完,降级进下面队列
      • 先执行完第一个队列再是第二个队列

进程同步

  • 临界资源:注意可重用的程序代码属于临界资源

    • 进入区(检查能否进入,并设置标志)
    • 临界区
      • 可重入代码:不能修改的代码,因此可以共享
    • 退出区(清除标志)
    • 代码剩余部分
  • 同步(先后次序)与互斥

    • 有限等待 只等待有限时间
    • 让权等待——进不去临界区立即释放处理器,不忙等不空转
  • 实现临界区互斥的基本方法

    • 软件实现

      • 单标志法(turn 0变1; 缺点: 必须交替执行)
      • 双标志先检查法 (i,j 改变 True False; 缺点:可能同时进临界区)
      • 双标志后检查法 (先改变TF再检查循环;缺点:可能都空转进不去)
      • 皮特森算法(有i,j有turn;能同步不会饥饿)
    • 硬件实现
      • 开关中断
      • 原子硬件指令(利用共享布尔变量lock,初始为False进入时被设为True)
        • TestAndSet指令
        • Swap指令
  • 信号量机制

    • wait(S) signal(S) 即 P V操作

      • 整形信号量: value++ –
      • 记录型信号量: 信号量S有value和等待队列 L
      • 执行P操作后,value < 0时,进程挂起,该进程进阻塞队列;
      • 下次V操作,Value++,若value仍 <= 0 , 把阻塞队列第一个等待进程唤醒
    • 实现同步
      • S初始为0,进程1 x——V操作,进程2 P操作——y;则语句x必在语句y前
    • 实现互斥
      • S初始1; P(S)——临界区——V(S)
    • 实现前驱关系
      • 设置多个S初始为0,先的进程尾巴V(S), 后的进程头部P(S)
  • 管程

    代表共享资源的数据结构,及对其操作的一组函数

    • 操作封装成函数,无需程序员自己实现互斥

      • 条件变量 (信号量有值,condition没有值,仅实现排队等待)
      • 每次只允许一个进程进入管程
      • 管程的 wait() \ signal() 同样会进行阻塞、插入队列的操作
  • 经典同步问题

    • 生产者消费者——橘子苹果盘问题(注意连续执行关系)

      • mutex互斥夹紧
      • 用什么P一下
      • 提供什么V一下
    • 读者写者
      • 计数信号量count,用mutex保证互斥更新
      • ‘读优先’ 的
      • ‘写优先’ 的(增加一对P(w) ,V(w) )
    • 哲学家进餐问题
      • semphore chopstick[5] = {1,1,1,1,1}
      • 防止死锁的限制:
        • 5只筷子,最多允许4个人同时进餐
        • 仅当两边筷子都空闲时才抓起筷子(给两个连续的P用mutex夹紧)
    • 吸烟者问题
      • finish互斥进行抽烟动作; offer1 offer2 offer3代表三种组合

死锁

  • 产生的必要条件(同时满足四个)

    • 互斥 + 非抢占 + 请求并保持(有资源又请求资源) + 循环等待(A持有的被B申请)
  • 不死锁最少设备数:
    • n1-1 + n2-1 +……+ 1
  • 处理策略
    • 死锁预防

      • 破坏4个必要条件其中之一(一次申请所有资源/按编号顺序申请资源)
    • 银行家算法(死锁避免)
      • 安全状态(不安全状态可能死锁)
      • 银行家算法
        • 已知条件: MAX矩阵、Allocation矩阵

          1. 求Need矩阵
          2. 比较request[i] <= Need[i]
          3. 比较request[i] <= Available[i]
          4. 试探性分配,更新 Allocation、Need矩阵,Available向量
          5. 安全性算法,安全才正式分配,否则打回请求
      • 安全性算法
        • 工作向量Work,初始Work = Available

          1. 依次从Need矩阵找<=Work的行Pi
          2. Pi加入安全序列,释放其资源,Work += Allocation[i](注意是加Allocate[i], 不要加need!)
          3. 直至所有进程进入安全序列,否则是不安全状态
    • 死锁检测及解除
      • 资源分配图

        • 简化边(资源能满足结点P1的请求,则消去结点P1的请求边分配边)
      • 死锁定理(S为死锁 等价于 S的资源分配图不可完全简化)
      • 死锁解除
        • 抢占资源、撤销进程、回退进程

三、内存管理

逻辑地址空间分为很多页,物理地址空间分为块(页框)

程序执行

  • 编译
  • 链接(逻辑地址形成阶段,目标模块和库函数连一起形成完整装入模块)
    • 程序的指令里使用的是逻辑地址,而最后被装入到物理地址,需要转换
    • 也分三个时机:装入前、装入时、运行时
  • 装入(把程序放入内存)
    • 绝对装入 (编译时就把指令中地址改为绝对地址,只适用于单道程序)
    • 可重定位装入 (装入时进行地址转换,对指令和数据中的地址进行修改)
      • 又叫静态重定位,一旦装入必须分配其所需全部内存空间
    • 动态重定位
      • 不是装入时立即转换,而是推迟到程序要开始执行时
      • 需要一个重定位寄存器(存起始位置)
  • 内存保护(一对寄存器)
    • 逻辑地址 < 界地址寄存器, +重定位寄存器 映射成物理地址

内存早期扩充技术

  • 覆盖
  • 交换:对交换的管理以提高换入换出速度为目标

内存连续分配

用户进程在内存中都是连续存放的

  • 单一连续(单任务)
  • 固定分区分配(提前固定大小分区,有内部碎片)
  • 动态分区分配(换入换出,无内部碎片,产生外部小碎片)
    • 可通过‘紧凑’整理外部碎片
    • 动态分区分配策略
      • 首次适应(按地址递增第一个能满足) 性能最好
      • 最佳适应/最坏适应(分别找最小能满足/最大能满足)

非连续分配

进程的空间可分散分布在内存不同区域,需要额外索引

分页/分段 根据分区大小是否固定:

  • 分页存储管理

    以页/块为单位申请空间,不会产生外部碎片,有很小内部碎片

    • 区分页表大小,页表项大小,页号和页框号(块号)

    • 地址变换流程

      有个页表寄存器,存放(页表始地址,页表长度)

      逻辑地址:页号|页内偏移

      段表项:<页号,块号>

      1. 由逻辑地址、页面大小得 页号(P=A/L) 页内偏移(W=A%L)
      2. 比较页号和页表长度(有无越界,产生中断)
      3. 对应页表项地址 = 页号P*页表项长度 + 页表始地址
      4. 该页表项内容即为物理块号b
      5. 物理地址 E = 块号b*页面大小L + 页内偏移W
    • 多级页表?

      • 隐藏条件:顶级页表最多只能有一个页面 !
      • 目的:建立索引,不浪费主存空间去存储所有页表项
      • 地址格式: <一级页号,二级页号,页偏移>
      • (需要多次访存)
    • 快表(TLB)?

      • 无快表,需要两次访存,一次读页表一次取指令
      • 给出页号,在快表中查找,找到则只需一次访存取指令
      • 未找到,就去主存中页表,并将该页表项存入快表
  • 分段存储

    按照用户进程中的自然段划分空间,不会产生内部碎片

    段内连续 段间不连续,每段长度不一定相同

    • 逻辑地址:段号|段偏移 (必须都由用户显示提供,二维)

    • 段表项: <段号,段长度,本段起始地址>

    • 地址变换

      段表寄存器,存放段表始地址,段表长度

      1. 逻辑地址得段号、段偏移(比较段表长,有无越界)
      2. 对应段表项地址 = 段号*段表项长度 + 段表始地址
      3. 该段表项前几位是段长,比较 段内偏移 < 段长
      4. 物理地址 E = 本段起始地址 + 段内偏移
  • 段页式存储管理

    进程地址空间先分为段,再分为逻辑页(内存分为若干对应块)

    • 一个段表,每段一个页表
    • 逻辑地址: 段号|页号|页内偏移
    • 段表项<段号,页表长度,页表始址> 页表项<页号,内存块号>
    • 地址变换:
    1. 段号以及段表寄存器找到段号对应的页表的起始地址,
    2. 再根据地址位中的页号*页表长度加上始址得到页表项对应的地址,
    3. 根据页表项,找到对应的物理块号
    4. 得到物理地址 E = 块号+页内偏移 (三次访问内存)

虚拟内存

通过使用外存上的空间进行换入换出来虚拟地扩大内存空间

  • 特点

    • 多次:进程无需一次性装入内存,而是分多次部分调入
    • 对换:无需运行时一直在内存中,允许换进和换出
    • 虚拟性:用户看到的容量远大于实际内存容量
  • 实现
    • 请求分页

      • 缺页中断:要访问的页面不在内存中时,将缺页进程阻塞

        • 把所缺页调入内存
        • 内存有空闲块,分配一个块给该页,修改相应页表项
        • 内存无空闲块,淘汰某页(被修改过的页要写回外存)
      • 页表项: <页号,块号,状态位,访问位,修改位,外存地址>
      • 地址变换:
        • 找到了要访问的页,则修改其访问位、修改位
        • 状态位表示是否在内存中
    • 请求分段
    • 请求段页式

页面置换算法

选择该从内存中调出哪一页(初始化后前几次都是缺页的)

  • 最佳置换算法 OPT

    • 调换出之后最长时间内不再被访问的页面
  • 先进先出置换算法 FIFO
    • 换出最早进入内存的页面
    • 会出现BELADY异常(分配的物理块数增大,页故障数反而也增大)
  • 最近最久未使用 LRU算法
    • 换出最近最长时间内未访问过的页面
    • (需要寄存器和栈的硬件支持)
  • 时钟Clock算法(最近未用算法)
    • 简单CLOCK

      • 每帧有一个 使用位,被装入或被访问时都置为1
      • 循环扫描
        • 遇到使用位为0的,则替换
        • 使用位为1的,则此次把它置成0
    • 改进的CLOCK
      • 增加 修改位
      • 首先换出 未被访问的页面,再选择 未被修改的页面
      • 优点:替换时首选没有变化的页

页面分配策略

  • 固定分配局部置换(提前为进程分配固定数目的物理块,换出只能用本进程物理块
  • 可变分配全局置换(维持一个空闲物理块队列,换页时从该队列分配物理块
  • 可变分配局部置换(用本进程物理块换出,但队列会调控不同进程物理块数目
  • 调页时机:
    • 预调页、请求调页(运行时调入)
  • 从何处:
    • 外存中有 文件区、对换区(更快,放的是被换出的页面)

工作集

​ 驻留集:给一个进程分配的物理页框的集合

​ 工作集就是在某段时间间隔(窗口:最近K次)内进程访问过的页面集合

​ 为防止抖动,分配的驻留集要大于工作集大小

抖动

​ 又叫颠簸,指一个进程频繁地换入换出,调换的时间大于执行的时间

四、文件管理

逻辑:盘块/ “簇” 物理:磁盘扇区

逻辑结构

文件内部的逻辑结构,是由用户看到的用户定义的

  • 无结构文件(流式文件)

    源程序文件、目标代码文件通常是无结构文件,以字节为单位

  • 有结构文件(记录式文件)

    • 顺序文件

      • 文件中的记录顺序排列
    • 索引文件

      区分索引文件(逻辑结构)与索引分配(存储结构)

      • 索引文件:用户建立索引,方便检索记录, <关键字-》记录的逻辑地址>
      • 索引分配: 操作系统建立索引表,映射: <逻辑块号-》物理块号>
    • 索引顺序文件

      • 顺序文件分为若干组,先通过索引找到其所在组,在组内顺序查找

目录结构

多个文件在逻辑上是如何组织的

  • 文件控制块FCB

    存放文件描述信息,如文件名、物理位置、文件大小、权限等

  • 索引节点inode

    文件描述信息单独形成 索引结点inode,每个文件都有一个索引结点

    包括文件标识符、类型、权限,以及物理地址项(直接或间接)

    ​ 文件被打开后,索引结点会被加载到内存中

  • 目录的两种方式:

    • 方式一:一个FCB就是一个文件目录项
    • 方式二(索引结点):目录项仅由 <文件名,i结点指针> 组成。
  • 目录的几种结构

    • 单级:整个文件系统只有一张目录表,不允许重名
    • 二级:分为主目录和用户目录两级
    • 多级(树形)目录:用路径名标识文件,/作为分隔符(但级数越多磁盘访问次数多)
    • 无环图目录结构:树形基础上增加了指向同一结点(共享节点)的边,
      • 实现文件共享(多个进程共享同一文件,系统中只需一个副本)

        • 硬链接:多个指针指向同一个 i 结点,只要还有一个指针指向该i结点,它就不能被删除,只是用户删除自己的一个目录项

          • 软链接(符号链接):把到达共享文件的路径记录为一个文件保存在用户的目录下,只有文件拥有者才有指向索引节点的指针

目录实现: 线性表/哈希表

​ 目录查询要不断io,因此把当前使用的文件目录复制到内存

文件分配

文件分配即文件物理结构(存储结构),注意与内部逻辑结构区分

  • 连续分配

    要求每个文件在磁盘上占有一组连续的块

    • 支持顺序访问和随机访问
    • 只适用于长度固定的文件
  • 链接分配

    文件即对应磁盘块链表,访问磁盘n次

    • 隐式链接分配

      • 目录指向首块,每个盘块都有指针指向下一磁盘块
    • 显式链接分配:

      • 整个系统使用一张文件分配表FAT,FAT表在内存中
      • FAT表项:<盘块号,下一盘块号> -1代表文件结尾,-2为空闲盘块
    • 只能顺序访问,不支持随机访问,易扩展

  • 索引分配

    每个文件有一个索引块,存着索引表,表项为 <第i条,指向文件第i盘块的指针>

    • 支持随机访问和顺序访问,但索引表增加了存储开销
    • 一个索引块通常大小为一个磁盘块(通常先读入内存以减少一次IO)
    • 混合索引
      • 既采用直接地址,又采用单级索引、多级索引
    • 若m级索引,访问磁盘m+1次
      • 若修改记录,则需要‘写回’磁盘,还需多一次访问磁盘

存储空间管理

实质:对空闲块的组织、分配、回收

  • 空闲表法(为所有空闲盘块建立一张表,连续分配)

  • 空闲链表法(把所有空闲盘块/盘区用指针连接为一张链表)

  • 位示图

    • 用二进制的一位 表示一个盘块的使用,‘1’已占用,‘0’空闲
    • 注意转换行号列号(区分从‘0’还是**‘1’编号**) i=(b-1)/n +1 ; j = (b-1) mod n +1
  • 成组链表法(空闲扇区之间用链表,扇区内部建空闲表)

磁盘调度算法

磁道(同心圆)、扇区(即盘块,弧形块),各扇区数据量相同

  • 先来先服务
  • 最短寻找时间优先
    • 优先服务最近的请求,会产生“饥饿”
  • 扫描SCAN算法
    • 指定方向上最近的,一个方向一直到头才变更方向
    • LOOK调度:到达最远端的请求即可返回,不必到头
  • 循环扫描C—SCAN
    • 只有一个方向提供服务,回时方向快速移动不服务
    • 默认SCAN都为LOOK调度

时间计算

Ts + Tr + Tt (注意时间单位min、s、ms)

  • 寻道时间 Ts = 跨磁道数n*常数 + 启动磁臂时间
  • 旋转延迟时间:(找到数据所在扇区)
    • Tr = 1/2r (r为磁盘旋转速度)
  • 传输时间: Tt = 字节数b / rN (N为一个磁道上字节数)

磁盘管理

  • 磁盘初始化:

    • 低级格式化(物理分区)
    • 逻辑格式化(创建文件系统)
  • 引导块(开机过程)

    • 通电,读入位于ROM内的BIOS程序
    • 硬件自检
    • 执行引导块上的boot引导程序,找到磁盘上的操作系统,把它装入内存
    • 开始运行操作系统
  • 坏块:

    处理就是标明记录坏块,让系统不去使用;

    坏块是硬件故障,无法被OS修复

五、I/O管理

I/O设备

  • 1外设、2存储设备(磁盘磁带)、3网络通信设备(网络接口)

  • 分类:

    • 块设备(所有存储的设备,因为存储信息都以数据块为单位)
    • 字符设备(用于数据输入输出的设备,基本传输单位是字符)

I/O控制器

就是I/O设备的电子部件,用来控制设备

组成:

​ 与CPU的接口、与设备的接口、自身I/O逻辑

功能与需要部件:

  • 接收识别CPU命令: 控制寄存器(存命令和参数)
  • 向CPU报告设备状态: 状态寄存器
  • 数据交换: 数据寄存器
  • 地址识别: 给上述寄存器编址,通过CPU送来的地址来识别控制哪个寄存器
    • 内存映像I/O:寄存器地址与内存统一编址
    • 寄存器独立编址:寄存器使用独立地址

IO控制方式

控制设备和内存或cpu之间的数据传送

  • 程序直接控制(关键:‘’轮询“)

    • CPU发出命令后读取I/O模块的状态,一直没准备好就会一直轮询检查
    • 数据传送单位: 每次读写一个字
    • 数据流向: 内存——CPU——I/O设备
    • 缺点: CPU和I/O串行工作,CPU长期忙等待,利用率极低
  • 中断驱动方式

    CPU与IO控制器可并行,数据传送单位依旧是一个字,

    1. CPU发出读写命令后,就把等待I/O的进程阻塞,切换到别的进程
    2. 当I/O完成时控制器会向CPU发中断信号
    3. 在每个指令周期末尾检查中断,有则开始处理中断
      • CPU保存当前进程运行环境信息,转去执行中断服务程序,从IO控制器读写
    4. CPU恢复等待I/O进程的运行环境,继续执行
  • DMA(直接存储器存取)方式

    • 数据的传送单位是”块“
    • 仅在传送数据块开始和结束时,才需要CPU,
    • 数据流向是内存——IO设备
    • DMA控制器
      • DMA也是以字为单位读入读出的,读完一块或连续的多块后,才给CPU发送中断信号
      • 有命令、地址、数据寄存器,来实现设备到主机的直接数据交换
    • 缺点:读多块必须要求连续的多块,离散会多次呼叫CPU
  • 通道控制方式

    • ”通道“是一种硬件,人称小CPU
    • CPU给通道发指令和通道程序在内存的位置,就做其他事
    • ‘通道’执行该通道程序(一堆事情),执行完后给CPU发中断

层次结构

中间三层叫”I/O核心子系统“

  • 用户层软件(库函数)
  • 设备独立性软件(不涉及硬件,对各种设备的公共管理工作
    • 向用户层提供统一接口(如read/write系统调用)
    • 执行对设备的共有操作如分配回收、设备保护、逻辑物理设备名映射
  • 设备驱动程序涉及硬件细节的所有操作,驱动IO设备工作)
  • 中断处理程序
    • 设备准备好,设备完成了I/O 都会发中断
  • 硬件(有机械部件、电子部件)

设备的分配回收

  • 安全性

    • 安全分配方式(分配I/O设备后就把进程阻塞)
    • 不安全分配(分配IO后进程继续执行)
  • 分配方式

  • 静态分配(运行前分配全部资源)、动态分配(运行过程中动态申请资源)

  • 数据结构:

    • 设备控制表DCT
    • 控制器控制表COCT
    • 通道控制表CHCT(以上三个代表三种资源,都有等待队列)
    • 系统设备表SDT(整个系统所有设备情况)

    一个通道控制多个控制器,一个控制器控制多个设备“(树形关系)

  • 逻辑、物理设备名映射:

    • 一张逻辑设备表 LUT,表项 <逻辑地址,物理地址,驱动程序入口>
    • 进程第一次用逻辑设备名请求分配设备时,在LUT中新增一个表项
    • 之后再利用逻辑设备名请求I/O操作时,直接查找LUT表

缓冲区管理

目的:CPU很快,把数据放到内存缓冲区里,就可以去做别的事

​ I/O设备慢,自己从缓冲区慢慢取数据就行,不用打扰CPU

特点:

只有空了才能输入数据,只有满了才能输出数据

缓冲区管理策略:

  • 单缓冲(1个缓冲区)

    • 两个相互通信的机器用单缓冲区,只能半双工(同一时刻单向)
  • 双缓冲(2个缓冲区)
    • 两个机器双缓冲,可以全双工
  • 循环缓冲(多个大小相等缓冲区连接为一个队列,in指向第一个空的,out指向第一个满的缓冲区)
  • 缓冲池
    • 有三个队列(空的、输入队列、输出队列)
    • 有四种缓冲区(收容/提走输入和输出)

重点:

每处理一块数据需要花费多长时间?

​ 各部件传输需花费时间: 设备—T—缓冲区—M—工作区—C—处理

  • 单缓冲区 MAX(T,C) + M

    • 初始状态工作区满,缓冲区空
  • 双缓冲区 MAX( T, C+M)

    • ​ 初始状态,工作区满,两个缓冲区一满一空

    记忆: MAX (设备进,CPU处理) + 内存传 括号单缓冲区包一个双包两个

    ​ 注意读一个和读多个不一样,要加剩余处理时间 ,区分来算!

假脱机SPOOLing

可以把一台物理设备虚拟为多台逻辑设备,

把独占式设备改造为共享设备

  • 脱机技术:使用”外围控制机“,脱离主机控制来进行输入和输出
  • 组成:
    • 输入井、输出井(磁盘上的存储区域)
    • 输入输出缓冲区
    • 输入输出进程
  • 应用:共享打印机
    • 每个进程提出请求后,都为其在磁盘的输出井分配一个存储区(逻辑上独占)
    • 每个进程的打印信息表放入任务队列,依次输出

PS:点击右上角关注看更多408初试复试知识点

【408考研笔记】操作系统完整知识点相关推荐

  1. 【王道考研】操作系统 笔记 第一章

    特此鸣谢王道考研 本文参考王道考研的相关课程 若有侵权请联系,立删 其余笔记链接: [王道考研]操作系统笔记 第一章_才疏学浅743的博客-CSDN博客 [王道考研]操作系统 笔记 第二章上 进程调度 ...

  2. 【王道考研】操作系统 笔记 第二章上 进程调度

    本文内容,1.进程和线程 2.进程调度 特此鸣谢王道考研 本文参考王道考研的相关课程 若有侵权请联系,立删 其余笔记链接: [王道考研]操作系统笔记 第一章_才疏学浅743的博客-CSDN博客 [王道 ...

  3. (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节5:假脱机(SPOOLing)技术

    文章目录 一:脱机技术 二:假脱机技术(SPOOLing技术) (1)输入井和输出井 (2)输入缓冲区和输出缓冲区 (3)输入进程和输出进程 三:SPOOLing技术实例--共享打印机 一:脱机技术 ...

  4. (王道408考研操作系统)第四章文件管理-第一节7:文件共享

    文章目录 一:基于索引结点的共享方式(硬链接) (1)介绍 (2)Linux演示 二:基于符号链的共享方式(软链接) (1)介绍 (2)Linux演示 所谓文件共享就是指 使多个用户(进程)共享同一个 ...

  5. (王道408考研操作系统)第三章内存管理-第二节3:页面置换算法2

    上接: (王道408考研操作系统)第三章内存管理-第二节2:页面置换算法1 文章目录 一:时钟置换算法(CLOCK) (1)简单时钟置换算法 (2)改进型时钟置换算法 二:页面置换算法总结 一:时钟置 ...

  6. (王道408考研操作系统)第三章内存管理-第二节1:虚拟内存管理基本概念

    文章目录 一:传统存储管理方式的弊端 二:局部性原理与高速缓冲技术Cache (1)Cache基本原理 (2)局部性原理 三:虚拟内存的定义和特征 (1)定义 (2)特征 四:虚拟内存实现 内存管理需 ...

  7. (王道408考研操作系统)第二章进程管理-第三节10:经典同步问题之哲学家进餐问题

    本文接: (王道408考研操作系统)第二章进程管理-第三节6:经典同步问题之生产者与消费者问题 ((王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题 (王道408 ...

  8. (王道408考研操作系统)第二章进程管理-第三节8:经典同步问题之吸烟者问题

    本文接: (王道408考研操作系统)第二章进程管理-第三节6:经典同步问题之生产者与消费者问题 ((王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题 文章目录 一 ...

  9. (王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题

    注意:生产者与消费者问题Linux系统编程专栏有案例讲解 Linux系统编程39:多线程之基于阻塞队列生产者与消费者模型 Linux系统编程40:多线程之基于环形队列的生产者与消费者模型 本文接:(王 ...

  10. 计算机408知识点大全,2022计算机408考研知识点:输入输出系统

    2022计算机408考研知识点:输入输出系统 如果你准备考计算机专业研究生,小编敬佩你的勇气,作为专业难度很高的计算机专业来说,一定要全力备考.本文新东方在线计算机考研小编整理分享"2022 ...

最新文章

  1. 《研发企业管理——思想、方法、流程和工具》——1.11 论成本
  2. 使用 acme.sh 获取网站证书并配置https访问
  3. bzoj 1827: [Usaco2010 Mar]gather 奶牛大集会【树形dp】
  4. 链表是否带环、环入口、环长度、链表相交问题分析与总结
  5. Mysql事务处理问题
  6. LwIP 之六 详解动态内存管理 内存池(memp.c/h)
  7. CGRectInset CGRectoffset UIEdgeInsetsInsetRect 这三个函数的使用情况
  8. 【LCT】网络(luogu 2173/ZJOI2011)
  9. docker访问宿主机mysql_docker容器内访问宿主机127.0.0.1服务
  10. ajax传回的数据做表格,Datatables ajax返回的数据顺序与表格中的数据顺序不一致...
  11. 【java学习之路】数据库连接JDBC
  12. 力扣-455 分发饼干
  13. WLAN配置实例(二)——三层组网隧道转发
  14. linux挂载windows上的共享文件夹
  15. 41. 后台模块开发(6)
  16. sql 日期函数往前推当前时间指定天数
  17. QQ音乐、网易云音乐、虾米音乐们的音乐社区暗战
  18. 面试题:为什么说 Mybatis 是半自动ORM 映射工具?它与全自动的区别在哪里?
  19. 题目 2322: 大鱼吃小鱼
  20. LaTex如何自动生成参考文献

热门文章

  1. 构建java ut运行环境
  2. 维纳滤波 c语言,C版:自适应维纳滤波方法的语音增强(C2-1)
  3. 杂志社的电子邮件地址
  4. C语言中的指针与下标,C语言下标和指针的关系
  5. 搜索了才发现,原来这首歌的原唱是她们,SHE歌曲专辑下载,beyond歌曲专辑下载
  6. moodle基本配置
  7. 积分公式和常用方法总结
  8. 华中科技大学计算机作业试题,华中科技大学2009大学计算机基础考试试题A
  9. 计算机操作系统试题及答案带解析,计算机操作系统期末考试试题及答案新
  10. TM2008 Preview体验