标签:cpu 处理程序 装系统 nbsp 段描述符 课程学习 info 字段 不能
中断的出现是为了解决cpu和外设I/O之间速度不匹配的问题,硬件上每个外设都会连接一个设备管理器,该管理器连接中断处理器,再连cpu,如图所示
每个能够发出中断请求的硬件设备控制器都有一条称为IRQ(Interrupt ReQuest)的输出线。所有的IRQ线都与一个中断控制器的输入
引脚相连,中断控制器与CPU的INTR引脚相连,有很多IRQ线连接在中断控制器上,所以需要编号,中断处理器通过数据总线把编号传给cpu,接着通过INTR触发中断,cpu根据这个编号执行相关的中断处理程序,这些程序是可编程的。
可屏蔽中断又分为有选择的屏蔽和全局屏蔽,前者通过中断控制器编程,后者通过CPU的Eflags标志位,关中断时不响应任何请求。
以上是中断在硬件层面的简单介绍,下面是软件层面。
此表在内核初始化时跟着初始化,有256项目,对应中断号,每项8个字节大小,共2KB,每个中断或异常向量在表中有相应的中断或
异常处理程序的入口地址。该表的物理基地址存在idtr寄存器里,表项内容如下
每个表项存有对应中断处理程序的cs和eip,cs是段描述符,还需要配合gdtr寄存器的段表基址,找出处理程序所在段的起始地址,再结合eip这个偏移量找出处理程序的逻辑地址。
当执行了一条指令后, cs和eip这对寄存器包含了下一条将要执行的指令的逻辑地址。
在执行这条指令之前, CPU控制单元会检查在运行前一条指令时是否发生了一个中断或者异常。
如果发生了一个中断或异常, 那么CPU控制单元执行下列操作:
中断或者异常返回:
用保存在栈中的值装载cs、eip和eflags寄存器。如果一个硬件出错码曾被压入栈中, 那么弹出这个硬件出错码。
检查被中断进程在被中断的时候是内核态还是用户态)若内核态,iret终止执行;否则,转入3。
从栈中装载ss和esp寄存器。这步意味着返 回到与旧特权级相关的栈.
一个进程的上下文(context)包括进程的状态、有关变量和数据结构的值、机器寄存器的值和PCB以及有关程序、数据等。
一个进程的执行是在进程的上下文中执行。
当正在执行的进程由于某种原因要让出处理机时,系统要做进程上下文切换,以使另一个进程得以执行。
当进行上下文切换时系统要首先检查是否允许做上下文切换(在有些情况下,上下文切换是不允许的,例如系统正在执行某个不允许中断的原语时)。然后,系统要保留有关被切换进程的足够信息,以便以后切换回该进程时,顺利恢复该进程的执行。在系统保留了CPU现场之后,调度程序选择一个新的处于就绪状态的进程、并装配该进程的上下文,使CPU的控制权掌握在被选中进程手中。
系统调用的过程:
课程心得体会:
这门课从硬件到软件,从用户级到内核级,整体上介绍了linux中比较重要的几个概念,进程管理,内存管理,中断,文件系统。从课上讲解到课后作业,从理论学习到动手实践,不断地失败不断地总结然后进步,最终让我对linux有了一个初步的认识,起步难,后面也难,但是克服困难带来的喜悦会更多,希望今后老师能细化作业的粒度。感谢老师几个月来的辛苦付出!
标签:cpu 处理程序 装系统 nbsp 段描述符 课程学习 info 字段 不能
原文地址:https://www.cnblogs.com/gfsh/p/13269663.html