9.1物理和虚拟寻址
早期:
现代:
9.2地址空间:
地址空间是一个非负整数地址的有序集合
地址空间的整数是连续的,我们说他是一个线性地址空间。在一个虚拟内存的系统中,CPU从一个有N=2n个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间
9.3 虚拟内存作为缓存的工具
虚拟页面的集合分成三个不相交的子集:
未分配的
缓存的
未缓存的
9.4 虚拟内存作为内存管理的工具
9.5虚拟内存作为内存保护的工具
虚拟页面结构:SUP、READ、WRITE、地址
SUP:表示进程是否必须运行在内核(超级用户)模式下才能访问该页
READ和WRITE:控制对页面的读和写访问
9.6 地址翻译
地址翻译是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)中元素之间的映射
9.6.3 多级页面
9.7案例研究
9.8 内存映射
虚拟内存和物理内存的映射关系,共享对象:虚拟内存指向相同的位置,有变更的时候才在拷贝,也称作写时拷贝,这样设计可以节省很多空间,底层函数 mmap和munmap 创建和删除虚拟内存的区域
9.9动态内存分配
9.10:垃圾收集:可以手动收集free,有时候会忘记使用收集函数,导致碎片。系统和开发语言研发出主动收集器:垃圾收集器。
垃圾收集器:可以自动收集不是用的内存块。他通过标记和清除方式实现的垃圾收集。垃圾收集器会根据如下操作:已分配的块->从根节点开始向下查找相关联的块,并把它们标记上。 未被标记的已分配的块被清除
为什么不是已分配已标记的清除方式:
1、需要初始化的还是把分配块提前分配为已标记,然后遍历块把链接的标记为非分配的。清除已分配的。这样的方案会多一个步骤把全部分配的块先标记已分配,所以不用这种方式。