有关Apex系统表和一些x86进程切换的摘要

系统段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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值