操作系统精髓与设计原理(九)——I/O管理和磁盘调度
文章目录
I/O设备
外部设备可分为三类:
- 人可读
 - 机器可读
 - 通信
 
I/O功能组织
执行IO的三种技术:
- 可编程IO:处理器代表一个进程给IO模块发送一个命令;该进程计入忙等待,知道操作完成再继续执行。
 - 中断驱动IO:处理器给模块发送一个命令。有两种可能:如果来自进程的的指令是非阻塞的,那么处理器继续执行后续指令,如果是阻塞的,处理器执行下一条指令来自操作系统,将当前线程设置为阻塞,并调度其他进程。
 - 直接存储器访问:一个DMA模块控制内存和IO模块之间的数据交互。
 
直接存储器访问
DMA单元能够模拟处理器,直接获得系统总线的控制权。
 工作流程如下:
- 是否请求读写操作,通过处理器和DMA之间使用读写控制线发送。
 - 相关的IO设备地址传送。
 - DMA获得存储器的读或者写的起始地址,并由DMA保存其寄存器中。
 - 读或者写的数据长度,由DMA保存。
 
操作系统设计问题
设计目标
效率和通用性。
 效率:一种解决方法就是多道程序设计,交换技术用于将额外的就绪进程加载到内存,从而保持处理器的工作状态。主要受到关注的是磁盘IO。
 通用性:实际中很难真正实现通用性,目前所能做的就是一种层次化、模块化的方法设计io功能。
IO功能的逻辑结构
最简单的情况,本地外围设备以一种简单的方式通信,这样会涉及三个层面:
- 逻辑IO:逻辑IO模块将设备当作一个逻辑资源来处理,不关心设备控制细节。逻辑IO模块代表用户进程管理IO功能。
 - 设备IO:请求的操作和数据被转换为适当的IO指令序列、通道命令和控制器指令。可以使用缓冲技术来提高使用率。
 - 调度和控制:IO操作的排队、调度实际上发生在这一层。这一次是与IO模块和设备硬件正在发生交互的软件层。
 
可以将逻辑IO层再细分为三层:
- 目录管理:在这一层,符号文件名被转换成标识符,用标识符可以通过文件描述符表或索引表直接或间接访问文件。这一层还影响文件目录的用户操作,如添加删除等。
 - 文件系统:这一层处理文件的逻辑结构以及用户指定的操作,如果打开、关闭、读写等。这一层还管理文件访问权限。
 - 物理组织:就像考虑到分段和分页结构,虚拟内存地址必须转为物理地址一样,考虑到辅存设备的物理磁道和扇区结构,对文件和记录的逻辑访问也必须转换为物理外存地址。辅助存储空间和内存缓冲区分配也在这一层。
 
I/O缓冲
为了避嫌等待IO操作的开销和低效操作,在输入请求之前就开始执行输入传送,并在输出请求发出一段时间后才开始执行输出传送,这项技术称为缓冲。
 区分两类IO设备:
- 面向块:将信息保存在块中,块的大小固定,传输过程一次传输一个块。磁盘、USB智能卡。
 - 面向流:以字节流的防暑输入输出数据,没有块结构。打印机、通信端口、鼠标都是。
 
缓冲区可以参考我在17年写的一篇博客,里面有缓冲操作的具体代码实现。当初给一个单片机串口任务做缓冲区,分别用到了双缓冲和循环缓冲,并通过DMA来实现数据收发。
 文章连接.
单缓冲
只有一个缓冲区,IO设备和用户进程直接操作这个缓冲区。
双缓冲
IO设备和用户进程分别掌握两个不同的缓冲区,当用户读完现有缓冲区,则进行缓冲交换。
循环缓冲
IO设备和用户进程分别掌握读指针和写指针,读写分离。需要控制两个指针的位置和逻辑长度的计算。
缓冲的作用
缓冲是用来平滑IO需求峰值的一种技术,缓冲是提高操作系统效率和单个进程性能的一种方法。
磁盘调度
磁盘性能参数
为了读写,磁头必须定位于指定的磁道和该磁道中指定的扇区的开始处。
 寻道时间:磁头定位到磁道的时间。
 旋转延迟:磁头到达扇区开始位置的时间。
 存取时间:寻道时间和旋转延迟的总和。
 传送时间:磁头通过下面旋转的扇区,开始执行读操作或写操作,传输所需的时间。
