- GitHub计算机系统CSAPP课程资源
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.1-2.2)
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.3-2.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.2-3.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.5-3.7)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.8-3.10)
- 计算机系统课程 笔记总结 CSAPP第四章 处理器体系结构(4.1-4.3)
- 计算机系统课程 笔记总结 CSAPP第五章 优化程序性能(5.1-5.14)
- 计算机系统课程 笔记总结 CSAPP第六章 存储器层次结构(6.2-6.6)
- 计算机系统课程 笔记总结 CSAPP第七章 链接(7.1-7.13)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.2-8.4)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.1-9.5)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.6-9.10)
目录
9.1 物理和虚拟寻址
9.2 地址空间
23:8048000 段寄存器(CS等16位):偏移地址(16/32/64)
实模式下: 逻辑地址CS:EA =è物理地址CS*16+EA
保护模式下:以段描述符作为下标,到GDT/LDT表查表获得段地址,
段地址+偏移地址=线性地址。
- 线性地址空间: 非负整数地址的有序集合:
{0, 1, 2, 3 … }- 虚拟地址空间: N = 2n 个虚拟地址的集合 ===线性地址空间
{0, 1, 2, 3, …, N-1} - 物理地址空间: M = 2m 个物理地址的集合
{0, 1, 2, 3, …, M-1} - Intel采用段页式存储管理(MMU实现)
- 段式管理: 逻辑地址->线性地址==虚拟地址
- 页式管理: 虚拟地址->物理地址
- 虚拟地址空间: N = 2n 个虚拟地址的集合 ===线性地址空间
- 逻辑地址空间:段地址:偏移地址
9.3 虚拟内存作为缓存的工具
为什么要使用虚拟内存?
- 有效使用主存
- 使用DRAM作为部分虚拟地址空间的缓存
- 简化内存管理
- 每个进程都使用统一的线性地址空间
- 独立地址空间
- 一个进程不能影响其他进程的内存
- 用户程序无法获取特权内核信息和代码
- 概念上而言,虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组.
- 磁盘上数组的内容被缓存在物理内存中 (DRAM cache)
- 这些内存块被称为页 (每个页面的大小为P = 2p字节)
9.3.1 DRAM缓存的组织结构
- DRAM 缓存的组织结构完全是由巨大的不命中开销驱动的
- DRAM 比 SRAM 慢大约 10倍
- 磁盘比 DRAM 慢大约 10,000倍
- 因此
- 虚拟页尺寸: 标准 4 KB, 有时可以达到 4 MB
- DRAM缓存为全相联
- 任何虚拟页都可以放置在任何物理页中
- 需要一个更大的映射函数 – 不同于硬件对SRAM缓存
- 更复杂精密的替换算法
- 太复杂且无限制以致无法在硬件上实现
- DRAM缓存总是使用写回,而不是直写
9.3.2 页表
- 页表 是一个页表条目 (Page Table Entry, PTE)的数组,将虚拟页地址映射到物理页地址。
- DRAM中的每个进程都使用的核心数据结构
9.3.3 页命中
即(DRAM 缓存命中)
- Page hit页命中: 虚拟内存中 的 一个字存在于物理内存中,
9.3.4 缺页
- Page fault缺页: 虚拟内存中的字不在物理内存中 (DRAM 缓存不命中)
9.3.5 分配页面
9.3.6 又是局部性救了我们
- 虚拟内存看上去效率非常低, 但它工作得相当好,这都要归功于“局部性”.
- 在任意时间,程序将趋于在一个较小的活动页面集合上工作,这个集合叫做 工作集 Working set
- 程序的时间局部性越好,工作集就会越小
- 如果 (工作集的大小 < 物理内存的大小)
- 在初始开销后,对工作集的引用将导致命中。
- 如果 (工作集的大小 >物理内存的大小)
- Thrashing抖动: 页面不断地换进换出,导致系统性能崩溃。
9.4 虚拟内存作为内存管理的工具
- Key idea核心观点: 每个进程都拥有一个独立的虚拟地址空间
- 把内存看作独立的简单线性数组
- 映射函数通过物理内存来分散地址
- 好的映 射函数可以提高程序的局部性
- Simplifying memory allocation 简化内存分配
- 每个虚拟内存页面都要被映射到一个物理页面
- 一个虚拟内存页面每次可以被分配到不同的物理页面
- Sharing code and data among processes 简化代码和数据共享
- 不同的虚拟内存页面被映射到相同的物理页面 (此例中的 PP 6)
简化链接和加载
- Linking 链接
- 每个程序使用相似的虚拟地址空间
- 代码、数据和堆都使用相同的起始地址.
- Loading 加载
- execve 为代码段和数据段分配虚拟页,并标记为无效(即未被缓存)
- 每个页面被初次引用时,虚拟内存系统会按照需要自动地调入数据页。
9.5 虚拟内存作为内存保护的工具
- 在 PTE 上扩展许可位以提供更好的访问控制
- 内存管理单元(MMU)每次访问数据都要检查许可位(段错误)
- SUP:进程是否必须运行在内核模式下才能访问该页
- 运行在用户模式下的进程只允许访问SUP=0的页面
- READ和WRITE为控制对页面的读和写访问
- 若进程i运行在用户模式下
- 有读VP0的权限和读写VP1的权限,不允许访问VP2
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.1-2.2)
- 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.3-2.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.2-3.4)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.5-3.7)
- 计算机系统课程 笔记总结 CSAPP第三章 程序的机器级表示(3.8-3.10)
- 计算机系统课程 笔记总结 CSAPP第四章 处理器体系结构(4.1-4.3)
- 计算机系统课程 笔记总结 CSAPP第五章 优化程序性能(5.1-5.14)
- 计算机系统课程 笔记总结 CSAPP第六章 存储器层次结构(6.2-6.6)
- 计算机系统课程 笔记总结 CSAPP第七章 链接(7.1-7.13)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
- 计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.2-8.4)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.1-9.5)
- 计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.6-9.10)
- GitHub计算机系统CSAPP课程资源