Linux——进程轮换

目录

一.进程切换

       1.定义:

        2.硬件上下文:

        总结:


一.进程切换

Linux——进程轮换_第1张图片

       1.定义:

        进程切换(process switch),作为抢占式多任务的一个重要功能,其实质就是OS内核挂起正在运行的进程A,然后将先前被挂起的另一个进程B恢复运行。

        2.硬件上下文:

        每个进程都有自己的地址空间,但是进程每当被CPU执行处理时,它部分的数据代码会被CPU的寄存器拿到,CPU处理数据的方式就是靠寄存器去进行计算的。因此,OS内核必须要将挂起该进程时寄存器的值装入CPU寄存器,进程恢复执行前必须装入寄存器的一组数据就叫做“硬件上下文”,它是进程执行上下文的子集,后者是进程执行时需要的所有信息。

Linux——进程轮换_第2张图片

       如上就是进程在运行时,CPU内部寄存器的行为,CPU拿到该进程后,对代码进行编译、汇编、链接成二进制可执行文件,里面的代码也就变成了计算机能识别的指令。CPU体内的寄存器开始获取部分代码的变量数值进行运算——取指令、分析指令、执行指令。

        当我们的进程在运行的时候,一定会产生非常多的临时数据,而这份数据处于多个寄存器中,属于当前进程!!!

        进程在运行的时候,是占有的享用CPU的,但CPU不会一直让其进程占有到它自己结束,万一该进程内部是个死循环的话,CPU岂不是要一直被占有?那CPU就没法去执行其他进程,那么其他进程会一直再等待,变得卡顿,一整天就仅跟着该进程死磕到底了。

        科学家们依据根据上面所说的这种情况,制定了一种高效率的方式,即CPU每过一段时间就将停止该进程的运行,调度下一个进程进来运行,让每个进程都有机会能被CPU处理。里面具体的细节在于:CPU将某个进程运行一段时间后停下来,体内的某些特定寄存器会保存当前CPU所执行到代码的上下文和具体位置,以便于下一次CPU再执行该进程时能够快速的找到上一次的断点处开始运行。

       

        举个例子:小明是一个大二学生,某一天上午,小明看到学校来了一些解放军叔叔来招人了,小明从小就梦想着要当军人,如今看到后十分兴奋,立刻跑过去报名,由于小明身体倍棒通过了入伍体检,可以去当兵了。于是小明将这个信息告诉了辅导员和校领导,之后小明带着行李箱走了,接下来的课程和考试都将缺席。消防的做法是把小明的学籍信息保留下来,给他设置一个断点。

        两年后,小明退伍回来继续上大学,进入学校的第一件事就是找老师恢复自己的学籍,否则他没办法继续上学,恢复学籍后学校承认了他,小明也就有了回来体验大学生活的权利了,继续从大二开始上起。

总结:

        CPU和操作系统对进程的处理原则就是:给它们分配时间片,让CPU执行进程某一段时间(可能是几毫秒~几十毫秒不等)后就会拿下去换另一个进程上来,这个拿下去换上来的操作就是时间片轮转操作,可以让用户更好的体验到多个软件并发执行的效果。

你可能感兴趣的:(linux)