linux进程切换
-
内核堆栈:每个进程在内核模式下运行时都有自己的内核堆栈。这个堆栈保存了进程在内核模式下的运行状态,包括函数调用时传递的参数、局部变量和返回地址等。
-
用户态与内核态:进程通常在用户态下运行,当执行系统调用或响应中断时进入内核态。在内核态,进程对硬件资源有更高级别的控制。
-
返回地址:当系统调用或中断发生时,CPU从用户态切换到内核态并保存返回用户态的地址。当内核完成处理后,通过这个地址返回用户态继续执行原进程。
进程切换的实质操作发生在内核堆栈上。当操作系统决定将CPU从当前进程切换到另一个进程时,它会保存当前进程的内核堆栈信息(即执行“保存上下文”),然后加载新的进程的内核堆栈信息(即执行“恢复上下文”)到CPU。
关键步骤是修改内核堆栈上的返回地址:
- 对于当前正在运行的进程,其在内核堆栈上的信息会被保存,包括即将返回到用户态执行的地址。
- 当要切换到新的进程时,操作系统会更改内核堆栈上的数据为新进程的堆栈信息,并设置新的返回地址为新进程的用户态地址。
当操作系统做好这些更改后,它将“返回”到新进程的用户态,从新进程保存的那个点继续执行。从用户的角度看,CPU似乎从一个进程“跳”到了另一个。实际上,这个“跳”是通过保存和恢复不同进程的上下文、修改内核堆栈上的数据完成的。这样,一个进程切换到另一个进程的过程就完成了,CPU现在执行新的进程代码。
内核态:
在内核态可以理解为不分进程,进入内核态就不分了。只在内核态返回到用户进程才有意义。
-
进程上下文: 在用户态,操作系统为每个运行的程序提供了一个独立的进程上下文,包括虚拟内存空间、文件句柄、安全权限等。每个进程都拥有自己独立的用户态环境,操作系统通过进程间切换(Context Switch)来管理多任务。
-
内核态简化: 在内核态,虽然当前可能是响应某个进程的系统调用进入的,但是由于所有进程共享相同的内核空间和内核资源,所以在一些操作中不需要考虑是哪个用户进程在请求服务。
-
共享内核资源: 内核态代码直接运行在处理器的最高权限级别,访问的是全局的、不属于特定进程的资源。比如内核的调度器、内存管理单元、I/O处理系统等,都是服务于所有进程的共享资源。
-
安全隔离与共享: 即使在内核态有时也需要知道当前操作是由哪个进程触发的(例如管理进程的内核栈、确保访问权限等),但许多低级别的内核操作本身是与发起请求的特定进程无关的,比如硬件中断处理、定时器调度、底层网络数据包处理等。
linux内核如何加载多种不同的可执行文件?
- shell 环境下调用execve同时载入命令行参数和环境变量
- 库函数触发系统调用陷入内核态
- system call 调用sys_execuve -> do_execve -> do_execve_common -> exec_binprm-> load_elf_binary
在系统初始化阶段调用了core_initcall(init_elf_binfmt);
init_elf_binfmt 中将 elf_format全局变量注册在内核的fmt链表中,所以在 exec_binprm 中会在fmt链表中找到对应模块来解析ELF文件的头部信息。
调用 elf_format变量中的 load_elf_binary 方法,load_elf_binary 中最后调用start_thread 设置新的ip值,等该进程返回用户态时,就转而执行新的代码。
两种加载的方法:
静态库:直接执行可执行程序的入口
动态库:由ld来动态链接这个程序,再把控制权移交给可执行程序的入口
相关文章:
linux进程切换
内核堆栈:每个进程在内核模式下运行时都有自己的内核堆栈。这个堆栈保存了进程在内核模式下的运行状态,包括函数调用时传递的参数、局部变量和返回地址等。 用户态与内核态:进程通常在用户态下运行,当执行系统调用或响应中断时进…...
spring boot 如何升级 Tomcat 版本
在Spring Boot应用程序中升级内嵌的Tomcat版本通常涉及以下几个步骤: 1. 确定当前使用的Tomcat版本 首先,你需要确定你的Spring Boot应用程序当前使用的Tomcat版本。这可以通过查看项目的pom.xml或build.gradle文件来完成,其中会列出所有的…...
sentinel中StatisticSlot数据采集的原理
StatisticSlot数据采集的原理 时间窗口 固定窗口 在固定的时间窗口内,可以允许固定数量的请求进入;超过数量就拒绝或者排队,等下一个时间段进入, 如下图 时间窗长度划分为1秒 单个时间窗的请求阈值为3 上述存在一个问题, 假如9:18:04:…...
图像去噪与增强技术
图像去噪与增强技术是数字图像处理领域中的两个重要方面,它们分别关注消除图像中的噪声和改善图像的质量。 图像去噪技术的主要目的是从受噪声干扰的图像中去除不必要的随机信号,以恢复图像的真实内容。这对于图像的进一步分析和理解至关重要。去噪技术包…...
SpringJPA 做分页条件查询
前言: 相信小伙伴们的项目很多都用到SpringJPA框架的吧,对于单表的增删改查利用jpa是很方便的,但是对于条件查询并且分页 是不是很多小伙伴不经常写到. 今天我整理了一下在这里分享一下. 话不多说直接上代码: Controller: RestController public class ProductInstanceContr…...
[Java基础揉碎]单例模式
目录 什么是设计模式 什么是单例模式 饿汉式与懒汉式 饿汉式vs懒汉式 懒汉式存在线程安全问题 什么是设计模式 1.静态方法和属性的经典使用 2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、 以及解决问题的思考方式。设计模式就像是经典的棋谱&am…...
unity无法使用道路生成插件Road Architect(ctrl和shift无法标点)
切换一下布局就行了。 附:Road Architect教学地址...
Django下载使用、文件介绍
【一】下载并使用 【1】下载框架 (1)注意事项 计算机名称不要出现中文python解释器版本不同可能会出现启动报错项目中所有的文件名称不要出现中文多个项目文件尽量不要嵌套,做到一项一夹 (2)下载 Django属于第三方模块&#…...
Docker进阶:Docker-cpmpose 实现服务弹性伸缩
Docker进阶:Docker-cpmpose 实现服务弹性伸缩 一、Docker Compose基础概念1.1 Docker Compose简介1.2 Docker Compose文件结构 二、弹性伸缩的原理和实现步骤2.1 弹性伸缩原理2.2 实现步骤 三、技术实践案例3.1 场景描述3.2 配置Docker Compose文件3.3 使用 docker-…...
opencv各个模块介绍(2)
Features2D 模块:特征检测和描述子计算模块,包括SIFT、SURF等算法。 Features2D 模块提供了许多用于特征检测和描述子匹配的函数和类,这些函数和类可用于图像特征的提取、匹配和跟踪。 FeatureDetector:特征检测器的基类…...
HTTPS:原理、使用方法及安全威胁
文章目录 一、HTTPS技术原理1.1 主要技术原理1.2 HTTPS的工作过程1.2.1 握手阶段1.2.2 数据传输阶段 1.3 HTTPS的安全性 二、HTTPS使用方法三、HTTPS安全威胁四、总结 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer)&am…...
【云开发笔记No.6】腾讯CODING平台
腾讯云很酷的一个应用,现在对于研发一体化,全流程管理,各种工具层出不穷。 云时代用云原生,再加上AI,编码方式真是发生了质的变化。 从前,一个人可以写一个很酷的软件,后来,这变得…...
20.Ubuntu下安装GCC
文章目录 Ubuntu下安装GCC查看官方安装指导错误缺少gmp库缺少32位开发库libcg: error: gengtype-lex.c: No such file or directoryreference 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 Ubuntu下安装GCC 为了支持新的c标准ÿ…...
2.windows ubuntu子系统配置
打开UBuntu后, > wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh #下载conda软件。 > bash Miniconda3-latest-Linux-x86_64.sh #下载完conda后执行这步 > source ~/.bashrc > conda-h #出现一下…...
vscode的一些技巧
技巧1:调试时传参数 在launch.json的configuration中"pwd"或者"program"选项之后添加如下选项: “--args”:["参数1", "参数2", ..., "参数3] 参数之间使用逗号隔开 技巧2:断点 普通断点使…...
JavaEE企业级分布式高级架构师课程
教程介绍 本课程主要面向1-5年及以上工作经验的Java工程师,大纲由IT界知名大牛 — 廖雪峰老师亲自打造,由来自一线大型互联网公司架构师、技术总监授课,内容涵盖深入spring5设计模式/高级web MVC开发/高级数据库设计与开发/高级响应式web开发…...
c语言函数大全(K开头)
c语言函数大全(K开头) There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should leave quickly. 函数名…...
高效备考2025年AMC8竞赛:吃透2000-2024年600道真题(免费送题)
我们继续来随机看五道AMC8的真题和解析,根据实践经验,对于想了解或者加AMC8美国数学竞赛的考生来说,吃透AMC8历年真题是备考更加科学、有效的方法之一。 最近有家长朋友问我,现在有哪些类似于奥数的比赛可以参加?我的…...
HTML5和CSS3新特性
Html新增属性 1.新增语义化标签 <header>:头部标签 <nav>:导航标签 <article>:内容标签 <section>:定义文档某个区域 <aside>:侧边栏标签 <footer>:尾部标签 2.…...
Java基础-正则表达式
文章目录 1.基本介绍2.正则底层实现1.matcher.find()完成的任务2.matcher.group(0)分析1.源代码2.解释(不分组)3.解释(分组) 3.总结 3.正则表达式语法1.基本介绍2.元字符的转义符号1.基本介绍2.代码实例 3.字符匹配符1.基本介绍2.…...
快速生成eNSP自动化安装脚本原型,用快马AI告别繁琐配置
作为一名经常需要搭建网络实验环境的工程师,我深知华为eNSP安装过程的繁琐。每次在新设备上配置时,手动安装依赖、处理环境变量的过程都让人头疼。最近尝试用InsCode(快马)平台的AI辅助功能后,发现可以快速生成自动化安装脚本原型,…...
OpenClaw语音交互:千问3.5-9B+Whisper实现声控自动化
OpenClaw语音交互:千问3.5-9BWhisper实现声控自动化 1. 为什么需要语音交互的自动化助手 去年冬天的一个深夜,我正蜷在沙发上用笔记本处理文件,突然意识到一个问题——当双手被热咖啡和零食占据时,想要快速调取电脑里的资料变得…...
Alpamayo-R1-10B参数调优教程:Temperature从0.4→1.2对轨迹激进程度的影响可视化对比
Alpamayo-R1-10B参数调优教程:Temperature从0.4→1.2对轨迹激进程度的影响可视化对比 1. 引言 如果你正在使用Alpamayo-R1-10B这个自动驾驶模型,可能会发现一个有趣的现象:同样的路口场景,同样的驾驶指令,模型给出的…...
从STM32F207到F030:多路ADC采样的那些坑与填坑实录
从STM32F207到F030:多路ADC采样的那些坑与填坑实录 在嵌入式开发领域,STM32系列MCU因其出色的性能和丰富的生态而广受欢迎。然而,当开发者从高端系列(如STM32F207)转向入门级系列(如STM32F030)时…...
毕业论文答辩利器:AI驱动的10款高效工具及模板深度评测
工具对比速览表 工具名称 核心功能 适用场景 特色优势 Aibiye 智能成文、文献查找、数据分析 社科/金融/理工类论文 融合多模型架构,精准把握高校规范 Aicheck 初稿生成、大纲定制、图表插入 快速完成初稿需求 全学科覆盖,20-30分钟极速生成 …...
蓝桥杯19723分布式队列
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner innew Scanner(System.in);int nin.nextInt();int l[]new int[n];//记录每行的长度while (in.hasNext()){String sin.next();if(s.equals("add")){int xin.nextInt();…...
电赛赛题深度解析:从五大类别到实战备赛策略
1. 电赛赛题五大类别全解析 全国大学生电子设计竞赛(简称电赛)作为电子类专业最具影响力的赛事,其赛题设置直接反映了行业技术发展趋势。经过对近十年赛题的统计分析,所有题目可明确划分为五大类别,每类都有独特的考察…...
多LLM查询扩展框架实战指南(非常详细),RAG优化新范式从入门到精通,收藏这一篇就够了!
🎯 一句话总结:本文提出一套完全自动化的领域自适应查询扩展框架,无需人工编写Prompt或选择示例,通过BM25-MonoT5 pipeline构建领域内示例池,再用LLM精化多LLM扩展结果,显著提升检索性能。 📖 为…...
OpCore-Simplify:黑苹果配置的智能革命——从手动调试到自动化生成的转变
OpCore-Simplify:黑苹果配置的智能革命——从手动调试到自动化生成的转变 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 传统黑苹果配置需…...
[技术突破]解决D3D8兼容性困境:d3d8to9的API转换革命
[技术突破]解决D3D8兼容性困境:d3d8to9的API转换革命 【免费下载链接】d3d8to9 A D3D8 pseudo-driver which converts API calls and bytecode shaders to equivalent D3D9 ones. 项目地址: https://gitcode.com/gh_mirrors/d3/d3d8to9 d3d8to9是一款Direct3…...
