Linux内核学习总结

来源:互联网 发布:天心天思网络差评 编辑:程序博客网 时间:2024/05/11 12:10

1.Linux内核学习总结

Linux系统自诞生之日起,就对外界表现出极强的吸引力。因为它开源,所以任何感兴趣的人都可以参与其中;因为其设计精巧,研究它的人都可以获益匪浅;因为它性能卓越,所以广受好评。在本次中国科学技术大学MOOC平台上,全程学习了孟老师的Linux内核分析课程。跟着孟老师的讲解,对Linux的内核有了一些认识,虽然不是很深刻,但是基本上能明白Linux系统的启动顺序和工作流程。

首先,学会了在Linux系统中如何通过汇编进行系统调用,这其中还学会了在Linux环境下对程序编译调试的方法。包括反汇编,gdb跟踪调试。

其次,实验楼环境下启动并跟踪调试操作系统,这期间试图过自己搭建一个调试环境,但是失败了。对于搭建操作系统的开发环境这块日后需要进一步加强。

第三,明白了可执行程序的装载过程。如何由一个.c的源文件,一步步生成目标代码,进而生成可执行程序。

最后,难度最大的就是对进程的理解,如何调用fork()函数创建进程,并跟踪调试其上下文切换过程。还有内部进程调度的时机和调度算法等。

总的来说,孟老师的课程涵盖面很广,由于自己的理解能力有限,很多知识也未能完全消化。但是,孟老师为我们开了一个通向Linux系统的窗户,日后学习和工作中,将会进一步深入研究Linux系统。

2.本课程试验内容

本课程共八个试验:

1):通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工(http://blog.csdn.net/u013232740/article/details/44106287)

反汇编一段.C源程序,通过分析汇编代码,理解计算机工作原理。尤其是对数据段和代码段的出栈入栈机制的理解。
2):完成一个时间片多道轮转的程序(http://blog.csdn.net/u013232740/article/details/44119661)
模拟CPU在每个周期内执行一个进程,每10万个CPU周期打印输出一个进程的ID号,然后进入时间处理函数,时间处理函数只是打印输出一句话,但是和一般的中断处理函数机理一样,可以实现任何想要处理的工作。
3):跟踪分析Linux内核的启动过程(http://blog.csdn.net/u013232740/article/details/44341739)
在试验楼上通过qemu工具启动一个简单的操作系统,并通过gdb调试并追踪内核启动执行的过程。大致过程如下:系统启动后首先执行一系列的初始化工作,直到start_kernel处,它是代码的入口点,相当于main.c函数。然后启动系统的第一个进程init,init是所有进程的父进程,由init再启动子进程,从而使得系统成功运行起来。
4):使用库函数API和C代码中嵌入汇编代码两种方式实现对sysinfo的系统调用http://blog.csdn.net/u013232740/article/details/44706421
本实验中通过C语言和内嵌的汇编语言实现了对sysinfo的系统调用,本实验的目的在于理解系统调用的时机过过程。以及系统中断的前后,系统都做了些什么样的工作。
5):分析system_call中断处理过程
本实验的目的使用gdb跟踪分析一个系统调用中断处理过程,分析系统调用从system_call开始到iret结束之间的整个过程。方法是在构建好的系统中加入一个命令,来实现系统调用。然后调试并跟踪。由于提交完了,所以本实验未能按时完成。
6): 分析Linux内核创建一个新进程的过程(http://blog.csdn.net/u013232740/article/details/44998863)
本实验调用fork函数在MenuOS中添加一个创建进程的命令,并通过gdb调试跟踪执行过程。
7):Linux内核如何装载和启动一个可执行程序(http://blog.csdn.net/u013232740/article/details/45131053)
本实验重点研究了源文件目标文件和可执行文件之间的关系,明白Linux环境中可执行文件的生成过程。并且这种分析了ELE可执行文件的文件头结构,根据文件头结构中的描述,可以在GDB中跟踪调试其执行过程。
8):理解进程调度的时机和进程的切换过程(http://write.blog.csdn.net/postedit/45441643)
本实验研究了进程的调度时机,以及调度过程。重点对schedule()函数的使用和执行过程做了分析。对理解进程的调度和进程上下文切换有很好的帮助。
以上八个实验就是本课程的核心,读者认真完成了这八个实验,相信会对linux的理解更上一层楼。

0 0
原创粉丝点击