返利淘客网站源码,电商怎么做,怎样做多商户网站,网站开发设计文员作者 | 编程技术宇宙责编 | Carol封图 | CSDN 下载自视觉中国中断机制我是CPU一号车间的阿Q#xff0c;我又来了#xff01;我们日常的工作就是不断执行代码指令#xff0c;不过这看似简单的工作背后其实也并不轻松。咱不能闷着头啥也不管一个劲的只管执行代码#xff0c;还… 作者 | 编程技术宇宙责编 | Carol封图 | CSDN 下载自视觉中国中断机制我是CPU一号车间的阿Q我又来了我们日常的工作就是不断执行代码指令不过这看似简单的工作背后其实也并不轻松。咱不能闷着头啥也不管一个劲的只管执行代码还得和连接在主板上的其他单位打交道。经常保持联系的有键盘、鼠标、磁盘哦对还有网卡这家伙最近把我惹到了待会再说这事儿。原以为内存那家伙已经够慢的了没想到跟上面这几位通个信比他更慢咱CPU工厂的时间一刻值千金不能干等着耽误工夫。后来厂里一合计想了个叫中断的办法。在我们车间装了个大灯这些单位想联系我们办事儿就先给我们发一个中断信号大灯就会自动亮起。我们平时工作执行代码指令的时候每执行一条指令就会瞅一眼看看大灯有没有亮起来。一旦发现灯亮了就把手头的工作先放一边去处理一下。我们记性很差的等会处理了完了还得回来接着原来的活继续干为了等会回来还能接的起来走之前得把当前执行的这个线程的各个寄存器的值执行到哪里了等等这些信息都保存在这个线程的栈里去。不过有时候我们在执行非常重要的事情的时候就不想被他们打断。于是我们又在车间里那个eflags寄存器中设置了一个标记如果是1我们才允许被打断如果是0那就算天王老子找我们也不管了。哦不对还有一种不可以屏蔽的中断NMI走得是绿色通道。不过我可不期望有这种事情发生因为一般都没有好事不是电源断电就是温度过高或者总线出了错误等这之类严重的事情。8259A PIC还有一个问题找我们办事儿的单位有很多我们得要区分开来到底是谁来消息了而且要是他们一起来找按什么样优先级顺序处理也是一件头疼的事情。为此厂里单独组建了一个全资的子公司来负责这事儿他就是可编程中断控制器PIC外号8259A其他单位想联系我们都得通过这个PIC我们只需要和PIC进行对接就可以了。我们给办事单位都分配了一个编号叫做中断向量。我们还准备了一个表格叫中断描述符表IDT表格里记录了很多信息其中就有处理这个中断号对应的函数地址。我们找PIC拿到编号后就执行处理函数就OK了。这个表格有点大足足有256项咱CPU车间空间有限放不下就把它放在内存那家伙那里了为了能快速找到这个表专门添置了一个叫idtr的寄存器指向这个表格。其实除了中断我们在执行指令的时候如果遇到了异常情况也会去这个表里执行异常处理函数最常见的比如遇到了除数是0内存地址错误等等情况。这种情况下我们必须主动放下手里的活去处理异常所以我们也说异常是同步的而中断不知道什么时候发生所以是异步的。APIC8259A干的挺不错的不过后来咱们厂扩大规模从单核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万美元比特币却希望“比特币归零”这位亿万富翁公开“比特币鲸鱼”身份真香朕在看了