免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux
打印 上一主题 下一主题

[实践] Linux内核设计的艺术,说说您在源码学习中的人和事(获奖名单已公布-2014-3-13) [复制链接]

论坛徽章:
0
31 [报告]
发表于 2013-06-28 21:02 |只看该作者
一要结合代码看。 二要懂体系结构的知识。三要懂汇编。C语言当然是必须。英语也是必须,看注释和E文的文章和网站。

论坛徽章:
20
CU大牛徽章
日期:2013-04-17 11:48:26羊年新春福章
日期:2015-03-10 22:39:202015年中国系统架构师大会
日期:2015-06-29 16:11:282015亚冠之平阳省
日期:2015-07-31 09:19:042015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-09-30 06:20:002015亚冠之柏太阳神
日期:2015-10-19 20:29:5915-16赛季CBA联赛之天津
日期:2016-11-29 14:03:4315-16赛季CBA联赛之北控
日期:2016-12-24 20:51:492015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-12 20:58:532014年中国系统架构师大会
日期:2014-10-14 15:59:00
32 [报告]
发表于 2013-06-28 22:47 |只看该作者
Linux内核设计的艺术,前一段时间it168的文库上面已经将这本书的试读章节读了一部分,让我学习到了很多东西。特别是关于Linux内核启动时,这种中断向量的初始化,MBR的加载等,有了更深入的一些认识,更重要的是,本书的作者的行文通俗易懂,让我这样的对操作系统理解不深的读起来也不费力。
个人觉得,学习Linux内核,首先是要知道Linux内核在启动过程中,是如何被加载到内存中,initrd.img这个文件在启动过程中的作用,程序态和内核态程序的区别,其次,对C语言要也有比较熟悉,最好开发过Linux下的相关C程序,对指针有比较深入的理解,其次理清楚内核各个架构,如网络,文件系统,设备驱动,安全,进程间通信,内存管理等,再根据自己的兴趣,找一个方面进行入手,如从事网络编程的人,可以学习一个网络模块,了解TCP包是如何被构建的,skb_buffer的作用,或者自己手动修改skb的数据结构,对存储感兴趣的人,可以深入分析fs模块,清楚超级块的作用,inode等结构在硬盘和内存中各存在一份的事实,理解内核中的inode结构是何时被加载到内存中。
再次,我可以手动加载和卸载一个模块,分析一下模块在被加载和卸载的过程,内核分别调用了什么函数,初始化的哪一些函数,查询了哪一些数据结构和链表等。

最后,关于内核学习对于实际工作的影响,这个对我的实际工作没有什么影响,自己主要是凭着兴趣在学习。个人觉得,如果打算从事网络安全设备开发,存储设备开发,驱动开发的朋友,可以花时间研究一下Linux内核,对于实际工作,应该还是会有比较大的帮助

论坛徽章:
0
33 [报告]
发表于 2013-06-29 02:31 |只看该作者
赵炯的书的确不错,每次都看了一章之后把前一章的又忘了,所以每次都是那么几章

论坛徽章:
0
34 [报告]
发表于 2013-06-29 09:03 |只看该作者
看的头疼,连个流程都没搞清楚呢!!
东西太多了~~

论坛徽章:
20
CU大牛徽章
日期:2013-04-17 11:48:26羊年新春福章
日期:2015-03-10 22:39:202015年中国系统架构师大会
日期:2015-06-29 16:11:282015亚冠之平阳省
日期:2015-07-31 09:19:042015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-09-30 06:20:002015亚冠之柏太阳神
日期:2015-10-19 20:29:5915-16赛季CBA联赛之天津
日期:2016-11-29 14:03:4315-16赛季CBA联赛之北控
日期:2016-12-24 20:51:492015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-12 20:58:532014年中国系统架构师大会
日期:2014-10-14 15:59:00
35 [报告]
发表于 2013-06-29 10:49 |只看该作者
回复 34# zqh1630


    我觉得Linux内核中的流程有几个方面,一个是内核启动流程,在grub加载内核之后,内核映像是如何被加载到内存并解压,具体解压到内存的哪个位置,二是现在的内核多是以模块的方式来加载的,具体一个模块是怎么被加载到内核中的,在加载的过程中,内核都调用了哪一些函数,遍历了哪一些链表等

论坛徽章:
10
亥猪
日期:2013-08-15 14:50:422015年迎新春徽章
日期:2015-03-04 09:58:112015亚冠之吉达阿赫利
日期:2015-07-21 09:49:08神斗士
日期:2015-11-20 14:07:3815-16赛季CBA联赛之江苏
日期:2017-08-17 14:04:21CU大牛徽章
日期:2013-09-18 15:15:45CU大牛徽章
日期:2013-09-18 15:16:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34巳蛇
日期:2014-03-29 19:05:3215-16赛季CBA联赛之辽宁
日期:2022-04-08 16:41:44
36 [报告]
发表于 2013-06-29 18:44 |只看该作者
这书的源码有点分散,上下文难以结合理解,但是图确实非常好
跟赵总的书结合起来看会好一些,各去所长

