首页 体系课 手写x64多核,实战Linux内核,吃透OS本质(二期)
手写x64多核,实战Linux内核,吃透OS本质(二期)
从0到1带你手写x86单核OS,x64多核OS,实战Linux内核内存机制
助力练就远超普通工程师的核心竞争力
技术专家亲授+小班直播教学+录播复习+阶段练习+贴心答疑服务
第2期 2月26日开课
不限期 视频有效期
12 课程内容
6 个月 教学服务期限
60 小时 视频时长
12 学习人数
12 课程内容
6 个月 教学服务期限
70000 手敲代码
2 企业及项目
16+ 实操案例
12 学习人数

上新特惠 ¥4699.00

7天可退款 ¥5899

加购物车 立即购买
引进课程是慕课网为满足站内用户日异多样化的学习需求,面向行业严格筛选历经检验的精
品课程。引进课程在课程质量、售后服务、学习服务等环节均遵循慕课网的质量标准。课程
内容及服务均由课程提供方负责,由慕课网进行严格监督,以确保用户得到优质的服务。

掌握底层硬核技能,搞懂计算机本质,真正突破技术瓶颈

无需具备过高的技术基础,只要你有兴趣,就可以学

天天CRUD、空口谈架构,没办法
让人看到你的技术实力,写一个内
核,震惊全场
你对计算机原理的一切疑惑,通过
手写操作系统,逐一解开
技术市场竞争愈来愈激烈,通过操
作系统的学习打下深厚的底层基础
一眼看穿技术本质
从手写x86单核操作系统,到手写
x64多核操作系统,再到实战Linux
内核

首先带你俯瞰一下OS系统图

其次带你手写一个x64多核操作系统,深刻理解Linux系统的构建过程

从整体上、从硬件角度,理解Linux内核是如何一步步写出来的
将汇编、C语言、硬件、OS融会贯通
能够调优、调试Linux内核,更改Linux内核机制
能够清晰看到伙伴算法、slab的构建、运行过程
打破规则,让不可执行的内存可以执行
打破规则,让不可读写的内存可以读写

小班教学,全程直播,早入手早受益

带你手写x64多核操作系统(赠送)
新增:编写驱动模块,实战Linux内核内存机制(开班时间2月26日)
新增:实战Linux进程线程机制+调度策略(开班时间待定)
新增:实战Linux中断+系统调用+网络协议栈(开班时间待定)
免费提供第一期课程视频+笔记+代码说明:每期直播授课3个月,讲师会调整新增模块。新增内容只能随班学习,不赠送往期视频

十二大专题循序渐进,由汇编语言到Linux内核内存管理,助你玩转Linux内核

