对于CPU来说,它只知道取指令,执行指令,然后执行下一条指令,他可不关心当前执行的指令是从哪个进程/线程来的,这是上面的操作系统需要关心的。
由于程序总归免不了读写内存,读写磁盘,或者网络交互,这些动作比CPU的速度慢了很多个数量级,为了不让cpu忙等这些操作,就得想办法让多个程序"同时"运行,a程序执行io读写时把cpu交给b程序,b程序发送网络包时再把cpu让给c程序,尽力提高CPU的使用率,操作系统为此抽象出了进程的概念。

要让这些进程都有机会被CPU执行,操作系统就得在一个进程正在被CPU执行时,将其切换走,把CPU让给其他进程,这就是进程的上下文切换
那么问题来了,切换切的到底是啥?怎么个切法?
前面说了,CPU干的事情很简单,就是取指令然后执行它,作为操作系统,你得让CPU知道从哪里取指令,指令执行时还需要数据,数据从哪里拿你也得告诉它,如果在执行过程中被切换走,CPU计算过程中产生的一些临时数据也得告诉它,这样它才可以正常执行指令,怎么告诉CPU这些信息呢?只要给CPU的各种寄存器赋值就好了,包括程序计数器里的下一条指令地址,数据段寄存器里的程序数据段起始地址,代...
点击查看剩余70%