论坛徽章:
1
水瓶座
日期:2013-09-28 21:40:25
37 [报告]
发表于 2013-06-30 00:29 |只看该作者
本帖最后由 bensenq 于 2013-06-30 00:32 编辑

1、说说您当初学习Linux内核源码是从看那本书开始的,还是直接看源码?

  • 本科学习操作系统课程时用赵炯的《Linux 0.11源码注释》,不过说实话并没有真正入门。
  • 后来真正接触Linux内核工作时,主要是用《Linux Kernel Development》做指导,结合源代码来学习。
  • 入门后主要以《Understanding Linux Kernel》和《Professional Linux Kernel Architecture》两本书为主。


2、说说您的Linux内核源码学习经验

  • 操作系统说到底是要与硬件打交道,基本的硬件基础概念、知识一定要不断补充更新,特别是计算机体系结构方面的知识尤为重要。Hennessy和Patterson所著的经典教材《Computer Architecture: A Quantitative Approach》绝对是不二参考。
  • C语言一定要精通,毕竟Linux使用C语言编写的。在此基础上,掌握汇编语言和C语言内嵌汇编方法是非常必要的,因为在和硬件交互的过程中,C语言并不能总是准确表述程序员的意图。C语言参考首选《C Programming Language》,而GCC参考手册对于GNU C语法有详细说明,对于内嵌汇编也有指导意义。汇编语言的掌握主要以CPU指令手册以及汇编器参考手册为主。
  • 自己动手编译内核,构建内核实验环境。遇到不懂的东西,通过修改内核、增加简单的printk来跟踪内核,通过实验来理解内核行为。一般来说,初学者可以通过编写简单的设备驱动来开始内核开发之旅。关于内核实验环境的构建,可以参考本人的这篇文章:《构建最简单的LDD实验环境》
  • 阅读内核源代码要注意区分架构无关代码和架构相关代码。架构相关代码与具体CPU架构绑定,对于理解特定硬件架构有用;架构无关代码是内核核心机制的普适实现,是Linux实现的核心部分,学习中应该重点关注。
  • 通过内核BUG定位学习内核。内核开发过程中或多或少要遭遇系统BUG,要把系统BUG定位当作难得的学习内核的机会,因为要解决一个BUG往往需要了解内核的多个方面。平时要多掌握基本的二进制工具(如objdump、readelf、addr2line、nm等),多了解程序编译、链接、加载、执行的细节,正所谓“好的程序员了结自己程序的每一个字节”。这些平时积累说到底还是为了增加对于计算机体系结构、程序执行模型的理解和消化,便于操作系统软硬件错误的排查。


3、Linux内核的设计对您的工作有何指导意义

  • 借鉴意义。
  • 启发作用。

论坛徽章:
0
38 [报告]
发表于 2013-06-30 01:06 |只看该作者
虽说工作中用到开发环境是linux系统,可是真正下决心去了解linux内核,还是最近才开始的。
1、说说您当初学习Linux内核源码是从看那本书开始的,还是直接看源码?
     从书本开始看的。现在用到的书是赵炯老师的《Linux内核完全注解》。在开始linux内之前,先找了本书把汇编大致浏览了一边,回顾了一下那些已经还给大学老师的汇编知识。现在还暂时看了前面几章。感觉第四章 80X86保护模式及其编程有些欠妥,就找了《IA-32 Intel体系结构软件开发者手册》英文版对照着中文版的来学习,效果还是很不错的。最后就是《linux内核设计的艺术...》这本书了,这本书看的电子版的,看的真累啊~~~~,感觉这本书原理性的东西讲的很透彻,看着看着就有豁然开朗的感觉,继续跟进----;今天买了两本操作系统的书:《现代操作系统》和《操作系统精髓与设计原理》作为学习linux内核的参考书吧。楼主要把奖励给我一个啊----
2、说说您的Linux内核源码学习经验
     经验之谈暂时还没有,摸索当中啊,希望在论坛中多结交几个道友,共同学习---;在学习技术上坚持就是胜利总是不会错的。
3、Linux内核的设计对您的工作有何指导意义?
     指导我在开发中写出优秀的代码----暂时就这些了。

加油学习,以后把对linux的爱好编程工作。

论坛徽章:
0
39 [报告]
发表于 2013-06-30 09:06 |只看该作者
顶。。。。。。。。

论坛徽章:
0
40 [报告]
发表于 2013-06-30 10:41 |只看该作者
回复 37# bensenq


    《构建最简单的LDD实验环境》链接怎么打不开呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP