操作系统-I/O设备

I/O设备

一个设备包括三个寄存器,状态寄存器,命令寄存器,数据寄存器,我们可以理解为他就是一个微型的CPU,执行命令,读取数据,但也有一个状态,

I/O设备的标准协议:

1.操作系统需要反复读取状态寄存器,看其是否能够工作,即轮询

2.操作系统给下发数据到数据寄存器,

3.操作系统将命令写入命令寄存器,这样设备就知道数据已经传输完了,开始执行命令;

4.操作系统反复轮询设备,等待并判断设备是否执行完成命令;

利用中断减少CPU开销:

轮询的效率很低,而且等待设备执行命令很浪费时间。可以通过中断减少CPU开销;

中断允许计算与I/O重叠,因此可以一边执行其他进程,一边进行I/O,提高CPU利用率,可以理解为开始I/O后,程序抛出中断指令,操作系统切换进程,完成I/O后,程序再次抛出中断指令,操作系统恢复进程,但中断以及进程切换本身也比较耽误时间,另外网络数据传输最好不要使用中断,

利用DMA进行更高效的数据传送:

将数据从内存写到设备寄存器很花时间,为了节省时间,使用DMA节省时间,DMA工作过程:

操作系统通过编程告诉DMA引擎数据在内存的位置,要拷贝的大小以及要拷贝到哪个设备,在此之后操作系统就可以进行其他请求了,DMA完成后,DMA控制器就会抛出中断来告诉操作系统自己已经完成数据传输,

DMA:相当于一个专门处理内存与设备数据寄存器传输数据的CPU,可以提高主CPU的效率。

设备交互的方法:

操作系统通过哪些指令与设备通信?

1.明确的I/O指令,如in,out指令,通常是特权指令,操作系统是唯一可以与设备交互的程序;

2.内存映射I/O,硬件将设备寄存器作为内存地址提供,当需要写入数据时,写道这个地址上就行了,即所有的设备都拥有一个虚拟的内存地址(他的区别是这段内存是不能被分配的,是设备独有的),如汇编语言中在特定地址写入数据就可以在显示器上呈现。

纳入操作系统:设备驱动程序

每个设备都有非常具体的接口,如何将他们纳入操作系统?如存储设备usb,硬盘,季谢颖颖帕胺的结构都不同,他们如何在一个统一的设备上运行呢?因此每种类型的设备都有一段特殊的代码来对他进行读写,即设备驱动程序,当我们写下printf时,操作系统最终会查看设备的类型,选择特别的设备驱动程序代码(如显示器的驱动代码)来进行读写操作。当我们打入fprintf(写到磁盘)时,操作系统会调用磁盘的驱动程序来进行读写操作。当你要使用耳机时,操作系统会使用耳机的驱动程序进行读写。一台计算机可支撑的设备越多,它的设备驱动程序也就越多。

简单的IDE磁盘驱动程序(工作协议)

IDE硬盘暴露给操作系统的接口只有4个寄存器:控制寄存器,命令快寄存器,状态寄存器,错误寄存器;每个寄存器都有特定的内存虚拟地址。工作协议如下:

1.等待驱动就绪,操作系统读取状态寄存器知道驱动状态为READY,

2.向命令寄存器写入参数,写入扇区数,扇区对应的逻辑地址,驱动编号等

3.开启I/O,在命令寄存器写入READ-WRITE命令。

4.数据传送,等待状态寄存器显示为READY后,开始向数据端口写入数据;

5.中断处理,数据传送完后触发中断处理;

6.错误处理,每次操作后都会读取状态寄存器,如果是ERROR,则读取错误寄存器来获取详细信息;

以上步骤通过几个C函数来实现。

磁盘驱动器

接口

驱动器由大量扇区(512字节)组成,每个扇区都可以读取或写入,每个扇区都有一个地址,

在执行读写命令时,往往一次读写4kb(一页),但是驱动器制造商只保证512个字节的写入是原子的。通常情况下访问相邻扇区的速度会比访问不相邻扇区的速度快。即连续访问的速度高于随机访问。

基本几何形状

与光盘类似,磁盘由一个或多个盘片,盘片围绕主轴联系在一起,数据储存在盘片的同心圆上,称为磁道,每个磁道又包含了若干个扇区,即扇区是磁道的组成,读取数据时旋转读取。读取时,磁盘臂将磁头定位到磁道上,之后磁盘旋转,寻转到对应扇区时,开始读取。

简单的磁盘驱动器

单磁道

磁头需要旋转到特定的磁道上,等待特定的扇区,才能读取,这段过程很耗费时间,耗费的时间称为旋转延迟。

多磁道

多磁道的情况下,为了读写对应磁道的数据,磁头首先要移动到对应的磁道(寻道),之后磁盘旋转到对应的扇区。寻道和旋转的时间很长。

寻道:寻道是一个运动过程,包括初期的加速阶段,之后的匀速阶段,最后的减速阶段。最后还有一个停放时间(想象一下开车,最后要停到停车位上)。

旋转:寻到后,磁盘臂将磁头停在了正确的轨道上。此时盘片开始旋转,此阶段的耗费时间称为旋转延迟;

传输:寻道,旋转完成后就可以开始传输了。

因此完整的I/O时间图为:寻道->等待转动延迟->传输

其他细节

多扇区磁盘驱动器:由于结构原因,外层磁道比内层的扇区(一个扇区5112字节)更多,因此磁盘有里到外被分为几个区域内,每个区域内,磁道的扇区数是一致的。

缓存(磁道缓冲区):驱动器使用缓存来保存从磁盘读取或写入磁盘的数据,当从磁盘读取山区时,驱动器可以决定读取磁道上所有扇区,并将起缓存在缓存中,这样可以让驱动器快速响应所有后续对同一磁道的请求(意思就是说将一些常用的数据保存在内存里,后续读写时直接读写该区域就行了。重复读取时有用。比如要反复读取一张图片,可以将图片直接放在那里,读取时直接进行读取)

I/O时间

综上i/o时间等于,寻道,旋转,传输时间之和。i/o速率等于文件传输大小初一I/o时间。通过实验看出随机访问磁盘的速度远低于顺序访问磁盘的速度。

磁盘调度

由于可以预先知道每个磁盘任务花费的时间,因此在磁盘调度时使用最短任务有限的算法,具体实现是最近块优先算法,即磁头首先读取据他最近的扇区的任务。但这样会导致饥饿。

电梯算法:(从里到外循环读取。避免饥饿,但降低效率,)

最短定位时间优先:即哪个任务的寻道+旋转的时间最少,就先执行哪个。

廉价冗余磁盘阵列

廉价冗余磁盘阵列可以将多个磁盘集合在一起构建更快,更强大,更可靠的磁盘系统,从外部看,RAID相当于一个磁盘,是一组可以读取或写入的快,而内部,RAID是由磁盘,内存,多个处理器组成,与单个磁盘相比,RAID支持并行操作,容量大,可靠性也大。RAID可以允许损失一个磁盘的情况下保持运行。RAID对于主机来说就像一个大磁盘。

接口和RAID内部

RAID将自己展现为线性的快数组,每个块都可以由文件系统读取或写入。文件系统向raid发出io请求时,raid内部计算要访问的磁盘,然后发出一个或多个物理io来执行操作。这些操作的性质取决于raid的级别。

文件和目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值