GDT,LDT,GDTR,LDTR
物理地址逻辑地址虚拟地址的概念

3、把Base + offset,就是要转换的线性地址了。
还是挺简单的,对于软件来讲,原则上就需要把硬件转换所需的信息准备好,就可以让硬件来完成这个转换了。OK,来看看Linux怎么做的。
2、CPU段式内存管理,逻辑地址如何转换为线性地址
一个逻辑地址由两部份组成,段标识符: 段内偏移量。段标识符是由一个16位长的字段组成,称为段选择符。其中前13位是一个索引号。后面3位包含一些硬件细节,如图:
最后两位涉及权限检查,本贴中不包含。
索引号,或者直接理解成数组下标--那它总要对应一个数组吧,它又是什么东东的索引呢?这个东东就是"段描述符(segment descriptor)",呵呵,段描述符具体地址描述了一个段(对于"段"这个字眼的理解,我是把它想像成,拿了一把刀,把虚拟内存,砍成若干的截--段)。这样,很多个段描述符,就组了一个数组,叫"段描述符表",这样,可以通过段标识符的前13位,直接在段描述符表中找到一个具体的段描述符,这个描述符就描述了一个段,我刚才对段的抽像不太准确,因为看看描述符里面究竟有什么东东--也就是它究竟是如何描述的,就理解段究竟有什么东东了,每一个段描述符由8个字节组成,如下图:
3、Linux的段式管理
Intel要求两次转换,这样虽说是兼容了,但是却是很冗余,呵呵,没办法,硬件要求这样做了,软件就只能照办,怎么着也得形式主义一样。
另一方面,其它某些硬件平台,没有二次转换的概念,Linux也需要提供一个高层抽像,来提供一个统一的界面。所以,Linux的段式管理,事实上只是"哄骗"了一下硬件而已。
q8分析x86和分段系统操作系统me

查阅资料,分析X86如何实现用户进程与用户进程之间、用户进程与操作系统之间的隔离;分析分段系统和段页式系统的地址变换机制。
X86的隔离机制主要是通过全局描述符表(GDT)和局部描述符表(LDT)来实现,其中全局描述符表里装载的是可供系统中所有任务使用的段描述符。
局部描述符表只含有与系统中某一个给定任务相关联的描述符。
那么什么是段描述符呢,在CPU的保护模式下,把有关一个段的信息即段基址、限长(段的字节数,个人理解是偏移量)、类型、访问权限成为段描述符,简称描述符(Descriptor)其中描述符又分为非系统段描述符和系统段描述符。
非系统段即应用程序段,也就是通常的代码段、数据段、和堆栈段;而系统段包括任务状态段TSS (Task State Segment)和各种门,另外,局部描述符表也作为一种系统段。
任务状态段是多任务系统中的一种特殊数据结构,它对应一个任务的各种信息。
为了查找和识别,把系统中的描述符以线性表的形式来组织,即构成描述符表。
描述符表的每一项就是一个描述符。
描述符表由操作系统建立,并由操作系统维护和管理。
三种类型的描述符表:GDT,LDT和IDT(中断描述符表)·全局描述附表GDT含有可供系统中所有任务使用的段描述符。
·局部描述符表LDT只含有与系统中某一个给定任务相关联的描述符。
· 中断描述符表IDT 含有指出各中断服务程序位置及相关属性信息的描述符。
由于描述符表是位于存储器中的,因此系统中分别用一个寄存器来指出其位置,并称该寄存器为描述符表寄存器——一共有三个描述符表寄存器:GDTR,LDTR,IDTR 。
每个段描述符都有一个与之对应的段选择符。
在保护模式下,16位段寄存器的内容即为段选择符。
段选择符对GDT 或LDT 提供索引、全局/局部标志以及请求特权级信息。
即用段选择赴的高13位来选择描述符表中8192个描述符中的一个描述符(2^13=8192),13次方用段选择符的右数第3位决定是从GDT 中还是从LDT 中选择描述符,用段选择赴的最低两位指出请求特权级。
微机原理与接口技术习题答案2011..

