为什么我们得到分段错误而不是页面错误?

时间:2014-04-10 07:51:58

标签: linux memory-management operating-system stack

我看起来像分页用于页面到页面框架的转换,这就是虚拟地址的实现方式。但是在内存中进行非法访问时,我们会出现分段错误而不是页面错误?

  1. 既是pagefualt又是分段错误是一样的吗?或者两者都是实现虚拟地址的不同方案?
  2. 如果a.out需要64KB那么a.out的部分存储(即堆栈,堆,bss,文本)存储在内存中?
  3. 在谷歌搜索后我找到了好文章。

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

1 个答案:

答案 0 :(得分:0)

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

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

a.out如何存储在内存中取决于页面大小,以及编译应用程序运行时的引用位置。页面是来自堆栈,堆,bss还是文本部分并不重要。