RAT*_*THI 6 operating-system virtual-memory
我对这些问题非常困惑.
在32位处理器上,每个进程都有4 GB的虚拟内存.但是,如果evey进程有4GB的空间,那么如果100个进程正在运行,那么它将是每个巨大的数量 - 这大于交换区域.有人可以解释一下; 我很迷茫.
操作系统如何将内存分配给进程?假设一个过程有a = malloc(2).谁将这个记忆分配给这个过程?操作系统是否会为进程提供这2个字节的内存.
(我们访问a [2]它会产生分割错误).
进程的不同部分(主代码或数据,堆栈,堆)在主存储器或辅助存储器中的位置.
请给我一些很好的链接,这样我也可以理解虚拟内存及其整个机制,因为我发现的链接并不能完全解释虚拟内存.
谁关心虚拟内存是大于还是小于交换区?这有什么区别呢?(如果您映射一个 2GB 只读文件,则使用 2GB 虚拟内存,但不需要交换空间,并且只需要少量的物理内存。)
操作系统只是扩展了进程的虚拟内存空间。它只是改变一个会计分录。在尝试修改地址空间的内容之前不需要物理内存。(实际上,进程可能会自己执行此操作,仅在需要更大块时才要求操作系统扩展其虚拟内存空间。)
它们保留在物理内存中(假设它们一开始就出现故障),直到操作系统选择将它们移到其他地方或丢弃它们。如果它们被移动到其他地方或被丢弃,则当通过页面错误访问它们时,它们会被调回或重新创建。(操作系统将物理内存作为宝贵的资源进行管理,并按照它认为最好的方式授予它。)
顺便说一句,在大多数 32 位操作系统上,操作系统本身占用 1GB 或 2GB 的虚拟内存空间,只留下 2GB 或 3GB 真正可供进程使用。在 64 位操作系统上,操作系统不会占用任何空间,因此 32 位进程可以使用完整的 4GB。