连续,英文名为Interrupt,计算机的国际里处处都有连续,任何作业都离不开连续,能够说整个计算机体系便是由连续来驱动的。那么什么是间优先级排序断?简略来说便是CPU停下当时的作业使命,去处理其他作业,处理完后回来继续实施方才的使命,这一进程便是连续。

本文旨在进一步揭开连续机制的面纱,理清连续优先级最低的运算符是什么的进程,就连续做出以下几个方面的介绍:连续分类,连续描绘符表,连续操控器,和连续进程。详细的思维导图如下:

一文讲透计算机的“中止”

连续分类

一文讲透计算机的“中止”

1

外部连续

1、可屏蔽连续经过INTR线向CPU央求的连续,首要来自外部设备如硬盘,打印程序员一分钟毛遂自荐机,网卡等。此类连续并不会影响体系作业,可随时处理,甚程序员需求什么学历至不处理,所以名为可屏蔽连续。

2、不行屏蔽连续经过NMI线向CPU央求的连续,如电源掉电,硬件线路缺陷等。这儿不行屏蔽的意思不是不行以屏蔽,不建议屏蔽,而是问题太大,屏蔽不了,不能屏蔽优先级队列的意思。

注:INTR和NMI都是CPU的引脚

2

内部连续(软连续,失常)

1、圈套:是一种有意的,预先安排的失常作业,一般是在编写程序时成心设下的圈套指令,然后实施到圈套指令后,CPU将会调用特定程操作体系是一种什么软件序进行相应的处理,操作体系当时的装备不能运转此应用程序处理完毕后回来到圈套指令的下linux中文乱码视频一条指令。如体系调用,程序调试功用等。

虽然咱们往常写程序时好像并没有设下圈套,那是由于往常所用的高档语言对底层的指令进行了太多层的笼统封装,已看不到底层的完毕,但其实是存在的。例如printf函数,最底层的完毕中会数组c语言有一条int 0x80指令,这便是一条圈套指令,运Linux用0x80号数组和链表的差异连续进行体系调用。

**2、缺陷:缺陷是在引起缺陷操作体系是计算机体系的一种的指令被实施,但还没有实施完毕时,CPU检测到的一类的意外作业。**犯错时交由缺陷处理程序处理,假定能处理修正这个差错,就将操控回来到引起缺陷的指令即CPU从头执这条指令。假定不能处理就报错

常见的缺陷为缺页,当CPU引用的虚拟地址对应的物理页不优先级越小越优先吗存在时就会产生缺陷。缺页失常是能够修正的,有着专门的缺页处理程序,它会将缺失的物理页从磁盘中从头调进主存linux操作体系基础知识。然后再次实施引优先级表起缺陷的指令操作体系是计算机体系的一种时便能够顺畅实施了。

**3、中止:实施指令的进程中产生了丧身差错,不优先级可修复,程序无法继续作业,只能中止,一般会是一些硬件的差错。**中止处理程序不会将操控回来给原程序,而是直接中止原程序

连续描绘符表

连续描绘符表相似大局描绘附表,表内寄存的描绘符,与GD优先级最高的运算符T不同的是IDT内能够寄存4种描绘符:使命门描绘符,圈套门描绘符,调用门描绘符,连续门描绘符。

咱们在此只介绍连续门描绘符,4种描绘符除了使命门其他都相似,连续门也是最常用的,如Linux的体系调用便是运用连续门完操作体系是计算机体系的一种结的。

1

连续描绘符

一文讲透计算机的“中止”

连续描绘符的结构如上,重要字段和特征为已标出,有个了解就好,程序员计算器不用深究各个位的详细优先级表意义。

2

连续向量号数组去重

在介程序员客栈绍连续向量号之前,咱们先引入一个段挑选子(segme优先级超越50预定失败nt selector)的概念。所谓程序员怎样学段挑选子,便是段寄存器的值,段挑选子的高13位为大局描绘符表的索引号,其他的方位是特征位,这就好比是数组下标操作体系是一种什么软件索引数组元素。

至于间优先级队列断向量号,效果等同于段挑选子的高13位,用来数组去重在IDT中索引相对的连续描绘符,但没有相应的相似段挑选子的结构。

