前期准备知识点:
GDT和LDT(参考博客文章)

特权级(参考博客文章)

进程表:
用于存放进程在运行过程中,所涉及到的所有与进程相关的信息
TSS(任务状态段):
任务状态段(Task State Segment)是保存一个任务重要信息的特殊段。任务状态段描述符用于描述这样的系统段。任务状态段寄存器TR的可见部分含有当前任务的任务状态段描述符的选择子,TR的不可见的高速缓冲寄存器部分含有当前任务状态段的段基地址和段界限等信息。
TSS在任务切换过程中起着重要作用,通过它实现任务的挂起和恢复。所谓任务切换是指,挂起当前正在执行的任务,恢复或启动另一任务的执行。在任务切换过程中,首先,处理器中各寄存器的当前值被自动保存到TR所指定的TSS中;然后,下一任务的TSS的选择子被装入TR;最后,从TR所指定的TSS中取出各寄存器的值送到处理器的各寄存器中。由此可见,通过在TSS中保存任务现场各寄存器状态的完整映象,实现任务的切换。

中断:
说到中断还不得不从现代操作系统的特性说起,无论是桌面PC操作系统还是嵌入式都是多任务的操作系统,而很遗憾,处理器往往是单个的,即使在硬件成本逐渐下降,从而硬件配置直线上升的今天,PC机的核心可能已经达到4核心,8核心,而手机移动设备更不可思议的达到16核心,32核心,处理器的数量依然不可能做到每个任务一个CPU,所以CPU必须作为一种全局的资源让所有任务共享。说到共享,如何共享呢?什么时候给任务A用,什么时候给任务B用......这就是进程调度,具体的安排就由调度算法决定了。进程如何去调度?现代操作系统一般都是采用基于时间片的优先级调度算法,把CPU的时间划分为很细粒度的时间片,一个任务每次只能时间这么多的时间,时间到了就必须交出使用权,即换其他的任务使用。这种要看操作系统的定时器机制了。那么时间片到之后,系统做了什么呢?这就要用到我们的中断了,时间片到了由定时器触发一个软中断,然后进入相应的处理历程。当然这一点不足以表明中断的重要,计算机操作系统自然离不开外部设备:鼠标、键盘、网卡、磁盘等等。就拿网卡来讲,我计算机并不知道时候数据包会来到,我能保证的就是数据来了我能正常接收就行了。但是我又不可能一直等着接收数据包,要是这样其他任务就死完了。所以合理的办法是,你数据包来到之后,通知我,然后我再对你处理,怎么通知呢??答:中断!键盘、鼠标亦是如此

C和汇编混编(参考博客文章)

进程初始化:
1.进程
2.进程体
3.GDT LDT TSS
4.中断

系统运行步骤:
系统运行步骤.png

进程切换部分:
进程切换.png

进程切换时堆栈切换:
进程切换之堆栈切换.png

逻辑解释,我放代码里面吧!

下面是代码部分:
在网盘里面