IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 操作系统 —— (并发)上下文切换 -> 正文阅读

[嵌入式]操作系统 —— (并发)上下文切换

进程(线程)上下文

概念

每个正在运行的进程,cpu都会他的信息保存在下面三个东西中:

  1. 一个程序计数器(记录正在执行或者要执行的下一条指令)
  2. 一组寄存器(保存当前线程的工作变量)
  3. 堆栈(保存进程一些数据,线程则没有堆的切换)。

这些信息就叫上下文

寄存器: 是 CPU 内部的数量较少但是速度很快的内存(与之对应的是 CPU 外部相对较慢的 RAM 主内存)。
程序计数器:是一个专用的寄存器,用于表明指令序列中 CPU 正在执行的位置,存的值为正在执行的指令的位置或者下一个将要被执行的指令的位置。

进程上下文是进程执行活动全过程的静态描述。
已执行过的进程指令和数据,在相关寄存器与堆栈中的内容称为进程上文
正在执行的指令和数据在寄存器与堆栈中的内容称为进程正文,
待执行的指令和数据在寄存器与堆栈中的内容称为进程下文。

进程控制单元PCB

每个进程都有一个PCB来控制进程,他是一种数据结构。

  1. 进程状态:运行或等待
  2. 进程ID和父进程ID
  3. 程序计数器:程序执行到哪里的一个指针
  4. CPU调度信息:比如优先级
  5. 内存管理信息,比如页表或者块表
  6. IO状态信息:设备分配,等

什么是上下文切换

上下文切换就是从当前执行任务切换到另一个任务执行的过程。但是,为了确保下次能从正确的位置继续执行,在切换之前,会保存上一个任务的状态。

进程上下文切换

1.切换页目录以使用新的地址空间。
2.切换内核栈和硬件上下文。

  1. 挂起一个进程,将这个进程在 CPU 中的状态(上下文)存储于内存中的某处, 上下文切换由PCB保存,发生上下文切换时,内核将旧进程的上下文保存到PCB中,从新的进程PCB中加载信息
  2. 在内存中检索下一个进程的上下文并将其在 CPU 的寄存器中恢复这些信息
  3. 跳转到程序计数器所指向的位置,以恢复该进程。

线程上下文切换

两种情况:

  1. 前后两个线程属于不同进程。此时,因为资源不共享,所以切换过程就跟进程上下文切换是一样。
  2. 前后两个线程属于同一个进程。此时,因为虚拟内存是共享的,所以在切换时,虚拟内存这些资源就保持不动,只需要切换线程的私有数据:栈、线程寄存器信息等不共享的线程私有的数据

进程上下文切换和线程上下文切换区别

在这里插入图片描述
进程上下文切换要涉及地址空间切换,将虚拟内存切换到物理内存,而线程不需要。线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。一旦去切换上下文,处理器中所有已经缓存的内存地址一瞬间都作废了。还有一个显著的区别是当你改变虚拟内存空间的时候,处理的页表缓冲(processor’s Translation Lookaside Buffer (TLB))或者相关的东西会被全部刷新,这将导致内存的访问在一段时间内相当的低效。但是在线程的切换中,不会出现这个问题。

内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。

上下文切换问题

上下文切换会导致额外的开销,常常表现为高并发执行时速度会慢串行,因此减少上下文切换次数便可以提高多线程程序的运行效率。

直接消耗:指的是CPU寄存器需要保存和加载, 系统调度器的代码需要执行, TLB实例需要重新加载, CPU 的pipeline需要刷掉
间接消耗:指的是多核的cache之间得共享数据, 间接消耗对于程序的影响要看线程工作区操作数据的大小

参考

https://zhuanlan.zhihu.com/p/52845869
https://blog.csdn.net/21cnbao/article/details/108860584
https://blog.csdn.net/alex_xfboy/article/details/90722654
https://blog.csdn.net/zt2650693774/article/details/105193125/
https://blog.csdn.net/woshidytgg/article/details/72926687?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.highlightwordscore&spm=1001.2101.3001.4242.2

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:27:31  更:2021-12-15 18:27:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:55:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码