中断改变cs值吗?
hi~ 用户进程执行时发生中断,跑去内核执行服务程序时,cs会被改成__KERNEL_CS吗? yes,否则的话特权指令就无法执行了。 本帖最后由 _nosay 于 2016-04-01 18:16 编辑回复 2# nswcfd
嗯,而且不光是特权指令,中断服务代码以及内核中的变量,都在内核空间,CPU在访问时,都需要检查cs的dpl是否为0,是吧?
但是,我搜“__KERNEL_CS”,发现只有以下几个文件使用了“__KERNEL_CS宏”,这些代码都和进入中断没关系:---- __KERNEL_CS Matches (11 in 7 files) ----
Fpu_entry.c (arch\i386\math-emu):else if ( FPU_CS == __KERNEL_CS )
head.S (arch\i386\boot\compressed): ljmp $(__KERNEL_CS), $0x100000
head.S (arch\i386\boot\compressed): ljmp $(__KERNEL_CS), $0x1000 # and jump to the move routine
head.S (arch\i386\boot\compressed): ljmp $(__KERNEL_CS), $0x100000
head.S (arch\i386\kernel): ljmp $(__KERNEL_CS),$1f
head.S (arch\i386\kernel): movl $(__KERNEL_CS << 16),%eax
Pci-pc.c (arch\i386\kernel):} bios32_indirect = { 0, __KERNEL_CS };
Pci-pc.c (arch\i386\kernel):} pci_indirect = { 0, __KERNEL_CS };
Segment.h (include\asm-arm):#define __KERNEL_CS 0x0
Segment.h (include\asm-i386):#define __KERNEL_CS 0x10
Traps.c (arch\i386\kernel): "3" ((char *) (addr)),"2" (__KERNEL_CS << 16)); \ 建议搜一下<中断处理源码情景分析>
应该体现在各种门的初始化中(set_gate),不知道是不是上面trap.c里的那部分? 回复 4# nswcfd
我猜测应该是穿过中断门/陷阱门后,硬件自己将门里所包含的段选择码(__KERNEL_CS__),赋值给ecx寄存器,不是软件负责的。
页:
[1]