什么是上下文切换?

上下文切换指的是内核操作系统的核心在CPU上对进程或者线程进行切换。

搞清楚上下文切换需要先搞清楚什么是上下文

CPU在开始执行任务时需要先知道从哪里去加载任务,从哪里开始执行,上下文的作用就是告诉CPU这些。(通常是由程序计数器和CPU寄存器来完成)

那为什么需要上下文切换呢?

一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式,就是一个线程的时间片用完会退回到就绪态,其他线程继续运行,这个过程就是进行了一次上下文切换

上下文切换的步骤:

  • 挂起一个进程,将这个进程在CPU中的状态(上下文信息)存储于内存的PCB(Process Control Block)中
  • 在PCB中检索下一个进程的上下文并将其在CPU的寄存器中恢复
  • 最后跳转到程序计数器所指的新位置,运行新任务

引起线程上下文切换的原因:

(1)当前正在执行的任务完成,系统的CPU正常调度下一个任务。

(2)当前正在执行的任务遇到I/O等阻塞操作,调度器挂起此任务,继续调度下一个任务。

(3)多个任务并发抢占锁资源,当前任务没有抢到锁资源,被调度器挂起,继续调度下一个任务。

(4)用户的代码挂起当前任务,比如线程执行yield()方法,让出CPU。

(5)硬件中断。

上下文切换可以分为进程上下文切换、线程上下文切换、中断上下文切换三种

进程上下文切换:进程上下文切换需要保存的东西比较多,花费的时间也比较多,进程的上下文主要包括虚拟内存、栈、全局变量、堆栈、寄存器等

线程上下文切换:线程上下文切换时,虚拟内存和全局变量等资源都是共享的,线程的上下文包括栈和寄存器等,比寄存器少很多。

中断上下文切换:为了快速响应硬件的事件,中断处理会打断进程的正常调度和执行,然后调用中断处理程序,响应设备事件。中断上下文,只包括内核态中断服务程序执行所必需的状态,也就是 CPU 寄存器、内核堆栈、硬件中断参数等

推荐阅读操作系统知识点详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值