练习
================================================

.. toctree::
   :hidden:
   :maxdepth: 4


课后练习
-------------------------------

编程题
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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) 你对本次实验设计及难度/工作量的看法，以及有哪些需要改进的地方，欢迎畅所欲言。
