计算机操作系统(慕课版)第七章学习笔记

第七章 输入/输出系统

7.1 I/O系统的功能、模型和接口

I/O系统管理的主要对象

I/O设备和相应的设备控制器。

其最主要的任务

完成用户提出的I/O请求

提高I/O速率

提高设备的利用率

为更高层的进程方便地使用这些设备提供手段

7.1.1 I/O系统的基本功能

1、能够隐藏物理设备的细节

2、能够保证OS与设备无关

3、能够提高处理机和I/O设备的利用率

4、能够对I/O设备进行控制

5、能够确保对设备的正确共享

6、能够处理错误

7.1.2 I/O系统的层次结构和模型

I/O软件的层次结构

I/O系统中各种模块之间的层次视图

7.1.3 I/O系统接口

在I/O系统与高层之间的接口中,根据设备类型的不同,又进一步分为若干个接口。

1 块设备接口

  • 块设备:也叫存储设备。信息交换的基本单位为字符块,属于有结构设备,块大小一般为512B---4KB,典型的有:磁盘、-光盘等。通常采用DMA I/O方式
  • 隐藏了磁盘的二维结构。
  • 将抽象命令映射为低层操作。
    (如收到读磁盘命令时,先将抽象命令中的逻辑块号转换为磁盘的盘面、磁道和扇区等)

2 流设备接口

该接口又称为字符设备接口,它反映了大部分字符设备的本质特征,用于控制字符设备的输入或输出。

  • 字符设备:信息交换的基本单位为字符,典型的有:键盘、打印机和显示器等。通常采用中断驱动I/O方式。
  • get和put操作。字符设备采用顺序存取方式
    • get操作用于从字符缓冲区取得一个字符(到内存),并将它返回给调用者。
    • put操作用于将一个新字符(从内存)输出到字符缓冲区网络。
  • in-control指令。包含许多参数,每个参数均表示一个与具体设备相关的特定功能。

3 网络通信接口

OS提供相应的网络软件和网络通信接口,以使计算机能通过网络同网络上的其他计算机进行通信,或上网浏览信息。

7.2 I/O设备和设备控制器

1 I/O设备一般是由执行I/O操作的机械部分和执行控制I/O的电子部件组成,电子部分称为设备控制器或适配器,机械部分是设备本身。

2 设备与控制器之间的接口

通常,设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在I/O设备中应含有与设备控制器之间的接口。有三种类型的信号线:

1)数据信号线。这类信号线用于在设备和设备控制器之间传送数据信号。

2)控制信号线。这是作为由设备控制器向I/O设备发送控制信号时的通路。该信号规定了设备将要执行的操作,如读操作或写操作,或执行磁头移动等操作。

3)状态信号线。用于传送指示设备当前状态的信号。设备的当前状态有正在读(或写),设备已读/写完成,并准备好新的数据传送。

1.设备控制器的功能:

  • 控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换
  • 设备控制器是CPU和I/O设备之间的接口。接收从CPU发来的命令,并去控制I/O设备工作
  • 设备控制器是一个可编址的设备
    • 当仅控制一个设备时,它只有一个惟一的设备地址
    • 若控制器可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备
      2 设备控制器的组成
  • 设备控制器与处理机的接口
  • 设备控制器与设备接口
  • I/O逻辑
  • 硬件支持:控制寄存器(存放命令及参数)、数据寄存器(存放数据)、状态寄存器(记录设备状态)

CPU与控制器接口:实现CPU与设备控制器之间的通信,包括数据线、地址线和控制线

设备控制器与设备的接口:一个设备控制器可以连接一个或多个设备

I/O逻辑:实现对设备的控制。

7.2.3 内存映像I/O

驱动程序将抽象I/O命令转换成具体的命令和参数等装入设备控制器的相应寄存器,由控制器执行这些命令,具体实施对I/O设备的控制。具体方法:

1.利用特定的I/O指令

  • 访问内存和设备需要两种不同的指令
    2.采用内存映像I/O
  • 在编址上不在区分内存单元地址和设备控制器中的寄存器地址,统一编址 k 。 k在0~n-1范围时,为内存地址;若k>=n时,为某控制器的寄存器地址
  • 统一了访问方法,简化了I/O编程

    7.2.4 I/O 通道
    引入通道的目的:
    使一些原来由CPU处理的I/O任务转由通道来承担,从而把CPU从繁杂的I/O任务中解脱出来

用于I/O操作的命令主要有两种:

I/O指令:启动通道程序

通道命令:对I/O操作进行控制

