输入输出(IO)¶
来源:
操作系统 / note/输入输出/输入输出(IO).md
计算机组成部分:CPU+外存+内存+输入输出¶
I/O的管理的目标和任务¶
完成I/O设备与内存之间的数据交换,最终完成I/O请求
建立方便、统一的独立于设备的接口
充分利用各种技术提高CPU与设备之间的并行工作效率
I/O分层¶
硬件¶
I/O端口地址¶
I/O指令形式¶
- 内存映像编址
- I/O独立编址
I/O独立编址¶
分配给系统中所有端口的地址空间完全独立,与内存地址空间无关
使用专门的I/O指令对端口进行操作
内存映像编址¶
把I/O当成一种存储
I/O设备分类¶
- 块设备:硬盘、光盘等;可按块寻址
- 字符设备:网络接口、鼠标、打印机、键盘等,以字符为单位接受或发射一个字符流,不可寻址
- 特例:时钟、内存映射的显示器
磁盘¶
磁盘低级格式化¶
确定磁道、扇区等
柱面斜进
交错
磁盘臂调度算法¶
最近寻道优先
电梯算法
公平
错误处理¶
磁盘总会出现错误的扇区
但是不能因为一个错误的扇区就放弃整个磁盘
第一道防线:ECC(纠错码),但是错误太多则无法修复
第二道防线:再读一次
RAID(廉价磁盘冗余阵列)¶
时钟¶
维护日期时间
防止进程超时运行
监视定时器¶
检测死机,监视定时器自动增长,每隔一段时间重置监视定时器(置为0)
网卡¶
网络接口控制器,网络适配器
拥有MAC地址
显示器¶
和显卡相连
用户界面¶
中断与DMA¶
I/O最原始的方式:轮询
操作系统相继采取的操作简要地总结在图5-8中。⾸先,数据被复制到内核空间。然后,操作系统进⼊⼀个密闭的循环,⼀次输出⼀个字符。在该图中,清楚地说明了程序控制1/0的最根本的⽅⾯,这就是输出⼀个字符之后,CPU要不断地查询设备以了解它是否就绪准备接收另⼀个字符。这⼀⾏为经常称为轮询(polling)或忙等待(busy waiting)
但这样CPU啥也干不了,只能进行I/P操作
最基本的方式:中断
中断方式的I/O¶
目的:解放CPU
DMA(直接存储器存取 Direct Memory Access)¶
设备驱动¶
宏内核¶
宏内核(Monolithic Kernel)*是一种操作系统内核结构,它把操作系统的大部分核心功能都放在*同一个内核空间里运行。
也就是说,像下面这些功能通常都在内核态里:
- 进程管理
- 内存管理
- 文件系统
- 设备驱动
- 网络协议栈
- 系统调用处理
这些模块虽然逻辑上可以分开,但它们都属于同一个“大内核”,彼此之间可以直接调用函数、共享内核数据结构。
例如 Linux 内核
宏内核的优点是效率高。因为各个内核模块都在同一个地址空间里,通信时不需要频繁地在用户态和内核态之间切换,函数调用也比较直接。
微内核¶
设备驱动程序的统一接口¶
循环缓冲区