- 博客(22)
- 收藏
- 关注
原创 存储系统03——数据缓冲evBuffer
evbuffer 是 Libevent 提供的一个高效内存缓冲区管理工具,用于存储和操作数据。它类似于一个动态增长的字节缓冲区,支持多种操作,如添加、移除、读取和写入数据;在多线程环境中,evbuffer 的操作是线程安全的。当读取到的业务为Download时,evbuffer 被用于处理 HTTP 文件下载请求;,根据读取到的不同URL请求,回调函数执行对应的业务;,这样可以显著减少内存占用和拷贝操作,提高传输效率。这使得它能够高效地处理不同大小的文件,而。evbuffer 的操作是线程安全的。
2025-05-19 22:00:35
397
原创 存储系统02——Libevent事件循环
工作过程为:一个负责监听和分发事件的事件循环(Event Loop)持续检查事件源(如文件描述符)的状态变化,使用同步事件分离器(Event Demultiplexer)将检测到的事件分发给对应的事件处理器(Event_handler),事件处理器执行完成后,控制权返回到事件循环,继续监听新的事件,重复上述过程。当有多个进程尝试进行对同一个文件进行I/O操作时,在阻塞I/O方法中,由于每个请求都会阻塞进程/线程,因此需要为每个请求分配独立的进程或线程来处理。
2025-05-19 21:14:55
910
原创 存储系统01——存储系统框架
使用双重检查锁定(Double-Checked Locking),避免每次访问资源时都进行加锁操作,降低锁带来的性能开销。config通过读取.conf文件的配置信息,并保存在Config类中;该模块使用懒汉单例模式,通过。获取全局唯一单例,并提供多个get接口获取config信息。DataManager类使用哈希表table_管理存储信息;初始化DataManager类时,调用。(用户刷新前端界面时,后端返回新的。从文件读取数据并进行反序列化;中的文件内容给浏览器)evhttp事件循环。
2025-05-17 17:11:09
456
原创 异步日志系统01——日志系统框架
异步日志系统框架包含日志记录器、格式化器、输出器和日志级别等核心组件。系统模块包括异步日志器管理、日志等级、日志格式化、异步日志器、异步缓冲区、异步工作者和日志输出模块。异步日志器管理模块采用单例模式,确保全局唯一性。
2025-05-15 15:10:23
782
原创 Linux内核——文件IO内核实现
函数用于打开或创建文件,并返回一个文件描述符fd,具体过程如下:无论是读操作还是写操作,都需要通过文件描述符fd进行IO操作,通过fd进行文件I/O操作的过程如下:
2025-03-29 22:23:26
228
原创 Linux内核——文件系统01(基本组成)
在Linux中,文件系统(Ext)将整个硬盘分为不同的块组(Block Group)来组织和管理数据(通过“分治”思想,对整个硬盘先进行分区,对每个区在进行分组,最后对不同的块组进行管理)
2025-03-20 22:09:27
816
原创 Linux内核——信号
信号可以通过硬件、软件的方式进行产生,无论是硬件还是软件均由系统内核给对应的进程发送信号以系统调用为例:sys_signal完成对该信号的处理函数的更新。
2025-03-19 20:54:47
378
原创 IO复用(select、poll、epoll)实例
多进程、多线程模型用来处理多个文件(设备)将造成系统性能的大量浪费,为了提高性能,采用I/O多路复用的方法;在Linux中,I/O多路复用尝常通过实现简要通过socket介绍这三种多路复用方法:(参考b站up:码上加薪链接:https://www.bilibili.com/video/BV1RJ4m1b7cy/?
2025-03-18 15:44:42
707
原创 网络通信——TCP
三次握手才可以阻止重复历史连接的初始化同步双方初始序列号建立连接的过程中,客户端、服务端双方均要确认对方的序号,因为下一次回复报文的确认号由序号确定避免资源浪费因为客户端、服务端双方都要确定既不能发送数据也不能接收数据了但如果被动关闭方没有要发送的数据且 == 开启了TCP延迟确认机制== 那么二次挥手、三次挥手就会合并,断开连接过程变为“三次挥手”开启了TCP延迟确认机制:ACK会等待响应数据,并和响应数据一起发送;解决ACK传输效率过低的问题。
2025-03-17 21:10:13
1100
原创 嵌入式——CAN
CAN由芯片内部CAN外设(CAN控制器)、CAN芯片(CAN收发器)、CAN总线(CANH、CANL);CANH - CANL = 2V,显性电平(逻辑0)CANH - CANL = 0V,隐形电平(逻辑1)CAN总线以“帧”形式进行通信。CAN协议定义了5种类型的帧:==数据帧、遥控帧、错误帧、过载帧、间隔帧,==其中数据帧最为常用。起始帧:start = 0(显性信号),长度1仲裁段:标识符位(ID)确定优先级,RTR= 0(数据帧)/RTR = 1(遥控帧)控制段:控制数据段长度。
2025-03-17 10:16:54
365
原创 Linux内核——进程管理02(进程调度)
切换前保存CPU中的TSS段到原进程TSS(PS:TSS存在于X86架构中,而在ARM架构中没有像 x86 那样的 TSS(Task State Segment)机制,而是通过直接保存和恢复 CPU 寄存器的状态来实现上下文切换)这里只是一个简单的优先级时间片轮转调度算法,其他调度算法(先来先服务FCFS、短作业优先SJF、最短剩余时间优先SRTN、多级反馈队列等)均可在这里进行实现;选择下一个执行的进程(调度核心部分),使用时间片轮转调度算法,进入进程切换过程。)而被暂停,任务可以通过信号(如。
2025-03-17 08:42:37
982
原创 嵌入式——SPI
SPI是一种串行外设设备接口(),SPI接口主要应用在存储芯片、AD转换器以及LCD中。SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。SCLK:时钟信号,由主设备产生MOSI :读数据,主设备数据输入,从设备数据输出MOSO :写数据,主设备数据输出,从设备数据输入CSS:从设备使能信号,由主设备控制,不同设备使能信号不同。
2025-03-15 15:25:10
442
原创 Linux内核——进程管理01(进程创建)
设置内容包括:pid、父进程pid、时间片优先级、tss、寄存器、分配代码段、数据段内存(调用。从这个系统调用过程可以看出:进程的创建就是一个进程的复制过程,或者说是对原进程的。3. 0号进程只会在其他进程不被调用时调用且不会结束,只会执行。在0号进程创建过程中提到进程的创建是一个系统调用的过程,因此在。函数)、继承父进程打开的文件、pwd、root目录等;1. 在task链表中找一个进程空位存放当前的进程。在内核初始化的过程中,会创建0号进程。2. 创建1号进程,在1号进程中打开。
2025-03-14 21:30:11
1008
原创 嵌入式——IIC
I2C是一种串行数据通信协议(),仅使用两根信号线SerialClock(简称SCL)和SerialData(简称SDA)。I2C作为总线结构,采用单主单从、单主多从方式,各从设备以7位地址区分;:SCL=1,SDA由1到0,Start信号仅由主设备发送:SCL=1,SDA八位数据(0~7)+ 应答位(ACK = 1)SCL跳变时SDA不能改变;SCL=0,SDA可以改变发送方发送完8位数据,释放SDA,由接收方应答(ACK/NACK):SCL=1,SDA由0到1,End信号仅由主设备发送。
2025-03-14 09:38:19
611
原创 i++和++i(递增运算符operator++)
++i:作为递增运算符的前置版本,对运算对象加1,然后将对象本身作为左值返回;i++:作为递增运算符的后置版本,对运算对象加1,然后将加1之前运算对象的副本作为右值返回;除了区分为前后置版本外,定义中有两个值得注意的问题:第一个是返回什么,第二个以什么形式返回。首先贴上两种版本递增运算符的一个可能实现:// 前置版本*this +=1;// 后置版本++(*this);首先从刚刚那两个问题入手,第一个问题:返回什么。前置版本返回对象本身。
2024-10-28 13:06:24
862
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