内存分段与分页机制

1.物理地址和逻辑地址

  逻辑地址->线性地址->物理地址 

    8086CPU:

       物理地址:段地址*16+偏移量 (20位总线地址)

       逻辑地址:页码*16+偏移量  (16位寄存器地址)

    8086CPU以后总线寻址和CPU位数趋于一致,操作系统结构向下兼容,线性地址基址置0:

       虚拟地址:每个进程的虚拟地址空间32位操作系统为4G,其中1G内核页面,3G用户页面  (32位CPU寄存器地址)

           操作系统保护模式下的,启用分页机制的地址即虚拟地址,实模式下,虚拟地址和逻辑地址相同


       物理内存划分:帧(Frame)               逻辑内存划分:页(Page)

       地址总线:intel早期CPU20位(内存1M);286的地址总线24位(内存64M);386的地址总线32位(内存4G

       总线:地址总线、数据总线、控制总线

2.页表的软硬件实现

         页表:段寄存与页码对应表,如下page table

                  内存分段与分页机制_第1张图片

         实现方式:硬件使用TLB(Translation look-aside buffer翻译后备缓冲区)+内存存储

                内存分段与分页机制_第2张图片

3.段表硬件结构

       段表:基地址+界限寄存器(限制偏移量大小)

              内存分段与分页机制_第3张图片

4.逻辑地址结构

      逻辑地址   = 段选择符+段内偏移量

              

              段选择符中,索引号对应段描述符

              内存分段与分页机制_第4张图片

              段描述符存放在:                  

                      GDT(Global Descriptor Table,全局描述表),GDTR寄存器保存段描述符

                      LDT(Local Descriptor Table,本地描述表),LDTR寄存器保存段描述符,如单个进程

5.逻辑地址转线性地址    

             内存分段与分页机制_第5张图片

             段选择符:TI=0使用GDT,TI=1使用LDT

6.页表数据结构(如:段描述符和段选择符)

       a.层次划分页(Hierarchical Paging

               内存分段与分页机制_第6张图片

       b.Hashed Page Tables 哈希页表

           内存分段与分页机制_第7张图片



本文参考以下资料,图片引用来源于此,本文只做归纳总结:

http://www.cnblogs.com/felixfang/p/3420462.html

http://blog.csdn.net/drshenlei/article/details/4261909

http://wenku.baidu.com/link?url=6vkfCHh2LeGvc6PfxmmrqKXkv4oM3S6PujD_mdBDiyBjvi5bY5YyCRYdVAqO7T13wECaeBj9CubE6AqRC6ct_rJT6zfkkxJb8armQGgBuZ_

http://blog.chinaunix.net/uid-22683402-id-1771372.html

http://bbs.chinaunix.net/thread-2083672-1-1.html

你可能感兴趣的:(开发随笔,问题杂记)