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

计算机组成原理(五):程序装载

在计算机组成原理中,程序装载(Program Loading)是指将程序从外存(如磁盘)加载到内存中,并为其运行做好准备的过程。程序装载是实现程序从静态存储状态到动态运行状态的关键环节,涉及地址映射、内存分配和链接等技术。

程序装载

概念

程序装载的目的是将存储在外存上的程序(目标代码)搬移到内存中,分配资源并确保它能在处理器上执行。
装载过程主要包括:

  1. 读取程序目标代码(从外存载入)。
  2. 地址映射(将逻辑地址映射为物理地址)。
  3. 链接外部模块或库(静态或动态)。
  4. 初始化运行环境(如栈和堆的分配)。

分类

根据程序装载时的实现方式,装载可以分为以下几种类型:

绝对装载

  • 定义:
    程序目标代码使用绝对地址,装载时直接按照目标代码中的地址将程序放置到内存的固定位置。
  • 特点:
    • 编译时就确定了程序的物理地址。
    • 程序只能在特定地址运行。
  • 优点:
    • 简单直接,装载速度快。
  • 缺点:
    • 缺乏灵活性,程序位置固定。
    • 程序间容易产生地址冲突,难以在多道程序环境中使用。

可重定位装载

  • 定义:
    程序目标代码使用相对地址(例如段内偏移地址)。装载时,操作系统将程序的起始地址与相对地址结合,计算出程序的实际运行地址。
  • 特点:
    • 程序可以装载到内存的任意位置运行。
    • 装载器通过修改目标代码中的相对地址或利用硬件寄存器实现重定位。
  • 优点:
    • 灵活性高,适用于多道程序环境。
  • 缺点:
    • 装载时需要地址计算,开销较高。

动态运行时装载

  • 定义:
    程序目标代码在运行时根据需要动态加载到内存中。这种装载方式通常用于支持动态链接库或分段式程序。
  • 特点:
    • 程序运行期间按需加载未使用的模块或数据。
    • 提供更高的内存利用率和运行效率。
  • 优点:
    • 节省内存资源。
    • 支持动态链接,便于程序更新与模块复用。
  • 缺点:
    • 增加运行时的复杂性和开销。
    • 可能导致额外的运行时延迟。

程序装载与地址空间

逻辑地址和物理地址

  1. 逻辑地址(Logical Address):
    • 程序编译或运行时产生的地址,通常以程序的起始位置为基准(相对地址)。
  2. 物理地址(Physical Address):
    • 内存中实际的硬件地址,用于访问物理存储单元。
  3. 地址映射:
    • 绝对装载: 逻辑地址 = 物理地址。
    • 可重定位装载: 逻辑地址 + 重定位基址 = 物理地址。
    • 动态装载: 由操作系统或硬件在运行时完成地址映射。

虚拟内存的支持

程序装载与虚拟内存技术结合后,可以实现:

  • 按需分页: 仅在程序运行时加载实际用到的内存页。
  • 地址转换: 利用页表或段表将虚拟地址映射到物理地址。
  • 内存保护: 不同程序的虚拟地址空间相互隔离。

程序装载与链接

静态链接

  • 在编译阶段,将所有引用的库和模块链接到目标代码中。
  • 装载时不需要额外链接操作,直接运行。
  • 优点:
    • 装载速度快。
    • 运行时无需依赖外部库,适合独立运行的程序。
  • 缺点:
    • 程序体积大,浪费内存。
    • 库函数版本更新后需重新编译。

动态链接

  • 在程序运行时加载所需的库和模块,按需解析外部符号。
  • 常用于操作系统提供的共享库(如 .so 文件或 .dll 文件)。
  • 优点:
    • 减少程序的体积和内存占用。
    • 方便模块复用和库函数的更新。
  • 缺点:
    • 运行时需要额外处理,增加复杂性。
    • 依赖动态链接器支持。

程序装载与操作系统的关系

