File tree Expand file tree Collapse file tree 1 file changed +4
-3
lines changed Expand file tree Collapse file tree 1 file changed +4
-3
lines changed Original file line number Diff line number Diff line change 1414
1515后来在第七章又引入了另外一个外设virtio-block设备,即一个虚拟的磁盘设备。还通过这个存储设备完成了对数据的持久存储,并在其上实现了访问持久性数据的文件系统。对virtio-block设备的I/O访问没有通过RustSBI来完成,而是直接调用了 ``virtio_drivers `` crate中的 ``virtio-blk `` 设备驱动程序来实现的。但我们并没有深入分析这个设备驱动程序的具体实现。
1616
17- 可以说在操作系统中,I/O设备管理无处不在,且与I/O设备相关的操作系统代码--设备驱动程序在整个操作系统中的代码量比例是最高的(Linux/Windows等都达到了75%以上),也是出错概率最大的地方。虽然前面章节的操作系统已经涉及了很多I/O设备访问的相关处理,但我们并没有对I/O设备进行比较全面的分析和讲解。这主要是由于各种I/O设备差异性比较大,操作系统很难象进程 /地址空间/文件那样,对各种I/O设备建立一个一致通用的抽象和对应的解决方案。
17+ 可以说在操作系统中,I/O设备管理无处不在,且与I/O设备相关的操作系统代码--设备驱动程序在整个操作系统中的代码量比例是最高的(Linux/Windows等都达到了75%以上),也是出错概率最大的地方。虽然前面章节的操作系统已经涉及了很多I/O设备访问的相关处理,但我们并没有对I/O设备进行比较全面的分析和讲解。这主要是由于各种I/O设备差异性比较大,操作系统很难像进程 /地址空间/文件那样,对各种I/O设备建立一个一致通用的抽象和对应的解决方案。
1818
19- 但I/O设备非常重要,由于各种I/O(输入输出)设备的存在才使得计算机的强大功能能够展现在大众面前。所以能够管理各种I/O设备的操作系统是让计算机系统在大众中普及的重要因素, 比如对于手机而言,大众关注的不是CPU有多快,内存有多大,而是关注显示是否流畅,触摸是否敏捷这些外设带来的人机交互体验。而这些体验在很大程度上取决于操作系统对外设的管理与访问效率。
19+ 但I/O设备非常重要,由于各种I/O(输入输出)设备的存在才使得计算机的强大功能得以展现在大众面前,事实上对于各种I/O设备的高效管理是计算机系统操作系统能够在大众中普及的重要因素。 比如对于手机而言,大众关注的不是CPU有多快,内存有多大,而是关注显示是否流畅,触摸是否敏捷这些外设带来的人机交互体验。而这些体验在很大程度上取决于操作系统对外设的管理与访问效率。
2020
2121另外,对I/O设备的管理体现了操作系统最底层的设计机制,如中断,并发,异步,缓冲,同步互斥等。这对上层的进程,地址空间,文件等有着深刻的影响。所以在分析、设计和实现了进程,地址空间,文件这些经典的操作系统抽象概念后,我们需要再重新思考一下,具备I/O设备管理能力的操作系统应该如何设计,特别是是否能给I/O设备也建立一个操作系统抽象。如果同学带着这些问题来思考和实践,将会对操作系统有更全面的体会。
2222
9494 本章代码导读
9595-----------------------------------------------------
9696
97- 本章涉及的代码主要与设备驱动相关,需要了解硬件,需要多遍阅读和运行测试相关代码。这里简要介绍一下在内核中添加设备驱动的大致开发过程。对于写设备驱动,首先需要大致了解对应设备的硬件规范。在本章中,主要有两类设备,一类是实际的物理设备 -- UART(QEMU模拟了这种NS16550A UART芯片规范);另外一类是一类虚拟的设备驱动
97+ 本章涉及的代码主要与设备驱动相关,需要了解硬件,需要多遍阅读和运行测试相关代码。这里简要介绍一下在内核中添加设备驱动的大致开发过程。对于写设备驱动,首先需要大致了解对应设备的硬件规范。在本章中,主要有两类设备,一类是实际的物理设备 -- UART(QEMU模拟了这种NS16550A UART芯片规范);另外一类是一类虚拟的设备驱动。
98+
9899然后需要了解外设是如何与CPU连接的。首先是CPU访问外设的方式,在RISC-V环境中,把外设相关的控制寄存器映射为某特定的内存区域(即MMIO映射方式),然后CPU通过读写这些特殊区域来访问外设(即PIO访问方式)。外设可以通过DMA来读写主机内存中的数据,并可通过中断来通知CPU。外设并不直接连接CPU,这就需要了解RISC-V中的平台级中断控制器(Platform-Level Interrupt Controller,PLIC),它管理并收集各种外设中断信息,并传递给CPU。
99100
100101对于设备驱动程序对外设的具体管理过程,大致会有初始化外设和I/O操作。理解两种操作和对应的关键数据结构,就大致理解外设驱动要完成的功能包含哪些内容。每个设备驱动的关键数据结构和处理过程有共性部分和特定的部分。建议从 ``virtio-drivers `` crate 中的 ``examples/riscv/src/main.rs `` 这个virtio设备的功能测试例子入手来分析。
You can’t perform that action at this time.
0 commit comments