操作系统的I/O结构
存储器只是众多计算机 I/O 设备中的一种。操作系统的大部分代码专门用于 I/O 管理,这是由于它对系统的可靠性和性能至关重要,也是由于不同设备具有不同特性。因此,我们首先概述一下 I/O。
每个通用计算机系统由一个 CPU 和多个设备控制器组成,它们通过共同总线连在一起。每个设备控制器管理某一特定类型的设备。根据设备控制器的特性,可以允许多个设备与其相连。例如,小型计算机系统接口(Small Computer System Interface,SCSI)控制器可连接 7 个或更多的设备。每个设备控制器维护一定量的本地缓冲存储和一组特定用途的寄存器。设备控制器负责在所控制的外围设备与本地缓冲存储之间进行数据传递。
通常,操作系统为每个设备控制器提供一个设备驱动程序(device driver)。该设备驱动程序负责设备控制器,并且为操作系统的其他部分提供统一的设备访问接口。
在开始 I/O 时,设备驱动程序加载设备控制器的适当寄存器。相应地,设备控制器检查这些寄存器内容,以便决定采取什么操作(如“从键盘中读取一个字符”)。控制器开始从设备向本地缓冲区传输数据。一旦完成数据传输,设备控制器就会通过中断通知设备驱动程序,它已完成了操作。然后,设备驱动程序返回控制到操作系统。对于读操作,数据或数据指针也会返回;而对于其他操作,设备驱动程序返回状态信息。
这种 I/O 中断驱动适合移动少量数据,但是对于大量数据的移动,如磁盘 I/O,就会带来很髙的开销。为了解决这个问题,可以采用直接内存访问(Direct Memory Access,DMA)。
在为这种 I/O 设备设置好缓冲、指针和计数器之后,设备控制器可在本地缓冲和内存之间传送整块的数据,而无需 CPU 的干预。每块只产生一个中断,来告知设备驱动程序操作已完成,而不是像低速设备那样每个字节产生一个中断。当设备控制器执行这些操作时,CPU 可以进行其他工作。
图 1 现代计算机系统的工作原理
一些高端系统采用交换而不是总线结构。在这些系统中,多个组件可以与其他组件同时对话,而不是竞争公共总线的周期。此时,DMA 更为有效。图 1 表示计算机系统所有组件的相互作用。
每个通用计算机系统由一个 CPU 和多个设备控制器组成,它们通过共同总线连在一起。每个设备控制器管理某一特定类型的设备。根据设备控制器的特性,可以允许多个设备与其相连。例如,小型计算机系统接口(Small Computer System Interface,SCSI)控制器可连接 7 个或更多的设备。每个设备控制器维护一定量的本地缓冲存储和一组特定用途的寄存器。设备控制器负责在所控制的外围设备与本地缓冲存储之间进行数据传递。
通常,操作系统为每个设备控制器提供一个设备驱动程序(device driver)。该设备驱动程序负责设备控制器,并且为操作系统的其他部分提供统一的设备访问接口。
在开始 I/O 时,设备驱动程序加载设备控制器的适当寄存器。相应地,设备控制器检查这些寄存器内容,以便决定采取什么操作(如“从键盘中读取一个字符”)。控制器开始从设备向本地缓冲区传输数据。一旦完成数据传输,设备控制器就会通过中断通知设备驱动程序,它已完成了操作。然后,设备驱动程序返回控制到操作系统。对于读操作,数据或数据指针也会返回;而对于其他操作,设备驱动程序返回状态信息。
这种 I/O 中断驱动适合移动少量数据,但是对于大量数据的移动,如磁盘 I/O,就会带来很髙的开销。为了解决这个问题,可以采用直接内存访问(Direct Memory Access,DMA)。
在为这种 I/O 设备设置好缓冲、指针和计数器之后,设备控制器可在本地缓冲和内存之间传送整块的数据,而无需 CPU 的干预。每块只产生一个中断,来告知设备驱动程序操作已完成,而不是像低速设备那样每个字节产生一个中断。当设备控制器执行这些操作时,CPU 可以进行其他工作。
图 1 现代计算机系统的工作原理
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频