操作系统5——输入输出系统

本系列博客重点在深圳大学操作系统课程的核心内容梳理,参考书目《计算机操作系统》(有问题欢迎在评论区讨论指出,或直接私信联系我)。


梗概

本篇博客主要介绍操作系统第六章输入输出系统的相关知识。

目录

一、I/O(输入输出)系统

1.概述

2.I/O设备和设备控制器

3.I/O通道

4.I/O控制方式

二、缓冲管理

三、设备分配

四、用户层的I/O软件——假脱机(Spooling)系统

五、磁盘存储器管理

1.概述

1.1 结构与数据

1.2 磁盘访问时间

2.磁盘调度算法

2.1 先来先服务(FCFS)

2.2 最短寻道时间优先(SSTF)

2.3 扫描调度算法(SCAN)

2.4 循环扫描调度算法(CSCAN)

2.5 磁盘调度算法例题

3.补充知识


一、I/O(输入输出)系统

输入输出系统(Input/output)系统管理的主要对象为I/O设备与相应的设备控制器,最主要功能是完成用户提出的I/O请求,提高I/O速率,以及提高设备利用率

1.概述

I/O软件涉及的面很宽,向下与硬件有密切关系,向上又与文件系统、虚拟存储器系统和用户直接交互,当今主流方案为层次式结构的I/O系统,利用下层服务完成输入输出功能的子功能并向上层提供服务

其中,I/O系统的各模块层次视图如下:

2.I/O设备和设备控制器

I/O设备一般是由执行I/O操作的机械部分和执行控制I/O的电子部件组成。前者为I/O设备,后者为设备控制器或适配器(adapter)。在微型机和小型机中的控制器常做成印刷电路卡形式,因而也常称为控制卡、接口卡或网卡,可将它插入计算机的扩展槽中。在有的大、中型计算机系统中,还配置了I/O通道或I/O处理机。

I/O设备的分类很多,如:

  • 按使用特性分类:①存储设备(外存:容量大,速度慢) ②I/O设备(输入输出/交互设备,键盘鼠标扫描仪/显示器)
  • 按传输速率分类:①低速设备 ②中速设备 ③高速设备 

通常,设备并不直接与CPU通信,而是通过设备控制器。

设备控制器的主要功能是:控制一个或多个I/O设备,易实现I/O设备和计算机(CPU)之间的数据交换。设备控制器的组成如下:

3.I/O通道

虽然在CPU与I/O设备之间增加了设备控制器后,已能大大减少CPU对I/O的干预,但当主机所配置的外设很多时,CPU的负担仍然很重。为此,在CPU和设备控制器之间又增设了I/O通道(I/O Channel)。其主要目的是为了建立独立的I/O操作。

I/O通道是一种特殊处理机,具有执行I/O指令的能力,通过执行通道(I/O)程序控制I/O操作

1、指令类型单一,主要限于与I/O操作有关的指令

2、没有自己的内存,通道程序放在主机内存中

所以I/O通道会出现“瓶颈”问题,通道价格昂贵导致数量少,限制了I/O操作,降低了系统吞吐量。如下图中,为启动设备4,需要启动通道1和控制器2,若已被其他设备占用,会出现无法启动。 

主要解决方案为多通路I/O系统,样例如下:

不仅解决了“瓶颈”问题,也提高了系统的可靠性。

4.I/O控制方式

对于I/O设备的控制方式,发展历程主要是轮询程序到中断到DMA控制器到通道。 发展的核心宗旨是减少主机对I/O控制的干预,以便其完成更多数据处理任务

  • 轮询的可编程I/O方式:输入输出时将busy状态位置1,并不断循环测试是否完成,造成CPU的极大浪费。
  • 使用中断的可编程I/O方式:CPU与I/O设备并行工作,每一次输入完数据CPU再花少量时间去中断。
  • 直接存储器访问方式:中断的I/O方式是以字(节)为单位干预的,对于块设备效率极低。故引入DMA控制器,组成如下:

  • I/O通道控制方式:把对一个数据块的读写干预减少到对一组数据块的读写干预。  

