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

news2024/11/16 21:53:42

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


 

梗概

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

目录

一、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操作次数

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6-如何创建正态分布数组?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 6-如何创建正态分布数组&#xff1f;

buffer_head数据结构

内核版本&#xff1a;5.9.0 数据结构 /** Historically, a buffer_head was used to map a single block* within a page, and of course as the unit of I/O through the* filesystem and block layers. Nowadays the basic I/O unit* is the bio, and buffer_heads are us…

互联网编程之多线程/线程池TCP服务器端程序设计

目录 需求 多线程TCP服务器 线程池TCP服务器 测试 日志模块 需求 多线程TCP服务器&#xff08;30分&#xff09;&#xff1a; 设计编写一个TCP服务器端程序&#xff0c;需使用多线程处理客户端的连接请求。客户端与服务器端之间的通信内容&#xff0c;以及服务器端的处理…

C语言进阶---自定类型详解(结构体+枚举+联合)

结构体 1、结构体类型的声明 1.1、结构的基础知识 结构是一些值得集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2、结构体类型的声明 struct tag {member-list; }variable-list;//写法一&#xff1a; struct Stu {char name[20];int age;…

【数据结构与算法】约瑟夫环(C/C++)

实践要求 1. 问题描述 约瑟夫问题的一种描述是&#xff1a;编号为1,2,…,n的n个人按顺时针方向围坐一圈&#xff0c;每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m&#xff0c;从第一个人开始。按顺时针方向自1开始顺序报数&#xff0c;报到m时停止报数。报…

docker镜像fauria/vsftpd dockerfile解析(ENV命令,**占位符**)dockerfile命令、dockerfile指令

文章目录 fauria/vsftpddockerfile原始文件dockerfile解析 fauria/vsftpd fauria/vsftpd是一个由Docker Hub用户"fauria"创建的Docker镜像。这个镜像是基于CentOS 7构建的&#xff0c;包含了vsftpd&#xff08;Very Secure FTP Daemon&#xff09;服务&#xff0c;并…

NASA网站曝严重漏洞,或将沦为黑客钓鱼网站?

美国国家航空航天局&#xff08;NASA&#xff09;天体生物学专用网站存在一个严重的安全漏洞&#xff0c;可能通过伪装带有NASA名称的危险URL来诱骗用户访问恶意网站。 太空旅行无疑是危险的。然而&#xff0c;在访问NASA网站的时候也有可能如此。Cybernews研究团队发现了一个N…

Scala之泛型详解

泛型用于指定类或方法可以接受任意类型参数&#xff0c;参数在实际使用时才被确定&#xff0c;泛型可以有效地增强程序的适用性&#xff0c;使用泛型可以使得类或方法具有更强的通用性。泛型的典型应用场景是集合及集合中的方法参数&#xff0c;可以说同 Java 一样&#xff0c;…

基于粒子群算法的无约束优化问题求解

基于粒子群算法的无约束优化问题求解 1 引言2 粒子群算法2.1 粒子群优化原理2.2 粒子群算法寻优策略与参数控制粒子群算法流程 3 粒子群算法求解无约束优化问题3.1 粒子群算法求解Sphere函数&#xff08;单峰测试函数&#xff09;3.2 Schwefels Problem 2.26&#xff08;多峰测…

chatgpt赋能python:Win7怎么安装Python?

Win7怎么安装Python&#xff1f; 如果你正在使用Windows 7操作系统&#xff0c;想要安装Python&#xff0c;那么你来对了地方。Python是一种利用广泛的编程语言&#xff0c;可用于开发Web应用程序、数据分析和科学计算、机器学习等各种领域。 在此篇文章中&#xff0c;我们会…

MATLAB matlab人脸识别源码+使用说明+操作说明内容清晰适合新手

程序运行界面&#xff1a; 部分代码&#xff1a; function varargout facerecg(varargin) % FACERECG MATLAB code for facerecg.fig % FACERECG, by itself, creates a new FACERECG or raises the existing % singleton*. % % H FACERECG returns the hand…

Revit中如何导入、导出明细表?

Revit中明细表的作用非常大&#xff0c;项目中的数据归类整理及统计都离不开它&#xff0c;今天给大家分享一下如何在Revit中进行明细表标准的导出及导入&#xff0c;减少在实际项目中的重复性工作。 1、首先在Revit中新建一个项目文件&#xff0c;在平面视图中随便画几条管道…

用git下载gitee上的项目资源

目录 用git下载gitee上的项目资源 用git 的clone 命令 然后到gitee上复制相关的下载地址&#xff1a; 粘贴到clone后面即可&#xff08;注意地址与clone之间有空格&#xff01;&#xff01;&#xff01;&#xff09; 运行结果&#xff1a; 用git下载gitee上的项目资源 用git…

学习vue2笔记

学习vue2笔记 文章目录 学习vue2笔记脚手架文件结构关于不同版本的Vuevue.config.js配置文件ref属性props配置项mixin(混入)插件scoped样式总结TodoList案例webStorage组件的自定义事件全局事件总线&#xff08;GlobalEventBus&#xff09;消息订阅与发布&#xff08;pubsub&am…

LeetCoda 打卡day53--动态规划之最长子序列

一个人的朝圣 — LeetCode打卡第52天 知识总结 Leetcode 1143. 最长公共子序列题目说明代码说明 Leetcode 53. 最大子数组和题目说明代码说明 Leetcode 1035. 不相交的线题目说明代码说明 知识总结 今天几道最长子序列的题目, 都可以用一个固定的模版完成. 理解其中递推公式的…

字典序最小回文串

字典序最小回文串 题目解读 给你一个由 小写英文字母 组成的字符串 s &#xff0c;你可以对其执行一些操作。在一步操作中&#xff0c;你可以用其他小写英文字母 替换 s 中的一个字符。 请你执行 尽可能少的操作 &#xff0c;使 s 变成一个 回文串 。如果执行 最少 操作次数…

DAY38——动态规划

步骤&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 题目一. 斐波那契数列 1. 确定dp数组以及下标的含义 dp[i]的定义为&#xff1a;第i个数的斐波那契数值是dp[i] 2. 确定递推公式 状态…

FFmpegFrameGrabber视频抽帧工具类

Bytedeco 通过视频链接进行关键帧抽取图片&#xff0c;利用FFmpegFrameGrabber对视频流进行抽帧处理。 一、引入POM依赖 <dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.4.1</version><…

TCP 拥塞状态机演进

下面是 TCP 拥塞状态机&#xff1a; 但它只是冰山一角&#xff0c;这只是 loss-based 状态机&#xff0c;实现一个完全的 delay-based cc 就对不上这个状态机。 该状态机来自 RFC5681&#xff0c;源自 RFC2581&#xff0c;RFC2001&#xff0c;大概在 1990 年代&#xff0c;l…

10分钟内创意爆发,这些头脑风暴技巧让你IDEA满满

当初道叔刚入广告行业&#xff0c;与同事经历了一次困扰的头脑风暴&#xff0c;老板让他们想出一个大集团公司年会的主题口号。我们7-8个团队成员耗费了一个下午的时间&#xff0c;提出了几十个提议&#xff0c;但最终硬是没有一个能满足需求。许多人可能也有过道叔这样的经历。…