@@ -40,11 +40,11 @@ CPU连接的设备越来越多,需要在CPU与I/O设备之间增加了一层--
4040
4141**支持中断的设备 **
4242
43- CPU与外设的性能差距在加大,为了不让CPU把时间浪费在等待外设上,即为了解决CPU利用率低的问题,I/O控制器扩展了中断机制(( 如Intel推出的8259可编程中断控制器)。CPU发出I/O命令后,无需轮询忙等,可以干其他事情。但外设完成I/O操作后,会通过I/O控制器尝产生外部中断 ,让CPU来响应这个外部中断。由于CPU无需一直等待外设执行I/O操作,这样就能让CPU和外设并行执行,提高整个系统的执行效率。
43+ CPU与外设的性能差距在加大,为了不让CPU把时间浪费在等待外设上,即为了解决CPU利用率低的问题,I/O控制器扩展了中断机制(如Intel推出的8259可编程中断控制器)。CPU发出I/O命令后,无需轮询忙等,可以干其他事情。但外设完成I/O操作后,会通过I/O控制器产生外部中断 ,让CPU来响应这个外部中断。由于CPU无需一直等待外设执行I/O操作,这样就能让CPU和外设并行执行,提高整个系统的执行效率。
4444
4545.. note ::
4646
47- 中断并非总是比PIO好
47+ ** 中断并非总是比PIO好 **
4848
4949 尽管中断可以做到计算与I/O的重叠,但这仅在慢速设备上有意义。否则,额外的中断处理和上下文切换的代价反而会超过其收益。另外,如果短时间内出现大量的中断,可能会使得系统过载并且引发活锁[MR96]。这种情况下,轮询的方式可以在操作系统自身的调度上提供更多的控制,反而更有效。
5050
@@ -56,19 +56,19 @@ CPU与外设的性能差距在加大,为了不让CPU把时间浪费在等待
5656I/O传输方式
5757--------------------------
5858
59- 在上述的I/O设备发展过程可以看到, CPU主要有三种方式可以与外设进行数据传输:Programmed I/O (简称PIO)、Interrupt、Direct Memory Access (简称DMA)。
59+ 在上述的I/O设备发展过程可以看到, CPU主要有三种方式可以与外设进行数据传输:Programmed I/O (简称PIO)、Interrupt、Direct Memory Access (简称DMA)。
6060
6161Programmed I/O
6262~~~~~~~~~~~~~~~~~~~~~~~~
6363
64- PIO指的CPU通过发出I /O指令的方式来进行数据传输。PIO方式看进一步细分为基于Memory -mapped的PIO(简称MMIO)和Port-mapped的PIO(简称PMIO),MMIO是将I/O设备物理地址映射到内存地址空间,这样CPU就可以通过普通访存指令将数据送到I/O设备在主存上的位置,从而完成数据传输。
64+ PIO指CPU通过发出I /O指令的方式来进行数据传输。PIO方式可以进一步细分为基于Memory -mapped的PIO(简称MMIO)和Port-mapped的PIO(简称PMIO),MMIO是将I/O设备物理地址映射到内存地址空间,这样CPU就可以通过普通访存指令将数据送到I/O设备在主存上的位置,从而完成数据传输。
6565
6666对于PMIO,I/O设备有自己独立的地址空间,CPU若要访问I/O设备,则需要使用特殊的I/O指令,如x86处理器中的 ``IN `` 、``OUT `` 指令。CPU直接使用I/O指令就可以访问到对应的设备。
6767
6868Interrupt based I/O
6969~~~~~~~~~~~~~~~~~~~~~~~~~~
7070
71- 如果采用PIO方式让CPU来获取外设的执行结果,那么这样的I/O软件中有一个CPU读外设相关寄存器的循环,直到CPU收到可继续执行I/O操作的外设信息后,CPU才能进一步做其它事情。如果外设 (如串口)性能很慢,CPU处于不必要的忙等的低效状态中 。
71+ 如果采用PIO方式让CPU来获取外设的执行结果,那么这样的I/O软件中有一个CPU读外设相关寄存器的循环,直到CPU收到可继续执行I/O操作的外设信息后,CPU才能进一步做其它事情。当外设 (如串口)的处理速度远低于CPU的时候,将使CPU处于不必要的忙等的低效状态中 。
7272
7373中断机制的出现,极大地缓解了CPU的负担。CPU可通过PIO方式来通知外设,只要I/O设备有了CPU需要的数据,便会发出中断请求信号。CPU发完通知后,就可以继续执行与I/O设备无关的其它事情。中断控制器会检查I/O设备是否准备好进行传输数据,并发出中断请求信号给CPU。当CPU检测到中断信号,CPU会打断当前执行,并处理I/O传输。
7474
@@ -79,7 +79,7 @@ Direct Memory Access
7979
8080 .. note ::
8181
82- DMA技术工作流程:
82+ ** DMA技术工作流程 **
8383
8484 当CPU想与外设交换一块数据时,它会向DMA控制器发出一条命令。命令内容包括:读或写操作标记,相关的I/O设备的地址,内存的起始地址和长度。然后CPU继续其它工作。DMA控制器收到命令后,会直接从内存中或向内存传送整块数据,这个传输过程不再需要通过CPU进行操作。传送结束后,DMA控制器会通过I/O控制器给CPU发送一个表示DMA操作结束的中断。CPU在收到中断后,知道这次I/O操作完成,可进行后续相关事务的处理。
8585
@@ -113,7 +113,7 @@ I/O接口的交互协议
113113
114114对于一个外设而言,它包含了两部分重要组成部分。第一部分是对外向系统其他部分展现的设备I/O接口(hardware I/O interface),这样操作系统才能通过接口来管理控制外设。所有设备都有自己的特定接口以及典型交互的协议。第二部分是对内的内部结构,包含了设备相关物理实现。由于外在接口的多样性,使得操作系统难以统一管理外设。
115115
116- 如果我们不考虑具体的设备,而是站在一个高度抽象的角度来让软件管理设备,那么我们就不用太关注设备的内部结构,而重点考虑设备的接口如何进行简化。其实一个简化的抽象设备接口需要包括三部分:状态、命令、数据。软件可以读取并查看设备的当前状态,从而根据设备当前状态决定下一步的I/O访问请求;而软件是通过一系列的命令来要求设备完成某个具体的I/O访问请求;在完成一个I/O访问请求中,会设计到将数据传给设备或从设备接收数据 。CPU与设备间的I/O接口的交互协议如下所示:
116+ 如果我们不考虑具体的设备,而是站在一个高度抽象的角度来让软件管理设备,那么我们就不用太关注设备的内部结构,而重点考虑设备的接口如何进行简化。其实一个简化的抽象设备接口需要包括三部分:状态、命令、数据。软件可以读取并查看设备的当前状态,从而根据设备当前状态决定下一步的I/O访问请求;而软件是通过一系列的命令来要求设备完成某个具体的I/O访问请求;在完成一个I/O访问请求中,会涉及到将数据传给设备或从设备接收数据 。CPU与设备间的I/O接口的交互协议如下所示:
117117
118118.. code :: Rust
119119
0 commit comments