有关Apex系统表和一些x86进程切换的摘要
2006-01-07 21:07
183 查看
系统段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
##########################
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
相关文章推荐
- 有关调试CRM系统的一些感想
- 与软件编译安装有关的一些系统环境变量的说明
- android.app.Activity阅读摘要,有时候会不会需要保持一些现场数据呢? 想让系统帮你退出到后台或者挂掉前做些前置保持工作吗,重点参考吧:
- 有关Windows平台下Hook一些系统API技术方案的考虑
- Linux中与用户有关的一些系统文件
- 有关wince6文件系统的一些知识
- 有关Linux系统负载的一些说明
- 与JVM有关的一些系统属性
- 有关推荐系统的一些资料
- 有关文件系统的一些链接
- ucos OS_ENTER_CRITICAL 分类: μc /os ii 系统有关知识 2011-09-08 11:31 5068人阅读 评论(2) 收藏
- 关于软件系统架构设计的一些新思想
- linux系统原理中的一些理解D
- Laxcus大数据管理系统2.6 - 摘要
- Solaris 10 x86系统上添加新硬盘
- Winform里有关Combobox的一些操作
- Error:CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容。请查看计算机的系统信息,了解是否需要 x86 (32 位)或 x64 (64 位)
- 有关虚拟机安装vxworks系统的问题
- 浅谈Android系统开发中一些概念的理解
- x86_64系统编程的一点体验~!