您的位置:首页 > 运维架构 > Linux

如何更深入地学习 Linux?

2017-03-29 22:51 218 查看
作者:Tianheng Chen

链接:https://www.zhihu.com/question/23564190/answer/25138208

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1. 最重要的linux的内核工作方式:包括但是不限于:内存分页进程切换interrupt 和 exception,以及system calllock进程管理内存管理和分配signal文件系统(ext2, ext3)输入输出设备缓存   书可以看《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. http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/时长:一学期3.x86汇编,x86 Assembly   从LC-3到x86https://courses.engr.illinois.edu/ece391/references/patt-and-patel-appendix-B.pdf4.操作系统:参考最上。《Understanding
the Linux Kernel, Third Edition [Daniel P. Bovet, Marco Cesati]》http://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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: