系统段type字段
##########################
0 未定义
1 可用286TSS
2 LDT
3 忙的286TSS
4 286调用门
5 任务门
6 286中断门
7 286陷阱门
8 未定义
9 可用386TSS
A 未定义
B 忙的386TSS
C 386调用门
D 未定义
E 386中断门
F 386陷阱门
#########################
CS转移
对于非一致代码段,要求CPL=DPL,RPL<=DPL;对于一致代码段,要求CPL>=DPL
通过调用门的转移
1.CPL<=调用门的DPL
2.选择子的RPL必须满足RPL<=调用门的DPL
装入装载数据段可读可执行代码段 DS、ES、FS或GS
1.CPL<=DPL,RPL<=DPL
使用调用门的段间转移指令JMP
已置RPL=0所以RPL<=DPL的条件总能满足
1.对于普通的非一致代码段 当CPL=DPL时,发生无特权级变换的转移
2.对于一致代码段 在满足CPL>=DPL时也发生无特权级变换的转移
3.其它情形就引起异常。
RET指令所使用的返回地址的选择子只能使用代码段描述符,而不能使用任何系
统段描述符或门描述符,当然,更不能使用数据段描述符,否则会引起异常
直接通过TSS进行任务切换,通过任务门进行任务切换
CPL<=DPL RPL<=TSS的DPL,CPL<=任务门DPL RPL<=任务门的DPL TSS的DPL不做检测
任务切换过程
|
|
|
V
TSS调用门 CPL<=DPL,RPL<=DPL
|
|
|
V
TSS_DESC DPL不检测
|
|
|
V
TSS
|
|
|
V
cs_selector [RPL->CPL,RPL==DPL]
要放入TSS中的cs_selector一定要和相对应的段描述符的DPL相等
任务切换和特权级变换Sample:
(仅仅使用特权级0,3)
#初始化任务0,tss0_sel的TSS段已经有0级堆栈有效值
init_task0:
movw tss0_sel,%ax
ltr %ax
movw $tss_0,%ax
#从特权级0切换到特权级3,这时候0级堆栈必须是可用的
switch_to_usermode:
#押入cs,eip
pushw <选择子>
pushl <eip起始地址>
lret
switch_to_sysmode:
call <调用门>
0x0 null
0x8 kernel cs at DPL=0 desc
0x10 kernel ds at DPL=0 desc
0x18 kernel cs at DPL=3 desc
0x20 kernel ds at DPL=3 desc
0x28 reserved
0x30 reserved
0x38 reserved
0x40 reserved
0x48 reserved
0x50 reserved
0x58 reserved
0x60 reserved
0x68 reserved
0x70
向量号 异常名称 异常类型 出错代码 中断服务程序 相关指令
0 除法出错 故障 无 _divide_error DIV,IDIV
1 调试异常 故障/陷阱 无 任何指令
2 NMI 不可屏蔽中断 无
3 单字节INT3 陷阱 无 INT 3
4 溢出 陷阱 无 INTO
5 边界检查 故障 无 _bounds_check_error BOUNT
6 非法操作码 故障 无 _illegal_opt_code 非法指令编码或操作数
7 设备不可用 故障 无 _device_not_available 浮点指令或WAIT
8 双重故障 中止 有 任何指令
9 协处理器段越界 中止 无 访问存储器的浮点指令
0AH 无效TSS异常 故障 有 _invalid_tss JMP、CALL、IRET或中断
0BH 段不存在 故障 有 _segment_not_exist 装载段寄存器的指令
0CH 堆栈段异常 故障 有 _stack_segment_error 装载SS寄存器的任何指令、对SS寻址的段访问的任何指令
0DH 通用保护异常 故障 有 _general_protect_error 任何特权指令、任何访问存储器的指令
0EH 页异常 故障 有 _page_error 任何访问存储器的指令
10H 协处理器出错 故障 无 _coprocessor_error 浮点指令或WAIT
11H—0FFH 软中断 陷阱 无 INT n
----------------------------------------------------------
offset size name description
0x90000 0x10 hda hard disk parameters
0x90010 0x10 hdb hard disk parameters
0x90020 word dma_mem mem size between 1-16M in KB max=3C00h=15M
0x90022 word normal_mem mem above 16M , in 64KB blocks
0x90024 word cur_video_page current video page
0x90026 byte video_mode
0x90027 byte reserved
0x90028 byte video_mem 0x00-64kb,0x01-128kb,0x02-192kb,0x03-256kb
0x90029 byte reserved
0x90030 word reserved
0x90032 byte video_stat 0x00-彩色,I/O=0x3dX;0x11-单色,I/O=0x3bX
0x90033 byte reserved
0x90034 word charac_par 显卡特征参数
0x90040 word kernel_size 内核大小,in 4kb