【读书笔记】虚拟地址的概念?分页分段的概念

早期计算机程序直接运行在物理内存,多程序运行会出现地址空间不隔离、内存使用率低、程序运行地址不确定等问题。为解决这些问题引入虚拟地址,通过映射转化为物理地址。现代计算机进程有虚拟地址空间,映射涉及分段、分页,分段解决部分问题,分页可提高效率,依靠MMU实现映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、虚拟地址概念由来

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

但是!为了高效利用硬件资源(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.youkuaiyun.com/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)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值