究竟什么是上下文切换?

究竟什么是上下文切换?
2024年12月26日 15:21 电子产品世界

我们经常听到上下文切换这个词语,但是究竟什么是上下文切换呢?

本文引用地址:

概念

Linux是一个多任务的操作系统,可以同时多个任务并发执行,任务数超过CPU核心数。当然同一时刻在执行的任务数,最多也就只能是CPU核心数,只不过CPU时间片在多个任务之间来回切换罢了。上下文切换就是为了保存任务切换时刻的基本信息,当CPU重新执行任务的时候可以加载上下文信息,从当时退出的位置、状态重新开始执行任务。这里所说的上下文信息,既包括虚拟内存、栈、全局变量等用户态的资源,也包括内核堆栈、寄存器等内核态的资源。

上下文包含什么信息

一个进程的信息包含很多,可以理解为几个方面:CPU-状态信息、I/O状态信息、父子进程信息等:

· 进程状态:如就绪、运行、阻塞等,表示进程当前的执行状态。

· 程序计数器(PC):记录进程下一条指令的地址。

· 寄存器内容:包括通用寄存器、特殊寄存器等,保存进程切换时的 CPU 状态。

· 内存管理信息:如页面表、段表、内存限制等,用于管理进程的内存分配。

· 调度信息:如进程优先级、调度队列中的位置等,用于进程调度。

· I/O 状态信息:记录进程当前所使用的 I/O 设备、文件描述符等。

· 进程标识符(PID):唯一标识进程的 ID。

· 父进程和子进程信息:包括父进程 PID、子进程链表等。

· 时间信息:如进程的启动时间、CPU 时间片消耗等。

这些信息在内核中是通过结构体存储的,即PCB(Process Control Block)进程控制块,下图只是示意,不包含所有内容,在进程让出CPU的时候,这些上下文信息会保存到内核中,当下次执行的时候再从内核中加载回来。

在Linux源码中是通过结构体task_struct来存储的:

上下文切换的类型

· 进程上下文切换:最经常听到上下文切换,多个进程并发,很好理解。

· 线程上下文切换:包含了同一个进程内的和不同进程内的,不同进程内的消耗等同于进程上下文切换。

· 中断上下文切换:因为外设控制器执行速度通常慢于CPU,比如打印一个数据这个时候需要内核调用显示设备,很慢怎么办呢?这个是时候就会触发中断,让CPU先干别的进程,等打印完成了再回来。

分析工具

vmstat:查看整个系统的上下文切换情况

· cs(context switch)是每秒上下文切换的次数。

· in(interrupt)则是每秒中断的次数。

· r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。

· b(Blocked)则是处于不可中断睡眠状态的进程数。

· cswch 表示每秒自愿上下文切换(voluntary context switches)的次数。

· nvcswch 表示每秒非自愿上下文切换(non voluntary context switches)的次数。

新浪科技公众号
新浪科技公众号

“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)

创事记

科学探索

科学大家

苹果汇

众测

专题

官方微博

新浪科技 新浪数码 新浪手机 科学探索 苹果汇 新浪众测

公众号

新浪科技

新浪科技为你带来最新鲜的科技资讯

苹果汇

苹果汇为你带来最新鲜的苹果产品新闻

新浪众测

新酷产品第一时间免费试玩

新浪探索

提供最新的科学家新闻,精彩的震撼图片