自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux网络编程

在网络通信中,端口号是传输层(通常是TCP或UDP协议)用来标识通信进程的关键元素。源端口定义:源端口是数据包发起者(通常是客户端进程)的端口号,表示在发送主机上,哪个进程或服务正在发送数据。作用:源端口帮助接收方主机确定响应应该发送回哪里。当服务器响应客户端请求时,它会使用数据包中的源端口作为目的端口。目的端口定义:目的端口是数据包预期接收者(通常是服务器进程)的端口号,表示在接收主机上,哪个进程或服务应该接收这个数据包。作用:目的端口帮助网络设备和接收主机将数据包正确地转发到指定的服务或进程。

2025-03-24 10:45:00 796

原创 LinuxI/O多路转接(select、poll、epoll)

特性selectpollepoll数据结构fd_set 位图pollfd 数组红黑树 + 就绪队列数量限制1024(fd_set 大小)无(内存限制)无(内存限制)数据拷贝每次全量拷贝每次全量拷贝仅 epoll_ctl 拷贝事件检测轮询 O(n)轮询 O(n)回调 O(1)接口复杂度单函数,需重置参数单函数,参数分离三函数,职责清晰工作模式LTLTLT / ETselect:适合小规模、低活跃连接场景,简单但效率低。poll。

2025-03-24 09:30:00 562

原创 Linux高级IO

输入:将数据从输入设备(如键盘、网卡、磁盘)拷贝到内存。输出:将数据从内存拷贝到输出设备(如显示器、打印机、磁盘)。实例文件IO:读写磁盘文件,外设为磁盘。网络IO:通过网卡收发数据,外设为网卡。本质上,IO是数据在内存与外设之间的移动过程。等待:等待数据或空间就绪。拷贝:数据在内存与外设间移动。关键点:等待时间通常远超拷贝时间。高效IO:尽量减少等待时间,提升整体效率。阻塞IO:张三,死等。非阻塞IO:李四,轮询。信号驱动IO:王五,信号通知。IO多路转接:赵六,多路复用。

2025-03-24 08:45:00 896

原创 Linux 线程池

线程池是一种高效的线程使用模式。在实际开发中,如果线程数量过多,会带来额外的调度开销,从而影响缓存局部性和整体性能。而线程池通过维护一组预先创建的线程,等待任务分配并并发执行,能够有效解决这一问题。简单来说,线程池就像一个任务调度中心,它管理着一个任务队列和若干线程。外部通过接口将任务放入队列,线程池中的线程则负责从队列中取出任务并处理。线程池是 Linux 多线程编程中一种高效的模式,适用于短时、高并发的任务场景。通过任务队列、互斥锁和条件变量的配合,线程池能够有效管理线程,降低开销并提升性能。

2025-03-24 08:00:00 1013

原创 Linux信号量

信号量基础:通过计数器和PV操作实现资源管理,二元信号量可模拟互斥锁。环形队列应用:利用信号量区分空间与数据资源,支持生产消费并发。优势:细粒度控制,兼顾互斥与同步。

2025-03-24 00:21:22 983

原创 Linux生产者消费者模型

模型核心:通过容器解耦生产者与消费者,支持并发与忙闲不均。实现关键:阻塞队列结合互斥锁与条件变量,确保互斥与同步。灵活性:可调整步调、唤醒条件,或扩展为复杂任务处理。

2025-03-23 23:18:27 688

原创 Linux线程安全

互斥:通过互斥量保护临界资源,确保数据一致性。同步:条件变量配合锁实现有序访问,避免竞态和饥饿。安全:理解可重入与线程安全,防范死锁。

2025-03-23 23:17:46 707

原创 Linux多线程

线程(thread)是一个程序中的执行路线,更准确地说,它是“进程内部的一个控制序列”。每个进程至少包含一个执行线程,即主线程。线程运行在进程的地址空间内,依赖进程的资源运行。在 Linux 中,线程的本质是轻量级进程(Light Weight Process,LWP),由内核中的结构表示。CPU 将视为调度单位,而不区分它是传统意义上的进程还是线程。当创建一个进程时,会伴随着进程控制块()、进程地址空间(mm_struct)和页表的创建,虚拟地址通过页表映射到物理地址。

2025-03-23 23:17:16 887

原创 Linux任务管理与守护进程

任务管理:通过进程组、作业和会话实现前后台控制,jobsfgbg等命令提供灵活操作。守护进程:后台运行的特殊进程,创建需脱离终端,可通过原生步骤或daemon函数实现。

2025-03-23 23:16:32 905

原创 Linux进程信号

