文件下载与邀请翻译者
学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。
翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么,欢迎你的加入。
另外,我不仅仅是打算翻译这一种手册,以后,可能还需要去翻译许多的英文技术文档,以支持系统底层的教学,培养系统底层程序员。
我有钱了以后,应该是会出私钱来请人翻译一批英文技术文档。当前,暂时没钱,若是有志愿加入的,欢迎啊。
本节翻译
【原文】2.1.1. Global and Local Descriptor Tables
When operating in protected mode, all memory accesses pass through either the global descriptor table (GDT) or the (optional) local descriptor table (LDT), shown in Figure 2-1. These tables contain entries called segment descriptors. A segment descriptor provides the base address of a segment and access rights, type, and usage information. Each segment descriptor has a segment selector associated with it. The segment selector provides an index into the GDT or LDT (to its associated segment descriptor), a global/local flag (that determines whether the segment selector points to the GDT or the LDT), and access rights information.
To access a byte in a segment, both a segment selector and an offset must be supplied. The segment selector provides access to the segment descriptor for the segment (in the GDT or LDT). From the segment descriptor, the processor obtains the base address of the segment in the linear address space. The offset then provides the location of the byte relative to the base address. This mechanism can be used to access any valid code, data, or stack segment in the GDT or LDT, provided the segment is accessible from the current privilege level (CPL) at which the processor is operating. (The CPL is defined as the protection level of the currently executing code segment.)
【翻译】2.1.1. 全局和局部描述符表
在保护模式运行时,所有内存访问通过全局描述符表(GDT)或(可选)局部描述符表(LDT),如图2 - 1所示。这些表包含称为段描述符的条目。段描述符提供段的基址和访问权限、类型和使用信息。每个段描述符都有一个与之关联的段选择器。段选择器提供GDT或LDT的索引(指向其关联的段描述符)、一个全局/本地标志(决定段选择器是指向GDT还是指向LDT)和访问权限信息。
要访问段中的字节,必须同时提供段选择器和偏移量。段选择器提供对段描述符的访问(在GDT或LDT中)。从段描述符中,处理器在线性地址空间中获得段的基址。然后,偏移量提供了相对于基址的字节偏移位置。此机制可用于访问GDT或LDT中的任何有效代码、数据或堆栈段,前提是可以从处理器运行的当前特权级别(CPL)访问该段。(CPL被定义为当前执行的代码段的保护级别。)
【讲评】上述内容,谈到了段选择器与偏移量的问题。在16位的8086汇编里面,我们给定段地址和偏移地址,则我们要访问的内存位置,便是【(段地址 << 4) + (16位偏移地址)】。而在32位保护模式里面,也是用【段寄存器:偏移地址】的方式来定位某一个内存地址的。只不过,在32位保护里面,段寄存器里面的值,不再叫做段地址,而是叫做段选择器。段选择器里面,包含着索引值,也包含着指示GDT还是LDT的标志位。假定,根据段选择器的内容,它指示,要从GDT中来检测某一个段描述符,且索引为3。假定,GDT中的3号描述符指示,段的基地址为0x3000_0000。再来假定,我们给偏移地址设定的值为0xA000,那么,最终,我们要访问的地址,便是0x3000_A000。
我这里,给出来了一点关于保护模式下之下,分段寻址的示例。然而,我不确定你能看懂。
为了更好地理解保护模式的知识,我还是建议去学习专门的教材。比如,李忠的《X86汇编语言,从实模式到保护模式》,赵炯先生的《Linux内核完全剖析,基于0.12内核》,郑刚先生的《操作系统真象还原》。
有的东西,看教材会好一些,有的东西,看手册会获得更为详细,专业与权威的知识。偏听偏信哪个都不好。
在计算机领域,一般地,老外的教材会比国内的教材写得更好。然而,并不排除说,在局部的地方,老外的东西写得不好,而国人的教材却用比较简单的方式,把知识给讲明白了。
对于保护模式的知识,我还是推荐你,有空的话,去买教材来看。另外,李忠先生的《X86汇编语言 ,从实模式到保护模式》也有对应的视频教程。有空的话,你可以自己去搜,你也可以问我。
保护模式的知识,这算是英特尔开发手册第3卷的一个重要的内容。我本人便是在学习了保护模式以后,并且沉淀了一段时间以后,才来尝试着学习与翻译英特尔开发手册的。
有兴趣学习保护模式,有兴趣一起来学习Linux内核的话,你可以联系我。虽然目前,我的Linux内核的水平,也谈不上多高,但是,我们还是可以一起学习的。另外,如果你在Linux内核方面,还完全是菜鸟的水平,或许我还可以帮你一点忙。我写作这一段文字的时间,为2024年10月22日。
本节,我又将图2-1的内容贴了一遍。对于这个图,需要你自己将其下载下来,放大以后来查看。如果还是看不清楚,那么,我建议你将原版的英特尔开发手册第3卷的PDF文件给下载下来,然后呢,在原版的文件中,放大图片,来查看细节。
【原文】In Figure 2-1 the solid arrows indicate a linear address, the dashed lines indicate a Segment selector, and the dotted arrows indicate a physical address. For simplicity, many of the Segment selectors are shown as direct pointers to a segment. However, the actual path from a Segment selector to its associated segment is always through the GDT or LDT.
The linear address of the base of the GDT is contained in the GDT register (GDTR); the linear address of the LDT is contained in the LDT register (LDTR).
【翻译】在图2-1中,实线表示线性地址,虚线(dashed)表示段选择器,虚线(dotted)表示物理地址。为简单起见,许多段选择器显示为指向段的直接指针。然而,从段选择器到其关联段的实际路径总是通过GDT或LDT。
GDT基址的线性地址包含在GDT寄存器(GDTR)中;LDT的线性地址包含在LDT寄存器(LDTR)中。
【讲评】dashed line和dotted line都表示虚线。实际上,这是两种不同的线。文档中,无论是我这里的翻译文档,还是原版的英特尔开发手册,它给出的图2-1里面的内容,都区分不出【dashed line】与【dotted line】的区别。尽管在图例中,可以看出一点两者的区别。然而,在实际的图示里,依然是看不出二者的区别
关于【dashed line】与【dotted line】,还是微软的Windows API教材与MFC教材给出的区分是较为明确的。我将这几种线条的截图贴在下面,大家可以体会一下。
在上图里面,一画两点的这个线条,大家还需要放大以后,再去看。
结束语
关于保护模式的知识,还需要大家找专门的教材来学习。我这里比较推荐的,是李忠先生的《X86汇编语言,从实模式到保护模式》和赵炯先生的《Linux内核完全剖析(基于0.12内核)》。
另外,在学习这种系统级知识的时候,我建议大家,对于微软的Windows系统,与基于Linux内核的 Linux 发行版操作系统,都能够给予尊重。
标签:保护模式,GDT,32,手册,2001,LDT,IA,segment,选择器 From: https://blog.csdn.net/2401_82825368/article/details/143168223