加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

如何更深入地 学习 Linux?

发布时间:2023-01-31 11:26:20 所属栏目:Linux 来源:
导读:  鉴于越来越多的人看到了答案,我觉得现在有必要更正一些用词错误和概念错误,非常感谢杨周的建议和斧正。

  -----------------------------------------------------------------------------------------
  鉴于越来越多的人看到了答案,我觉得现在有必要更正一些用词错误和概念错误,非常感谢杨周的建议和斧正。
 
  ---------------------------------------------------------------------------------------------------------------
 
  增加内容:关于楼主背景,很多人问我关于我的背景问题,在此统一作答,楼主目前大学本科三年级,在美国上学,专业为ECE和数学,所以找实习的机会比较多,找到的概率也比国内同胞们大一些,我高中同班同学有两个人大二的时候就找到google实习的。本人学习成绩略渣,这个不是谦虚,是正儿八经的渣,GPA全系中位数,另:谁给我发私信,说大神膜拜什么的,会让我浑身不舒服,我认为高斯欧拉傅里叶可以称作大神,普通人嘛,就安安分分做普通人吧。
 
  很多大一大二的朋友私信问我怎么从基础学习,为了更加符合这些同学的基础,增加了最基础的知识内容,方便大家学习。
 
  另,在最后增加了所有提到的书籍的全名,方便大家查找,有pdf链接的我会放上pdf的链接。如侵害了版权,请告知我。
 
  删减内容:我把关于关于linux使用和运维的内容删去了,因为这本不是我擅长的内容,放在这里未免误人子弟,尤其是在杨周的提醒之下,才知道对运维的理解是错误的linux学习,所以觉得瞎写的话不免有悖知乎的精神,我想有更多人会有更好的答案。
 
  ---------------------------------------------------------------------------------------------------------------
 
  说说我的学习经历吧。因为我对这方面也非常感兴趣,而且年龄和背景和题主十分相似。
 
  我觉得要深入学习linux,有三个方面是要全面了解的。(下面有些东西会写成英文,因为有些东西的中文翻译我真的不太清楚,所以为了最大程度的避免误人子弟,我还是尽量用词准确,见谅)
 
  1. 最重要的linux的内核工作方式:包括但是不限于:
 
  书可以看《Understanding the Linux Kernel, Third Edition [Daniel P. Bovet, Marco Cesati]》,《IA-32 Intel? Architecture Software Developer’s Manual Volume 3: System Programming Guide》
 
  这个是理解linux的基础的基础,对于理解操作系统有莫大的好处。而且无论对于high level还是low level的编程都是相通的,很多东西在学完操作系统之后,你对他们的理解就完全不一样了。就像学好缓存在对于提高大运算上面的效率是很有帮助的。
 
  一边看书一边可以写一个简单的linux自己玩,时长一个学期比较合适。因为课程要求,所以我写过一个可以多任务运行的linux,附带一个声卡driver。当时演示的时候放的是凤凰传奇,教授整个人斯巴达了。但是不得不说这是一个非常大的工作量。
 
  但是无论是要做内核开发还是驱动开发,我觉得这些都是基础中的基础,是要扎扎实实掌握的,不得有半点马虎。
 
  2. CPU架构/汇编
 
  操作系统跟CPU的架构是离不开的,我个人觉得是相辅相成的。很明显的能看到Intel为了和操作系统配合起来,实现了很多硬件功能。最明显的就是虚拟内存已经可以在硬件层面上直接换算,不需要通过软件了。不懂x86或者arm的架构,会一定程度上造成理解linux内核的困难。比如为什么要以某种特定的方式分页,为什么内存管理的时候需要不同的算法,interrupt,system call的意义何在?等等等等的问题都需要精通CPU的架构。
 
  当时就是因为对TLB的理解不够深入,不够仔细,造成我的系统每次切换任务的时候,会page fault。
 
  重点在于interrupt的处理,缓存的概念和内存相关结构的设计。至于乱序执行,pipeline之类的都是次要的,对于linux不是特别的重要。
 
  x86的汇编是基础,有助于debug和理解linux源代码。我写系统的时候大段写过x86代码来实现低层操作。不知道真正的linux是不是这样实现的。
 
  3. high level编程
 
  系统毕竟是为了应用程序而服务的,就像有需求才有生产一样。没有应用程序的需求,就不会设计相关的系统功能。了解high level的编程一定程度上可以融会贯通。
 
  ---------------------------------------------------------------------------------------------------------------
 
  学习过程:以下均是为大一大二的朋友们写的,有更好建议的朋友请留言指正。
 
  1. 逻辑电路,数字电路,简单处理器,汇编,C语言,参考书籍《Yale N. Patt and Sanjay J. Patel,
 
  Introduction to Computing Systems: from bits and gates to C and beyond
 
  , 2nd Edition, McGraw-Hill, 2003.》我强烈建议这本书,这也是学校的教科书。原因是有同学反映即使是计算机系的学生看底层的书仍然看不懂,这本书从最基本的逻辑电路讲起,再上升到汇编和机器语言,最后很自然的过渡到了C语言,所有这些内容都建立在一个简单的LC-3处理器的基础上,我相信即使是工作多年的朋友看这本书仍然会说“原来如此”。时长:一个学期,对于有基础的同学,半个学期。
 
  附录中,有LC-3处理器的所有细节,包括电路,对处理器没有任何概念的同学是非常好的补充材料。
 
  2.数据结构,OOP,参考网站:cplusplus.com.
 
  ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/
 
  时长:一学期
 
  3.x86汇编,
 
  x86 Assembly
 
  从LC-3到x86
 
  courses.engr.illinois.edu/ece391/references/patt-and-patel-appendix-B.pdf
 
  4.操作系统:参考最上。
 
  《Understanding the Linux Kernel, Third Edition [Daniel P. Bovet, Marco Cesati]》
 
  idak.gop.edu.tr/esmeray/UnderStandingKernel.pdf
 
  《Yale N. Patt and Sanjay J. Patel,
 
  Introduction to Computing Systems: from bits and gates to C and beyond
 
  , 2nd Edition, McGraw-Hill, 2003.》链接没有,自己买吧
 
  Intel速 64 and IA-32 Architectures Software Developer Manuals
 

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!