7.2.5 I/O设备的控制方式

1.使用轮询的可编程I/O方式(基本不用)

  • ①由CPU定时发出询问,询问设备是否忙,进程进入忙等
  • ②不忙即进行I/O,否则转①
    实现容易,但效率偏低,CPU会长期处于忙等待
    2.使用中断的可编程I/O方式(广泛采用)
  • 当某进程要启动某个I/O设备工作时,便由CPU向相应的设备控制器发出一条I/O命令,然后立即返回继续执行原来的任务。设备控制器于是按照该命令的要求去控制指定的I/O设备。此时,CPU与I/O设备并行操作。

设备管理的主要任务之一就是控制设备和内存或CPU之间的数据传送。

选择和衡量控制方式有如下3条原则:

  • 数据传送速度足够高,能满足用户需要但又不丢失数据;
  • 系统开销小,所需处理控制程序少;
  • 能充分发回硬件资源的能力,使I/O设备尽量忙,而CPU等待时间少

DMA工作过程

1 CPU提供被读取块磁盘地址,并将目标存储地址和待读取字节数分别存放在MAR与DC中。

2 校验无误,进程入阻塞态。

3 控制器按照MAR中地址,把第一个字节送入主存,然后计数器值(DC)减1 ,按指定字节数进行数据传送其他字节,直到字节计数器等于0。

4 控制器引发中断,通知操作系统,操作完成。

7.3.2 中断处理程序

7.5 与设备无关的I/O软件

基本概念:为了提高OS的可适应性和可扩展性,在现代OS中都无一例外地增加了与设备无关的I/O软件,以实现了设备独立性,也称设备无关性。

7.5.5 I/O调度

调度一组I/O请求:按照确定好的顺序来执行I/O操作;提高计算机效率。

通过I/O调度可以

  • 改善系统整体性能;
  • 在进程间公平共享设备访问;
  • 减少完成I/O调度所需的平均等待时间。

7.6.2 假脱机系统

  • 1 为了缓和CPU的高速性与I/O设备的低速性间矛盾而引入
    • 利用一个程序模拟脱机输入时的外围控制机功能,将低速的I/O设备上的数据传送到高速的磁盘上。
    • 用另一道程序模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备
  • 外围操作与CPU对数据的处理同时进行,这种在联机情况下实现的同时外围操作称为SPOOLing
    • 是操作系统中采用的一项将独占设备改造成为共享设备的技术。

SPOOLING系统的组成

  • 输出井和输入井:在磁盘上开辟的两个大的存储空间,

    • 输入井:模拟脱机输入时的磁盘设备,用于暂存输入设备输入的数据
    • 输出井:模拟脱机输出时的磁盘,用于暂存用户程序的输出数据
  • 输入缓冲区和输出缓冲区:为了缓和CPU和磁盘之间速度不匹配的矛盾,在内存中开辟了两个缓冲区。

    • 输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井;
    • 输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。
  • 输入进程Spi

    • Spi模拟脱机输入时的外围控制机,将用户要求的数据从输入设备通过输入缓冲区再送入输入井,当CPU需要输入数据时,直接从输入井读入内存
  • 输出进程Spo

    • Spo模拟脱机输出时的外围控制机,把用户要求输出的数据,先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上
  • 井管理程序

    • 用于控制作业与磁盘井之间信息的交换

3 SPOOLING系统的特点

  • 提高了I/O的速度

    -对数据进行的I/O操作,已从对低速I/O设备进行的I/O操作,演变为对输入井或输出井中数据的存取

  • 将独占设备改造成共享设备

    • 实际上并没有为任何进程分配设备,只是在输入井或输出井中为进程分配一个存储区和建立一张I/O请求表
  • 实现了虚拟设备功能

    • 宏观上,多个进程同时使用一台独占设备;对每个进程来说,认为是自己独占了一个设备
  • 假脱机管理进程

    • 在磁盘缓冲区中为之申请一个空闲盘块,并将要打印的数据送入其中暂存
    • 为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入表中,再将该表挂到假脱机文件队列上
  • 假脱机打印进程

    • 当打印机空闲时,进程从请求打印队列的队首取出一张请求打印表,根据表中的要求将要打印的数据,从输出井传送到内存缓冲区,再由打印机进行打印
    • 打印完,进程再次察看请求打印队列,若非空,重复上述工作,直到队列为空。此后进程才将自己阻塞起来。仅当下次再有打印请求时,进程才被唤醒

7.7 缓冲管理

缓冲的引入

