riscv-xv6中进程和设备的交互过程分析

这篇文章以sh进程为例介绍操作系统中进程和设备交互的过程,涉及traps的流程处理,硬件驱动,进程的阻塞、唤醒和调度等部分的相关知识技能点。

1、在xv6中,设备以一种特殊的文件类型(FD_DEVICE)存在,文件结构体的描述见[2],其中major成员变量记录设备文件的主设备号,用于区分不同设备。参考[3]以sh程序为例介绍了进程和uart硬件交互的过程。从上述过程的分析来看,硬件中断既可以在用户态触发,也可以在内核态触发。

2、从用户态触发的usertrap和内核态触发的kerneltrap都会调用devintr 函数中进行中断处理实现,具体函数的注释见[6]

3、uart设备是遵循串口协议的双工通信的设备,能实现信息的收发,在xv6系统中uart可以模拟输入的键盘和输出的终端(屏幕)设备。以用户进程等待接收字符串为例,可以参考[3]中的具体的示例的流程处理分析。

问题:在sh这样的程序中[4],console接收用户键盘输入的字符(进程本身处于阻塞挂起状态[5]),同时也要反馈到显示终端,当用户输入回车时才唤醒进程处于ready等待调度,反馈到终端的过程具体时怎样的?

回答:consoleintr函数里将接收的字符放入接收缓冲区,同时通过consputc函数将字符发送到终端,uartintr驱动响应函数既能够处理接收缓冲区(如某一个进程等待用户输入),也能够处理发送缓冲区(如另外一个进程程序输出内容到终端)。

References


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *