V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
liuwei137885
V2EX  ›  Linux

虚拟存储器放在磁盘的哪个位置

  •  
  •   liuwei137885 · 2021-12-30 13:51:38 +08:00 · 1451 次点击
    这是一个创建于 849 天前的主题,其中的信息可能已经有所发展或是发生改变。

    微信图片_20211230133520.png

    最近复习 CSAPP ,对虚拟内存有些困惑,图中的虚拟存储器是放在磁盘的哪个地方,虚拟存储器的大小有限制吗

    8 条回复    2022-01-26 21:35:56 +08:00
    ShadowPower
        1
    ShadowPower  
       2021-12-30 14:00:50 +08:00
    > 虚拟存储器是放在磁盘的哪个地方
    swap 分区或者 swapfile 中
    > 虚拟存储器的大小有限制吗
    有,取决于操作系统
    liuwei137885
        2
    liuwei137885  
    OP
       2021-12-30 14:08:30 +08:00
    swap 分区不是在物理内存不足的时候使用吗,那新起一个进程,在加载 elf 文件的时候,代码段和数据段会新建虚拟页,这些虚拟页也是在 swap 分区吗
    ShadowPower
        3
    ShadowPower  
       2021-12-30 15:27:17 +08:00
    @liuwei137885 虚拟页是虚拟内存那块的概念,页表上有逻辑地址,运行的时候才转成物理地址。
    默认都是先分配在物理存储器上。如果内存不足,就用最近最少使用算法把物理存储器里的一些页面置换到虚拟存储器里,然后在页表中把它标记为缺页。
    liuwei137885
        4
    liuwei137885  
    OP
       2021-12-30 15:41:33 +08:00
    虚拟存储器不是虚拟页的集合吗
    liuwei137885
        5
    liuwei137885  
    OP
       2021-12-30 19:11:13 +08:00
    还有,如果禁用 swap 会怎样,这时虚拟存储器会放在哪
    liuwei137885
        6
    liuwei137885  
    OP
       2022-01-23 00:37:50 +08:00
    有大佬回答一下吗
    kingcanfish
        7
    kingcanfish  
       2022-01-26 17:20:50 +08:00
    好问题 虚拟存储页直接上就磁盘的抽象并不是说存在哪个磁盘上面 你可以看 CSAPP9.8 节内存映射内容,简单来理解 就是 虚拟页面都可以在磁盘上找到映射关系,物理内存可以看成是磁盘的高速缓存,地址->物理内存->磁盘
    物理内存不够怎么办 ,LRU 算法找到需要替换出来的页面, 把他写到 swap 中
    如果你又要访问 swap 中的内存页了, 又把 swap 中的内容换进物理内存
    虚拟储存大小实际上和物理内存+ swap 大小相关 因为你 malloc 的内存不可能超过 物理内存+swap 的限制,虚拟内存已分配的页面

    > 如果禁用 swap 会怎样
    不会怎么样,因为现在内存比之前大很多了,很少会发生因为内存不够而换出到 swap 的情况了

    如果有错误或者表达不清楚的话可以一起探讨
    kingcanfish
        8
    kingcanfish  
       2022-01-26 21:35:56 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3001 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:32 · PVG 21:32 · LAX 06:32 · JFK 09:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.