第一次有人说清了IO设备的层次

在这里插入图片描述

相信梦想是价值的源泉,相信眼光决定未来的一切,相信成功的信念比成功本身更重要,相信人生有挫折没有失败,相信生命的质量来自决不妥协的信念

IO软件设计的面非常广,往下与硬件有着密切的联系,往上又与用户直接交互,它与进程管理、存储器管理、文件管理等都存在着一定的联系,即它们都需要IO软件来实现IO操作

为了使复杂的IO软件具有清晰的结构,良好的可移植性和适应性,在io软件中普遍采用了层次式结构,将系统的输入输出功能组织成一系列的层次,每一层都利用下一层提供的服务。在层次式的IO结构中,只要一层和一层间的接口不发生变化,即使对某一层进行了修改,也不会引起其相邻上下层的变化。
一个大致的划分如下图所示

在这里插入图片描述

  1. 用户层IO软件: 实现与用户交互的接口,用户可以直接调用在用户层提供的、与IO操作有关的库函数,对设备进行操作。一般而言,大部分的IO操作函数在操作系统的内部,但仍有一部分在用户层,包括与用户程序链接在一起的库函数,以及完全运行在内核外的一些程序,用户层软件必须通过一系列系统调用来获取操作系统的服务。

  2. 设备独立性软件: 用于实现用户程序与设备驱动器的统一接口,设备命令、设备保护、以及设备分配和释放,同时为设备管理和数据传送提供必要的存储空间, 设备独立性也称为设备无关性,使得应用程序独立于具体的物理设备,为了实现设备独立性,为了保持设备独立性而引入的逻辑设备和物理设备两种概念,在应用程序中,使用逻辑设备名来请求使用某类设备,而在系统实际执行时,必须将逻辑设备名映射为物理设备名使用。

    使用逻辑设备名的好处:
    1. 增加设备分配的灵活性
    2. 易于实现io重定向,所谓io重定向就是改变io操作的设备而不需要改变应用程序
    为了实现设备独立性,就需要在设备驱动程序上面加一层设备独立性软件,总的来说,设备独立性软件的功能主要体现为以下两个方面:

    1. 执行所有设备的公有操作,包括:对设备的分配和回收、将逻辑名映射为物理名、对设备进行保护、禁止用户访问设备、缓冲管理、差错控制、提供独立于设备的大小统一的逻辑块,屏蔽设备之间的信息交换单位的大小和传输速率的差异
    2. 像用户层提供统一的接口。无论何种设备,它们向用户层提供的接口都应该是统一的,例如,对各种设备的读写操作,在应用层应该统一使用read/write命令等
  3. 设备驱动程序: 与硬件相关,具体实现系统对设备发出的操作命令,驱动IO设备进行工作的程序。
    通常,每一类设备提供一个设备驱动程序,它是IO进程与设备控制器之间的通信程序,常以进程的形式存在,设备驱动程序向上层用户提供统一的接口,设备的具体差异被设备驱动程序所封装,用于接收上层软件发来的抽象的read/write请求,转换为具体的要求后,发送给设备控制器,控制IO设备的工作,它也将设备控制器发来的信号发送给上层软件,从而为IO内核子系统隐藏设备设备控制器之间的差异。

  4. 中断处理程序: 用于保存被中断进程的CPU环境,转入相关的中断处理程序进行处理,处理完并恢复被中断进程的现场后,返回到被中断进程。

  5. 硬件设备 : IO设备通常包含一个机械部件和一个电子部件,为了达到设计的模块性和通用性,一般将其分开,电子设备称为设备控制器,在PC中,一般是一块插入主板扩充槽的印刷电路板,机械部件是设备本身。
    设备控制器通过寄存器和CPU进行通信,在某些计算机上,这些寄存器占用内存的一部分地址,称为内存映像IO,另一些计算机则采用IO专用地址,寄存器独立编址。操作系统通过向设备控制器寄存器写命令字来执行IO功能,控制器收到一条命令后,CPU可以继续去做其他的事情,而让设备控制器自己去完成具体的io操作,当命令完成后,设备控制器发出中断信号,操作系统重新获得CPU控制权并检查执行的结果,此时,CPU仍是从控制器寄存器中获取信息来获得执行结果和设备状态信息。

总结

类似于文件系统的层次结构,IO系统的结构也是我们需要掌握的,我们再用一个例子帮助记忆
当我们要读取某一个设备的内容时,通过操作系统提供的read命令接口,就经过了用户层
操作系统提供给用户的命令一般是统一的通用接口,也就是几乎每一个设备都可以响应的统一命令,如read命令,用户发出的命令,经过设备独立层之后,再交给下层
接下来,对于不同的设备,对read命令的行为可能回不一样,如磁盘接受read命令的行为也打印机接收后的行为是不同的,因此,需要针对不同的设备,将read命令解析为不同的指令,这就经过了设备驱动层
命令解析完之后,需要中断正在运行的程序,转而执行read命令,就需要中断处理程序
最后,命令真正的到达硬件设备,硬件设备的控制器按照上层传达的命令操作硬件设备完成相应的功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值