我对地址空间有疑问。我认为如果 4 GB 的 RAM 被分成两半,内核空间(1GB)和用户空间(3GB)。
1] RAM是否也像硬盘一样维护堆栈、堆、代码和数据部分。
2]不会没有给正在运行的进程一个边界,堆栈、数据、代码和堆必须在RAM中增长。
3]我的想法是堆栈,堆,代码和数据段都在进程创建时给进程的连续地址空间中。
4] CPU如何获取进程的正确地址来执行,因为进程在物理内存中不连续。
我对地址空间有疑问。我认为如果 4 GB 的 RAM 被分成两半,内核空间(1GB)和用户空间(3GB)。
1] RAM是否也像硬盘一样维护堆栈、堆、代码和数据部分。
2]不会没有给正在运行的进程一个边界,堆栈、数据、代码和堆必须在RAM中增长。
3]我的想法是堆栈,堆,代码和数据段都在进程创建时给进程的连续地址空间中。
4] CPU如何获取进程的正确地址来执行,因为进程在物理内存中不连续。
不,只有虚拟内存地址空间被一分为二。物理内存,即机器中的 RAM,包含映射到虚拟内存地址的完全随机的块集合。来自操作系统页面和用户程序页面。就像图像显示的一样,尽管在底部显示操作系统页面有点误导。
该映射不断变化,页面错误是将虚拟内存页面映射到 RAM 的基本机制。当程序访问 RAM 中尚不存在的虚拟内存页面时触发。根据需要,可以取消映射 RAM 页面以腾出空间,它们的内容要么被丢弃,要么被写入页面文件。代码通常是可丢弃的,它可以从可执行文件中读回,而数据通常不是。
RAM 中的某些页面是特殊的,它们包含驱动程序使用的代码和数据。它们是页面锁定的。当驱动程序处理设备中断并且中断处理程序使用的代码/数据必须存在于 RAM 中以允许处理中断时需要,在如此关键的时间不能承受页面错误。像这样绘制图像的可能原因。