自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 Linux 进程调度模块

Linux内核中进程和线程本质相同,均通过task_struct结构体描述。关键区别在于:进程拥有独立内存空间(mm_struct),线程共享父进程资源。创建流程通过fork/clone系统调用实现,采用写时复制(COW)机制提升效率。线程创建时通过CLONE_*标志位控制资源共享。Linux采用CFS完全公平调度器,使用红黑树管理任务,基于vruntime值决定调度顺序,支持多核负载均衡。调度触发包括主动让出CPU、时间片耗尽或高优先级任务唤醒等情况,确保系统资源公平分配。

2026-03-18 23:34:42 399

原创 Redis:缓存、集群、优化与数据结构

本文系统总结了Redis核心知识点与应用优化策略。主要内容包括:缓存更新策略对比(内存淘汰/超时剔除/主动更新)及三种主动更新模式(旁路缓存/读写穿透/异步回写);缓存问题解决方案(穿透/雪崩/击穿);分布式锁实现与优化(唯一标识/原子释放/可重入/主从一致);消息队列三种实现方式对比(List/PubSub/Stream);持久化机制(RDB/AOF)与优化建议;集群架构(主从同步/哨兵/分片集群);多级缓存同步方式;键值设计规范与性能优化(批处理/慢查询/内存配置)。

2026-03-17 16:44:51 453

原创 通信:(10) 应用层(第5层):http/https,DNS与DHCP

=本文系统分析了HTTP协议从1.0到3.0的技术演进过程。HTTP/1.0采用非持续连接方式效率低下;HTTP/1.1引入持续连接但存在队头阻塞问题;HTTP/2通过二进制分帧和多路复用优化性能,但仍受TCP层限制;HTTP/3基于QUIC协议彻底解决了传输层阻塞问题,实现了0-RTT握手和连接迁移。HTTPS在HTTP基础上增加了TLS加密层,提供安全保障。协议演进呈现从文本到二进制、从单连接到多路复用、从TCP到UDP(QUIC)的发展趋势,不断提升Web性能和安全。

2026-03-15 23:37:50 669 1

原创 算法:链表:指针变化与环

本文总结了链表相关算法题的解题思路和实现代码,主要包括: 链表反转:单链表反转和K个一组反转的实现方法 ;链表合并:K个有序链表合并和链表排序的归并算法 ;缓存设计:LRU和LFU缓存的数据结构实现 ;环形链表:检测环、寻找入环点以及环形数组问题的解法 ;关键点包括:指针操作技巧、哨兵节点使用、快慢指针算法、频率计数链表等。所有解法都遵循O(1)或O(n)的时间复杂度要求,并提供了清晰的代码实现。

2026-03-15 19:47:32 415

原创 算法:排序、选择与查找:插入/冒泡/选择/快速/归并/堆排序/快速选择/二分

本文系统总结了数组排序和查找算法的实现与应用。排序算法部分详细讲解了插入排序、冒泡排序、选择排序、快速排序、归并排序和堆排序的原理及C++实现,重点分析了时间复杂度为O(nlogn)的快速排序和归并排序。查找算法部分包括二分查找在有序数组中的应用,如搜索插入位置、旋转数组最小值查找等,并介绍了快速选择算法在查找第K大元素中的应用。此外,还深入讲解了堆排序的原理和实现,包括大根堆的性质和调整方法。所有算法均提供了完整的C++代码实现,并强调了时间复杂度优化的重要性。

2026-03-08 00:58:00 804

原创 算法:动态规划基础(下):树型dfs+回溯+记忆化搜索

本文探讨了多个动态规划问题的递归解法,包括网格路径、最小路径和、回文子串、公共子序列和编辑距离。通过自顶向下和自底向上两种递归方式,结合记忆化技术优化重复计算,展示了不同解题思路的效率差异。其中,自底向上方法因更高的缓存命中率而表现更优。每个问题都提供了基础递归和记忆化优化版本,体现了动态规划的核心思想:分解子问题并存储中间结果。这些解法为解决类似复杂问题提供了通用模板,特别是处理字符串和网格问题时,递归结合记忆化的方法能有效降低时间复杂度。

2026-03-05 14:09:25 444 1

原创 通信:(9) 消息队列与优先级反转

消息队列是一种进程间通信方式,具有内置同步机制,能避免竞态条件。文章详细介绍了POSIX消息队列的使用流程,包括创建/打开队列(mq_open)、发送消息(mq_send)、接收消息(mq_receive)等核心操作。通过C代码示例展示了写进程(mq_writer.c)和读进程(mq_reader.c)的实现,演示了消息的发送、接收和终止信号处理流程。同时阐述了消息队列的生命周期管理、阻塞/非阻塞模式切换以及优先级机制(0~32767,数值越大优先级越高)。

2026-03-03 21:29:11 467

原创 算法:动态规划基础(中):树型dfs+回溯+记忆化搜索

本文探讨了将回溯和动态规划问题转化为树形DFS的思路,通过5个典型题目展示了这种思维的应用。1.单词拆分问题采用自底向上递归检查切分点;2.最长递增子序列问题分解为以每个元素为起点的子问题;3.乘积最大子数组问题需要同时记录最大和最小值;4.分割等和子集问题转换为路径求和问题;5.最长有效括号问题可用栈优化解法。每个问题都给出了基础递归和记忆化优化两种实现,展示了如何通过树形分解和状态记忆提高算法效率。

2026-03-03 17:44:54 458

原创 Linux 内存管理模块

摘要:Linux内核包含五大核心子系统:进程调度(控制CPU资源访问)、内存管理(虚拟/物理内存映射)、虚拟文件系统(统一文件接口)、网络接口(分层网络通信)和进程间通信(多种IPC机制)。其中内存管理是核心,通过MMU实现虚拟地址转换,采用延迟分配策略(首次访问触发缺页中断才分配物理内存),并利用LRU算法和kswapd线程进行内存回收。这种架构实现了地址隔离、内存保护和虚拟内存扩展,使进程能使用超过物理RAM的地址空间,同时通过内存池复用和交换机制优化性能。

2026-03-02 11:16:43 1034

原创 算法:动态规划基础(上):树型dfs+回溯+记忆化搜索

本文系统阐述了动态规划问题的回溯与记忆化搜索解法。首先指出回溯+记忆化是动态规划的基础,将递归过程视为树结构,并详细分析了自顶向下和自底向上两种递归方式的区别,强调自底向上更适合记忆化实现。通过爬楼梯、打家劫舍、完全平方数和零钱兑换四个经典例题,分别展示了三种解法:纯回溯、记忆化搜索及其优化版本。特别说明了记忆化的核心原理是复用已计算的子问题结果,避免重复计算。所有案例均采用C++实现,清晰地展现了从基础回溯到记忆化优化的完整思路演进过程。

2026-03-01 18:21:35 1444

原创 MySQL:(0) 存储引擎基础与主从复制/分库分表

本文全面介绍了MySQL数据库的核心知识点,包括存储引擎、索引、事务、锁机制、SQL优化等关键技术。重点分析了InnoDB引擎的架构设计(内存结构、磁盘结构、后台线程)、事务实现原理(ACID特性、MVCC机制)、四种隔离级别及其解决的问题。详细阐述了索引的分类(聚集/二级索引)、B+树原理、索引优化策略(最左前缀、覆盖索引等)。深入讲解了锁机制(全局锁、表锁、行锁)和不同隔离级别下的锁行为差异。提供了SQL性能分析工具(执行计划、慢查询日志)和多种优化技巧(分页、统计、DML操作)。

2026-03-01 01:02:41 1718

原创 C++:(7) 虚函数表与动态绑定,虚构造与虚析构

