笔者作为通信工程的学生,在学习这门课之前虽然会用Linux完成一些简单的任务,但却从没有接触过这个操作系统的内在之美。之前学完C语言的时候,就想认识这个神秘的Linux内核了,可是一直在数学建模和各种活动中抽不开身,学习的过程也是不得其法。直到我看到孟宁老师的《Linux内核分析》这门课时,我想我大概可以在二十年后吹牛了:“当年我大二,读Linux内核源码的时候.....”
只是在学习的过程中,没有找到合适的参考书,导致复习有些困难。到了第六、七周早早的把视频看完,周末想写博客的时候却记不起来了。与其参考别人的博文拼凑出一片,我觉得倒不如不写吧。
下面是学习这门MOOC的过程中写的6篇博文:
说到计算机,大家都知道现代计算机都是由冯诺依曼体系结构组成的,也就是储存程序计算机。让我先从它的工作模型说起。
通过一个简单的时间片轮转多道程序内核代码,分析linux操作系统
mykernel是一个基于Linux 3.9.4的内核模拟程序,通过观察软件模拟的操作系统运行过程可以帮助我们理解操作系统的进程工作、调度机制。
MenuOS是一个基于Linux 3.18.6内核的微型操作系统,本文使用gdb来观察系统的启动过程,至init进程被启动为止。
在Linux系统下,我们不仅可以通过API,还可以直接使用系统调用号来进行系统调用。本文简要介绍了fork函数,进而使用C代码内嵌汇编代码的形式直接进行系统调用,并与直接使用API进行调用的C代码进行对比。
本文在原有MenuOS的基础上添加了fork和fork-asm命令,再使用gdb跟踪调试,最后分析了Linux系统调用从system_call开始到iret结束之间的整个过程。
在操作系统运行过程中,由于CPU bound和I/O bound,进行进程的调度自然是常事。进行进程调度时,操作系统使用某些特定算法(如FIFO、SCBF、轮转法等)在进程队列中选出一个进程作为下一个运行的进程,调用schedule。
----------------------------------------------------------------------------------------------------------
从来没觉得内核距离自己这么近。老师还曾批评过我说学Linux内核有些“不务正业”,但我觉得在这门MOOC中学习到的是系统底层的“内功心法”,学会了这些,再去学各种上层的知识也更加得心应手了。
陈政/arc001 原创作品转载请注明出处 《Linux内核分析》MOOC课程
来源:oschina
链接:https://my.oschina.net/u/2431498/blog/664438