linux - 进程可以从主内存中的 0 页开始执行吗?

标签 linux operating-system

我正在读一本关于操作系统(Galvin)的书。在解释请求寻呼时,它说

在极端情况下,我们可以开始执行一个没有页面的进程 内存。当操作系统将指令指针设置为第一条指令时 进程的指令,位于非内存驻留页上,进程 立即出现页面错误。

我的问题是操作系统如何为内存中甚至没有单页的进程设置指令指针(因为指令指针中的地址不能是磁盘或辅助内存地址,它必须是主内存地址,但是0 页意味着内存中没有任何内容)。

最佳答案

这就是虚拟内存。这意味着逻辑地址(已知且恒定)与物理地址( transient )之间存在短暂映射。然后,正常级别的处理纯粹在逻辑地址中进行,而不必了解物理上发生的情况。

所以操作系统会例如假设二进制文件 A 在地址 N 处逻辑上可用。然后它将在虚拟映射中标记覆盖 N 到 N+(二进制文件大小)的页面当前是错误的。将 PC 设置为 N(或任何入口点)后,一旦 CPU 尝试从 PC 读取数据,MMU 就会发出故障。此时分页机制将捕获故障并执行通常的操作。

关于linux - 进程可以从主内存中的 0 页开始执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27909031/

相关文章:

使用管道的 C 程序在尝试终止时挂起

c - "Source file is more recent than executable"除了它不是

c - 关于在C中使用forkpty创建伪终端到ssh的问题

c++ - Waitpid 等效于超时?

linux - 操作系统的哪个组件实现设备文件?

windows - 无法找到过程入口点 _crt CreateSymbolicLink

operating-system - 基本启动条款

C 可执行文件可以在所有操作系统上运行吗

linux - 为什么我无法启动 Openfire?

linux - 多次在单个文件上进行 grep