本文主要是介绍关于“一致代码段”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
“一致”的意思是,当转移的目标是一个特权级更高的一致代码段,当前的特权级会被延续下去,而向特权级更高的非一致代码段的转移会引起常规保护错误(gerneral-protection exception,#GP),除非使用调用门或者任务门。如果系统代码不访问受保护的资源和某些类型的异常处理(比如,除法错误和溢出错误),它可以被放在一致代码段中。为避免地特权级的程序访问而被保护起来的系统代码应放到非一致代码段中。
若目标代码的特权级低的话,无论其是否为一致代码段,都不能通过call或者jmp转移进去,这种转移会导致常规保护错误。
所有的数据段都是非一致的,这意味着不可能被低特权级的代码访问。与代码段不同的是,数据段可以被更高特权级的代码访问,而不需要使用特定的门。
门描述符并不描述某种内存段,而是描述控制转移的入口点。这种描述符好比一个同向另一代码段的门。通过这种门,可实现任务内特权级的变换和任务间的切换。所以,这种门描述符也称为控制门。
门包括以下几种:调用门、任务门、中断门和陷阱门。
调用门描述某个子程序的入口。调用门内的选择子必须实现代码段描述符,调用门内的偏移是对应代码段内的偏移。利用段间调用指令CALL,通过调用门可实现任务内从外层特权级变换到内层特权级。
任务门指示任务。任务门内的选择子必须指示GDT中的任务状态段TSS描述符,门中的偏移无意义。任务的入口点保存在TSS中。利用段间转移指令JMP和段间调用指令CALL,通过任务门可实现任务切换。
中断门和陷阱门描述中断/异常处理程序的人口点。中断门和陷阱门内的选择子必须指向代码段描述符,门内的偏移就是对应代码段的人口点的偏移。中断门和陷阱门只有在中断描述符表IDT中才有效。
这篇关于关于“一致代码段”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!