1、搭建操作系统框架,输出hello world
2、汇编篇一:先聊汇编全貌、再玩转寄存器
3、汇编篇二:手绘堆栈图,玩转系统执行流
4、汇编篇三:玩转函数,自构建执行流
5、让你的操作系统内核突破512字节
6、引入Makefile管理项目的编译链接
7、了解硬盘工作原理,编写硬盘驱动
8、为了扩展性,将硬盘作为操作系统启动盘
9、让所有虚拟机支持我们写的操作系统:bochs、qemu、VMware
课前:搭建windows内核双击调试环境
1、让我们的操作系统进入保护模式
2、深刻理解段选择子、段描述符、GDT表、LDT表
3、深刻理解CPL、RPL、DPL
4、单步调试windows内核,实战GDT表
5、用户态切内核态的秘密:中断门、调用门、任务门、陷阱门
6、实战调用门实现应用态切内核态再回应用态
1、编写代码进入保护模式,寻址突破1M瓶颈
2、配置环境,让我们的内核支持C语言开发与调试
3、带你玩转ELF文件、gcc、编译与链接
4、C语言基础与实战技巧
5、带你玩转指针
6、C语言如何开发项目
7、封装操作硬件的IO接口
8、实现终端输出模块
9、实现字符串处理库string.h
10、实现可变参数、实现内核打印函数printk实现无限打印
11、C语言接管GDT,为后面更为方便地控制CPU权限做准备
1、重新编译安装bochs、qemu,开启64位功能
2、编码检测bochs、qemu模拟的CPU是否支持64位功能
3、开启4级分页,为进入IA32-e模式做准备
4、激活CPU内部专属寄存器,进入IA32-e兼容模式
5、仿Linux内核,将内核空间映射到虚拟地址高端
6、带你深入理解64位段机制,由IA32-e模式接管GDT表
7、填充64位代码段数据段,为进入长模式做准备
8、编码实现64位内核,进入64位长模式世界
9、独立64位内核,支持C语言开发与调试
10、快速调用约定环境,如何实现可变参数
11、实现64位OS下的内核打印函数printk
1、借助BIOS中断检测物理内存,获取内存条信息
2、仿Linux实现物理内存管理模块
3、模拟CPU MMU工作,通过虚拟地址找到物理地址
4、单步调试内核,在32-bit paging模式下实战MMU工作机制
5、单步调试内核,在PAE paging模式下实战MMU工作机制
6、编码实现32-bit paging虚拟内存分页机制
7、虚拟内存4K小页,2M中页、1G大页的实现原理
8、检测CPU是否支持4级分页、5级分页
9、实现4-level paging虚拟内存分页机制
10、实现虚拟内存管理、缺页异常的发生及修复
1、剖析CPU响应中断的流程
2、深刻理解硬中断、软中断、中断嵌套、中断屏蔽与解除
3、编码激活中断控制芯片,让我们的OS全面接管中断
4、揭秘应用层的除零异常、内存错误是如何捕获的
5、CPU响应中断对内核栈的影响,非常非常重要
6、编码实现键盘中断,为实现shell做准备
7、编码实现时钟中断,为实现任务切换做准备
8、编码实现实时时钟中断,让我们的OS有自己的时间体系
1、剖析Linux是如何实现进程切换的
2、剖析Linux是如何实现线程切换的
3、实现非抢占式任务模型
4、接入时钟中断实现任务调度
5、引入优先级、时间片,控制任务调度顺序及频率
6、实现任务的sleep、wakeup
7、使用local APIC定时器调度任务
8、使用IO APIC定时器调度任务
1、剖析多核CPU响应中断流程
2、编码检测CPU支持的APIC版本
3、如何通过ACPI查询到APIC信息
4、编码获取RSDP的内存地址
5、编码获取RSDT的内存地址
6、编码获取ACPI的内存地址
7、编码获取local APIC信息及CPU数量
8、编码获取IO APIC信息
9、将APIC内存地址映射到虚拟内存
10、为所有CPU核准备内核数据块,描述核信息
11、通过BSP给所有AP发生IPls,初始化所有AP核
12、开启所有AP的local APIC定时器,等待中断发生
1、64位多核环境下任务模块实现思路对比
2、如何激活所有的核同时抢任务运行
3、如何保证同一个任务不被多个核运行
4、如何指定某个核指定某个任务
5、如何知道当前CPU的时钟频率
6、保存恢复上下文,让任务在多核间可以接着运行
7、编码实现任务的安全退出
8、引入时间片及优先级,控制任务的调度优先级及运行频率
1、巧妙借助中断回到用户态
2、填充TSS,让系统完整进入用户态
3、由内核态切入用户态,运行shell
4、构建中断门0x80,搭建系统调用框架
5、实现用户态打印函数printf,深刻理解系统调用
6、通过syscall、sysret指令实现态的切换
1、实现clear清屏命令
2、实现内存信息查询
3、实现CPU信息查询
4、实现进程信息查询
5、实现CPU所有核激活
6、实现CPU单个核激活
1、Linux驱动开发
2、筑基: vfs工作原理
3、如何在Linux内核源码中增加模块
4、拓展: memblock分配器
5、筑基:伙伴系统算法
6、筑基: slab算法
7、实战及源码级讲解alloc_pages
8、实战:通过内存映射,跨进程读写物理内存
9、实战讲解kmallc源码实现
10、实战讲解mmap源码实现

子牙老师亲自提供服务,享受1V1私教般的答疑

子牙老师 技术专家
前阿里P8架构师,十余年技术经验,三年以上讲师经验,资深创业者。喜欢钻研各类高阶技术,对
Windows内核、Linux内核、Hotspot源码有很深的研究,拥有爆款课《手写JVM》等,深受学员的喜爱。
课程会在合适的节点穿插讲解操作系统内核知识、汇编、C语言,所以,你只要感兴趣,都可以学!如果
你对Windows内核、Linux内核有一定的了解,学起来会更加轻松!

一期学员真实评价,一门让你打通“任督二脉”的课程

