当前位置: 首页 > news >正文

进程与线程:02 多进程图像

多进程图像的起源与核心地位

上节课我们开启了对操作系统核心概念——多进程图像的学习,探讨了其产生的原因。操作系统的核心职责之一是管理CPU,CPU作为实现取指执行的硬件自动化部件,只有执行取指操作(即取出并执行程序指令 )才能开始工作。由于执行中的程序与静态程序存在本质差异,我们引入“进程”概念。简单来说,启动一个进程让CPU运行,CPU便开始工作,但为提升CPU工作效率,需多个进程交替执行,这种交替执行的状态就是多进程图像。

上节课已明晰多进程图像的基本形态与成因,今天将深入探究操作系统如何支持多进程图像,主要涵盖两个方面:其一,多进程图像的具体模样,能否以图形呈现,如何观察与捕捉,稍后将通过实例展示操作系统中的多进程图像;其二,操作系统为实现多进程图像需完成的关键任务,我们先简要概述,后续课程详细展开。多进程图像作为操作系统核心,若得到有效支持,操作系统的主体功能便得以实现,后续诸多内容将围绕此核心展开,今天先做宏观铺垫。

多进程图像的直观呈现

接下来,我们认识一下操作系统中多进程图像的具体形态。从直观角度,多进程图像即多个进程同时运行的状态,可用图形简单示意。例如,绘制三条直线分别代表三个进程,每个进程标注唯一ID与对应名称,如下图所示:
在这里插入图片描述

从上层用户视角,系统中存在ID为1、2、3的三个进程,用户可将其与具体应用关联,如ID为1的进程对应PPT程序,ID为2的对应Word程序,ID为3的对应MP3播放器。用户使用计算机的过程,本质就是启动这些进程,这便是多进程图像给用户的直观感受。

在操作系统底层,启动进程后需对其进行管理与记录。操作系统通过创建PCB(进程控制块)结构体实现这一目的,每个PCB记录对应进程的运行状态、执行进度等关键信息。基于这些信息,操作系统能合理有序推进进程,例如MP3播放结束后及时切换到PPT演示。

底层操作系统借助PCB有序推进多个进程,使用户感知到多进程同时运行,计算机得以高效利用,满足用户需求,这便是多进程图像的完整呈现。用户通常关注进程执行效率,若进程运行缓慢或卡顿,将影响使用体验。因此,多进程图像对用户与操作系统至关重要,是操作系统的核心所在。此外,多进程图像贯穿系统启动到关机的整个生命周期,进一步佐证了其核心地位。
在这里插入图片描述

系统启动时,最后执行main.c中的main函数,随后执行fork函数。main函数完成初始化并执行一系列init函数后,通过fork系统调用启动新进程,新进程执行init,最终执行shell(Windows系统中则是启动桌面 )。用户使用计算机时,每输入一条命令,操作系统便创建新进程执行该任务,如执行ls命令就创建对应进程。用户执行任务的过程,本质是操作系统创建进程完成任务,任务结束后,shell继续等待下一个任务,期间可能启动更多进程。计算机解决实际问题依赖进程的启动与执行,进程推进效果直接决定任务执行优劣。

以Windows系统为例,打开任务管理器,可直观看到众多进程,每个进程名称对应启动的程序或任务,如explorer对应浏览器,taskmgr对应任务管理器(任务管理器本身也是一个进程)。在此界面中,能清晰观察到系统中进程的运行状态,它们不断推进、执行,新进程持续创建,部分后台系统服务进程也在运行。当计算机运行缓慢时,通过任务管理器查看CPU利用率高的进程,是排查问题的有效方式,这也体现了多进程图像在操作系统中的核心地位——用户使用计算机本质是多进程协同工作,计算机性能问题常与进程运行状态相关。用户使用计算机时无需关注硬件细节,启动相应进程即可完成任务,结束进程则可停止操作,操作系统通过管理进程实现对计算机使用的控制。

操作系统支持多进程图像的关键任务

进程的组织与状态管理

操作系统对进程的感知与组织完全依赖PCB,通过PCB构建队列等数据结构实现多进程管理。合理组织进程是确保其有序推进、计算机正常运行的基础。不同状态的进程,其PCB存放在不同队列,如就绪队列、等待队列。由于CPU同一时间仅能执行一个进程,其他进程要么在就绪队列等待调度,要么处于等待状态(如等待磁盘读写 )。
在这里插入图片描述

