CSAPP 9 虚拟内存
CSAPP 9:虚拟内存
虚拟内存的三个重要功能:
- 将物理内存作为一种缓存,缓存硬盘上的一个私有内存地址空间
- 让每一个进程拥有独立的内存地址空间
- 确保进程之间的内存不会互相影响
理解虚拟内存的关键在于意识到:一个数据对象(字节)可以有多个属性(地址)。话句话说,一个内存对象可以有两个地址,一个物理地址,一个虚拟内存地址。
虚拟内存:缓存
概念上,虚拟内存是硬盘上一串连续的字节空间。一般会规定 m 个字节为一个分页,分页只有三种状态:
- 未分配
- 缓存
- 未缓存
Linux中的虚拟内存
Linux Kernel 通常把进程的虚拟内存空间用一系列的 Segment (Area) 表达。Kernel会管理这些segment,进程也只能引用segment指向的内存空间。
demand paging:只有在需要的时候,硬盘上内容才会被读入物理内存。
copy-on-write:共享的可写内容,只有在需要写入的时候,才会只做副本。
Linux初始化虚拟内存空间是通过Memory Mapping进行的,kernel会把硬盘上某个文件的内容与该内存空间联系起来。一旦虚拟内存分页初始化结束,kernel会在内存和一个特殊的 swap 文件中进行 paging 操作。
Practical Problem 9.5
1 |
|
Memory Allocator
未完待续
Garbage Collector
未完待续