课程大纲与学习周期安排

为保证课程内容紧跟市场变化,课程章节逐步开放,直至课程完结

阶段一: 【开课前试听视频】
  • 开课前试听
直播试听课

通过观看试看视频,了解子牙老师的技术实力与教学风格

课程安排:
  1. 实战Linux内核课程介绍
  2. 1-1、汇编学到什么程度才能熟练使用
  3. 1-2、汇编、CPU架构、指令集、硬编码之间的关系
  4. 1-3、MASM、NASM、ATT、ARM之间的关系
  5. 1-4、寄存器、CPU缓存、内存之间的关系
  6. 2-1、如何创建内核项目(上)
  7. 2-2、实战常用汇编指令及伪指令
  8. 2-3、如何创建内核项目(下)
  9. 3-1、如何学习才能玩转执行流
  10. 3-2、带你深入理解栈指令本质
  11. 3-3、实战:画堆栈图与构建执行流
  12. 3-4、QA与作业
  13. 4-1、汇编知识点回顾
  14. 4-2、如何用汇编编写带参数的执行流
  15. 4-3、C语言的传参,汇编层面是如何实现的
  16. 5-1、如何精通C语言
  17. 5-2、结合内存理解数据类型
  18. 5-3、从应用角度理解数组
阶段二: 玩转CPU实模式、硬盘,实现微内核
  • 第一周
  • 第二周
由浅入深掌握汇编,实现微内核

本周会带大家写一个微内核,让大家找到学习本门课程的乐趣。对于没有汇编基础的小伙伴,我会从零开始教【购买后,访问第1周第1章第3节获取课程群】

课程安排:
  1. tips:【购买后,访问第1周第1章第3节获取课程群】
  2. 一、汇编篇一:认识汇编全貌,玩转CPU寄存器
  3. 1、汇编、CPU架构、硬编码之间的关系
  4. 2、汇编、C语言、C++、Java之间的关系
  5. 3、MASM、NASM、ATT之间的关系
  6. 4、寄存器、CPU缓存、内存之间的关系
  7. 5、熟练掌握及使用CPU的三组寄存器
  8. 6、实战:在逆向工具OD上练习汇编
  9. 二、开卷,实现操作系统微内核
  10. 1、写操作系统到底写什么
  11. 2、精讲CPU两种运行模式:实模式、保护模式
  12. 3、借助BIOS中断操控屏幕
  13. 4、你写的内核如何运行?
  14. 5、实战:带你手写微内核
  15. 6、实战:使用bochs调试内核
  16. 7、NASM汇编脚本怎么写
  17. 三、汇编篇二:手绘堆栈图,玩转系统执行流
  18. 1、实战:汇编语言实现while循环
  19. 2、while(true)的本质
  20. 3、深入理解系统执行流
  21. 4、破坏执行流:ROP技术
  22. 5、深入理解系统栈指令本质
  23. 6、手写执行堆栈图
  24. 7、实战:通过汇编实现ROP
突破512字节,让内核可以自由发挥

本周实现让我们的内核突破512字节,为后面开发强大的内核扫清阻碍

课程安排:
  1. 一、汇编篇三:玩转调用约定,自构建执行流
  2. 1、实战:使用汇编实现标准执行流
  3. 2、汇编是如何处理形参与实参的
  4. 3、汇编是如何处理局部变量的
  5. 4、汇编是如何处理返回值的
  6. 5、实战演示不同平台的调用约定
  7. 6、实战演示内联汇编与裸函数
  8. 二、玩转硬盘,让你的OS尽情发挥
  9. 1、聊聊CMOS、BIOS、UEFI、MBR、GPT、GRUB
  10. 2、了解软盘读写原理,实战读写软盘
  11. 3、实战:让你的OS突破512字节
  12. 4、了解硬盘工作原理、硬盘寻址方式
  13. 5、编写硬盘驱动,实现硬盘启动OS
  14. 6、如何实现硬盘异步读写、硬盘预读
阶段三: 进入保护模式,实现真正意义上的内核
  • 第三周
  • 第四周
编码进入保护模式支持C语言开发内核&调试

本周目标是让我们的内核进入保护模式,开启强大功能的能力

