你管这破玩意儿叫操作系统源码(九)
本文为学习操作系统源码 (低并发编程)所作笔记,仅供学习参考,不做任何商业用途,若有侵权,请联系删除。
第五部分 | 从一个命令的执行看操作系统各模块的运作
第四十回 | 用键盘输入一条命令
我们成功将键盘中断绑定在了 keyboard_interrupt 这个中断处理函数上,也就是说当我们按下键盘 'c' 时,CPU 的中断机制将会被触发,最终执行到这个 keyboard_interrupt 函数中。
我们来到 keyboard_interrupt 函数一探究竟。
1 |
|
很简单,首先通过 IO 端口操作,从键盘中读取了刚刚产生的键盘扫描码,就是刚刚按下 'c' 的时候产生的键盘扫描码。
随后,在 key_table 中寻找不同按键对应的不同处理函数,比如普通的一个字母对应的字符 'c' 的处理函数为 do_self,该函数会将扫描码转换为 ASCII 字符码,并将自己放入一个队列里,我们稍后再说这部分的细节。
核心点就是三个队列 read_q,secondary 以及 write_q。
其中 read_q 是键盘按下按键后,进入到键盘中断处理程序 keyboard_interrupt 里,最终通过 put_queue 函数字符放入 read_q 这个队列。
secondary 是 read_q 队列里的未处理字符,通过 copy_to_cooked 函数,经过一定的 termios 规范处理后,将处理过后的字符放入 secondary。(处理过后的字符就是成"熟"的字符,所以叫 cooked,是不是很形象?)
然后,进程通过 tty_read 从 secondary 里读字符,通过 tty_write 将字符写入 write_q,最终 write_q 中的字符可以通过 con_write 这个控制台写函数,将字符打印在显示器上。
第四十一回 | shell程序读取你的命令
第四十二回 | 进程的阻塞与唤醒
第四十三回 | 解析并执行shell命令
第四十四回 | 读硬盘数据全流程
第四十五回 | 读取硬盘数据的细节
第四十八回 | 信号
操作系统大完结
你管这破玩意儿叫操作系统源码(九)
https://www.spacezxy.top/2023/04/08/OperatingSystem/Operating-system-source-code-10/