Chinaunix
标题:
中断改变cs值吗?
[打印本页]
作者:
_nosay
时间:
2016-04-01 17:02
标题:
中断改变cs值吗?
hi~ 用户进程执行时发生中断,跑去内核执行服务程序时,cs会被改成__KERNEL_CS吗?
作者:
nswcfd
时间:
2016-04-01 17:53
yes,否则的话特权指令就无法执行了。
作者:
_nosay
时间:
2016-04-01 18:09
本帖最后由 _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)); \
复制代码
作者:
nswcfd
时间:
2016-04-06 17:32
建议搜一下<中断处理源码情景分析>
应该体现在各种门的初始化中(set_gate),不知道是不是上面trap.c里的那部分?
作者:
_nosay
时间:
2016-04-06 18:05
回复
4#
nswcfd
我猜测应该是穿过中断门/陷阱门后,硬件自己将门里所包含的段选择码(__KERNEL_CS__),赋值给ecx寄存器,不是软件负责的。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2