从80386开始,Intel微处理器以两种不同的方 式执行地址转换 冬实模式(20位 > 16位段寄存器只记录段基址的高16位,因此段基址必 须4位对齐(末4位为0) >不采用虚拟地址空间,直接采用物理地址空间 >物理地址=段寄存器值*16+段内偏移 保护模式(32位)958 >16位段寄存器无法直接记录段的信息,因此需要与全 局描述符表GDT配合使用 >GDT中记录了每个段的信息(段描述符),段寄存器 只需记录段在GDT中的序号 Cience and TTech人 嵌入式系统实验室 2023/7/14 Linux OS Analysis 8154 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 8/54 从80386开始,Intel微处理器以两种不同的方 式执行地址转换 ❖实模式(20位) ➢16位段寄存器只记录段基址的高16位,因此段基址必 须4位对齐(末4位为0) ➢ 不采用虚拟地址空间,直接采用物理地址空间 ➢ 物理地址=段寄存器值*16+段内偏移 ❖保护模式(32位) ➢16位段寄存器无法直接记录段的信息,因此需要与全 局描述符表GDT配合使用 ➢GDT中记录了每个段的信息(段描述符),段寄存器 只需记录段在GDT中的序号
>注意:cs寄存器还有一个很重要的功能:它含有一个两 位的域,用以指明CPU的当前特权级CPL(current privilege level)),值为0代表最高优先级,值为3代表最 低优先级 >线性地址=段基地址+段内偏移 ●其中,段基地址是根据段寄存器所指明的GDT中的段描述符 中的信息得到的 >物理地址:根据页表对线性地址进行转换而得到 oor Science and Technolod 嵌入式系统实验室 2023/7/14 Linux OS Analysis 9/54 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 9/54 ➢注意:cs寄存器还有一个很重要的功能:它含有一个两 位的域,用以指明CPU的当前特权级CPL (current privilege level),值为0代表最高优先级,值为3代表最 低优先级 ➢线性地址=段基地址+段内偏移 ⚫其中,段基地址是根据段寄存器所指明的GDT中的段描述符 中的信息得到的 ➢物理地址:根据页表对线性地址进行转换而得到
GDT和段描述符(segment descriptor) 每个段由一个段描述符来表示,一个段描述符长度为8个 字节 冬全局描述符表GDT(global description table)就用来存放段 描述符 GDT表也存放在RAM中,并使用一个专门的寄存器GDTR来指示 GDT表在RAM中的位置(物理起始地址) 局部描述符表LDT(Local Description Table) >根据x86,每个进程可以设置一个LDT >LDT表也存放在RAM中,使用LDTR来指示当前的LDT表 cience and Techi 嵌入式系统实验室 2023/7/14 Linux OS Analysis 10/54 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 10/54 GDT和段描述符(segment descriptor) ❖ 每个段由一个段描述符来表示,一个段描述符长度为8个 字节 ❖ 全局描述符表GDT (global description table)就用来存放段 描述符 ➢ GDT表也存放在RAM中,并使用一个专门的寄存器GDTR来指示 GDT表在RAM中的位置(物理起始地址) ❖ 局部描述符表LDT(Local Description Table) ➢ 根据x86,每个进程可以设置一个LDT ➢ LDT表也存放在RAM中,使用LDTR来指示当前的LDT表
由于段的用途不一样,Intelx86提供下列几种 段描述符 数据段描述符(Data Segment Descriptor) >可以描述各种用户数据段和堆栈段 代码段描述符(Code Segment Descriptor >描述一个用户代码段 任务状态段描述符(Task State Segment Descriptor) >描述一个任务的状态段 局部描述符表描述符 >描述一个LDT段 系统段描述符(System Segment Descriptor) Cience and TTechil 嵌入式系统实验室 2023/7/14 Linux OS Analysis 11154 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 11/54 由于段的用途不一样,Intelx86提供下列几种 段描述符 ❖ 数据段描述符(Data Segment Descriptor) ➢ 可以描述各种用户数据段和堆栈段 ❖ 代码段描述符(Code Segment Descriptor) ➢ 描述一个用户代码段 ❖ 任务状态段描述符(Task State Segment Descriptor) ➢ 描述一个任务的状态段 ❖ 局部描述符表描述符 ➢ 描述一个LDT段 ❖ 系统段描述符(System Segment Descriptor)
段描述符主要描述如下内容 段的物理起始地址(base字段,32位) 段长度(limit字段,20位) 段长度的单位(粒度,G标志,1位) >0:字节为单位 >1:4KB为单位1958 Science and Technoloocn 是否系统段(S标志,1位) >0:系统段 >1:普通的段 嵌入式系统实验室 2023/7/14 Linux OS Analysis 12/54 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 12/54 段描述符主要描述如下内容 ❖段的物理起始地址(base字段,32位) ❖段长度(limit字段,20位) ❖段长度的单位(粒度,G标志,1位) ➢0:字节为单位 ➢1:4KB为单位 ❖是否系统段(S标志,1位) ➢0:系统段 ➢1:普通的段