QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1869|回复: 15

计算机原理学得好的进来看看

[复制链接]
发表于 2004-5-9 10:14:31 | 显示全部楼层 |阅读模式
突然想到这样一个问题:
关于虚拟存储,都是说如果没有在实存理匹配到,那么出现一个缺页中断,然后调入......云云。
但是从cpu侧考虑如何呢?cpu取下一条指令,这个时候如果这部分指令被换出了,在查找mmu中就是一个match fault, 即使是mmu中match到了,cpu也是同样的得不到这条指令。
这个时候cpu既不可能停下等硬盘(ms级别,而且时长不定),也无法处理中断(取址都还没结束)只能是得到一个取指失败。即使缺页中断成功回来,这部分(至少)代码也运行失败了。
发表于 2004-5-9 11:23:55 | 显示全部楼层
缺页中断是一种特殊的中断
一般的中断返回时执行下一条指令
而缺页中断返回时仍然执行这一条指令,所以运行失败的指令又一次运行
──有没有回答了你这个问题呢?

BTW,移到内核代码分析区
回复

使用道具 举报

 楼主| 发表于 2004-5-9 11:51:18 | 显示全部楼层
我正在找答案,好像不完全是这样解决的......
回复

使用道具 举报

发表于 2004-5-9 12:08:15 | 显示全部楼层
看来要好好的学学了!一点不懂!一个字菜
回复

使用道具 举报

发表于 2004-5-9 12:52:55 | 显示全部楼层
出现缺页中断?CPU去取下一条指令?
不太会。一般可能会把中断时换出的指令放到循环指令寄存器(可能有专门的设计)里面。
在返回中断结果之前不会把寄存器里面的换出指令冲掉。
否则像你说得那样CPU就晕死了。
回复

使用道具 举报

 楼主| 发表于 2004-5-9 13:57:34 | 显示全部楼层
看了一下arm的设计,至少它这里是这么处理的:
实际上发生mmu fault的时候会触发cpu的一种硬件异常,这个时候保证一次指令回滚,就是说下一次依然取这个地址的内容,同时这个异常会使得支持虚存的操作系统进入缺页中断,中断返回之后那个地址的内容必然已经进入mmu的列表中了。
这种被称为可重起指令的特殊结构一般来说是专门为了支持level2存储而设计的。
这也解释了在需要换入换出的时候,cpu依然可以调度。
回复

使用道具 举报

发表于 2004-5-9 14:03:50 | 显示全部楼层
缺页中断是一个特殊的中断,主要体现在如下两点:
一、在指令的执行期间产生和处理缺页信号。通常的CPU外部中断,是在每条指令执行毕后检查是否有中断请求到达。而缺页中断,是在一条指令的执行期间,发现要访问的指令和这数据不在内在时产生的处理的。
二、一条指令可以产生多个缺页中断。例如,一条双操作数的指令,每个操作数都不在内存中,这条指令执行时,将产生两个中断。CPU提供的硬件支持,还要体现在当从中断处理程序返回时,能够正确执行产生缺页中断的指令。


以上内容引用自机械工业出版社出版,尤晋元老师编的《Windows操作系统原理》一书
回复

使用道具 举报

发表于 2004-5-9 14:11:41 | 显示全部楼层
看了看Linux的源码,打一个比方:
中断处理结束都会将PC+1,取下一条指令,而缺页中断处理结束后又将PC-1,因而还是取当前指令,相当于将页面调入内存之后重运行这一条指令。
回复

使用道具 举报

发表于 2004-5-9 14:50:38 | 显示全部楼层
挖,虽然我也有学过操作系统,不过当时讲中断完全没有提到缺页中断,同济的计算机教育好失败……
回复

使用道具 举报

 楼主| 发表于 2004-5-9 15:16:46 | 显示全部楼层
恩 也可以认为缺页中断是特殊的中断 可能各个cpu实现都不同吧 感觉arm的很多功能都是“打补丁”打上的......
回复

使用道具 举报

发表于 2004-5-9 17:40:47 | 显示全部楼层
中断跟异常还是不一样的
发生缺页异常的时候,引起异常指令地址会被保存在cr2中,异常处理后会再执行此指令

不敢肯定,这个记的不是太清楚了
回复

使用道具 举报

发表于 2004-5-9 18:49:00 | 显示全部楼层
偶以前的书没提过缺页中断有什么特别的。 一般cpu处理中断的时候是保存中断现场然后处理其它东西(等待返回)。 如果牵涉到流水线的话就有点复杂。有几种处理策略(避免断流)。不过都忘得差不多了。
            学的东西都忘得差不多了 :-(  如果有什么错误大家多指教。
回复

使用道具 举报

 楼主| 发表于 2004-5-10 09:31:11 | 显示全部楼层
恩 象x86这样一个指令多存储器周期的 会需要考虑这些个问题 那样的话为了恢复而作的事情要更多了
回复

使用道具 举报

发表于 2004-5-11 11:40:27 | 显示全部楼层
_z_, 的应该是正确的。

缺页是异常,所以在解决万缺页后,cpu会再次执行那条没有取到的指令。
回复

使用道具 举报

发表于 2004-5-11 13:23:33 | 显示全部楼层
为什么说是缺页中断?异常才对。
中断和异常机制本来就不一样。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 08:31 , Processed in 0.077260 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表