0. 系统调用不一定非要用内中断,x86体系CPU实际上提供了多种方式,中断机制确实是符合要求,但不代表中断机制是唯一的选择。比如x86里的call gate也可以用来做系统调用,也能做到权限控制和内核代码保护,跟中断的效果完全一样,甚至像Task gate/TSS这种东西,也能玩出花出来。
1. 使用int作为系统调用入口,其实只是习惯问题。因为DOS时代,系统调用就是走的INT 21H,所以到了保护模式,习惯性的仍然用中断的方式完成系统调用,属于设计上的延续。至于DOS的这种机制更早是因为什么,我了解的就不多了。可以推测一下,在没有保护模式概念的时代,在非x86架构上,中断是唯一一种:能保护PC指针+flag寄存器的、各个arch上实现基本都统一的硬件指令(别的arch上可不一定有call gate),所以跨平台的操作系统,通过中断进入系统调用可能是当年唯一的选择。
2. 中断屏蔽是无法屏蔽内部中断的,Intel的手册上有写,所以跟中断屏蔽没关系,跟外中断IO更不是一回事,外中断用的是IOAPIC来控制,跟内中断不相关。
3. 用中断做系统调用,开销比较大,所以才有了SYSCALL/SYSENER等一系列新的指令,新的操作系统已经很少用INT指令了,所以这更证明了用INT指令不是唯一的选择,至少不是现在的选择。
4. 据说call gate用于WOW64中的32到64的切换,有些嵌入式系统可能是用call gate而非INT方式完成系统调用。
5. 用中断,能保证安全,但不代表中断是唯一的选择,也不代表“最”安全。这是一个设计选型的问题,不是一个技术问题。甚至连内存模型都可以不是平坦模型,但需要编译器支持。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有