课程安排:
  1. 一、带你玩转CPU的段机制
  2. 1、带你深入理解GDT表、LDT表
  3. 2、单步调试内核,让你看看GDT长啥样
  4. 3、带你深入理解段描述符
  5. 4、操作系统如何使用GDT表
  6. 5、实战:手动构建GDT表
  7. 6、单步调试OS内核环境如何搭建
  8. 二、编码进入保护模式
  9. 1、进入保护模式代码怎么写
  10. 2、如何用C语言开发内核
  11. 3、如何调试内核中的C代码
  12. 4、如何实现汇编、C语言互调
  13. 5、带你了解ELF,手写ELF文件解析器
  14. 6、带你了解gcc、编译、链接
  15. 7、实战:编码让OS进入保护模式
  16. 三、带你玩转C语言
  17. 1、如何精通C语言
  18. 2、结合内存理解数据类型
  19. 3、从应用角度理解数组
  20. 4、从应用角度理解字符串
  21. 5、从应用角度理解函数
  22. 6、玩转多级指针
深刻理解C语言,实现屏幕驱动

本周带你深入理解C语言的指针,然后实现内核的第一个模块:打印输出模块

课程安排:
  1. 一、带你玩转指针,C、汇编、内容融会贯通
  2. 1、带你深入理解结构体、联合体、宏
  3. 2、带你全面理解指针
  4. 3、指针常量与常量指针
  5. 4、指针与函数、数组、字符串
  6. 5、指针与结构体
  7. 6、结构体与硬编码
  8. 二、实现内核打印函数printk
  9. 1、保护模式下如何控制硬件
  10. 2、如何实现汇编与C语言的互调
  11. 3、封装硬件操作接口
  12. 4、自实现可变参数stdarg
  13. 5、自实现字符串处理库string.h
  14. 6、自实现内核打印函数printk
阶段四: 进入64位模式,实现任务切换
  • 第五周
  • 第六周
进入64位模式实现物理内存及虚拟内存管理

本周目标是让我们的内核进入64位模式,实现物理内存管理模块、虚拟内存管理模块

课程安排:
  1. 一、让CPU进入64位长模式
  2. 1、如何让CPU进入64位模式
  3. 2、64位CPU的寄存器变化
  4. 3、64位模式下的段机制变化
  5. 4、如何知道CPU是否支持64位模式
  6. 5、编码让CPU进入64位模式
  7. 6、实现C语言开发与调试64位内核
  8. 二、检测内存,实现物理内存管理模块
  9. 1、操作系统是如何知道内存条的大小的
  10. 2、如何编码实现对内存条的控制
  11. 3、如何实现对物理内存的管理
  12. 4、实战:编码实现物理内存管理模块
  13. 5、物理内存的局限,分页虚拟内存诞生
  14. 6、实战:10-10-12分页模式
  15. 三、实现4-level paging虚拟内存管理
  16. 1、细讲自实现内核的内存结构
  17. 2、32-bit paging分页模式细讲
  18. 3、带你深入理解PAE paging分页模式
  19. 4、实战:编码实现4-level paging虚拟内存
  20. 5、如何将内核映射到虚拟内存的高端地址
  21. 6、实战:编码实现虚拟内存管理模块
实现64位模式下的任务切换

本周带你实现中断机制、任务切换,深入理解主流OS系统调度的底层原理

课程安排:
  1. 一、让我们的OS有自己的中断处理机制
  2. 1、中断在操作系统中的应用
  3. 2、CPU响应中断的流程
  4. 3、实战:编码激活中断控制芯片
  5. 4、实战:编码实现键盘中断
  6. 5、实战:编码实现时钟中断
  7. 6、实战:编码获取系统时间
  8. 二、实现任务切换(一)
  9. 1、如何正确理解进程、线程、协程、纤程
  10. 2、实现一套完整任务机制的完美节奏
  11. 3、操作系统是如何实现线程切换的
  12. 4、操作系统是如何实现进程切换的
  13. 5、实战:实现任务切换
  14. 6、实战:借助时钟中断实现任务调度
阶段五: 实现多核任务切换(录播)
  • 第六周
  • 第六周
控制多核中断控制器,实现多核任务切换

本周教你如何控制多核中断控制器,在此基础上实现多核任务切换。助你深刻理解多核环境下的Linux多线程底层实现

