阿里___字符从键盘输入到屏幕显示过程
来源:互联网 发布:美橙域名 编辑:程序博客网 时间:2024/05/23 18:32
面试官说,看你是电气的,我就问你一个简单的问题,然后,我机智的说了下,这个只有前面是我们专业的,后面的应该是计算机原理与体系 结构中的内容了。。。。
额,是这样的吗?
后来去查了一下资料,总结下网上的东西,如下。。
- 键盘被按下后,产生了硬件中断信号。
- 计算机高级中断控制器(IOAPIC)选择CPU处理核心以及软件中断编号,并发送给中断描述符表(IDT)处理。
- 计算机根据IDT选择中断处理函数。
- 处理函数处理并通知端口驱动获取按键的信息。
- 端口驱动将数据封装,以IRP(I/O request package)形式传递给上层处理程序。
- 等待输入的进程获得数据,处理并交给目标进程。
- 目标进程显示输入。
键盘部分
1)首先知道一下键盘的构成;6位的计数器经过两个八选一译码器对键盘进行扫描 在键盘没有任何按键时,扫描随着计数器的循环计数反复进行。
可以这么想,扫描就是一束光线,当没有键被按下时,光线可以横穿过键盘的任何位置。
2)若有键按下,扫描会发现该信号(键被按下以后挡住了光线的横穿),该信号使计数器停止计数,将扫描码发送给 8042。
每一个键的位置都用一组数字表示,这组数字就是所谓的扫描码。
3)8042将该扫描码放在缓冲区中,并告诉8259A产生了中断。
缓冲区大小为1byte,如果此时键盘又有新的键按下,8042将不再接收,一直等到缓冲区被清理。
OS部分
4)8259A识别出键盘中断,将cpu的中断寄存器的特定位置为1。
注意到目前为止cpu一直再执行其它程序或者空闲,根本还对键盘按下的事件没做任何反应。虽然描述的比较复杂,但这个过程其实特快。
5)接下来就是典型的中断处理过程了。 cpu执行完一条指令后,发现有中断存在,进入中断周期,通过IDT的映射将其处理交给键盘处理程序。
6)键盘处理程序第一步就是从8042的缓冲区(仅有一个字节)将该扫描码移动到键盘缓冲区(链表实现的 大小可调整,太大了也没什么用),此时可以接受下一个字符按键了。
7)若键盘缓冲区非空,则开始处理这些按键码,首先将扫描码转换为ASCII码
若是可打印字符如a 则将其显示
其他功能键做相应处理。
显示部分
可通过bios调用或者写显存实现。
1 将该字符的ASCII码加上一些属性(如颜色控制,最简单的rgb,此时只有最纯的rgb三种颜色及其叠加的组合共8种),这些属性也是由01表示的,0代表无,1代表有 放入显存中(集显就是内存中的特定位置 )。
2 字符发生器,通过读这个特定位置的数据,将ASCII码及其属性信息转换为一个光点矩阵,1表示有光。
字符发生器实际是一个rom,用映射的功能实现这种转换。
如ASCII = 65, 字符发生器会把其转换为a的光点矩阵,颜色由后面的3把枪控制。
3 该光点矩阵可以作为显示器的输入信号。每个点都有3把电子枪发射(分别发rgb)的光叠加成的。
Refshttp://blog.csdn.net/bingjing12345/article/details/7830710
0 0
- 阿里___字符从键盘输入到屏幕显示过程
- 字符从键盘输入到在显示器显示出来的详细过程
- 字符从键盘输入到在显示器显示出来的详细过程
- 从按下键盘到屏幕上显示字符计算机经过了哪些过程
- 【c语言】从键盘输入BOY三个字符,然后把它们输出到屏幕
- c语言:从键盘输入BOY三个字符,然后把它们输出到屏幕。
- 从键盘输入字符保存到文件
- 从键盘输入若干行字符(每行长度不等),输入后把它们存储到一磁盘文件中,再从该文件中读入这些数据,将其中小写字母转换成大写字母后显示在屏幕上
- 课设二--显示字符到屏幕
- 从键盘输入若干个字符,逐个存到磁盘文件中,直到输入‘\n’为止,并将建立的文本文件的内容在存入文件的同时,在屏幕上显示出来。。
- 从键盘输入若干个字符,逐个存到磁盘文件data.txt中,直到输入’\n’为止,并将建立的文本文件的内容在存入文件的同时,在屏幕上显示出来:
- 从键盘输入并显示
- 从键盘输入一个大写字母将其转换为小写字母,将转换后的小写字母及其十进制的ASCII码显示到屏幕上
- 从键盘输入字符并且输出
- Linux下C语言键盘输入密码时无回显(屏幕不显示字符)
- Linux下C语言键盘输入密码时无回显(屏幕不显示字符)
- 键盘输入字符到程序Demo
- 从键盘输入数据并显示
- android的ImageView动画自动播放
- 六、数据库优化(上)——Mysql主从复制搭建
- Android Fragment 详解 2016 干货
- 解决Eclipse发布后到tomcat后目录下没有class文件
- mysql -- 区分apk包中,java包,android包,第三方包的方法
- 阿里___字符从键盘输入到屏幕显示过程
- Android Notification
- XZ_HTML之HTML脚本、实体和URL
- 日期工具 -DateUtils
- hdu5754Life Winner Bo+博弈
- ListView
- Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)
- 各种数据类型所占的字节
- 使用NodeJS调用Dubbo工程