4.操作系统的调用关系

2019-08-05  本文已影响0人  wit_yuan

1.内核与应用程序之间的调用

这篇谈论的主要是8086的几个简单的门,分别为中断门,调用门,任务门等。

中断门,故是保护模式下的中断关系,主要是设置中断向量与加载向量地址。这样就能在保护模式下复位中断程序。

中断门有两个重要的内容,一个是idtr,一个是idt表项。

idtr如下图:


idtr寄存器内容

从这里可以看到,idtr寄存器内容是48位的,低16位表示的idt的限长,也就是中断描述符表的长度(len-1,因为从0开始的),高32位表示idt的基地址

另外一项就是idt的内容了,如下图所示:

idt格式

中断门就要举一个例子了。入口点其实就是表示函数,段选择符一般是代码段,然后就是TYPE=1110b(14=e),所以可以假设一个描述符=0x00008e00 0008(代码段) fun(函数地址0xxxxx)

接着讲解一下调用门,调用门与中断门有一点区别是eflags的if标志,另外就是描述符中的TYPE字段需要修改为TYPE=15.调用门描述符如下:

调用门

调用门一般使用int 0x80进入,当然是自己写的操作系统,则可以自定义。

任务门,则比较特殊,基本的寄存器和ldt与gdt类似,不过一般不使用它,我就不写了。

对应的,可以使用另外一种描述符方式,将其描述符放在gdt描述符中,它是属于系统段的。

这里面会涉及到TR,TSS等内容。

系统段描述符对应图如下:

系统段

TYPE字段对应含义如下:

系统段

tss包含的内容如下:


tss段包含的内容

tss描述符如下:

tss描述符

另外要留意一下段描述符:


段描述符

另外则是局部描述符表与全局描述符表:

全局描述符表与局部描述符表之间关系

还有一个很重要的点是特权级发生变化前后的寄存器内容处理:

内核堆栈变化前后
上一篇 下一篇

猜你喜欢

热点阅读