【问题标题】:why we getting segmentation fault instead of page fault?为什么我们得到分段错误而不是页面错误?
【发布时间】:2014-05-23 19:09:55
【问题描述】:

我读到分页用于页面到页面框架的转换,这就是实现虚拟地址的方式。但是在非法访问内存时,我们得到的是分段错误而不是页面错误?

  1. 页面错误和分段错误是否相同?还是两者都是不同的方案来实现虚拟地址?
  2. 如果 a.out 需要 64KB,那么 a.out 的存储部分(即堆栈、堆、bss、文本)如何存储在内存中?

在谷歌搜索后,我找到了好文章。

http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/virtual.html

【问题讨论】:

标签: linux memory-management operating-system stack


【解决方案1】:

当引用当前不在内存中的页面时会发生页面错误,并且必须中断硬件以从外部存储中获取页面,并非所有页面都可以同时在内存中。页面错误对程序员来说是透明的,因为 MMU,内存管理单元负责中断处理。

当应用程序尝试访问它无法访问的部分内存时,会发生分段错误或段错误,尤其是在使用指针时。

a.out 在内存中的存储方式取决于页面大小,以及编译后的应用程序运行时的引用位置。页面来自堆栈、堆、bss 还是文本部分都没有关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2013-01-31
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多