X86内存管理之分段管理

来源:互联网 发布:用友u8物理数据备份 编辑:程序博客网 时间:2024/05/01 00:31

       最近一直在学习X86汇编,自己打算从基础的开始学习,对以后做嵌入式开发有一定的帮助。

今天看了关于在X86处理上两种关于内存管理的方式:分段管理和分页管理,以及课程中没有讲到的段页式管理。

下面我想讲讲自己对这三个内存管理方式的理解,有错还希望大家多指教:

一.分段管理

        在286以下的CPU中(8086,8088),地址线是20位,可寻址范围220b=1M。而在8088或8086中寄存器只有16位,即216b=64K,那么如果利用16寄存器访问到1M的地址空间呢?INTEL公司提出了内存分段管理机制:

1.段寄存器,首先1M内存空间正好被分为16个段,每个段的大小为64K。由于每个段为64K,那么每个段的起始地址都应该是XXXX0H这种形式。从“XXXX0H”可以看出,这个20位的地址是不能被直接存放到16位寄存器中的,但从这个地址可以看出它的最低位总是0H=0000b,则将这个地址的最低位去掉后,就可以保存到16位寄存器中,并将其称为段寄存器。

2.段内偏移,由于现在每个段都有64 K空间,则必须有一个保存段内某一个具体地址的16位寄存器,则将其称为段内偏移量寄存器。

       利用以上机制后,就可以利用两个16位的寄存器(段寄存器,段内偏移量寄存器)组合在一起访问1M以内的任何内存单元 。哪如何利用这两个16位寄存器访问一个物理单元呢?物理地址:

根据前面第一点“1.段寄存器”所说的,可知段寄存器中所保存的内容是段基址被去掉最低位的0H=0000b而得到的,所以在计算真正物理地址时,必需将最后低位的0H=0000b补上,即将段基址左移四位则可得到,再加上段内偏移量,则物理地址的计算公式为:

                                                     物理址=段基址<<4 + 偏移量

      

由于时间关系,就写到这里吧, 有时间再将分页管理写出来!

原创粉丝点击