操作系统-内存管理
虚拟内存
- 内存只有一个,运行程序有很多,避免用绝对物理地址,操作系统为每个进程分配虚拟地址,真正要用的时候,再分配地址
- 操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来
- 操作系统如何管理映射表呢?内存分段、内存分页
内存分段
- 程序是由逻辑分段组成的。不同的段有不同的属性,所以就用分段的形式把这些分离出来
- 虚拟地址分为段选择子和段内偏移量
- 物理地址 = 段基地址 + 偏移量
- 缺点: 内存碎片、内存交互的效率低
内存分页
- 空间都是预先划分好的,采用啦分页,那么释放的内存都是以分页为单位释放的,也就不会产生无法给进程使用的小内存
- 解决内存碎片
- 换入、换出
- 物理地址 = 页号 + 页内偏移
简单分页有缺陷:页表占用位置太大
多级页表
- 把地址分为好几级
- 如果某一个页表的页表项没有被用到,也就不需要创建这个页表项对应的二级页表,就可以再需要时才创建二级页表。
- 页表一定要覆盖全部虚拟地址空间,不分级的页表就需要有100多万个页码项来映射,而二级分页则只需要1024个页表项。
页表缓存TLB
- 多级页表,因为分级所以查找起来十分慢,所以在cpu上完成地址转化和TLB访问和交互。
- 有啦TLB后,cpu在寻址的时候,先查TLB,如果没找到再查寻常的页表。
Linux内存管理
- 采用分页内存管理,也涉及段机制
- 虚拟地址分为内核空间和用户空间