IO 软件设计目标和设计原则

总体目标追求「高效率」和「通用性」。需要考虑的问题有

  • 设备无关性:程序与具体物理设备无关。 
  • 出错处理:屏蔽错误,不让高层软件感知。 
  • 同步/异步传输:支持同步(阻塞)和异步(中断驱动)两种工作方式。 
  • 缓冲技术:数据处理速率不匹配,数据处理大小不一致。
  • 独占性外围设备和共享性外围设备:分配和共享。

IO 操作执行步骤

  1. 进程对已打开文件的文件描述符执行读库函数;
  2. 独立设备I/O软件检查参数正确性。高速缓存中有要读的信息块,从缓冲区直接读到用户区,完成I/O请求;
  3. 若数据不在缓冲区,执行物理I/O,实现将设备逻辑名转换成物理名,检查对设备操作的权限,将I/O请求排队,阻塞进程且等待I/O完成;
  4. 内核启动设备驱动程序,分配存放读出块的缓冲区,准备接收数据,且向设备控制寄存器发启动命令,或建立DMA传输,启动I/O;
  5. 设备控制器操作设备,执行数据传输;
  6. DMA 控制器控制一块传输完成,硬件产生I/O结束中断;
  7. CPU 响应中断,转向磁盘中断处理程序。
  8. 当应用进程被再次调度执行时,从I/O系统调用的断点恢复执行。