进程上下文与中断上下文

关于操作系统用户态与内核态:Linux之用户态和内核态

上下文context:通俗讲就是程序运行时周围的环境

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

相对于进程而言,就是进程执行的环境.具体来说就是各个变量和数据,包括寄存器变量,进程打开的文件,内存信息等.一个进程的上下文可以分为三个部分:用户级上下文,寄存器上下文和系统级上下文

(1)用户级上下文:正文,数据,用户堆栈以及共享存储区

(2)寄存器上下文:通用寄存器,程序寄存器(IP),处理器状态寄存器(EFLAGS),栈指针(ESP)

(3)系统级上下文:进程控制块(PCB),内存管理信息,内核栈

 

当发生进程调度时,进行进程切换就是上下文切换(context switch).操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的模式切换(mode switch)。模式切换与进程切换比较起来,容易很多,而且节省时间,因为模式切换最主要的任务只是切换进程寄存器上下文的切换。

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

当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。在LINUX中,当前进程上下文均保存在进程的任务数据结构中。在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程的执行。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值