简简单单的一个ping动作,中间涉及的内容几乎包含了计算机领域里面所有的基础内容,复杂而精妙。
这篇文章一次肯定写不完,最后写完了肯定也不可能包含所有的内容。我对其中的一些内容也早就忘的干净,不过既然写了,就认真写,能写多少写多少,能写多细写多细,并且尽量表达的通俗易懂一点,有哪里不对的地方,别打我,跟我说,我会改。
先上一个大致的流程图,后面也会按照这图里的四个点分开讲
比如我们在命令行中输入了ping www.baidu.com,实际上我们每次敲击一次键盘,操作系统都需要通过中断处理机制来处理事件。诶,这里有几个知识点了:
以单核为例好解释一点,通过将其他处理中的任务暂停下来以满足更高优先级的操作,就是中断。
以个人计算来说,我们最大的需求除了有一台性能牛叉的计算机,还需要让计算机能够快速的,准确的响应我们的操作,比如输入一个“我爱你”,如果让别人先发过去了,那你的爱情不就没了吗?所以敲击键盘表白时,我们希望操作系统能够快速响应并发出消息,但是他要是同时也在处理其他任务怎么办呢?那就把其他任务暂时中断了吧,等我的表白发出去了,你再处理不迟
1:用户在键盘打字,每敲击一次键盘,都会触发一个电信号和一个扫描码
2:将电信号和扫描码送入中断控制器的输入引脚中
3:之后中断控制器会给处理器发出一个中断信号。其中电信号一般会通过中断处理器映射为一个中断值,不同的中断值会有不同的IRQ线处理。扫描码则对应的是每个键,具体的scan code table可以参考:keyboard scan code 表 - JavaShuo
外部中断(External Interrupts):这是最常见的中断类型,用于处理外部设备的中断。它们可以是硬件设备(如网卡、声卡等)或软件生成的中断。在x86架构中,IRQ 0至15用于外部中断。
时钟中断(Timer Interrupts):这是由系统时钟定期触发的中断。它们用于维护系统的计时器,调度任务等。在x86架构中,IRQ 0被系统时钟使用。
键盘中断(Keyboard Interrupts):这是用于处理键盘输入的中断。键盘的按下和释放动作会触发该中断。在x86架构中,IRQ 1被键盘使用。
硬盘中断(Disk Interrupts):这是用于处理硬盘输入/输出操作的中断。当硬盘完成一个输入/输出操作时,会触发该中断。在x86架构中,IRQ 14和IRQ 15被硬盘使用。
网络中断(Network Interrupts):这是用于处理网络输入/输出操作的中断。当网络数据包到达或发送完毕时,会触发该中断。具体使用的IRQ类型取决于网络硬件设备。
USB中断(USB Interrupts):这是用于处理USB设备的中断。当USB设备插入或拔出时,会触发该中断。具体使用的IRQ类型取决于USB控制器的配置
?
先写到这里吧