在没有虚拟内存支持的系统中进行链接和分页

时间:2012-08-04 13:50:02

标签: operating-system paging static-linking dynamic-linking virtual-memory

  • 首先,虚拟内存是系统的硬件功能,还是仅由操作系统实现?

在链接时重定位期间,链接器为生成的可执行文件中的每个部分和每个符号分配运行时地址

  • 这些运行时地址是否与虚拟地址相对应?

  • 如果生成可执行文件的系统不使用虚拟内存怎么办?

接下来,如果未使用虚拟内存,则应用程序的地址空间仅限于在加载时重定位后由OS为其分配的物理地址空间

  • 如果没有使用虚拟内存,是否会发生页面错误?

我认为,确实如此:如果包含所请求的物理地址的物理页面尚未存储在RAM中,则应发生页面错误,由OS页面错误处理程序提供服务

  • 最后,是否可以在没有虚拟内存的情况下进行分页?

我问,因为分页总是与虚拟内存一起提到,但似乎不需要存在虚拟内存来进行分页

由于

1 个答案:

答案 0 :(得分:2)

哇,很多问题。

  • 虚拟内存在哪里实现?底层硬件需要​​支持虚拟内存。请记住,当您访问程序中的内存地址时,CPU需要某种方式来获取属于该地址的数据。如果您只有物理访问权限,则操作将直接发送到内存控制器。在具有虚拟内存的系统中,您有一个MMU (memory management unit),它将虚拟地址转换为物理地址。 (注意,有些微控制器提供了一个称为内存保护单元(MPU)的精简版本,它不提供此转换步骤,但至少允许访问权限检查。)
  • 链接时地址是否与运行时的虚拟地址相对应?通常,链接时地址对应于运行时虚拟地址。但是,有一种模式不是这种情况:与位置无关的代码。这里,虚拟地址由加载时由动态链接器确定。此方法通常用于将动态链接库(DLL / .so)加载到应用程序。有关该主题的更多详细信息,您需要查看"Linkers and Loaders"
  • 如果我的目标系统没有虚拟内存怎么办?如果你的系统不支持虚拟内存,那么从编译器的/ loader的角度来看,没有什么真正改变:你仍然需要生成访问内存的代码。唯一的区别是你的CPU不再需要从虚拟地址到物理地址的额外转换。
  • 如果没有虚拟内存,是否有页面错误?如果没有虚拟内存,则没有页面错误。但是,对于MPU,您可能仍会看到硬件报告的访问冲突,如果您的应用程序尝试访问其不应读/写的地址。注意,物理地址(更好:物理地址指向的数据)不需要加载到RAM中。它们只是已经存在的RAM的指针。
  • 是否可以在没有虚拟内存的情况下进行分页?“分页”和“虚拟内存”通常用于表示相同的内容。但是,分页也可以指将内存分成相同大小的块的概念 - 页面。您的问题的答案取决于您的分页意思。 ;)
相关问题