我的Linux内核学习之路

我的Linux内核学习之路现在回首看看,接触Linux已经很长时间了。在大三的时候开始学习Java,但是一直学Java的话,感觉有点腻,就尝试找点其他东西来学习。所以当时就选择学习了Linux。至于为什么要学习Linux,有以下三个原因。 一是我比较喜欢开源的东西,当时学习Java就是因为它开源,以后选择学习Android很大一部分原因也是因为它开源。现在已经工作了大半年,每当有搞不懂的问

大家好,又见面了,我是你们的朋友全栈君。

现在回首看看,接触Linux已经很长时间了。 在大三的时候开始学习Java, 但是一直学Java的话, 感觉有点腻, 就尝试找点其他东西来学习。 所以当时就选择学习了Linux。 至于为什么要学习Linux, 有以下三个原因。 


一是我比较喜欢开源的东西, 当时学习Java就是因为它开源, 以后选择学习Android很大一部分原因也是因为它开源。 现在已经工作了大半年, 每当有搞不懂的问题, 通过翻看源代码解决了这个问题, 我都会很庆幸自己的选择。 开源对程序员的影响是巨大的。


 第二个学习Linux的原因是, 我感觉自己操作系统方面的知识太欠缺了, 因为自己不是科班出身, 大学学的是机电专业,只学过C语言, 所以基础的东西必须恶补回来。 学习操作系统理论知识有很多途径, 但是我还是决定选择一个具体的系统来入手, 那就只能选择Linux了, 资料和书籍也多, 源码也开放, 是学习的不二选择。 虽然每天都在用Windows, 但是基于Windows学习操作系统那可真是天方夜谭。 Linux才是程序员应该真正学习的好东西。 现在Linux越来越火, 在服务器和嵌入式等领域风生水起, 也让我坚信学好Linux对自己的职业生涯肯定是有百利而无一害。 也有人劝说我学习这个没用, 我已经在以前的博文 我为什么要学习Linux?这篇文章中做出过解释。


第三个学习Linux的理由是, 我喜欢它, 想搞清楚他的原理, 而且也愿意花时间去研究。 兴趣是最好的老师, 只有真正的喜欢一个东西, 才能把它学好, 就像娶个老婆, 你必须爱她, 才能和她一起度过漫长的岁月。 此外, 程序员的好奇心是天生的, 要是不弄明白一件事, 就会吃不下饭, 睡不着觉。 没有好奇心的程序员不是真正的程序员。



刚开始接触Linux的时候, 并没有想学习内核知识, 只是想尝试着使用它。 所以就读了一些基础性的, 偏应用的书籍。 读的第一本书当然是《鸟哥的Linux私房菜》啦。 网上评论这本书是最适合的“入门级”教材, 但是我感觉很有深度的, 并非仅仅是教你怎样敲命令行。 它讲的全面而且深入, 包括计算机组成原理,各个命令和参数的使用, 如何配置等等, 非常详尽。 给我最深印象的是文件系统那一章, 什么i节点, 超级块, 文件系统分区, 对于初学者而言高大上的概念都深入的讲了一遍, 看的太过瘾了。 


此后零零散散的学了一些linux相关的知识。 包括看了兄弟连李明老师的linux视频和传智播客韩顺平老师的linux视频, 感觉受益匪浅, 在此感谢两位老师的无私奉献。 当然要自己学会装Linux系统, 刚开始在VMware装的Centos , 此后又在真机上装的Ubuntu 。 记得当时装Linux很费劲, 总会出现这样那样的问题, 也导致自己很郁闷, 现在想来真是有点好笑。 但是这都是学习过程中必须承受的痛苦, 只有踏踏实实的一步一步走过来, 没有什么捷径可言。 知识的获取是艰难的, 任何一点知识的提升,都要付出很多的时间和精力。 