磁盘调度策略
产生性能差异的原因可以追溯道寻道时间。
先进先出
按照收到顺序执行。公平的优点。
优先级
不能优化磁盘的使用率,但可以满足操作系统的其他优化目标。通常批作业和交互作业的优先级比较高,长时间作业的优先级低。
后进先出
把设备资源提供给最近的用户,会导致磁头臂在一个顺序文件中移动时移动的得很少,甚至不移动,这样就可以提高吞吐量,减小队列长度。但是可能会出现饥饿。
最短服务时间优先
该策略(SSTF)选择使磁头臂从当前位置开始移动最少的磁盘IO请求,因此,该策略总是选择导致最小寻道时间的请求。但是这样并不能保证平均时间最小,可以比FIFO提供更好的性能。
SCAN
为了避免出现饥饿,要求磁头臂只沿着一个方向移动,并在途中满足所有未完成的请求。直到它达到这个方向上的最后一个磁道,或者哎这个方向上没有别的请求为止,接着反转服务方向,沿着相反方向扫描。
局部性能不如SSTF。该策略偏好请求接近最里或最靠外的磁道的作业,斌且偏好最近作业。C-SCAN可以解决前者,N-step-SCAN可以解决后者。
C-SCAN
该策略把扫描限定在一个方向上。当访问到沿着某个方向的最后一个磁道时,磁头臂返回到磁盘相反方向磁道的末端,再次开始扫描。
N-step-SCAN
该策略将磁盘请求队列分为长度为N的子队列,每次用SCAN处理一个子队列,处理某一个队列是,新请求必须添加到其他队列中。
磁盘高速缓存
高速缓冲存储器通常指一个比内存小且比内快的存储器。这个存储器位于内存和处理器之间。同样的原理,可以利用在磁盘。当一个请求来的时候,现在告诉缓存中查看时候存在,不存在的话再到磁盘中读取。
设计考虑
置换策略,新的块替换老的块。
 利用最近最少使用算法(LRU):置换高速缓存中未被访问的时间最长的块。
 最不常用算法(LFU):置换集合中被访问次数最少的块。如果在短时间内需要多次访问,则LFU算法就不好了,为了克服这个问题,一种称为基于频率的置换算法就不错。
UNIX I/O
UNIX中每个IO设备都于一个特殊文件关联。它们由文件系统管理,并且按照于用户数据相同的方式被读写,这就给用户和进程一个清晰的接口。
 UNIX包含两种IO:有缓冲和无缓冲。
 有缓冲的就是通过高速缓存发送,无缓冲的就是直接在IO模块和进程之间传送(包括DMA)。
操作系统精髓与设计原理(九)——I/O管理和磁盘调度的更多相关文章
- <<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步(1)
		
<<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步 并发问题是所有问题的基础,也是操作系统设计的基础.并发包括很多设计问题,其中有进程间通信,资源共享与竞争,多个 ...
 - 操作系统-IO管理和磁盘调度
		
I/O设备 IO设备的类型 分为三类:人机交互类外部设备:打印机.显示器.鼠标.键盘等等.这类设备数据交换速度相对较慢,通常是以字节为单位进行数据交换的 存储设备:用于存储程序和数据的设备,如磁盘.磁 ...
 - Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理
		
IOC的基础 下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工作,但对这两个核心模块工作原理和运作机制的理解,对深 ...
 - Atitit.异常的设计原理与 策略处理 java 最佳实践 p93
		
Atitit.异常的设计原理与 策略处理 java 最佳实践 p93 1 异常方面的使用准则,答案是:: 2 1.1 普通项目优先使用异常取代返回值,如果开发类库方面的项目,最好异常机制与返回值都提供 ...
 - Atitit ati licenseService    设计原理
		
Atitit ati licenseService 设计原理 C:\0workspace\AtiPlatf\src_atibrow\com\attilax\license\LicenseX.ja ...
 - kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
		
问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状 ...
 - html5设计原理(转)
		
转自: http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...
 - 学习HTML5必读之《HTML5设计原理》
		
引子:很久前看过的一遍受益匪浅的文章,今天再次转过来,希望对学习HTML5的朋友有所帮助. 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一方面,当然了,就是HTML5.我可以站在这儿只讲HT ...
 - 引擎设计跟踪(九.14.2a) 导出插件问题修复和 Tangent Space 裂缝修复
		
由于工作很忙, 近半年的业余时间没空搞了, 不过工作马上忙完了, 趁十一有时间修了一些小问题. 这次更新跟骨骼动画无关, 修复了一个之前的, 关于tangent space裂缝的问题: 引擎设计跟踪( ...
 
随机推荐
- python之《matplotlib》
			
# _*_coding:utf-8_*_# /usr/bin/env python3# Author:book Mikiimport matplotlib.pyplot as pltimport nu ...
 - istio in kubernetes (一) --原理篇
			
背景 微服务是什么 • 服务之间有轻量级的通讯机制,通常为REST API • 去中心化的管理机制 • 每个服务可以使用不同的编程语言实现,使用不同的数据存储技术 • 应用按业务拆分成服务,一个大型应 ...
 - 【原创】Linux虚拟化KVM-Qemu分析(六)之中断虚拟化
			
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...
 - spring boot和spring cloud的区别
			
Java中说到微服务肯定离不开Spring Boot和Spring Cloud,这两者到底有什么关系,什么是微服务,如果单纯的说SpringBoot,SpringCloud,都是不准确的,那应该怎么回 ...
 - python-基础入门-6快速入门总结
			
快速入门 程序输出: 1.print语句,字符串用双引号括起来 _在解释器中表示最后一个表达式的值. print语句 与字符串格式(%)结合使用,能实现字符串替换功能. >>>pri ...
 - 苹果电脑不安装flash的话怎么看直播
			
直播这种娱乐方式的兴起,让很多游戏玩家.脱口秀演员.歌手等拥有了一个更加宽广的舞台,可以更好地展现自己的才能.大部分的直播都是采取视频影像的方式直播,只有少部分才会采用纯音频的方式. 由于很多直播网站 ...
 - 使用Camtasia给视频课件添加自动聚焦的效果
			
随着现在抖音与微课市场的大火,原来可能只是因为兴趣爱好而剪辑制作了一些视频为爱发电,现在却完全可以当作一个事业来做了. 但是课件录制的时候,大部分的录制屏幕软件都是全屏或者固定屏幕大小录制的,有些小细 ...
 - 15.java设计模式之访问者模式
			
基本需求: 电脑需要键盘鼠标等固定的组件组成 现在分为个人,组织等去买电脑,而同一种组件对不同的人(访问者)做出不同的折扣,从而电脑的价格也不一样 传统的解决方法:在组件内部进行判断访问人的类型,从而 ...
 - iOS如何实现语音播报及后台播放
			
最近项目刚刚交付,偶然间用到了语音播报和语音搜索的功能.语音搜索我用的是讯飞的demo,感觉效果还不错,感兴趣的话可以去官网上面下载demo,里面讲的特别的详细,不过稍显麻烦一些.语音播报讯飞也有de ...
 - php项目使用git的webhooks实现自动部署
			
前言 在项目开发中使用git进行代码的管理,每次完成更改上传代码后,还需要登录服务器将代码拉取下来.现在git服务器(gitee/gitlab/github)都会有Webhooks功能,以实现在向gi ...