C++虚函数机制解析:编译器为含虚函数的类自动生成虚函数表(vtable)和虚函数指针(vptr),实现运行时多态。对象内存布局包含隐藏的vptr指向vtable,其中存储虚函数地址。动态绑定通过vptr查表调用正确函数版本,派生类vtable会覆盖基类虚函数地址。特别强调:基类析构函数必须声明为虚函数,否则通过基类指针删除派生类对象会导致资源泄漏;构造函数不能为虚函数,因其执行前vptr尚未初始化。多重继承时对象包含多个vptr,构造/析构过程中调用虚函数不会动态绑定到派生类版本。

2026-02-28 23:22:09 579

原创 算法:树与回溯:颜色标记法与BFS,自顶向下和自底向上的DFS

本文总结了树形算法和回溯算法的核心思想与典型例题。树形算法部分介绍了自顶向下、自底向上两种递归方式,以及全局变量、特有信息分解等技巧,通过二叉搜索树第k小元素、最大路径和等6个例题进行说明。回溯算法部分将问题建模为树结构,强调恢复现场的重要性,包含全排列、N皇后、子集等8个经典问题,展示了如何通过深度优先搜索遍历解空间树。两种算法都体现了递归思想在树结构问题中的应用,通过参数传递信息、全局状态维护等方式解决复杂问题。

2026-02-27 23:11:54 783

原创 算法:栈的通解:找出数组中每个向前后 (左右) 第一个比自己小/大的元素

本文总结了单调栈的四种常见应用模式及其实现模板:1. 找后一个更大/更小元素(正向遍历+递减/递增栈)2. 找前一个更大/更小元素(反向遍历+递减/递增栈)。通过"遍历方向"和"比较符号"两个变量可生成所有变体,核心在于根据需求(找更大/更小)确定比较条件,栈的单调性是逻辑运行的自然结果。文章以LeetCode739、84、42题为例,展示了如何应用单调栈解决实际问题,强调不应预先设定栈类型,而应关注问题需求,代码逻辑会自动形成相应的单调栈结构。

2026-02-27 14:15:44 897

原创 通信:(8) 网络层(第3层):IPv4 与路由器

网络层功能与IPv4协议解析: 网络层通过IP协议实现异构网络互联,路由器作为核心设备负责协议转换和分组转发,提供路由选择与数据转发两大功能。IPv4协议采用32位地址,通过子网划分和路由聚合优化地址分配,同时借助NAT技术缓解地址短缺问题。网络层服务包括无连接的数据报服务和面向连接的虚电路服务,分别适用于不同场景。SDN技术通过分离控制与数据平面提升网络可编程性。路由器通过NAT实现地址转换,并利用ICMP协议进行网络诊断。

2026-02-26 22:52:13 839

原创 通信:(7) 数据链路层(第2层):LLC+MAC、局域网、广域网与交换机

数据链路层是OSI模型的第二层,位于物理层和网络层之间,负责在相邻节点间提供可靠的数据传输服务。其主要功能包括:1)链路管理(建立/维护/释放链路);2)封装成帧(将比特流组织为有明确边界的帧);3)透明传输(确保任意数据都能正确传输);4)流量控制(防止发送方过载接收方);5)差错检测(如CRC校验)。介质访问控制(MAC)是重要子层,通过信道划分、随机访问和轮询访问三种方式协调共享介质的访问。典型应用包括以太网(有线)和802.11/WiFi(无线)等局域网技术,以及PPP等广域网协议。

2026-02-26 11:33:01 1249 1

原创 通信:(6) 物理层(第1层):相关概念、中继器与集线器

摘要:物理层是OSI模型的最底层,负责比特流在物理介质上的透明传输,具有机械、电气、功能和规程四大特性。核心概念包括码元(信号单位)、波特率(码元速率)和比特率(信息速率)。奈奎斯特准则和香农定理分别给出了无噪声和有噪声信道的传输极限。物理层设备中继器和集线器(多端口中继器)工作在物理层,用于信号再生和延长传输距离,但集线器所有端口共享同一冲突域,与工作在数据链路层的交换机有本质区别。

