是不是学完操作系统原理后觉得纸上谈兵不过瘾?是不是面对浩若烟海的Linux内核源代码迷失在代码的海洋里不知所措?这门课可以带您用理论结合实践的方法一步一步抓住Linux内核最核心的部分代码,理解Linux操作系统运行的基本过程及涉及的核心机制。
本课程从理解计算机硬件的核心工作机制(存储程序计算机和函数调用堆栈)和用户态程序如何通过系统调用陷入内核(中断异常)入手,通过上下两个方向双向夹击的策略,并利用实际可运行程序的反汇编代码从实践的角度理解操作系统内核,然后开始分析
Linux 内核源代码,从系统调用陷入内核,进程调度与进程切换,最后返回到用户态进程,通过仔细分析梳理这一过程,并推广到硬件中断、缺页异常等内核执行路径,最终能从本质上把握Linux 内核的实质,乃至在头脑中演绎Linux 系统的运行过程。
Overview
Syllabus
- 第一周:计算机是如何工作的?
- 1 存储程序计算机工作模型
- 2 32位X86汇编基础
- 3 汇编一个简单的C程序
- 单元测验
- 实验作业
- 随堂小测
- 第二周:操作系统是如何工作的?
- 1 函数调用堆栈
- 2 借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断
- 3 构造一个简单的操作系统内核
- 4 单元测验
- 实验作业
- 随堂小测
- 第三周:构造一个简单的Linux系统MenuOS
- 1 Linux内核源代码导读
- 2 构造一个简单的Linux系统
- 3 跟踪调试Linux内核的启动过程
- 4 单元测验
- 实验作业
- 随堂小测
- 第四周:扒开系统调用的三层皮(上)
- 1 使用库函数触发一个系统调用
- 2 C代码中嵌入汇编代码的写法
- 3 使用嵌入式汇编代码触发同一个系统调用
- 单元测验
- 实验作业
- 随堂小测
- 第五周:扒开系统调用的三层皮(下)
- 给MenuOS增加time和time-asm命令
- 使用gdb跟踪系统调用内核函数sys_time
- 系统调用在内核代码中的处理过程
- 单元测验
- 实验作业
- 随堂小测
- 第六周:进程的描述和进程的创建
- 1.进程的描述
- 2.进程的创建
- 单元测验
- 实验作业
- 随堂小测
- 第七周:可执行程序的装载
- 1 预处理、编译、链接和目标文件的格式
- 2 可执行程序、共享库和动态链接
- 3 可执行程序的装载
- 单元测验
- 实验作业
- 随堂小测
- 第八周:进程的切换和系统的一般执行过程
- 1 进程切换的关键代码switch_to分析
- 2 Linux系统的一般执行过程
- 3 Linux系统架构和执行过程概览
- 单元测验
- 实验作业
- 随堂小测
- 期末考试
- 客观题部分
- 主观题部分
Taught by
Ning Meng