课程概况
本课程从理解计算机硬件的核心工作机制(存储程序计算机和函数调用堆栈)和用户态程序如何通过系统调用陷入内核(中断异常)入手,通过上下两个方向双向夹击的策略,并利用实际可运行程序的反汇编代码从实践的角度理解操作系统内核,然后开始分析Linux内核源代码,从系统调用陷入内核,进程调度与进程切换,最后返回到用户态进程,通过仔细分析梳理这一过程,并推广到硬件中断、缺页异常等内核执行路径,最终能从本质上把握Linux内核的实质,乃至在头脑中演绎Linux系统的运行过程。
课程大纲
第一周:计算机是如何工作的?
存储程序计算机工作模型
32位X86汇编基础
反汇编一个简单的C程序
第二周:利用mykernel实验模拟计算机硬件平台
函数调用堆栈
如何打断当前正在执行的程序?——中断
保护现场和恢复现场
借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断
构造一个简单的操作系统内核
第三周:构造一个简单的Linux系统
Linux内核源代码导读
构造一个简单的Linux系统
跟踪调试Linux内核的启动过程
第四周:程序和进程
程序的编译、链接和可执行文件格式
进程的描述和程序的装载
第五周:利用汇编指令触发系统调用
使用库函数触发一个系统调用
C代码中嵌入汇编代码的写法
使用嵌入式汇编代码触发同一个系统调用
系统调用在内核代码中的处理过程
第六周:进程的执行和进程的切换
用户态堆栈和内核态堆栈
进程上下文的保存和恢复
进程切换的关键代码switch_to分析
第七周:Linux内核的实质和Linux系统的一般执行过程
内核执行路径的集合——中断(异常)处理过程的集合
Linux系统的一般执行过程
第八周:Linux系统架构和执行过程概览
Linux系统架构
Linux执行过程概览
预备知识
Linux基本操作技能、C语言、数据结构基础、操作系统原理
参考资料
《深入理解Linux内核》第三版
程序员的自我修养:链接、装载与库 潘爱民 (作者), 俞甲子 (作者), 石凡 (作者)
部分自编讲义http://teamtrac.ustcsz.edu.cn/wiki/Linux2014
参考了中国科大陈香兰老师和MIT的Frans Kaashoek老师的课程资料及互联网上获得相关资料,向原作者们表示诚挚的谢意,如有版权问题请与我联系。
源代码链接:
https://www.kernel.org/
http://codelab.shiyanlou.com/xref/linux-3.18.6/
http://lxr.free-electrons.com/source/?v=3.18