免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 51885 | 回复: 80
打印 上一主题 下一主题

[实践] 深度探索Linux:系统构建和原理解析大家谈!(获奖名单已公布-2013-11-14) [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-15 14:53 |只看该作者 |倒序浏览
获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-4111543-1-1.html

对于普通的Linux用户和爱好者来说,没有也没用必要从零开始构建一个完整的Linux操作系统,但是作为Linux操作系统学习或者工作人员来说,这是非常有价值的工作。这种方式的妙处在于,先从宏观上全面认清一个完整的操作系统中都包含哪些组件,各个组件的作用,以及各个组件间的关系,从微观上深入理解系统各个组件的原理,能避免在以后的学习和工作中再走弯路。

学习操作系统,有三件最重要的事:第一是实践,第二依然是实践,第三还是实践。老祖宗说“纸上得来终觉浅”,唯物主义者说“实践是检验真理的唯一标准”,两句话中都蕴含着同一个道理——追求真理离不开实践。只是阅读、分析源码还远远不够,我们要动手实践,从实践中学习,实践反过来再促进思考。而且,实践也使学习不再是一个枯燥乏味的负担,而是一个乐趣。


本期话题:
1、说说您的Linux内核源码的学习经验和感受
2、对于普通的Linux程序员和运维人员,是否有必要学习Linux系统构成及源码等基础知识

本期嘉宾:
ChinaUnix内核源码版版主:Godbach
ChinaUnix内核源码版版主:瀚海书香
《深度探索Linux操作系统:系统构建和原理解析》作者:王柏生 老师

活动时间:
2013年10月15日-11月5日

本期奖品:
活动结束后,我们会评选出5位积极参与话题讨论的网友奖励《深度探索Linux操作系统:系统构建和原理解析》图书1本,对其他积极参与讨论的网友(回帖有参考价值)我们将奖励积分20分。

活动要求:
1、 要言之有物,不能低于20个字
2、 本次话题主要关注Linux系统架构及内核源码的心得体会和使用技巧,其他问题可能不做重点

本期奖品:

深度探索Linux操作系统:系统构建和原理解析
出版社:机械工业出版社
ISBN:9787111439011
上架时间:2013-9-28
出版日期:2013 年10月
开本:16开

样章下载:
文前.pdf (868.73 KB, 下载次数: 274) 正文.pdf (3.56 MB, 下载次数: 1219)

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2013-10-15 15:45 |只看该作者
本帖最后由 瀚海书香 于 2013-10-15 15:46 编辑

回复 1# send_linux
1、说说您的Linux内核源码的学习经验和感受
     最开始的时候,靠冲动开始看一些内核代码,想到内核的海洋里徜徉,但很快就会被她的庞大拍死在沙滩上。
     于是乎,开始根据大家的推荐开始看一些内核相关的书籍(ULK,LDD,ULN),并尝试将里面的讲解与内核代码的实现进行比对,兴趣在这个漫长的过程中慢慢被消磨掉。
     突然一天,需要实现一个功能,在内核态实现会有更好的效率和架构需求。这个时候不再是大而全的看,而是专注到相关的领域,责任感推动整个过程的推进。
     随着编写的内核代码的增加,对内核的整体架构也有了跟深入的理解,于是乎空闲的时候又会从整体上看看内核的实现,读读那些基本的代码实现。
     这个时候,应该算是对内核入门了,所谓兵来将挡,水来土存。

     兴趣很重要,但是只有兴趣是远远不够的,需要有很高的自我追求和高度的责任感。

2、对于普通的Linux程序员和运维人员,是否有必要学习Linux系统构成及源码等基础知识
     对于普通的linux程序员和运维人员,没必要读源码,但应该了解一些内核的架构。很多东西都是相同的,内核里面的架构可以应付大部分的基础应用。
     对于系统程序员来说,应该尝试是读一些相关部分的代码,这会有利于你代码的实现,让你在做设计的时候更加有底气。
   

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
3 [报告]
发表于 2013-10-15 15:55 |只看该作者
1、说说您的Linux内核源码的学习经验和感受

学习内核,最好能跟项目来学习,可以先从写 driver 开始。学习 driver 有个好处时,可以了解内核的接口,同时 driver 本身相对于其他子系统又比较独立,不至于缠绕太深。学习写 driver,好比学习使用 Linux 系统调用或者 C 语言库来写应用程序:应用程序关注的是业务逻辑,driver 关注的是硬件特性;使用系统调用或者 C 语言库都是使用接口,写 driver 的时候使用内核接口也是类似;写应用程序的时候,熟悉接口的使用,一般情况下不需要深入理解系统调用或者库的实现,写 driver 也有些类似,熟练掌握内核接口,暂时不需要深入理解内核各个子系统。另外,从写 driver 开始还有个原因是,内核其他部分深入耦合,随便做些改动,出错都不知道是哪里,写 driver 出错一般把范围缩写为 driver 本身,对于初学者比较方便。

学习 driver 的时候,要注意学习使用调试工具。工欲善其事,必先利其器。对于 kernel 这样庞大的项目来说,接触到的工具会很多,学会使用、学会参考资料使用是很有帮助的。很多测试套件,对学习内核和调试工具是很有帮助的,比如 LTP、各种 benchmark 什么的。

对工具和 driver 熟悉之后,可以深入内核,因为这时候对内核的数据结构和代码风格已经熟悉了。现在比较多的是关于 TCP/IP 协议栈的研究分析,在这方面下功夫,一方面做这方面产品的公司比较多,可以好找工作,另一方面,网上资料比较多,大家交流分享也比较活跃。对于其他子系统,要看个人兴趣和工作需要了。

个人感觉最麻烦的是内核的进程管理、内存管理和文件系统,前两个本身调试就比较困难,也很难出新的算法,一般有些大牛会做,不过了解一下运作模式对学习其他子系统是有帮助的,但是阅读这部分代码比较苦,因为读了大量代码后才有一个整体的运作模式的了解,要深入细节需要花费大量的功夫,对于大部分人来说,花了时间不一定有产出,这是很打击人的;文件系统方面,这方面发展很多年了,积累也很多,有时候不知道为什么要这样做,看文件系统,很重要的一点是多读论文。

如果学习内核只是为了对 OS 的运作有所了解的话,可以看看早期的内核,或者读一些介绍早期内核的书就可以了,《情景分析》一书,写的是很赞的。如果想深入学习,要做好吃苦的准备,这玩意花费时间长,很多时候别人给不了你答案,需要自己泡在代码里面细细体会;而且要经受住外界环境的影响,比如现在云计算、分布式、搜索很火,内核会显的比较苦逼,学习内核前要有思想准备。


2、对于普通的Linux程序员和运维人员,是否有必要学习Linux系统构成及源码等基础知识

对于普通的Linux程序员和运维人员,学习 Linux 内核确实有帮助,但是前面说了,这部分比较耗费精力,所以学习内核的时候,要看自己的动力是什么。
很多时候,把 APUE 那本书掌握熟了就好了,如果只是为了了解 OS,前面说了,《情景分析》一书就够了,虽然讲的是 2.4 的内核,但是对于了解 LInux 的运作足够了,而且看完这书后,对内核的概念有所了解了,再看其他内核方面的书籍会比较快些。另外,关于 Linux 调优的书,现在网上也有,可以拿来照里面的步骤操作一下,对了解 Linux 系统也是很有帮助的。

评分

参与人数 1可用积分 +6 收起 理由
瀚海书香 + 6 赞一个!

查看全部评分

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
4 [报告]
发表于 2013-10-15 15:59 |只看该作者
回复 3# openspace
比如现在云计算、分布式、搜索很火,内核会显的比较苦逼,学习内核前要有思想准备。

强烈同意啊! 现在社会太浮躁,很少有人想沉下来了解基础的东西了。。。

   

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
5 [报告]
发表于 2013-10-15 16:01 |只看该作者
回复 1# send_linux
1、学习Linux内核,两点很重要,时间和兴趣,对于如此庞大系统,想要速成几乎是不可能的,需要花大量的时间去学习和摸索,且需要长期坚持,而支撑这些最重要的是就是兴趣了。somebody说,需要花10年的时间成为Linux菜鸟,一定程度上,我比较赞同。
2、这个取决于个人的追求,相信对内核有一定的了解后,眼界必然会不一样。


   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
6 [报告]
发表于 2013-10-15 16:10 |只看该作者
不一定要10年,也许5年就能成为顶级内核开发者,看你自己成长速度啦。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
7 [报告]
发表于 2013-10-15 17:01 |只看该作者
回复 6# embeddedlwp
呵呵,说的也是,还需要看时间投入率和个人人品~~

   

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
8 [报告]
发表于 2013-10-15 18:03 |只看该作者
做为一名运维人员,根本就看不懂内核源码怎么办?

论坛徽章:
40
水瓶座
日期:2013-08-15 11:26:422015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之乌兹别克斯坦
日期:2015-03-27 14:01:172015年亚洲杯之约旦
日期:2015-03-31 15:06:442015亚冠之首尔
日期:2015-06-16 23:24:37IT运维版块每日发帖之星
日期:2015-07-01 22:20:002015亚冠之德黑兰石油
日期:2015-07-08 09:32:07IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-10-11 06:20:00IT运维版块每日发帖之星
日期:2015-11-10 06:20:00
9 [报告]
发表于 2013-10-15 19:20 |只看该作者
本帖最后由 forgaoqiang 于 2013-10-23 18:35 编辑

这个可以稍微研究下 读过《操作系统原理》 Linux C开发也做过一些

运维主要工作集中在应用层上,对于内核没有深入看过,只是对Grub的内容进行了些研究~

过来了解下大家都怎么学习的 以后有时间作为参考~~

表示纯支持了~

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34摩羯座
日期:2013-12-01 00:21:362015年迎新春徽章
日期:2015-03-04 09:49:45
10 [报告]
发表于 2013-10-15 19:56 |只看该作者
    其实一开始应该要搞清楚为什么要学习内核,如果只是做linux下应用程序开发(包括应用软件、协议栈等等)的话,看下UNIX高级环境编程或许更快,更有用。
      但是作为码农,有更高的追求,或者做linux的驱动开发、或者底层开发,或者不满足仅仅调用平台提供的封装的函数(包括系统函数),这时候或者需要了解一些linux内核,但这却是是一条不归路,,你要知道 知识是不断更新的,内核版本更新也是。。。。

      庞杂的代码量,或许却是是很麻烦的一件事,,不敢说现在有多么高深的理解,但是对于内核代码的学习确实需要投入相当多的时间和精力,即使你是神仙。。 这样就需要一个学习方法问题,先宏观再微观,相信这个很多人也说了,如果一开始就扎进细节的理解,我个人认为是不好的:
     首先linux作为OS,OS的基本功能肯定是必备的,进程管理、内存管理和文件系统 等等基础功能,然后 可以比照linux的实现,了解代码的整体结构和大致功能。(linux内核设计与分析、google 百度),关心的主要代码的主要机制,而不是与机器相关的特化代码(各种.S等),总之宏观。。
    之后,确定到需要分析的源码部分,驱动?文件系统。或者楼上说的协议栈等,都是可以的。分析每个变量、宏、函数、结构体等代码元素的大致含义和功能。还是大致的注释功能,不用很精确吧(内核分析的书籍。以及google)
    然后对待分析的代码的深入分析和彻底理解。简单注释总是不能将代码元素的具体含义描述的十分精确,因此详细注释是十分有必要的。这一步中,我们需要弄清之前初略分析没有搞的很明白的,特别是函数的执行流程和调用关以及。。结构体字段的具体含义和使用条件(goole吧、、)。
   最后,再跳出来,再从模块的宏观上分析模块内部子功能的依赖关系,以及分析的模块和其他模块的关联关系。
   当然这也只是大概的步骤,很多步骤以及手段也是从老员工、网络上不断学习得到的。。
   总之,坚持。分享。再坚持。再分享,应该就是这么个感触吧。。。呵呵,特别是面对当今这样一种环境。。静下来即可。


对于第二个问题,
     对于普通的linux程序员和运维人员,还是看自己从事的部分,但是但我认为只要是程序员,即使不是linux程序员,难道面对linux这座代码宝库而熟视无睹么。。
      看看现在,公司代码中从linux内核代码中汲取的东西。。。我就不说什么了。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP