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

Linux内核学习总结

时间:2016-04-30 16:59:10      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

作者:江军

ID:fuchen1994

 

一.Linux系统的简单理解


Linux操作系统比起windows来说要小巧很多,相对来说没有那么复杂。两者有相似之处,也有不同之处。比如两者都拥有内核态,用户态,系统调用,进程的基本的操作系统概念与实现。但是,在一些具体的实现方面,架构方面又大有不同,比如文件系统的实现两者就有很大区别,但我更喜欢Linux的虚拟文件系统,兼容性更好。

学习这门课后,我的第一感觉是:哇!原来我们的操作系统实现是这样子的,逻辑异常复杂但是却不是想象中的那么神奇。学完这门课,我心中对于操作系统的认知由模糊变得清晰,由用户角度变成开发者角度。

Linux操作系统的实现步骤如下,首先是由主板的BIOS系统启动操作系统的汇编部分,然后汇编程序开始为内核的运行环境做准备,然后start_kernel这个地方进入操作系统内核,第一个进程是由汇编程序手动创建的,为0号进程,在CPU上面没有进程在跑的时候会一直运行,直到创建了1号进程,它是所有进程的祖先,然后是2号进程,是所有线程的祖先。进程是系统实现的核心,Linux操作系统的大部分操作都是对于进程的操作,比如进程的调度,切换等等,理解了进程,就理解了大部分内核代码。线程是进程的更小的运行载体,一般情况下是在进程内部运行,相当于更小的子进程,可以并发执行,提高执行效率。

系统调用是从用户态进入内核态的唯一方法,系统调用不难懂,这个概念很简单但是却非常实用。用户态触发一个中断或者异常,然后通过系统调用进入内核态,然后由内核态执行处理过程,完成用户请求或者错误处理。这个相当于用户态到内核态的一根网线,输入问题,输出结果,可以避免对内核态的干扰,而出现各种各样的奇葩错误。

Linux操作系统的进程创建是通过fork()函数来实现的,操作系统中的父进程通过复制,创建一个子进程,并且在父进程中返回子进程的PID,然后一个时间片过后,子进程上CPU运行后,子进程PID=0,两个进程相互独立,操作系统完成新进程的创建。

进程调度与切换时Linux内核中比较难的一个部分,我理解的并不好,准备找本书重新阅读一遍。进程调度需要满足下面几种情况之一,中断或者异常,内核线程主动调度,用户态进程陷入内核态。从而实现多任务运行。

操作系统就是一个洋葱,一层层的,上一层依赖下一层提供的服务,层层封装,只留一个通道且这个通道不能够影响下一层的原始代码。从而给用户提供一个高效安全的操作系统。其实,层层封装出现在计算机的方方面面,比如CPU,存储设备等硬件的制作.

二.Linux内核分析课程学习心得


学习这门课程首先必须具备计算机组成,汇编,操作系统,C等基础知识,如果不具备,学习来就会非常的吃力,而且效果一般。我在学习这门课程的时候,并行学习的是操作系统课,但是Linux内核分析学习比操作系统提前至少2个月,所以学习的时候很多概念不懂,但是学完操作系统课后就比较明白了,所以前置的课程最好还是提前学好。

我不是计算机专业的学生,是旅游管理专业的。学校也只是二本,在安徽,名字不值一提。对于计算机我很感兴趣,也想从事相关的行业。但是由于缺乏专业的计算机基础科学的训练,所以开始选修MOOC课程。如果我只想当一名码农,大可不必如此。我想实现证明一下,可不可以通过MOOC课程的学习在2年的时间里面达到计算机本科学生毕业的水平甚至更高。希望我的这个挑战能够完成,即使最后我不从事计算机行业,也希望这份学习经历能给我带来美好的回忆。

这门课程应该是进行过精简的,感觉只讲到了Linux内核的前一半部分,还有后面更难的内容没有讲,可能是MOOC的原因,也可能是留给我们自己去学习,去探索,我个人更希望是后一种。所以,建议看到这篇文字的同学在学完这门课后,还需要找寻更多的资料学习后面的部分,我准备把视频重新学习一遍后再学习后面的部分,如果老师能够提供后面的学习指导,将不胜感激!

学习的过程是不断的练习的过程,这门课没有编程方面的作业,全是逻辑分析方面的。所以老师让我们编写博客,将我们的体会书面化,从而加深我们的理解,这个方面非常好,我也将在这门课结束后继续我的博客的编写。所以建议后来的同学们,一定在上完课后记得写课后大作业,这能够让你把一周的课程有一个很大的梳理,加深理解。

三.我的博客链接


1.Linux内核分析--反汇编一个简单的C程序(at&t汇编)

http://www.jianshu.com/p/5cbf174fd263

2.Linux内核分析--实现一个简单的系统内核

http://www.cnblogs.com/fuchen1994/p/5247228.html

3.Linux内核分析-使用gdb跟踪调试内核从start_kernel到init进程启动

http://www.cnblogs.com/fuchen1994/p/5272705.html

4.Linux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

 http://www.cnblogs.com/fuchen1994/p/5294562.html

5.Linux内核分析-分析system_call中断处理过程

http://www.cnblogs.com/fuchen1994/p/5325876.html

6.Linux内核分析-分析Linux内核创建一个新进程的过程

http://www.cnblogs.com/fuchen1994/p/5350357.html

7.Linux内核分析-Linux内核如何装载和启动一个可执行程序

http://www.cnblogs.com/fuchen1994/p/5375658.html

8.Linux内核分析--理解进程调度时机、跟踪分析进程调度和进程切换的过程

http://www.cnblogs.com/fuchen1994/p/5400967.html

四.收获与遗憾


 

收获还是比较多的,通过这门课的学习,我掌握了Linux内核的分析方法,分析工具,理解了Linux内核的一小部分代码,为以后的Linux内核更深入的学习打下了基础。 

遗憾是没有先学操作系统课程,而是先学了这门课程,毕竟我大三了,马上要去实习了,这门课的下次开课可能赶不上,所以只能先与操作系统学了,结课后我还是会多看看,尤其是在操作系统课程学完后再学一遍这门课。

感谢孟宁老师以及中国科学技术大学提供给我们这么一门优质的课程,非常感谢让我们比较差的学校的学生也能接触到优质的课程以及优秀的老师。

 

Linux内核学习总结

标签:

原文地址:http://www.cnblogs.com/fuchen1994/p/5448868.html

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