首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有虚拟内存支持的系统中的链接和分页

问没有虚拟内存支持的系统中的链接和分页
EN

Stack Overflow用户
提问于 2012-08-04 13:50:01
回答 1查看 1.7K关注 0票数 5
  • 首先,虚拟内存是系统的硬件特性,还是仅由OS实现?

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

  • 这些运行时地址是否与虚拟地址相对应?
  • 如果生成可执行文件的系统不使用虚拟内存,怎么办?

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

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

我认为是这样的:如果包含请求的物理地址的物理页尚未存储在RAM中,那么页面错误就会发生,这将由OS页错误处理程序提供服务。

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

我是问,因为分页总是和虚拟内存一起提到,但是似乎不需要有虚拟内存来分页。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-04 23:49:09

哇很多问题。

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

https://stackoverflow.com/questions/11809162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档