美文网首页
Linux 基础之内存管理

Linux 基础之内存管理

作者: Robin92 | 来源:发表于2020-04-04 20:06 被阅读0次

    早期

    早期系统:多个进程全部载入内存
    问题:

    • 内存撑爆(内存不够用)
    • 互相打扰

    由此诞生了现在的内存管理系统:虚拟地址,分页装入,软硬件结合寻址。

    内存管理

    • 内存撑满 的问题,用 交换分区 可以解决
    • 互相打扰 的问题,用 虚拟内存 可以解决

    交换分区

    先要知道 的概念,将数据分页,在内存中有页框。

    页框(page frame),用到哪一块页,这个框里装哪一页。

    将程序分块,将内存分块,对应起来(最基本的分页是 4k)。

    内存撑满时,将最不常用的部分放入 交换分区(swap)。

    这就是著名的 LRU 算法。LRU,Least Recently Used。是指找到最不常用的一块(然后就它替换掉)。(用哈希表+双向链表)(leetCode 146 题)

    虚拟内存

    为了保证互不影响,让进程工作在虚拟空间。在进程中用的地址,都是虚拟地址,而不是物理地址。所以进程大家,都在用虚拟地址,就不会相互干扰了。

    在虚拟空间的角度,每个进程独享自己的空间(爽)。

    虚拟空间,如果是 64 位,虚拟空间就可以是 2^64 bit,因为 64 位可以寻址这么多。

    内存映射

    在虚拟的空间,内部格式也是固定的,如下图的格式。

    在进程的角度,它占有独一无二的内存空间,这就是它的虚拟内存。
    进程内部分了很多段,而段内分了许多页。比如某页放在 “只读的代码和数据”中。
    当需要执行时,将页加载到真正的 物理内存

    那如何做到从 虚拟地址到物理地址 的映射,这就是 内存映射

    虚拟地址.png

    逻辑地址和线性地址

    • 逻辑地址,就是物理磁盘上地址的一个偏移量。
    • 线性地址,就是地址在自己内存空间的一个地址。

    它们两个加一下,就是找到了此页的地址。此地址再与内存的物理地址映射。

    MMU 就来做这件事。

    内存映射.png

    相关文章

      网友评论

          本文标题:Linux 基础之内存管理

          本文链接:https://www.haomeiwen.com/subject/navjphtx.html