getfromcode

从0手写自己的Linux x86操作系统(李述铜)

测试运维
课程简介

从底层重构系统认知 这门课程的核心价值在于,它不依赖任何现成的内核框架,而是引导开发者使用汇编语言与 C 语言混合编程,从零开始在 x86 架构上实现一个具备多道程序能力的操作系统。对于习惯使用 Linux 或 Windows API 的高级开发者而言,传统教程往往止步于应用层或驱动层,缺乏对内核调度、内存映射及进程同步机制的底层透视。本课程填补了这一空白…

已有 0 人浏览 发布 2026-09-24 更新 2026-09-23

从底层重构系统认知

这门课程的核心价值在于,它不依赖任何现成的内核框架,而是引导开发者使用汇编语言与 C 语言混合编程,从零开始在 x86 架构上实现一个具备多道程序能力的操作系统。对于习惯使用 Linux 或 Windows API 的高级开发者而言,传统教程往往止步于应用层或驱动层,缺乏对内核调度、内存映射及进程同步机制的底层透视。本课程填补了这一空白,通过手写进程管理、信号量及页表构建,将操作系统理论中的抽象概念转化为可调试、可运行的代码实体。它解决的根本问题是开发者对“系统如何工作”的认知黑盒,提供了一份硬核的工程实践范本。

前置要求与最佳学习路径

课程涉及保护模式切换、中断描述符表(IDT)配置及分页机制,因此要求学习者具备扎实的 x86 汇编基础,熟悉 Makefile 构建流程,并了解 QEMU 模拟器或 VirtualBox 的调试技巧。建议先快速浏览内核启动与中断处理相关章节,建立整体架构印象,随后重点投入第 10 章至第 12 章的核心模块。第 10 章详细拆解了就绪队列、时间片轮转及临界资源保护,是理解进程调度的关键;第 12 章则深入内存分页与页表创建,这是实现虚拟内存保护的基石。学习者需准备好源码编辑器与虚拟机环境,随视频进度逐步完善代码库。

学成后的工程能力

完成本课程后,开发者能够独立搭建一个具备基本进程并发、互斥同步及虚拟内存管理的微型内核。更重要的是,这种从零构建的经历将极大提升调试复杂系统问题的能力,特别是在处理段错误、死锁及内存越界等底层故障时。这份资料适合对照源码进行逐行实践,而非仅作视频观摩。建议在每一章节结束后,立即手动修改时间片大小或信号量逻辑,观察系统行为变化,从而真正掌握操作系统内核的设计哲学与工程实现细节。

课程目录