2026-02-25 22:29:36 873

原创 通信:(5) 电路交换、报文交换与分组交换

本文对比分析了电路交换、报文交换和分组交换三种通信方式。电路交换需预先建立专用通路,适合实时语音但资源利用率低;报文交换采用存储转发机制,时延较大;分组交换将数据分割为小分组独立传输,具有高信道利用率、低时延等优势,是现代互联网的基础。分组交换又分为数据报(无连接)和虚电路(面向连接)两种方式,前者如IP网络,后者如X.25等。总体而言,分组交换在时延、资源利用率和灵活性方面表现最优,成为当前主流通信技术。

2026-02-25 21:49:07 1060

原创 C++:(6) 常用 linux 命令:进程管理、日志查看、网络端口与文件权限

本文摘要: 本文介绍了Linux系统管理中的核心命令,主要包含四个方面内容:1)进程管理(ps查看进程、top监控资源、kill终止进程);2)日志查看(tail实时跟踪、grep过滤搜索、less分页浏览);3)网络与端口(netstat/ss查看端口占用、curl测试接口);4)文件权限管理(chmod/chown权限控制、find/df/du文件查找与磁盘分析)。文章通过常用命令组合和实际案例(如CPU飙高排查、日志错误统计等),为系统运维和问题排查提供了实用指导。

2026-02-24 17:51:17 799

原创 通信:(4) 共享内存与信号量,linux下一切皆文件的设计核心

摘要:本文详细介绍了POSIX共享内存(shm)的使用流程和原理。共享内存是最高效的进程间通信方式,允许多进程直接访问同一块物理内存区域,但需配合信号量实现同步。文章包含写进程(writer.c)和读进程(reader.c)的完整代码示例,展示了创建/打开共享内存、设置大小、映射地址空间、信号量同步等关键步骤。同时分析了POSIX共享内存与进程的关联机制、生命周期管理原理,以及有名信号量与无名信号量的区别。最后提供了相关操作命令和最佳实践建议,强调创建后立即unlink以确保资源自动回收。

2026-02-23 00:41:03 1036

原创 操作系统开发:(11) RTOS 与 GPOS 的分界线:MMU

本文对比分析了通用操作系统(GPOS)与实时操作系统(RTOS)的核心特性。GPOS采用虚拟内存、公平调度等机制实现多任务并发,强调系统整体效率;RTOS则通过固定优先级抢占式调度保证实时性。同时详细介绍了内存管理硬件单元:MPU提供轻量级内存保护,适用于资源受限系统;MMU实现虚拟内存管理,支持地址转换、内存隔离和高级特性(如写时复制)。文章阐明了不同操作系统架构的设计理念及适用场景,为系统选型提供了技术参考。

2026-02-22 23:08:12 807

原创 Redis:(6) 三级缓存+连接池与高性能 Redis 客户端封装

本文介绍了一个三级缓存架构的Redis客户端实现方案。该方案采用布隆过滤器(L0)、本地LRU缓存(L1)和Redis缓存(L2)的三级结构,通过布隆过滤器快速拦截不存在的数据请求,本地缓存提升进程内访问速度,Redis缓存实现分布式共享。文章详细阐述了架构设计、核心功能实现和使用示例,包括字符串、哈希、列表、集合和有序集合等数据类型的操作。该客户端支持读穿透、写穿透等缓存策略,并提供了防缓存穿透机制,通过布隆过滤器和空值占位符有效避免无效请求穿透到数据库。

2026-02-22 21:14:39 720

原创 Muduo:(5) 主 Reactor 之 Acceptor 与 SubReactor 的分发

本文介绍了mymuduo网络库的三个核心模块:Acceptor、TcpConnection和TcpServer。Acceptor负责监听新连接,封装了socket创建、绑定和接受连接等操作,通过回调机制通知上层。TcpConnection管理已建立的TCP连接,提供数据收发、事件处理和生命周期管理功能。TcpServer整合前两者,实现完整的服务器生命周期管理,支持多线程Reactor模式。模块间通过回调机制交互:Acceptor接受新连接后交给TcpServer创建TcpConnection。

