跳转至

输入输出(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 内核

宏内核的优点是效率高。因为各个内核模块都在同一个地址空间里,通信时不需要频繁地在用户态和内核态之间切换,函数调用也比较直接。

微内核

设备驱动程序的统一接口

循环缓冲区

与设备无关的I/O软件

用户层I/O软件

格式化字符串

假脱机系统

其他