练习#
课后练习#
编程题#
*** 在Linux的字符(命令行)模式下,编写贪吃蛇小游戏应用程序。
问答题#
* 字符设备的特点是什么?
* 块设备的特点是什么?
* 网络设备的特点是什么?
* 阻塞I/O、非阻塞I/O、多路复用 I/O、信号驱动 I/O、异步I/O这几种I/O方式的特点和区别是?
* IO数据传输有哪几种?各自的特征是什么?
* 描述磁盘I/O操作时间组成。其中的瓶颈是哪部分?
** RISC-V中的异常,中断的区别是啥?有几类中断?每类中断有哪些具体的常见中断实例?PLIC/CLINT的具体功能是啥?中断可否从M态响应委托给S态响应?S态响应可否委托给U态响应?与中断相关的M态/S态寄存器有哪些,这些寄存器的功能是啥?外设产生一个中断后,PLIC/CPU/OS如何协同进行响应处理的?
** 是否可以把设备抽象为文件?如果可以,那用户进程对设备发出IO控制命令,如何通过系统调用实现?
** GPU是外设吗?GPU与CPU交互和数据传输的方式是什么?(需要查看一下相关GPU工作过程的信息)
实验练习#
实验练习包括实践作业和问答作业两部分。本次难度: 中
实践作业#
支持图形显示的应用#
本章虽然讲述了virtio-gpu设备驱动,且可以直接进行图形显示,但这个设备驱动并没有加入到操作系统中,使得应用程序无法进行图形显示。lab8 的练习要求操作系统支持有彩色图形显示的应用,使得我们可以从单调的字符交互界跳入到多彩的图形界面中。
实验要求#
实现分支:ch9-lab
实验目录要求不变
在裸机上让操作系统支持“贪吃蛇”游戏应用
需要在操作系统中加入virtio-gpu设备驱动程序;需要实现设备文件
/dev/fb0
和相关操作,用于应用访问显存。可以正确执行“贪吃蛇”游戏应用。
问答作业#
通过阅读和运行试验等分析,你认为在目前的操作系统中,如果运行在用户态,可以响应哪些中断?如果运行在内核态,可以响应哪些中断?请简要描述分析经过。
对于串口驱动程序,在RustSBI中有具体的实现,请问它与本章讲的串口驱动有何异同之处?
对于目前操作系统中的
virtio-blk
设备驱动程序,存在哪些可以改进的地方来提升性能?
实验练习的提交报告要求#
简单总结本次实验你编程的内容。(控制在5行以内,不要贴代码)
完成问答问题。
(optional) 你对本次实验设计及难度/工作量的看法,以及有哪些需要改进的地方,欢迎畅所欲言。