Linux 基础之内存管理

2020-04-04  本文已影响0人  Robin92

早期

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

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

内存管理

交换分区

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

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

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

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

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

虚拟内存

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

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

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

内存映射

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

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

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

虚拟地址.png

逻辑地址和线性地址

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

MMU 就来做这件事。

内存映射.png
上一篇 下一篇

猜你喜欢

热点阅读