2. 选择题 (3) 在8086最小方式的读操作时序中,外界
将要输入的数据送上AD线时,在D 的前沿 ,此数据被采样送入CPU。 A. T1 B. T2 C. T3 D. T4
3
(4)逻8辑03地86址有三线种性存地储址地址物空理间地,址它们
是
, 和分段 ,这三种分地页址是
的是 C 。
A. 地址总线B. 数据总线C. 控制总线D. 以上都不对
(5) 通常计算机系统中的外围设备是指 A 。
A. 外存储器、输入设备及输出设备 B. 外存储器、输
入设备 C. 外存储器、输出设备 D. 输入设备、输
出设备
3. 判断题 (1) 计算机中的运算器、控制器和内存储器合称为中
央处理机。 ( × )
由全速总线同CPU内核相连。 (√)
7
4. 简答题
(4) 80386CPU如何从逻辑地址得到线性地址?如何从线性地 址得到物理地址? 答:在保护方式下,Pentium对存储器的组织管理采用两级 存储器管理的策略,即所谓的分段管理和分页管理,分别由 Pentium中的分段部件SU和分页部件PU完成。 分段部件接收到逻辑地址后,根据段选择子的表指示器TI的 值选择全局描述符表(GDT)还是局部描述符表(LDT), 当TI=0时选中GDT,TI=1时选中LDT。选择完描述符表后, 通过段选择子高13位的索引从被选中的描述符表中找出相应 的8个字节的段描述符,从中取出32位段基址(B31~B0) ,32位的段基地址与32位的偏移地址相加后就得到了32位的 线性地址,从而完成了分段部件SU的主要任务。
8
分页部件PU用页目录表和页表实现两级地址转换。 高一级的页目录表中,每一项为一个页目录描述符, 包括了下一级页表的信息,对应于一个页表。低一级 是页表,每一项对应物理存储器中的一页。 控制寄存器中的CR3为页目录表基地址寄存器,用来 保存页目录表在存储器中的物理起始地址。DIR作为 页目录索引从4KB的页目录表中选取一个页目录描述 符(占4个字节, ①页目录描述符所在地址为页目录 索引乘以4与页目录表基地址CR3相加得到),② PAGE作为页表索引从页表中选取一个页描述符(同 样,页描述符所在地址为页表索引乘以4再与页表基 地址相加得到),③而页内偏移量则作为页内的偏移 地址与页描述符提供的页基地址相加产生存储器单元 的32位物理地址。
GDT、LDT、GDTR、LDTR、段寄存器一图流

GDT、LDT、GDTR、LDTR、段寄存器⼀图流段描述符表段描述符表简称描述符表,⽤来存储保护⽅式下段描述符的⼀个阵列。
80386/80486 CPU 共有3 种描述符表:全局描述符表GDT、局部描述符表LDT 和中断描述符表IDT。
描述符表由描述符顺序排列组成,占⼀定的内存,由系统地址寄存器(GDTR 、LDTR、IDTR) 指⽰其在物理存储器中的位置和⼤⼩。
全局描述符表GDT 是供所有任务使⽤的描述符表,在物理存储器地址空间中定义全局描述符表GDT。
通常操作系统使⽤的有代码段描述符、数据段描述符、调⽤门描述符、各个任务的LDT 描述符、任务状态段TSS 描述符、任务门描述符等。
局部描述符表LDT 是每⼀项任务运⾏时都要使⽤的描述符表。
在多任务操作系统管理下,每个任务通常包含两部分:与其他任务共⽤的部分及本任务独有的部分。
与其他任务共⽤部分的段描述符存储在全局描述符表GDT内;本任务独有部分的段描述符存储在本任务的局部描述符表LDT 内。
这样,每个任务都有⼀个局部描述符表LDT,⽽每个LDT 表⼜是⼀个段,它也就必须有⼀个对应的LDT 描述符。
该LDT 描述符存储在全局描述符表中。
局部描述符表LDT 中所存储的属于本任务的段描述符通常有代码段描述符、数据段描述符、调⽤门描述符及任务门描述符等。
GDT 和LDT 段描述符表实际上是段描述符的⼀个长度不定的数据阵列,如图8.5 所⽰。
描述符表在长度上是可变的,最多容纳213 个描述符,最少包含⼀个描述符。
每个项有8 个字节长,称为⼀个段描述符。
中断描述符表IDT暂不介绍。
段寄存器(中的TI)、GDT、LDT、GDTR、LDTR关系:1.4 段选择符 段描述符表(GDT、LDT)是通过选择符来索引的,IDT不⽤通过选择符,直接⽤中断号索引。
保护模式下段寄存器存放的都是段选择符。
选择符⼀共16位,格式如下:Index⼀共13位,正好可以索引到GDT或者LDT的最⼤限长。
微型计算机原理习题及解答

微机原理习题1、微处理器、微型计算机和微型计算机系统三者之间有什么不同?答:微型计算机系统:包括微型计算机的硬件系统和必要的系统软件。
微型计算机的硬件系统包括:微型计算机和外围设备。
微型计算机:主要是由微处理器(MPU)、存储器(ROM、RAM)、I/O接口、系统总线组成。
微处理器(MPU):是用微电子技术将中央处理器(CPU)集成在一块芯片中制成的超大规模集成电路(IC),从逻辑的角度看,其内部主要包括:运算器(或称算术逻辑单元(ALU))、控制器和一定数量的寄存器组成。
2、控制总线传输的信号大致有哪几种?答:控制总线用来传输控制信号,协调各部件之间的工作;控制总线是双向的;控制总线包括CPU送往存储器和输入/输出接口电路的控制信号,如读信号、写信号和中断响应信号等;控制总线还包括其他部件送到CPU的信号,比如,时钟信号、中断请求信号和准备就绪信号等。
3、微型计算机采用总线结构有什么优点?答:采用总线结构的优越性主要表现在两个方面:①简化系统的设计,使CPU、RAM、ROM、I/O接口的设计简单化、标准化,使复杂的硬件系统变为面向总线的单一关系。
②方便系统的硬件扩充——一个部件只要符合总线标准,就可以连接到采用这种总线标准的系统中。
4、简述8086 CPU的逻辑结构。
答:从逻辑功能上,8086分为两部分:总线接口部件BIU(Bus Interface Unit);执行部件EU(Execution Unit)。
其中,总线接口部件包括:地址加法器、段寄存器组、IP指针、指令队列缓冲器、和输入输出控制电路;执行部件包括:运算器、通用寄存器组、标志寄存器、和执行部分的控制电路。
5、8086/8088 和传统的计算机相比在执行指令方面有什么不同? 这样的设计思想有什么优点?答:传统的计算机都是按照下面3个步骤循环工作的:①从指令指针所指的内存单元中取一条指令送到指令寄存器。
②对指令进行译码,而指令指针进行增值,以指向下一条指令的地址。
80x86 保护运行模式

80x86 保护运行模式80386 概述80386 是一个高级的32 位微处理器,专门用于多任务的操作系统,并为需要高性能的应用所设计。
32位的寄存器和数据通道支持32 位的寻址方式和数据类型,处理器可以寻址最高可达4GB 的物理内存以及64TB(246字节)的虚拟内存。
芯片上的内存管理包括地址转换寄存器、高级多任务硬件、保护机制以及分页虚拟内存机制。
下面针对系统编程,概要说明使用80386 的这些基本原理。
系统寄存器设计用于系统编程的系统寄存器主要包括以下几类:标志寄存器EFALGS;内存管理寄存器;控制寄存器;调试寄存器;测试寄存器。
系统标志寄存器EFLAGS 控制着I/O、可屏蔽中断、调试、任务切换以及保护模式和多任务环境下虚拟8086 程序的执行。
其中主要标志见下图所示。
31 23 15 7 00 0 0 0 0 0 0 0 0 0 0 0 O 0VMRFNTIOPLOFDFIFTFSFZFAFPF1CF其中系统标志:VM –虚拟8086 模式;RF –恢复标志;NT –嵌套任务标志;IO PL – I/O 特权级标志;IF –中断允许标志。
内存管理寄存器有4 个,用于分段内存管理:GDTR –全局描述符表寄存器(Global Descriptor Table Register);LDTR –局部描述符表寄存器(Local Descriptor Table Register);IDTR –中断描述符表寄存器(Interrupt Descriptor Table Register);TR –任务寄存器。
其中前两个寄存器(GDTR,LDTR)分别指向段描述符表GDT 和LDT。
IDTR 寄存器指向中断向量表。
TR 寄存器指向处理器所需的当前任务的信息。
80386 共有4 个控制寄存器,分别是CR0、CR1、CR2 和CR3。
格式见下图所示。
31 23 15 7 0页目录基地址寄存器Page Directory Base Register (PDBR)保留ReservedCR3附录465页异常线性地址Page Fault Linear AddressCR2保留ReservedCR1PG保留ReservedETTSEMMPPECR0控制寄存器CR0 含有系统整体的控制标志。
实模式与保护模式

