用户态的程序 -(编译执行)- 进程
进程访问 - 虚拟地址 -(分段机制)- 线性地址 - (分页机制)- 物理地址
每个进程都拥有4G大小的虚拟内存空间,
1G空间被每个进程共享,即内核空间;3G由每个进程各自私有,即私有空间。
任意一个时刻,在一个CPU上只有一个进程在运行;虚拟地址随着进程间的切换而变化。
Linux 简化了分段机制,使得虚地址与线性区地址总是一致;所以可以将虚地址与线性地址合为一体来看待。
Linux 内核在用户申请内存时,只是给它分配了一个线性区(也就是虚存),并没有分配实际物理内存;
只是当用户使用这块内存的时候,内核才会分配具体的物理页面给用户,占用宝贵的物理内存。
内核释放物理页面是通过释放线性区,找到相应的物理页面,将其全部释放的过程。
Linux 内核在创建进程时,并不为整个用户空间都分配好相应的物理空间,
而是根据需要才真正分配一些物理页面,并建立映射。
如果某个虚拟地址在页表中并不存在和某个物理地址之间的映射,那么系统将发生一次缺页异常;
此时,操作系统必须从磁盘或交换文件中将要访问的页装入物理内存。
阅读(1128) | 评论(0) | 转发(0) |