嵌入式知识点总结 操作系统 专题提升(四)-上下文
针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。
目录
1.上下文有哪些?怎么理解?
2.为什么会有上下文这种概念?
3.什么情况下进行用户态到内核态的切换?
4.中断上下文代码中有哪些注意事项?
5.请问线程需要保存哪些上下文,SP、PC、EAX这些寄存器是干嘛用的?
1.上下文有哪些?怎么理解?
操作系统中的“上下文”是指与进程或线程的执行相关的所有信息。上下文的保存和切换是操作系统实现进程调度、线程调度和资源管理的基础。上下文的内容决定了一个进程或线程的状态,确保当进程或线程被暂停时,能够恢复到先前的执行状态。
上下文的组成
上下文通常包含以下几个部分:
1. CPU寄存器
CPU寄存器保存了进程当前的状态和执行位置。常见的寄存器包括:
-
程序计数器(PC):保存下一条指令的地址。程序计数器决定了程序的执行顺序。
-
通用寄存器:保存进程执行时所需要的临时数据,如整数、浮点数等。
-
堆栈指针(SP):指向当前栈顶,用于管理函数调用和局部变量。
-
基址寄存器和段寄存器:用于管理内存地址的转换和访问。
2. 内存管理信息
内存管理信息包括了进程的地址空间和虚拟内存的映射。它可能包括:
-
页表:映射虚拟地址到物理地址。
-
段表:将虚拟地址分段处理,进行内存分段管理。
-
堆和栈的指针:分别指向进程的堆区和栈区。
3. 程序状态字(PSW)
程序状态字包含了进程当前的状态信息,包括:
-
中断使能位:控制是否允许中断。
-
进程的状态:如运行、等待、就绪等。
-
条件码:如加法溢出标志等。
4. 文件描述符
进程在执行时可能会使用文件、设备等外部资源,这些资源的访问通过文件描述符来管理。文件描述符包含文件的状态信息,指示文件的读写位置等。
5. 进程控制块(PCB)
进程控制块是操作系统用于管理进程的一个数据结构。它包含了一个进程的所有元数据,除了CPU寄存器、内存管理信息、程序状态字外,还可能包括:
-
进程的标识符(PID)。
-
父进程和子进程的关系。
-
进程的优先级和调度信息。
-
进程的资源(如打开的文件、IO设备)信息。
上下文的理解
上下文的核心含义是“描述进程执行状态的所有信息”,它决定了一个进程(或线程)能否在某个时刻恢复并继续执行。上下文切换(Context Switch)是操作系统中一个关键的操作,它发生在操作系统调度进程时。在进行上下文切换时,操作系统会将当前进程的上下文保存到进程控制块(PCB)中,再加载下一个进程的上下文,使得新的进程能够从它上次保存的状态继续执行。
上下文的作用
-
进程切换:操作系统在多任务处理时,通过上下文切换来让多个进程轮流执行。每次切换时,操作系统会保存当前进程的上下文,并恢复下一个进程的上下文,从而实现多任务并发。
-
进程恢复:当一个进程被中断、挂起或切换出去时,操作系统需要保存其上下文信息,以便在以后恢复该进程时,能够从上次停止的地方继续执行,保证进程状态的一致性。
-
多线程执行:类似进程的上下文,线程也有自己的上下文。当多个线程共享同一进程的地址空间时,每个线程的上下文会包括该线程特有的寄存器和栈信息,而其他资源(如堆、代码段等)则是共享的。
上下文切换的代价
上下文切换是操作系统中不可避免的开销。每次上下文切换都会引入一定的时间成本,主要是由于:
-
保存和加载寄存器状态:需要将当前进程的寄存器值保存在进程控制块(PCB)中,再将下一个进程的寄存器值加载到CPU寄存器。
-
更新内存管理信息:涉及页表、段表的切换或更新。
-
更新调度信息:包括进程的优先级、调度队列等信息的更新。
因此,操作系统会尽量减少上下文切换的次数,以提高系统的效率。
2.为什么会有上下文这种概念?
上下文这一概念在操作系统中出现,是为了支持 多任务处理 和 进程调度,从而实现系统的并发执行和资源的合理分配。操作系统通过上下文管理来保证多个进程或线程能够共享 CPU 等系统资源,并且在它们之间进行有效的切换,确保每个进程的执行状态能够被保存并恢复。理解这一点有助于明确为什么上下文如此重要。
为什么会有上下文这种概念?
支持多任务并发执行 在现代操作系统中,通常需要支持多个进程或线程同时运行。尽管计算机只有有限数量的 CPU 核心,但操作系统通过上下文切换技术,使得每个进程或线程看起来像是同时在运行。操作系统会将 CPU 的时间片分配给多个进程或线程,而每个进程的 上下文 存储了该进程的状态信息。当进程切换时,操作系统通过保存和恢复上下文,实现不同进程的交替执行,从而达到 并发执行 的效果。
上下文切换:当一个进程或线程被暂停,操作系统需要保存该进程的当前状态(即上下文),以便在恢复时能够从上次停止的地方继续执行。这就是为什么上下文需要保存与加载的原因。
进程的独立性与隔离 操作系统需要确保每个进程有自己的独立运行环境。上下文的概念有助于确保进程间的隔离性,即一个进程的执行状态不会被其他进程干扰。当一个进程运行时,它的寄存器、程序计数器、堆栈等信息(即上下文)是唯一的,并且操作系统通过上下文切换来管理进程的执行,确保每个进程在自己的独立上下文中执行。
进程的暂停与恢复 在操作系统中,进程可能由于各种原因被暂停,例如:I/O 操作、时间片耗尽、等待资源等。上下文的概念使得操作系统能够在进程暂停时保存其当前状态,并在进程恢复时恢复之前的状态。没有上下文,操作系统就无法恢复进程的执行,进程的执行就无法持续进行下去。
比如,当一个进程被中断时,操作系统需要保存该进程的上下文(包括 CPU 寄存器的内容、内存信息等),然后切换到另一个进程。当需要恢复该进程时,操作系统再从保存的上下文中恢复其状态,继续执行。
提供进程调度机制 操作系统需要根据一定的策略调度多个进程执行。上下文的概念使得进程调度成为可能。每当操作系统切换进程时,它就需要保存当前进程的上下文,并加载下一个进程的上下文,保证系统能够正常切换和运行多个进程。
时间片轮转:操作系统通过分配给每个进程一个时间片,进程在时间片用尽时会被挂起,进行上下文切换。操作系统保存当前进程的上下文,恢复下一个进程的上下文,从而实现时间共享。
资源管理与共享 上下文还帮助操作系统管理进程之间的资源共享和独占。进程的上下文包括了该进程使用的资源的信息(如文件句柄、内存块等),通过保存和恢复这些上下文信息,操作系统能够确保资源在进程间切换时被正确管理。
调试和异常处理 上下文也是进行调试和异常处理的基础。操作系统或调试工具可以通过获取进程的上下文,了解进程在崩溃或发生错误时的执行状态。通过恢复进程的上下文,操作系统能够恢复到错误发生前的状态,帮助分析和修复问题。
3.什么情况下进行用户态到内核态的切换?
1.进程上下文主要是异常处理程序和内核线程。内核之所以进入进程上下文是因为进程自身的一些工作需要在内核中做。例如,系统调用是为当前进程服务的,异常通常是处理进程导致的错误状态等。
2.中断上下文是由于硬件发生中断时会触发中断信号请求,请求系统处理中断,执行中断服务子程序。
4.中断上下文代码中有哪些注意事项?
运行于进程上下文的内核代码是可抢占的,但中断上下文则会一直运行至结束,不会被抢占。所以中断处理程序代码要受到一些限制,在中断代码中不能出现实现下面功能的代码:
1.睡眠或者放弃CPU
因为内核在进入中断之前会关闭进程调度,一旦睡眠或者放弃CPU,这时内核无法调度别的进程来执行,系统就会死掉。牢记:中断服务子程序一定不能睡眠(或者阻塞)。
2.尝试获得信号量
如果获得不到信号量,代码就会睡眠,导致(1)中的结果。
3.执行耗时的任务
中断处理应该尽可能快,因为如果一个处理程序是IROF DISABLED类型,他执行的时候会禁止所有本地中断线,而内核要响应大量服务和请求,中断上下文占用CPU时间太长会严重影响系统功能。中断处理程序的任务尽可能放在中断下半部执行。
4.访问用户空间的虚拟地址
因为中断运行在内核空间。
5.请问线程需要保存哪些上下文,SP、PC、EAX这些寄存器是干嘛用的?
线程在切换的过程中需要保存当前线程id、线程状态、堆栈、寄存器状态等信息。其中寄存器主要包括SP、PC、EAX等寄存器,其主要功能如下
SP:堆栈指针,指向当前栈的栈顶地址
PC:程序计数器,存储下一条将要执行的指令
EAX:累加寄存器,用于加法乘法的缺省寄存器
相关文章:

