我是靠谱客的博主 冷静航空,最近开发中收集的这篇文章主要介绍【读书笔记】虚拟地址的概念?分页分段的概念,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、虚拟地址概念由来

早期计算机中,程序直接运行在物理内存,也就是说,程序在运行时所访问的地址都是物理地址。那么如果一台计算机只运行一个程序,只要这个程序要求的物理内存空间不超过物理内存的大小,就不会出问题。

但是!为了高效利用硬件资源(CPU、内存、IO设备),计算机一定要同时运行多个程序,那么多个程序直接运行在物理内存上,可能会出现不可描述的未知错误,比如:“如何将计算机有限的内存分配给多个程序”就是一个大问题。

举例:

假设某台计算机有128MB的内存,程序a运行需要10MB,b需要100MB,c需要20MB。同时运行a,b,比较直接的做法是将内存的前10MB给a程序,10MB~110MB给b。这样的话,就会出现问题。

1.地址空间不隔离

abc直接访问物理地址,程序所使用的内存空间不隔离。那么恶意程序就可以改写其他程序的内存数据,以达到破幻目的。或者程序不小心修改额其他程序的数据,会导致其他程序崩溃。

2.内存使用率低

由于没有内存管理机制,通常需要一个程序执行时,监控程序就将整个程序装入内存中然后开始执行。如果我们忽然要运行c程序,内存不够了,这时可以用交换分区解决:将其他程序写入磁盘空出内存,再运行c,c运行完再将磁盘中数据。大量的数据换入换出,导致效率低下。

3.程序运行时的地址不确定

程序每次需要装入运行时,需要给它从内存中分配一块足够大的空闲区域,这个空闲区域的位置不确定。这就带来了问题。

因为程序编写时,它访问数据和指令跳转时的目标地址很多是固定的,这就涉及到重定位问题。

 

  为了解决这几个问题,思路就是:增加中间层,使用一种间接的地址访问方法。把程序给出的地址看作是一个虚拟地址,然后通过某些映射的方法,将虚拟地址转化为实际的物理地址。这样只需要控制好这个虚拟地址到物理地址的映射过程,就可以保证任意一个程序所访问的物理地址内存区域 和 另一个程序 互相不重叠,就达到地址空间隔离的效果。

------------------------------------------------

说回到我们现在的计算机,我们知道每个进程都有4G的虚拟地址空间?

怎么来的呢?

是因为在32位的机器中(32位说的是CPU硬件),有32根计算机地址线,那么物理地址就有4GB,那如果内存只有1G呢?

只是说有效的物理地址空间是1G,其他的是无效的存在。

----------------------------------------------

要把虚拟地址空间映射到物理地址(装载的概念)就要涉及到分段、分页的概念了。

这一部分就是操作系统要去做的事情了,涉及到页映射,页装载,及其映射的算法:FIFO先进先出、LUR最少使用......

 

二、分段和分页(可参考https://blog.csdn.net/QX_a11/article/details/89338810)

1.分段什么意思?

把程序所需大小的虚拟空间 映射到 物理地址上。

举例:

程序a需要10MB的内存空间,我们现在有a程序的虚拟空间,地址从0x00000000到0x00A00000 (大小10MB),然后从物理内存上划分出一个10MB的物理地址,假设是0x00100000到0x00B00000,然后把这两个10MB的虚拟空间和物理空间 一一映射(虚拟空间中的每个字节对应到物理内存空间上)。

结果:分段解决的地址隔离问题和运行时地址不确定的问题,但是解决不了效率低下(如果内存不足,就要换进换出)。怎么办?分页...

2.分页:

基本方法:把地址空间等份分成固定大小,每一页的大小由硬件决定,目前绝大多数PC中,设定为为每页4KB。

把进程的地址空间按页分割,把常用的数据和代码装载到内存中,把不常用的代码和数据保存在磁盘中,当需要用到时再把磁盘中的页取出来。

 如图有两个进程:进程1和进程2,每个进程分割成8个页,中间的物理内存只能分割成6个页(硬件大小决定);

进程1的0、1、7号页分别映射到物理内存上的0、2、3号页,有的部分页在磁盘上,有的页没有被访问到。

虚拟空间中的页叫做虚拟页,物理内存上的页叫做物理页。图中的带箭头的线就是映射关系。

虚拟存储的实现需要依靠硬件的支持,几乎所有的CPU都采用MMU的部件来进行映射,,如下图:

 页映射模式下,CPU发出虚拟地址,经过MMU转换以后变成物理地址。

 

关于MMU:Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。

最后

以上就是冷静航空为你收集整理的【读书笔记】虚拟地址的概念?分页分段的概念的全部内容,希望文章能够帮你解决【读书笔记】虚拟地址的概念?分页分段的概念所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部