linux体系分连续向量表,需求了解的部分如下图所示:

一文讲透计算机的“中止”

3

连续描绘符表寄存器IDTR

一文讲透计算机的“中止”

IDTR也相似于GDTR,寄存的是48位数据信息,高32位是IDT的地址,低程序员计算器16位标明IDT的边界。

同G优先级最高的运算符DTR,IDTR也有相应的加载指令:lidt m16&32,m是那48位数据信息,lidt指令将其加载到IDTR寄存器,使得CPU知道IDT在哪。

连续操控程序员怎样学

操作体系有哪些个独立作业的外设都可所以一个连续源优先级超越50预定失败,能够向CPU发送连续央求,为了便当办理和减少引脚数目,设数组排序立了连续操控器程序员是做什么的,让一切的可屏蔽连续都经过INTR信号线与CPU进行交流。

连续操控器中较为盛行的是Intel操作体系是什么的接口 8259A芯片,下面临8259A作简略介绍:

1

级联

单个8259A芯片只要8根连续央求信号线(IRQ0, IRQ1, … , IRQ7),这是不够用的,所以选用多个8259A芯片。将它们操作体系有哪些如下图相同像串联的方法组合起来,这种组合方法就叫做级联。

一文讲透计算机的“中止”

级联时只能有一个主片,其余的均为从片,最多可级联9程序员那么心爱个,数组去重的5种方法即最多支撑64个连续。为什么不是8 * 9 = 72个呢?从程序员装逼代码上图能够看出级联时后边的芯片会占用前面芯片的一个IRQ接口,而最终一个8259A没有其他人占用,所以8259A的个数和支撑的连续数关系为7n + 1。

2

82优先级超越50预定失败59A的一些功寄存器程序员和功用部件

1、IMR:Interrupt Mask Register,连续屏蔽寄存器,其间的每个位标志着一个外设,1标明屏蔽该外数组排序设,0标明连续答应。

2、IRR:Interrrupt Request Register,连续央求寄存器,央求数组指针连续的外设在IRR对应的位 值为程序员一分钟毛遂自荐1。当有多个连续央求时,IRR寄存器中多位将会置1,相当于保持了一个央求连续的部队。

3、ISR:In_Service Register,连续服务寄存器,正在进行处理的连续在ISR对应的位值为1。

4、PR:Pr操作体系当时的装备不能运转此应用程序iority Resolver,程序员那么心爱优先级判决器,用于从IRR中操作体系是一种什么软件挑选一个优先级最大的连续。(IRQ接标语小的优先级大)。

连续进程

一文讲透计算机的“中止”

1

连续央求操作体系是一种

**1、**当外设宣布连续信号后,信号被送入8259数组词A;

**2、**8259A查看IMR存linux常用指令放器中是否屏蔽了来自该IRQ的信号,若IMR寄存器中对应的位为1,标明屏蔽了IR优先级排序Q代表的连续,则丢掉此连续信号,若IMR寄存器中对应的位为0,标明未屏蔽此连续,则将IRR寄存器中与此连续对应的位 置1。

**3、**PR优先级判决器从IRR寄存器中挑选一个优先级最大操作体系当时的装备不能运转此应用程序的连续,然后8259A向CPU发送INTR信号。

2

连续照应

**1、**CPU收到INTR信号后便知道有新的连续了,在实施完当时指令后,向8程序员怎样学259A发送一个间linux是什么操作体系断回复信号。

**2、**8259A收到回复信号后,将选出来的优先级最大的连续在ISR寄存器中相应的位 置1,标明该连续正在处理,一同将此连续在IRR寄存器中相应的位 置0,相当于将此连续从连续央求部队中去掉。

**3、**优先级队列CPU再次向8259A发送INTR信操作体系是一种什么软件号,标明想要获取连续向量号。

**4、**8259A经过数据总线向CPU发送连续向量号,连续向量号 = 初步向量号 + IRQ接标语,一般初步向量号为32,从连续向量表可看出0—31现已被占用,后边的32—127是分配给可屏蔽连续的,所以此处外设的连续设置的初步向量操作体系是一种号便为32。

3

保护现场——压栈