课程安排:
  1. 一、实现任务切换(二)
  2. 1、实战:让线程运行在自己的栈里
  3. 2、实战:实现任务的退出
  4. 3、实战:引入优先级及时间片控制任务调度
  5. 4、实战:实现任务的sleep
  6. 5、实战:实现任务的wakeup
  7. 6、揭秘:Linux中的fork函数是如何实现的
  8. 二、带你玩转多核控制器:APIC
  9. 1、筑基:ACPI机制
  10. 2、筑基:APIC机制
  11. 3、实战:获取APIC操作地址
  12. 4、实战:虚拟映射APIC地址
  13. 5、筑基:多处理器初始化协议
  14. 6、实战:激活AP核
  15. 三、实现多核任务切换(一)
  16. 1、测量local APIC的时钟周期
  17. 2、实战:为每个CPU设置专属数据区
  18. 3、实战:通过local APIC调度任务
  19. 4、实战:通过IO APIC调度任务
  20. 5、实战:让每个线程在自己的栈中运行
  21. 6、实现多核任务切换框架
进入用户态,实现shell,实现系统调用

本周带你实现多核环境下的任务切换后半部分,进入用户态,实现shell、系统调用

课程安排:
  1. 一、实现多核任务切换(二)
  2. 1、实现多核环境下的任务调度
  3. 2、实战:引入锁控制并发
  4. 3、实战:引入时间片控制任务调度
  5. 4、实现多核环境下任务的阻塞与唤醒
  6. 5、实现多核环境下任务的退出
  7. 6、实现内核线程
  8. 二、进入用户态,实现系统调用,完成态切换
  9. 1、如何让CPU由内核态进入用户态
  10. 2、如何让CPU由用户态进入内核态
  11. 3、实战:编码实现CPU进入用户态
  12. 4、实战:编码实现中断门跨态
  13. 5、实战:编码实现syscall跨态
  14. 6、实战:编码实现系统调用及printf
阶段六: 带你玩转Linux内核内存模块
  • 第七周
  • 第八周
编写Linux内核驱动,实战虚拟内存分页

本周带你学会Linux驱动开发,在此基础上,在实战中理解Linux内核的虚拟内存映射机制及内存管理机制

课程安排:
  1. 一、Linux驱动开发
  2. 1、搭建单步调试Linux5.4内核环境
  3. 2、筑基:字符设备理论
  4. 3、实战:创建字符设备
  5. 4、实战:自动创建设备节点
  6. 5、筑基:vfs工作原理
  7. 6、如何在Linux内核源码中增加模块
  8. 二、Linux内核内存管理之混沌初开
  9. 1、Linux内核如何借助e820获取内存信息
  10. 2、拓展:memblock分配器
  11. 3、如何理解ZONE_DMA、ZONE_DMA32、ZONE_HIGHMEM
  12. 4、筑基:伙伴系统算法
  13. 5、筑基:slab算法
  14. 6、实战及源码级讲解alloc_pages
  15. 三、玩转Linux内核之虚拟内存
  16. 1、实战:遍历进程页表
  17. 2、实战:解析页描述符
  18. 3、实战:模拟MMU工作机制
  19. 4、实战:打破规则,让不可执行的内存可以执行
  20. 5、实战:打破规则,让不可读写的内存可以读写
  21. 6、实战:通过内存映射,跨进程读写物理内存
在实战中深刻理解Linux内核内存管理

本周带你源码级理解Linux内存模块的核心函数,让你玩转Linux内核内存管理

课程安排:
  1. 一、玩转Linux内核内存管理
  2. 1、Linux用户进程之内存空间机制
  3. 2、实战讲解kmallc源码实现
  4. 3、实战讲解mmap源码实现
  5. 4、实战讲解Linux内核大页机制
  6. 5、从用户态到内核态,源码级分析malloc
  7. 6、从用户态到内核态,源码级分析free
适合人群
所有计算机行业从业人员
对OS、逆向等底层感兴趣的小伙伴
想成为技术大牛,掌握技术本质
技术要求
汇编、C、硬件、OS理论零基础入门
Windows内核、Linux有基本了解
环境参数
虚拟机环境VMware+ubuntu16
开发IDE用clion
运行环境qemu+bochs
其他如OD+CE+VS2013
学习目标
技术架构
课程安排
讲师介绍
课程大纲
返回顶部
常见问题

学习咨询

选课、学习遇到问题?
扫码添加指导老师 1V1 帮助你!

扫码加顾问老师 立即咨询

意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师