【问题标题】:Minimum number of frames needed on an x86 processorx86 处理器所需的最小帧数
【发布时间】:2012-03-21 15:15:08
【问题描述】:

我在 x86 上运行的 PINTOS 中实现虚拟内存,我想知道 x86 处理器上的进程所需的最小帧数。
我发现它取决于底层指令集架构支持的最大间接级别,在 x86 上支持 1 级间接。 因此,每个进程至少需要 2 帧。
如果指令长度超过 1 个字节,那么它可能会跨越页面边界,我们将需要最少 3 个帧。
我是正确的还是有更多的决定要给每个进程提供的最小帧数。

谢谢

【问题讨论】:

  • 很难理解这个问题,“frame”通常表示堆栈帧。似乎您在谈论虚拟内存 pages。如果代码足够小并且您设置了页面保护以便它可以包含代码、数据和堆栈,那么将所有内容都塞进一个 4096 字节的页面中并非不可能。它与指令大小或间接无关。
  • @HansPassant: page frame 在上下文中是一个很常见的术语。

标签: memory-management operating-system x86


【解决方案1】:

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

因此,对于 REP MOVSW/D 之类的内容,您可能需要 8 页。

【讨论】:

  • 像 eax 这样的通用寄存器是 32 位长的。当第二条指令中有 mov %eax,[MEM_LOC1] mov [MEM_LOC1], [MEM_LOC2] 之类的指令时,源数据可以跨页边界吗?这就是为什么您为源数据和目标数据分配了 2 帧的原因吗?
  • MOVSW/D 从 DS:(E)SI 指向的位置读取 (D)WORD 并将该 (D)WORD 写入 ES:(E)DI 指向的位置。这是两个数据位置,每个位置都可以靠近页面边界。如果指令本身具有前缀(地址大小覆盖、操作数大小覆盖、段覆盖、rep),则它本身可以跨越页面边界。这就是您为REP MOVSW/D 获得 6 页的方式。
猜你喜欢
  • 2014-05-21
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2011-09-04
  • 2011-07-24
相关资源
最近更新 更多