*操作体系的五大功用*1、**CPU据连续向量号去IDT中获取连续描绘符,取出挑选子中的DPL与当时特权级CPL进行比较,若特权级产生改动,则需求切换栈。(程序员那么心爱不同特权级有着不同的栈,如Linux运用了0, 3特权级,则有两个栈,一个内核栈,一个用户栈)

**2、**所以处理器暂优先级队列时保存当时的旧栈SS和ESP的值,从TSS(每一个使命有一个TSS结构,其间保存着不同特权级栈的SS和ESP值)中获取与DPL特权级同的栈信息加载到SS和ESP寄存器。再将旧栈linux重启指令SS和ESP的值压入新栈中。优先级超越50预定失败若没有特权级改动,则越过此进程。

一文讲透计算机的“中止”

3、压入程序情况信息,即EFLAGS存Linux放器

一文讲透计算机的“中止”

4、压入断点,即回来地址,程序员即当时任linux重启指令务的CS,EIP值。

一文讲透计算机的“中止”

5、若该连续有差错码,压入差错码

一文讲透计算机的“中止”

4

定位连续服务程序

直接先上流程图:

一文讲透计算机的“中止”

详细进程如下数组的定义

**1、**据连续向量号linux中文乱码视频去IDT中索引连续描绘符,详细操作:取出IDTR中的IDT地址,加上连续向量号 * 8,得到的地址指向所要的连续描绘符。

**linux指令2、**据连续描绘符中的段挑选子去GDT中索引段描绘符,详细操作:取出G数组公式DTR优先级最低的运算符是什么中的GDT地址。加上段挑选子高13位优先级最高的运算符 * 8, 得到的地址为连续处理程序地址段的段基址。

**3、**上一步得到的段基址加上linux体系装置段描绘符中的段内偏移量得到的地址变为连续服务程序的地址。

5

连续处理进程

连续的实践处理进程便是实施连续处理程序,Linux将连续处理程序分为上下两部分,需求急切处理当即实施的归为上半部,不那么急切的归为下半部程序员那么心爱

这便触及到了开关连续的问题。开连续,即EFLAGS的IF方位1,标明答应照应间数组词断;关连续,即EFLAGS的IF方位0,标程序员装逼代码明不答应照应连续。

**1、**上半部分是刻不容缓的,需求当即实施的部分,所以要在关连续的情况下实施。

**2、**而下半部分不那么急切,在开连续的情况下进行,假定此刻有新的连续产生,当时连续处理程序便会换下CPU,CPU会另寻时刻从头调度,完毕整个连续处理程序。

6

连续回来——出栈

连续回来便是出栈的进程,将第三步保护现场linux指令压入栈中的信息弹出。

**1、**有差错码弹犯差错码。

**2、**此刻的栈顶指针ESP应指向EIP_old,剩下栈中的信息运用iret指令弹出,CPU实施到iret指令时再次查看和比较特权级是否改动。

**3、**数组公式弹出EIP_old, CS_old

**4、**若特权级改动,将ESP_old, SS_old, 加载到ESP,SS寄存器。

至此,连续已回来,连续也已处理操作体系的基本特征

上述的连续进程是我依据材料照着自己程序员装逼代码的了解分为了6步,每步又有许程序员多微操作,或操作体系是一种许跟某些书本材料等所区分的进程不同,乃至一些微操作的次序也不太相同,比如说连续处理时什么时候关连续,我查阅了许多材料和书本,叙说得都有差异。

不同操作体系在连续方面的完毕有所不linux操作体系基础知识同,但全体来说都会履历上述的进程,或许纤细之处略有不同,却Linux也不影响咱们了解连续的进程。

END

连续是操作体系重要的机制,没有连续,操作体系什么也干不了,无linux常用指令法输入无法输出,不能办理硬件资源,也不能向上层运用供给服务。并且操作体系本身就像是一个死循环,等候作业产生需求来临,然后为其供给服务解决问题。而程序员一分钟毛遂自荐这作业的产生与处优先级表理便是靠连续机制来操控的,所以说操作体系当时的装备不能运转此应用程序连续关于操作体系来说有着无关宏旨的效果,而咱们也有必要了解连续,理清连续的进程。

喜爱本文的朋友,欢迎重视大众号 程序员小灰,收看更多精彩内容