1. 聚能聊>
  2. 话题详情

菜鸟变大神!如何成为Linux内核高手?

近些年来,使用安卓操作系统的智能手机热销,未来也将是物联网、大数据、云计算的大时代,而运行在这些相关产品最深处的几乎都是Linux内核。我一直在凝望你,你看不见我,我是谁?我是奔跑中的Linux内核。
95292826b5e86a6a0415860a4c5c610e00749817_jpeg

回顾学习Linux内核的那段经历,我愈发体会到Linux内核的功夫在Linux内核之外。Linux内核变得越来越庞大,特别是现在硬件的发展速度非常快,各种不同的思想和实现如雨后春笋一般,各种各样的补丁也让人眼花缭乱。对于一个初学者或者有经验的工程师来说,要阅读和理解最新版本的Linux内核变得越来越困难。而且现在市面上Linux内核书籍都比较旧,最经典的《深入理解Linux内核》讲述的是Linux 2.6.11内核,它发布于2005年,《深入Linux内核架构》中讲述的Linux 2.6.24内核是2008年1月发布的。以每2~3个月发布一个Linux内核新版本的速度,这些书中的内核版本与当前的4.x内核不可同日而语。另外,我发现身边不少朋友很想把Linux内核吃透,然后购买了不少Linux内核的书籍,但有时好几天也没读几页。究其原因是,现在市面上已有的Linux内核书籍大多是教科书式地讲述知识点,机械式地讲述内核代码的实现,读起来很容易让人犯困。

欢迎大家来讨论下:

该如何来学习Linux内核才最好?看书or网络课程之类?

从你的经验来看,最佳的Linux内核学习路线是怎样?

分享下你对Linux内核相关的比如内存管理,进程调度,锁,中断,调试技巧等的学习经验吧!

以上话题,大家可以任选其一来展开聊聊,也可以多选几个你了解的来聊聊!

参与互动就有机会获得我的新书《奔跑吧Linux内核》、淘公仔、阿里云代金券哟!
fd70fbbd1bbf5fd9b931c04a204f0819f23e1bf7_jpeg

新书介绍请戳:《奔跑吧Linux内核》之处理器体系结构

参与话题

奖品区域 活动规则 已 结束

  • 奖品一

    阿里云代金券 x 3

  • 奖品二

    星座淘公仔 x 2

  • 奖品三

    奔跑吧,Linux内核 x 3

280个回答

2

fsociety 已获得阿里云代金券 复制链接去分享

以前学操作系统学过一点内存管理,进程调度,锁,中断啥的😂
内存管理里边有内存和外存,内存包括内存和寄存器,可由cpu直接访问,外存就是硬盘tf卡优盘磁带啥的,因为cpu读写速度快 外存不可能跟上cpu的读写速度,所以增加了高速缓存cache,以缓解它们的速度差,其速度介于cpu和外存,有的可能还有二级三级四级缓存,是属于外存的吧。
内存很容易出现碎片,因为删除东西后删除的那一块就空出来了,可能很小 然后后面写的时候这块放不下写的东西,然后就跳过了这块区域,还可能写的东西比这块小点 然后写完后这里还留下一小块碎片,如果这样的小碎片越积越多的话就浪费了很多空间,这时可以适当调整区块大小,不能太大也不能太小,再然后就是出现了链式存储方式吧,区块都有地址编号和一个指针指向下一块连续或不连续的连续存储区块,这样就有效的解决了碎片问题,就是加上寻址时间稍微减慢了读写速度。
进程调度的话是为了让cpu最大化使用,还有就是防止死锁。
每个进程都有一个进程控制块,其中包含进程所需的各种资源 进程状态 地址等,进程状态大致分为执行 阻塞 就绪等,细分的话还可以分出一些来,当进程申请完系统资源后就会进入就绪队列,当前面的进程都开始执行后并且小于了最大进程数,该进程就开始执行,接着就有很多进程调度算法了,什么时间片轮询法 什么抢占式优先法 什么短作业优先法等等。其间可能因为进程们需要的某一资源总数大于了系统所拥有的该资源数量,进程们就一直抢夺这些资源,然后就打起来了😂然后就死锁了。 还有可能进程执行到一半发出IO请求,这时进程就暂停了来等待用户的输入,这就是进程中断。
进程执行完后就释放系统资源,其pcb也没了。
学的都忘得差不多了,如有错误请见谅😄😄😄

笨叔叔 回复

哈,讲的很棒

fsociety 回复

然而市面上大多数都是讲老内核的。。。

笨叔叔 回复

我觉得您写的不错,打赏鼓励您一下,希望您可以多多帮忙宣传一下《奔跑吧》,给身边有需要的小伙伴推荐推荐,记得发朋友圈哟

fsociety 回复

好想要这本书😂

笨叔叔 回复

哈哈,已经打赏过了,好像没机会再打赏了,呵呵,加油,希望奔跑吧可以给大家带来一点有意思的东西

评论
1

shawn.ss 已获得奔跑吧,Linux内核 复制链接去分享

这话题够高级,求新书求新书
该如何来学习Linux内核才最好?看书or网络课程之类?
纸上得来终觉浅,绝知此事要躬行
可惜就是linux的build环境和各种折腾的东西太多,弄起来实在有点让人犯怵。
操作系统的各种内存分配,进程调度之类的理论确实很多资料都能看到,解决服务器的一些问题也确实靠这些当基础,但是基本上只会这些也搞不定,所以自己学习内核就是遇到一个问题,就去查资料,深钻进去,然后可以碎片化的学习一点,印象深刻。
从你的经验来看,最佳的Linux内核学习路线是怎样?
我是先从脚本学起,会用Linux,之后再从脚本接触到某些核心的操作(kill -9,mkswap 之类的),然后再去查这些操作背后的Linux的各种资料,这种实用主义路线进展比较缓慢,内核部分其实还是知之甚少。目前不知道最佳路线是什么。
分享下你对Linux内核相关的比如内存管理,进程调度,锁,中断,调试技巧等的学习经验吧!
弄清原理很简单,用到实践上很难,要学习这块,读代码和实践应该都需要,其实没什么经验,还是新手菜鸟

笨叔叔 回复

写的不错哟

众聚科技 回复

.

笨叔叔 回复

我觉得您写的不错,打赏一本奔跑吧给您,希望您可以多多帮忙宣传一下《奔跑吧》,给身边有需要的小伙伴推荐推荐,记得发朋友圈哟

shawn.ss 回复

非常感谢,一定帮忙

评论
0

无神 已获得奔跑吧,Linux内核 复制链接去分享

该如何来学习Linux内核才最好?看书or网络课程之类?
不管白猫黑猫能抓住老鼠的才是好猫。个人认为看书和网络课程互相结合起来其实是最好,看书的学习方式是比较快的,通过看书的方式可以快速掌握知识点,书籍做笔记和复习都是笔记方便快捷的。而且不像网络课程,需要移动设备和PC设备等等。看书的好处很多,但是能没有网络课程的那种直观性,加上版面问题,会有部分没有详细说明的内容。所以学习Linux内核最好二者结合起来,重点看书学习,再通过网络课程巩固和查漏补缺。
从你的经验来看,最佳的Linux内核学习路线是怎样?
个人学完基础之后就去跟公开项目去了,不懂的就查,要用的就学。走的非正规路线。所以学习路线什么的真心不敢谈。不过如何第一个要学习的肯定是Linux基础知识,基础嘛永远都非常重要。
分享下你对Linux内核相关的比如内存管理,进程调度,锁,中断,调试技巧等的学习经验吧!
学的比较乱,总的概括一下吧。
1.学习和记忆:学习内存管理肯定要先去学习这方面的知识,通过书籍,网络课程等等方面的资料。而学习过程中对于一些重要的知识点肯定要做好笔记和回顾知识点,不能学了之后不去记忆,理论和实际操作结合记忆会比较深刻。
2.理解,学习过程中遇到的一些不懂的知识和疑问,要即使通过百度,社区提问或者咨询一些前辈来弄懂,比如操作实现的原理,代码用途等等。如果你这些都解决了,也就学到了。
3.通过关注专家们的博客或者其他途径去看看自己和其他人对知识运用方面的异同,不断提高自我。
PS:恭喜张老师新书开售,哪里有签名的书可以入手。

笨叔叔 回复

谢谢您分享学习经验,的确 看书和看代码,然后动手调试内核代码,善于归纳总结,这是最好的学习方法。

欢迎您关注《奔跑吧》,奔跑吧提倡 带着问题去阅读linux内核源代码。

签名本只有100本,预售当天就卖完了,抱歉了!!

无神 回复

啊,那真的太遗憾了。阅读有签名的书,心里有种非常微妙的感觉。不过今后只要在这条路上继续走下,就一定会和老师相遇的,到时老师当面给我签一个吧。上面麦老师也在找有签名的书哦。

笨叔叔 回复

好的,下次见面 在签哟

笨叔叔 回复

我觉得您写的不错,打赏一本奔跑吧给您,希望您可以多多帮忙宣传一下《奔跑吧》,给身边有需要的小伙伴推荐推荐,记得发朋友圈哟

