道生一 一生二 二生四 四生万物
任何事物的发展都是有起源,如果你了解了起源,就明白了事情发展的边界。编程也是一样,有时我们会被上层软件设计者展现出来的各种特性所迷惑,我们有时不明白这样设计的理由,有时想当然的使用这些到特定情况下才能使用的设计。
了解事物的本质,是一个理想主义者。
了解事物的用途,是一个实用主义者。
两者本无可厚非,但是本质和用途也不是割裂的,往往是有着密切的联系。
X86 CPU结构中,设计了不同的特权级,目标是实现权限管理。在段描述符中,通过字段type指定对应的代码段是不是一致代码段,有意思的是,一致代码段的英文原意是"conforming code segment",其实conforming含义是“使一致”,也就是原来是不一致的,什么叫不一致,其实就是特权级别(在DPL中指示)不同。程序的本质特征就是指针ip的跳转,在X86中,不同的代码段之前跳转的时候,高特权级(高优先级)的代码和低特权级别的代码如果权限控制?
计算机中的天生的对应,便是地址和值的对应关系,从逻辑上上来,这是一致树形结构,作为root的地址和child的value。从root可以获取到child节点的值。因此所有数据结构的中的逻辑关联,都可以使用树形的逻辑进行表达。
数组,结构体, 可以看成一个根节点和众多child节点的关联。
链表,可以看成众多小树的一个串联
其他的数据接口都可以看成是这两种连续和非连续的地址结构的组合。
大部分的代码段都不是一致代码段,代码段往往是因为不同的特权级间进行“algorithm”共享的需要。这个时候 CPL不会改变,也就是会出现CPL和DPL不相等的情况。所以说一致,是CPL在控制转移前后的一致,而同时CPL和DPL就不一致了。
对于一致代码段,普通的跳转jmp 只能在相同的特权级之间进行。但是往往我们需要将控制权力交给更高优先级的代码,这个时候jmp是无能为力,只能通过call gate来实现。
门分为四种,调用门 中断门 陷阱门和任务门,分别对应的中断 异常 和任务切换