美文网首页
4.操作系统的调用关系

4.操作系统的调用关系

作者: wit_yuan | 来源:发表于2019-08-05 14:25 被阅读0次

    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描述符

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


    段描述符

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

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

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

    内核堆栈变化前后

    相关文章

      网友评论

          本文标题:4.操作系统的调用关系

          本文链接:https://www.haomeiwen.com/subject/mdqmdctx.html