V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
huangya
V2EX  ›  问与答

操作系统内存管理问题

  •  
  •   huangya · 78 天前 · 547 次点击
    这是一个创建于 78 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在看一些操作系统的书籍。假设: 硬件支持 MMU,且 enable 了 MMU 。使用的是虚拟存储(VM). 支持多个程序并发执行。分时系统。

    那么当程序 P1 切换到 P2 运行的时候(P1 没有结束退出),有没有可能 P2 需要的物理内存不够,从而把 P1 占用的物理内存的内容临时放到 磁盘( disk ) 上,从而腾出物理内存空间挪给 P2 用。如果是,具体的细节有哪些:

    1.比如 P1 占用的堆的内容会不会临时存到 disk 上。如果是,是存到哪里?( linux 是 swap 分区?).程序中的代码段是不是不需要存,因为这些本来就已经在 disk 上了?

    2.P1 的 page table 是不是也要更新?

    3.如果可以把其他程序占用的物理内存临时存到 disk 上,那 Linux 上的 OOM 是怎么发生的? swap 分区也不够了?

    大家回答的时候,可以针对具体的操作系统来讨论这些策略,也可以说一些 general 的原理或者设计。谢谢!

    3 条回复    2021-10-08 10:23:31 +08:00
    Jooooooooo
        1
    Jooooooooo  
       77 天前
    挺好的问题, 可以拿来当面试题了.
    yinusxxxx
        2
    yinusxxxx  
       77 天前   ❤️ 1
    我最近也在看 OS 的书,尝试回答一下,不一定对

    会不会被换出?换到哪里?何时换出?交换空间和内存是如何关联的?
    1.可能会。
    2. Linux 可以是交换分区或者交换文件。
    3. 为了保证有少量的空闲内存,大多数操作系统会设置高水位线( High Watermark,HW ) 和低水位线( Low Watermark,LW ),来帮助决定何时从内存中清除页。当操作系统发现有少于 LW 个页可用时,后台负责释放内存的线程会开始运行,直到有 HW 个 可用的物理页。
    4. 通过页表和 mmap 系统调用

    page table 是不是需要更新?

    物理页被换出后,页表项上会有标志位(存在位)表示这个页不在物理内存上,如果此时请求这个页,会引发页错误。

    从哪里请求在磁盘上的页?

    换出的时候页表项上有某几个位保存了在磁盘上的位置。

    oom 为什么发生?

    如果正在运行的程序所需的内存超出了物理内存,那么就会发生频繁的换页,这种情况叫做抖动。通过这种一直换页的操作可以支撑很大的内存的,但是操作系统不会让你这个干,操作系统检测到这种内存过载的情况,有些激进一点的就会使用 oom-killer 把它杀掉。
    huangya
        3
    huangya  
    OP
       62 天前
    @yinusxxxx 感谢分享,提供了需要有用的信息。最近一段长时间都在为一件事情焦头烂额,各地奔走。现在才回复。不好意思。
    >2. Linux 可以是交换分区或者交换文件。

    程序中的代码段也需要换到交换分区或者交换文件吗?我的理解是这些已经在 disk 上了,应该不需要。像堆这种在程序运行中产生的数据才需要换到交换分区或者交换文件上。不知道你对这个问题怎么理解。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3841 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:08 · PVG 16:08 · LAX 00:08 · JFK 03:08
    ♥ Do have faith in what you're doing.