diff --git a/source/chapter9/2device-driver-0.rst b/source/chapter9/2device-driver-0.rst index 2309e70f..6de209fa 100644 --- a/source/chapter9/2device-driver-0.rst +++ b/source/chapter9/2device-driver-0.rst @@ -10,7 +10,7 @@ 驱动程序概述 ---------------------------------------- -很难为驱动程序提供一个精确的定义。基本而言,驱动程序是一种软件组件,是操作系统与机外设之间的接口,可让操作系统和设备彼此通信。从操作系统架构上看,驱动程序与I/O设备靠的更近,离应用程序更远,这使得驱动程序需要站在协助所有进程的全局角度来处理各种I/O操作。这也就意味着在驱动程序的设计实现中,尽量不要与单个进程建立直接的联系,而是在全局角度对I/O设备进行统一处理。 +很难为驱动程序提供一个精确的定义。基本而言,驱动程序是一种软件组件,是操作系统与外设之间的接口,可让操作系统和设备彼此通信。从操作系统架构上看,驱动程序与I/O设备靠的更近,离应用程序更远,这使得驱动程序需要站在协助所有进程的全局角度来处理各种I/O操作。这也就意味着在驱动程序的设计实现中,尽量不要与单个进程建立直接的联系,而是在全局角度对I/O设备进行统一处理。 上面只是介绍了CPU和I/O设备之间的交互手段。如果从操作系统角度来看,我们还需要对特定设备编写驱动程序。它一般需包括如下一些操作: @@ -253,7 +253,7 @@ 平台级中断控制器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -在之前的操作系统中,已经涉及到中断处理,但还没有处理外设(时钟中断时RISC-V 处理器产生的)产生的中断。如果要让操作系统处理外设中断,就需要对中断控制器进行初始化设置。在RISC-V中,与外设连接的I/O控制器的一个重要组成是平台级中断控制器(Platform-Level Interrupt Controller,PLIC),它的一端汇聚了各种外设的中断信号,另一端连接到CPU的外部中断引脚上。当一个外部设备发出中断请求时,PLIC 会将其转发给 RISC-V CPU, CPU 会执行对应的中断处理程序来响应中断。通过RISC-V的 ``mie`` 寄存器中的 ``meie`` 位,可以控制这个引脚是否接收外部中断信号。当然,通过RISC-V中M Mode的中断委托机制,也可以在RISC-V的S Mode下,通过 ``sie`` 寄存器中的 ``seie`` 位,对中断信号是否接收进行控制。 +在之前的操作系统中,已经涉及到中断处理,但还没有处理外设(时钟中断是 RISC-V 处理器产生的)产生的中断。如果要让操作系统处理外设中断,就需要对中断控制器进行初始化设置。在RISC-V中,与外设连接的I/O控制器的一个重要组成是平台级中断控制器(Platform-Level Interrupt Controller,PLIC),它的一端汇聚了各种外设的中断信号,另一端连接到CPU的外部中断引脚上。当一个外部设备发出中断请求时,PLIC 会将其转发给 RISC-V CPU, CPU 会执行对应的中断处理程序来响应中断。通过RISC-V的 ``mie`` 寄存器中的 ``meie`` 位,可以控制这个引脚是否接收外部中断信号。当然,通过RISC-V中M Mode的中断委托机制,也可以在RISC-V的S Mode下,通过 ``sie`` 寄存器中的 ``seie`` 位,对中断信号是否接收进行控制。 .. note::