可依据进程状态将其分为运行态、就绪态和等待态(阻塞态),类比食堂打饭场景:正在打饭的人对应运行态进程,排队等待的人对应就绪态进程,因寻找饭卡等原因暂停的人对应等待态进程。通过绘制进程状态转化图,可清晰呈现进程状态变化过程:就绪态进程经操作系统调度变为运行态;运行态进程遇资源等待情况(如找不到饭卡 )转变为阻塞态;阻塞态进程在等待事件完成后,被操作系统放回就绪队列,在合适时机再次进入运行态,实现进程持续推进。
在这里插入图片描述

进程的交替与调度

多个进程交替推进是多进程图像的关键,切换机制则是核心。若无进程切换,多进程图像便失去意义。以进程启动磁盘读写为例,启动后进程需等待磁盘操作完成,此时变为阻塞态,操作系统将其放入阻塞磁盘等待队列。
在这里插入图片描述

进程切换的核心是schedule函数,负责完成上下文切换。切换时,先从就绪队列选择下一个进程,再依据当前进程与下一个进程的PCB进行操作。从就绪队列选择进程的过程称为调度,后续课程将详细讲解调度策略,此处先介绍两种简单方法:一是先来先服务(FIFO)调度,如同食堂排队,先到者先接受服务;二是优先级调度,例如银行中短任务可优先执行。
在这里插入图片描述

进程切换类似看书时被打断,需先保存当前进程执行现场(存入结构体 ),如同记住书看到的位置,再恢复下一个进程状态信息到CPU,完成切换。因需精确控制,此过程通常需使用汇编代码,C代码难以实现。
在这里插入图片描述

进程间的相互影响与处理

多个进程同时存在于内存中,只有内存中的进程可被CPU取指执行,但这会引发一系列问题。例如,进程一代码将ax置为100,该地址可能与进程二内存地址冲突,导致进程二数据被修改甚至崩溃。由于用户态程序中dpi(数据项指针)和cpi(控制项指针)访问无限制,无法通过常规方式解决。
在这里插入图片描述

解决内存冲突的方法是通过映射表实现地址分离,每个进程拥有独立映射表。
在这里插入图片描述

例如,进程一逻辑地址100对应物理内存地址780,进程二逻辑地址100对应物理内存地址1260,即便进程中地址相同,映射到物理内存后也相互独立,实现内存分离,确保多进程安全共存与交替执行。
在这里插入图片描述

此外,多进程间有时需合作,如打印进程。Word程序将打印内容写入打印队列,打印进程再从队列读取内容打印,这便是进程间合作。若缺乏有效管理,多进程交替执行可能引发混乱。例如,进程一和进程二同时发现打印队列第7个位置空闲并写入内容,将导致数据混乱。
在这里插入图片描述

此问题可抽象为生产者 - 消费者问题,生产者进程向共享缓冲区写入内容,消费者进程从中读取。为确保二者有序合作,引入共享变量counter记录缓冲区状态。当缓冲区满(counter等于buffsize )时,生产者进程进入死循环等待;缓冲区未满时,生产者可写入并更新counter。
在这里插入图片描述

多进程交替执行时,counter操作易出现问题。例如,初始counter等于5,生产者执行counter加1,消费者执行counter减1,因进程执行可能被中断切换,可能导致counter实际值与预期不符。
在这里插入图片描述

解决此问题需使用进程同步机制,如生产者操作counter前上锁,确保操作期间不被其他进程中断,操作完成后解锁,此时消费者方可进行操作,实现进程间有序合作。
在这里插入图片描述

本次课程介绍了多进程图像的概念、表现形式,阐述了操作系统通过PCB感知与管理进程的方式,明确其在操作系统中的核心地位,并结合Windows系统任务管理器实例展示。同时,探讨了操作系统支持多进程图像需解决的关键问题,包括进程组织、交替调度、地址分离和同步合作等,这些内容将在后续课程深入讲解。
在这里插入图片描述

相关文章:

进程与线程:02 多进程图像