摘自“/rosetta/article/details/8933200”64KB-4GB-64TB?我记得大学的汇编课程、组成原理课里老师讲过实模式和保护模式的区别,在很多书本上也有谈及,无奈本人理解和感悟能力实在太差,在很长一段时间里都没真正的明白它们的内含,更别说为什么实模式下最大寻址空间为1MB?段的最大长度不超过64KB?而保护模式下为啥最大寻址能力就变成了64TB?每个段最大也达4GB?更甚者分段和分页这两个高深的概念像我这种菜鸟怎么也理解不了啊!寻址能力都达64TB了,为啥我的电脑内存只有2GB呢?其实不用纠结于这事,这64TB就是所谓的虚拟地址空间,也叫逻辑地址空间,它能够寻址这么多,只是它有这个能力,并不代表你的内存就要装这么大,你内存比它小再多也不会影响你工作,反过来,要是它的寻址能力只有1MB,而你有2GB的内存,那么那1.9GB就没有实际用处了,这就太浪费资源了。
而实际上这个64TB也没有什么实际意义,因为32位的地址总线能寻址的线性地址空间和物理地址空间都是2^32=4GB。
这个64TB是怎么出来的,稍后揭晓。
实模式与保护模式的来历我们先来说一下为什么有实模式和保护模式的区别。
最早期的8086 CPU只有一种工作方式,那就是实模式,而且数据总线为16位,地址总线为20位,实模式下所有寄存器都是16位。
而从80286开始就有了保护模式,从80386开始CPU数据总线和地址总线均为32位,而且寄存器都是32位。
但80386以及现在的奔腾、酷睿等等CPU为了向前兼容都保留了实模式,现代操作系统在刚加电时首先运行在实模式下,然后再切换到保护模式下运行。
再来区别下几个基本概念:逻辑地址、线性地址和物理地址。
这些概念一时没领会没关系。
继续往下看。
三种地址逻辑地址:即逻辑上的地址,实模式下由“段基地址+段内偏移”组成;保护模式下由“段选择符+段内偏移”组成。
线性地址:逻辑地址经分段机制后就成线性地址,它是平坦的;如果不启用分页,那么此线性地址即物理地址。
段页管理