2026-02-21 23:59:01 839

原创 Muduo:(4) 主从 Reactor、事件循环、跨线程无锁唤醒及其线程池

摘要:本文详细介绍了mymuduo网络库中的事件循环核心模块设计。EventLoop是线程绑定的IO事件处理器,通过poll/select监听事件并调用对应Channel处理,采用eventfd实现跨线程任务的无锁唤醒机制。EventLoopThread封装了"One Loop Per Thread"模式,确保线程安全地创建和管理EventLoop。EventLoopThreadPool实现主从Reactor模式,通过轮询策略实现负载均衡。

2026-02-21 23:00:26 1265

原创 Muduo:(3) 线程的封装,线程 ID 的获取、分支预测优化与信号量同步

本文介绍了CurrentThread和Thread两个线程管理模块的实现。CurrentThread模块通过thread_local变量和__builtin_expect优化实现高效的线程ID获取。Thread模块封装std::thread,提供线程创建、ID获取、命名、生命周期管理等跨平台功能,并使用信号量实现主线程与子线程的同步。重点分析了线程ID缓存机制、分支预测优化技术以及信号量同步的实现原理,展示了如何构建一个高效、安全的线程管理框架。该设计在保证功能完整性的同时,通过多种优化手段提升了性能。

2026-02-20 18:40:05 582

原创 Muduo:(2) EPollPoller 实现 epoll 封装、 fd 事件监听与事件通知

Poller是mymuduo网络库中I/O多路复用的抽象基类,采用策略模式设计,支持多种I/O多路复用实现。核心功能包括事件轮询接口定义、Channel管理、线程安全保证等。默认使用高性能的EPollPoller实现,同时保留PollPoller扩展接口。模块通过Channel注册流程管理文件描述符,使用epoll_wait进行事件等待,并通过fillActiveChannels处理就绪事件。关键设计包括状态管理(kNew/kAdded/kDeleted)、动态扩容机制和错误处理,为网络库提供了高效可靠的事

2026-02-20 17:35:13 769

原创 Muduo:(1) 文件描述符及其事件与回调的封装 (Channel)

摘要: Channel是mymuduo网络库中的事件分发器,负责管理文件描述符(fd)及其事件回调。主要功能包括:1)封装fd与事件(读/写/错误/关闭)的对应关系;2)通过回调机制处理不同事件;3)使用tie机制绑定对象生命周期,防止回调时对象被销毁;4)委托EventLoop更新Poller监听状态。核心实现包含events_(监听事件)和revents_(实际事件)的状态管理,通过handleEventWithGuard方法安全分发事件。Channel作为连接Poller与回调的桥梁,不拥有fd但负责

2026-02-20 14:57:50 828

原创 Muduo:(0) 架构与接口总览

muduo 采用 One Loop Per Thread 线程模型和 epoll 非阻塞 I/O 实现高效事件驱动架构,核心模块包括 EventLoop(事件循环)、Channel(事件封装)、Poller(多路复用)、TcpServer/TcpConnection(连接管理)和 Buffer(高效缓冲),支持主从 Reactor 多线程并发,提供简洁的回调 API 便于快速开发 TCP 服务器/客户端,具备自动连接生命周期管理、零拷贝优化、线程安全无锁设计等特性,适用于高并发网络服务场景。

2026-02-20 13:27:50 1037

原创 C++:(5) 单例模式与支持初始化失败的单例模式

