X86_CPU对中断的硬件支持

X86_CPU对中断的硬件支持

ID:40573088

大小:184.18 KB

页数:5页

时间:2019-08-04

X86_CPU对中断的硬件支持_第1页
X86_CPU对中断的硬件支持_第2页
X86_CPU对中断的硬件支持_第3页
X86_CPU对中断的硬件支持_第4页
X86_CPU对中断的硬件支持_第5页
资源描述:

《X86_CPU对中断的硬件支持》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、X86CPU对中断的硬件支持这篇文章不讨论严格意义上的中断响应全过程(比如说,怎样获得中断向量),而是着重讨论CPU在响应中断时,即在得到了中断向量以后,怎样进入相应的中断服务程序的过程。这是从操作系统的角度需要关心的问题。IntelX86CPU支持256个不同的中断向量,这一点至今未变。可是,早期X86CPU的中断响应机制是非常原始、非常简单的。在实地址模式中,CPU把内存中从0开始的1K字节作为一个中断向量表。表中的每个表项占四个字节,由两个字节的段地址和两个字节的位移组成。这样构成的地址便是相应中断服务程序的入口地址。这

2、与16位实地址模式中的寻址方式也是一致的。但是,在这样的机制上是不能构筑现代意义的操作系统的,即使把16位寻址模式改成32位寻址,即使实现了页式存储管理,也还是无济于事。原因在于,这个机制中并没有提供空间切换,或者说运行模式切换的手段。为了理解这一点,让我们来看看其他的CPU是怎么做的。你也许知道,早期的UNIX是在PDP-11上实现的。PDP-11的CPU中有一个与X86的FLAGS寄存器相类似的控制状态寄存器,称为PSW(处理器状态字)。PSW中有一个位段决定了CPU的当前运行优先级和模式(系统或用户)。在用户程序中是不能

3、通过直接修改PSW来达到调高优先级的目的的。在PDP-11的中断向量表中,每个表项由两部分组成,一部分是相应中断服务程序的入口地址,另一部分就是当CPU进入中断服务程序后的PSW。当然,中断向量表的内容只有当CPU处于系统模式时才能改变。当中断发生时,CPU从向量表将PSW装入其控制状态寄存器,而将中断服务程序的入口地址装入程序计数器,从而达到既转入相应的中断服务程序,又从一种运行模式切换到另一种运行模式(或优先级别)的双重目的。至于原来的PSW则随中断返回地址一起被压入堆栈,以便CPU从中断服务程序返回时能回到原来的运行模式

4、。这样,就很自然地实现了运行状态的切换。CPU平时处于用户状态,无论是因为外部中断还是系统调用(由软件产生的中断),或是某种异常,都会通过中断向量表进入系统状态,执行完中断服务程序后返回时便又恢复原状,回到用户状态。相比之下,我们可以清楚地看到,X86实地址模式下的中断响应过程所缺少的就是类似于PDP-11对PSW的处理。因此,Intel在实现保护模式时,对CPU的中断响应机制作了大幅度的修改。首先,中断向量表中的表项从单纯的入口地址改成了类似于PSW加入口地址并且更为复杂的描述项,称为“门”(gate),意思是当中断发生时必

5、须先通过这些门,才能进入相应的服务程序。但是,这样的门并不光是为中断而设的,只要想切换CPU的运行状态,即其优先级别,例如从用户的3级进入系统的0级,就都要通过一道门。而从用户状态进入系统状态的途径也并不只限于中断(或异常,或陷阱),还可以通过子程序调用指令CALL和转移指令JMP来达到目的。而且,当中断发生时不但可以切换CPU的运行状态并转入中断服务程序,还可以安排进行一次任务切换(所谓“上下文切换”),立即切换到另一个进程。因此在操作系统中可以设立一个“中断服务程序(任务)”,每当中断发生时就切换到该进程【??】。按不同的

6、用途和目的,CPU中一共有四种门,即任务门(taskgate)、中断门(interruptgate)、陷阱门(trapgate)以及调用门(callgate)。其中除任务门外其他三种门的结构基本相同,不过调用门并不是与中断向量表相联系的。先看任务门,其大小为64位,结构如下所示。TSS段选择码的作用和段寄存器CS、DS的等相似,通过GDT或LDT指向特殊的“系统段”中的一种,称为“任务状态段”(taskstatesegment)TSS。TSS实际上是一个用来保存任务运行“现场”的数据结构,其中包括CPU中所有具体进程有关的寄存

7、器的内容(包含页面目录指针CR3),还包括了三个堆栈指针。中断发生时,CPU在中断向量表中找到相应的表项。如果此表项是一个任务门,并且通过了优先级别的检查,CPU就会将当前任务的运行现场保存在相应的TSS中,并将任务门所指向的TSS作为当前任务,将其内容装入CPU中的各个寄存器,从而完成了一次任务的切换。为此目的,CPU中又增设了一个“任务寄存器”TR,用来指向当前任务的TSS。在Linux内核中,一个任务就是一个进程,但是进程的“控制块”,即task_struct结构中需要存放更多的信息。所以,从这个意义上讲,Linux的进

8、程又并不完全是Intel设计意图中的任务。读者后面会看到,Linux内核并不采用任务门作为进程切换的手段。通过任务门切换到一个新的任务并不是唯一的途径,例如在程序中也可以用CALL指令或JMP指令通过调用门达到同样的目的。DPL位段的作用后面还要讨论。除任务门外,其余三种门的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。