memory-management - 进程地址空间和虚拟内存

标签 memory-management operating-system

我是这个领域的菜鸟,所以请耐心回答我的问题:)

我正在阅读有关进程地址空间、虚拟内存和分页的内容。我了解了内存中页面换入换出的机制。据记录,每个进程都分配有 4GB 的虚拟地址空间,其中一部分用于用户空间(特定于每个进程 - 1 或 2GB),其余部分是内核空间(所有进程共用)。由于每个进程的虚拟地址空间都存储在辅助存储中,是否意味着每次启动进程时,它都会在我的硬盘中保留 4 GB 空间?每次启动进程时,我没有看到我的硬盘空间减少 4GB...或者虚拟空间不是作为 block 保留的,而是从小块开始,可以增长到 4GB。请阐明一些情况,如果您知道任何可以帮助我理解这个复杂主题的内容,也请发布一些有关该主题的链接。

最佳答案

虚拟地址内存管理不使用辅助存储。它只是将您的程序和主内存划分为一定大小的分区。主存分区称为帧,程序分区称为页。主存和帧中的每个分区的大小相同。

每当使用一个程序时,内核都会检查该程序的所有页面是否可以放入主内存中。如果是这样,它将把所有页面保留在主内存中。否则,它将只保留最初需要的页面。当稍后需要其他页面时,它会从主内存中删除其中一个帧,然后将请求的页面传输到该帧被删除的位置。

为了将地址从页映射到帧,内核使用页映射表, 它准确地告诉这个特定页面位于主内存中的哪个帧。

检查以下引用资料: https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/virtual.html https://www.bottomupcs.com/virtual_addresses.xhtml

关于memory-management - 进程地址空间和虚拟内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10345297/

相关文章:

Python操作系统命令

security - 上下文切换到安全模式的成本是多少(arm trustzone)

c - 画出下列程序的进程树

java - logback.xml - 动态检测目录分隔符

python - Python如何清空已使用的内存?

linux - 在 gdb 中分配内存

C++ 3D vector 更新 malloc 不正确的校验和

python - 如何强制删除大对象

memory-management - 线性地址和物理地址

c - 什么是 `S_ISREG()` ,它有什么作用?