本文详细探讨了C++单例模式的四种实现方式与支持初始化失败的实现方案。1)饿汉式:线程安全但启动即创建,可能浪费资源;2)懒汉式:延迟加载但线程不安全;3)双重检查锁定(DCL):结合懒加载与线程安全,通过原子操作和互斥锁确保正确性;4)Meyers单例(推荐):利用局部静态变量特性,兼具线程安全、延迟加载和自动析构优势。文章还介绍了支持初始化失败的单例变体,重点分析了各种实现的内存序、异常处理和资源管理机制。最佳实践推荐使用Meyers方案,其在现代C++中代码最简洁且安全性最高。

2026-02-20 01:29:50 753

原创 C++:(4) 内存布局、编译流程、关键字及其链接性

本文摘要: 内存布局分析:详细介绍了Linux C++程序的内存布局结构(栈、堆、BSS段、数据段等)和举例链接脚本实现说明链接脚本如何控制内存映射和段布局。 编译流程解析:完整说明从预处理(.i)→编译(.s)→汇编(.o)→链接的四个阶段,对比各阶段的输入输出文件类型及可读性差异。 关键字链接性:系统梳理各类变量(全局/静态/类成员)和函数(静态/虚函数/运算符)的链接特性,重点说明C++17引入的inline static改进及其应用场景。

2026-02-19 18:09:53 1486

原创 通信:(3) 高并发网络通信:epoll + 边沿触发 + 非阻塞 IO + tcp

本文详细介绍了Linux epoll机制及其在高并发网络编程中的应用。主要内容包括: epoll核心API使用: 创建epoll树(epoll_create/epoll_create1) 管理epoll节点(epoll_ctl) 等待事件(epoll_wait) 详细对比了水平触发(LT)和边沿触发(ET)模式的特点及适用场景 高并发架构设计: 基于epoll ET模式+非阻塞IO实现Reactor模式

2026-02-19 01:51:13 656

原创 Redis:(5) 分布式锁实现:原子性设置锁与 Lua 释放锁

本文介绍了一个基于Redis实现的分布式锁模块,主要包含以下内容: 分布式锁概念 解决分布式环境下多个进程/服务器对共享资源的互斥访问 核心特性:互斥性、防死锁、安全性、容错性 实现方案 基础版本:SETNX命令 改进版本:SETNX+EXPIRE 标准版本:原子化SET命令(NX+PX参数) 安全释放:Lua脚本校验锁持有者 可靠性保障:看门狗机制自动续期 核心类设计 支持4种锁类型:可重入锁、读锁、写锁、公平锁 关键组件:本地状态管理、线程安全控制、看门狗续期

2026-02-18 22:48:03 1578

原创 Redis:(4) 缓存穿透、布隆过滤器与多级缓存

本文介绍了解决缓存穿透问题的技术方案:布隆过滤器、多级缓存和LRU缓存。布隆过滤器通过位数组和哈希函数快速判断元素是否存在,防止无效请求穿透到数据库。多级缓存采用本地内存(L1)、Redis(L2)和数据库(L3)的分层结构,逐级减轻后端压力。其中LRU缓存通过哈希表+双向链表实现O(1)时间复杂度的缓存淘汰,并支持TTL过期和空值缓存功能。三种方案均提供了线程安全的C++实现,包含详细的数据结构设计和核心算法实现,可有效解决缓存穿透问题。

2026-02-18 19:38:40 945

原创 Redis:(3) Lua 与 Redis、基于连接池的 Facade 模式封装

本文介绍了Lua脚本语言在Redis中的应用及其优势。详细分析了Redis使用Lua的必要性,包括保证原子性、减少网络开销、支持服务端逻辑等核心优势。同时提供了C++实现的RedisCache封装类,展示了String、Hash、List等数据结构的操作方法,以及Lua脚本执行接口的实现细节。最后通过示例代码演示了分布式锁、队列操作和多线程安全测试等典型应用场景。

2026-02-17 01:49:31 1180

原创 Redis:(2) hiredis 使用、C++ 封装与连接池