多进程图像的起源与核心地位 上节课我们开启了对操作系统核心概念——多进程图像的学习,探讨了其产生的原因。操作系统的核心职责之一是管理CPU,CPU作为实现取指执行的硬件自动化部件,只有执行取指操作(即取出并执行程序指令 &am…...

基于SIMMECHANICS的单自由度磁悬浮隔振器PID控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 单自由度磁悬浮减振器工作原理简介 4.2 SIMMECHANICS工具箱 5.完整工程文件 1.课题概述 基于SIMMECHANICS的单自由度磁悬浮隔振器PID控制系统simulink建模与仿真。其中,SIMMECHANICS是M…...

FreeRTOS互斥信号量解决优先级翻转实战教程

FreeRTOS互斥信号量解决优先级翻转实战教程 大家好!今天我们来深入探讨FreeRTOS中的优先级翻转问题,并通过互斥信号量来解决这个问题。上一篇文章我们已经了解了优先级翻转的现象,今天我们将动手实践,通过代码对比来直观感受互斥…...

Spark-SQL 四(实验)

用idea实验hive的常用代码 将数据放到项目的目录下 代码实现 运行结果: 实验 统计有效数据条数及用户数量最多的前二十个地址 将数据放到Spark-SQL/input目录下 代码实现: 运行结果:...

前端技术未来的发展趋势分析

以下是关于前端技术未来发展趋势的深度分析,结合行业动态和技术演进方向,从多个维度展开: 一、核心发展趋势 1. 框架融合与性能极致化 趋势:React/Vue/Solid 等框架在编译时优化(如React Forget编译器)和…...

字节扣子空间开启内测!附免费邀请码!

3月初,当Manus作为首个通用智能体横空出世时,整个科技圈都沸腾了。 当时我就预言过:这种创新产品要真正普及,还得看大厂动作(毕竟创业公司的资源有限啊)。 这不,字节跳动最近就悄悄放出了大招—…...

高并发场景下的淘宝 API 开发实践:商品数据实时采集与性能优化

在电商行业竞争激烈的当下,实时获取海量商品数据成为企业把握市场动态、制定精准策略的关键。然而,高并发场景下对淘宝 API 的调用极易引发性能瓶颈与稳定性问题。本文将围绕高并发场景下淘宝 API 开发,深入讲解商品数据实时采集的技术要点&a…...

如何将Qt程序打包成应用程序?

1、使用release模式,编译项目 2、新建一个文件夹(不要有中文路径),将刚才编译生成的可执行文件(.exe)放入新建的文件夹下。 可执行文件通常生成在项目目录下的构建文件夹中,如 build-项目名-套…...

AI重塑网络安全:机遇与威胁并存的“双刃剑”时代

一、引言 人工智能(AI)技术的迅猛发展,正在深刻改变网络安全行业的格局。从ChatGPT生成钓鱼邮件到AI驱动的漏洞挖掘,从零信任架构的普及到安全大模型的实战应用,AI既是攻击者的“新武器”,也是防御者的“新…...

c++基础·列表初始化

目录 一、列表初始化的核心优势 二、基础数据类型与数组初始化 1. 基础类型初始化 2. 数组初始化 三、类与结构体初始化 1. 构造函数匹配规则 2. 注意事项 四、标准容器初始化 五、聚合类型(Aggregate Types)初始化 1. 聚合类型定义 2. 初始化…...

颠覆传统!毫秒级响应的跨平台文件同步革命,远程访问如本地操作般丝滑

文章目录 前言1. 安装Docker2. Go File使用演示3. 安装cpolar内网穿透4. 配置Go File公网地址5. 配置Go File固定公网地址 前言 在这个信息爆炸的时代,谁不曾遭遇过类似的窘境呢?试想,当你正于办公室中埋首案牍时,手机突然弹出一…...

目标检测中的损失函数(二) | BIoU RIoU α-IoU

BIoU来自发表在2018年CVPR上的文章:《Improving Object Localization With Fitness NMS and Bounded IoU Loss》 论文针对现有目标检测方法只关注“足够好”的定位,而非“最优”的框,提出了一种考虑定位质量的NMS策略和BIoU loss。 这里不赘…...

RS232 串行通信:C++ 实现指南

文章目录 一、RS232 简介1. 电气特性2. 传输速率3. 传输距离 二、在 C 中实现 RS232 通信1. Windows 平台(1)打开串行端口(2)配置串行通信参数(3)发送数据(4)接收数据(5&…...

电控---SWD协议

SWD协议是烧录调试常用的协议,本文对SWD协议进行了,覆盖物理层、协议层、寄存器结构、信号时序、安全特性、实际应用及最新发展趋势的讲解。 一、物理层架构与信号特性 1. 引脚定义与电气规范 核心引脚: SWDIO(双向数据线&…...

Linux系统下docker 安装 redis

docker安装最新版的redis 一、docker拉取最新版redis镜像 拉取镜像若没有指定版本,代表拉取最新版本 二、查询redis镜像 三、挂载配置文件 在docker容器内修改redis配置文件不方便,所以挂载配置文件,这样可以在外边修改redis配置 3.1 创建…...

第 2 篇:初探时间序列 - 可视化与基本概念

第 2 篇:初探时间序列 - 可视化与基本概念 (图片来源: Luke Chesser on Unsplash) 在上一篇《你好,时间序列!》中,我们了解了什么是时间序列数据以及学习它的重要性。现在,是时候卷起袖子,真正开始接触和探…...

适配器模式:化解接口不兼容的桥梁设计

适配器模式:化解接口不兼容的桥梁设计 一、模式核心:让不兼容的接口协同工作 在软件开发中,经常会遇到接口不兼容的情况:如旧系统提供的接口无法被新系统直接调用,或第三方库的接口与当前系统设计不匹配。适配器模式…...

科大讯飞Q1营收46.6亿同比增长27.7%,扣非净利同比增长48.3%

4月21日盘后,AI龙头科大讯飞(002230.SZ)发布2024年报,公司全年实现营业收入233.43亿元,同比增长18.79%,同期归母净利润为5.6亿元。 公司核心赛道业务保持快速增长,消费者、教育、汽车、医疗业务…...

基于大模型的血栓性外痔全流程风险预测与治疗管理研究报告

目录 一、引言 1.1 研究背景与目的 1.2 研究意义 二、血栓性外痔概述 2.1 定义与发病机制 2.2 临床表现与诊断方法 2.3 现有治疗手段综述 三、大模型在血栓性外痔预测中的应用原理 3.1 大模型技术简介 3.2 模型构建与训练数据来源 3.3 模型预测血栓性外痔的工作流程…...

Transformer系列(三):编码器—解码器架构

Transformer架构 一、多头自注意力 (Multi-head self-attention)将矩阵维度从d降到d/k的优点 二、层归一化 (Lary Norm)三、残差连接 (Residual Connections)Add and Norm 四、注意力对数几率缩放 (Attention logit scaling)五、T…...

C++入门小馆: 深入string类(二)

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...

MCU开发学习记录10 - 高级定时器学习与实践(HAL库)—PWM互补输出、死区控制、刹车控制 - STM32CubeMX

本文将介绍高级定时器的概念(只讲解高级定时器特有功能)、相关函数以及STM32CubeMX生成定时器的配置函数以及对生成定时器的配置函数进行分析(包括结构体配置、相关寄存器配置)。针对于高级定时器实践:实现输出PWM互补…...

pytest基础-new

规范 1、首先创建 py 文件命名以 test_ 开始或者以 _test 结尾 2、若是新建类,测试类需要以 Test_开头 3、测试用例(方法)需要以 test_开头 assert 断言 assert xx:判断 xx 为真 assert not xx:判断 xx 不为真 asse…...

利用Qt创建一个模拟问答系统

界面: 添加了聊天显示区域(QTextEdit) 添加了发送按钮和清空对话按钮 优化了布局和窗口大小添加了时间戳显示 2、功能: 支持实时对话可以清空对话历史 支持按回车发送消息 添加了简单的关键词匹配响应系统 交互体验&#x…...

CCF CSP 第37次(2025.03)(1_数值积分_C++)

CCF CSP 第37次(2025.03)(1_数值积分_C) 解题思路:思路一: 代码实现代码实现(思路一): 时间限制: 1.0 秒 空间限制: 512 MiB 原题链接 解题思路…...

使用 Flutter 遇坑小计

前言 首先, 谷哥很贴心地为国内用户准备了一份使用手册 不过很遗憾 就算你照着它的手册来了, 还是会在后续使用中遇到其它的坑 今天我踩了, 保不齐明天就是其他人(lol) running gradle task ‘assembledebug’ stuck 首先去确定下当下Android Studio(或者说你目前的Flutter项…...

C语言中的双链表和单链表详细解释与实现

C语言中的双链表详细解释与实现 双链表(Doubly Linked List)是一种常见的数据结构,它比单链表更灵活,因为每个节点都包含指向前驱和后继节点的指针。 双链表的基本结构 节点定义 c 复制 下载 typedef struct Node {int dat…...

CSS零基础入门笔记:狂神版

前言 本笔记是学习狂神的java教程,建议配合视频,学习体验更佳。 【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 第1-2章:Java零基础入门笔记:(1-2)入门(简介、基础知识)-CSDN博客 第3章&…...

使用python调用deepseek 多轮对话,详细讲解

以下代码实现在python中与deepseek实现多轮对话。 Messages参数是对话历史和上下文的核心载体。 数据结构: • 必须是包含消息对象的数组 • 每个消息对象必须包含: o role:发言者身份(system/user/assistant) o con…...

requestAnimationFrame是什么?【前端】

亲爱的读者,希望今天的你好心情~ 目录 requestAnimationFrame是什么?目的?举个栗子: requestAnimationFrame是什么? requestAnimationFrame 是一种用于优化动画性能的 JavaScript API。它允许你在浏览器的下一次重绘之…...

SQL Server基础

二. SQL Server数据库 1. 数据库简介 数据库本质是写成磁盘文件,在硬盘中存储用处 存储大量数据,方便检索和访问保持数据信息的一致、完整共享和安全通过组合分析,产生新的有用信息 数据库发展史 萌芽阶段:文件系统,…...

Vue-组件的懒加载,按需加载

在Vue项目中实现组件的懒加载(也称为按需加载或代码分割),可以大大提升应用的加载速度和性能。懒加载主要通过Webpack的代码分割功能实现,特别是使用动态导入(import()语法)。 为什么要使用懒加载&#xf…...

Docker 镜像、容器和 Docker Compose的区别

前言:Docker 的镜像、容器和 Docker Compose 是容器化技术的核心组件,以下是对它们的详细解析及使用场景说明。 ​​1、Docker 镜像(Image)​​ ​​定义​​: 镜像是只读模板,包含运行应用程序所需的代码、…...

批量创建同名文件夹并整理文件至对应文件夹

在我们的日常工作和生活中,创建文件几乎是必不可少的一部分。随着时间的推移,电脑中积累了大量的文件,管理这些文件成为一项繁琐且耗时的任务。尤其当我们需要按照一定规则对文件进行整理时,很多人会感到困惑。例如,领…...

每日一题——数据中心网络地址规划

文章目录 数据中心网络地址规划问题描述输入格式输出格式示例输入示例输出实现思路1. IP地址转换2. 区间排序3. 动态规划 C语言完整实现(含详细注释)总结 数据中心网络地址规划 问题描述 你是一名数据中心网络地址规划人员。每个业务需要一段IP地址区间…...

如何远程访问家中服务器-FRP内网穿透详细

💡 本文会带给你 如何远程访问家中服务器FRP自动运行的方法一、准备工作 准备一台具备公网 IP 的服务器(如阿里云、腾讯云等云服务器,要求不高,几十块一年服务的轻型服务就行),用于部署 FRP 服务端(frps)。 家中电脑(内网设备),用于运行 FRP 客户端(frpc)。 下…...

el-select+vue-virtual-scroller解决数据量大卡顿问题

解决el-select中数据量过大时,显示及搜索卡顿问题,及正确的回显默认选中数据 粗略的封装了组件,有需要各种属性自定义的,自己添加设置下 环境 node 16.20.1 npm 8.19.4 vue2、element-ui "vue-virtual-scroller"…...

数码管静态显示一位字符(STC89C52单片机)

#include <reg52.h> sbit ADDR0 P1^0; sbit ADDR1 P1^1; sbit ADDR2 P1^2; sbit ADDR3 P1^3; sbit ENLED P1^4; //用数组来存储数码管的真值表&#xff0c;数组将在下一章详细介绍 unsigned char code LedChar[] { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82…...

明心见性与真如三昧

在佛教禅宗体系中&#xff0c;明心见性与真如三昧是修行者追求的核心目标。明心见性作为修行的起点&#xff0c;揭示了众生的真如本性&#xff1b;而真如三昧则是巩固和深化这一证悟的关键修行方法。二者相辅相成&#xff0c;构成了禅宗修行的完整路径。 一、明心见性&#xf…...

并发设计模式之双缓冲系统

双缓冲的本质是 ​​通过空间换时间​​&#xff0c;通过冗余的缓冲区解决生产者和消费者的速度差异问题&#xff0c;同时提升系统的并发性和稳定性。 双缓冲的核心优势 优势具体表现解耦生产与消费生产者和消费者可以独立工作&#xff0c;无需直接同步。提高并发性生产者和消…...

使用谷歌浏览器自带功能将网页转换为PDF文件

将自己喜欢的技术网页转换为PDF文件有多种方法&#xff0c;这里介绍使用谷歌浏览器自带功能。 &#xff08;本文截图仅作为演示使用&#xff09; 使用谷歌浏览器自带功能 1.用Chrome浏览器&#xff0c;打开需要转换的网页&#xff0c;点击浏览器右上角的三个点&#xff08;菜…...

JavaEE--2.多线程

1.认识线程(Thread) 1.1概念 1)什么是线程 ⼀个线程就是⼀个 "执行流". 每个线程之间都可以按照顺序执行自己的代码. 多个线程之间 "同时" 执行着多份代码. 2)为什么要有线程 首先, "并发编程" 成为 "刚需". 1. 单核 CPU 的发展遇到…...

沐渥氮气柜控制板温湿度氧含量氮气流量四显智控系统

氮气柜控制板通常用于实时监控和调节柜内环境参数&#xff0c;确保存储物品如电子元件、精密仪器、化学品等&#xff0c;处于低氧、干燥的稳定状态。以下是沐渥氮气柜控制板核心参数的详细介绍及控制逻辑&#xff1a; 一、控制板核心参数显示模块 1&#xff09;‌温度显示‌&am…...

线性代数-矩阵的秩

矩阵的秩&#xff08;Rank&#xff09;是线性代数中的一个重要概念&#xff0c;表示矩阵中线性无关的行&#xff08;或列&#xff09;的最大数量。它反映了矩阵所包含的“有效信息”的维度&#xff0c;是矩阵的核心特征之一。 直观理解 行秩与列秩&#xff1a; 行秩&#xff1…...

【自然语言处理与大模型】模型压缩技术之量化

在这篇文章中想和大家分享什么是量化&#xff1f;为什么要量化&#xff1f;以及如何实现量化&#xff1f;通过这三个基本问题&#xff0c;我们不仅可以全面了解量化的内涵和外延&#xff0c;还能更清晰地认识到它在实践中的重要性和应用价值。 一、什么是量化呢&#xff1f; 大…...

OneClicker脚本自动运行工具

工作的时候&#xff0c;有很多琐碎的事情需要重复的做 比如打开某个文件&#xff0c;打开某个网站&#xff0c;打开某个软件 这个时候可以写个自动脚本&#xff0c;把机械琐碎的事情交给脚本处理 但是脚本一多&#xff0c;不好管理&#xff0c;而且要选择哪个脚本也是个麻烦的事…...

Activity之间交互

Backgroud&#xff1a; 想要实现Activity之间的交互&#xff0c;需要用到intent工具 本博客中所有第二Activity均为SecActivity&#xff0c;需要预先进行创建 本博客所使用的开发语言为Kotlin 使用intent调用Activity 显式调用 val intent Intent(this, SecActivity::class.…...

【React】搜索时高亮被搜索选中的文案

文章目录 代码实现 代码实现 函数封装&#xff1a; export function highlightKeyword(input: string, keyword: string | undefined) {if (!keyword || !input || !input.includes(keyword)) return input;const startIndex input.indexOf(keyword);return React.createEle…...

MCP(Minecraft Coder Pack)完全指南:从入门到精通

1. 什么是MCP&#xff1f; Minecraft Coder Pack&#xff08;简称MCP&#xff09;是一套用于反编译、修改和重新编译Minecraft Java版源代码的工具集。它允许开发者深入研究Minecraft的底层代码&#xff0c;并在此基础上进行模组&#xff08;Mod&#xff09;开发、代码分析或自…...

stm32week12

stm32学习 九.stm32与HAL库 2.HAL库框架 总架构&#xff1a; 文件介绍&#xff1a; ppp是某一外设&#xff0c;ex是拓展功能 HAL库API函数和变量命名规则&#xff1a; HAL库对寄存器位操作的相关宏定义&#xff1a; HAL库的回调函数&#xff1a; 3.STM32启动过程 MDK编译过…...