上下文切换理解

1.上下文的理解

  • 上下文是指,每次执行前,都会使用需要依赖两个环境,分别是CPU寄存器(cpu中容量小但是速度很快的内存)和程序计数器(cpu正在执行的程序位置或者是准备执行的程序位置),而这两个依赖的环境就是指上下文。

2.上下文切换

步骤:
1.将前一个CPU上下文内容保存起来,保存在系统的内核中,等待下次任务调度加载到上下文;
2.新任务的上下文内容加载到CPU寄存器和程序计数器中;
3.跳到程序计数器指定的位置,然后执行程序。

3.系统调用

分为用户态和内核态根据Linux的权限区分;

  1. 用户态:只能访问受限资源,不能直接访问内存等硬件设备,必须借助系统调用;
  2. 内核态:具有最高权限,可以访问所有资源。

进程可以在用户空间运行(叫作:进程用户态),也可以在内核空间运行(叫作:进程内核态)。从用户态到内核态需要系统调用完成。

一次系统调用发生两次上下文切换,CPU由用户态到内核态:cpu寄存器先保存当前的用户态的内容,然后加载内核态的内容,由于内核态到用户态,要先恢复之前保存在CPU寄存器的用户态内容,然后继续执行。

系统调用过程中,不涉及虚拟内存(将物理磁盘作为内存使用)等进程用户态的资源,也不会切换进程。与通常所说的进程上下文切换不同:

  • 进程上下文切换是指,从一个进程切换到另一个进程;
  • 系统调用过程中一直是同一个进程在运行。

进程上下文切换

进程是由内核管理和调度的,进程的切换只能发生在内核态。 因此,进程的上下文不但包括虚拟内存、栈、全局变量等用户空间资源,还包括内核堆栈、寄存器等内核空间状态。所以,进程的上下文切换比系统调用多一个步骤:保存当前进程的内核状态和 CPU 寄存器之前,先把该进程的虚拟内存、栈等保存起来;加载下一个进程的内核态后,还需要刷新进程的虚拟内存和用户栈。保存上下文和恢复上下文需要内核在 CPU 上运行才能完成。

Linux 通过 TLB (Translation Lookaside Buffer) 管理虚拟内存到物理内存的映射关系。当虚拟内存更新后,TLB 也需要刷新,内存的访问速度会因此变慢。尤其在多处理器系统上,缓存被多个处理器共享,刷新缓存不仅影响当前处理器的进程,还会影响共享缓存的其他处理器进程。

Linux 会为每个 CPU 都维护一个就绪队列,将活跃进程(正在运行和正在等待 CPU 的进程)按照优先级和等待 CPU 时间来排序,然后选择最需要 CPU 的进程,也就是优先级最高和等待 CPU 时间最长的进程来运行。

进程切换时需要切换上下文,进程切换的场景有:

  • 进程时间片耗尽; 系统资源不足(如内存不足);
  • 进程通过睡眠函数 sleep 把自己挂起来;
  • 当有优先级更高的进程运行时,为了去运行高优先级进程,当前进程会被挂起;
  • 发生硬中断,CPU 上的进程会被挂起,然后去执行内核中的中断服务进程。

线程上下文切换

线程是调度的基本单位,而进程则是资源拥有的基本单位,线程之间是共享内存数据的,而进程内存数据互不影响。

内核中的任务调度实际是在调度线程,进程只是给线程提供虚拟内存、全局变量等资源。线程上下文切换时,共享相同的虚拟内存和全局变量等资源不需要修改。而线程自己的私有数据,如栈和寄存器等,上下文切换时需要保存。

线程切换分两种情况:

  • 前后两个线程属于不同进程;
  • 前后两个线程属于同一个进程(速度更快,消耗更少资源)。

中断上下文切换

为了快速响应硬件的事件,中断处理会打断进程的正常调度和执行,然后调用中断处理程序,响应设备事件。在打断其他进程时,需要先将进程当前的状态保存下来,等中断结束后,进程仍然可以恢复回来。

跟进程上下文不同,中断上下文切换不涉及进程的用户态。所以,即便中断过程打断了一个正处在用户态的进程,也不需要保存和恢复这个进程的虚拟内存、全局变量等用户态资源。中断上下文,只包括内核态中断服务程序执行所必需的状态,也就是 CPU 寄存器、内核堆栈、硬件中断参数等。

对同一个 CPU 来说,中断处理比进程拥有更高的优先级,所以中断上下文切换不会与进程上下文切换同时发生。并且,由于中断会打断正常进程的调度和执行,所以大部分中断处理程序都短小精悍,以便可以尽快完成。

原文参考:https://blog.csdn.net/qq_41359051/article/details/89673188

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值