I/O设备

标准设备(不真的存在,理解用)
标准设备
从图中可以看到一个包含两部分的重要组件的设备。
第一部分是向系统其他部分展现的接口。
第二部分是它的内部结构。这部分包含设备相关的特定实现,负责具体实现设备展示给系统的抽象接口。非常简单的设备通常用一个或者几个芯片来实现它们的功能。

标准协议

在上图中,一个设备接口包含三个寄存器,一个状态寄存器(status)寄存器,可以读取并查看当前设备的状态;一个命令(command)寄存器,用于通知设备执行某个具体任务;一个数据(data)寄存器,将数据传给设备或从设备接受数据。通过读写这些寄存器,操作系统可以控制设备的行为。
协议伪代码如下:

while(STATUS == BUSY);//若状态处于繁忙,则等待。
write data to DATA register
write commond to COMMAND register
while(STATUS == BUSY);//等待,直到提供的操作完成。

该协议包含四步
1.操作系统通过反复读取状态寄存器,等待设备进入可以接受命令的就绪状态。这步叫轮询(polling)设备。
2.操作系统下发数据到数据寄存器。

利用中断减少CPU开销
可以用中断来减小CPU的开销,有了中断,CPU就不需要在polling设备了,而是向设备发出一个请求,然后就可以让对应进程睡眠,切换到其他任务。当操作系统完成自身操作,就会发出一个硬件中断,引发CPU跳转执行操作系统预先定义好的中断服务例程(ISR),或更为简单的中断处理程序,中断处理程序是一段操作系统的代码,它会结束之前的请求(比如读取到了数据或者错误码)并且唤醒等待I/O的进程继续执行。

所以,中断允许计算和IO同时执行。操作系统可以在等待磁盘操作时候做其他事。

但是并非中断就一定比polling好,如果有高性能设备,在第一次polling时候就完成了操作,这时候使用中断性能就会下降。可以考虑混合两张操作。另外不能用中断的是网络,网络端收到大量数据包,如果每一个包都发生一次中断,那么有可能导致操作系统发生活锁(livelock),即不断处理中断而无法处理用户层的情况。

设备驱动程序:
每个设备都有非常具体的接口,如何将它们纳入操作系统,而我们希望操作系统尽可能通用,例如文件系统。
通过抽象技术来解决问题,在最底层,操作系统的一部分软件清楚知道设备如何工作,这部分叫做 设备驱动程序,所有设备交互的细节都封装在其中。

案例分析:
IDE 磁盘驱动程序
IDE磁盘暴露给操作系统的接口比较简单,包含4种类型的寄存器:控制,命令块,状态和错误。在x86上,利用IO指令in和out向特定的IO地址读取或者写入时,可以访问这些寄存器。

Address:
 0x1f0 = data port
0x1f1 = error
0x1f2 = sector count
0x1f3 = lba low byte
0x1f4 = lba mid byte
0x1f5 = lba hi byte
0x1f6 = lb1d top4lba:b = lba,d = drive
0x1f7 = commond/status

所以我们文章mbr读写磁盘中有个写入loader地址 的就是将loader中地址写入lba中

0x1f7中:
7:busy
6:ready
5:fault
4:seek
3:drq
2:corr
1:iddex
0:error

Error  register:0x1f1(错误):(check when status error == 1)
7:bad block
6:uncorrectable data error
5:media changed
4:id mark not found
3:media change requested
2:command aborted
1:track 0 not found
0:address mark not found

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值