无神 回复

(o゜▽゜)o☆,谢谢张老师,身为后辈,被老师用“您”来称呼实在不敢当。一定让《奔跑吧》霸屏我的朋友圈。

评论
1

巴洛克上校 已获得星座淘公仔 复制链接去分享

该如何来学习Linux内核才最好?看书or网络课程之类?
视频教程入门,看书补漏,多动手,多看技术博文,多利用收索引擎,

从你的经验来看,最佳的Linux内核学习路线是怎样?
Linux内核学习,我认为首先要打基础,基础打牢再反过来研究深入的东西会容易很多,基础不牢就想一口吃个胖子,多半会噎到全吐出来,结果就是没有信心放弃学习;所以说看视频教程学习基础,之后看书巩固,实际操作深入理解其中的原理,遇到问题举一反三,寻找答案,Google就是很好的老师;

分享下你对Linux内核相关的比如内存管理,进程调度,锁,中断,调试技巧等的学习经验吧!
对内核了解的太少了,没什么经验,但有一点只要喜欢那就是最好的老师,兴趣能驱使你完成很多的事情。

ps:殊不知能有幸阅读下笨叔叔的书籍学习学习

笨叔叔 回复

谢谢,如果觉得《奔跑吧》不错的话,记得推荐给身边的小伙伴!

笨叔叔 回复

我觉得您写的不错,打赏鼓励您一下,希望您可以多多帮忙宣传一下《奔跑吧》,给身边有需要的小伙伴推荐推荐,记得发朋友圈哟

评论
1

必需填写 已获得阿里云代金券 复制链接去分享

我觉得想深入了解Linux内核,得有几个(条件)准备吧,比如我就没有准备好。
1、学习的方法
很早就接触到1句话: 方法不对,学死你都学不会。其实就简单拿内核而言,它是照着正常的思路、逻辑一样设计的(不像中国法律一样有各种奇葩点),所以方法对了感觉不对太难死人。
如何学习?

①: 大体架构(每块都是干嘛的) <--这点真心很难忘掉,且方便记录,忘了容易补充的看下就又拿回来了。
②: 大体业务流程 <--业务这个词可能描述的不是太恰当,无非是一些简单的调度,什么*级内存寻址,内存cache策略,任务调度策略...巴拉巴拉,且这一块对现实实战很有用,大多数的线上性能监控、判断的逻辑都可以由此步大致推倒出来。据我观察,9成的运维工程师没达到这个指标。
③: 详细的某块逻辑 <--话说,东西要一点一点吃,其实内核也是的。如果想走马观花,实际达到上述的②即可
④: 准备好长期学习 <--如果你是深入,可能你要去了解老版内核以及新版内核的某块(③处)的变迁,以及后续会这些事件的长期跟进,想必这是一个深入者或者专家应该做的。(此处打下那些35岁以后不适合做it的人的脸,Linux发展到100年的时候,肯定会存在一大批70 80岁的老专家)

2、学习的目的
个人目的: 个人想成为专家,那这就是个目标。要有几十年都在这个上边的心态,所以不要急,慢慢来,面包总会有的。如果你喜欢各种涉猎...
工作目的: 这个就简单的多了,想必没哪个公司要求你面那么广去做深研的,一般都是里面的几个模块吧。这样抓住重点,进度也会快。

3、生活+学习融入到一起
像Linux一样去生活

笨叔叔 回复

谢谢,如果觉得《奔跑吧》不错的话,记得推荐给身边的小伙伴!

笨叔叔 回复

我觉得您写的不错,打赏鼓励您一下,希望您可以多多帮忙宣传一下《奔跑吧》,给身边有需要的小伙伴推荐推荐,记得发朋友圈哟

评论
1

鱼狐小仙 已获得星座淘公仔 复制链接去分享

首先阐述一个观点

不是所有菜鸟都能成为大神站在菜鸟的平台应该多问自己我为什么要学编程 为什么要学系统核心(指的是Linux系统) 为什么要这么说呢?你都认为自己是菜鸟这就要先多去培养兴趣 兴趣 兴趣(重要的事说三遍)其次有了兴趣后再去学习编程,这样在编程的路上才会很愉快和轻松
问题是如何学习好Linux核心呢?

纯属个人观点
1.刚才上面所阐述的。
2.坚持不惜一切想成为你所成为的那个人没有那么简单,学习生涯也是如此会有很多你解不了的问题这个时候很多菜鸟很容易放弃(我遇到很多这样的人)但是想想你的初衷为什么选择 一个字 坚持!
3.多看书 多去跟你想成为你心中的大神那样的人去学习交往 多去培养兴趣 多去查阅大神写的代码带着问题多去请教老师