对于I/O通道控制方式核心实现为通过通道程序完成对I/O设备的控制,通道程序一般包含以下信息:

(1)操作:读、写(2)P:通道结束位:P=1表示本条指令是通道程序的最后一条指令(3)R:记录结束位:R=1表示这是处理某记录的最后一条指令(4)计数:表示本条指令要读写的字节数(5)内存地址:标明字符送入内存的首址

以上样例包含三个记录,1-3指令为一个记录,4为一个,5-6为一个(看R)。

二、缓冲管理

现代操作系统中,几乎所有I/O设备再与CPU交换数据时都使用了缓冲区,本质上是一个存储区域,一般由硬件寄存器或内存(更常见)组成。 

缓冲的引入主要原因如下:

  • 缓和CPU与I/O设备间速度不匹配的矛盾:生产者无需等待消费者就绪,即可将数据输出到缓冲区
  • 减少对CPU的中断频率, 放宽对CPU中断响应时间的限制,下例中,对于(a)每100us就要中断且响应一次,(b)可将中断频率降为1/8,(c)可将响应时间降为1/8

  • 提高CPU和I/O设备之间的并行性

1、单缓冲区: 

一I/O请求一缓冲区

运行周期:Max(C, T) + M

2、双缓冲区: 

消费者若未取走缓冲区数据,生产者生产出新数据也无法放入,故引入双缓冲区。

运行周期:Max(C+M, T)

C+M<T:主机速度快,主机等待,磁盘连续输入

三、设备分配

系统为实现对独占设备的分配,必须配置对应的数据结构——设备控制表(DCT)

控制器控制表、通道控制表和系统设备表对比如下:

单通道系统的设备分配流程如下:

四、用户层的I/O软件——假脱机(Spooling)系统

在用户层的I/O软件中,需要完全运行于内核之外的假脱机系统。通过假脱机系统(技术),可以将一台物理I/O设备虚拟为多台逻辑I/O设备,运行多用户共享。 

SPOOLing技术的核心是由系统中的两个专门负责I/O的进程,模拟I/O外围机的功能,实现(假)脱机输入/输出。

其系统组成如下:

1、输入与输出井:

在磁盘上开辟的两个大的存储空间:

  • 输入井是模拟脱机输入时的磁盘,用于收容I/O设备输入的数据
  • 输出井是模拟脱机输出时的磁盘,用于收容用户进程的输出数据 

2、输入缓冲区和输出缓冲区: 

为了缓和CPU和磁盘之间速度不匹配的矛盾,在内存中开辟的两个缓冲区: 

  • 输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井
  • 输出缓冲区用于暂存由输出井送来的数据,以后再传送到输出设备

3、输入进程SPi和输出进程SPo: 

  • 输入进程SPi模拟脱机输入时的外围控制机,将用户要求输入的数据从输入设备,通过输入缓冲区再送到输入井
  • 输出进程SPo模拟脱机输出时的外围控制机,将用户要求输出的数据从输出井,通过输出缓冲区送到输出设备

系统特点如下:

  • 提高I/O速度
  • 将独占设备改造为共享设备
  • 实现了虚拟设备功能 

五、磁盘存储器管理

磁盘存储器是计算机系统中最重要的存储设备,其中存放了大量文件,对文件的读写都涉及对磁盘的访问。

1.概述

1.1 结构与数据

磁盘结构如下:

1、磁盘的组成:

  • 磁盘由多个盘片组成
  • 每个盘片分两个盘面
  • 每个盘面分若干个磁道(同心圆)
  • 每个磁道分若干个扇区

2:磁盘的寻址:磁头——柱面——扇区

  • 磁头Head:第几个盘片的正面或背面
  • 柱面Cylinder:第几个磁道
  • 扇区Sector:磁道上的分区号 

扇区(Sector)数据结构如下,主要包括(1)标识符字段(ID Field),(2)数据字段(Data Field)

