作者 | 编程技术宇宙

责编 | Carol

封图 | CSDN 下载自视觉中国

中断机制

我是CPU一号车间的阿Q,我又来了!

我们日常的工作就是不断执行代码指令,不过这看似简单的工作背后其实也并不轻松。

咱不能闷着头啥也不管一个劲的只管执行代码,还得和连接在主板上的其他单位打交道。经常保持联系的有键盘、鼠标、磁盘,哦对,还有网卡,这家伙最近把我惹到了,待会再说这事儿。

原以为内存那家伙已经够慢的了,没想到跟上面这几位通个信比他更慢,咱CPU工厂的时间一刻值千金,不能干等着,耽误工夫。后来厂里一合计,想了个叫中断的办法。

在我们车间装了个大灯,这些单位想联系我们办事儿,就先给我们发一个中断信号,大灯就会自动亮起。我们平时工作执行代码指令的时候,每执行一条指令就会瞅一眼看看大灯有没有亮起来。一旦发现灯亮了,就把手头的工作先放一边,去处理一下。

我们记性很差的,等会处理了完了还得回来接着原来的活继续干,为了等会回来还能接的起来,走之前得把当前执行的这个线程的各个寄存器的值,执行到哪里了等等这些信息都保存在这个线程的栈里去。

不过有时候我们在执行非常重要的事情的时候,就不想被他们打断。于是我们又在车间里那个eflags寄存器中设置了一个标记,如果是1我们才允许被打断,如果是0那就算天王老子找我们也不管了。

哦不对,还有一种不可以屏蔽的中断NMI,走得是绿色通道。不过我可不期望有这种事情发生,因为一般都没有好事,不是电源断电就是温度过高,或者总线出了错误等这之类严重的事情。

8259A PIC

还有一个问题,找我们办事儿的单位有很多,我们得要区分开来,到底是谁来消息了,而且要是他们一起来找,按什么样优先级顺序处理,也是一件头疼的事情。

为此,厂里单独组建了一个全资的子公司来负责这事儿,他就是可编程中断控制器PIC,外号8259A,其他单位想联系我们都得通过这个PIC,我们只需要和PIC进行对接就可以了。

我们给办事单位都分配了一个编号,叫做中断向量。我们还准备了一个表格叫中断描述符表IDT,表格里记录了很多信息,其中就有处理这个中断号对应的函数地址。我们找PIC拿到编号后就执行处理函数就OK了。

这个表格有点大,足足有256项,咱CPU车间空间有限,放不下,就把它放在内存那家伙那里了,为了能快速找到这个表,专门添置了一个叫idtr的寄存器指向这个表格。

其实除了中断,我们在执行指令的时候如果遇到了异常情况,也会去这个表里执行异常处理函数,最常见的比如遇到了除数是0,内存地址错误等等情况。

这种情况下,我们必须主动放下手里的活,去处理异常,所以我们也说异常是同步的,而中断不知道什么时候发生,所以是异步的。

APIC

8259A干的挺不错的,不过后来咱们厂扩大规模,从单核CPU变成了多核,他就有点应付不过来了。

终于有一天,厂里召开会议,把8259A给撤了,成立了一个新的全资子公司叫高级可编程中断控制器APIC,名字就多了个高级两个字,干的活还是一样的。

不过你还别说,这两个字还真不是吹嘘,比8259A不知道高到哪里去了。

这个APIC的新公司一上台,就成立了两个部门,一个叫I/O APIC,负责接待那些要找我们办事儿的单位,一个叫Local APIC,以外包的形式入驻到我CPU的各个车间工作,因为就挨着我们办公,所以取名叫Local。

I/O APIC收到中断信号以后,根据自己的策略就分发到对应的Local APIC,咱们八个车间就可以专心处理了,为我们省了不少事儿。

不仅如此,通过这个外包团队,我们八个车间还能向彼此发起中断请求,我们把这个叫做处理器间中断Inter-Processor Interrupt,简称IPI

中断亲和性

每当网络中有数据包到来,网卡那家伙就发送一个中断消息过来,告诉我们去处理。

不过最近不知道怎么回事,网络数据量激增。咱们厂里明明有8个车间,他非得一个劲的只给我们发消息,搞得我们手头的工作老是被打断,忙得不可开交。

终于,我忍不住了,去找网卡那家伙理论了一番。不过他告诉我,这也不能怪他,分发给谁处理,那是APIC在负责。

想想也是,回头我就去了APIC那里,要求他们分摊一点给别的车间处理。

APIC表示这他们做不了主,得让厂里来决定。

没过几天,厂里开了个会,参会的有各车间代表、APIC负责人,还请了操作系统那边的相关代表过来。

会上,大家为了此事争执不休。