嵌入式知识点总结 操作系统 专题提升(四)-上下文
针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.上下文有哪些?怎么理解? 2.为什么会有上下文这种概念? 3.什么情况下进行用户态到内核态的切换? 4.中断上下文代码中有哪些注意事项? 5.请问线程需要保存哪些…...
React 封装高阶组件 做路由权限控制
React 高阶组件是什么 官方解释∶ 高阶组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。 高阶组件(HOC)就是一个函数&…...

【实践案例】基于大语言模型的海龟汤游戏
文章目录 项目背景提示词构建海龟汤主持人真相判断专家 具体实现流程文心一言大语言模型“海龟汤”插件参考 项目背景 “海龟汤”作为一种聚会类桌游,又称情境推理游戏,是一种猜测情境还原事件真相的智力游戏。其玩法是由出题者提出一个难以理解的事件&…...

NeetCode刷题第20天(2025.2.1)
文章目录 106 Best Time to Buy and Sell Stock with Cooldown 使用 Cooldown 买卖股票的最佳时间107 Coin Change II 换币 II108 Target Sum 目标总和109 Interleaving String 交错字符串110 Edit Distance 编辑距离111 Maximum Subarray 最大子数组112 Jump Game 跳跃游戏113…...
DeepSeek:人工智能领域的革新者与未来展望
在当今这个数据驱动的时代,人工智能(AI)正以前所未有的速度发展,而DeepSeek作为这一领域的先锋,正引领着AI技术的创新与突破。作为一家致力于推动人工智能技术创新与应用的前沿企业,DeepSeek不仅在多语言编…...

