process - 硬盘上的分页区域是在特定位置还是数据块也分布在整个硬盘上?
问题描述
我想知道分页区域是在特定位置的硬盘上还是数据块也分布在整个硬盘上?
及其他:当加载由我的代码和数据组成的进程时,根据预分页,只有部分代码加载到 RAM 中,其余代码加载到硬盘驱动器或所有内容首先完全存储在 RAM 中?
是否有可能处于“就绪”状态的进程,即那些可能即将到期的进程,也在后台内存中完全换出?
解决方案
总体答案取决于您的系统。
在历史上,一些系统需要专用的磁盘或鼓来交换区域、一些专用的分区以及以后可以动态添加和删除的文件。与基于文件的交换相比,专用交换区域具有一些延迟、性能和简单性优势;但是后者要灵活得多。
理论上,不需要加载任何代码或数据。它所需要的只是一组与可执行文件中的偏移量相关的页表。在实践中,这些页面中的一些被引用来获取加载模块头和对共享对象的依赖关系,因此不留下它们没有任何好处。仔细阅读 mmap(2),它是它的主力。
cpu的调度不需要知道可执行文件中内存页的状态;所以理论上是的。在实践中,这是不可能的。无论哪种方式,尝试运行它都会导致其页面被带回。
顺便说一句,后台内存更可能是后备存储,它标识页面存在的位置(不在 ram 中),或者如果从 ram 中逐出则将被存储。
推荐阅读
- javascript - 无法调用更高级别的函数
- linux - Geany - 如何轻松配置 ARM C/C++ 工具链以进行交叉编译
- exception - IIS下如何将dotnet core webapp切换到开发模式
- laravel - 使用 Laravel @push Blade 模板引擎动态推送脚本
- dotnetnuke - 如何从外部非 DNN 网站访问 2sxc API
- reactjs - 如何在 Gatsby 中使用 Fabric?
- matlab - 如何在Matlab中对具有给定容差的点进行分组
- c++ - 如何在 VS Code 上激活 C++ 的红色下划线?
- azure-active-directory - 将应用标记为已在 Azure AD B2C 中验证的发布者
- python - 在 QComboBox 上使用 QDataWidgetMapper 和 QStandardItemModel