解释一个操作系统的实现/chapter6/r中代码。
程序流程如下:
1、把Loader中的GDT和esp挪到Kernel中,初始化IDTPTR
2、初始化8259,初始化IDT,初始化GDT中的TSS和LDT两个描述符,以及初始化TSS
3、初始化进程表,指定时钟中断处理程序,让8259可以接受中断,restart开始从ring0内核切换到ring1进程执行
4、当发生时钟中断,或者Int 90时,由ring 1进程态切换到ring 0内核态,首先保存所有寄存器,启动进程调度函数,恢复被调度的进程的寄存器,从而由ring0内核态又回到了ring1新进程
程序最重要的一个图如下:
进程切换几个关键问题,从ring1切换到ring0,触发的条件一个是时钟中断,一个是get_tick