Orange's TTY

       一、TYY任务本质就是增加了一个进程,并且运行在ring1,且优先级调高了。并且设置了键盘中断用于接收键盘输入,并将扫描码存放在缓冲区。task_tyy也就是新加入的进程,循环执行读写缓冲区。

       现在TYY任务和用户进程依次执行(时钟中断),并且TYY任务的优先级高。当遇到系统调用,切换到ring0,执行到内核态不能被时钟中断打断,执行后返回刚才的进程。

       每遇到有键盘输入,和上面的过程一样,往键盘缓冲区输入扫描码。

       Orange's TTY_第1张图片

       

       二、tty.c,keyboard.c,console.c的关系

       Orange's TTY_第2张图片


       Orange's TTY_第3张图片

        

       三、printf系统调用

       细节请参考http://blog.csdn.net/jltxgcy/article/details/8766537

       Orange's TTY_第4张图片 

  

       四、键盘Make Code和Break Code

       Make Code是键盘按下时产生的码,Break Code是键盘放开时产生的码,Break Code是Make Code与0x80相或后的结果。键盘每个按键对应的Make Code和Break Code如下图

       Orange's TTY_第5张图片

       我们用的时候参考keymap.h,其中的一行为

       /* 0x1D - l. Ctrl*/ CTRL_L,CTRL_L, CTRL_R

       第一列为Make Code,第二列为!SHIFT对应的按键值,第三列为SHIFT对应的按键值,第四列为Make Code前面带E0的按键值,观察上图R_Ctrl的Make Code为E0,1D,找到第二列和第三列用代码实现。

你可能感兴趣的:(操作系统,进程,TYY)