Spring Bean 容器
技术成长,是对场景设计细节不断的雕刻! 你觉得自己的技术什么时候得到了快速的提高,是CRUD写的多了以后吗?想都不要想,绝对不可能!CRUD写的再多也只是能满足你作为一个搬砖工具人,敲击少逻辑流…...

Flask代码审计实战
文章目录 Flask代码审计SQL注入命令/代码执行反序列化文件操作XXESSRFXSS其他 审计实战后记reference Flask代码审计 SQL注入 1、正确的使用直白一点就是:使用”逗号”,而不是”百分号” stmt "SELECT * FROM table WHERE id?" connectio…...
springboot启动配置文件-bootstrap.yml常用基本配置
在Spring Boot应用程序中,bootstrap.yml文件通常用于配置应用程序的启动阶段。在这个文件中,你可以配置一些在应用程序启动之前需要加载的属性,例如外部配置源、加密属性等。以下是一些常用的基本配置项: 1. 外部配置源 1.1 配置…...

2月3日星期一今日早报简报微语报早读
2月3日星期一,农历正月初六,早报#微语早读。 1、多个景区发布公告:售票数量已达上限,请游客合理安排行程; 2、2025春节档总票房破70亿,《哪吒之魔童闹海》破31亿; 3、美宣布对中国商品加征10…...

