![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深入理解Linux2.6内核
文章平均质量分 85
程序员李哈
本平台分享技术帖,某站:李哈zzz分享技术视频
展开
-
Linux内核源码剖析之kmem_cache_create
一个操作系统对于内存的管理是非常的重要,关乎到整个系统的运行效率和内存最大使用率。内存管理从宏观来看,无非就是使内存达到最大使用率,减少内存的内/外碎片。而在Linux内核中使用伙伴算法(Buddy)管理一组页,使用Slab算法管理单独页,伙伴算法+Slab算法合理的避免内存的内/外碎片。那么今天介绍的kmem_cache_create方法就是Slab算法。原创 2023-08-29 16:49:56 · 831 阅读 · 0 评论 -
Linux内核源码剖析之TCP保活机制(KeepAlive)
为什么写下这篇文章,因为在实际项目中,是无法避免TCP通讯(对于这点,可能大部分Java程序员感受不到底层的网络通讯),正因为无法避免TCP通讯,恰好TCP通讯存在三次握手和四次挥手的过程,如果建立一次连接就三次握手和四次挥手,而我们清楚的知道三次握手和四次挥手是同步的过程,此过程也会带来不少的时间浪费和资源的浪费。所以Linux内核TCP网络协议栈就出现了KeepAlive机制,此机制减少三次握手和四次挥手次数,第一次建立连接后保持长连接,后续通讯就可以只考虑发送数据报文即可。往往出现一个机制解决某个问题原创 2023-08-15 15:12:04 · 2900 阅读 · 0 评论 -
Linux内核中__u16、__u32、__u64和size_t的理解
写在前面:文章选用版本信息:Linux内核2.6.0版本、x86架构。__u系列为什么会出现__u系列的宏定义呢?原因很简单,内核需要帮你适配不同cpu架构、cpu位数。因为在32位系统中,int和long都是32位4字节的大小。而在64位系统中,int是32位4字节、long是64位8字节。在32位机中表示64位需要写成long long,这样打包运行在不同位数的机器上,就会出现未知的问题。所以内核就帮开发者适配不同机器位数的大小,如下图所示,各个平台不同位数的cpu内核都已完成适配。在原创 2022-08-19 12:30:23 · 6859 阅读 · 2 评论 -
深入理解Linux内核select多路复用原理
写在前面:本文以Linux2.6.0的内核源码进行讲解,使用x86 32位机讲解。多路复用原理讲多路复用的原理,那么一定先要讲没有多路复用的弊端。传统的阻塞式,进程一旦io读写就开始阻塞,效率太低,导致整个系统的吞吐量急剧下降。那么,就有人要思考,居然要阻塞,那么我就使用线程去阻塞,那么一个系统的io操作如此之多,要多少个线程才能满足呢?线程是不是会占用资源?当线程多起来后分时复用的CPU需要一直切换上下文,切换上下文是不是在浪费CPU资源呢,会导致大量的时间在切换上下文?所以就引入了多路复用,把原创 2022-08-11 15:35:41 · 1326 阅读 · 1 评论 -
Linux内核中container_of宏定义讲解
在Linux内核中经常能在list_head双向链表和socket等等操作中看到使用container_of宏定义来取到具体的结构体。当然第一眼看到的时候就会觉得这是啥?这又是啥?这什么东西?为什么通过这个可以拿到结构体的基地址?问题不大,笔者会用此文章+画图的方法来仔细讲解container_of宏定义。那么,用一个列子+画图来理解把。在struct-A结构体中,存在几个变量,包括struct-B。当我们已知struct-B的绝对地址时,此时需要得到struct-A的绝对地址,..原创 2022-08-08 12:22:59 · 360 阅读 · 0 评论 -
深入理解Linux2.6内核中sys_mmap系统调用
在csdn逛了一圈发现并没有博主把sys_mmap讲的特别仔细,所以笔者觉得很有必要写一篇关于sys_mmap系统调用的文章。内核版本选自Linux2.6.0,CPU选自i386,32位机。sys_mmap的作用一言以蔽之,在虚拟内存指定的一段空间中开辟一段空间,此空间可以用来正常映射使用,也可以用来映射文件,所以如果是文件映射的话,文件数据就会映射在用户态空间。sys_mmap源码讲解流程图先放在这里。用户态根据0x80中断向量走idt表映射到SYSTEM_CALL然后查系..原创 2022-08-04 16:16:44 · 1092 阅读 · 1 评论