- 博客(130)
- 资源 (1)
- 收藏
- 关注
原创 【嵌入式】环形缓冲区缓和读写速度差的原因分析
环形缓冲队列的核心价值是,而非彻底解决“写速长期大于读速”的问题。即使写速持续超过读速,环形队列的设计仍能比双Buffer更合理地应对数据流转,其优势体现在对“速度差时间窗口”的包容能力上。
2025-10-19 19:09:11
940
原创 【操作系统】线程切换
保存当前线程的寄存器、栈指针等上下文到内核栈;调度器从就绪队列选择下一个线程;若跨进程,切换地址空间(更新页表);恢复目标线程的上下文,使其在CPU上继续执行。同一进程内的线程切换因无需切换地址空间,开销远小于进程切换,这也是多线程适合高频并发场景的重要原因。
2025-10-11 01:05:36
511
原创 【操作系统】多线程
多线程的核心价值是通过并发执行充分利用系统资源对计算密集型任务,利用多核 CPU 并行计算,缩短总耗时;对 I/O 密集型任务,在等待时让出 CPU,让其他线程继续工作,提升整体效率;相比多进程,线程更轻量,适合高频并发场景,且共享资源使通信更高效。当然,多线程也引入了同步(如锁、信号量)和调试的复杂性,但在现代多核系统中,其带来的性能提升远超过这些成本,因此成为处理并发任务的主流方式。
2025-10-05 23:39:05
1082
原创 【操作系统】线程比进程更轻量化的原因分析
线程的轻量性源于资源共享减少了“复制-切换-回收”的全生命周期成本创建时:无需复制地址空间、文件描述符等重型资源,仅初始化私有数据。切换时:无需切换地址空间和TLB,仅处理少量私有状态。销毁时:仅释放私有资源,共享资源延迟到进程结束时统一回收。这种设计使线程更适合频繁创建销毁、需要高效协作的场景(如并发处理请求),而进程因资源隔离性更适合独立运行的任务(如不同应用程序)。
2025-10-03 16:09:44
869
原创 【操作系统】线程vs进程 linux内核
进程(Process)进程是操作系统资源分配的基本单位,拥有独立的地址空间、文件描述符、信号处理等资源。进程之间相互隔离,通过进程间通信(IPC)机制(如管道、共享内存)交互。线程(Thread)线程是进程内的执行单元,是 CPU 调度的基本单位。同一进程内的线程共享进程的地址空间和资源(如内存、文件描述符),但拥有独立的栈和寄存器状态。进程:通过fork()创建,中的mm(内存描述符)独立,资源隔离。线程:通过clone()并设置共享标志创建,mm与父进程共享,资源共享,切换开销小。
2025-10-03 16:06:45
478
原创 【操作系统】中断vs异常
中断让CPU能高效响应外部设备(如键盘、网络),避免资源浪费;异常让程序在出错时得到处理(如内存不足时的页加载),或实现特殊功能(如系统调用、调试)。中断的 “异步” 和异常的 “同步” 本质上由触发源与 CPU 执行流程的关系决定:前者与当前执行的指令无关,时间不可预测;后者由当前执行的指令直接引发,位置可确定二者共同保证了计算机系统的高效性、稳定性和灵活性。
2025-10-03 00:46:17
1134
原创 【操作系统】外存到cpu数据流动路径
方向固定:数据始终从“低速大容量存储”(磁盘)向“高速小容量存储”(内存→L3→L2→L1)流动,最终进入 CPU 核心;按需加载:不是所有数据都会加载到所有层级,只加载“CPU 近期可能用到的数据”(计算机通过“局部性原理”预测,如“最近用过的数据大概率还会用”“相邻的数据大概率会一起用”);反向写回:运算结果会从 CPU 核心按“L1→L2→L3→内存→磁盘”的反向路径保存,确保数据不丢失。
2025-10-02 22:36:13
1084
原创 【操作系统】cpu执行程序流程
CPU 执行程序的本质CPU 是通过 “取指→解码→执行→写回” 的循环,逐条执行内存中的指令,完成程序的逻辑。操作系统通过调度算法实现多任务切换,让 CPU 在不同任务间高效切换;中断机制则让 CPU 能及时响应外部事件(如 IO 完成)。整个过程是硬件(CPU、内存、总线)与软件(操作系统、程序指令)协同工作的结果。
2025-10-02 22:24:46
870
原创 CPU 使用率 vs Load 平均值(负载平均值)
CPU 使用率 CPU 非空闲时间占比 CPU 本身的繁忙程度 计算密集型任务(如视频渲染)导致使用率飙升Load 平均值 等待处理的任务数量(含运行中) 系统整体任务排队压力 IO 密集型任务(如大量磁盘读写)导致负载升高例如:一个程序频繁读写磁盘(IO 密集型),可能 CPU 使用率很低(大部分时间等待 IO),但 Load 平均值很高(任务排队等待 IO 完成)。
2025-10-02 17:18:22
1259
原创 【操作系统】物理/逻辑/虚拟/线性地址
物理地址 内存硬件的真实地址 最终被 CPU 用于访问内存 内核直接操作物理内存时逻辑地址 程序编译生成的 “段:偏移” 地址 逻辑地址 →(分段)→ 线性地址 早期分段系统或 x86 兼容模式线性地址 分段转换后的中间地址 线性地址 →(分页)→ 物理地址 x86 架构的地址转换中间层虚拟地址 程序运行时的抽象地址空间 虚拟地址 →(分页)→ 物理地址(可能经分段) 现代虚拟内存系统(如 Linux)
2025-10-02 16:44:35
1052
原创 单缓冲、双缓冲、多缓冲与缓冲池详解
在计算机系统中,缓冲技术用于优化数据交换效率,减少等待时间。以下是四种常见缓冲策略的核心原理、应用场景及对比分析。:通过空间(内存)换时间(性能),平衡效率与资源消耗。
2025-04-08 22:31:48
1579
原创 【git】git pull 和 git rebase
选择哪种方式取决于你是否需要保留合并历史,以及是否在团队协作环境中工作。• 变基会重写历史,如果其他人基于你的旧提交工作,会导致混乱。(Merge Commit),历史记录会保留分支结构。都是 Git 中用于同步代码的命令,但它们的。当你想要更精细地控制变基过程(如交互式变基。= 重写本地提交历史(适合私有分支整理)(合并方式):一次性解决所有冲突。:可能需要对每个提交单独解决冲突。不会生成合并提交,历史记录是。如果远程有更新,会生成一个。= 拉取远程代码 += 拉取远程代码 +(推荐用于个人分支同步)
2025-04-02 11:18:58
1525
原创 【操作系统】Linux进程管理和调试
在 Linux 中,可以通过以下方法查看。• 显示该进程打开的所有文件、网络连接等。• 支持鼠标操作,直接搜索 PID。:完整的命令行(包括参数):进程名称(短格式)
2025-04-01 22:19:26
890
原创 【操作系统】Linux&RT-Thread查看内存分布的方法
功能LinuxRT-Thread查看物理内存分布list_mem查看进程内存映射不支持(无进程概念)查看SLAB分配不支持(通常不使用SLAB)实时监控内存池信息无直接对应list_mempRT-Thread的内存查看功能相对简单,主要针对嵌入式系统的需求设计,而Linux提供了更全面的内存信息查看工具。加油💪。
2025-04-01 01:25:24
983
原创 【操作系统】内存泄漏 vs 内存碎片
内存泄漏→未释放内存→ 用工具检测,确保释放。内存碎片→分配失败→ 用内存池或优化分配策略。关键:合理管理内存,结合工具分析,避免长期运行问题!
2025-03-30 22:23:06
1177
原创 【操作系统】内存管理: Buddy算法与Slab算法详解
是两种经典的内存管理策略,分别适用于不同场景。内存管理是操作系统核心功能之一,直接影响系统性能和稳定性。理解这两种算法,有助于优化。
2025-03-30 22:21:31
1329
原创 【Linux】ELF、BIN、PBP、MAP文件查看
文件类型查看工具常用命令示例ELFreadelfobjdumpnmBINhexdumpobjdumpPBPpsp-unpackreadelfMAPcatlessgrep在Linux中,可以使用输出重定向或>>)将命令的结果保存到test.txt文件。文件类型命令示例(输出到test.txtELFBINPBPMAP。
2025-03-30 21:48:46
1113
原创 【操作系统】软中断vs硬中断
(如键盘、网卡、磁盘)触发,通知 CPU 有紧急事件需要处理。(如系统调用、异常处理),用于请求内核服务或处理异常。是 CPU 响应外部事件的重要机制,分为。理解二者的区别,有助于优化。
2025-03-30 21:17:50
1245
原创 【C语言】long vs int (数据范围\平台兼容性\性能优化)
场景推荐类型一般整数运算(循环、数组索引)int需要存储大数(超过 20 亿)long(64 位 Linux/macOS)或int64_t跨平台开发,确保 4 字节int32_t跨平台开发,确保 8 字节int64_t无符号整数或uint32_tuint64_t代码示例// 一般情况用 inti < count;i++) {// 大数用 int64_t(跨平台安全)// 明确需要 4 字节时用 int32_treturn 0;
2025-03-30 20:49:24
1350
原创 MCU vs SoC
MCU(Microcontroller Unit,单片机)和SoC(System on Chip,片上系统)是两种不同的芯片类型,尽管它们都实现了高度集成,但在设计目标、功能复杂性和应用场景上存在显著差异。尽管MCU和SoC都实现了高度集成,但它们在设计目标、功能复杂性和应用场景上存在显著差异。,但SoC可以包含MCU的功能(如集成Cortex-M核用于实时控制)。
2025-03-23 19:08:40
1653
原创 【操作系统】自旋锁和互斥锁
通过合理选择锁机制,可以在并发性能和资源利用率之间取得最佳平衡。自旋锁和互斥锁是用于多线程同步的两种常见锁机制,主要区别在于。根据实际场景选择锁机制,是高性能并发程序设计的核心技能之一。
2025-03-23 17:26:30
1700
原创 【嵌入式狂刷100题】- 2操作系统部分
RTOS(Real-Time Operating System,实时操作系统)是一种专为实时应用设计的操作系统,能够确保任务在严格的时间约束内完成。它在嵌入式系统中广泛应用,特别是在对时间敏感的应用场景中,如工业控制、汽车电子、医疗设备等。RTOS 是嵌入式系统开发中不可或缺的工具,能够确保任务在严格的时间约束内完成。常用的 RTOS 包括 FreeRTOS、Zephyr、RT-Thread、µC/OS、VxWorks、QNX 和 ThreadX 等。
2025-03-23 14:31:09
1786
原创 【嵌入式狂刷100题】- 1基础知识部分
C语言是嵌入式系统开发中最常用的编程语言,因其高效、灵活、接近硬件且资源占用低,成为嵌入式领域的首选语言。在C语言中,位域通过结构体(structstruct {type:位域的类型,通常是或int。:位段的名称。width:位段的宽度(位数)。struct {// 1位,表示电源状态// 2位,表示模式// 1位,表示错误状态} status;在C语言中,可以使用sizeof运算符来获取各种数据类型所占的字节数。return 0;代码说明sizeof。
2025-03-22 22:07:02
1115
原创 【操作系统】临界区(含特性、实现方式、应用场景、常见问题)
临界区是并发编程中保障数据一致性的核心机制,需根据场景选择锁、原子操作或硬件级保护。遵循最小化、无嵌套、防死锁的设计原则,可显著提升系统稳定性和性能。在实时嵌入式系统中,还需结合关中断、内存屏障等硬件特性实现高效同步。
2025-03-18 01:41:42
1766
原创 【操作系统】双缓冲机制(含原理、优势、实现方式、应用场景)
双缓冲机制通过空间换时间实时性要求高:如音视频流、高速数据采集。数据生产与消费速度不匹配:如传感器数据采集与复杂算法处理。避免资源竞争:如多线程环境下的数据共享。
2025-03-18 00:02:42
4722
2
原创 【C语言】memset(含常见用途、注意事项)
场景 示例代码初始化数组 memset(arr, 0, sizeof(arr))清零动态内存 memset(ptr, 0, size * sizeof(int))初始化结构体 memset(&struct, 0, sizeof(struct))填充非零值 memset(arr, 1, sizeof(arr))通过 memset,可以快速初始化或填充内存区域,但需注意其按字节填充的特性。
2025-03-11 22:42:24
6489
原创 gdb调试以及常用相关工具(hexdump\objdump等)
什么是符号表符号表(Symbol Table)是在编译程序、链接程序以及调试程序等过程中用于存储和管理符号信息的数据结构。这里的符号可以是变量名、函数名、类名、标号等,以下从多个方面详细介绍符号表:基本概念在程序的编译和执行过程中,编译器和链接器需要知道各种标识符(符号)对应的地址、类型、作用域等信息,符号表就是用来存储这些信息的地方。它就像一个字典,将符号和与之相关的属性关联起来,方便编译器和其他工具在不同阶段进行查找、插入、删除和修改操作。
2025-03-10 22:47:46
1593
原创 【算法】哈希表详解
哈希表是一种高效的数据结构,适用于需要快速查找、插入和删除的场景。哈希函数和冲突解决方法是哈希表设计的核心。在实际应用中,哈希表被广泛用于字典、数据库索引、缓存等场景。
2025-02-26 23:36:51
967
原创 【C语言】Leetcode热题100 --更新中
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。遍历数组,对于每个元素 nums[i],计算 complement =解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。输入:nums = [2,7,11,15], target = 9。输入:nums = [3,2,4], target = 6。输入:nums = [3,3], target = 6。你可以按任意顺序返回答案。
2025-02-26 22:44:04
505
原创 【网络】TCP vs UDP详解( 含python代码实现)
TCP 适合对可靠性要求高的场景,如文件传输、网页浏览。UDP 适合对实时性要求高的场景,如视频流、在线游戏。选择 TCP 还是 UDP 取决于应用的具体需求。
2025-02-26 22:42:34
1549
原创 【通信协议】uart、i2c详解
1.串行,全双工,异步通讯2.空闲时,RXD和TXD默认高电平3.数据起始位为低电平4.串口发送数据过程中,低位在前,高位在后5.串口数据一般为8位6.串口可选择是否开启数据校验,校验位:单个字节数据校验,对数据中高低电平数据个数进行计数,常见的有奇偶校验7.停止位:高电平,一般有1,1.5,2位8.串口数据位数或者叫码元为固定9.串口传输速率:波特率,表示1秒传输数据位数。相同电平情况下,如低电平高电平。通过掐时间确认数据为01还是0011。10.累计误差消除:两个单片机通讯,波特率
2025-02-22 13:30:57
672
原创 【通信协议】同步vs异步
同步通信适合需要实时交互的场景,但发送方会阻塞。异步通信适合无需实时响应的场景,发送方可以继续执行其他任务,系统资源利用更高效。
2025-02-22 13:27:06
683
原创 GCC编译器(含预处理/编译/汇编/链接四阶段详解)
C 语言编译器用于把源代码编译成最终的可执行程序可安装mingw下载GCC编译器,进行操作练习在使用 GCC(针对 C 语言)或 G++(针对 C++ 语言)进行编译时,确实会经历。
2025-02-21 23:18:21
1314
原创 linux常用命令合集
v:反向查找,只打印不匹配的行。-r:递归查找子目录中的文件。-i:忽略大小写进行匹配。-l:只打印匹配的文件名。-n:显示匹配行的行号。-c:只打印匹配的行数。
2025-02-20 10:49:00
1255
原创 DRAM vs SRAM
SRAM:功耗相对较高,由于触发器电路中晶体管数量较多,且需要持续供电来维持数据状态,所以在工作过程中会消耗较多的电能。SRAM:集成度较低,触发器电路由多个晶体管组成,占用的芯片面积较大,相同面积的芯片上能够集成的存储单元数量相对较少。SRAM:速度极快,由于其基于触发器的存储结构,数据的读写操作能够在极短的时间内完成,通常在几个纳秒(ns)级别。DRAM:集成度高,电容和相关的控制电路结构相对简单,占用的芯片面积小,能够在相同面积的芯片上集成更多的存储单元。
2025-02-19 14:14:24
852
2
高阶分解模型FM纯实现
2022-04-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