码迷,mamicode.com
首页 > 其他好文 > 详细

四个名词(很常见):虚拟内存,虚拟内存地址(线性地址),物理内存,物理内存地址,逻辑地址

时间:2015-10-06 18:04:23      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

为什么会有虚拟内存和物理内存的区别?

     正在运行的一个程序,它所需的内存是有可能大于内存条容量之和的,比如你的内存条是1G,但是你的程序需要2G的数据区,那么不是所有数据都能一起加载到内存(物理内存)中,势必有一部分数据要放到其他介质中(比如硬盘),待进程需要访问那部分数据时,再通过调度进入物理内存,所以虚拟内存是进程运行时所有内存空间的总和,他是远大于物理内存的一个虚拟存储空间,是将外存的一部分作为内存的扩展来使用,并且很多时候有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条,有的地方也叫虚拟内存为内存交换区。

那么什么是虚拟内存地址和物理内存地址?

     假设你的计算机是32位,他的地址总线是32位的,也就是他可以寻址0-0xFFFFFFFF(4G)的地址空间,但是如果你的计算机只有256M的物理内存0-0x0FFFFFFF(256M),同时你的进程产生了一个不在这256M地址空间中的地址,那么计算机该怎么处理呢?先说说计算机的内存分页机制?

计算机会对虚拟内存地址空间(32位为4G)分页产生页(page),对物理内存地址空间分页会产生页帧,这个页和页帧的大小是一样的,所以呢,这里虚拟内存页的个数势必要大于物理内存页帧的个数,在计算机上有一个页表,就是映射虚拟内存页到物理内存页的,更确切地说是页号到页帧号的映射,而且是一对一的映射,但是问题来了,虚拟内存页的个数>物理内存页帧的个数,岂不是有些虚拟内存页的地址永远也没有对应的物理内存地址空间,不是的,操作系统是这样处理的,操作系统有个页面失效功能,操作系统找到一个最少使用的页帧,让它失效,并把它写入磁盘,随后把需要访问的页放到页帧中,并修改页表中的映射,这样就保证所有的页都有被调度的可能了,这就是处理虚拟内存地址到物理内存的步骤

 

现在来回答什么是虚拟内存地址和物理内存地址?

     虚拟内存地址由页号和偏移量组成,(页号对应一个页帧),偏移量就是页的大小,即这个页到底能存多少数据。

例如:有一个虚拟地址,它的页号是4,偏移量是20,那么它的寻址过程是这样的,首先到页表中找到页号4对应的页帧号(假设是8),如果页不在内存中,则用失效机制调入页,否则把页帧号和偏移量传给MMU(CPU的内存管理单元)组成一个物理上真正存在的地址,接着就是访问物理内存中的数据了,总结起来:虚拟内存地址大小是与地址总线位数有关,物理内存地址的大小跟物理内存条的容量有关

 

补充一点:线性地址就是虚拟内存地址,表示的是页式内存管理转换前的地址

逻辑内存:就是段式内存管理转换前的地址

四个名词(很常见):虚拟内存,虚拟内存地址(线性地址),物理内存,物理内存地址,逻辑地址

标签:

原文地址:http://www.cnblogs.com/jijiji/p/4857356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!