操作系统在程序装载过程中起到了关键作用:

  1. 内存管理:
    • 提供内存分配与地址重定位机制(分段、分页、虚拟内存等)。
  2. 装载器的实现:
    • 引导装载器(Bootstrap Loader): 负责加载操作系统核心程序。
    • 用户程序装载器: 管理用户程序的加载和初始化。
  3. 资源分配:
    • 分配运行所需的内存、CPU、I/O设备等资源。
  4. 多道程序环境支持:
    • 确保多个程序能同时装载和运行,防止资源冲突。

程序装载的优化技术

延迟加载(Lazy Loading)

  • 仅在程序实际使用某模块时才加载对应代码或数据。

按需分页

  • 结合分页技术,只有当前访问的页被加载到内存,未使用部分保持在外存中。

预取与缓存

  • 装载时预测程序下一步可能访问的内存区域,提前加载以减少延迟。

内存分段

内存分段(Segmentation)是一种从逻辑结构出发的内存管理技术,将内存划分为若干大小不等的逻辑段,每个段对应一个完整的逻辑单元(如代码段、数据段、栈段等)。

概念

段(Segment):

  • 一个段是一个逻辑单元,如一个函数、数组或全局变量。
  • 每个段有自己的长度和起始地址。

逻辑地址(段式地址):

  • 段号段内偏移组成,表示地址在某段中的相对位置。

段表(Segment Table):

  • 保存每个段的基址(Base Address)和段长(Limit)。
  • 系统通过段表将逻辑地址映射为物理地址。

内存分段的地址转换

地址转换的步骤如下:

  1. 根据逻辑地址中的段号查段表,找到该段的基址。
  2. 将段内偏移加上基址,得到物理地址。
  3. 如果段内偏移超出段长,产生段越界错误。

公式:

物理地址=段基址+段内偏移

特点

优点:

  • 符合程序的逻辑结构,便于模块化编程和共享。
  • 每个段可以独立管理和保护,增强安全性。
  • 段可动态增长或缩小(适合堆、栈结构)。

缺点:

  • 容易产生外部碎片,即不同段之间无法充分利用的小块空闲内存。
  • 硬件实现复杂,需要支持段表和段号管理。

内存分页

内存分页(Paging)是一种从物理实现出发的内存管理技术,将内存和程序分为大小固定的块(页),以提高内存利用率,解决碎片问题。

概念

页(Page):

  • 程序的逻辑内存按照固定大小分成若干页(通常为4KB)。

页框(Frame):

  • 物理内存被划分为与页大小相同的页框。

页表(Page Table):

  • 保存页号到页框号的映射关系。

逻辑地址(分页地址):

  • 页号页内偏移组成,页号用于查页表,页内偏移用于定位页内具体地址。

内存分页的地址转换

地址转换的步骤如下:

  1. 根据逻辑地址中的页号查页表,找到对应的物理页框号。
  2. 将页内偏移加上物理页框基址,得到物理地址。

公式:

物理地址=页框基址+页内偏移

特点

优点:

  • 消除了外部碎片,页与页框大小固定,分配更高效。
  • 实现虚拟内存机制,支持按需分页和内存交换技术。
  • 程序逻辑地址是连续的,物理地址可分散,提高内存利用率。

缺点:

  • 可能产生内部碎片,即页中未使用的部分浪费内存。
  • 地址转换需要额外的硬件支持(如页表和TLB)。
  • 页表可能占用大量内存,尤其在大地址空间中。

分页与分段的对比

特性内存分段内存分页
基本单位段:逻辑单元,大小可变页:固定大小,通常为4KB或8KB
管理视角从逻辑结构出发(程序员视角)从物理内存出发(操作系统视角)
地址组成段号 + 段内偏移页号 + 页内偏移
地址映射段表(基址 + 段内偏移)页表(页号 + 页内偏移)
碎片问题存在外部碎片,无内部碎片无外部碎片,但可能产生内部碎片
优点符合逻辑单元划分,便于模块化设计内存利用率高,支持虚拟内存和按需加载
缺点外部碎片问题严重,需要硬件段表支持页表存储开销大,需要额外硬件支持
灵活性动态调整较灵活(段可扩展)页固定大小,不适合动态扩展

