c - C中的段错误,操作系统如何管理它?

标签 c memory memory-management permissions operating-system

很明显,当我们访问不应该访问的内存时,即我们没有访问权限,就会发生段错误。好吧,我假设操作系统管理它。

我的问题是:操作系统如何决定将一 block 内存分配给进程? 并且该进程无权访问内存?

最佳答案

在大多数现代操作系统(OS)中,物理内存不是由各个进程直接分配的。相反,虚拟内存层放置在进程和物理内存之间,并由操作系统的内存管理器维护。该虚拟内存层表示从虚拟地址空间到物理内存的映射,它用于提供一定的安全性,以及每个进程拥有自己的内存的抽象。 (除非使用某种多处理方案)

当检查一个进程是否可以访问其虚拟内存的某个部分时,操作系统基本上会查明该进程提供的地址在该进程的虚拟内存空间中是否可访问。 (请注意,进程的地址甚至不必是物理内存上的真实地址)如果该地址在该进程的虚拟内存中不可访问,则会抛出段违规(SIGSEGV)。

话虽这么说,请记住,操作系统中的内存管理是一个漫长的对话,涉及许多细节和特定于操作系统的实现差异。我的答案只是一个在大多数情况下都是正确的通用答案,要了解更多、更详细的信息,您应该查阅许多研究操作系统主题的书籍之一。

关于c - C中的段错误,操作系统如何管理它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47037920/

相关文章:

c++ - 是否可以在其范围之外访问局部变量的内存?

c - 如何编写API程序

java - 为什么java没有直接的内存管理工具?

ios - 导航弧内存未释放

linux - mmap 不适用于高地址内存映射?

C++ 内存没有被回收离开作用域的对象 - 在我束手无策的情况下

memory - 编译 Phalcon - 虚拟内存耗尽 : Cannot allocate memory

c - 使用 C 渲染图像

c - 隔离线程不安全的初始化函数

c - 为什么条件为假时无法退出for循环?