内容一:实验报告相关说明
所学课程:《Linux内核分析》MOOC课程
链接:http://mooc.study.163.com/course/USTC-1000029000
内容二:学习心得
在近两个月的学习过程中,跟着孟宁老师的学习,渐渐地对linux产生了一个大致的了解,(不仅是内核知识点本身,而且包括学习的方法,学习的方向,都有了一些初步的想法)。
内容上:自己学到的东西如下(自己将知识点串在一起的思路)
为什么需要内核 --> 内核的主要工作 --> 搭建linux系统,在系统上进行内核的下载、配置编译等相关操作 --> Linux中GCC ,GDB,Bash Shell,Vim等的使用 -->
进程的概念 --> 进程描述符(进程运行时内核需要了解的相关信息) --> 进程的创建(手工创建和通过系统调用) --> 什么是系统调用,系统调用的三层皮 -->
与系统调用类似的中断和中断处理 --> 进程运行状态(五种状态,状态切换的方法) --> 进程之间的切换(包括进程调度相关知识点,如schedule()函数等) -->
可执行程序的转载和启动(关键的exec() 系统调用) -->通过在控制台上输入ls命令的例子再将相关知识串在一起理解。
内容三:课程学习中最大的收获和遗憾
最大的收获:都是在linux内核学习方法上的。
3.1:老师在上课的时候说过,linux的具体实现代码很多,细节也很多,如果直接看代码,很容易陷入细节中而忽略主干,应该在看代码之前,思考并找出代码想要实现的功能的基本框架,心里带着框架再来研究代码,在具体代码的研究中修正自己的认识偏差和误差。这样也容易抓住主干。
3.2:学习的同时要动手,老师每次都布置了作业,在这个完成作业的过程中,又有许多任务必须要在linux平台完成,比如GDB调试,下载内核并编译内核等等,将所学用上去,自己也能对上课的知识有更深的理解。
最大的遗憾:
说明:因为这些东西本身就不是很理解,所以以下内容可能描述起来是错误的。
自己学完之后,对进程地址空间、内存管理等知识没有较好的理解(应该是这方面的知识吧),所以在理解程序的加载、进程上下文切换,中断上下文切换等涉及地址,内存知识点的东西,理解起来很费劲,要是老师能在这些方面有所点拨就好了。或许是因为自己本身不是计算机专业的,没有学操作系统和计算机组成原理相关知识,不过接下来还是会认真学习一下相关的知识。
内容四:作业目录列表
计算机是如何工作的---linux内核学习笔记(一)
引言:基本的AT&A汇编指令学习,并学会如何分析汇编代码的工作过程中堆栈的变化。
操作系统是如何工作的---linux内核学习笔记(二)
引言:通过一个简单的小程序模拟了任务的的启动和调度,以及记录任务相关信息的PCB。
Linux内核的启动过程---linux内核学习笔记(三)
引言:Linux内核启动过程中所做的事的简要分析和GDB的使用。
Linux内核的系统调用---linux内核学习笔记(四)
引言:用c语言和汇编语言实现同一种系统调用,并分析系统调用过程中所做的事情。
分析system_call中断处理过程---linux内核学习笔记(五)(第五次作业没做,也没有成绩)
分析进程创建的过程---linux内核学习笔记(六)
引言:进程描述符的基本介绍,以及进程创建过程中发生的故事,比较有意思的事情是:fork()系统调用具有一次调用,两次返回的特点,
函数返回了两次,即在父子进程中各返回一次。
可执行程序的装载和启动---linux内核学习笔记(七)
引言:可执行文件ELF的基本内容学习,通过分析和跟踪execve系统调用来理解可执行程序的装载流程,当执行到execve系统调用时,陷入内核态,用execve加载的可执行文件覆盖当前进程的可执行程序,当execve系统调用返回时,返回新的可执行程序的执行起点。
进程调度和切换---linux内核学习笔记(八)
引言:学习了进程切换的关键:schedule()函数,并重点分析了汇编代码switch_to。
上面就是八周的mooc学习得清单列表,当然课后,我也学习了linux相关的知识,虽然有的只是从概念层面的了解,但是终归是有一定收获的,比如说中断和中断的处理,linux中基本的内核数据结构学习,Linux中调度算法的理论学习(具体实现没看),Linux内核同步相关知识等。