通道的建立提供了CPU、通道和I/O设备之间并行操作的可能性,但由于通道数量不足会产生"瓶颈"现象,影响并行的程度,引入缓冲可以减少占用通道的时间,缓解"瓶颈"现象。

引入缓冲的主要原因

  • 缓冲CPU与I/O设备间速度不匹配的矛盾。
  • 减少中断CPU的次数
  • 解决数据粒度不匹配的问题。
  • 提高CPU与I/O设备的并行性

缓冲:就是用来对数据传送速度不同的设备的传送速度进行匹配/缓冲的一种常用手段。

其实现方法除在关键地方可采用硬件缓冲器外,大都采用软件缓冲来实现。

单缓冲:

在设备和处理机之间设置一个缓冲。设备与处理机交换数据时,先把交换的数据写入缓冲区,然后需要数据的设备/处理机再从缓冲区中取走数据。

特点:缓冲区数只有一个;设备与处理机对缓冲区的操作是串行的。是操作系统能提供的最简单的缓冲技术。
双缓冲:

在设备和处理机之间设置2个缓冲。设备与处理机交换数据时,先把交换的数据写入缓冲区,然后需要数据的设备/处理机再从缓冲区中取走数据。因缓冲区有2个,提高了设备与处理机并行操作的程度,只有当两个均为空时,需数据的进程才等待。
循环缓冲

(1) 多个缓冲区

作为输入的多缓冲区可分为三种类型:

用于装输入数据的空缓冲区R,

已装满数据的缓冲区G

计算进程正在使用的现行工作缓冲区C

(2)多个指针

nextg(指示程序下一次可用的已经装满的数据缓冲区G)

nexti(指示输入设备下一次可使用的空缓冲区R)

current(用来指示程序正在使用的现行缓冲区)
缓冲池

1、缓冲池:将系统内所有的缓冲区统一管理起来,就形成了能用于输入/输出的缓冲池。缓冲池通常由若干大小相同的缓冲区组成,是系统的公用资源,任何进程都可以申请使用缓冲池 中的各个缓冲区。

缓存(cache)

  • 缓存是保存数据副本的高速内存区域:
    • CPU缓存、磁盘缓存、光驱缓存等。
  • CPU缓存(高速缓存):
    • 为了缓和CPU运行速率与内存读/写速率不匹配的矛盾
    • 当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;若没有找到,则从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据库调入缓存中。
  • 缓存和缓冲:
    • 缓冲可以保存数据项的唯一的现有版本。
    • 缓存只是提供一个位于其他地方的数据项的更快存储副本
    • 有时,同一个内存区,既可以是缓冲,也可以是缓存。

7.8 磁盘存储器的性能和调度

磁盘性能简述

磁盘设备可包括一个或多个物理盘片,每个磁盘片分一个或两个存储面(Surface);

磁盘容量计算

容量=柱面×磁头×扇区,每扇区存放512B数据

40GB硬盘

cylinder:19710;head:16;sector:255

计算:19710×255×16×512B=41173401600B=40GB

1.44MB软盘

Sides:2

Tracks:80

Sectors:18

计算:2×80×18×512B=1.44MB

磁盘访问时间

  • 磁盘在工作时是以恒定速率旋转。
  • 为了读或写,
    • 磁头必须能移动到所指定的磁道上
    • 并等待所指定的扇区的开始位置旋转到磁头下
    • 再开始读或写数据。
  • 一次访盘时间 = 寻道时间+旋转延迟时间+存取时间
    • 寻道时间:把磁头移动到指定磁道上所经历的时间。
    • 旋转延迟时间:指定扇区移动到磁头下面所经历的时间。
    • 存取时间:把数据从磁盘读出或向磁盘写入数据所经历的时间。

先来先服务FCFS、最短寻道时间优先SSTF、 SCAN算法、循环扫描算法CSCAN这些算法结合题目容易理解。

先写课后题。

相关推荐
Mephisto.java4 分钟前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
Yawesh_best18 分钟前
思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!
笔记·语言模型·ai写作
南宫生32 分钟前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
武子康2 小时前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
CXDNW2 小时前
【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
网络·笔记·http·面试·https·http2.0
使者大牙2 小时前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型
ssf-yasuo2 小时前
SPIRE: Semantic Prompt-Driven Image Restoration 论文阅读笔记
论文阅读·笔记·prompt
As977_2 小时前
前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)
前端·css·学习
ajsbxi2 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
Rattenking2 小时前
React 源码学习01 ---- React.Children.map 的实现与应用
javascript·学习·react.js