计算机I/O子系统

目录

前言

1. 无DMA参与的硬盘访问

2. 有DMA引擎的硬盘访问过程

3. Polling + Interrupt

4. 使用队列提升IO性能


前言

本文是学习《大话计算机》的学习笔记之一,之前许多不清楚的细节,能够理解清楚了。

所谓IO,可以简单理解为:硬盘、网卡、鼠标键盘、显卡等设备的数据输入输出。从CPU的角度来看,它可以直接访问的是主存、一些外部寄存器等,因为上述的外部输入输出设备速度相较于CPU还是慢了很多很多,所以需要通过IO子系统进行统一管理。

Tips:CPU可以访问的空间叫做:全局地址空间,包括主存+外部寄存器。通过Load/Stor指令访问,CPU内部的寄存区当然是专有指令访问啦,比如LDPTB指令用于加载页表基地址,如果用Load/Stor访问,MMU从哪里获取基址呢?所以它是专有命令加载基址,MMU才能工作。

1. 无DMA参与的硬盘访问

在这里先考虑DMA的参与,描述一下最简单的硬盘IO过程:

程序将数据写入内存 -> 将写指令Stor到IO控制器的寄存器中 -> 将主存中的数据在Load/Stor到IO控制器缓存中(这个缓存在全局地址空间) -> IO控制器完成数据的写入(此过程较慢,CPU去处理其他任务) -> 写完后,IO控制器相关寄存器置位"Finished",等待程序来检查标志位或者通过中断的方式通知,写数据完成了。附上一张草图。

 Tips: IO控制器一般位于主板上,或者是单独的适配卡,例如网卡,显卡,声卡等

2. 有DMA引擎的硬盘访问过程

DMA的出现如同其他硬件一样是为了卸载CPU的负载(offload,业界一直在做的事情),毕竟用CPU资源来搬运数据太浪费资源了。DMA负责搬运数据,它可以直接访问内存和设备的缓存,并完成数据的搬移。

较上图增加了DMA模块,控制电路会配置基址与长度,然后DMA引擎便不断搬运数据,直到任务完成。

至此总结下控制器需要暴露的寄存器有:控制寄存器、命令寄存器、数据寄存器、状态寄存器。kernel将命令所在内存地址赋值到命令寄存器,数据所在内存地址赋值到数据寄存器,然后将控制寄存器置位,总控制模块设置DMA从内存中读取相应命令并解析、执行。

3. Polling + Interrupt

在控制器完成IO任务后,如何通知相关程序呢?这里有两种方法:

1. 程序不断轮询(polling)控制器的状态寄存器,待其变为"Finished"之后,任务分成。

2. 中断方式,程序发起读写操作后,将自己挂起,并告诉调度器,某个事件发生时,在唤醒我,当然了,中断方式肯定是需要DMA来辅助的。此时无需暴露控制器内部的缓存。 

4. 使用队列提升IO性能

此部分待更新。。。

I/O(输入/输出)子系统计算机系统中负责处理输入和输出设备的模块化组件。它通常由多个层次结构组成,每个层次负责不同的功能。以下是常见的 I/O 子系统层次结构: 1. 用户接口层: - 用户接口层是最上层的层次,提供用户与 I/O 子系统之间的交互界面。它包括用户应用程序和操作系统的系统调用接口,允许用户对设备进行访问和控制。 2. 文件系统缓存层: - 文件系统缓存层负责缓存文件系统中的数据,以提高数据读写的效率。它会在内存中维护一个缓存区,存储最近访问的文件数据,避免频繁地从磁盘读取数据。 3. 设备驱动程序层: - 设备驱动程序层是连接操作系统和硬件设备之间的桥梁。它包括具体的设备驱动程序,用于与硬件设备进行通信和控制。每个设备都有相应的设备驱动程序,负责管理设备的初始化、数据传输、中断处理等操作。 4. 中断处理层: - 中断处理层负责处理设备发出的中断信号。当设备完成一次操作或发生异常时,会触发中断信号,通知 CPU 切换到相应的中断处理程序。中断处理层负责识别和处理不同的中断类型,并调用相应的中断处理程序。 5. 设备控制层: - 设备控制层是 I/O 子系统的底层,直接与硬件设备进行交互。它包括设备控制器和设备本身。设备控制器负责管理设备的寄存器、命令解析、数据传输等操作,而设备本身是具体的硬件设备,如磁盘驱动器、网络接口卡等。 这是一个简化的 I/O 子系统层次结构示例,不同的操作系统可能会有略微不同的实现方式。每个层次都有不同的功能和责任,共同协作以实现高效的输入/输出操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值