而对于磁盘的类型,有如下两种:

  • 固定头磁盘,每条磁道都有一读/写磁头,所有的磁头装在一刚性磁臂中。磁头并行读/写,I/O速度快,用于大容量磁盘
  • 移动头磁盘,每个盘面仅配有一个磁头,磁头能移动进行寻道。I/O速度较慢,结构简单,广泛应用于中小型磁盘设备 

1.2 磁盘访问时间

为了读或写,磁头必须移动到指定的磁道上,并等待指定的扇区旋转到磁头下,然后再读或写数据,故磁盘访问时间可分为三部分:

1、寻道时间Ts:磁头移动到指定磁道上的时间

启动磁臂时间s与磁头移动n条磁道花费的时间之和             

Ts=m×n+s

Tips:m是常数,与磁盘驱动器的速度有关,一般磁盘m=0.2;高速磁盘,m≤0.1 磁臂的启动时间s约为2 ms。 一般寻道时间5~30 ms

2、旋转延迟时间Tτ :扇区移动到磁头下面的时间

5400转硬盘,即5400 r/min,每转需时11.1 ms,平均旋转延迟时间Tτ为5.55 ms

3、传输时间Tt:数据从磁盘读出或向磁盘写入数据

与每次所读/写的字节数b和旋转速度有关,r为磁盘每秒钟的转数;N为一条磁道上的字节 

若知道扇区数,Tt = 1/(r*扇区数) 

4、访问总时间Ta:

当一次读/写的字节数相当于半条磁道上的字节数时,总时间:

Tips:传输时间占比低 

 例题

若磁盘转速为7200 转分,平均寻道时间为 8ms,每个磁__牛客网 (nowcoder.com)

操作系统--磁盘调度题目_若磁盘转速为6000转,每个磁道包含1000个扇区_real_metrix的博客-CSDN博客

2.磁盘调度算法

1、提高磁盘I/O速度的方法:

提升磁盘硬件性能 采用好的调度算法 设置磁盘高速缓冲区

2、磁盘调度:

磁盘属于共享设备,允许多个进程访问,因此需要磁盘调度算法

磁盘调度算法目标是平均寻道时间少

2.1 先来先服务(FCFS)

核心:根据进程请求访问磁盘的先后次序调度

  • 优点:简单,每个请求都能依次得到处理
  • 缺点:平均寻道距离较大

2.2 最短寻道时间优先(SSTF)

核心:依据访问磁道与当前磁道最近原则(实际上是基于优先级的调度)

Tips:当前磁道为100 

  • 优点:平均寻道时间较短
  • 缺点:会导致某些进程发生“饥饿”现象,磁头有可能长期停留在同一磁道上(磁臂粘着)

2.3 扫描调度算法(SCAN)

核心:依据磁头移动方向及访问磁道与当前磁道距离最短两个原则

磁头移动方向为…,向外,然后向内,再向外,…一直循环往复 例如:当前磁头停在80号磁道上服务,并且刚刚完成了89号磁道的请求,说明磁头移动方向向内

Tips:当前磁道为100,且方向向外 

  • 优点:不会出现进程“饥饿”现象,平均访问寻道时间较短
  • 缺点:与磁头近但在磁头运动反方向的磁道等待时间长,磁头有可能长期停留在同一磁道上(磁臂粘着) 

2.4 循环扫描调度算法(CSCAN)

核心:到达最外磁道后,返回最小磁道开始SCAN算法

Tips:当前磁道为100,且方向向外  

  • 优点:不会出现进程“饥饿”现象,平均访问寻道时间较短,最长等待时间较SCAN短(一半)
  • 缺点:磁头有可能长期停留在同一磁道上(磁臂粘着)

2.5 磁盘调度算法例题

有一磁盘管理系统,磁道按内往外方向升序编号,假设当前等待访问磁盘的请求序列为:15、10、30、 150、 190、 80、 95、 40、 140、 20。当前磁头停在90号磁道服务,之前刚完成93号磁道的访问。请分别采用FCFS、SSTF、SCAN、CSCAN算法,求出各种算法的调度序列以及平均寻道距离

