繁体
首页
时事
民生
政务
教育
文化
科技
财富
体娱
健康
情感
更多
旅行
百科
职场
楼市
企业
乐活
学术
汽车
时尚
创业
美食
幽默
美体
文摘
操作系统是怎样一步步接收键盘按键的?
科技
2025-01-05 17:02
江苏
将
脚本之家
设为“
星标
⭐
”
第一时间收到文章更新
出品 | 码农的荒岛求生 (ID:escape-it)
大家好,我是岛主小风哥,你有没有想过,按下键盘按键后,相应的字符是怎么一步步显示在屏幕上的?
首先来看硬件部分,你至少应该能想到必须得有键盘和CPU:
之后呢,cpu是怎么知道有键盘按下呢?
为了让键盘按下按键后能通知到CPU,需要借助键盘控制器,keyboard controller,这当然也是硬件:
当按下按键时,键盘控制器能检测到键盘按键:
接着键盘控制器向CPU发出中断:
当CPU接收到中断信号后暂停当然正在执行的代码,在此之前也许CPU正在执行应用程序的代码,表现出来的就是你的程序就在运行:
当然也有可能CPU正在执行操作系统代码,但不管怎样,CPU接收到中断信号后将暂停执行当前的指令然后跳转到一个提前配置好的地址,这个地址指向的就是内核中的处理函数,假设这个函数叫做do_irq()。
中断处理函数do_irq发现中断来自键盘,因此开始调用能处理键盘按键的内核代码,这段内核代码就是所谓的驱动,driver。
驱动程序处理键盘按键后发现按下的是字母a,然后呢?
在类Unix系统中,驱动程序会把字母a写到device file中,也就是设备文件,你可以像访问普通文件那样直接访问设备文件,但它并不是真正的文件。
现在,键盘按键已经从硬件世界来到的了软件世界,也就是内核中。
还是以Unix系统为例,在Unix中负责窗体管理的叫做X Window System,该系统由X server以及X client组成,图形应用程序就是x client,接收来自x server的键盘消息,那么x server又是从哪里知道键盘消息呢?答案就是刚才提到的设备文件:
接下来X server会把键盘按键消息发送给正在获取焦点的窗体,怎么发送呢?
利用的就是进程间通信技术,IPC:
这样,我们的程序就可以获得键盘按键了。
推荐阅读:
我一直在用 Java,但是我一直都不喜欢 Java!
操作系统大神制造的木马,到底有多可怕?
又一操作系统迎来终结,已有十多年历史
看了国产操作系统的进步,微软该沉默了
写了三个影响世界的操作系统,70多岁了,还去办公室敲代码
脚本之家
脚本之家(jb51.net)每天提供最新IT类资讯、原创内容、编程开发的教程与经验分享,送书福利天天在等你!
最新文章
TikTok美女集体逃往小红书,用户一觉醒来懵了……
作业帮开了白菜价,打算签了。。。
京东二面:Redis 为什么这么快?我说是纯内存操作,他对我笑了笑......
为什么字节的Leader这么年轻?
Win11这些新功能,很方便!
MyBatis 批量操作的 5 个坑,千万不要踩了!
12306 可以自动购票了!我羡慕了
Mysql 是什么?架构是怎么样的?
面向对象的弊端是什么?
领导根本不关心你干了多少活,只在意这3点
觉得自己写代码很菜,也没有了当年学习的热情
深圳某小厂后端面试,被拷打了!
刚公布的这款小米顶级旗舰,猛到没边了
揭秘大厂后端面试硬核考点
对于一个想入坑Linux的计算机小白来说,推荐哪个或哪几个Linux发行版?
2024年系统编程语言调查报告:Rust稳居榜首、Zig紧随其后
循环中使用 Thread.sleep,代码评审被老板喷了
分库分表 带来了哪些问题?
最强显卡,5070=4090?
代码质量堪忧!Win11升级弹窗自己卡死崩溃
2024 年 GitHub 上 Star 数增长最快的 Vue 项目
时隔6年,罗永浩新项目上线!这次还是“行业冥灯”吗?
外包能拿30k以上的,为什么还做外包呢?
2025 年值得关注的顶级前端开源项目
形势很严重了,2025年真心劝程序员们做好随时失业的准备!
十三薪≠年终奖!选哪个更合算?
聪明的人,年终都是如何汇报的?
为什么程序员都喜欢晚上敲代码?
操作系统是怎样一步步接收键盘按键的?
华为OD面试:三个线程交替打印ABC如何实现?
史上最短命!苹果新品被曝停产,iPhone价格也崩了
史诗级更新?微信语音支持倍速播放了!
惊艳到了,每个开发人员都必须要知道的6个HTML属性!
来了!OpenAI o1 满血版正式上线!!价格大跳水!
用Rust重写近6万行C++代码是怎样的体验?
MyBatis中的 10 个宝藏技巧!
跨年夜,雷军又刷屏了!
某程序员自曝:凡是打断点调试代码的,都不是真正的程序员,都是外行。我至今没见过专业程序员在编辑器上打断点的
Springboot 2.1.x版本直升 3.1.x版本踩坑过程记录(java8升级到java17)
我一直在用 Java,但是我一直都不喜欢 Java!
这些小 Bug,99% 的程序员都写过!
一天写几行代码算正常?行数如果是考核指标,匿名函数就不该出现~~~
用一个词概括你的2024,是什么?
成为领导之后才发现:公司最想裁的,不是“上班总迟到”的,也不是“下班不看微信的”,而是总把这四句话挂在嘴边的人
操作系统是如何实现的:宏内核 VS 微内核
雷军挖了个95后天才少女,开出千万年薪!
还记得十几年前PHP那个0x00+2=4的Bug吗
Java线程池还能死锁?一篇文章带你搞懂线程池中的一些坑点
哪些你以为正常的设计,其实是故意为了缩短产品寿命?!
一法破万法,未出版就被周鸿祎等多位大佬推荐的爆款书新鲜出炉了....
分类
时事
民生
政务
教育
文化
科技
财富
体娱
健康
情感
旅行
百科
职场
楼市
企业
乐活
学术
汽车
时尚
创业
美食
幽默
美体
文摘
原创标签
时事
社会
财经
军事
教育
体育
科技
汽车
科学
房产
搞笑
综艺
明星
音乐
动漫
游戏
时尚
健康
旅游
美食
生活
摄影
宠物
职场
育儿
情感
小说
曲艺
文化
历史
三农
文学
娱乐
电影
视频
图片
新闻
宗教
电视剧
纪录片
广告创意
壁纸头像
心灵鸡汤
星座命理
教育培训
艺术文化
金融财经
健康医疗
美妆时尚
餐饮美食
母婴育儿
社会新闻
工业农业
时事政治
星座占卜
幽默笑话
独立短篇
连载作品
文化历史
科技互联网
发布位置
广东
北京
山东
江苏
河南
浙江
山西
福建
河北
上海
四川
陕西
湖南
安徽
湖北
内蒙古
江西
云南
广西
甘肃
辽宁
黑龙江
贵州
新疆
重庆
吉林
天津
海南
青海
宁夏
西藏
香港
澳门
台湾
美国
加拿大
澳大利亚
日本
新加坡
英国
西班牙
新西兰
韩国
泰国
法国
德国
意大利
缅甸
菲律宾
马来西亚
越南
荷兰
柬埔寨
俄罗斯
巴西
智利
卢森堡
芬兰
瑞典
比利时
瑞士
土耳其
斐济
挪威
朝鲜
尼日利亚
阿根廷
匈牙利
爱尔兰
印度
老挝
葡萄牙
乌克兰
印度尼西亚
哈萨克斯坦
塔吉克斯坦
希腊
南非
蒙古
奥地利
肯尼亚
加纳
丹麦
津巴布韦
埃及
坦桑尼亚
捷克
阿联酋
安哥拉