[操作系统] 虚拟内存技术

操作系统对主存(和其他辅助主存的资源)的一套抽象机制。

虚拟内存技术为每个进程提供了一个一致、私有的进程空间,从进程角度看,它似乎得到了一块连续的内存空间。

这是因为操作系统在内核中为每个进程都维护了一张页表,用以做内存地址映射。

1.地址概念

物理地址:硬件访问内存时使用的地址,是固定的。

虚拟内存地址:由操作系统维护的虚拟地址表,虚拟地址可能对应多个物理内存碎片、暂存在外存上的数据等。虚拟内存一般用于用户进程,通常来说不同进程中的同一个虚拟地址指向的物理地址不相同。

举例:进程A的地址1和2分别对应物理地址90和96,进程B的地址1和2则分别对应89和94。

用户空间:进程保存数据的空间,在逻辑上是内存的一部分(32位机器的0到3G),用户进程通常情况下只能访问到这部分内存。每当进程切换,用户空间会随之变化(即当前进程对应的数个内存块)。

内核空间:系统内核占据的空间,在逻辑上是内存单独划分且被保护的一部分,用户进程只有在进行系统调用(进入内核态)的情况下可以访问到这部分内存。内核空间地址是固定的,但页拥有自己的页表。

2.页表

每个进程从操作系统获取到的内存地址是连续的虚拟地址,在访问实际内存地址时,CPU需要用到内核维护的进程页表,内核为每个进程都维护了一个页表。

进程页表保存了对应进程虚拟地址的地址映射,可能有以下情况:

a. 对应一个物理地址。

b. 没有对应的物理地址,这是由于操作系统响应申请内存要求时采用了“延迟内存分配策略”。若需要访问这种情况的虚拟地址,会在CPU中产生缺页中断,由系统进行物理内存分配并返回中断。

c. 对应一个外存地址。一般是映射磁盘文件(执行打开文件操作时),在访问虚拟地址时才会将数据加载进内存并进行地址关联,在不使用该部分内存后会进行清空,从而提高内存利用效率。

d. 对应一个共享内存地址,这在mmap等机制中被用到,即虚拟地址指向的是和其他进程共享的一块内存,当同一份资源被多个进程共用时可以减少内存消耗。(按:其处理机制可能类似于fork函数的copy-on-write?)

3.引入虚拟内存机制的优点

a. 提供更大和连续的地址空间。

b. 隔离进程,现在每个进程只能看到自己的虚拟地址,无法直接对其他进程造成影响。

c. 保护数据,在维护虚拟内存表时可为每块内存设置读写属性,例如对程序代码段设置只读保护。

d. 内存映射,可以将虚拟地址直接映射到磁盘文件(可能还包括其他设备,如socket)。

e. 平衡内存使用,由系统进行内存分配和回收。

posted @ 2021-10-21 21:49  Cheung-10  阅读(1)  评论(0)    收藏  举报