李洋 原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
转眼几周过去,《Linux内核分析》这门课也眼看就要结束,再这几周的学习中,我在原来的基础上加深了对Linux系统内核的理解,比如很多内存管理,进程管理的知识,原来对于我只是书本上的东西,通过课程和实验却能够通过切实的代码和运行过程的跟踪而表现出来。
这几周的学习心得:
这次学习涉及了Linux内核调度机制,schedule如何工作,系统API的实现,创建新进程过程的分析,可执行程序的装载及可执行ELF文件的结构等知识,线上课程总体上来说主要涉及的是内核启动~调度~运转的一个过程。
基于x86计算机Linux系统的启动顺序。第一步是BIOS从启动设备中导入主引导记录(MBR),接下来MBR中的代码查看分区表并从活动分区读取GRUB、LILO或SYSLINUX等引导装入程序,之后引导装入程序会加载压缩后的内核映像并将控制权传递给它。内核取得控制权后,会将自身解压缩并投入运转。
基于x86的处理器有两种操作模式:实模式和保护模式。在实模式下,用户仅可以使用1 MB内存,并且没有任何保护。保护模式要复杂得多,用户可以使用更多的高级功能(如分页)。cpu必须中途将实模式切换为保护模式。但是,这种切换是单向的,即不能从保护模式再切换回实模式。
内核初始化的第一步是执行实模式下的汇编代码,之后执行保护模式下init/main.c文件中的 start_kernel()函数。start_kernel()函数首先会初始化CPU子系统,之后让内存和进程管理系统就位,接下来启动外部总线和 I/O设备,最后一步是激活初始化(init)程序,它是所有Linux进程的父进程。初始化进程执行启动必要的内核服务的用户空间脚本,并且最终派生控制台终端程序以及显示登录(login)提示。
下面是我学习这门课所有文章的目录:
总结:
通过学习,我掌握了更多的编译和GDB调试技巧,知道了如何自己编译生成一个Linux系统,当然更进一步的可能就是在系统内核上做手脚,尝试更改~删减~增加内核功能。
当然。。。顺便的,写博客的能力也得到了很大的提升。。。这算是意外之喜,写博客确实能够从另一方面体现自己对知识的掌握程度,不过呢,确实让我有高中时候被语文老师逼着写周记的感觉(那是解决方案是自己写连载小说。。。)。
如果说意见的话,我觉着本课程的富文本材料可以更丰富一些,尤其是对于核心代码的注解。同时呢,目前实验的设计更侧重与验证实验,我希望能有更多让同学们自己发挥的东西,比如提出一个功能,让大家结合本节所讲的内容进行实现;或者给出代码框架,让大家补全汇编代码之类,我觉着这样子动手动脑去做,会比照着做得验证实验更为有效。