GDT与LDT

GDT与LDT

  • 引言
    全局描述符表与局部描述符表过去虽然看过,但是印象不深很深,后来看了《自己动手实现一个操作系统》,提到实模式到保护模式转换时,改短代码初始时候只能看懂几句,无法通透,所以过来补充点基础知识。

LDT属于程序,GDT属于系统,同一台计算机上的所有程序共享一个GDT。
LDT描述局部于每个程序的段,包括其代码、数据、堆栈等。GDT描述系统段,包括操作系统本身。

GDT

整个系统中只有GDT(一个处理器对应一个),可以存放在内存的任何位置,那么如何获得GDT的入口地址呢? Intel使用一个48位的寄存器GDTR存储GDT的入口地址。使用LGDT xxx将GDT的入口地址装入GDTR,之后CPU根据GSTR的内容访问GDT表,相应的又LDTR,与GDTR相同的功能,只是它存放的LDT的入口地址。

GDTR结构
  • 段选择子(Selector)
    GDTR访问全局描述符表是通过“段选择子”(实模式下的段寄存器16bit)完成,为了访问一个段,需要将这个段的选择子装入6个段寄存器中的一个。在运行过程中,cs寄存器保存代码段的选择子,ds寄存器保存数据段的选择子,每个选择子16bit。
    选择子结构
    如图所示,选择子的第2位T指出访问的是全局描述符表(0)还是局部描述符表(1),3~15位索引是LDT或GDT表的表项编号,指明在表中的位置。找到相应的描述符后使用sel:offset转换为线性地址。所以描述符表最大能够存储2^13=8KB个描述符。第0位RPL表示选择子的特权级,共有四个特权级(0级,1级,2级,3级)。在任务重每一个段都有一个特定的基本,每当一个程序试图访问某一个段时,就将该程序所拥有的特权级与要访问的特权级进行比较(数字越小级别越高)。系统规定,CPU只能访问同一个特权级或者级别较低特权级的段。GDT与LDT都是保护模式中的,之前不明白实模式与保护模式的区别,如何保护,系统级别与特权级别的区别在哪里,到这里稍微有点明白。在保护模式中通过描述符表,选择子加入了特权级别的检验以下是全局描述符表的数据结构:
struct SEGMENT_DESCRIPTOR{
  short limit_low,base_low;/*段上限的低16位和段基址的低16位*/
  char base_mid,access_right;/*访问权限*/
  char limit_high,base_hight;/*段上限的高8位和基址的高8位*/};

LDT

LDT局部描述符表可以有若干张,每个任务可以有一张。我们可以这样理解GDT和LDT:GDT为一级描述符表,LDT为二级描述符表。如图


LDT

LDT和GDT从本质上说是相同的,只是LDT嵌套在GDT之中。LDTR记录局部描述符表的起始位置,与GDTR不同LDTR的内容是一个段选择子。由于LDT本身同样是一段内存,也是一个段,所以它也有个描述符描述它,这个描述符就存储在GDT中,对应这个表述符也会有一个选择子,LDTR装载的就是这样一个选择子。LDTR可以在程序中随时改变,通过使用lldt指令。如上图,如果装载的是Selector 2则LDTR指向的是表LDT2。举个例子:如果我们想在表LDT2中选择第三个描述符所描述的段的地址12345678h。

  1. 首先需要装载LDTR使它指向LDT2 使用指令lldt将Select2装载到LDTR
  2. 通过逻辑地址(SEL:OFFSET)访问时SEL的index=3代表选择第三个描述符;TI=1代表选择子是在LDT选择,此时LDTR指向的是LDT2,所以是在LDT2中选择,此时的SEL值为1Ch(二进制为11 1 00b)。OFFSET=12345678h。逻辑地址为1C:12345678h
  3. 由SEL选择出描述符,由描述符中的基址(Base)加上OFFSET可得到线性地址,例如基址是11111111h,则线性地址=11111111h+12345678h=23456789h
  4. 此时若再想访问LDT1中的第三个描述符,只要使用lldt指令将选择子Selector 1装入再执行2、3两步就可以了(因为此时LDTR又指向了LDT1)由于每个进程都有自己的一套程序段、数据段、堆栈段,有了局部描述符表则可以将每个进程的程序段、数据段、堆栈段封装在一起,只要改变LDTR就可以实现对不同进程的段进行访问。
    段描述符

    P,present位,1表示所描述的段存在(有效),为0表示所描述的段无效,使用该描述符会引起异常DPL,
    Descriptor privilege,描述符特权级别,说明所描述段的特权级别DT,描述符类型位,1说明当前描述符为存储段描述符,0为系统描述符或门描述符.
    TYPE:位0:A(accessed)位,表明描述符是否已被访问;把选择子装入段寄存器时,该位被标记为1位
    3:E(EXECUTABLE?)位,0说明所描述段为数据段;1为可执行段(代码段)当为数据段时, 位1为W位,说明该数据段是否可写(0只读,1可写) 位2为ED位,说明该段的扩展方向(0向高位扩展,1向低位扩展)当为可执行段是, 位1为R位,说明该执行段是否可读(0只执行,1可读) 位2为C位,0说明该段不是一致码段(普通代码段),1为一致码段G为粒度位,0说明LIMIT粒度为字节,1为4K字节.D位:
    1.在可执行段中,D为1,表示使用32位地址,32/8位操作数;为0表示使用16位地址,16/8位操作数
    2.在由SS寻址的段描述符(堆栈段?)中,D为1表示隐含操作(如PUSH/POP)使用ESP为堆栈指针, 为0使用SP(隐含操作:未明确定义段属性类型USE16/USE32?66H,67H?)
    3.在向低扩展的存储段中,D为1,表示段的上限为4G;为0上限为64K存储段描述符的结构表示:

    分段管理可以把虚拟地址转换成线性地址,而分页管理可以进一步将线性地址转换成物理地址。当CR0中的PG位置1时,启动分页管理功能,为0时,这禁止启动分页管理功能,并且把线性地址作物理地址使用。虚拟地址转为线性地址:线性地址= 段基指 + 偏移地址32位线性地址转为物理地址:32位分为:页目录索引:占最高10位,指示页目录表中第几个页表描述符页表索引:占12位到21位,也是10位。指示这页表中第几个页描述符页描述符:线性地址的低12位为页内偏移量。 具体描述转载自
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 5-Level Paging and 5-Level EPT white paper原文 修订版本1.1 2017...
    公子小水阅读 3,621评论 0 3
  • 核心目的:实现由实模式到保护模式的转换 核心步骤: 1)程序定义了GDT数据结构 2)16位代码进行了一些...
    王侦阅读 1,098评论 0 0
  • 第二章 内存寻址 内存地址 内存地址分为三种:逻辑地址(logical address)(段+偏移量) ...
    rlkbk阅读 411评论 0 1
  • 生为云兮 飘摇不定 智化甘露 落尘润物 合一为体 何来你我 莲生自性 花开见佛 任重道远 障碍重重 惟有志坚 重归云天
    菩提果zk张珂阅读 216评论 0 1
  • “嗯?这是哪里?”我睁开了眼睛,阳光透过玻璃棺撒在我的身上,耀眼的光芒令我几乎睁不开眼睛。 周围是一望无际的海洋,...
    沉星赶月阅读 497评论 0 1