嵌入式知识点总结 操作系统 专题提升(四)-上下文

news2025/2/4 17:19:47

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。

目录

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)中,再加载下一个进程的上下文,使得新的进程能够从它上次保存的状态继续执行。

上下文的作用

  1. 进程切换:操作系统在多任务处理时,通过上下文切换来让多个进程轮流执行。每次切换时,操作系统会保存当前进程的上下文,并恢复下一个进程的上下文,从而实现多任务并发。

  2. 进程恢复:当一个进程被中断、挂起或切换出去时,操作系统需要保存其上下文信息,以便在以后恢复该进程时,能够从上次停止的地方继续执行,保证进程状态的一致性。

  3. 多线程执行:类似进程的上下文,线程也有自己的上下文。当多个线程共享同一进程的地址空间时,每个线程的上下文会包括该线程特有的寄存器和栈信息,而其他资源(如堆、代码段等)则是共享的。

上下文切换的代价

上下文切换是操作系统中不可避免的开销。每次上下文切换都会引入一定的时间成本,主要是由于:

  • 保存和加载寄存器状态:需要将当前进程的寄存器值保存在进程控制块(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:累加寄存器,用于加法乘法的缺省寄存器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2291899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch基本使用详解

文章目录 Elasticsearch基本使用详解一、引言二、环境搭建1、安装 Elasticsearch2、安装 Kibana(可选) 三、索引操作1、创建索引2、查看索引3、删除索引 四、数据操作1、插入数据2、查询数据(1)简单查询(2)…

xxl-job 在 Java 项目的使用 以一个代驾项目中的订单模块举例

能搜到这里的最起码一定知道 xxl-job 是用来干什么的,我就不多啰嗦怎么下载以及它的历史了 首先我们要知道 xxl-job 这个框架的结构,如下图: xxl-job-master:xxl-job-admin:调度中心xxl-job-core:公共依赖…

Alibaba开发规范_异常日志之日志规约:最佳实践与常见陷阱

文章目录 引言1. 使用SLF4J日志门面规则解释代码示例正例反例 2. 日志文件的保存时间规则解释 3. 日志文件的命名规范规则解释代码示例正例反例 4. 使用占位符进行日志拼接规则解释代码示例正例反例 5. 日志级别的开关判断规则解释代码示例正例反例 6. 避免重复打印日志规则解释…

SQLAlchemy 2.0的简单使用教程

SQLAlchemy 2.0相比1.x进行了很大的更新,目前网上的教程不多,以下以链接mysql为例介绍一下基本的使用方法 环境及依赖 Python:3.8 mysql:8.3 Flask:3.0.3 SQLAlchemy:2.0.37 PyMySQL:1.1.1使用步骤 1、创建引擎,链接到mysql engine crea…

OpenGL学习笔记(七):Camera 摄像机(视图变换、LookAt矩阵、Camera类的实现)

文章目录 摄像机/观察空间/视图变换LookAt矩阵移动相机(处理键盘输入)移动速度欧拉角移动视角(处理鼠标输入)缩放场景(处理滚轮输入)Camera类 摄像机/观察空间/视图变换 在上一节变换中,我们讨…

『VUE』vue-quill-editor富文本编辑器添加按钮houver提示(详细图文注释)

目录 预览效果新建一个config.js存放标题编写添加提示的方法调用添加标题方法的生命周期总结 欢迎关注 『VUE』 专栏,持续更新中 欢迎关注 『VUE』 专栏,持续更新中 预览效果 新建一个config.js存放标题 export const titleConfig [{ Choice: .ql-bold…

如何使用 DeepSeek 和 Dexscreener 构建免费的 AI 加密交易机器人?

我使用DeepSeek AI和Dexscreener API构建的一个简单的 AI 加密交易机器人实现了这一目标。在本文中,我将逐步指导您如何构建像我一样的机器人。 DeepSeek 最近发布了R1,这是一种先进的 AI 模型。您可以将其视为 ChatGPT 的免费开源版本,但增加…

微信登录模块封装

文章目录 1.资质申请2.combinations-wx-login-starter1.目录结构2.pom.xml 引入okhttp依赖3.WxLoginProperties.java 属性配置4.WxLoginUtil.java 后端通过 code 获取 access_token的工具类5.WxLoginAutoConfiguration.java 自动配置类6.spring.factories 激活自动配置类 3.com…

SRS代码目录

代码目录: src/目录下核心代码: core:核心功能模块,包括日志、配置、错误处理等;protocol:实现RTMP、HTTP-FLV、HLS等协议的模块;app:应用层的实现,包括流的发布、播放…

机器学习--1.KNN机器学习入门

1、机器学习概述 1.1、什么是机器学习 机器学习(Machine Learning)是人工智能(Artificial Intelligence)领域的一个子集,它主要关注如何让计算机系统通过经验学习(数据)并自动改进性能。机器学…

Adaptive LLM Transformer²

看到了一个不错的论文https://arxiv.org/pdf/2501.06252 TRANSFORMER-SQUARED: SELF-ADAPTIVE LLMS 挺有意思的,是一家日本AI公司SakanaAI的论文(我以前写过他们的不训练提升模型的能力的文章,感兴趣可以去翻)它家有Lion Jones坐镇…

基于LabVIEW的Modbus-RTU设备通信失败问题分析与解决

在使用 LabVIEW 通过 Modbus-RTU 协议与工业设备进行通信时,可能遇到无法正常发送或接收指令的问题。常见原因包括协议参数配置错误、硬件连接问题、数据帧格式不正确等。本文以某 RGBW 控制器调光失败为例,提出了一种通用的排查思路,帮助开发…

直方图:摄影中的视觉数据指南

目录 一、直方图基础:揭开它的神秘面纱 二、解读直方图类型:亮度与色彩的密码 (一)亮度直方图 (二)RGB 直方图 三、拍摄中巧用直方图:优化曝光与效果 (一)精准判断曝…

IM 即时通讯系统-51-MPush开源实时消息推送系统

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术,提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…

【Linux】从硬件到软件了解进程

个人主页~ 从硬件到软件了解进程 一、冯诺依曼体系结构二、操作系统三、操作系统进程管理1、概念2、PCB和task_struct3、查看进程4、通过系统调用fork创建进程(1)简述(2)系统调用生成子进程的过程〇提出问题①fork函数②父子进程关…

2024-我的学习成长之路

因为热爱,无畏山海

Kamailio 不通过 dmq 实现注册复制功能

春节期间找到一篇文章,需要 fg 才能看到: https://medium.com/tumalevich/kamailio-registration-replication-without-dmq-65e225f9a8a7 kamailio1 192.168.56.115 kamailio2 192.168.56.116 kamailio3 192.168.56.117 route[HANDLE_REPLICATION] {i…

大模型系列21-AI聊天机器人

聊天机器人 背景机器学习基础监督学习(Supervised Learning)概念应用场景主要问题 无监督学习(Unsupervised Learning)概念常见方法应用场景 强化学习(Reinforcement Learning)概念关键要素应用场景 模型优…

25.2.3 【洛谷】作为栈的复习不错(学习记录)

今天学习的东西不算多,放了一个星期假,感觉不少东西都没那么清楚,得复习一下才行。今天搞个栈题写,把栈复习一下,明天进入正轨,边复习边学习新东西,应该会有二叉树的学习等等... 【洛谷】P1449 …

Android开发工作经历整理

一.无人机应用软件开发 集成大疆官网的DJIMobileSDK到AS中编写软件,操控无人机执行多个航点任务。集成OpenCV库进行图像识别,通过获取参数,根据算法执行sdk,使无人机降落到机库,并执行后续的换电操作。待无人机就绪后…