为了使用户程序在运行时具有一个私有的地址空间、有自己的 CPU,就像独占了整个计算机 一样,现代操作系统提出了虚拟内存的概念
虚拟内存的主要作用主要为三个:
- 它将内存看做一个存储在磁盘上的地址空间的高速缓存,在内存中只保存活动区域,并 根据需要在磁盘和内存之间来回传送数据。
- 它为每个进程提供了一致的地址空间。
- 它保护了每个进程的地址空间不被其他进程破坏。
现代操作系统采用虚拟寻址的方式,CPU 通过生成一个虚拟地址(Virtual Address(VA)) 来访问内存,然后这个虚拟地址通过内存管理单元(Memory Management Unit(MMU))转换 成物理地址之后被送到存储器
Linux 为每个进程维持了一个单独的虚拟地址空间,包括了 .text、.data、.bss、栈 (stack)、堆(heap),共享库等内容
32 位系统有 4GB 的地址空间,其中 0x080480000xbfffffff 是用户空间(3GB),
0xc00000000xffffffff 是内核空间(1GB)