机制:地址转换
文章目录
对于一个进程来说,它只能看到自己的地址空间。 在进程的角度,对内存的每次访问,都使用虚拟地址来访问内存;当然,这也是为了编程简单,在编程时,不必考虑真实的内存,程序运行在虚拟内存系统之上,在进程眼里,它使用的内存是地址空间。( 实际的内存情况,交给虚拟内存系统将虚拟地址映射到物理地址)
然而,在内存的角度,要读取内存,必须使用物理内存,所以,需要一种地址转换机制,在每次使用虚拟地址访问时,将这个虚拟地址转换为物理地址,从而对内存进行访问。
如何实现虚拟内存系统(虚拟化内存)
重定位:重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程。(其实就是地址转换的另一个名字)
如图,是一个进程的地址空间(左),以及将将这个地址空间装入物理内存(右)的情况(不考虑分段的情况,先分析简单的情况):
地址空间装入内存后,称为重定位的进程(Relocated Process)
如图所示,整个个地址空间(虚拟地址为0KB~16KB)都被装入物理内存(物理地址32KB~48KB)。
现在问题来了,进程访问内存通过虚拟地址,虚拟地址1KB对应的物理地址是多少?
整个地址空间装入之后,虚拟地址和物理地址的值不相等,因此需要对地址进行转换(重定位),注意,地址空间装入内存后,虽然重定位的进程的物理地址并不等于在地址空间中的虚拟地址,但是,装入内存前后,相同的数据相对于地址空间首部和相对于重定位进程的首部&