您的位置:首页 > 运维架构 > Linux

linux内存管理机制

2017-04-12 23:07 204 查看
转载出处:http://blog.sina.com.cn/u/2312748742

一、地址类型:

   1)物理地址,它是指被cpu放到地址总线上,用于寻找物理存在的存储单元的地址。总线上使用的地址。

   2)线性地址,硬件平台页式管理转换前的地址。

   3)逻辑地址,硬件平台段式管理转换前的地址。又名虚拟地址。

 

二、关系:

   程序代码产生出来的是逻辑地址。cpu要将一个逻辑地址转换成物理地址。所以cpu利用段式内存管理单元将逻辑地址转成线性地址。再利用页式内存管理单元,把线性地址转成物理地址。

逻辑地址--(段式管理单元)--》 线性地址 --(页式管理单元)--》 物理地址。

三、段式、页式概念:

   1)计算机内存以字节为最小单位进行线性编址,16位cpu有20根地址线。2^20=1M内存。但16位只能访问64K,因此为了能访问1M的内存空间,cpu采用内存分段管理模式,cpu内部加入段寄存器。16位cpu把1M内存空间分成若干逻辑段。每个逻辑段要求:

   逻辑段的起始地址(段地址)必须是16的倍数,即最后4个二进制必须都为0. 再者:逻辑段的最大容量为64K。

   物理地址形成:段地址为16的倍数,故可以只保存前16位的二进制来保存整个段基地址。后4为0不管它。故每次可以把段寄存器左移补4个0.来得到实际的段地址。但为了能指定内存单元的具体位置,还必须指定该单元距离段基地址多远,即段内偏移。有了段地址和偏移量。就能确定内存单元的具体位置。

   逻辑地址有两部分组成: 段标示符:段内偏移量; PA(物理地址)=段寄存器的值*16+偏移量。

   段寄存器:为了能对内存进行分段管理而增加的。16位cpu有四个段寄存器。程序可以同时访问这四个不同含义的段。

    cs+ip  代码段访问:cs存放程序的段基址,ip指向下一个要执行的指令在cs段的偏移量。

   32位cpu和16一样,不过他有分实模式和保护模式。

 

   2)分页管理:

   它负责把一个线性地址,最终翻译成一个物理地址。线性地址被分为以固定长度为单位的组。称为页。

   步骤:1、装入进程的页目录地址。2、根据线性地址前十位,在页目录中,找到相应索引项。页目录中的项是一个页表的地址。3、根据线性地址的中间十位。在页表中找到页的起始地址。4、将页的起始地址与线性地址中最后12位相加得到物理地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: