linux学习之九 学习过程总结
~写在前面
首先非常感谢孟老师的悉心讲解,使用这种新颖的教学方式(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内核学习之二 一个精简内核的分析(基于时间片轮转)
三 总结
通过这两个多月来的学习,最大的收获感觉就是找到了一种学习linux的新方法(机制+代码),和带着疑问去代码中寻找答案。当然,最大的遗憾就是学习时间太短,还有许多想了解的内容还没有来的及学习,比如文件系统,内存管理,内核定时器的实现,只能自己摸索了。。。。
再次感谢孟老师的辛苦工作。。。。
by:方龙伟
原创作品 转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
linux学习之九 学习过程总结的更多相关文章
- linux 学习之九、Linux 磁盘与文件系统管理(3)
原文地址:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php#filesys 创建大文件以制作 loop 装置文件!(练习非常有用) ...
- linux 学习之九、Linux 磁盘与文件系统管理(2)
原文地址:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php#filesys 磁盘挂载与卸除 挂载Ext2/Ext3文件系统 范例一: ...
- linux 学习之九、Linux 磁盘与文件系统管理(1)
原文地址:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php#filesys 查看文件系统参数命令 dumpe2fs 盘符地址 例: ...
- Linux学习之九-Linux系统定时任务
Linux系统定时任务 在一些实际工作中需要机器在某个时间自动执行某个任务,不需要人为在此时刻参与,可以建立一个定时任务. crond 服务是linux下用来周期性的执行某种任务或等待处理某些事件的一 ...
- linux学习(九)Linux知识点汇总
一.基础概念 Q:linux是什么? Linux是一种基于UNIX的操作系统,它基于Linux内核,常被用作服务器的操作系统. Q:UNIX和LINUX有什么区别? Unix:收费的,商用的,拥有许 ...
- Linux学习之九--mysql的简单使用
mysql创建数据库时指定编码很重要,很多开发者都使用了默认编码,但是我使用的经验来看,制定数据库的编码可以很大程度上避免倒入导出带来的乱码问题. 一.创建数据库: 指定UTF-8: CREATE D ...
- linux学习(九)set_uid、set_gid、stick_bit、软链接、硬链接
一.set_uid set_uid其实是一种特殊权限,我们看一个文件: [root@iZ25lzba47vZ ~]# ls -l /usr/bin/passwd -rwsr-xr-x. root ro ...
- Linux学习之进程管理(十九)
Linux学习之进程管理 进程查看 查看系统中所有进程,使用BSD操作系统的格式 语法:ps aux 选项: a:显示所有前台进程 x:显示所有后台进程 u:显示这个进程是由哪个用户产生的 语法:ps ...
- linux学习心得之目录树开端与/etc(图文)
linux学习心得之目录树开端与/etc(图文) linux中“一切皆文件”,学习linux一年了,在学习过程中对目录树的一点心得,分享给大家,有不对的地方敬请斧正. 不多说了,先上图: 根目录: / ...
随机推荐
- 用css改变鼠标选中文字的样式
打开一个页面,选中一段文字,会出现系统默认的蓝色背景和白色文字,如下图: 那么 这种选中效果我们怎么去自定制呢,比如我想让文字选中的时候背景是绿色,文字是白色 我们在css文件中插入如下代码: ::- ...
- Kinect外包团队(长年承接微软Kinect体感项目外包,有大型Kinect案例)
承接Kinect体感企业项目.游戏项目外包 北京公司.专业团队,成员为专业WPF产品公司一线开发人员,有大型产品开发经验: 提供优质的售后服务,保证产品质量,轻量级产品可以提供规范清晰的源代码,有业务 ...
- 易货beta版本测试报告
测试 对于服务器端我们是进行了单元测试 对于客户端我们使用的是在线的云测工具对app进行了包括安装,启动,具体功能以及ui方面的测试. 另外,对于客户端,我们还进行了对细节功能的人工测试 功能需求编号 ...
- 【转】Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)
下面开始用简单但典型的客户端和服务器端程序说明如何进行网络编程.这一小节讲的是客户端,一个用来连接并读取服务器发送来的时间的客户端. 这里涉及到了编写代码,因此要 搭建unix网络编程环境 unix系 ...
- iOS app 企业内部发布及HTTPS服务器配置
转自: http://www.cnblogs.com/cocoajin/p/4082488.html iOS企业内部发布及HTTPS服务器配置 一:所需的条件 1. 苹果开发者证书,企业版 299$ ...
- TCP/IP 三次握手-四次挥手
TCP的建立需要三次握手,断开需要四次挥手. 首先三次握手: 首先,客户机向服务器发送请求报文,服务器回复ACK,并分配资源,而客户端接受到ACK后回复确认报文,并分配资源,此时三次握手完成. 四次挥 ...
- What is SSL and what are Certificates?
Refer to http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x64.html The content 1.2. What is SSL and ...
- weex 小结--内建模块
使用以下模块时,需要导入依赖:var *** = require('@weex-module/****'); 1. navigator --像浏览器一样切换页面 2. webview(module) ...
- a.redhat系统如何卸载默认jdk
Redhat系统安装之后,会默认有openjdk在安装(下图已经是卸载掉了) 这个openjdk下面的需要进行卸载,你可以通过命令进行卸载,例如首先查看JDK,然后默认直接通过rpm命令进行卸载L 卸 ...
- ireport5.6+jasperreport6.3开发(三)--以javabean为基准的报表开发(javabean)
这里只有ireport的开发没有web侧的程序. ireport的数据源可以说是多种多样,大致可以通过文件 数据库 bean类这三种方式,这里只介绍bean类 (数据库比较简单可参考其他的网站,文件没 ...