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一年了,在学习过程中对目录树的一点心得,分享给大家,有不对的地方敬请斧正. 不多说了,先上图: 根目录: / ...
随机推荐
- 流媒体测试笔记记录之————阿里云监控、OBS、FFmpeg拉流和推流变化比较记录
OBS设置视频(512kbps)和音频(128kbps)比特率 阿里云监控结果: 使用FFmpeg拉流到Nginx 服务器测试比特率 第二次测试,修改视频和音频比特率 OBS设置 阿里云监控 Ngin ...
- Node 编程规范
空格, 2个, 因为有多层函数嵌套 行宽, 80个字符 语句分隔, 一律用; 并且占一行 变量定义, 每一个都要用 var, 并且不要定义全局变量 变量名和属性名, 小驼峰, yourName 函数, ...
- 慕课网__CSS__ Relative, absolute,
同时又left, right 或者 top, bottom时 relative, 尽量少用,会出现层级覆盖, 或者单独使用, 避免层级嵌套, 或者覆盖 absolute具有包裹性, 和破坏性 包裹性 ...
- python test
#!/usr/bin/env python #-*- encoding: utf- -*- ''' def foo(name): print name, '去砍柴' foo('yangshanlei: ...
- C#操作SQL Server数据库
http://www.cnblogs.com/rainman/archive/2012/03/13/2393975.html
- sublime 3 安装go环境
安装go环境是在go已经安装的情况下, 1 首先安装 Package Control ctrl + · 打开sublime 命令行模式 复制粘贴以下代码 import urllib.request,o ...
- SAP 设置屏幕字段的隐藏、显示、必填和可选,以设置物料组为例
1.事务码MM01,把物料组设为选填字段. 2.找到物料组的屏幕字段. 3.在后台根据屏幕字段找到对应字段组.后台路径:后勤-常规—物料主数据—字段选择—给字段组分配字段.点击后面的箭头进入下一屏幕. ...
- 高并发下MySQL出现checking permissions
在某些数据访问层框架中,会使用show full tables from test like 'demo',来检查数据库的状态.当数据库中表的数量较少时,并没有出现严重的问题.但是当数据库中的表数量多 ...
- alibaba fastjson List<Map<String, String>>2Str
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; impo ...
- jQuery滚动数字
<ul class="dateList"> <li class="one"> <p class="titleName&q ...