默认动作:如终止、忽略等(见捕捉信号:提供自定义处理函数,内核切换到用户态执行。忽略信号:不执行任何动作。

2025-03-23 23:15:46 938

原创 Linux进程间通信

进程间通信(Interprocess Communication,简称IPC)是指在不同进程之间传播或交换信息的过程。由于进程之间具有独立性(尤其在数据层面),实现通信需要借助操作系统提供的机制。管道是Unix中最古老的进程间通信形式,指从一个进程到另一个进程的数据流。例如,使用命令统计云服务器登录用户数,其中who进程通过管道将数据传递给wc进程,完成数据传输和处理。System V 共享内存:允许不同进程直接访问同一块物理内存,实现高效的数据共享。System V 消息队列。

2025-03-23 19:52:17 879

原创 Linux动态库和静态库

静态库:打包用ar,生成.a文件,编译时嵌入代码,独立性强但体积大。动态库:用,生成.so文件,运行时加载,节省空间但依赖库文件。使用差异:静态库无需运行时配置,动态库需确保库路径可访问。通过本文,您应该已经掌握了Linux下动静态库的原理和实践。希望这些知识能在您的开发中派上用场!

2025-03-19 23:45:00 841

原创 Linux基础IO

在中,若未指定绝对路径,文件会在“当前路径”创建。那么,当前路径是什么?当前路径(Current Working Directory, CWD)是进程运行时的工作目录,而非可执行文件所在目录。在下运行./myproclog.txt生成在。在/home/user下运行log.txt生成在/home/user。获取进程 PID(用ps或getpid()查看,这是一个指向当前工作目录的软链接。本文详细讲解了 C 语言文件 I/O 和系统调用的原理与实践,涵盖了从标准库到内核的完整链路。

2025-03-19 19:23:58 898

原创 Linux进程控制

子进程创建时,初始与父进程共享代码和数据(通过页表映射到同一物理内存)。当任一进程修改数据时,内核复制受影响的数据块,这种技术称为写时拷贝(Copy-On-Write)。进程调用exec系列函数后,用户空间的代码和数据被新程序替换,从新程序的启动点(通常是main)开始执行。创建fork()通过写时拷贝实现高效复制。终止returnexit和_exit提供不同退出方式。等待wait和waitpid回收子进程,避免僵尸进程。替换exec系列函数实现程序切换,Shell是典型应用。

2025-03-19 15:06:48 968

原创 Linux进程概念

定义在Linux内核源码的中,是一个复杂结构体,被加载到内存(RAM)中,用于描述和管理进程。pid_t pid;// 进程IDpid_t ppid;// 父进程IDint state;// 进程状态int prio;// 优先级// 栈指针// 进程地址空间// ... 更多字段子进程退出后,若父进程未调用wait()或waitpid()读取退出信息,子进程进入僵尸状态(Zombie),成为僵尸进程。示例代码if (pid == 0) { // 子进程i > 0;i--) {

2025-03-19 14:46:39 752

原创 冯 • 诺依曼体系结构

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。:结合存储器(仅指内存,不包括外存)、CPU、输入设备和输出设备,形成经典的冯·诺依曼体系结构。:为了协调输入、运算和输出的时机,引入控制功能(对应 C 语言中的判断、循环、函数跳转等)。运算器:对我们的数据进行计算任务(算术运算,逻辑运算) 控制器:对我们的计算硬件流程进行一定的控制。我们常见的计算机,如笔记本。有的设备是纯输入、输出,也有既是输入又是输出的设备。

2025-03-17 21:11:47 725

原创 Gitee重新远程连接仓库(Linux)

如果之前本地仓库有未推送的更改,但虚拟机已删除,那些更改可能已丢失。不过,远程仓库的内容应该都还在。因为虚拟机重新安装了一回,所以需要重新和远程仓库连接,在网上找了很久没有找到相关操作,自己实操成功,记录下本博客,帮助有需要的人。假设你之前用的是GitHub、GitLab或Gitee之类的平台,找到你远程仓库的URL(比如。在新虚拟机上,首先检查是否安装了Git。这会显示远程仓库的URL,确认是否正确连接到你之前的仓库。这样可以保持提交记录的一致性。

2025-03-16 21:27:56 459

原创 Protobuf 学习与实践

若选择自定义路径(如),需编辑# 动态库搜索路径# 静态库搜索路径# 可执行文件路径# C 头文件路径# C++ 头文件路径# pkg-config 路径序列化:将对象转换为字节序列,用于存储或传输。反序列化:将字节序列还原为对象。官网原文翻译Protocol Buffers 是 Google 开发的一种语言无关、平台无关、可扩展的结构化数据序列化方法。相比 XML,它更小、更快、更简单,适用于通信协议和数据存储。

2025-03-15 19:12:04 616

原创 从单机到微服务的转型之路

电商平台的技术架构从最初的单机架构到如今的分布式架构和微服务架构,经历了不断的优化和演进。随着业务规模和用户量的增长,系统架构逐渐变得复杂,但每一步的技术引入都解决了性能瓶颈和可扩展性的问题。初期简单易用,但随着业务的增长,性能瓶颈逐渐显现。提高了系统的性能和可维护性,但数据库仍然是瓶颈。通过集群化和负载均衡,提高了系统的并发能力和容错性。有效缓解了数据库瓶颈,提升了响应速度。使得系统更加灵活和可扩展,但带来了服务间通信和事务管理的复杂性。

2024-12-25 14:26:11 1204

原创 Windows和Linux内存共享机制

在嵌入式开发领域,内存共享机制作为不同操作系统间实现高效数据交换的重要手段,尤其在对实时性和可靠性要求极高的环境中更为关键。本篇博客将深入探讨Windows和Linux各自的内存共享机制,结合ARINC 653标准在VxWorks中的实际应用,剖析其实现原理和实际使用中的关键技术,帮助读者更好地理解内存共享在跨平台环境中的应用场景与优势。

2024-11-01 21:43:54 781

原创 Shell脚本

Shell 脚本是一个包含多个命令的文本文件,这些命令可以在 Linux shell 中运行。Shell 脚本可以用来自动化任务、管理系统和执行批处理命令。

2024-10-26 12:14:23 837

原创 机载操作系统

是因为虽然Windows内核源码不公开,关于Windows的实时化改造有很大限制,但是它具有成熟的vs可视化界面的,提供了良好的集成开发环境Visual Studio,而虽然Linux内核源码是公开的,但是它更注重命令行操作,用户界面可视化较差,没有良好的集成开发环境。:分区调度器为了配合模块调度器完成分区的切换,在每个分区中维护一个事件,分区调度器等待此事件,当获得此事件时,读取命令码,按照命令码的要求挂起本分区正在运行的进程或者恢复本分区优先级最高的进程,从而完成分区的挂起或唤醒,达到分区切换的目的。

2024-09-20 21:18:22 780

原创 操作系统-ARINC653笔记

ARINC 653 是一种用于航空电子系统的标准,特别是在实时操作系统中,用于支持航空电子设备的分区化和资源管理。它旨在提供一种方法来在同一计算平台上运行多个应用程序,同时确保它们之间的隔离和安全性。它是数字飞机和飞行模拟器ARINC 600 系列标准的一部分。ARINC653主要包括分区管理时间管理分区内进程管理进程间通信分区间通信方式分区健康性监控技术蓝图配置技术等。ARINC653中有三类健康监控表:系统健康监控表、模块健康监控表、分区健康监控表。

2024-09-10 00:52:30 1477

原创 COM标准笔记

COM,即组件对象模型,是一种以组件为发布单元的对象模型,这种模型使各软件组件可以用一种统一的方式进行交互。COM既提供了组件之间进行交互的规范,也提供了实现交互的环境,因为组件对象之间交互的规范不依赖于任何特定的语言,所以COM 也可以是不同语言协作开发的一种二进制标准。COM标准包括规范和实现两大部分,规范部分定义了组件和组件之间通信的机制这些规范不依赖于任何特定的语言和操作系统,只要按照该规范,任何语言都可使用 COM标准的实现部分是COM库,COM库为COM规范的具体实现提供了一些核心服务。

2024-09-06 15:49:36 870

原创 VSMDDS与NetDDS的详细对比

VSMDDS在系统内部通信的效率和延迟方面无疑是最优的选择,但其扩展性和部署灵活性相对有限。因此,VSMDDS 更适合在对性能和延迟有严格要求、且不需要跨网络通信的场景中使用。NetDDS提供了更大的部署灵活性和扩展性,适合在复杂的分布式系统中应用。尽管其网络通信带来了额外的延迟和复杂性,但对于需要跨越多个物理节点和地理位置的应用,NetDDS 是一个更为合适的选择。最终的选择应基于应用的具体需求,如性能要求、系统架构、部署环境和未来扩展性等。对于局部系统高效通信,VSMDDS 是最佳方案;

2024-08-14 17:31:04 605

原创 VSMDDS概要设计

VSMDDS(虚拟共享内存数据分发服务)的实现是基于本地虚拟共享内存来完成彼此间通信,通过将发布者订阅者及相应管理信息记录在虚拟共享内存中完成对结构数据的管理发布者与订阅者映射关系的建立及数据的传输。它通过在一个局部系统内的共享内存中进行数据交换,来实现高效的发布/订阅模型。这种设计特别适合对延迟敏感的应用场景,如嵌入式系统、实时系统等。图1 基于虚拟共享内存的数据分发服务的内存结构图从上图可以看出在系统内存结构中可以分为3个主要方面,分别为系统管理信息结构发布者与订阅者结构,以及空闲块链表结构。

2024-08-14 17:29:42 575

原创 NetDDS概要设计

NetDDS是基于以太网的数据分发服务。它遵循数据分发服务(DDS)标准,这是一种中间件协议,用于实现模块间的数据交换。DDS主要用于实时系统中,提供了一种面向发布/订阅的消息传递机制。通过使用以太网,NetDDS能够在不同设备或系统组件之间高效地传递消息,支持分布式应用的数据通信需求。这使得NetDDS特别适用于需要高性能、可靠性和实时性的复杂系统,如工业自动化、航空航天和防务系统。

2024-08-14 17:28:18 704

原创 高并发内存池

当前项目旨在实现一个高并发内存池,其原型是 Google 的开源项目 TCMalloc。TCMalloc,全称 Thread-Caching Malloc,是一个高效的多线程内存管理库,用于替代系统的内存分配相关函数(malloc、free)。我们这个项目的目标是简化并模拟实现 TCMalloc 的核心框架,以学习 TCMalloc 的精华。这种学习方式类似于之前学习 STL 容器的方式。然而,相较于 STL 容器部分,TCMalloc 的代码量和复杂度都大大增加了。

2024-08-02 23:41:30 1164

原创 Gitee的使用(Windows/Linux)

将你的本地仓库与 Gitee 上的远程仓库关联起来。过程中遇到冲突,Git 会提示你解决冲突。点击Push,第一次上传会显示以下内容,这里填注册Gitte时的账号和密码。选择ok,显示Finshed Success,Add到本地仓库成功。输入完指令后需要一次回车,一次输入y,两次回车即可生成公钥。将y.pub文件里的内容复制到下图的公钥里面,标题随意起。在仓库在创建文件,完成后在仓库中右击鼠标选择Add…输入账号和密码后显示Success就上传成功了!可以看到生成公钥的路径为:y.pub。

2024-06-09 16:11:26 3326 3

原创 DDS系统概述

通过对各类机载总线网络的协议特征共性的提取,提出一种总线网络仿真的统一方法,适用于不同种类的机载总线网络仿真。这种设计方式提高了系统的易用性,仅为上层提供了DDS接口类中的几个简单的接口,方便使用。虚拟总线层通常负责处理构建在DDS之上的应用程序逻辑和数据流控制,而通过调用这些接口,它可以与实际的物理传输层(也就是DDS)链接,实现数据的发布和订阅。的信息传递方式,一旦消息发布者有动态更新的数据产生时,发布/订阅中间件通过事件通知机制通知消息订阅者存在新的可用数据,而无须消息订阅者进行轮询。

2024-06-05 22:00:09 1048

原创 C++:STL—算法

C++:STL—算法

2024-05-21 20:52:52 332

原创 C++:STL—空间配置器

C++:STL—空间配置器

2024-05-21 20:42:12 323

原创 C++:STL—仿函数

STL中的仿函数是一种具有函数行为的对象。它们是函数对象,通过重载函数调用运算符operator()实现函数的调用。仿函数提供了一种将函数包装成对象的机制,可以在算法中使用,并支持函数对象的参数化和泛化。它们可以用于排序、查找、转换等算法中,允许用户自定义特定的行为规则。在这个示例中,Add 是一个仿函数,重载了 operator(),使得它可以像函数一样被调用。在 main 函数中,我们创建了一个 Add 类的对象 add,然后使用这个对象进行加法运算,其行为类似于一个函数调用。

2024-05-19 22:19:28 324

原创 C++:STL简介

C++:STL简介

2024-05-19 21:51:34 339

原创 C++:模板

C++:模板

2024-05-18 11:17:52 877

原创 物联网系统

物联网系统

2024-05-12 21:46:52 1182 1

原创 C++:内存管理

C++:内存管理

2024-05-09 22:20:34 848

原创 C++:类与对象—多态

C++:类与对象—多态

2024-05-08 22:10:16 750

原创 C++:类与对象—继承

C++:类与对象—继承

2024-05-08 20:13:17 904

原创 关联关系理解

这样,订单对象可以通过指针访问关联的客户对象的信息,但客户对象无法直接通过订单对象访问关联的订单信息,从而形成了单向关联关系。在 Car 类的 drive 方法中,使用了 Engine 类的对象作为参数,这体现了 Car 类对 Engine 类的依赖关系。在关联关系中,一个类的对象与另一个类的对象之间存在某种关联,但它们的关系不如组合关系那样密切。这种关联可以是单向的,也可以是双向的。聚合关系的特点是,成员可以脱离于整体对象独立存在,比如学校与老师的关系,学校包含老师,但是就算学校没了,老师依然可以存在。

2024-03-31 18:25:37 1421

空空如也

空空如也

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

TA关注的人

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