operating-system - 纯需求分页下流程如何开始执行?
问题描述
我正在研究操作系统中的内存管理,突然有了这个疑问。据说在纯需求分页中,进程开始执行时将零页带到主内存。虚拟地址空间包含许多东西,包括数据、堆栈、堆和文本区域或代码。因此,如果一个进程要执行并且它在主存中没有页面,指令寄存器将如何存储它的第一条指令,该指令将由 CPU 执行,从而导致进一步的页面错误?
解决方案
这是查看地址空间的不好方法。
虚拟地址空间包含许多东西,包括数据、堆栈、堆和文本区域或代码。
地址空间由具有不同属性的内存组成:只读、只读/执行、读/写和很少读/写/执行。
虚拟内存是使用二级存储来模拟物理内存。程序加载器读取可执行文件并在磁盘上构建地址空间。例如,在某些系统上,可执行文件本身成为代码和数据的页面文件。
加载程序后,地址空间由对操作系统有效但没有映射到物理地址的页面组成。
当程序开始运行时,它会访问没有映射的有效页面,这会导致页面错误。操作系统页面错误处理程序查找页面在辅助存储器中的存储位置,将页面映射到物理页框,并将数据加载到页面中。
因此,如果一个进程要执行并且它在主存中没有页面,指令寄存器将如何存储它的第一条指令,该指令将由 CPU 执行,从而导致进一步的页面错误?
启动指令在可执行文件中指定。该值被加载到寄存器中。内存中没有第一条指令。当程序试图执行它的第一条指令时,它会出现页面错误。
推荐阅读
- postgresql - 在简单的 postgres 和 timescaleDB 查询性能测试中没有看到任何提升?
- java - 向上转换对象时,哪些部分引用父对象,哪些部分引用子对象?
- html - 如何在角垫表中将“搜索”框对齐到右侧?
- angular - Angular firebase 用户身份验证错误(类型错误)
- ruby-on-rails - 在 Rails 中,将字符串从 date_select 转换为 Date
- android - 错误:指定的孩子已经有一个父母。在进行拖放时,您必须首先在孩子的父母上调用 removeView()
- python - 如何在opencv-cv2(Pycharm和macOS)中解决“退出代码139(被信号11:SIGSEGV中断)的进程完成”?
- python - 如何根据类的对象的初始化参数在python中为类添加基类(/父类)
- java - blaze 持久性是否支持实体到哈希图的转换
- c# - 正则表达式(替换)?只匹配第一次和不同的出现