1.什么是虚拟内存?
虚拟内存和物理内存相对。物理内存就是计算机真实的内存,虚拟内存是操作系统抽象出来的一个概念,每个进程都有自己的虚拟内存空间,进程看到的内存是虚拟内存,进程不能看到物理内存。操作系统和CPU负责将虚拟内存映射到物理内存。
2.虚拟内存有什么用?
- 虚拟内存隔离了进程,进程不能相互影响。
- 虚拟内存的权限可以保护操作系统,进程不能任意修改内核空间。
- 虚拟内存的概念简化了程序的编译链接和执行。进程都有相同的虚拟内存空间。
- 虚拟内存使操作系统能够更好的利用物理内存。
3. 页表
虚拟内存是分页的,一般每页是4kb。虚拟内存按页和物理内存对应。连续跨页的虚拟内存在物理内存上不一定是连续的。MMU负责做内存的映射,一般分为两级页表。页表最终会对应到磁盘文件,具名或者匿名。
4. 缺页中断
一开始分配虚拟内存时是不会在物理内存上操作的。当进程读取某一块内存,内存没有对应的物理内存时,就会发生缺页中断。内核这时分配一块物理内存和虚拟内存对应,当物理内存不够时,会按照某种算法挑选一个victim,置换掉。
5. 共享内存
动态库,文件,fork操作等等会在进程之间共享内存。如果内存是read only,那么会在物理内存上只有一份拷贝(例如动态库)。当某个进程写了内存时,会采用copy-on-write的方式,copy出另外一个页,然后再写,这时内存不再共享。mmap映射的内存可以写共享,进程可以看到别的进程对内存的修改,这也是进程间通信的一种方式。