{10}–进程的管理与延时 [10.10]–让所有进程都能延时.mp4 45.60M [10.1]–添加任务管理器.mp4 48.49M [10.2]–将任务加入就绪队列.mp4 37.90M [10.3]–进程主动放弃CPU.mp4 45.29M [10.4]–让进程按时间片运行(1).mp4 8.50M [10.5]–让进程按时间片运行(2).mp4 43.62M [10.6]–临界资源及简单的保护(1).mp4 20.47M [10.7]–临界资源及简单的保护(2).mp4 32.09M [10.8]–临界资源及简单的保护(3).mp4 24.02M [10.9]–让进程能够延时运行.mp4 68.76M {11}–进程间的同步与互斥 [11.1]–计数信号量及其初始化.mp4 31.80M [11.2]–发送和等待信号.mp4 33.19M [11.3]–使用计数信号量.mp4 39.98M [11.4]–互斥锁及其初始化.mp4 16.63M [11.5]–互斥锁的加解锁.mp4 28.65M [11.6]–应用互斥锁.mp4 30.98M {12}–虚拟内存管理和保护模式 [12.10]–内存分页机制介绍.mp4 24.74M [12.11]–开启内存分页机制(1).mp4 26.91M [12.12]–开启内存分页机制(2)-1.mp4 14.82M [12.13]–开启内存分页机制(2)-2.mp4 41.63M [12.14]–开启内存分页机制(2)-3.mp4 20.70M [12.15]–创建内核页表(1)-建立映射表(1).mp4 16.52M [12.16]–创建内核页表(1)-建立映射表(2).mp4 47.46M [12.17]–创建内核页表(2)-页目录和页表结构.mp4 50.76M [12.18]–创建内核页表(3)-建立映射表(1).mp4 22.05M [12.19]–创建内核页表(3)-建立映射表(2).mp4 49.96M [12.1]–内存管理问题.mp4 36.71M [12.20]–创建内核页表(3)-建立映射表(3).mp4 50.14M [12.21]–创建内核页表(4)-添加权限处理.mp4 38.22M [12.22]–为进程创建页表(1).mp4 26.00M [12.23]–为进程创建页表(2).mp4 76.70M [12.2]–位图数据结构与初始化.mp4 28.70M [12.3]–位图位的分配(1).mp4 6.02M [12.4]–位图位的分配(2).mp4 39.39M [12.5]–创建地址分配结构(1).mp4 24.85M [12.6]–创建地址分配结构(2).mp4 33.75M [12.7]–规划内存空间的分配(1).mp4 8.22M [12.8]–规划内存空间的分配(2).mp4 34.45M [12.9]–规划内存空间的分配(3).mp4 33.51M {13}–隔离操作系统与进程 [13.10]–为进程添加特权级0的栈空间.mp4 86.38M [13.1]–隔离操作系统与进程(1)-代码分离.mp4 75.22M [13.2]–隔离操作系统与进程(2)-地址分离.mp4 71.44M [13.3]–隔离操作系统与进程(3)-搬运代码.mp4 70.92M [13.4]–调整应用的特权级(1).mp4 36.70M [13.5]–调整应用的特权级(2).mp4 45.17M [13.6]–调整异常处理函数(1).mp4 37.10M [13.7]–调整异常处理函数(2).mp4 78.30M [13.8]–修改空闲任务的特权级.mp4 28.52M [13.9]–切换至应用进程的特权级为最低.mp4 54.78M {14}–建立系统调用 [14.1]–创建调用门.mp4 60.44M [14.2]–实现系统调用的调用和返回(1).mp4 56.26M [14.3]–实现系统调用的调用和返回(2).mp4 26.67M [14.4]–实现msleep系统调用(1).mp4 54.18M [14.5]–实现msleep系统调用(2).mp4 19.43M [14.6]–实现getid系统调用.mp4 63.59M [14.7]–实现pint_msg调用.mp4 22.85M [14.8]–使用int$0x80实现系统调用.mp4 62.82M {15}–新进程的加载与创建 [15.10]–实现exec系统调用(6)-为进程传递参数(1).mp4 19.87M [15.11]–实现exec系统调用(6)-为进程传递参数(2).mp4 110.61M [15.12]–添加sys_yield()系统调用.mp4 55.20M [15.1]–实现fork系统调用(1)-添加调用接口.mp4 38.38M [15.2]–实现fork系统调用(2)-分配任务块.mp4 33.19M [15.3]–实现fork系统调用(3)-初始化任务块.mp4 121.47M [15.4]–实现fork系统调用(4)-复制进程地址空间.mp4 107.83M [15.5]–实现exec系统调用(1)-创建一个空应用.mp4 69.54M [15.6]–实现exec系统调用(2)-增加空的exec调用.mp4 25.02M [15.7]–实现exec系统调用(3)-添加虚似文件访问接口.mp4 78.75M [15.8]–实现exec系统调用(4)-解析并加载elf文件.mp4 144.17M [15.9]–实现exec系统调用(5)-分配栈并进入进程执行.mp4 62.42M {16}–使用c标准库中的printf输出 [16.1]–增加文件系统调用(1).mp4 77.62M [16.2]–增加文件系统调用(2).mp4 32.85M [16.3]–导入newlibc并调用printf.mp4 70.67M [16.4]–为malloc实现sys_brk调用(1).mp4 8.94M [16.5]–为malloc实现sys_brk调用(2).mp4 114.52M [16.6]–简单的printf调用实现.mp4 33.85M {17}–使用控制台与键盘进行输入输出 [17.10]–键盘初始化.mp4 44.86M [17.11]–借助按键映射表进行键值转换(1).mp4 29.85M [17.12]–借助按键映射表进行键值转换(2).mp4 80.06M [17.13]–处理caplock键.mp4 43.37M [17.14]–处理其它特殊功能键.mp4 55.95M [17.1]–控制台简介与初始化(1).mp4 24.67M [17.2]–控制台简介与初始化(2).mp4 41.97M [17.3]–在控制台上显示字符串.mp4 83.54M [17.4]–处理换行和清屏.mp4 91.87M [17.5]–设置光标并重定向日志输出到显示器.mp4 47.15M [17.6]–有趣的转义字符串以及删除字符.mp4 46.84M [17.7]–保存并恢复光标位置.mp4 94.33M [17.8]–更新显示字体的颜色.mp4 91.49M [17.9]–移动光标位置及清屏.mp4 66.53M {18}–设备管理与文件系统 [18.10]–打开tty设备并向其写入数据.mp4 86.72M [18.11]–从tty读取键值字符串并显示.mp4 94.59M [18.12]–打开标准输出及错误输出文件.mp4 63.90M [18.13]–允许切换tty窗口(1).mp4 9.34M [18.14]–允许切换tty窗口(2).mp4 83.07M [18.15]–为每个tty窗口创建进程并保护.mp4 66.32M [18.1]–设备管理框架简介.mp4 37.49M [18.2]–增加tty设备.mp4 26.59M [18.3]–实现dev层接口操作.mp4 54.24M [18.4]–为tty设备添加结构描述.mp4 36.78M [18.5]–实现tty设备的打开.mp4 51.59M [18.6]–通过tty设备写显示数据(1).mp4 18.06M [18.7]–通过tty设备写显示数据(2).mp4 101.97M [18.8]–文件系统简介及初始化.mp4 43.63M [18.9]–为进程添加文件打开表.mp4 30.80M {19}–实现一个命令行解释器 [19.1]–初始化命令行解释器.mp4 66.29M [19.2]–实现help命令的解析.mp4 79.74M [19.3]–执行echo命令并给输出加点颜色(1).mp4 52.66M [19.4]–执行echo命令并给输出加点颜色(2).mp4 57.08M [19.5]–为进程增加exit接口.mp4 69.83M [19.6]–为进程增加wait接口(1).mp4 39.38M [19.7]–为进程增加wait接口(2).mp4 77.26M [19.8]–为进程增加wait接口(3).mp4 22.60M [19.9]–让子进程继承父进程已打开的文件.mp4 51.66M {1}–课前准备 (1.2)–资料下载链接.pdf 795.36kb (1.4)–常见问题.pdf 4.13M [1.1]–课程简介.mp4 35.83M [1.3]–资料下载说明.mp4 27.31M {20}–使用文件系统管理硬件设备 [20.1]–描述一个文件系统.mp4 57.79M [20.2]–挂载设备文件系统(1).mp4 12.49M [20.3]–挂载设备文件系统(2).mp4 41.04M [20.4]–挂载设备文件系统(3).mp4 72.58M [20.5]–打开devtty0文件(1)-只打开devfs中的文件.mp4 108.45M [20.6]–打开devtty0文件(2)-更通用的打开方式.mp4 74.19M [20.7]–往devtty0读写数据.mp4 77.43M {21}–磁盘与fat16文件系统 [21.10]–实现磁盘的读取和写入(2).mp4 42.61M [21.11]–FAT16文件系统简介(1).mp4 40.31M [21.12]–FAT16文件系统简介(2).mp4 39.79M [21.13]–挂载FAT16文件系统(1).mp4 58.55M [21.14]–挂载FAT16文件系统(2).mp4 58.17M [21.15]–挂载FAT16文件系统(3).mp4 36.75M [21.16]–遍历目录命令ls的实现(1)-添加系统调用接口.mp4 63.74M [21.17]–遍历目录命令ls的实现(2)-列出虚假的目录内容.mp4 61.19M [21.18]–遍历目录命令ls的实现(3)-列出真实的目录内容(1).mp4 39.48M [21.19]–遍历目录命令ls的实现(3)-列出真实的目录内容(2).mp4 41.50M [21.1]–磁盘基本特性简介.mp4 47.88M [21.20]–遍历目录命令ls的实现(3)-列出真实的目录内容(3).mp4 82.70M [21.21]–文件查看命令less的实现(1)-打开文件.mp4 90.89M [21.22]–文件查看命令less的实现(2)-显示部分文件内容.mp4 80.79M [21.23]–文件查看命令less的实现(3)-显示全部文件内容.mp4 68.60M [21.24]–文件查看命令less的实现(4)-逐行显示文件内容.mp4 87.78M [21.25]–通过文件系统加载shell.mp4 82.59M [21.26]–让shell加载应用程序运行.mp4 62.10M [21.27]–应用运行异常时强制中断运行.mp4 47.13M [21.28]–文件复制命令cp的实现(1)-创建新文件.mp4 87.04M [21.29]–文件复制命令cp的实现(2)-删除文件.mp4 68.50M [21.2]–识别系统中已有的磁盘(1).mp4 16.97M [21.30]–文件复制命令cp的实现(3)-文件写入(1).mp4 67.03M [21.31]–文件复制命令cp的实现(4)-文件写入(2).mp4 109.52M [21.32]–最后的调整.mp4 40.56M [21.3]–识别系统中已有的磁盘(2).mp4 27.68M [21.4]–识别系统中已有的磁盘(3).mp4 41.26M [21.5]–识别系统中已有的磁盘(4).mp4 55.47M [21.6]–解析磁盘分区表(1).mp4 13.69M [21.7]–解析磁盘分区表(2).mp4 75.76M [21.8]–增加磁盘设备管理.mp4 66.42M [21.9]–实现磁盘的读取和写入(1).mp4 67.06M {22}–课程总结 [22.1]–设计总结.mp4 35.27M {2}–开发环境准备 (2.2)–注意事项(必看!!!).pdf 1.21M [2.1]–开发工具总览.mp4 11.86M [2.3]–Windows平台.mp4 129.27M [2.4]–Linux平台(ubuntu).mp4 74.33M [2.5]–Mac平台.mp4 49.44M {3}–前置课(选学,介绍x86保护模式下的编程) (3.1)–课程说明.pdf 951.42kb [3.10]–进入保护模式(1).mp4 53.83M [3.11]–进入保护模式(2).mp4 66.96M [3.12]–进入保护模式(3).mp4 47.35M [3.13]–打开分页机制(1).mp4 51.86M [3.14]–打开分页机制(2).mp4 52.62M [3.15]–打开分页机制(3).mp4 72.61M [3.16]–开启定时中断(1).mp4 48.73M [3.17]–开启定时中断(2).mp4 50.76M [3.18]–开启定时中断(3).mp4 68.81M [3.19]–切换至低特权级(1).mp4 30.29M [3.20]–切换至低特权级(2).mp4 68.50M [3.21]–切换至低特权级(3).mp4 40.11M [3.22]–两个任务的切换(1).mp4 29.74M [3.23]–两个任务的切换(2).mp4 104.06M [3.24]–两个任务的切换(3).mp4 57.80M [3.25]–增加系统调用(1)…mp4 25.65M [3.26]–增加系统调用(2)…mp4 64.94M [3.27]–增加系统调用(3)…mp4 96.82M [3.28]–使用LDT(1).mp4 57.31M [3.29]–使用LDT(2).mp4 83.82M [3.2]–课程简介.mp4 34.66M [3.30]–使用LDT(3).mp4 16.68M [3.31]–课程总结.mp4 56.56M [3.3]–开发环境安装(与前面部分内容有重复).mp4 47.27M [3.4]–工程组织结构.mp4 20.54M [3.5]–让计算机跑我们的操作系统.mp4 33.29M [3.6]–x86处理器编程模型(1).mp4 41.39M [3.7]–x86处理器编程模型(2).mp4 20.53M [3.8]–加载自己的剩余部分(1).mp4 15.20M [3.9]–加载自己的剩余部分(2).mp4 29.26M {4}–引导程序:接管控制权 [4.1]–计算机启动流程简介.mp4 33.30M [4.2]–接管运行控制权.mp4 30.73M [4.3]–创建可引导的启动程序.mp4 53.21M [4.4]–初始化引导程序(1).mp4 19.63M [4.5]–初始化引导程序(2).mp4 14.47M [4.6]–使用BIOS中断显示字符.mp4 16.33M [4.7]–使用BIOS中断读取磁盘.mp4 38.87M [4.8]–进入C语言环境并跳到loader(1).mp4 23.37M [4.9]–进入C语言环境并跳到loader(2).mp4 31.44M {5}–加载器loader的实现 [5.10]–创建内核工程.mp4 57.97M [5.11]–向内核传递启动信息(1).mp4 34.63M [5.12]–向内核传递启动信息(2).mp4 38.82M [5.13]–代码段数据段与链接脚本(1).mp4 44.31M [5.14]–代码段数据段与链接脚本(2).mp4 26.71M [5.15]–加载内核映像文件(1).mp4 40.42M [5.16]–加载内核映像文件(2).mp4 83.65M [5.1]–利用内联汇编显示字符串.mp4 53.28M [5.2]–检测内存容量(1).mp4 29.02M [5.3]–检测内存容量(2).mp4 43.90M [5.4]–切换进保护模式(1)-1.mp4 23.45M [5.5]–切换进保护模式(1)-2.mp4 24.78M [5.6]–切换进保护模式(1)-3.mp4 22.29M [5.7]–切换进保护模式(2)-1.mp4 23.24M [5.8]–切换进保护模式(2)-2.mp4 31.36M [5.9]–使用LBA模式读取磁盘.mp4 51.81M {6}–中断与异常处理 [6.10]–捕获除0异常(2).mp4 36.12M [6.11]–解析异常栈信息(1).mp4 24.91M [6.12]–解析异常栈信息(2).mp4 39.68M [6.13]–利用宏重用异常处理代码(1).mp4 39.42M [6.14]–利用宏重用异常处理代码(2).mp4 43.79M [6.15]–处理其它类型的异常(1).mp4 34.56M [6.16]–处理其它类型的异常(2).mp4 67.82M [6.17]–初始化中断控制器(1).mp4 31.58M [6.18]–初始化中断控制器(2).mp4 49.38M [6.19]–中断的打开与关闭.mp4 23.23M [6.1]–创建GDT表及其表项(1).mp4 37.00M [6.20]–启动定时器并开中断(1).mp4 18.74M [6.21]–启动定时器并开中断(2).mp4 46.48M [6.22]–启动定时器并开中断(3).mp4 39.43M [6.2]–创建GDT表及其表项(2).mp4 51.09M [6.3]–保护模式下的内存管理简介.mp4 41.88M [6.4]–重新加载GDT(1).mp4 77.72M [6.5]–重新加载GDT(2).mp4 45.15M [6.6]–触发异常与异常简介.mp4 20.69M [6.7]–添加中断门描述符.mp4 35.98M [6.8]–初始化IDT表.mp4 29.85M [6.9]–捕获除0异常(1).mp4 42.31M {7}–日志与printf格式化输出 [7.10]–在异常处理程序中打印信息…mp4 43.45M [7.11]–利用assert辅助调试.mp4 50.67M [7.1]–创建日志输出接口.mp4 38.57M [7.2]–实现基本的信息输出.mp4 50.95M [7.3]–实现基本的信息输出(1).mp4 13.07M [7.4]–实现基本的信息输出(2).mp4 37.94M [7.5]–若干字符串和内存操作函数实现.mp4 46.63M [7.6]–实现字符串的格式化输出(1).mp4 49.34M [7.7]–实现字符串的格式化输出(2).mp4 22.24M [7.8]–支持整数的格式化(1).mp4 38.88M [7.9]–支持整数的格式化(2).mp4 40.20M {8}–实现简单的进程切换 [8.10]–另一种任务切换方法(1).mp4 35.31M [8.11]–另一种任务切换方法(2).mp4 44.86M [8.1]–创建两个小任务.mp4 24.64M [8.2]–添加任务状态段(1).mp4 33.80M [8.3]–添加任务状态段(2).mp4 28.44M [8.4]–任务的简单初始化(1).mp4 29.14M [8.5]–任务的简单初始化(2)-1.mp4 25.65M [8.6]–任务的简单初始化(2)-2.mp4 45.73M [8.7]–简单双任务相互切换(1).mp4 19.13M [8.8]–简单双任务相互切换(2).mp4 47.18M [8.9]–简单双任务相互切换(3).mp4 29.91M {9}–实现链表数据结构 [9.1]–定义结点和链表.mp4 47.24M [9.2]–实现链表的查询函数.mp4 13.77M [9.3]–链表的两种插入.mp4 36.74M [9.4]–链表的两种删除.mp4 45.12M [9.5]–获取结点所在的结构(1).mp4 10.26M [9.6]–获取结点所在的结构(2).mp4 40.90M
课程购买
课程价格
金币29.9
299金币限时优惠会员免费
销量:0
💎 开通会员每日免费下载,比单买更划算 →
支付成功后会自动显示下载资源云盘的链接!点击链接即可下载到本地。