一次逛图书馆的偶然的机会, 看到了新设计团队的《Linux内核设计的艺术》, 读来很不错,虽然是以早期的Linux内核版本来讲解, 但是结构清晰, 讲解清楚, 配有很多插图, 这些插图都基本呈现了Linux内核的运行状态, 真是匠心独运啊。  书的大部分篇幅讲解了Linux内核的启动过程, 这也是本书和其他书籍不同的地方, 其实把启动过程弄明白也是一件相当不容易的事情, 因为启动过程基本上涉及到了内核各个方面的知识。 这本书读了两遍, 大三学习java的时候读了一遍, 毕业之前又读了一遍。这时候我对自己的评价还是仅仅停留在会使用Linux, 对内核的知识有一个模糊的印象, 虽然知道了一些内核中的概念, 但是对原理知之甚少。


然后我就很苦逼的毕业了, 要上班了。 我做的是Android应用开发的工作, 所以要将重心转移到Android上来。 这时候是2013年7月, android已经很火了, 市面上很多讲解android应用开发的书籍, 不过都是千篇一律, 天下文章一大抄。 有些还是直接翻译的android的官方文档。 因为android刚出现几年的时间, 毕竟很多人还没有学通, 没有能力自上而下的把android的架构讲清楚, 只能写一些关于四大组件的书籍, 连Framework框架也很少有提及的。 关于学习android, 我看过的最好的一本书是罗生阳的《Android系统源代码情景分析》, 还有他的专栏博客《老罗的Android之旅》, 从内核驱动层, 到硬件抽象层, 再到原生服务, 最后到运行时和Java服务, Framework框架。 真是至上而下, 全部搞定。 正是这本书, 促使我继续学习Linux内核。 


以我当时的水平(其实现在水平也不高), 看《Android系统源代码情景分析》这本书真是太难了, 很多讲的都是Linux内核相关的东西。 因为看不懂, 所以下定决心好好学习Linux内核。 其实学习继续Linux内核也不只是为了深入学习android, 毕竟操作系统的基础知识对于一个程序员是至关重要的, 趁年轻的时候大点基础, 修炼一下内功, 可能会在以后走的轻松些。 因为过一两年, 随着工作压力越来越大, 也随着精力越来越差, 可能就没有时间和精力打基础了, 然后就只能抱着现有的一点知识, 在这个行业苦苦挣扎, 然后抱怨干程序员是吃青春饭的。其实看看很多大牛, 无不是基础扎实, 内功深厚的人。 所以很多人抱怨干程序员没什么发展, 其实很大一部分原因是自己没有努力, 没有努力打基础, 练内功。 以至于让自己在漫长的职业生涯中抱残守缺, 然后逐渐被淘汰。 为了让自己避免陷入这一困境, 所以要让自己在年轻的时候打好基础。


 从毕业到现在, 看了很多Linux内核的经典书籍。 最先看的是毛德操教授的《Linux内核源代码情景分析》, 只看了上册, 只能说是囫囵吞枣过了一篇, 对内核中的一些概念有了更深“一点”的了解, 还称不上理解。 再加上这边书是以源码驱动的, 对于我这种菜鸟当然是不可能完全理解的。 我也知道自己不可能理解, 但是为什么还要去读呢?我认为不能每天都读自己已经懂得的东西,写自己已经写了N遍的代码。 因为总是做自己熟悉的东西, 是没有什么进步可言的, 必要的时候必须让自己忍着压力和痛苦, 去学习一些比较难的知识。 学一遍学不懂就学第二遍, 再学不懂就学第三遍, 总有一天会搞明白。 


看完毛教授的书, 感觉对内核的很多概念还是很模糊。 没关系 , 继续学习。 然后又读了《Linux内核设计及实现》,这本书不是大部头, 也讲的不是很深入, 对我来说很适合, 然后读了这本书。 然后又买了《深入理解Linux内核》, 接着读, 读完之后又买了《深入Linux内核架构》, 这两本书都是很有深度的, 可以说是大而全的书。 我以为读了之后会有很大的进步, 但是我想错了, 其实只有很小的进步。 然后自信心有点受挫。 尤其是看《深入Linux内核架构》,但是我再出差, 每天加班到晚上十点多, 回到宾馆已经快十一点了, 回去后就抱着书看, 每天都一两点睡觉, 然后第二天还得八点半上班。 感觉自己付出了这么多的努力, 然后就得到了少的可怜的回报 , 感觉心里挺难受的。 所以就先把Linux搁置起来了, 可能是我太心急了, 需要平静一段时间。 