二号车间虎子:“阿Q,谁叫你们一号车间是Bootstrap Processor,你们就多辛苦一点嘛”

三号车间代表:“你这话说的不合适,大家是一个Team,要互相帮助!要不这样,既然有这么多单位要联系我们,咱就分下工,比如一号车间负责网卡,二号负责磁盘,我们三号负责键盘,以此类推”

五号车间代表:“你想的倒是挺美哦,键盘一天能发多少中断,网卡一天要发多少中断,你净挑轻松的干。这样吧,咱就用随机分发进行负载均衡你们觉得怎么样?”

八号车间代表:“随机个啥啊,多麻烦,依我看呐咱8个车间就轮流来呗”

这时,领导问操作系统代表有没有什么建议。

这代表站起身来,推了推眼镜说到:“几位有没有听过线程的CPU亲和性?”

大家都摇了摇头,问到:“这是个什么意思?”

“就是有些线程想绑定在你们之中的某一个核上面执行,不希望一会儿在这个核执行,一会儿在那个核执行”

我接过他的话:“好像是有这么回事儿,之前有遇到过,有个线程一直被分配到我们一号车间,不过我们对这个不用关心吧,执行谁不是干活啊,对我们都一个样”

代表摇了摇头,“唉,这可不一样!你们每个核的一二级缓存都是自己在管理,要是换到别的核,这缓存多半就没用了,又得重新来建立,这换来换去的岂不是瞎耽误功夫嘛!对于一般的线程他们倒是不关心,但是有些线程执行大量的内存访问和运算处理,又对性能要求很高的话,那就很在意这个问题了”

我们几个都恍然大悟,纷纷点头。

虎子起身问到:“那你们是如何实现这个亲和性的呢?这跟我们今天的会议又有什么关系呢?”

代表继续回答说到:“我先回答你的第一个问题。线程调度是我们操作系统完成的工作,我们提供了API接口,线程通过调用这些接口表明自己的亲和性意愿,我们在调度的时候就能按照他们的意愿把线程分配给你们来执行。”

代表喝了一口水接着说到:“我再回答你的第二个问题。既然线程可以有亲和性,那中断也可以按照这个思路来分发啊!APIC默认有一套分发策略,但是也提供亲和性的设置,可以指定谁哪些核来处理,这样不用把规矩定死,灵活可变,岂不更好?”

刚说完,会议室门口突然出现一年轻少年,挥手将操作系统代表唤了出去。

接下来,我们详细讨论了这种方案的可行性,最后大家一致决定,就照这么办,我们一起提出了一个叫中断亲和性的东西,操作系统那边提供一个可配置的入口smp_affinity,可以通过设置各处理器核的掩码来决定中断交由谁来处理,APIC回去负责落地支持。

有了这套方案,再遇到网络高峰期,咱们一号车间的压力就有办法缓解了。

我们刚刚达成一致,操作系统代表返回会议室,神色凝重的说到:“不好意思各位,操作系统那边有点事情需要赶回去处理一下,先走一步了”

未完待续······

彩蛋

随着网卡的一声中断,一个新的数据包来到了这片土地。

帝国网络部新来的年轻人显然没有意识到危险的到来······

预知后事如何,请关注后续精彩······

推荐阅读
  • 138 张图带你 MySQL 入门!

  • 如何在 Kubernetes 上配置 Jenkins?

  • 这 10 行比较字符串相等的代码给我整懵了,不信你也来看看

  • 200 个工具分析机器学习十年:前途未卜、工程师是核心!

  • 天下苦苹果久矣:面对苹果税,开发者揭竿而起!

  • 独家揭秘!抖音爆款漫画变身特效的背后技术

  • 2013年买了100万美元比特币却希望“比特币归零”,这位亿万富翁公开“比特币鲸鱼”身份

真香,朕在看了!

