本课程从理解计算机硬件的核心工作机制(存储程序计算机和函数调用堆栈)和用户态程序如何通过系统调用陷入内核(中断异常)入手,通过上下两个方向双向夹击的策略,并利用实际可运行程序的反汇编代码从实践的角度理解操作系统内核,然后开始分析Linux内核源代码,从系统调用陷入内核,进程调度与进程切换,最后返回到用户态进程,通过仔细分析梳理这一过程,并推广到硬件中断、缺页异常等内核执行路径,最终能从本质上把握Linux内核的实质,乃至在头脑中演绎Linux系统的运行过程。
课程目录
├──01.存储程序计算机工作模型
| ├──HowtheComputerWorks.pdf 605.98kb
| └──存储程序计算机工作模型.avi 43.40M
├──02.X86汇编基础
| ├──1.X86 Registers.avi 29.64M
| ├──2.X86汇编指令一(mov指令及几种内存寻址方式).avi 36.59M
| ├──3.X86汇编指令二(push、pop、call、ret).avi 43.08M
| ├──4.分析几个汇编指令片段(一).avi 26.71M
| ├──5.分析几个汇编指令片段(二).avi 17.30M
| └──参考资料.txt 0.26kb
├──03.反汇编一个简单的C程序分析其汇编指令执行过程
| ├──1.反汇编一个简单的C程序.avi 31.77M
| ├──2.C程序和对应的汇编指令.avi 28.53M
| ├──3.完整汇编程序执行过程分析.avi 116.90M
| └──执行过程演示.gif 706.20kb
├──04.操作系统是如何工作的?
| ├──1.三个法宝.avi 34.19M
| ├──2.深入理解函数调用堆栈.avi 51.33M
| ├──3.参数传递与局部变量.avi 86.76M
| ├──FoundationsForHackingLinux.pdf 659.03kb
| └──计算机是如何工作的?(总结)——三个法宝.txt 0.44kb
├──05.利用mykernel实验模拟计算机硬件平台
| ├──1.mykernel实验背后涉及的思想.avi 26.37M
| ├──2.利用mykernel实验模拟计算机硬件平台.avi 37.52M
| └──mykernel实验指导.txt 0.28kb
├──06.在mykernel基础上构造一个简单的操作系统内核
| ├──1.C代码中嵌入汇编代码的写法.avi 55.88M
| ├──2.一个简单的操作系统内核源代码.avi 89.87M
| └──3.运行这个精简的操作系统内核.avi 12.49M
├──07.Linux内核源代码简介
| └──1.Linux内核源代码.avi 61.84M
├──08.构造一个简单的Linux系统
| ├──1.构造一个简单的Linux系统MenuOS.avi 55.53M
| └──实验指导.txt 1.74kb
├──09.跟踪调试Linux内核的启动过程
| ├──1.使用gdb跟踪调试Linux内核的方法.avi 35.65M
| ├──2.简单分析一下start_kernel.avi 53.81M
| └──Linux内核启动过程相关的参考资料.txt 1.34kb
├──10.用户态、内核态和中断
| └──1.用户态、内核态和中断.avi 66.41M
├──11.系统调用概述
| ├──1.系统调用概述.avi 57.74M
| └──SystemCall.pdf 228.90kb
├──12.使用库函数API和C代码中嵌入汇编代码触发同一个系统调用
| ├──1.使用库函数API获取系统当前时间.avi 10.78M
| ├──2.C代码中嵌入汇编代码的写法.avi 55.91M
| └──3.使用C代码中嵌入汇编代码触发系统调用获取系统当前时间.avi 19.23M
├──13.给MenuOS增加time和time-asm命令
| └──1.给MenuOS增加time和time-asm命令.avi 32.27M
├──14.使用gdb跟踪系统调用内核函数sys_time
| └──1.使用gdb跟踪系统调用内核函数sys_time.mp4 42.88M
├──15.系统调用在内核代码中的处理过程
| ├──1.系统调用在内核代码中的工作机制和初始化.mp4 15.36M
| ├──2.简化后便于理解的system_call伪代码.mp4 39.36M
| └──3.简单浏览system_call到iret之间的主要代码.mp4 22.46M
├──16.进程的创建
| ├──创建的新进程是从哪里开始执行的.wmv 25.23M
| ├──进程的创建的创建和撤销资料参考.txt 1.70kb
| ├──进程的创建概览及fork一个进程的用户态代码.wmv 39.80M
| ├──理解进程创建过程复杂代码的方法.wmv 60.98M
| ├──浏览进程创建过程相关的关键代码.wmv 62.42M
| └──使用GDB跟踪创建新进程的过程.wmv 32.07M
├──17.进程的描述
| ├──进程描述符task_struct数据结构(二).wmv 50.69M
| └──进程描述符task_struct数据结构(一).wmv 32.05M
├──18.预处理编译链接和目标文件的格式
| ├──静态链接的ELF可执行文件和进程的地址空间.wmv 13.81M
| ├──可执行程序是怎么得来的.wmv 31.67M
| ├──目标文件的格式ELF.wmv 31.13M
| └──预处理编译和链接相关命令参考.txt 2.82kb
├──19.可执行程序共享库和动态链接
| ├──可执行程序共享库和动态链接.txt 2.39kb
| ├──装载可执行程序之前的工作.wmv 43.17M
| └──装载时动态链接和运行时动态链接应用举例.wmv 41.94M
├──20.可执行程序的装载
| ├──sys_execve的内部处理过程.wmv 61.47M
| ├──可执行程序的装载.txt 1.89kb
| ├──可执行程序的装载相关关键问题分析.wmv 88.25M
| ├──可执行程序的装载与庄生梦蝶的故事.wmv 38.34M
| ├──浅析动态链接的可执行程序的装载.wmv 78.03M
| └──使用GDB跟踪sys_execve内核函数的处理过程.wmv 43.22M
├──21.进程切换的关键代码switch_to分析
| ├──进程的调度时机与进程的切换.txt 3.77kb
| ├──进程调度与进程调度的时机分析.wmv 66.12M
| └──进程上下文切换相关代码分析.wmv 55.89M
├──22.Linux系统的一般执行过程
| ├──Linux系统的一般执行过程.txt 0.90kb
| ├──linux系统的一般执行过程分析.wmv 56.63M
| ├──linux系统执行过程中的几个特殊情况.wmv 31.07M
| └──内核与舞女.wmv 88.50M
└──23.linux系统架构和执行过程概览
| ├──LinuxArchitectureAndSystemExecution.pdf 256.76kb
| ├──linux操作系统架构概览.wmv 17.88M
| ├──从CPU和内存的角度看linux系统的执行.wmv 8.07M
| └──最简单也是最复杂的操作--执行ls命令.wmv 7.57M