什么是调用门?

调用门 通过GDT表查询
任务门 中断门 陷阱门 通过IDT表查询

门其实就是一种转换机构,这里谈到的各种概念都是针对CPU的,人家intel工程师就是这样设计的一套理念,你只需要理解即可。保护模式之所以称之为保护模式,重在保护二字,因为在保护模式的前一个版本实模式下,所有的不管是系统的数据还是用户的数据都是混在一块的,如果你一个不小心改写了某块系统部分的数据,结果就是系统直接崩溃

这显示是很不可取的,所以intel后来设计了保护模式,所谓保护可以理解为保护操作系统不受用户轻易破坏!

本质还是一样的,所有的东西都是存放在内存上,都是二进制数据,只是CPU一套硬件进行了升级。就像CPU说这是操作系统的数据,你得通过怎样的方式,能或者是不能访问我。CPU保护模式干的就是这样的一套规则定义。

回到正题,什么是调用门?这就是一个名词而已,大可不必惊讶,由于保护模式的引入,出现了所谓0环内核权限和3环用户权限,很显然,我们普通的程序都是运行在3环的,如果想要直接运行3环的代码(一些特权指令等等)那是不可能的!因为你没有权限!

intel就提供了调用门这种方式让我们可以进入0环。

具体是怎么做的呢?

你还记得8086CPU吗?在实模式下,段寄存器只是单纯的存放一个段基址,然后在保护模式下,段寄存器也还叫段寄存器,但是段寄存器里存放的不再是一个段基址,而是存放一个称为段选择子的东西,这个段选择子结构这里就不细节展开了,它主要有一个作用,就是根据里面存放的索引去查询GDT表或IDT表。

那查询到的内容又是什么呢?

这就是传说中的段描述符,这也只是一个名词而已,这个段描述符有8个字节大小64位,每一部分都有自己的意义。但是一定存储了类似于实模式下段寄存器直接存储的段基址,重点来了!!!,接下来一系列的属性就是保护模式提供的安全访问权限设置,比如它可以定义一个代码段是0环权限还是3环权限等等。
在这里插入图片描述

调用门也是和上述一个道理的,只是这8字节64位段描述符表示的方式可能其他段描述符不太一样而已。

这里还要谈到intel的段间调用call指令,既然是段间调用,那就必然跨段,跨段就存在两种情况,一是跳转的段就在3环,二是跳转的段在0环,如果是目标段在0环的话,就意味着CPU必然会进入0环。

所以当执行段间调用call指令时候,必然会使用到调用门,提不提权,进不进0环,那就看你自己的需求了!

下图是调用门描述符完整结构。
什么是调用门?_第1张图片
16-31存放了一个段选择子
0-15位16-31位存放跳转后执行代码段的偏移量,段基址则是根据16-31位存放的段选择子再次去查询GDT表!

你可能感兴趣的:(操作系统,调用门,段间call)