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

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

目录

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.rhkb.cn/news/11947.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python在线编辑器

from flask import Flask, render_template, request, jsonify import sys from io import StringIO import contextlib import subprocess import importlib import threading import time import ast import reapp Flask(__name__)RESTRICTED_PACKAGES {tkinter: 抱歉&…

web-SQL注入-CTFHub

前言 在众多的CTF平台当中,作者认为CTFHub对于初学者来说,是入门平台的不二之选。CTFHub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。 作者更新了CTFHub系列,希望小伙伴们多多支持…

力扣动态规划-19【算法学习day.113】

前言 ###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!! 习题 1.矩形中移动的最大次数 题目链接…

js笔记(黑马程序员)

js(day2) 一、运算符 1.赋值运算符 运算符作用加法赋值-减法赋值*乘法复制/除法赋值%取余赋值 2.一元运算符 符号作用说明自增变量自身的值加1,如X--自减变量自身的值减1,如X-- 3.比较运算符 运算符作用>左边是否大于右…

使用Pygame制作“青蛙过河”游戏

本篇博客将演示如何使用 Python Pygame 从零开始编写一款 Frogger 风格的小游戏。Frogger 是一款早期街机经典,玩家需要帮助青蛙穿越车水马龙的马路到达对岸。本示例提供了一个精简原型,包含角色移动、汽车生成与移动、碰撞检测、胜利条件等关键点。希望…

联想拯救者Y9000P IRX8 2023 (82WK) 原厂Win11 家庭中文版系统 带一键还原功能 安装教程

安装完重建winre一键还原功能,和电脑出厂时的系统状态一模一样。自动机型专用软件,全部驱动,主题壁纸,自动激活,oem信息等。将电脑系统完全恢复到出厂时状态。 支持机型 (MTM) : 82WK 系统版本:Windows 1…

2025年02月02日Github流行趋势

项目名称:oumi 项目地址url:https://github.com/oumi-ai/oumi 项目语言:Python 历史star数:1416 今日star数:205 项目维护者:xrdaukar, oelachqar, taenin, wizeng23, kaisopos 项目简介:构建最…

【Elasticsearch】硬件资源优化

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

AJAX笔记原理篇

黑马程序员视频地址: AJAX-Day03-01.XMLHttpRequest_基本使用https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p33https://www.bilibili.com/video/BV1MN411y7pw?vd_sour…

Unity Shader Graph 2D - 跳动的火焰

在游戏中,火焰是一种常见的特效。通常来讲火焰特效通过粒子系统的方式实现的相对较多,本文将通过Shader Graph的方式来实现一种不同的火焰效果。 那么怎么实现呢 首先创建一个名为Fire的Shader Graph文件,然后创建一个名为M_Fire的材质球。 …

【二分题目】

二分 分巧克力求阶乘计算方程 分巧克力 分巧克力 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) {Scanner scan new Scanner(System.in);//在此输入您的代码...int nscan.nextInt…

集合通讯概览

集合通信概览 (1)通信的算法 是根据通讯的链路组成的 (2)因为通信链路 跟硬件强相关,所以每个CCL的库都不一样 芯片与芯片、不同U之间是怎么通信的 多卡训练:多维并行(xxx并行在上一期已经讲述…

GWO优化SVM回归预测matlab

灰狼优化算法(Grey Wolf Optimizer,简称 GWO),是由澳大利亚格里菲斯大学的 Mirjalii 等人于 2014 年提出的群智能优化算法。该算法的设计灵感源自灰狼群体的捕食行为,核心思想是对灰狼社会的结构与行为模式进行模仿。 …

LLM - 基于LM Studio本地部署DeepSeek-R1的蒸馏量化模型

文章目录 前言开发环境快速开始LM Studio简单设置模型下载开始对话 模型选择常见错误最后 前言 目前,受限于设备性能,在本地部署的基本都是DeepSeek-R1的蒸馏量化模型,这些蒸馏量化模型的表现可能并没有你想象的那么好。绝大部分人并不需要本…

csapp笔记3.6节——控制(1)

本节解决了x86-64如何实现条件语句、循环语句和分支语句的问题 条件码 除了整数寄存器外,cpu还维护着一组单个位的条件码寄存器,用来描述最近的算数和逻辑运算的某些属性。可检测这些寄存器来执行条件分支指令。 CF(Carry Flag&#xff09…

电路研究9.2.8——合宙Air780EP中IP 应用相关命令使用方法研究

这个有点吐血了,之前研究的时候只想着网络了,所以我对AT指令的那几个基本等指令以外,是跳到后面看的网络,加上IP也算网络里面的,就没注意,当时使用搜索查找时候并没有搜到ATSAPBR指令,结果这里打…

ubuntu解决普通用户无法进入root

项目场景: 在RK3566上移植Ubuntu20.04之后普通用户无法进入管理员模式 问题描述 在普通用户使用sudo su试图进入管理员模式的时候报错 解决方案: 1.使用 cat /etc/passwd 查看所有用户.最后一行是 若无用户,则使用 sudo useradd -r -m -s…

深度学习之“缺失数据处理”

缺失值检测 缺失数据就是我们没有的数据。如果数据集是由向量表示的特征组成,那么缺失值可能表现为某些样本的一个或多个特征因为某些原因而没有测量的值。通常情况下,缺失值由特殊的编码方式。如果正常值都是正数,那么缺失值可能被标记为-1…

Pandoc, Zotero, JabRef 管理论文引用,生成参考文献 | 撰写论文 paper

书接上回,使用 Obsidian, Zotero, JabRef, Pandoc, Markup-Markdown | 撰写论文 paper 管理论文引用,生成参考文献 TL; DR导出 bibliography 文件JabRefZotero 参考文献引用语法reference-docLinks TL; DR 安装 pandoc v3.6.2. 使用一下命令&#xff0c…

FFmpeg:多媒体处理的瑞士军刀

FFmpeg:多媒体处理的瑞士军刀 前言 FFmpeg 是一个功能强大且跨平台的开源多媒体框架,广泛应用于音视频处理领域。 它由多个库和工具组成,能够处理各种音视频格式,涵盖编码、解码、转码、流处理等多种操作。 无论是专业视频编辑…