练习#

课后练习#

编程题#

  1. *** 在Linux的字符(命令行)模式下,编写贪吃蛇小游戏应用程序。

问答题#

  1. * 字符设备的特点是什么?

  2. * 块设备的特点是什么?

  3. * 网络设备的特点是什么?

  4. * 阻塞I/O、非阻塞I/O、多路复用 I/O、信号驱动 I/O、异步I/O这几种I/O方式的特点和区别是?

  5. * IO数据传输有哪几种?各自的特征是什么?

  6. * 描述磁盘I/O操作时间组成。其中的瓶颈是哪部分?

  7. ** RISC-V中的异常,中断的区别是啥?有几类中断?每类中断有哪些具体的常见中断实例?PLIC/CLINT的具体功能是啥?中断可否从M态响应委托给S态响应?S态响应可否委托给U态响应?与中断相关的M态/S态寄存器有哪些,这些寄存器的功能是啥?外设产生一个中断后,PLIC/CPU/OS如何协同进行响应处理的?

  8. ** 是否可以把设备抽象为文件?如果可以,那用户进程对设备发出IO控制命令,如何通过系统调用实现?

  9. ** GPU是外设吗?GPU与CPU交互和数据传输的方式是什么?(需要查看一下相关GPU工作过程的信息)

实验练习#

实验练习包括实践作业和问答作业两部分。本次难度:

实践作业#

支持图形显示的应用#

本章虽然讲述了virtio-gpu设备驱动,且可以直接进行图形显示,但这个设备驱动并没有加入到操作系统中,使得应用程序无法进行图形显示。lab8 的练习要求操作系统支持有彩色图形显示的应用,使得我们可以从单调的字符交互界跳入到多彩的图形界面中。

实验要求#

  • 实现分支:ch9-lab

  • 实验目录要求不变

  • 在裸机上让操作系统支持“贪吃蛇”游戏应用

    需要在操作系统中加入virtio-gpu设备驱动程序;需要实现设备文件 /dev/fb0 和相关操作,用于应用访问显存。

    可以正确执行“贪吃蛇”游戏应用。

问答作业#

  1. 通过阅读和运行试验等分析,你认为在目前的操作系统中,如果运行在用户态,可以响应哪些中断?如果运行在内核态,可以响应哪些中断?请简要描述分析经过。

  2. 对于串口驱动程序,在RustSBI中有具体的实现,请问它与本章讲的串口驱动有何异同之处?

  3. 对于目前操作系统中的 virtio-blk 设备驱动程序,存在哪些可以改进的地方来提升性能?

实验练习的提交报告要求#

  • 简单总结本次实验你编程的内容。(控制在5行以内,不要贴代码)

  • 完成问答问题。

  • (optional) 你对本次实验设计及难度/工作量的看法,以及有哪些需要改进的地方,欢迎畅所欲言。