`
tetsu.soh
  • 浏览: 77238 次
  • 性别: Icon_minigender_1
  • 来自: 东京
社区版块
存档分类
最新评论

对GDT的解释(上)

阅读更多
《自己动手写操作系统》是本很有意思的书。不过于渊前辈对某些内容没有给出更多的解释,让我们这些新米很难上手。

书中第3章介绍保护模式的时候,题到了GDT这个东东。在这里给出一个更浅显的介绍。

在介绍GDT这个概念前,现介绍一下segmentation这个概念。

大家还记得ORG这个汇编命令吧。书的开篇,给出的boot.asm代码的第一行就是:
    ORG 0x7c00

这个ORG就是告诉CPU,程序被载入内存的0x7c00这个地方了。也就是说CPU从这个内存地址开始读取指令就OK了。
但是,现在的CPU同时执行好几个程序是很正常的事情。那么不同的程序使用的内存就有可能重叠,这样载入程序的话就会发生冲突。解决方法之一就是把把内存分成若干个段(segmentation)。每段放一个程序,这样每个程序都可以声明ORG 0了。很方便。
(另一个解决方法是paging,这个以后有机会在谈。)

为了能使用segmentation, 每个段(segment)都需要清楚的表明以下信息:
- 段(segment)的大小。
- 段在内存中的开始位置。
- 段的管理属性。比如只读,系统专用等等

CPU用8bytes(=64bits)来表示这些信息(叫做descriptor)。但是,CPU用来指定段的register只有16bits。就算是32bit的CPU,这个register也是16bits的。那怎么办呢?
方法就是每个segment给一个"编号"(正式叫做segment selector),然后在把这个编号放在register里就好了。剩下的工作就是让编号和segment一一对应起来。

大概的感觉是这样的:
1号segment的大小是4GB,从内存的0000开始。(也就是指整个内存了。)
2号segment的大小是xxKB,从内存的xxxx开始。。。。

segment的编号为0~8191。 刚才说了,segment register是16bits,按理说应该可以存放2**16 = 65536个编号。但是由于CPU设计式样的问题,最低3bits不能用,也就是只有13bits可用,刚好是2**13=8192个。

每个segment的描述需要8bytes,一共就需要8192*8=64KB。CPU里可没有这么大的空间。所以就放在内存里好了。这个64KB(可以小于这个值),记录了分段信息的数据结构就叫做GDT -- Global (segment) Descriptor Table. 我不知道这个东东的正式翻译是什么,直译过来就是一个存放了描述分段信息的表。

这次介绍了GDT的概念和这个东东是怎么来的,干什么用的。

下次介绍segment descriptor的数据结构,和如何使用。

2
0
分享到:
评论
1 楼 sulong 2009-06-07  
GDT叫全局段描述表,以前在大学的时候也学过这个东西,还在dos下开发汇编,很折腾人!

相关推荐

    Orange’s:一个操作系统的实现 Descriptor 3宏详解

    补充:关于GDT/LDT、段选择子和段描述符的解释  GDT/LDT:GDT/LDT是段描述符表,里面定义了每个段的段描述符的界限和属性,而段描述符的基址是在代码段中初始化的。  其中,LDT是局部描述符表,LDT在GDT中也有段...

    几种常见防雷器件简绍.doc

    gdt气体防雷管,mov压敏电感,pptc自恢复保险丝,tvs瞬态抑制管,基本原理,响应时间,参数解释,

    自己动手写操作系统 电子工业出版社 pdf

    1.4 代码解释3 1.5 水面下的冰山5 1.6 回顾6 第2章 搭建你的工作环境7 2.1 虚拟计算机(Virtual PC)7 2.1.1 Virtual PC初体验8 2.1.2 创建你的第一个Virtual PC9 2.1.3 虚拟软盘研究12 2.1.4 虚拟软盘实战14 2.2 ...

    自己动手写操作系统 pdf

    1.4 代码解释3 1.5 水面下的冰山5 1.6 回顾6 第2章 搭建你的工作环境7 2.1 虚拟计算机(Virtual PC)7 2.1.1 Virtual PC初体验8 2.1.2 创建你的第一个Virtual PC9 2.1.3 虚拟软盘研究12 2.1.4 虚拟软盘实战14 2.2 ...

    自己动手写操作系统

    1.4 代码解释3 1.5 水面下的冰山5 1.6 回顾6 第2章 搭建你的工作环境7 2.1 虚拟计算机(Virtual PC)7 2.1.1 Virtual PC初体验8 2.1.2 创建你的第一个Virtual PC9 2.1.3 虚拟软盘研究12 2.1.4 虚拟软盘实战14 ...

    fancy-mouse-boot-rom:免费的 MCPX 启动 ROM 实现以在 Xbox 控制台上加载 Xbox BIOS

    此引导 ROM 完成以下操作: 设置GDT 启用保护模式启用 32 位模式(因为 x86 以向后兼容的 16 位模式启动) 加载并解释操作码以初始化控制台解码、验证并传递给 Xbox 的第二阶段引导加载程序(<4817 个内核) ...

    EMI-EMC入门与精通(电源系列)资料合集.zip

    EMI-EMC入门与精通(电源系列)资料合集,共90多份。 EMC测试标准之雷击浪涌测试 EMC产品微晶材料(VITROPERM)共模滤波磁芯及电感 EMC的十个为什么 EMC防护设计参考 EMC高级培训资料 ...X电容Y电容解释

    自己动手写操作系统(含源代码).part2

    在读完本书后,你不但可以获得对于操作系统初步的感性认识,并且对 IBMPC的接口、IA架构之保护模式,以及操作系统整体上的框架都将会有一定程度的了解。 笔者相信,当你读完本书之后,如果再读那些纯理论性的操作...

    自己动手写操作系统(含源代码).part1

    在读完本书后,你不但可以获得对于操作系统初步的感性认识,并且对 IBMPC的接口、IA架构之保护模式,以及操作系统整体上的框架都将会有一定程度的了解。 笔者相信,当你读完本书之后,如果再读那些纯理论性的操作...

    电源系列EMI-EMC入门开关电源EMI设计经验EMC详细的技术资料选型和应用技巧资料100个合集.zip

    EMC器件设计之GDT.pdf EMC器件设计之PTC热敏电阻.pdf EMC器件设计之TVS.pdf EMC基础知识---华为.pdf EMC整改方法.pdf EMC测试标准之雷击浪涌测试.pdf EMC的十个为什么.pdf EMC第二章-电磁兼容测试的基础知识.ppt EMC...

    电源设计开关电源设计电磁兼容电磁干扰EMI EMC设计资料大集合.zip

    EMC器件设计之GDT.pdf EMC器件设计之PTC热敏电阻.pdf EMC器件设计之TVS.pdf EMC基础知识---华为.pdf EMC整改方法.pdf EMC测试标准之雷击浪涌测试.pdf EMC的十个为什么.pdf EMC第二章-电磁兼容测试的基础知识.ppt EMC...

    易语言-易语言驱动 过保护 内核重载 钩子扫描 DPC

    我还是要解释下 SK 的作用: 比如我写了一个识图算法 识图之前我先要拿到窗口的图像 那么假如可以调用PrintWindow 但是我也可以调用SK的PrintWindow类似的函数达到系统函数的效果 SK的函数可以绕过所有Hook并且增加...

Global site tag (gtag.js) - Google Analytics