以上纯属个人观点 可以喷

笨叔叔 回复

写的不错哟

评论
0

atomxiao 已获得奔跑吧,Linux内核 复制链接去分享

Linux内核学习之路 从理论难点到技术实作 不能缺少一本带节奏的技术书籍和一个可以探讨技术问题的群组 关于这两点 奔跑吧Linux内核值值得一读

笨叔叔 回复

我觉得您写的不错,打赏一本奔跑吧给您,希望您可以多多帮忙宣传一下《奔跑吧》,给身边有需要的小伙伴推荐推荐,记得发朋友圈哟

评论
1

似水的流年 已获得阿里云代金券 复制链接去分享

看书+上课比较好,如果基础不好,应该先从应用层入手,把应用层熟悉后,再来看内核。因为内核是为应用服务的,精通应用层以后,再去分析内核源码,这样层层深入,容易理解。
熟悉内核源码可以先阅读经典的内核书籍,重要的是理解原理。从系统调用的API入手分享;从自己熟悉的领域入手。以我自己为例,我的领域是网络,所以看内核源码就是从网络模块入手,这样看起来事半功倍。阅读内核Document目录下的自带文档——写的相当好。比如讲memory-barrier.txt,把编译器的优化,CPU的乱序执行,讲的相当清楚;写一些简单的内核代码,可以从独立的内核模块开始;坚持每天都看看内核代码,可以尝试修改内核。

1

1148203835228089 复制链接去分享

想起自己第一次接触的Linux指令

rm -rf

iamc 回复

根目少了一个 /

笨叔叔 回复
回复@iamc:

哈哈,原来是Linux骨灰级玩家

麦老师 回复

/* 更好

评论
1

麦老师 复制链接去分享

该如何来学习Linux内核才最好?看书or网络课程之类?
听朋友说《深入理解linux内核》还不错,但是一直买来,也没看过,不过这本书,太老了,现在也有些过时了,楼主这本《奔跑吧Linux内核》应该还不错,默默的支持下楼主,希望《奔跑吧Linux内核》大卖……ლ(╹◡╹ლ)

从你的经验来看,最佳的Linux内核学习路线是怎样?
我从事了几年linux运维,也从来没研究过这些底层的东西,觉得惭愧啊,学习内核前,linux基础最重要吧,如果连linux的一些操作都不会的话就去研究内核,我觉得有些吃力了。

PS:老师的新书哪里有签名版

无神 回复

老师说,预售当天就没了。

评论
0

a狸 复制链接去分享

很厉害啊

笨叔叔 回复

谢谢哟,可以关注《奔跑吧Linux内核》

玩具阿童木 回复

新手 学习中

评论
0

20765087 复制链接去分享

很好,不错。

笨叔叔 回复

谢谢哟,可以关注《奔跑吧Linux内核》

艺术名家 回复

已关注

评论
0

1968303629943317 复制链接去分享

ms现在也在拥抱linux红帽了

笨叔叔 回复

是的哟,Linux无处不在

艺术名家 回复

对的

评论
1

1427403567406342 复制链接去分享

工作七年以来,对Linux了解都是保持学以致用的态度进行。目的性很强,平时通过互联网去获取Linux知识点。很希望能得到一本全面解释Linux内核的书。

笨叔叔 回复

谢谢哟,可以关注《奔跑吧Linux内核》

评论
0

洵云 复制链接去分享

主要还是看书吧

笨叔叔 回复

谢谢,如果觉得《奔跑吧》不错的话,记得推荐给身边的小伙伴!

评论
0

1381394139640025 复制链接去分享

奔跑吧linux内核

笨叔叔 回复

谢谢,如果觉得《奔跑吧》不错的话,记得推荐给身边的小伙伴!

评论
0

aldonah 复制链接去分享

用了很多年的windows
最近开始学java了
估摸着要学下linux了
看书为主,不理解的部分再看视频吧

笨叔叔 回复

谢谢,如果觉得《奔跑吧》不错的话,记得推荐给身边的小伙伴!

评论
0

a狸 复制链接去分享

很想了解liunx

笨叔叔 回复

谢谢哟,可以关注《奔跑吧Linux内核》

评论
0

1233203592825359 复制链接去分享

很好的!!!

笨叔叔 回复

谢谢哟,可以关注《奔跑吧Linux内核》

评论
1

笨笨的粽子妞 复制链接去分享

完完全全彻彻底底的一名Linux小白,所以,要学的东西还很多,要走的路还很长啊~

14