认认真真地聊聊中断

本来想写内核如何接收一个网络包这个过程,但发现把整个过程捋顺了,还是很难的。 推导整个过程的起点是中断,包括硬中断和软中断。   而这个过程要是讲清楚吧,感觉在整个网络包接收原理的大流程中有点喧宾夺主。但要是一笔带过吧,那对于这块有困惑的人就很难受,一切的起点没整明白在心里总是个疙瘩。   所以,单拎出来一个主题中断,给大家把这个问题搞明白了,之后讲内核收包时直接引过来就好了,不想看的直接过,想看的就可以有篇前置文章详细了解,美滋滋。   另外,整个操作系统就是一个中断驱动的死循环,操作系统原理如果用一行代码解释,下面这样再合适不过了。 while(true) { doNothing();} 其他所有事情都是由操作系统提前注册的中断机制和其对应的中断处理函数完成,我们点击一下鼠标,敲击一下键盘,执行一个程序,都是用中断的方式来通知操作系统帮我们处理这些事件,当没有任何需要操作系统处理的事件时,它就乖乖停在死循环里不出来。   所以,中断非常重要,它也是理解整个操作系统的根基。掌握它,不亏!   那我们开始吧。 1. 五花八门的中断分类 关于中断的分类,教科书上和网上有很多”标准”答案了,如果你用搜索引擎去寻找答案,可能会找出很多不一样的分类结果。   所以我打算直接在 Intel 手册上找个最官方的标准答案。   在 Intel 手册 “Volume 1 Chapter 6.4 Interrupts and Exception” 给出。 翻译过来就是,中断可以分为中断和异常,异常又可以分为故障、陷阱、中止。   第一句话有点奇怪,啥叫中断分为中断和异常呢?   你看好多文章的时候也是这么写的,不知道你有没有曾疑惑过。但其实原文的意思准确说是,CPU 提供了两种中断程序执行的机制,中断和异常。第一个中断是个动词,第二个中断才是真正的机制种类。   好吧,我感觉原文也挺奇怪的,但人家就这么叫,没辙。接下来我只需要翻译一下就好了,再夹杂点自己的解读。   An interrupt is an asynchronous event that is typically triggered by an… Continue reading 认认真真地聊聊中断