段页管理机制声明:收集转载别人部分自己加工过内存管理分为两种方式:1分段管理逻辑地址->物理地址2段页管理逻辑地址->线性地址->物理地址(一)GDT与LDT保护模式下的段寄存器由 16位的选择器与 64位的段描述符寄存器构成段描述符寄存器:存储段描述符选择器:存储段描述符的索引(GDTR: 48b=32+16;LDTR: 16b)PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,FS,GS)80位的段寄存器,同时提供6个段左右机器当前运行的地址空间。
由选择器CS对应表示的段仍为代码段,选择器SS对应表示的段仍为堆栈段(1)全局描述符表GDT(Global Descriptor Table)在整个系统中,全局描述符表GDT 只有一张(一个处理器对应一个GDT),GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址,程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令将GDT 的入口地址装入此积存器,从此以后,CPU就根据此寄存器中的内容作为GDT的入口来访问GDT了。
GDTR中存放的是GDT在内存中的基地址和其表长界限。
(2)段选择子(Selector)由GDTR访问全局描述符表是通过“段选择子”(实模式下的段寄存器)来完成的,如图三①步。
段选择子是一个16位的寄存器(同实模式下的段寄存器相同)如图四段选择子包括三部分:描述符索引(index)、TI、请求特权级(RPL)。
他的index(描述符索引)部分表示所需要的段的描述符在描述符表的位置,由这个位置再根据在GDTR中存储的描述符表基址就可以找到相应的描述符(如图三①步)。
然后用描述符表中的段基址加上逻辑地址(SEL:OFFSET)的OFFSET就可以转换成线性地址(如图三②步),段选择子中的TI值只有一位0或1,0代表选择子是在GDT选择,1代表选择子是在LDT选择。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GDT,LDT,GDTR,LDTR
买了本罗老师的琢石成器,才看前3章就感觉晕晕忽忽,总体觉得要看懂这本书前提是必须会DOS汇编,了解32位汇编基础.DOS汇编本人只看了王爽老师的汇编语言前11章,中断这块还没有看,看来不看还是不行的。
转回来说,罗老师这本书前3章写的很乱,尤其是描述符这块,看了似懂非懂,通而不透。
只能自己抽丝剥茧,捋清头绪,慢慢体会:
段选择器:32位汇编中16位段寄存器(CS、DS、ES、SS、FS、GS)中不再存放段基址,而是段描述符在段描述符表中的索引值,D3-D15位是索引值,D0-D1位是优先级(RPL)用于特权检查,D2位是描述符表引用指示位TI,TI=0指示从全局描述表GDT中读取描述符,TI=1指示从局部描述符中LDT中读取描述符。
这些信息总称段选择器(段选择子).
段描述符:8个字节64位,每一个段都有一个对应的描述符。
根据描述符描述符所描述的对象不同,描述符可分为三类:储存段描述符,系统段描述符,门描述符(控制描述符)。
在描述符中定义了段的基址,限长和访问内型等属性。
其中基址给出该段的基础地址,用于形成线性地址;限长说明该段的长度,用于存储空间保护;段属性说明该段的访问权限、该段当前在内存中的存在性,以及该段所在的特权级。
段描述符表:IA-32处理器把所有段描述符按顺序组织成线性表放在内存中,称为段描述符表。
分为三类:全局描述符表GDT,局部描述符表LDT和中断描述符表IDT。
GDT和IDT 在整个系统中只有一张,而每个任务都有自己私有的一张局部描述符表LDT,用于记录本任务中涉及的各个代码段、数据段和堆栈段以及本任务的使用的门描述符。
GDT包含系统使用的代码段、数据段、堆栈段和特殊数据段描述符,以及所有任务局部描述符表LDT的描述符。
GDTR全局描述符寄存器:48位,高32位存放GDT基址,低16为存放GDT限长。
LDTR局部描述符寄存器:16位,高13为存放LDT在GET中的索引值。
IA-32处理器仍然使用xxxx:yyyyyyyy(段选择器:偏移量)逻辑方式表示一个线性地址,那么是怎么得到段的基址呢?在上面说明中我们知道,要得到段的基址首先通过段选择器xxxx中TI位指定的段描述符所在位置:
当TI=0时表示段描述符在GDT中,如下图所示:①先从GDTR寄存器中获得GDT基址。
②然后再GDT中以段选择器高13位位置索引值得到段描述符。
③段描述符符包含段的基址、限长、优先级等各种属性,这就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的线性地址。
当TI=1时表示段描述符在LDT中,如下图所示:①还是先从GDTR寄存器中获得GDT基址。
②从LDTR寄存器中获取LDT所在段的位置索引(LDTR高13位)。
③以这个位置索引在GDT中得到LDT段描述符从而得到LDT段基址。
④用段选择器高13位位置索引值从LDT 段中得到段描述符。
⑤段描述符符包含段的基址、限长、优先级等各种属性,这就得到了段的起始地址(基址),再以基址加上偏移地址yyyyyyyy才得到最后的线性地址。