码迷,mamicode.com
首页 > 系统相关 > 详细

linux学习之九 学习过程总结

时间:2016-04-27 22:03:09      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:

~写在前面

     首先非常感谢孟老师的悉心讲解,使用这种新颖的教学方式(MOOC课堂+博客),也感到非常有幸随着老师的思路对linux的内核进行了初步的系统学习。结合代码和gdb调试工具跟踪分析对linux内核的一些重要机制有了更深刻的理解。

一 学习Linux内核的心得Linux系统的理解 

liunx内核是一个十分庞大的操作系统,代码量动辄上千万行,并且还会越来越大,所以通过阅读代码来了解他的机制是不现实的。但是光拿着一本讲linux工作机制的书,比如那本引为经典的巨厚的《深入理解linux内核》,读着读着就越有一种不真实的感觉,总有一些疑问:真是这样吗?为什么是这样?通过老师的这种“机制和代码”并行的方法,确实让我学到了很多,对有些机制理解的更透彻,比如进程切换过程,中断处理过程,以前因为考试的需要,对这几个经典的过程的几个重要步骤背的很熟了,在学习过程中,通过相关的代码,有一种“它就是这样,本来就是这样”的感觉。

关于心得,除了前面所说的学习方法(机制+代码)外,还有一点就是带着疑问去学,它需要什么功能,然后去想linux是怎么实现的,最后去找相关的代码验证。

关于对linux的理解,由于没有学习过Windows等其他桌面系统,所谓没有比较就没有发言权,还是借用别人的成果吧: 

  抛开Android不谈,Linux是一个以开发者为中心的操作系统,Windows是以消费者为中心的操作系统。这是最根本的区别,也是Linux相对于Windows的优势/劣势所在。

另外一个很重要的特点,是Linux是由业余爱好者们拼凑而成的。它不像Windows/Mac一样有一个明确的『开发目标』,甚至不像BSD一样有一个『Base System』,Linux不过是一个内核,和一堆从不同地方搞来/开发,试图满足不同开发者自身需要的应用程序。只不过碰巧发现,这些工具组合组合,能够满足大多数人的大多数需要而已

了解这两个特点之后,Linux的很多优点/缺点,也变得很容易理解。

  • 应用的倾向
    最显著的特点是,所有与开发有关的任务,都有非常完善的工具支持。——从底层编译器,到make/cmake,到shell script/script languages,到git,到vim/emacs再到方便的依赖管理和软件装卸工具。而其他的工具,相对来说要有限一些。
    而且这些工具几乎默认可用。你能想象Windows/Mac出厂的时候就带着VS和一大堆开发工具吗?可是Linux几乎所有distro下,从shell到git到sed到g++/make,都是『预装好的』。这是因为,这些工具对于绝大多数的Linux用户来说,是一种必须。
  • 『效率』和『易学』的抉择
    不是说Windows/Mac下就会没有『效率』,而是Windows/Mac的设计相对来说没有那么倾向『效率』那一端。拿图形接口举例子,Linux的绝大多数工具都是『先有命令行/库接口』,然后将X11接口作为一种『Afterthought』和『额外的选项』,而Windows/Mac恰巧相反——默认的接口是『图形化』的,自动化的工具作为一种『额外的选项』。
  • 开放源码和高度可定制
    开放源码的初衷,不是为了『自由』而是为了『定制』。AT&T UNIX从来就是有版权的,但是源代码仍然可用,这是为了让用户能够根据需要,去『修改』它。
    Linux社区所赞赏的软件和系统,多半遵循同样的规则——它应该能够适应不同用户的不同环境,能够轻易的改变自己的行为,能够轻松的与不同环境整合。与其假设别人和你的需求一致,不如给予它们定制系统的自由。
  • 『用户友好』与『减少包装』
    Linux的大多数软件,都是以个人兴趣作为开端的——我想写一个程序自己用,顺便分享给社区。事实上,绝大多数Linux的软件,也仍然是这样的状态——你可以拿过来用,但如果它有什么问题或者有什么不满足你要求的地方,需要你自己去研究一下。
    所以Linux下的软件,往往愿意将自己『更彻底』的暴露给用户。方便用户更好的了解它的内部机制,进行hack。
  • 去中心化
    分散的软件开发,也注定了系统的接口和形式不统一——因为大家都喜欢发明轮子(?),而每个人的轮子或多或少更适合『自己』和『社区』而非所有人,而在Linux的环境下又没有人能强迫所有人用自己的轮子(除了Kernel开发者,但其实很多distro对kernel也有patch),所以与其制定一种实践,Linux更多的让用户去选择『生活的方式』。
    你会看到Linux生态环境中有大量的distro,不同的distro有不同的init方式,不同的软件包管理器和安装策略;每个人习惯使用不同的VCS,不同的shell,不同的编辑器,都就是『更多的选择』的哲学的体现。

所以,如果你发现你自己更多的是『开发者』而非『消费者』,或者你所做的任务碰巧是人们一般用Linux完成的,那么你自然会发现Linux的优点。就我个人来说,即便有VS,我还是经常会觉得windows下项目的配置太繁琐;即便有homebrew,我也常常会觉得OS X下的软件管理比较奇怪。而在Linux下,我可以轻易的使用到最新版本的几乎所有开发工具。           ------知乎

     Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。        ----来自百度

二  学习目录

下面就是我这段时间以来的学习收获:

linux内核学习之一 简单c语言反汇编

linux内核学习之二  一个精简内核的分析(基于时间片轮转)

linux内核学习之三 跟踪分析内核的启动过程

linux内核学习之四 系统调用

linux 内核学习之五 system_call过程分析

linux内核学习之六 进程创建过程学习

linux内核学习之七 可执行程序的装载和运行

linux 内核学习之八 进程调度过程分析

 

 三  总结

通过这两个多月来的学习,最大的收获感觉就是找到了一种学习linux的新方法(机制+代码),和带着疑问去代码中寻找答案。当然,最大的遗憾就是学习时间太短,还有许多想了解的内容还没有来的及学习,比如文件系统,内存管理,内核定时器的实现,只能自己摸索了。。。。

再次感谢孟老师的辛苦工作。。。。

 

by:方龙伟

原创作品 转载请注明出处

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

     

linux学习之九 学习过程总结

标签:

原文地址:http://www.cnblogs.com/-flw/p/5440180.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!