IO介绍-上
IO
IO系统管理的主要对象是IO设备和相应的设备控制器。其主要任务是,完成用户提出的IO请求,提高IO效率,以及提高设备的利用率。并能为更高层的进程方比那使用这些设备提供手段。
IO系统的基本功能
-
隐藏物理设备的细节
设备类型很多,他们之间的很多方面都有差异。像他们产生和接受数据的速度,传输方向、粒度、数据的表示形式及可靠性等方面。为了对这些设备进行控制,通常都为他们配置相应的设别控制器。这是一种硬件设备,其中包含有若干个用于存放控制命令的寄存器和存放参数的寄存器。用户通过这些命令和参数,可以控制外部设备执行所需要的操作。
因为对不同的设备,需要使用不同的命令和不同的参数。比如,对磁盘的操作,需要给出是读指令,还是写指令。还要给出数据位置,包括磁盘的盘面号、磁道、扇区号等。由此可见,如果要程序员自己去直接面向设备编程,是很困难的。
因此,需要IO系统对设备加以抽象,隐藏掉设备的具体实现细节,仅向上层进程提供少量的、抽象的读写命令。
-
与设备无关
这个是在隐藏物理设备细节的基础上,又做了一个抽象。把物理上的设备,映射成逻辑设备。比如要是打印机,对应的/dev/printer ,而不必要指明是哪一台打印机;另外,页可以有效的提高OS的可移植性,增加新的设备驱动程序,以方便新的IO设备的安装。系统可以为新IO设备自动安装和寻找驱动程序,从而做到即插即用。
-
提高处理及和IO设备的利用率
很多设备之间是相互独立的,能够并行操作的。处理机和设备之间也可以并行操作。因此,需要尽可能的将cpu和设备并行操作,以提高利用率。
一方面是cpu能快速响应用户的IO请求,是设备尽快的运行起来;另一方是减少每一个设备在运行期间对cpu的干预时间。
-
对设备进行控制
对设备的控制是驱动程序的功能。目前对设备控制有以下方式:
- 程序轮训方式
- 中断的可编程方式
- 直接存储器访问方式
- 通道方式
对于低速设备可采用中断可编程方式,例如键盘、打印机等终端低速设备。低速传输基本单位是字节。
高速设备,可采用直接存储方式。例如 磁盘、光盘等。高速传输单位是数据块。
IO通道可以使对IO操作的组织和数据传输,都能独立运行而无需CPU的干预。为了方便高层和用户,IO软件屏蔽了这些差异,向高层提供统一的操作接口。
-
确保对设备的正确共享
设备的共享分为两种:
- 独占设备:进程互斥访问。比如打印机、磁带机等
- 共享设备:一段时间内可以允许多个进程同时访问设备。比如对磁盘的读
-
错误处理
设备的错误也可以分为临时性错误和持久性错误。
临时性错误:可以通过重试操作进行修正
持久性错误:需要向上报告
对错误的处理,应该尽可能的在接近硬件的层面上进行,在低层软件上能够解决的错误就不向上层报告。上层调用是无感知的。对于那些低层软件解决不了的错误才能向上 层报告,让高层处理解决。
IO系统层次结构
用户层IO软件
用户程序,用户可以直接调用该层所提供的、于IO操作有关的库函数对设备进行操作
设备独立性软件
用户实现用户程序和设备驱动器的统一的接口、设备命名、设备的保护以及设备的分配和释放等
设备驱动程序
与硬件之直接相关,用于具体实现对设备发生的操作指令,驱动设备工作的驱动程序
中断处理程序
保护被中断进程的cpu现场环境,转入相应的中断处理程序进行处理,处理完毕再恢复被中断进程的现场后,再返回到被中断的进程
IO系统中各种模块之间的层次视图
IO系统的上下接口
- 系统接口:它是向上提供设备进行操作的抽象IO命令,方便上层使用。有的系统在用户层面提供了 IO操作有关的库函数,供用户使用。在上层系统中有文件系统、虚拟存储器系统以及用户进程等
- 软件/硬件(RW/HW)接口:
- IO系统的分层:
中断处理程序:它处于IO系统的底层,直接与硬件交互。
设备驱动程序:IO系统的次底层,是进程和设备控制器之间的通信程序。主要功能就是将上层发来的抽象IO请求转换成对IO设备具体的命令和参数,并把它载入设备控制器中的命令和参数寄存器中。由于设备之间的差异很大,每类设备的驱动程序也都不相同,所以设备驱动程序是由设备厂商提供。因此,系统中每增加一个新的设备时,都需要厂家提供新的驱动程序。
设备独立性软件:是在设备驱动的基础上又增加的一层抽象层,屏蔽了具体的多个设备驱动程序。实现了IO系统操作和设备无关性。提高了设备的可适应性和可扩展性。使他们能应用于许多类型的设备,而且在每次增加新设备或替换老设备时,都不需要对IO软件进行修改,这样就方便了系统了更新和扩展。设备独立性软件的内容包括设备命名、设备分配、数据缓冲、和数据高速缓冲一类软件
本文来自博客园,作者:Eular,转载请注明原文链接:https://www.cnblogs.com/euler-blog/p/18599372
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!