进程上下文&中断上下文

xiaoxiao2021-02-28  53

当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈的内容被称为该进程的上下文。

进程上下文 当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够得到切换时的状态执行下去。

中断上下文 在Linux中,当前进程上下文均保存在进程的任务数据结构中,在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。但同时会保留住所有需要用到的资源,以便中继服务结束时能恢复被中断进程的执行。


程序在执行的过程中通常有用户态和内核态两种状态,CPU对于处于内核态根据上下文环境进一步分为以下三种状态: 1.内核态,运行于进程上下文,内核代表进程处于内核空间。 2.内核态,运行于中断上下文,内核代表硬件运行于内核空间。 3.用户态,运行于用户空间。

上下文,我们可以简单的认为是一个环境。

用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程需要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。 因此,进程上下文指的是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。

当发出进程调度时,进程切换的就是上下文切换。操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的是模式切换。模式切换比进程切换容易,节省时间,原因是模式切换最主要的任务只是切换进程寄存器上下文的切换。

硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的中断上下文,可以看作是硬件传递过来的这些参数和内核需要保存的一些其他环境。中断时,内核不代表任何进程运行,它一般只访问系统空间,而不会访问进程空间,内核再中断上下文中执行时一般不会阻塞。

转载请注明原文地址: https://www.6miu.com/read-1949979.html

最新回复(0)