一起来学习Linux中的内存寻址

对于很多初学者来说,内存寻址是比较难理解的,在学习的过程中,进行总结,就显得格外重要。

内存在计算机系统中时格外重要的部分,就是因为其重要,所以内核要对这一部分进行管理,而且是非常精细的管理。

在学习的过程中,有时会看到内存的物理地址,有时又会看到线性地址,那么可能会有点搞不清楚之间的关系,其实比较简单的就是物理地址就相当于电脑中插的那个内存条里的由总线可以访问到的地址,而线性地址是内核对物理地址的包装,因为这样对于系统更好理解,便于管理。如果说系统是一个政府,那么政府要对所管理的地区进行命名,要细分到每条街道,这就是为了系统便于管理,如果都用GPS定位的坐标来进行寻址,那么一定很蛋疼,内核所做的就是对原始的客观的物理地址进行了一次封装,让其更好理解与使用。

linux内核是通过分页管理来对内存进行寻址的,其实,就和我们看书一样,把一本书分章,节和页。

在分页分页,顾名思义,就是把整个内存分为一页一页,这里的一页表示的是什么呢,其实是一个页框,就相当于一本书中的一页纸,每本书都由很多页纸组成,内存也是如此,由很多的页框来组成,而写在书里某页纸中的内容,就是内存中某个页框中的页数据了。

看书分章节,寻址也是如此,这里涉及到2个数据结构,一个叫页目录,一个叫页表,页目录相当于书中的章,页表相当于章中的节,那么页表中就是页了,这样就是

页目录->页表>某个页框->页框里有4096字节

章        ->    节-> 某一页  ->页里有4096个字

经过内核包装过的线性地址也是32位,但是这个32位与物理地址的32位天壤之别。在线性地址中的32位是分为了3个部分,最高的10位表示的是页目录,2的10次方=1024,那么也就是说内存这本大书有1024个章。接下来的10位表示页表,也是1024,这样就是每章都有1024节,接下来的12位,也就是4096,表示书中的每页都由4096个字组成。

那么,那些数据结构页目录和页表是个什么节奏呢?

页目录和页表具有相同的结构,里面存放了一些原始的物理地址,毕竟还是要有物理地址的,不然这不就成了自编自导自演了么。由于每个页框有4KB的容量,那么这个页框的低12位就应该是也只能是0,这样就只要找到高20位就可以找到这个页框的起始物理地址,所以在页目录和页表中有一个Field字段有20位用来包含页框物理地址最高的20位。不过,这两个结构找到的页框里面的内容可是不同的,页目录找到的页框里面装的是页表,页表找到的页框,里面装的可就是页数据了,一样的框,不一样的内容。

当然,在实际的内核中并没有使用这样的2级分页,但是基本原理是一样的,就不过多赘述了。

接下来要说的是,内核给每个活动的进程都分配了一个页目录,这个怎么理解呢?要知道,内存是一本很大很大的书,这么大的书,自己一个人看就显得不好了吧,分给大家一起看。每个活动的进程就相当于是一个在看书的人,这个人就会看书中的某一部分,有些人比较有想法,就会边看边写,有些人则喜欢几个人一起看同一部分的内容,有人则自己看的时候不让其他人看,那么内核在对内存管理的时候,也要一一满足各种的需求,这就是后话了,内存寻址就先到这里吧。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值