现在的位置: 首页 > 综合 > 正文

操作系统分页分段小笔记

2013年12月08日 ⁄ 综合 ⁄ 共 1601字 ⁄ 字号 评论关闭

以前看分页分段时记得笔记,今天无意翻出来发现记得还挺好的,虽然当时貌似看的不怎么懂,博客发下

分段机制:
CS,DS,ES,FS,GS,SS  段选择器
高13位表示索引(从0开始)
第二位 TI=0在GDT中,TI=1在LDT中
0,1位表示程序的当前优先级RPL

GDTR:全局描述符表寄存器 48位  指向全局描述符表GDT
LDTR:局部描述符表寄存器 16位  类似段寄存器

虚拟地址到线性地址的形成过程:
xxxx:yyyyyyyy  段地址与偏移地址
(1)xxxx的TI位为0
   1.GDTR寄存器中取GDT基址
   2.段选择器xxxx中取索引得到段描述符
   3.从段描述符中得到段的基址加上偏移地址yyyyyyyy得到线性地址 
  
(2)xxxx的TI位为1
   1.GDTR寄存器中取GDT基址
   2.LDTR中取索引得到LDT段的位置
   3.xxxx中取索引从LDT中得到段描述符
   4.从段描述符中得到段的基址加上偏移地址yyyyyyyy得到线性地址 

分页机制:
寄存器的位数都是从0计数的
控制寄存器:
CRO
启用保护模式PE(Protected Enable)位(位0)和开启分页PG(Paging)位(位31)分别用于控制分段和分页机制。
PE:CR0的位0是启用保护(Protection Enable)标志。当设置该位时即开启了保护模式;当复位时即进入实地址模式。这个标志仅开启段级保护,而并没有启用分页机制。若要启用分页机制,那么PE和PG标志都要置位。
PG:CR0的位31是分页(Paging)标志。当设置该位时即开启了分页机制;当复位时则禁止分页机制,此时所有线性地址等同于物理地址。在开启这个标志之前必须已经或者同时开启PE标志。即若要启用分页机制,那么PE和PG标志都要置位。
CR1  保留不用
CR2  用于出现页异常时报告出错信息
CR3  含有存放页目录表页面的物理地址(物理地址!),因此该寄存器也被称为页目录基地址寄存器PDBR(Page-Directory Base address Register)。
CR4  PAE标志 启用物理地址扩展,可最多寻址64GB物理内存,否则最多4GB。
           PSE标志 用于启用大页面支持 PAE=1时,大页面为2MB,PAE=0,时,大页面为4MB

线性地址到物理地址:
把物理地址或线性地址换分为大小相同的块,称为页(可能物理地址有不同的叫法)

页:开始地址XXXXX000H,XXXXX是页码,页码左移12位是页的开始地址

映射表结构:
页目录跟页表都是操作系统负责建立的
第一级:页目录
    页目录是用来存放页目录表项(PDE)的线性表。每个页目录占4KB内存页,PDE每个4字节,相除=1024,包含对应的第二级表所在物理地址空间页的页码(高20位是页表基址)。当没有启用PAE时,有两种PDE格式,分别用于指向4KB的页表和4MB的内存页。
第二级:页表
    页表是用来存放页表表项(PTE)的线性表。每个页表占4KB内存页,PTE每个4字节。2MB和4MB的大内存页是直接映射到页目录表项的,不需要使用页表。

地址翻译:
1.CR3寄存器取页目录起始地址
2.取线性地址的高10位作为索引选取页目录的一个表项,也就是PDE
3.根据PDE中的页表基址(取PDE的高20位,低12位设为0)定位到页表
4.取线性地址的12位到21位(10位)作为索引选取页表的一个表项,也就是PTE
5.取出PTE的内存页基址(取PTE的高20位,低12位设为0)
6.取线性地址的低12位作为页中偏移与上一步的内存页基址相加得到物理地址

对于4MB的大内存页,PDE的高10位便是4MB内存页的基地址的高10位,线性地址的低22位是页中偏移。

由这个过程我们可知二级分页地址机制带来的严重问题就是内存访问效率的严重下降,由不分页时的1次,上升到了3次,这个问题必须解决。那就是利用cache实现地址的快速变换。

抱歉!评论已关闭.