问问题描述
答精选答案

首先从原理上解释一下键盘驱动工作原理,当我们GETCHAR的时候,实际上是用户态程序要求读键盘的内核态的缓冲区(在LINUX系统里其实是个队列),然而这时候该缓冲区内为空(那么该进程SLEEP,也就是您说的屏幕等待状态),这时如果你按下键盘,通过键盘中断驱动程序,把你输入的字符载入内核态的键盘缓冲区(入队列),同时唤醒因为读该缓冲区而SLEEP的进程.读取该字符后,因为是在内核态,而我们GETCHAR()函数就是把内核态内的数据,转移到用户态,内核台缓冲区因字符被读取而出队列(如果无其它情况,键盘的内核缓冲区队列为空),GETCHAR()函数是通过系统调用来实现的,该函数最终肯定是以RETURN来返回结果,而在我们调用GETCHAR()函数后,RETURN的结果以被放入寄存器中.
本文来自作者[快娱乐。]投稿,不代表公众科技网立场,如若转载,请注明出处:https://www.cpst.net.cn/changshijingxuan/202609/1751452.html
评论列表(4条)
我是公众科技网的签约作者“快娱乐。”!
希望本篇文章《有谁知道键盘缓冲区的作用》能对你有所帮助!
本站[公众科技网]内容主要涵盖:教育咨询,知识百科
本文概览:首先从原理上解释一下键盘驱动工作原理,当我们GETCHAR的时候,实际上是用户态程序要求读键盘的内核态的缓冲区(在LINUX系统里其实是个队列),然而这时候该缓冲区内为空(那么该进程SLEEP,也就是您说的屏幕等待状态),这时如果你按下键盘,通过键盘中断驱动程序,把你输入的字符载入内核态的键盘缓冲区(入队列),同时唤醒因为读该缓冲区而SLEEP的进程.读取该字符后,因为是在内核态,而我们GETCHAR()函数就是把内核态内的数据,转移到用户态,内核台缓冲区因字符被读取而出队列(如果无其它情况,键盘