参考:

虚拟内存、内存分段和内存分页: https://blog.csdn.net/www_dong/article/details/115984208

段页式内存管理和linux内存管理:https://blog.csdn.net/www_dong/article/details/116032029

《程序员的自我修养——链接、装载和库》

相关文章:

计算机组成原理(五):程序装载

在计算机组成原理中,程序装载(Program Loading)是指将程序从外存(如磁盘)加载到内存中,并为其运行做好准备的过程。程序装载是实现程序从静态存储状态到动态运行状态的关键环节,涉及地址映射、内…...

开发EDA工具常用的三方开源

EDA软件是制造芯片重要工具,是现在举国的大难题。这个工具难在哪里,几句话说不清,但它确实也有一些非常通用的功能,这些功能依赖一些成熟的轮子,这些轮子,就是三方的开源项目,下面列举一些常用的…...

微信小程序中 crypto-js 加解密全攻略

一、引言 在微信小程序开发中,数据的安全至关重要。加解密技术在保护用户数据和应用程序的安全性方面起着关键作用。小程序在与服务器进行数据交互时,面临着数据泄露、篡改等安全风险。为了确保用户信息的安全,选择合适的加解密算法变得尤为…...

Vue2 - 最新实现将多个文件批量导出为ZIP压缩包格式并下载功能,纯前端下载多个文件打包输出成zip格式,vue2将文件批量下载打包成ZIP下载保存本地(后端二进制文件流/base64图片/url

前言 Vue3 版本,请访问 这篇文章。 在 vue2 | nuxt2 项目开发中,详解实现把多个文件组合成一个ZIP压缩包格式下载到用户本地,将文件批量下载打包成zip格式并自定义压缩包命名名称,vue批量下载文件并导出为压缩包的功能,如何将后端返回的二进制文件流打包成zip格式,支持任…...

The Rise and Potential of Large Language ModelBased Agents:A Survey---摘要、背景、引言

题目 基于大语言模型的Agent的兴起与发展前景 论文地址:https://arxiv.org/pdf/2309.07864.pdf 项目地址:https:/github.com/WooooDyy./LLM-Agent–Paper-List 摘要 长期以来,人类一直在追求等同于或超越人类水平的人工智能(A),…...

【unity】从零开始制作平台跳跃游戏--界面的认识,添加第一个角色!

在上一篇文章中,我们已经完成了unity的环境配置与安装⬇️ 【Unity】环境配置与安装-CSDN博客 接下来,让我们开始新建一个项目吧! 新建项目 首先进入unityHub的项目页面,点击“新项目”: 我们这个系列将会以2D平台…...

Java中的Stream

1. 什么是 Stream? Stream 是 Java 8 引入的一种新方式,目的是帮助我们更简洁、更高效地处理集合(如 List、Set、Map 等)。你可以把 Stream 想象成一条“流水线”,数据就像是流水线上的原材料,经过流水线的…...

ARM学习(36)静态扫描规则学习以及工具使用

笔者来学习了解一下静态扫描以及其规则,并且亲身是实践一下对arm 架构的代码进行扫描。 1、静态扫描认识 静态扫描:对代码源文件按照一定的规则进行扫描,来发现一些潜在的问题或者风险,因为不涉及代码运行,所以其一般只是发现一些规范或则一些质量问题,当然这些可能存在潜…...

前端将base64转pdf页面预览

前端将base64转pdf页面预览 <embed :src"pdfList" width"100%" height"100%" type"application/pdf" />pdfList.value data:application/pdf;base64,${res}//后端传jpg或pdf格式可直接 :src“返回内容”显示...

Java-26 深入浅出 Spring - 实现简易Ioc-02 无IoC与AOP场景下实现业务

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…...

能不能用一句话或者简洁地凝练深度学习的本质和精髓?

深度学习就是学习输入与输出之间的映射关系。 深度学习模型本质上只是个参数量很大的函数&#xff0c;其中函数的参数可以通过训练样本进行调整。 根据训练样本的不同&#xff0c;进一步可以分为以下几类&#xff1a; 一、给定输入以及对应的输出&#xff0c;其中输出是唯一的…...

我的宝贵经验

在技术的浩瀚海洋中&#xff0c;一份优秀的技术文档宛如精准的航海图。它是知识传承的载体&#xff0c;是团队协作的桥梁&#xff0c;更是产品成功的幕后英雄。然而&#xff0c;打造这样一份出色的技术文档并非易事。你是否在为如何清晰阐释复杂技术而苦恼&#xff1f;是否纠结…...

发现一个对话框中的按钮,全部失效,点击都没有任何反应,已经解决

前端问题&#xff0c;技术vue2&#xff0c;ts。 发现一个对话框中的按钮&#xff0c;全部失效&#xff0c;点击都没有任何反应。 因为我只在template标签中加入下面这个代码&#xff0c;并没有注册。 只要有一个子组件没有注册&#xff0c;就会影响所有的按钮&#xff0c;使当前…...

深度学习中损失函数(loss function)介绍

深度学习中损失函数(loss function)介绍 ​ 在深度学习的宏伟城堡中&#xff0c;损失函数扮演着国王的角色&#xff0c;它决定了模型训练的方向和目标。损失函数&#xff0c;也被称为代价函数&#xff0c;是衡量模型预测与实际结果之间差异的函数。在深度学习的训练过程中&…...

【渗透测试】信息收集二

其他信息收集 在渗透测试中&#xff0c;历史漏洞信息收集是一项重要的工作&#xff0c;以下是相关介绍&#xff1a; 历史漏洞信息收集的重要性 提高效率&#xff1a;通过收集目标系统或应用程序的历史漏洞信息&#xff0c;可以快速定位可能存在的安全问题&#xff0c;避免重复…...

前端三大框架 Vue、React 和 Angular 的市场占比分析

一、引言 ?? 随着前端技术的迅速发展&#xff0c;Vue.js、React 和 Angular 已成为全球最受欢迎的三大前端框架。在国内外&#xff0c;不同的框架在市场中的占比和流行程度存在显著差异。本文将从全球和中国市场的角度&#xff0c;对这三大框架的市场占比进行分析&#xff0…...

Gitlab服务管理和仓库项目权限管理

Gitlab服务管理 gitlab-ctl start # 启动所有 gitlab 组件&#xff1b; gitlab-ctl stop # 停止所有 gitlab 组件&#xff1b; gitlab-ctl restart # 重启所有 gitlab 组件&#xff1b; gitlab-ctl status …...

MySQL ON DUPLICATE KEY UPDATE影响行数

目录 分析为什么Updates返回7 总结 数据库更新日志如下 insertOrUpdateList|> Preparing: INSERT INTO clue_user_tag (vuid, tag_id, tag_type, content) VALUES (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) ON DUPLICATE KEY UPDATE …...

美团2024年秋招第一场笔试【前端移动端】

美团2024年秋招第一场笔试【前端&移动端】 2024/12/12 1.在一个长度为28的数组中删除第5个元素时&#xff08;元素序号&#xff1a;1~28&#xff09;&#xff0c;需要向前移动&#xff08;23&#xff09;个元素。 2.如下图一个树型结构&#xff0c;其结点E在树的中序遍历…...

【EXCEL】 获取多列中 不为空的那一个数据

从多个表格筛选出来的上班时间是下表这样的 我要把他们放在同一列&#xff0c;这样方便后续处理&#xff0c;合并列输入下面这个公式即可 日期不加 TEXT&#xff08;&#xff09; 函数 转日期格式&#xff1b;将得到是一串数字 TEXT(TEXTJOIN(", ",TRUE,B2:F2),&qu…...

Qt 开发笔记2

1> 样式表加载 一定要在Ui 初始化之前调用&#xff0c; 之后调用会不生效。 2> 设置QlineEdit输入框 具体四周的间距&#xff1a; setTextMargins(m_nLeftTextMargin, m_nTopTextMargin, m_nRightTextMargin, m_nBottomTextMargin);3> 设置背景图&#xff08;平滑不…...

R学习——数据框

目录 1数据框的合并 2数据框的访问 2.1 通过索引[] 2.2符号$访问 2.3 attach访问 2.4 with访问 1数据框的合并 当每个内容存储为单独的向量&#xff0c;data.frame可以进行这些内容单独数据框合并。 2数据框的访问 2.1 通过索引[] [i]输出对应的列 [i,]输出对应的行 …...

深入详解人工智能机器学习常见算法中的K-means聚类

目录 引言 1. K-means聚类的基本概念 1.1 K-means聚类的定义 1.2 K-means聚类的核心思想 1.3 K-means聚类的目标函数 2. K-means聚类的核心原理 2.1 初始化 2.2 分配 2.3 更新 2.4 迭代 3. K-means聚类的具体实现 3.1 K-means聚类的算法流程 3.2 K-means聚类的Pyt…...

TDengine SpringBoot操作

TDengine与Spring Boot的结合可以为开发者提供一个高性能、分布式的物联网、工业大数据处理平台&#xff0c;同时利用Spring Boot的简化配置和快速开发特性。以下是对TDengine与Spring Boot集成的详细解析&#xff1a; 一、TDengine简介 TDengine是由涛思数据开发的一款高性能…...

【sgFileLink】自定义组件:基于el-link、el-icon标签构建文件超链接组件,支持垃圾桶删除、点击预览视频/音频/图片/PDF格式文件

sgFileLink源代码 <template><div :class"$options.name"><el-link click.stop"clickFile(data)"><img :src"getSrc(data)" /><span>{{ getFileNameAndSize(data) }}</span></el-link><el-linkcl…...

C语言实验 函数一

时间:2024.12.14 6-1 弹球距离 double dist (double h,double p) {double sum = h,height;height = h*p;while(height>=TOL){sum += height * 2; //上行下行都算,所以是两倍的距离。height *=p;}return sum; } 6-2 使用函数输出一个整数的逆序数 错误代码:运行超…...

惠普Laser Jet MFP M437nda复印机成像装置严重不足及更换传输卷故障解决方法

惠普Laser Jet MFP M437nda复印机成像装置严重不足及更换传输卷故障解决方法,记录维修那点事儿,普通维修工的日常维修点滴; 惠普Laser Jet MFP M437nda复印机成像装置严重不足维修方法 如果复印及打印的效果没有问题的情况下我们也可以不更换套鼓及显影剂,那么不更换套鼓及…...

委托(Delegate)和事件(Event)-(下篇)

​​​​​​​委托(Delegate)与事件(Event)-&#xff08;上篇&#xff09;-CSDN博客 上一篇内容&#xff01; 一、创建非静态委托 在C#中&#xff0c;使用非静态委托意味着将委托绑定到类的实例方法上&#xff0c;而不是静态方法。这允许你通过委托调用特定对象上的方法&am…...

ios 开发配置蓝牙

如果使用了蓝牙功能, 又没有配置, 会出现以下错误: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The apps Info.plist must contain an NSBluetoothAlwaysUsageDescription key with a string value explaini…...

JVM 栈帧结构详解

在 Java 虚拟机&#xff08;JVM&#xff09;中&#xff0c;栈帧&#xff08;Stack Frame&#xff09;是用于支持方法调用和方法执行的关键数据结构。每个方法从调用开始到执行完成&#xff0c;都对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。本文将详细介绍 JVM 栈帧的结构及…...

HTML和JavaScript实现商品购物系统

下面是一个更全面的商品购物系统示例&#xff0c;包含新增商品、商品的增加删除以及结算找零的功能。这个系统使用HTML和JavaScript实现。 1.功能说明&#xff1a; 这个应用程序使用纯HTML和JavaScript实现。 包含一个商品列表和一个购物车区域。商品列表中有几个示例商品&a…...

(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验三----学校选址与路径规划(超超超详细!!!)

目录 实验三 学校选址与道路规划 3.1 实验内容及目的 3.1.1 实验内容 3.1.2 实验目的 3.2 实验方案 3.3 操作流程 3.3.1 环境设置 3.3.2 地势分析 &#xff08;1&#xff09;提取坡度: (2)重分类: 3.3.3 学校点分析 (1)欧氏距离: (2)重分类: 3.3.4 娱乐场所点分析 (1)欧氏距离…...

ip_done

文章目录 路由结论 IP分片 数据链路层重谈Mac地址MAC帧报头局域网的通信原理MSS&#xff0c;以及MAC帧对上层的影响ARP协议 1.公司是不是这样呢? 类似的要给运营商交钱&#xff0c;构建公司的子网&#xff0c;具有公司级别的入口路由器 2&#xff0e;为什么要这样呢?? IP地…...

Mysql体系架构剖析——岁月云实战笔记

1 体系架构 理论内容阅读了mysql体系架构剖析&#xff0c;其他的根据岁月云的实战进行记录。 1.1 连接层 mysql最上层为连接服务&#xff0c;引入线程池&#xff0c;允许多台客户端连接&#xff0c;主要工作&#xff1a;连接处理、授权认证、安全防护、管理连接等。 连接处理&a…...

【卷积神经网络】AlexNet实践

构建模型 模版搭建 # 定义一个AlexNet模型类def __init__(self):# 调用父类的构造函数&#xff08;如果继承自nn.Module的话&#xff09;super(AlexNet, self).__init__()# ReLU激活函数self.ReLU nn.ReLU()# 卷积层1&#xff1a;输入1个通道&#xff08;灰度图&#xff09;&a…...

LF CRLF

这个提示的含义是&#xff1a;Git 检测到你当前的 file3.txt 文件中使用了 LF&#xff08;换行符&#xff0c;Line Feed&#xff0c;\n&#xff09; 作为换行符&#xff0c;但在你系统的 Git 配置中&#xff0c;指定要将其转换为 CRLF&#xff08;回车换行&#xff0c;Carriage…...

Python学习(二)—— 基础语法(上)

目录 一&#xff0c;表达式和常量和变量 1.1 表达式 1.2 变量 1.3 动态类型特性 1.4 输入 二&#xff0c;运算符 2.1 算术运算符 2.2 关系运算符 2.3 逻辑运算符 2.4 赋值运算符 2.5 练习 三&#xff0c;语句 3.1 条件语句 3.2 while循环 3.3 for循环 四&#…...

科研绘图系列:R语言绘制网络图和密度分布图(network density plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载图1图2图3图4图5图6图7图8系统信息参考介绍 R语言绘制网络图和密度分布图(network & density plot) 加载R包 library(magrittr) library(dplyr) library(…...

python解题之寻找最大的葫芦

问题描述 问题描述 在一场经典的德州扑克游戏中&#xff0c;有一种牌型叫做“葫芦”。“葫芦”由五张牌组成&#xff0c;其中包括三张相同牌面值的牌 &#xfffd;a 和另外两张相同牌面值的牌 &#xfffd;b。如果两个人同时拥有“葫芦”&#xff0c;我们会优先比较牌 &#…...

openwrt安装tailscale

1. 下载 进入tailscale的github仓库复制最新版本的链接&#xff1a;点击跳转 wget https://github.com/adyanth/openwrt-tailscale-enabler/releases/download/v1.36.1-fb2f6cf-autoupdate/openwrt-tailscale-enabler-v1.36.1-fb2f6cf-autoupdate.tgz2.解压缩 tar x -zvC / …...

基于物联网的智能插座云平台 WIFI云平台MQTT协议

功能介绍 功能描述&#xff1a; STM32单片机为控制核心 LCD1602液晶显示当前时间温度 开启时间 关闭时间 按键设置开启时间/关闭时间&#xff0c;温度报警上限 到开启时间&#xff0c;继电器自动打开&#xff0c;到关闭时间&#xff0c;自动关闭 通过DS18B20温度传感器获…...

MySQL 事务

概念介绍 事务就是一组DML语句组成&#xff0c;这些语句在逻辑上存在相关性&#xff0c;这一组 DML 语句要么全部成功&#xff0c;要么全部失败&#xff0c;是一个整体。MySQL 提供一种机制&#xff0c;保证我们达到这样的效果。 事务就是要做的或所做的事情&#xff0c;主要用…...

消息中间件面试题-参考回答

消息中间件面试题-参考回答 面试官&#xff1a;RabbitMQ-如何保证消息不丢失 候选人&#xff1a; 嗯&#xff01;我们当时MYSQL和Redis的数据双写一致性就是采用RabbitMQ实现同步的&#xff0c;这里面就要求了消息的高可用性&#xff0c;我们要保证消息的不丢失。主要从三个层面…...

解决 MyBatis 中空字符串与数字比较引发的条件判断错误

问题复现 假设你在 MyBatis 的 XML 配置中使用了如下代码&#xff1a; <if test"isCollect ! null"><choose><when test"isCollect 1">AND exists(select 1 from file_table imgfile2 where task.IMAGE_SEQimgfile2.IMAGE_SEQ and im…...

【ETCD】【源码阅读】深入解析 etcd 的 `EtcdServer.Start` 函数

深入解析 etcd 的 EtcdServer.Start 函数 在 etcd 的代码中&#xff0c;EtcdServer.Start 是一个关键方法&#xff0c;用于初始化并启动服务器以便处理请求。本文将从源码的角度逐步分析此函数的每一步操作。 函数签名及注释 // Start performs any initialization of the Se…...

嵌入式驱动开发详解16(音频驱动开发)

文章目录 前言WM8960简介I2S协议接口说明 SAI音频接口简介驱动框架简介设备树配置内核使能声卡设置与测试 后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发&#xff0c;但是由于ALSA驱动框架过于复杂&#xff0c;实现音频编解码芯片的驱动不是一个人能完成的&#xf…...

【数据结构——查找】二分查找(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现二分查找的算法。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.根据键盘输入的一组有序数据建立顺序表&#xff0c;2.顺序表的输…...

探索云原生数据库 PolarDB

引言 在云计算时代,数据库的重要性不言而喻。随着企业数字化转型的加速,对数据库的性能、可靠性和灵活性的要求也越来越高。阿里云推出的云原生数据库 PolarDB,正是为了满足这些需求而设计的一款高性能、兼容性强、弹性灵活的关系型数据库产品。本文将详细介绍 PolarDB 的特…...

OGG FOR MYSQL同步DDL

以下实验测试OGG FOR mysql 同步DDL&#xff0c; OGG 21.3 MYSQL 8.0.27 --创建测试数据 create table oggddl_20241201 (oid int primary key ,oname varchar(10)); create table oggddl_20241202 (oid int primary key ,oname varchar(10)); create table oggddl_20241203…...

【CAN】asc报文格式文件合并(python版)

目录 一、简介二、合并asc格式报文1、准备多个asc文件2、根据时间合并asc文件3、结果 三、总结四、参考 一、简介 CAN通信&#xff1a;CAN&#xff08;Controller Area Network&#xff09;是一种多主方式的串行通讯总线。基本设计规范要求有高位速率、高抗电磁干扰性&#xf…...