在这最近一个多月的时间了, 我没有再啃Linux内核, 而是学了点Python , 学了一些Go语言, 看了看设计模式。 但是我知道自己一直没有放弃Linux内核。 纵然它虐我千百遍, 我却待它如初恋。 两周之前, 我有把以前读过的《Linux内核设计及实现》拿过来重读, 这次再读, 就明显感觉轻松了很多, 很多概念也熟悉了, 可以说理解的都差不多了, 对整个内核的运行机制有了更深的理解。 以前读这本书痛苦的要死, 现在一个多星期就读完了, 是完完整整的读完, 并且大部分内容都能理解的差不多。 这种感觉还是很好的。 其实真正完完整整的读完一本书,并且理解它讲的大部分内容, 是一件相当难的事。比如, 有人写了10年的Java代码, 给他一本《Java编程思想》, 他也不一定能全部看明白。  我也是在读完这本书之后, 感觉心情不错, 才想起写这篇博客, 记录下来这一个还算有意义的时刻, 在这里将这本书的封面记下来(该图片来自百度搜索):

我的Linux内核学习之路



到目前为止, 对于Linux内核, 我给自己的评价是 : 入门了 。  对于内核中的概念有了比较深刻的理解, 对大部分的原理也理解了, 对内核中如进程管理, 内存管理, 系统调用, 文件系统等的实现也有一定的了解。 但是我还会继续学习, 继续读《Linux内核源代码情景分析》, 继续读《深入理解Linux内核》, 继续读《深入Linux内核架构》。 但是在继续学习的时候, 要尽量做到下面两条:

1 尽量多读源码。 之前也读过源码, 但还算读的不多, 主要还是以读书为主。

2 尽量把自己掌握的知识写下来, 写成博客的形式。 写博客会让人进步很快。 其实关于Linux内核的知识, 早就想写一写了, 无奈腹中空空, 水平有限, 确实写不出来。 


写到这里, 我目前所走的Linux学习之路就写完了。 你看, 人生是多么的艰难, 折腾了这么长时间, 才刚刚入门而已。 但是又有什么办法呢? 希望付出的越多, 迟早一天会有丰厚的回报。 



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163618.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • angularjs基本执行流程

    angularjs基本执行流程

  • 汉语拼音发音教学视频_钢琴手把手教学视频

    汉语拼音发音教学视频_钢琴手把手教学视频pycharm汉化pycharm怎么改成汉语,手把手教学,超详细(汉语插件安装教程)首先,打开pycharm。然后点击左上角File(文件)会弹出如下页面继续点击蓝色位置Settings…(设置)会弹出一个页面如下:继续点击蓝色位置Plugins(插件)在搜索栏中输入chinese,如图然后安装第二个(可以滑动找一下),点击Install(安装),会加载一下下载进度条,然后变成这样:安装之后点击绿色按钮RestartIDE,会弹出点击蓝色按钮Restart,然后pycharm会重启,重启后

  • 一对兔子从出生后第三个月起每个月_兔子繁衍问题python

    一对兔子从出生后第三个月起每个月_兔子繁衍问题python7-6 兔子繁衍问题 (20分)一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?输入格式: 输入在一行中给出一个不超过10000的正整数N。输出格式: 在一行中输出兔子总数达到N最少需要的月数。 输入样例: 30 输出样例: 9#includ…

  • 使用 SSH 连接到 Linux 实例

    使用 SSH 连接到 Linux 实例

  • 互斥体与互锁 <第五篇>

    互斥体与互锁 <第五篇>

  • webpack es6转es5_nodejs支持es6吗

    webpack es6转es5_nodejs支持es6吗万恶的IE遗臭万年仍然需要填坑ie标准对html/css甚至js的规范简直相差甚远,所以,一般要解决的兼容问题很大一部分是为了解决ie的不兼容,虽然目前流行的ES6语法及规范将IE的考虑抛弃掉,默认放弃对IE的治疗,但是IE的兼容仍然是个问题!即使IE的使用率已经不到1%的市场占比。我们使用着舒服的ES6规范但是为IE又很头疼怎么办呢?Webpack开发了非常厉害的打包转换功能:转ES5!…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号