如何确认Linux嵌入式系统的触摸屏对应的是哪个设备文件(/dev/input/event1)?如何查看系统中所有的输入设备?输入设备的设备文件有什么特点?
Linux嵌入式系统的输入设备的设备文件有什么特点? 在 Linux 中,所有的输入设备(如键盘、鼠标、触摸屏等)都会被内核识别为 输入事件设备,并在 /dev/input/ 目录下创建相应的 设备文件,通常是: …...

FFmpeg:多媒体处理的瑞士军刀
FFmpeg:多媒体处理的瑞士军刀 前言 FFmpeg 是一个功能强大且跨平台的开源多媒体框架,广泛应用于音视频处理领域。 它由多个库和工具组成,能够处理各种音视频格式,涵盖编码、解码、转码、流处理等多种操作。 无论是专业视频编辑…...
电控三周速成计划参考
第1周:基础搭建与GPIO控制 学习目标:建立开发环境,掌握最基础的硬件控制能力 每日学习(2-3小时): 环境搭建(2天) 安装Keil MDK-ARM STM32CubeMX使用CubeMX创建第一个工程…...
Ubuntu修改配置文件--编辑操作
例如。 1.打开 /etc/samba/smb.conf 该配置文件: sudo vi /etc/samba/smb.conf 2.当你运行sudo vi /etc/samba/smb.conf命令后,你需要按i键进入插入模式(Insert Mode)。这时,在屏幕底部你应该能看到“-- INSERT --”…...
2021版小程序开发5——小程序项目开发实践(1)
2021版小程序开发5——小程序项目开发实践(1) 学习笔记 2025 使用uni-app开发一个电商项目; Hbuidler 首选uni-app官方推荐工具:https://www.dcloud.io/hbuilderx.htmlhttps://dev.dcloud.net.cn/pages/app/list 微信小程序 管理后台:htt…...
二分/双指针/单调栈队列专题
1.4924. 矩阵 - AcWing题库 一开始打表找规律以为是右上角向左下角递增,但当n很大的时候就不对了,因此我们得去观察 i * i 100000 * (i - j) j * j i * j 这个式子,我们关心的是这个式子的单调性因此我们可以分别将i和j看作常数来对式子进行求导,可以得到 f(i) 2 * i 10…...

XCCL、NCCL、HCCL通信库
XCCL提供的基本能力 XCCL提供的基本能力 不同的XCCL 针对不同的网络拓扑,实现的是不同的优化算法的(不同CCL库最大的区别就是这) 不同CCL库还会根据自己的硬件、系统,在底层上面对一些相对应的改动; 但是对上的API接口…...

【Deep Seek本地化部署】模型实测:规划求解python代码
目录 前言 一、实测 1、整数规划问题 2、非线性规划问题 二、代码正确性验证 1、整数规划问题代码验证 2、非线性规划问题代码验证 三、结果正确性验证 1、整数规划问题结果正确性验证 2、非线性规划问题正确性验证 四、整数规划问题示例 后记 前言 模型ÿ…...

MySQL锁类型(详解)
锁的分类图,如下: 锁操作类型划分 读锁 : 也称为共享锁 、英文用S表示。针对同一份数据,多个事务的读操作可以同时进行而不会互相影响,相互不阻塞的。 写锁 : 也称为排他锁 、英文用X表示。当前写操作没有完成前,它会…...
搜索插入位置(35)
35. 搜索插入位置 - 力扣(LeetCode) 相关算法:二分查找最左侧和最右侧target的index-CSDN博客 class Solution { public:int searchInsert(vector<int>& nums, int target) {int left 0;int right nums.size() - 1;int ans nu…...

八. Spring Boot2 整合连接 Redis(超详细剖析)
八. Spring Boot2 整合连接 Redis(超详细剖析) 文章目录 八. Spring Boot2 整合连接 Redis(超详细剖析)2. 注意事项和细节3. 最后: 在 springboot 中 , 整合 redis 可以通过 RedisTemplate 完成对 redis 的操作, 包括设置数据/获取数据 比如添加和读取数据 具体整…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...

2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...