关于linux内核

内核是一个让人既爱又恨的东西.

读书的时候,我就一直就想读一下内核的源码,但是那个时候真的只能说基础薄弱,而且从来没有接触过那么大的一个项目,不知从何入手,所以这个计划就一直被搁浅.我曾经跟着公开课鼓捣过好几份内核源码,但是那些源码只是玩具一样的东西,和真实环境中使用的内核不可同日而语.不得不说,不能深入虎穴,实乃人生一大憾事.

出学校的第一份工作和网络有着千丝万缕的关系.虽然第一年做的东西和内核不太相关,可是越到后面,越发现,如果不能正确理解内核,我很难做好手中这份工作,毕竟,一个做网络的人,怎么能对内核协议栈过分生疏呢?因此,大致从第1年起,我就找了一些linux方面的书,想着边看代码,边看书,相得益彰.由于工作的忙忙碌碌,第一遍滚内核协议栈的路程,断断续续,一走就是1年多。 要说收获吧,也有,我只是加深了对内核协议栈的了解,这种了解并不是很全面,每一个知识点都离散开来,虽然遍地开花,但是连不成片,构不成面,总觉得还差了点啥。

第一遍走完,感受还是不怎么深,然后进入第二年,发现技术上面,时常要处理一些linux相关的问题,包括arp,cpu占用高等,为了了解这些东西,我又硬着头皮去回顾了一下linux内核协议栈。顺带还买了一些评分比较高的书籍对照着看,包括linux驱动架构,cpu运行原理等.

就这样,断断续续又过了一段时间。终于到了今年这段时间,在了解了软中断,硬中断,中断向量,地址映射等概念之后,我突然发现,虽然还是有些困难,内核代码确实已经可以读下去了。内核是一个整体,知道了一些核心的知识之后,原来离散的知识点连成了片,构成了面,整个协议栈的运行流程我已经比较清晰了,报文怎么转发,怎么发送也有大致的了解,现在唯一欠缺的,就是更加深入的去琢磨每一个小的知识点,比如聚合口的实现,网桥的实现,tcp协议的实现,路由的实现.那些东西终究不算太难,花一些时间,总是可以摸得很清楚的.

现在看来,linux内核其实并没有那么可怕,我们其实也并不需要将所有代码都一一读完,比如你做网络,就只需要读协议栈即可,这里总的代码量,估计不超过4w,比上层应用库的大小小多了.

如果你也想读的话,我这里给一些建议:
1.我建议你先了解一下linux的基础设施,包括自旋锁,等待队列,定时器,硬中断,软中断这些内容,这些算是基础,了解这些之后,后面读起来会轻松很多.
2. 在读相关模块之前,先了解一下相关领域的知识,比如在读tcp模块之前,你最起码要知道tcp有哪些字段,每个头部选项怎么使用,在你没有相关知识之前,不建议去强读,收益不大.
3. 相关推荐书籍如下:

<操作系统真相还原> -- 比较厚,但是一些基本的知识点还是讲的很透彻
<x86汇编语言 从实模式到保护模式> -- 这本书我很早就推过,可以当做上一本的参考书籍
<深入linux设备驱动程序内核机制> -- 了解软中断以及一些必要的基础设施的好书,不一定非得写驱动
<linux网络内核分析与开发> -- linux协议栈的简单入门书籍,值得一读
<linux内核源码剖析--tpc/ip实现> -- 比较深入的了解协议栈,可以跟着读协议栈的代码

还有一些,也可以读一下:
<linux内核完全剖析 -- 基于0.12内核> -- 可以简单看一下,读了上面的书籍,应该没有啥难点
<深入理解linux网络技术内幕> -- 这本书是提纲挈领式的,适合高手和老鸟看,没有具体讲代码,讲了实现思想.

其实内核的代码实现很优秀,比我们某些程序员写的代码容易读多了.算了,写了这么多,我其实就想感慨一句:

今天,我终于站到了这里,今天,我终于有能力一探内核的方方面面,好的,那就开始吧,不用害怕.

读核笔记如下:
https://github.com/lishuhuakai/Linux-Kernel-network-protocol-stack-Reading

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值