2012-03-03 76 views
1

我实现在x86上运行PINTOS虚拟存储器的帧的最小数目,我想知道需要在x86处理器的处理的帧的最小数目。
我发现,它依赖于底层指令集架构支持间接的最高水平,在x86上有1级的间接支持。 因此,每个进程的2个帧应该是最低需要的。
如果指令大小超过1byte,那么它可能会跨越页面边界,我们将需要3个最小帧。
我是否正确或有更多的决定每个进程的最低帧数。需要在x86处理器

感谢

+0

很难理解这个问题,“框架”通常意味着堆栈框架。似乎你正在谈论虚拟内存*页面*。如果代码足够小,并且您设置了页面保护,以便它可以包含代码,数据和堆栈,那么将所有内容都塞进一个4096字节的页面并不是不可能的。它与指令大小或间接无关。 – 2012-03-03 12:37:22

+0

@HansPassant:*页面框架*在上下文中是一个相当常见的术语。 – 2012-03-03 20:00:47

回答

2

页目录 - 1
页表 - 1
指令页边界 - 页边界2个
源数据 - 在页边界上2个
目标数据 - 2

因此,8页是你可能需要什么像REP MOVSW/D

+0

像eax这样的通用寄存器长度为32位。 当有喜欢 MOV%EAX的指令,[MEM_LOC1] MOV [MEM_LOC1],[MEM_LOC2] 在第二个指令,可以将源数据跨页边界?这究竟是为什么你给2帧的原因为源和目标数据? – Deepthought 2012-03-03 10:04:51

+2

'MOVSW/D'从DS:(E)SI指向的位置读取(D)WORD,并将该(D)WORD写入ES指向的位置:(E)DI。这是两个数据位置,每个位置都可以靠近页面边界。如果指令本身具有前缀(地址大小覆盖,操作数大小覆盖,段覆盖,rep),则指令本身可跨越页面边界。这就是你如何得到6页“REP MOVSW/D”。 – 2012-03-03 10:10:43