📜  操作系统-I / O软件

📅  最后修改于: 2020-12-13 15:44:13             🧑  作者: Mango


I / O软件通常分为以下几层:

  • 用户级库-这为用户程序提供了简单的界面以执行输入和输出。例如, stdio是C和C++编程语言提供的库。

  • 内核级模块-这提供了设备驱动程序,以便与设备控制器和设备驱动程序使用的设备独立I / O模块进行交互。

  • 硬件-该层包括实际的硬件和硬件控制器,它们与设备驱动程序进行交互并使硬件处于活动状态。

I / O软件设计中的一个关键概念是,它应该独立于设备,这样就可以编写可以访问任何I / O设备的程序,而不必事先指定设备。例如,读取文件作为输入的程序应该能够读取软盘,硬盘或CD-ROM上的文件,而不必为每个不同的设备修改程序。

I / O软件

设备驱动程序

设备驱动程序是可以插入操作系统以处理特定设备的软件模块。操作系统从设备驱动程序获得帮助来处理所有I / O设备。设备驱动程序封装了与设备相关的代码,并以代码包含特定于设备的寄存器读/写的方式实现了标准接口。设备驱动程序通常由设备制造商编写,并与设备一起通过CD-ROM交付。

设备驱动程序执行以下作业-

  • 接受来自其上方的设备独立软件的请求。
  • 与设备控制器交互以获取并提供I / O并执行所需的错误处理
  • 确保请求成功执行

设备驱动程序如何处理请求如下:假设请求来读取块N。如果驱动程序在请求到达时处于空闲状态,它将立即开始执行请求。否则,如果驱动程序已经在忙于其他请求,它将把新请求放入待处理请求的队列中。

中断处理程序

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

发生中断时,中断过程将执行处理中断,更新数据结构并唤醒等待中断发生的过程。

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

与设备无关的I / O软件

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

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

用户空间I / O软件

这些库提供了更丰富和简化的界面,可访问内核的功能或最终与设备驱动程序进行交互。大多数用户级I / O软件都由库过程组成,但有一些例外,例如假脱机系统,它是一种在多程序系统中处理专用I / O设备的方式。

I / O库(例如stdio)位于用户空间中,以提供与OS驻留设备无关的I / O SW的接口。例如putchar(),getchar(),printf()和scanf()是C编程中可用的用户级I / O库stdio的示例。

内核I / O子系统

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

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

  • 缓冲-内核I / O子系统维护一个称为缓冲区的存储区,用于在两个设备之间或通过应用程序操作在设备之间传输数据时存储数据。进行缓冲是为了解决数据流的生产者和使用者之间的速度不匹配或适应具有不同数据传输大小的设备之间的情况。

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

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

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