<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[slhywll的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/slhywll</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; slhywll]]></copyright><item><title><![CDATA[内核init section 模块demo]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/138535032</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/138535032</guid><author>slhywll</author><pubDate>Tue, 07 May 2024 16:01:30 +0800</pubDate><description><![CDATA[以上代码是新增一个自定义的section，为了使用该section内的函数，需要定义一个起始的位置，这个是在.S链接脚本中实现的。demo中的section存储的数据格式为mydyh_desc结构体，因此sizeof(mydyh_desc) 大小为一个元素。]]></description><category></category></item><item><title><![CDATA[linux网络协议栈2--网络包接收发送流程]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/135674963</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/135674963</guid><author>slhywll</author><pubDate>Thu, 18 Jan 2024 15:03:29 +0800</pubDate><description><![CDATA[大家有兴趣的话可以细看文字段落，不感兴趣的话看看两张图片，想想其中的流程即可。]]></description><category></category></item><item><title><![CDATA[linux网络协议栈1--基础报文格式]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/135674007</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/135674007</guid><author>slhywll</author><pubDate>Thu, 18 Jan 2024 14:38:27 +0800</pubDate><description><![CDATA[*IP头定义，共20个字节*///版本信息(前4位)，头长度(后4位)// 服务类型8位//数据包长度//数据包标识//分片使用//存活时间//协议类型//校验和//源ip//目的ip注意：ip报文头20个字节，但是在实际的数据包中可能长度大于20（有一些选项）/*TCP头定义，共20个字节*/// 源端口号16bit// 目的端口号16bit// 序列号32bit// 确认号32bit// 前4位：TCP头长度；中6位：保留；后6位：标志位// 窗口大小16bit。]]></description><category></category></item><item><title><![CDATA[linux内存管理4]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/135658493</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/135658493</guid><author>slhywll</author><pubDate>Wed, 17 Jan 2024 19:25:21 +0800</pubDate><description><![CDATA[伙伴系统会将它所属物理内存区 zone 里的空闲内存划分成不同尺寸的物理内存块，这里的尺寸必须是 2 的次幂，物理内存块可以是由 1 个 page 组成，也可以是 2 个 page，4 个 page … 1024 个 page 组成。内核将这些相同尺寸的内存块用一个内核数据结构 struct free_area 中的双向链表 free_list 串联组织起来。]]></description><category></category></item><item><title><![CDATA[linux内存管理3]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/135658118</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/135658118</guid><author>slhywll</author><pubDate>Wed, 17 Jan 2024 19:03:42 +0800</pubDate><description><![CDATA[如上图所示，内核会为 NUMA 节点中的每个物理内存区域 zone 分配一个伙伴系统用于管理该物理内存区域 zone 里的空闲内存页。而伙伴系统的核心数据结构就封装在 struct zone 里.在本小节中，我们聚焦于伙伴系统相关的数据结构介绍~~struct zone 结构中的 managed_pages 用于表示该内存区域内被伙伴系统所管理的物理内存页数量。伙伴系统的真正核心数据结构就是这个 struct free_area 类型的数组 free_area[MAX_ORDER]。]]></description><category></category></item><item><title><![CDATA[linux内存管理2]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/135652715</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/135652715</guid><author>slhywll</author><pubDate>Wed, 17 Jan 2024 15:52:13 +0800</pubDate><description><![CDATA[首先 CPU 将物理内存地址作为地址信号放到系统总线上传输。随后 IO bridge 将系统总线上的地址信号转换为存储总线上的电子信号。主存感受到存储总线上的地址信号并通过存储控制器将存储总线上的物理内存地址 A 读取出来。存储控制器通过物理内存地址定位到具体的存储器模块，从 DRAM 芯片中取出物理内存地址对应的数据。存储控制器将读取到的数据放到存储总线上，随后 IO bridge 将存储总线上的数据信号转换为系统总线上的数据信号，然后继续沿着系统总线传递。]]></description><category></category></item><item><title><![CDATA[linux内存管理1]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/135651053</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/135651053</guid><author>slhywll</author><pubDate>Wed, 17 Jan 2024 15:06:07 +0800</pubDate><description><![CDATA[内核态的虚拟地址空间中，有一段直接映射区，在这段虚拟内存区域中虚拟地址与物理地址是直接映射的关系，虚拟内存地址直接减去一个固定的偏移量（0xC000 0000 ） 就得到了物理内存地址。直接映射区中的物理页的虚拟地址会随着物理内存地址变动而变动, 因此这部分物理页是无法轻易迁移的，然而不可迁移的页会导致内存无法被拔除，因为无法妥善安置被拔出内存中已经为进程分配的物理页。那么内核是如何解决这个头疼的问题呢？]]></description><category></category></item><item><title><![CDATA[dpdk]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/130820914</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/130820914</guid><author>slhywll</author><pubDate>Wed, 17 Jan 2024 11:31:49 +0800</pubDate><description><![CDATA[DPDK全称为Date planedevelopment kit，是一个用来进行包数据处理加速的软件库。绕过内核方式通过mmap将pcie设备的bar空间映射到用户空间，之后对其进行操作即可技术点1）UIO2）HugePage内核收数据包处理流程：网卡收到报文后，通过DMA机制将报文放到内存；网卡触发中断通知系统有报文到达，系统分配sk_buff,将报文copy到sk_buff;经过协议栈处理，将报文传送到用户态应用程序处理。]]></description><category></category></item><item><title><![CDATA[elf文件格式]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/135645636</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/135645636</guid><author>slhywll</author><pubDate>Wed, 17 Jan 2024 11:27:18 +0800</pubDate><description><![CDATA[ELF的英文全称是The Executable and Linking Format，最初是由UNIX系统实验室开发、发布的ABI(Application Binary Interface)接口的一部分，也是Linux的主要可执行文件格式。本文主要从elf文件的组成构造的角度来进行分析，将elf文件的解析通过一步一步的分析得到里面的信息，同时通过python脚本解析，可以直观的看到文件的信息，通过本文的阅读，将对elf文件格式有着更加深刻的理解。]]></description><category></category></item><item><title><![CDATA[红黑树 (c实现)]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/135623562</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/135623562</guid><author>slhywll</author><pubDate>Tue, 16 Jan 2024 14:39:11 +0800</pubDate><description><![CDATA[我们这里直接实现C语言的红黑树，为了方便后序的旋转操作，将红黑树的结点定义为三叉链结构，除此之外还新加入了一个成员变量，用于表示结点的颜色。int _data;]]></description><category></category></item><item><title><![CDATA[mqtt client从tcp开始实现]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/135022100</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/135022100</guid><author>slhywll</author><pubDate>Fri, 15 Dec 2023 17:48:13 +0800</pubDate><description><![CDATA[1：下载服务器连接代码，编译运行2：使用mqtt客户端进行连接3：使用下面的自己编译的客户端进行连接，测试。]]></description><category></category></item><item><title><![CDATA[【http-server工作流程demo]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/135006754</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/135006754</guid><author>slhywll</author><pubDate>Thu, 14 Dec 2023 23:41:54 +0800</pubDate><description><![CDATA[makefile如下。]]></description><category></category></item><item><title><![CDATA[http-client源码解析]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/135000725</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/135000725</guid><author>slhywll</author><pubDate>Thu, 14 Dec 2023 17:48:35 +0800</pubDate><description><![CDATA[代码路径，使用example/http-server, 选择tag7.7 版本的，直接make，如果有问题在makefile中添加-std=gnu99。以上为http-client是如何运行的详解。编译后直接运行./a.out即可。]]></description><category></category></item><item><title><![CDATA[rocksdb]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/131049193</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/131049193</guid><author>slhywll</author><pubDate>Mon, 05 Jun 2023 15:32:15 +0800</pubDate><description><![CDATA[ColumnFamilyHandle:CF描述符，类似文件描述符，可简单理解为Map的指针DBImpl类关系IteratorDBIter。]]></description><category></category></item><item><title><![CDATA[udp协议栈]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/130874223</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/130874223</guid><author>slhywll</author><pubDate>Thu, 25 May 2023 20:01:27 +0800</pubDate><description><![CDATA[下一步，对网卡驱动进行分析，研究网卡是如何进行数据的发送和接收的。使用netmap接收网卡数据，对接收的数据进行解析。]]></description><category></category></item><item><title><![CDATA[设计模式理论系列2]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/130755620</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/130755620</guid><author>slhywll</author><pubDate>Thu, 18 May 2023 21:22:38 +0800</pubDate><description><![CDATA[解决问题：一个复杂对象的创建工作，各个部分剧烈变化，组合起来在一起的算法相对稳定和模板模式的区别主要是，构建模式主要复杂对象的创建。]]></description><category></category></item><item><title><![CDATA[设计模式理论系列1]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/130737514</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/130737514</guid><author>slhywll</author><pubDate>Wed, 17 May 2023 23:56:40 +0800</pubDate><description><![CDATA[本质上就是多态的应用，虚函数。]]></description><category></category></item><item><title><![CDATA[bluestore到rocksdb流程]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/130363977</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/130363977</guid><author>slhywll</author><pubDate>Tue, 25 Apr 2023 14:19:58 +0800</pubDate><description><![CDATA[【代码】bluestore到rocksdb流程。]]></description><category></category></item><item><title><![CDATA[Pool写数据流程]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/130183020</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/130183020</guid><author>slhywll</author><pubDate>Sun, 16 Apr 2023 15:20:29 +0800</pubDate><description><![CDATA[1）调用rados_create()创建一个RadosClient对象。2） 调用rados_config_read()，现在函数名为rados_conf_read_file，读取配置文件。3）调用rados_connect()函数，最终他会调用RadosClient::connect()来完成初始化4）调用rados_ioctx_create()，它最终调用RadosClient::create_ioctx()穿件pool相关的IoCtxImpl类。]]></description><category></category></item><item><title><![CDATA[librados::IoCtxImpl::write写流程分析]]></title><link>https://blog.youkuaiyun.com/slhywll/article/details/130182839</link><guid>https://blog.youkuaiyun.com/slhywll/article/details/130182839</guid><author>slhywll</author><pubDate>Sun, 16 Apr 2023 15:08:24 +0800</pubDate><description><![CDATA[librados::IoCtxImpl::write写流程分析]]></description><category></category></item></channel></rss>