1.切换时机
- 1、发生系统调用时
- 2、产生异常时
- 3、外设产生中断时
2.用户态到内核态的切换过程
1.读取tr寄存器,访问TSS段
- TSS段保存内核栈信息
2.从TSS段中的sp0获取进程内核栈的栈顶指针
- sp:堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。
3.在内核栈中保存当前cs,ss,eip,esp寄存器的值(地址)
- cs 为代码段寄存器
- ss 为栈段寄存器,一般作为栈使用
- eip:用来存储CPU要读取指令的地址,CPU通过EIP寄存器读取即将要执行的指令
- esp:用户栈栈顶指针
4.把内核代码选择符写入CS寄存器,内核栈指针写入ESP寄存器,把内核入口点的线性地址写入EIP寄存器
- 此时,CPU已经切换到内核态,根据EIP中的值开始执行内核入口点的第一条指令。