计算机原理学得好的进来看看
突然想到这样一个问题:关于虚拟存储,都是说如果没有在实存理匹配到,那么出现一个缺页中断,然后调入......云云。
但是从cpu侧考虑如何呢?cpu取下一条指令,这个时候如果这部分指令被换出了,在查找mmu中就是一个match fault, 即使是mmu中match到了,cpu也是同样的得不到这条指令。
这个时候cpu既不可能停下等硬盘(ms级别,而且时长不定),也无法处理中断(取址都还没结束)只能是得到一个取指失败。即使缺页中断成功回来,这部分(至少)代码也运行失败了。 缺页中断是一种特殊的中断
一般的中断返回时执行下一条指令
而缺页中断返回时仍然执行这一条指令,所以运行失败的指令又一次运行
──有没有回答了你这个问题呢?
BTW,移到内核代码分析区 我正在找答案,好像不完全是这样解决的...... 看来要好好的学学了!一点不懂!一个字菜 出现缺页中断?CPU去取下一条指令?
不太会。一般可能会把中断时换出的指令放到循环指令寄存器(可能有专门的设计)里面。
在返回中断结果之前不会把寄存器里面的换出指令冲掉。
否则像你说得那样CPU就晕死了。 看了一下arm的设计,至少它这里是这么处理的:
实际上发生mmu fault的时候会触发cpu的一种硬件异常,这个时候保证一次指令回滚,就是说下一次依然取这个地址的内容,同时这个异常会使得支持虚存的操作系统进入缺页中断,中断返回之后那个地址的内容必然已经进入mmu的列表中了。
这种被称为可重起指令的特殊结构一般来说是专门为了支持level2存储而设计的。
这也解释了在需要换入换出的时候,cpu依然可以调度。 缺页中断是一个特殊的中断,主要体现在如下两点:
一、在指令的执行期间产生和处理缺页信号。通常的CPU外部中断,是在每条指令执行毕后检查是否有中断请求到达。而缺页中断,是在一条指令的执行期间,发现要访问的指令和这数据不在内在时产生的处理的。
二、一条指令可以产生多个缺页中断。例如,一条双操作数的指令,每个操作数都不在内存中,这条指令执行时,将产生两个中断。CPU提供的硬件支持,还要体现在当从中断处理程序返回时,能够正确执行产生缺页中断的指令。
以上内容引用自机械工业出版社出版,尤晋元老师编的《Windows操作系统原理》一书 看了看Linux的源码,打一个比方:
中断处理结束都会将PC+1,取下一条指令,而缺页中断处理结束后又将PC-1,因而还是取当前指令,相当于将页面调入内存之后重运行这一条指令。 挖,虽然我也有学过操作系统,不过当时讲中断完全没有提到缺页中断,同济的计算机教育好失败…… 恩 也可以认为缺页中断是特殊的中断 可能各个cpu实现都不同吧 感觉arm的很多功能都是“打补丁”打上的...... 中断跟异常还是不一样的
发生缺页异常的时候,引起异常指令地址会被保存在cr2中,异常处理后会再执行此指令
不敢肯定,这个记的不是太清楚了 :mrgreen: :? 偶以前的书没提过缺页中断有什么特别的。 一般cpu处理中断的时候是保存中断现场然后处理其它东西(等待返回)。 如果牵涉到流水线的话就有点复杂。有几种处理策略(避免断流)。不过都忘得差不多了。
学的东西都忘得差不多了 :-(如果有什么错误大家多指教。 恩 象x86这样一个指令多存储器周期的 会需要考虑这些个问题 那样的话为了恢复而作的事情要更多了 _z_, 的应该是正确的。
缺页是异常,所以在解决万缺页后,cpu会再次执行那条没有取到的指令。 为什么说是缺页中断?异常才对。
中断和异常机制本来就不一样。
页:
[1]
2