Linux虚拟内存

一、虚拟内存定义
 虚拟内存是计算机系统内存管理的一种技术。它使应用程序认为它拥有连续可用的内存(一个连续完整的地址空间)。
二、其他概念
逻辑地址是指CPU所生产的的地址
物理地址支持实际内存的地址
三、虚拟内存技术的实现
虚拟内存实际是通过分页方法来实现的。
分页技术会将物理内存分为固定大小的块,称为帧。
逻辑内存也分为相同大小的块,成为页。
帧或页的小小一般是4KB,这个是由硬件决定,而分页的机制是操作系统来实现。
硬件提供了将逻辑地址转换成物理地址的功能。
页表一种数据结构,用来将虚拟地址空间映射到物理地址空间虚拟地址。
每个进程有自己的页表,页表维护在内存里,由操作系统管理。CPU通过页面基寄存器访问页表项。
CPU还提供了转换表缓存区缓存部分页表条目,以便更快地实现逻辑地址到物理地址的转换。
64位Linux采用了四级的页表技术,有效减少了页表本身的内存占用。
每级可存储512个条目,一个虚拟地址长度为9+9+9+9+12=48位。
四、虚拟内存分配
用户程序是不能直接申请物理内存的,申请的都是虚拟内存。
应用程序申请分配了某个大小的内存,并不表示实际申请了该大小的物理内存。
物理内存的分配会延迟到虚拟内存的特定页被访问时,如果该页还没分配物理内存,
才会申请分配,这个机制叫做缺页中断。
五、虚拟内存机制的有点
因为用户进程无法直接申请和访问物理内存,保证了各进程间的内存隔离,
是没办法访问到其他进程的内存的。
缺页中断机制,将实际物理内存的分配延迟到了访问时,有效节省了内存。
用户进程可以分配一块较大连续的逻辑地址空间,但实际的物理地址空间可以是不连续的。

你可能感兴趣的:(逻辑地址,虚拟内存,页表,缺页中断,操作系统,Linux)