笔者做为通讯工程的学生,在学习这门课以前虽然会用Linux完成一些简单的任务,但却从没有接触过这个操做系统的内在之美。以前学完C语言的时候,就想认识这个神秘的Linux内核了,但是一直在数学建模和各类活动中抽不开身,学习的过程也是不得其法。直到我看到孟宁老师的《Linux内核分析》这门课时,我想我大概能够在二十年后吹牛了:“当年我大二,读Linux内核源码的时候.....”linux
只是在学习的过程当中,没有找到合适的参考书,致使复习有些困难。到了第6、七周早早的把视频看完,周末想写博客的时候却记不起来了。与其参考别人的博文拼凑出一片,我以为倒不如不写吧。git
下面是学习这门MOOC的过程当中写的6篇博文:github
说到计算机,你们都知道现代计算机都是由冯诺依曼体系结构组成的,也就是储存程序计算机。让我先从它的工做模型提及。函数
经过一个简单的时间片轮转多道程序内核代码,分析linux操做系统学习
mykernel是一个基于Linux 3.9.4的内核模拟程序,经过观察软件模拟的操做系统运行过程能够帮助咱们理解操做系统的进程工做、调度机制。
spa
跟踪分析Linux系统的启动过程操作系统
MenuOS是一个基于Linux 3.18.6内核的微型操做系统,本文使用gdb来观察系统的启动过程,至init进程被启动为止。.net
在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课程