温馨提示

1、列表网提醒您:在交易前请仔细核实商家真实资质!如发现非法商家,欢迎广大网民举报,举报电话:4000-999-800。

2、该信息由列表网网友发布,其真实性及合法性由发布人负责,列表网仅引用以供用户参考,详情请阅读列表网免责条款。

3、在签订合同或相关协议之前,任何要求预付定金、汇款等方式均存在风险,谨防上当受骗!

详情描述

现如今,Linux的应用与学习日趋广泛,各种学习内容与方式也层出不穷,我个人认为,千锋教育的教育方式就别具一格,且极为实用。


“学习Linux内核”对不同的人有不同的含义,学习方法、侧重点、投入的精力也大不相同。我大致分三类:reader、writer、hacker。reader 就是了解某个功能在内核的大致实现 how does it work,一般不关心某些极端情况下(内存不足、受到攻击)的处理方法,对于看不懂的地方也可以跳过。我自己较多算半个 reader,只看我感兴趣的一小部分代码(我只关心 TCP 收发数据,不管 IP routingforwardingfragment 等,更不会去关心 ethernet 层),而且读一个函数一般只看主干(happy path),不管 经常忽略错误处理分支。writer 是给内核加feature和改bug的人,需要更进一步的知识,写代码要考虑 how not to break it。hacker 是通过分析代码找出安全漏洞并加以利用的人,研究 how to break it,读代码恐怕更注意找出error handling分支没有覆盖的case。内核向用户态提供的接口很稳定,但是内核的具体实现变化很快,你深入钻研获得的知识很容易就过时。比方说 Linux 的 TCP 实现在2015年3月新加了 TCPNEWSYNRECV 这个非标准的 TCP state,同年6月发布的 kernel 4.1 才开始用它。如果你学的是一年前的 kernel,那么建立TCP连接这方面的细节知识对于今年发布的 可能已经过时了。Linux内核的编码风格不值得效仿。比如 tcpv4rcv 这个函数,有很多 goto:tcpipv4.c [linuxnetipv4tcpipv4.c]Linux内核的一些做法在 C 语言中是合理的(比方说用包含函数指针的各种 xxxops 来手工实现虚函数表,通过控制 struct 内存布局来模拟继承:tcpsock 继承 继承 继承 sock 继承 sockcommon),在其他高级语言中往往有更简便的实现方式,不必生搬硬套。遇到 xxxops-somefunc(arg) 这种代码,思路容易断线,这个 xxxops 到底指向哪个具体实现?较好能把代码跑起来,用调试器单步跟踪,一下子就定位到了 callee。当然,读 OO 代码也会遇到这个困难,传进来的这个 interface 在运行时到底是哪份实现?读 Python 代码就更难了,函数参数光有个名字,连 type 都没有。Linux内核比较注重代码的通用性和复用性,要照顾那些虽然你用不到但少数人会用的需求。通用性方面,虽然现在大家都用以太网,但是网络协议栈的代码还在支持 FDDI、Token Ring(从 3.5 版起已删除)、ATM 等,偶尔会扰乱视线,更在原本简单直接的做法上增加间接层,加大了理解代码的负担。复用性方面,从 3.17 版开始,IPv4 和 IPv6 共享同一个 函数[tcp: add tcpconnrequest torvaldslinux1fb6f15 GitHub]。原来的做法是各自有 和 新合并的 为了处理 v4v6 的不同情况,用了一个 struct tcprequestsockops 参数,这代码读起来就比原来绕了。虽然我不关心 IPv6

图片展示

  • 杭州嵌入式linux培训个好
杭州嵌入式linux培训个好
1/1
  • 杭州嵌入式linux培训个好