最近复习 CSAPP ,对虚拟内存有些困惑,图中的虚拟存储器是放在磁盘的哪个地方,虚拟存储器的大小有限制吗
1
ShadowPower 2021-12-30 14:00:50 +08:00
> 虚拟存储器是放在磁盘的哪个地方
swap 分区或者 swapfile 中 > 虚拟存储器的大小有限制吗 有,取决于操作系统 |
2
liuwei137885 OP swap 分区不是在物理内存不足的时候使用吗,那新起一个进程,在加载 elf 文件的时候,代码段和数据段会新建虚拟页,这些虚拟页也是在 swap 分区吗
|
3
ShadowPower 2021-12-30 15:27:17 +08:00
@liuwei137885 虚拟页是虚拟内存那块的概念,页表上有逻辑地址,运行的时候才转成物理地址。
默认都是先分配在物理存储器上。如果内存不足,就用最近最少使用算法把物理存储器里的一些页面置换到虚拟存储器里,然后在页表中把它标记为缺页。 |
4
liuwei137885 OP 虚拟存储器不是虚拟页的集合吗
|
5
liuwei137885 OP 还有,如果禁用 swap 会怎样,这时虚拟存储器会放在哪
|
6
liuwei137885 OP 有大佬回答一下吗
|
7
kingcanfish 2022-01-26 17:20:50 +08:00
好问题 虚拟存储页直接上就磁盘的抽象并不是说存在哪个磁盘上面 你可以看 CSAPP9.8 节内存映射内容,简单来理解 就是 虚拟页面都可以在磁盘上找到映射关系,物理内存可以看成是磁盘的高速缓存,地址->物理内存->磁盘
物理内存不够怎么办 ,LRU 算法找到需要替换出来的页面, 把他写到 swap 中 如果你又要访问 swap 中的内存页了, 又把 swap 中的内容换进物理内存 虚拟储存大小实际上和物理内存+ swap 大小相关 因为你 malloc 的内存不可能超过 物理内存+swap 的限制,虚拟内存已分配的页面 > 如果禁用 swap 会怎样 不会怎么样,因为现在内存比之前大很多了,很少会发生因为内存不够而换出到 swap 的情况了 如果有错误或者表达不清楚的话可以一起探讨 |
8
kingcanfish 2022-01-26 21:35:56 +08:00
我找到了 stackoverflow 上有一个相似的问题希望对你有帮助
https://stackoverflow.com/questions/31211841/is-data-actually-transferred-between-disk-and-memory-when-cpu-first-touches-a-an |