实模式与保护模式详解二(地址映射)

幼敏悟过人,读书辄成诵。这篇文章主要讲述实模式与保护模式详解二:地址映射相关的知识,希望能为你提供帮助。
论8086如何寻址1MB物理空间

  1. 8086内部的寄存器都是16位的,但它有20位地址总线,可以寻址1MB的物理空间
  2. 将1MB的储存器按64KB分段,为什么按64KB分是因为16位最大的寻址范围就是下216B=64KB。
  3. 设置4个段寄存器CS,DS,SS,ES(一开始只有四个段寄存器),保存当前可使用段的段首址,如果各段的段首址都是16的倍数,那么这些段首址的后四位都为0,则段首址的高16位正好装入一个段寄存器中
  4. 访问储存单元时,CPU根据操作的性质和要求,选择合适的段寄存器,将里面的内容左移4位,恢复了段首址原来的值,在于本段中某一待访问储存单元的偏移地址相加,则得到该单位的20位物理地址
实模式下的地址映射在实模式下,32CPU与8086一样,只能寻址1MB物理储存空间并采用分段使用的方式,每段大小不超多64KB,段首地址和段内偏移地址都是用16位表示。这样1MB的储存空间最少可分为16段,每段最多64KB。
在某一时刻,CPU可以访问6个段:代码段,数据段,堆栈段,和三个附加数据段,对应的段寄存器分别为CS,DS,SS,ES,FS,GS
在实模式下,逻辑地址与物理地址是一一对应的,用户程序与系统程序是在同一状态下的


注意:
  1. 程序中的每个段大小不定,但不可以超过64KB,具体位置由操作系统决定
  2. 分段不是唯一的,一片储存单元可以属于一个段也可以属于多个段
  3. 汇编程序中,用户要将数据段首址置入DS或ES,FS和GS中,而CS,SS由系统自动置入
保护模式下的地址映射 特权级
保护模式下建立了四个特权级,0级最高,3级最低,程序中的每个段都有一个特权级,任何时候,CPU都在同一个特权级下运行,成为当前特权级。低特权级的程序无法访问高特权级的数据。
0级:操作系统内核
1级:操作系统服务程序
2级:系统扩展程序
3级:应用程序
描述符
在保护模式下,每个段的信息远远多于实模式下的地址方式,每个段中的信息除了段基址外,还有段的大小,段的类型,特权级,是否被执行过,是否能被读/写等多种信息。系统通过8字节的描述符来保存这些信息。


属性的描述
P:Present,是否在内存中【1在】
G:段的粒度(段长计量单位)
G=0, 字节 (段最长1M)
G=1 ,页面4KB(段最长4G)
DPL: Descriptor Privilege Level 描述符特权级别
S: 描述符的类型
【数据段/代码段S=1】
【系统描述符/门描述符S=0】
TYPE : 描述段的存取类型或类型(与S有关)
【读,写,扩展,访问标志等及其组合】

描述符表
描述符表是描述符的集合,存放在指定的一段内存中,有三种描述符表:局部描述符表,全局描述符表和中断描述符表
局部描述符表:
每一个执行程序都有一个局部描述符表LDT,包含该程序中各段的描述符,一个LDT就是一个系统段,最大可为64KB,存放8192个描述符,由于每个程序有自己的局部描述符表,用各自的代码和数据,所以由此实现程序之间的隔离
全局描述符表:
只有一个,最大可谓64KB,存放8192个描述符,包含有系统各任务共享段的描述符,如操作系统所使用的代码段,数据段,堆栈段的描述符,还有所有系统段的描述符,如各个任务LDT段的描述符

【实模式与保护模式详解二(地址映射)】为了支持多任务来回切换,系统中的每一个任务都建有一个任务状态段TSS,TSS也属于系统段,该段的描述符也窜访在全局描述符表中。TSS用于保存任务挂起时现场的全部寄存器,堆栈,地址映射,链接状态,I/O允许图首址等完整印象

中断描述符表:
中断描述符表IDT最大可为2KB,含有指向多大256个中断服务程序的位置的描述符
段选择符和描述符寄存器
保护模式下,段寄存器中不在保存段的开始地址,而是指出从描述符表中选择相应段描述符的方式,段寄存器中此时的内容称作段选择符(选择子)
选择子(Selector):
选择子用于选择GDT/LDT中的某个描述符。
构成 :
  • 索引域(INDEX):13位
  • TI域(Table Indicator):1位
  • 特权级别域(Request Privilege Level):2位

索引域(INDEX)
给出段描述符在GDT或LDT中的位置。
TI域(Table Indicator)
TI=1,从LDT中选择相应描述符, TI=0,从GDT中选择描述符。
特权级别域(Request Privilege Level) 请求者最低特权级的限制。 只有请求者特权级高于或等于DPL,对应段才能被存 取,实现段的保护。
保护模式下物理地址的形成
  1. 根据段寄存器中描述符的引索值、TI、以及RPL值,从描述符表中选择出描述符,检查合格后,将描述符送入对应的描述符高速缓存寄存器,以后对该段的访问均通过此寄存器进行
  2. 当需要对该段的储存单元进行访问时,从描述符高速缓存寄存器中取出段基址,与存放在EIP,ESP或某一指示器中的偏移地址相加,形成32位线性地址
  3. 如果不选择分页,线性地址即为物理地址,如果选择分页,通过分页计制,将线性地址映射为物理地址



    推荐阅读