0、OS能使用最大的虚拟内存和物理内存
最大的虚拟内存与寻址总线有关。一般是40根,对应256T
最大的物理内存与PTE的位数有关。
10-10-12分页模式下是32位,所以最大寻址空间就4G
1、CPU分页模式
分类
还有5-level,一般适用于大型服务器。
特征
10-10-12分页模式最大访问物理内存地址是4G。多个进程访问的话地址会重复去用。
PAE paging分页模式增大了PTE的位数,让寻址空间大于4G,让32位操作系统支持更大的物理内存(最大支持64G)。如下图所示
2、MMU如何工作(101012分页模式)
一个PTE(Page Table Entry页表项)对应4K物理内存。PTT(Page Table Tree页表树)表里有1024个PTE、PDT(Page Directory Table页目录表)表里有1024个PDE(Page Directory Entry页目录项)。
-
这就是一个程序可以用4G内存的由来:1024*1024*4K=4G
-
每个进程都有自己的PDT、PTT、页表
3、CPU写内存方式
写通(write-through)和写回(write-back)
4、两种映射方式
错位映射(主流)
一一映射(32位系统1M以下的内存。64位4M以下的内存。原理是PTT表是对应1024*4K = 4M内存)
5、内存结构
虚拟地址
6、虚拟内存管理模块
内存池算法
-
空闲列表:空闲列表是一种简单的内存池算法,它维护了一个空闲内存块的列表。当需要分配内存时,从空闲列表中取出一个内存块,并将其状态设置为已分配。当释放内存时,将该内存块的状态设置为空闲,并将其加入到空闲列表中。
-
指针碰撞:指针碰撞是一种基于哈希表的内存池算法。它使用哈希函数将内存块的大小作为关键字,将内存块的指针作为值存储在哈希表中。当需要分配内存时,通过哈希函数找到一个空闲的内存块,并将其分配给进程。当释放内存时,将该内存块的指针存储在哈希表中,并将其状态设置为空闲。
-
伙伴算法:伙伴算法是一种基于分治思想的内存池算法。它将内存分成大小相同的块,并将这些块组织成一棵二叉树。当需要分配内存时,从二叉树中找到一个合适的叶子节点,并将其分配给进程。当释放内存时,将该内存块的指针存储在二叉树中,并将其状态设置为空闲。