CPU 明明 8 个核,网卡为啥拼命折腾一号核?相关推荐

  1. 关于双网卡PVE:openwrt(LEDE) + win10直通核显+ DSM918+ 实现HDMI与声卡直通HTPC的解决方案!!

    关于PVE win10直通核显与HDMI声卡直通的解决方案 关于双网卡PVE:openwrt(LEDE) + win10直通核显+ DSM918+ 实现HDMI与声卡直通HTPC的解决方案!! 本人硬 ...

  2. ESP32双核CPU,利用核0实现蓝牙打印机打印,核1完成常规控制

    ESP32双核CPU,利用核0实现蓝牙打印机打印,核1完成常规控制 目的 程序编制 总结 目的 开发一个仪表,在使用过程中发现用ESP32控制打印机和主控制有冲突,会造成数据采集流程慢.而控制蓝牙打印 ...

  3. 8核和16核服务器性能差异,intel再次科普:8核处理器玩游戏最好,16核真心没必要...

    一年一度的双十一购物狂欢节已经落下了帷幕,各大电商也忙着整理自己的战报.在2019年JD双十一的CPU销售额TOP5榜单中AMD首次超越了intel占据了3个席位,分别是R7 3700X.R7 380 ...

  4. 大学计算机专业核显和集显,分不清核显和独显?一分钟带你了解清楚

    萌新.小白不管在那个复方都最容易被蒙骗和吃亏,在硬件行业更是如此,因为硬件保质能力远强于一般的产品,这里能做很多文章,之前我们也科普过CPU最容易被蒙骗的地方是分类和命名, 而今天而我们在针对萌新科普 ...

  5. 双核跟四核的区别linux,双核和四核有什么区别?教你区分双核和四核的方法

    很多网友在讨论讨论电脑双核和四核有什么区别?我们都知道电脑CPU最重要的组成部分,CPU中心那块隆起的芯片就是核心.有些用户发现有的CPU型号虽然是双核,但是性能比四核好,那么双核和四核有什么区别?本 ...

  6. 计算机几核的作用,电脑处理器最高几核_如何查看电脑属于几核(方法步骤教程)...

    描述 随着电脑硬件的发展,一台电脑的核数越来越多,电脑运行速度也越来越快.本文首先介绍了什么是几核及核数目是不是越多越好的解答,其次介绍了电脑处理器最高几核,最后阐述了如何查看电脑属于几核的步骤方法, ...

  7. 快速上手Xilinx DDR3 IP核(4)----把MIG IP核封装成一个FIFO(下)(Native接口)

    写在前面 本文将把Xilinx的MIG IP核DDR3的Native接口进行二次封装,将其封装成一个类似FIFO的接口,使其应用起来更加方便简单. 本文为下篇,建议与上篇一起阅读,有利于理解: 快速上 ...

  8. 注意啦,公司注册核名需要秉承哪四种核名原则出台了

    纵观成功的企业都有一个共同的特点,那就是公司名取得特别好.那么,如何取一个便于大家记忆且有内涵深度的名字呢?公司核名要注意哪些问题呢?权鹏集团企业服务管家今天给大家分享一下公司核名注意事项,希望能够帮 ...

  9. c# 获取所有的进程的cpu使用率_Linux CPU使用率很高,但为啥却找不到高CPU的进程

    案例分析 你的准备 今天依旧探究系统CPU使⽤率⾼的情况,所以这次实验的准备⼯作,与上节课的准备⼯作基本相同,差别在于案例所⽤的Docker 镜像不同. 本次还是基于 Ubuntu 18.04,同样适 ...

最新文章

  1. 如何从异步调用返回响应?
  2. C语言goto语句的使用
  3. poj 2240 Arbitrage (floyd 变形)
  4. Oracle SQL脚本学习记录一
  5. pytorch学习入门 (二) Variable(变量)
  6. WordPress苏醒Grace v8.2博客主题模板去sq版
  7. 《深入理解计算机系统》(2) 信息的表示和处理
  8. python数据结构与算法——栈、队列与双端队列
  9. python土味情话_有哪些比较新的土味情话?
  10. 通过swagger下载的文件乱码解决方法,求解
  11. 祝贺父亲节快乐的python代码_祝福父亲节快乐的句子50句
  12. as常用固定搭配_英语专业四级常用固定搭配
  13. 高红梅:第二章 海明威个人身份的探寻 第一节 性别身份意识与代际关系书写
  14. nodejs入门视频教程 Node.js Web开发框架
  15. javascript中获取非行间样式的方法
  16. 三屏指挥调调度终端/三屏计算机/一机三屏指挥调度/三屏融合指挥调度
  17. 微信的红包算法 了解一下两种就可以了
  18. postgresql启动流程之信号初始化
  19. 从内积、外积和叉乘到多维空间的理解
  20. Ubuntu 安装Samba教程

热门文章

  1. 开题报告方案论证_观点讨论研究方案、立项申报书、开题报告的联系和区别
  2. android contacts 编辑,如何在Android中的.csv文件中逐行编写contactn...
  3. arduino 停止程序_极路由1S OpenWrt开机自启程序及串口调试
  4. promise的三种状态_一.Promise中核心逻辑的实现
  5. 那些年,乘风破浪的科学家们
  6. 李航:未来若干年,AI 技术发展可能会进入平缓期
  7. 刚刚,三位科学家获得2019年诺贝尔物理学奖!
  8. 他们也曾在数学“苦海”里痛不欲生
  9. mysql root密码过期了_Mac下重置mysql的root密码
  10. python增删改查mysql_python对数据库mysql的操作(增删改查)