理解系统补充--硬件,网络

📅 2026/8/3 4:23:48
理解系统补充--硬件,网络
硬件1.设备控制器为了屏蔽设备之间的差异每个设备都有一个叫设备控制器Device Control 的组件比如硬盘有硬盘控制器、显示器有视频控制器等。因为这些控制器都很清楚的知道对应设备的用法和功能所以 CPU 是通过设备控制器来和设备打交道的。设备控制器里有芯片它可执行自己的逻辑也有自己的寄存器用来与 CPU 进行通信比如通过写入这些寄存器操作系统可以命令设备发送数据、接收数据、开启或关闭或者执行某些其他操作。通过读取这些寄存器操作系统可以了解设备的状态是否准备好接收一个新的命令等。实际上控制器是有三类寄存器它们分别是状态寄存器Status Register、 命令寄存器Command Register以及数据寄存器Data Register如下图这三个寄存器的作用数据寄存器CPU 向 I/O 设备写入需要传输的数据比如要打印的内容是「Hello」CPU 就要先发送一个 H 字符给到对应的 I/O 设备。命令寄存器CPU 发送一个命令告诉 I/O 设备要进行输入/输出操作于是就会交给 I/O 设备去工作任务完成后会把状态寄存器里面的状态标记为完成。状态寄存器目的是告诉 CPU 现在已经在工作或工作已经完成如果已经在工作状态CPU 再发送数据或者命令过来都是没有用的直到前面的工作已经完成状态寄存标记成已完成CPU 才能发送下一个字符和命令。CPU 通过读写设备控制器中的寄存器控制设备这可比 CPU 直接控制输入输出设备要方便和标准很多。这可比 CPU 直接控制输入输出设备要方便和标准很多。另外 输入输出设备可分为两大类 块设备Block Device和字符设备Character Device。块设备把数据存储在固定大小的块中每个块有自己的地址硬盘、USB 是常见的块设备。字符设备以字符为单位发送或接收一个字符流字符设备是不可寻址的也没有任何寻道操作鼠标是常见的字符设备。块设备通常传输的数据量会非常大于是控制器设立了一个可读写的数据缓冲区。CPU 写入数据到控制器的缓冲区时当缓冲区的数据囤够了一部分才会发给设备。CPU 从控制器的缓冲区读取数据时也需要缓冲区囤够了一部分才拷贝到内存。这样做是为了减少对设备的频繁操作。那 CPU 是如何与设备的控制寄存器和数据缓冲区进行通信的端口 I/O每个控制寄存器被分配一个 I/O 端口可以通过特殊的汇编指令操作这些寄存器比如 in/out 类似的指令。内存映射 I/O将所有控制寄存器映射到内存空间中这样就可以像读写内存一样读写数据缓冲区。I/O 控制方式每种设备都有一个设备控制器控制器相当于一个小 CPU它可以自己处理一些事情但有个问题是当 CPU 给设备发送了一个指令让设备控制器去读设备的数据它读完的时候要怎么通知 CPU 呢控制器的寄存器一般会有状态标记位用来标识输入或输出操作是否完成。第一种轮询等待的方法让 CPU 一直查寄存器的状态直到状态标记为完成。第二种方法 —— 中断通知操作系统数据已经准备好了。我们一般会有一个硬件的中断控制器当设备完成任务后触发中断到中断控制器中断控制器就通知 CPU一个中断产生了CPU 需要停下当前手里的事情来处理中断。中断有两种一种软中断例如代码调用 INT 指令触发。一种是硬件中断就是硬件通过中断控制器触发的。但中断的方式对于频繁读写数据的磁盘并不友好这样 CPU 容易经常被打断会占用 CPU 大量的时间。对于这一类设备的问题的解决方法是使用 DMADirect Memory Access 功能它可以使得设备在 CPU 不参与的情况下能够自行完成把设备 I/O 数据放入到内存。那要实现 DMA 功能要有 「DMA 控制器」硬件的支持。DMA 的工作方式如下CPU 需对 DMA 控制器下发指令告诉它想读取多少数据读完的数据放在内存的某个地方就可以了接下来DMA 控制器会向磁盘控制器发出指令通知它从磁盘读数据到其内部的缓冲区中接着磁盘控制器将缓冲区的数据传输到内存当磁盘控制器把数据传输到内存的操作完成后磁盘控制器在总线上发出一个确认成功的信号到 DMA 控制器DMA 控制器收到信号后DMA 控制器发中断通知 CPU 指令完成CPU 就可以直接用内存里面现成的数据了仅仅在传送开始和结束时需要 CPU 干预。