内存寻址寄存器笔记

内存寻址寄存器笔记

内存寻址寄存器笔记

  • 先检查段选择符的TI字段,TI字段指明段描述符是存放在GDT还是LDT中,如果是在GDT中,则需要从gdtr寄存器中读取GDT的线性基地址,否则就从ldtr寄存器中读取LDT的线性基地址。
  • 从段选择符中读取index字段的值,因为一个段描述符的大小是8字节,所以index字段的值乘以8在加上gdtr或者ldtr的值就可以得到对应段描述符的地址。
  • 读取段描述符中的Base字段的值,其是段的首字节的线性地址,将其与逻辑地址的偏移量相加就得到线性地址。

image

  • 不可编程的寄存器可以存储上图的计算结果,不用执行上面的前两步。

分段寄存器

image

tss for linux important

寄存器不再保存在TSS中了,而是保存在task->thread中,只用TSS的esp0和IO许可位图,所以,在进程切换过程中,只需要更新TSS中的esp0、io bitmap