• Operating System Video Tutorials

操作系统 - 输入/输出软件



输入/输出软件通常按以下几层组织:

  • 用户级库 - 为用户程序提供简单的接口来执行输入和输出。例如,stdio是C和C++编程语言提供的库。

  • 内核级模块 - 提供设备驱动程序以与设备控制器交互,以及设备驱动程序使用的与设备无关的I/O模块。

  • 硬件 - 此层包括实际的硬件和硬件控制器,它们与设备驱动程序交互并使硬件工作。

I/O软件设计中的一个关键概念是它应该是与设备无关的,这意味着应该能够编写访问任何I/O设备的程序,而无需预先指定设备。例如,将文件作为输入读取的程序应该能够读取软盘、硬盘或CD-ROM上的文件,而无需为每个不同的设备修改程序。

I/O Softwares

设备驱动程序

设备驱动程序是可以插入操作系统的软件模块,用于处理特定设备。操作系统借助设备驱动程序来处理所有I/O设备。设备驱动程序封装了设备相关的代码,并实现了一个标准接口,以便代码包含设备特定的寄存器读/写操作。设备驱动程序通常由设备制造商编写,并随设备一起在CD-ROM上提供。

设备驱动程序执行以下任务:

  • 接受来自上层设备无关软件的请求。
  • 与设备控制器交互以进行I/O操作并执行必要的错误处理。
  • 确保请求成功执行。

设备驱动程序处理请求的方式如下:假设有一个读取块N的请求。如果驱动程序在请求到达时处于空闲状态,它会立即开始执行请求。否则,如果驱动程序正忙于处理其他请求,它会将新请求放入挂起请求队列中。

中断处理程序

中断处理程序,也称为中断服务例程或ISR,是操作系统或更具体地说是在设备驱动程序中的一段软件或更具体地说是一个回调函数,其执行由接收中断触发。

当中断发生时,中断程序执行必要的处理,更新数据结构并唤醒正在等待中断发生的进程。

中断机制接受一个地址——一个数字,它从一小组中选择特定的中断处理例程/函数。在大多数架构中,此地址是在称为中断向量表的表中存储的偏移量。此向量包含专用中断处理程序的内存地址。

与设备无关的I/O软件

与设备无关的软件的基本功能是执行所有设备通用的I/O功能,并为用户级软件提供统一的接口。虽然很难编写完全与设备无关的软件,但我们可以编写一些在所有设备中通用的模块。以下是与设备无关的I/O软件的功能列表:

  • 为设备驱动程序提供统一接口
  • 设备命名 - 助记符名称映射到主设备号和次设备号
  • 设备保护
  • 提供与设备无关的块大小
  • 缓冲,因为从设备来的数据不能存储在最终目的地。
  • 块设备上的存储分配
  • 分配和释放专用设备
  • 错误报告

用户空间I/O软件

这些是提供更丰富和简化的接口来访问内核功能或最终与设备驱动程序交互的库。大多数用户级I/O软件由库过程组成,但有一些例外,例如卷绕系统,这是一种在多编程系统中处理专用I/O设备的方法。

I/O库(例如,stdio)位于用户空间,以提供与驻留在操作系统的与设备无关的I/O软件的接口。例如,putchar()、getchar()、printf()和scanf()是C编程语言中可用的用户级I/O库stdio的示例。

内核I/O子系统

内核I/O子系统负责提供许多与I/O相关的服务。以下是提供的一些服务。

  • 调度 - 内核调度一组I/O请求以确定执行它们的良好顺序。当应用程序发出阻塞I/O系统调用时,请求将被放置在该设备的队列中。内核I/O调度程序重新排列队列的顺序以提高整体系统效率和应用程序体验的平均响应时间。

  • 缓冲 - 内核I/O子系统维护一个称为缓冲区的内存区域,该区域在两个设备之间或设备与应用程序操作之间传输数据时存储数据。缓冲是为了应对数据流的生产者和消费者之间的速度不匹配,或者为了适应具有不同数据传输大小的设备。

  • 缓存 - 内核维护缓存内存,这是一个快速内存区域,其中包含数据的副本。访问缓存副本比访问原始副本更有效。

  • 卷绕和设备预留 - 卷绕是一个缓冲区,用于保存设备(例如打印机)的输出,该设备无法接受交错的数据流。卷绕系统一次将一个排队的卷绕文件复制到打印机。在某些操作系统中,卷绕由系统守护程序进程管理。在其他操作系统中,它由内核线程处理。

  • 错误处理 - 使用受保护内存的操作系统可以防止许多类型的硬件和应用程序错误。

广告