操作系统--分别用FCFS,SSTF,SCAN,CSCAN算法计算总寻道长度和平均寻道长度例题(详细)_代码爱小菜鸡的博客-CSDN博客

OS 磁盘调度算法 之 FCFS、SSTF、SCAN、CSCAN_scan算法例题讲解_MoMing丶的博客-CSDN博客

3.补充知识

1、磁盘高速缓存(Disk Cache):

利用内存中的存储空间,来暂存从磁盘中读出的一系列盘块中的信息。

高速缓存是一组在逻辑上属于磁盘, 而物理上是驻留在内存中的盘块。

2、高速缓存在内存中的两种形式:

内存中开辟单独的存储空间作为磁盘高速缓存,其大小是固定的,不受应用程序多少的影响

把所有未利用的内存空间变为一个缓冲池,供请求分页系统和磁盘高速缓存共享

3、提高磁盘速度的其它方法:

提前读:根据局部性原理,将邻近的磁盘块提前读入内存,例如预调页策略

延迟写:修改过的页面不立刻写回磁盘,积累一定数量一次性写回,减少I/O操作次数

优化物理块分布:同一文件的物理快尽量集中

虚拟盘:利用内存空间或其他存储介质仿真磁盘,例如内存式硬盘和固态硬盘

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SPOOLING技术 一、实验目的 理解和掌握SPOOLING技术。 二、实验内容 编写程序实现SPOOLING技术的模拟。 三、实验要求 1、设计一个实现SPOOLING技术的进程 设计一个SPOOLING输出进程和两个请求输出的用户进程及一个SPOOLING输出服务程序。 SPOOLING输出进程工作时,根据请求块记录的各进程要输出的信息,将其实际输出到打印机或显示器。这里,SPOOLING进程与请求输出的用户进程可并发运行。 2、设计进程调度算法 进程调度采用随机算法,这与进程输出信息的随机性相一致。两个请求输出的用户进程的调度概率各为45%,SPOOLING输出进程为10%,这由随机数发生器产生的随机数模拟决定。 3、进程状态 进程基本状态有3种,分别为可执行、等待和结束。可执行状态就是进程正在运行或等待调度的状态;等待状态又分为等待状态1、等待状态2、等待状态3。 状态变化的条件为: (1)进程执行完成时,置为“结束”状态。 (2)服务程序在将输出信息送至输出井时,如发现输出井已满,将调用进程置为“等待状态1”。 (3)SPOOLING进程在进行输出时,若输出井空,则进入“等待状态2”。 (4)SPOOLING进程输出一个信息块后,应立即释放该信息块所占的输出井空间,并将正在等待输出的进程置为“可执行状态”。 (5)服务程序在输出信息到输出井并形成输出请求信息块后,若SPOOLING进程处于等待状态则将其置为“可执行状态”。 (6)当用户进程申请请求输出块时,若没有可用请求块时,调用进程进入“等待状态3”。 4、数据结构 1)进程控制块PCB struct pcb { int status; int length; }pcb[3]; 其中status表示进程状态,其取值: 0 表示可执行状态; 1 表示等待状态1; 2 表示等待状态2; 3 表示等待状态3 2)请求输出块reqblock struct{ int reqname;//请求进程名 int length;// 本次输出信息长度 int addr;// 信息在输出井的首地址 }reqblock[10]; 3)输出井BUFFER SPOOLING系统为每个请求输出的进程在输出井中分别开辟一个区。本实验可设计一个二维数组(int buffer[2][10])作为输出井。每个进程在输出井最多可占用10个位置。 5、编程说明 为两个请求输出的用户进程设计两个输出井。每个可存放10个信息,即buffer[2][10]。当用户进程将其所有文件输出完时,终止运行。 为简单起见,用户进程简单的设计成:每运行一次,随机输出数字0~9之间的一个数,当输入10个数时形成一个请求信息块,填入请求输出信息块reqblock结构中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@李忆如

感谢!!! 有什么问题欢迎交流

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值