本文介绍了Redis C客户端库hiredis的基础使用和连接池实现。主要内容包括: hiredis基础使用 核心数据结构:redisContext(连接状态)和redisReply(命令响应) 关键API:连接管理(redisConnect/redisFree)、命令执行(redisCommand/freeReplyObject) C++封装实现 RedisConnection类封装单个连接,提供线程安全接口 实现连接超时、认证、数据库选择等功能 采用RAII风格管理资源生命周期

2026-02-17 00:34:53 604

原创 操作系统开发:(10) 线程创建与调度的底层原理:从硬件行为解释线程

RTOS任务切换机制的核心在于通过异常处理来保存和恢复任务现场。首次任务启动时,通过SVC异常处理函数伪造任务栈帧,设置PSP指向新任务栈,异常返回时加载伪造的寄存器值实现任务跳转。任务切换则通过PendSV异常完成:1)保存当前任务的R4-R11到PSP栈;2)调用调度器选择新任务;3)从新任务栈恢复R4-R11;4)设置PSP指向新任务栈,异常返回时自动加载剩余寄存器。两种方式本质相同,区别在于首次任务栈值是预先伪造的,而后续切换保存的是真实现场。

2026-02-16 16:28:07 1087

原创 C++:(3) 线程的关联、条件变量、锁和线程池

本文介绍了C++多线程编程的核心概念与实现方法。主要内容包括:1)线程基础,展示普通函数和成员函数作为线程函数的创建方式,解释线程关联概念及join/detach操作;2)同步机制,详细说明lock_guard、unique_lock的使用场景,条件变量配合互斥锁实现线程同步的方法,以及shared_mutex的读写锁机制;3)线程池实现,给出了完整的线程池类设计,包括任务队列管理、工作线程调度和异常处理,并演示了各类任务(普通函数、lambda、成员函数)的提交方式。

2026-02-15 21:06:38 1031

原创 通信:(2) TCP/UDP、流量/拥塞控制、ARP 与 Socket 应用

本文介绍了TCP和UDP协议的核心机制及Socket编程要点。TCP通过序列号、确认应答、超时重传实现可靠传输,采用滑动窗口进行流量控制,拥塞控制算法包括慢启动、拥塞避免、快重传和快恢复。UDP则提供轻量级的无连接不可靠传输。文章详细解析了TCP三次握手和四次挥手过程,以及UDP报文结构。在Socket编程部分,系统梳理了从创建socket到关闭连接的完整流程,包括关键系统调用和优化选项设置,并提供了代码示例说明各步骤的实现细节。最后简要介绍了ARP协议的地址解析功能。

2026-02-15 18:03:13 833 1

原创 操作系统开发:(9) 从硬件复位到程序执行:如何编写符合硬件动作的启动文件与链接脚本

摘要:本文详细讲解了操作系统开发中启动文件与链接脚本的核心作用。链接脚本负责内存映射(FLASH/RAM)、精确地址分配、符号定义和优化控制,通过VMA/LMA概念实现程序段布局。启动文件则完成CPU上电后的初始化工作,包括设置栈指针、复制.data段、清零.bss段并跳转main函数。二者协同工作确保程序正确加载运行,其中链接脚本定义的内存布局(如中断向量表必须位于0x08000000)与启动文件中的汇编指令严格对应,共同实现Cortex-M4处理器的启动流程。

2026-02-15 13:30:35 1033

原创 操作系统开发:(8) 任务/线程的创建、调度与管理(实现 tasks.h 与 tasks.c)

本文基于NUCLEO-G431RB单核无MMU系统中最基础的双任务/线程运行实现。主要内容包括:1. 任务创建流程:通过动态内存分配TCB和任务栈,初始化任务控制块(TCB),设置任务优先级和名称,并将新任务加入就绪列表;2. 调度器启动:创建空闲任务,初始化系统tick计数,通过port_lStartScheduler启动调度;3. 任务调度机制:包括任务延时处理、SysTick中断服务、优先级调度和时间片轮转;4. 关键数据结构:使用就绪列表、延时列表和挂起列表管理任务状态

2026-02-14 21:52:53 908

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除