IT网课学习吧

李述铜 从0手写自己的Linux X86操作系统

软考考证
课程简介

《李述铜 从0手写自己的Linux X86操作系统》309dfe1cf5688141909138e4aefdce8c_8a5950bf3de241479c868b07fd95efe5.webp (270.1 KB, 下载次数: 66) 下载附件   保存到相册 2025-2-16 15:12 上传【技能收获】学完可掌握:Linux 运维。课程以实战为导向,覆盖从基础概念到完整项目落地的关键步骤,配套章节笔记便于课后复盘与面试前快速回顾。【学习建议】建议按目录顺序学习,先打基础再进入综合实战章节;每完成 2~3 节可结合笔记整理一份学习小结,最终尝试独立复现一套完整 Demo 写入个人

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

把「手写操作系统」当成一门普通视频课来刷,大概率会在保护模式那几讲卡住然后弃坑。李述铜这套 X86 方向的内容,真正值钱的地方不在于它讲了什么新东西,而在于它把一条从加电到跑起来用户态程序的链路完整走了一遍,中间没有跳步。这一点在同题材资料里并不多见——多数教程要么停在实模式打印字符,要么直接跳到某个现成内核框架上改,中间那段最容易劝退、也最考验讲解功力。

课纲的含金量:链路完整比知识点密度更重要

判断一套操作系统课值不值得收,看它敢不敢碰三块硬骨头:引导与实模式到保护模式的切换、中断与异常处理、内存分页和进程切换。这套内容把这几块都排进了主线,而不是当作选修补丁塞在角落。更关键的是顺序合理:先让机器跑起来、能输出、能收键盘,再逐步加上中断和调度,最后才谈文件系统和用户态。这种「先能用再完善」的编排,比一上来就铺开理论更适合自学者边写边验证。

需要提醒的是,这类课的信息密度天然不均匀。引导扇区、GDT 描述符这些内容会讲得比较细,而某些寄存器约定、ABI 细节往往是「一带而过」,默认你自己去查手册。所以课纲看着完整,实际学习时仍然要靠外部资料补齐,这正是下面要说的资料包拆解问题。

哪些章节值得精看,哪些可以快进

  • 精看:模式切换与中断建立。这是整套内容的分水岭,也是绝大多数人第一次理解「操作系统为什么要接管硬件」的地方,建议逐行跟写、反复回看。
  • 精看:物理内存管理与分页。地址映射这块理解不透,后面的进程隔离和虚拟内存会变成背诵,务必在纸上把页表结构画一遍。
  • 正常速度:进程与任务切换。调度逻辑本身不难,难点在上下文保存的时机,跟着代码走一遍比看结论有用。
  • 可快进:环境搭建、工具链安装、重复性的汇编语法复习。这类内容一次看懂即可,不必反复刷。

资料包怎么拆开用

配套材料不要当成「课后练习册」一次性过完,那是最浪费的用法。更实际的做法是反过来用:先看视频理解思路,写代码时卡住了再回资料里找对应片段对照,把资料当调试手册而不是第二本教材。章节笔记适合面试前集中扫一遍,但前提是你已经亲手把代码跑通过——没写过就背结论,问两个「为什么」就露底了。

截图和说明图这类素材,价值在于快速定位「某个结构长什么样」,比如描述符表、页目录项布局,打印出来贴在显示器边上,比来回翻视频进度条高效得多。至于代码本身,建议自己重敲而不是复制粘贴,操作系统代码的坑大多藏在细节里,粘贴过去能跑,但你没看见坑。

适合谁,以及一个务实的心态提醒

这套内容适合已经会 C 语言、想搞明白「程序之下到底发生了什么」的人,无论是做底层开发、安全方向,还是纯粹想把计算机体系结构串起来。它不适合零编程基础的人当第一门课,也不适合想三天出成果的人。

最后一句实话:手写操作系统最大的收获不是写出一个能用的系统,而是在无数次三行代码调一晚上的过程中,把「计算机到底怎么跑起来」这件事从模糊印象变成具体记忆。这个价值,比课程本身能跑出什么结果重要得多。


309dfe1cf5688141909138e4aefdce8c_8a5950bf3de241479c868b07fd95efe5.webp 下载附件   保存到相册 2025-2-16 15:12 上传

课程推荐

《李述铜 从0手写自己的Linux X86操作系统》309dfe1cf5688141909138e4aefdce8c_8a5950bf3de241479c868b07fd95efe5.webp 下载附件   保存到相册 2025-2-16 15:12 上传【技能收获】学完可掌握:Linux 运维。课程以实战为导向,覆盖从基础概念到完整项目落地的关键步骤,配套章节笔记便于课后复盘与面试前快速回顾。【学习建议】建议按目录顺序学习,先打基础再进入综合实战章节;每完成 2~3 节可结合笔记整理一份学习小结,最终尝试独立复现一套完整 Demo 写入个人作品集。【就业发展】可面向岗位:Linux 运维工程师、SRE、云计算工程师、DevOps 工程师。云原生与自动化运维仍是企业 IT 刚需方向,认证 + 实战项目组合能显著提升面试通过率,适合向中高级运维或架构岗进阶。 若你已有一定编程或运维基础,本课程可帮助你在现有技能栈上快速叠加热门方向能力,提升求职时的项目说服力与薪资谈判空间。

视频目录(264 节)

*   |   |-- [1.1]--课程简介.mp4

*   |   `-- [1.3]--资料下载说明.mp4

*   |   |-- [2.1]--开发工具总览.mp4

*   |   |-- [2.3]--Windows平台.mp4

*   |   |-- [2.4]--Linux平台(ubuntu).mp4

*   |   `-- [2.5]--Mac平台.mp4

*   |   |-- [3.2]--课程简介.mp4

*   |   |-- [3.3]--开发环境安装(与前面部分内容有重复).mp4

*   |   |-- [3.4]--工程组织结构.mp4

*   |   |-- [3.5]--让计算机跑我们的操作系统.mp4

*   |   |-- [3.6]--x86处理器编程模型(1).mp4

*   |   |-- [3.7]--x86处理器编程模型(2).mp4

*   |   |-- [3.8]--加载自己的剩余部分(1).mp4

*   |   |-- [3.9]--加载自己的剩余部分(2).mp4

*   |   |-- [3.10]--进入保护模式(1).mp4

*   |   |-- [3.11]--进入保护模式(2).mp4

*   |   |-- [3.12]--进入保护模式(3).mp4

*   |   |-- [3.13]--打开分页机制(1).mp4

*   |   |-- [3.14]--打开分页机制(2).mp4

*   |   |-- [3.15]--打开分页机制(3).mp4

*   |   |-- [3.16]--开启定时中断(1).mp4

*   |   |-- [3.17]--开启定时中断(2).mp4

*   |   |-- [3.18]--开启定时中断(3).mp4

*   |   |-- [3.19]--切换至低特权级(1).mp4

*   |   |-- [3.20]--切换至低特权级(2).mp4

*   |   |-- [3.21]--切换至低特权级(3).mp4

*   |   |-- [3.22]--两个任务的切换(1).mp4

*   |   |-- [3.23]--两个任务的切换(2).mp4

*   |   |-- [3.24]--两个任务的切换(3).mp4

*   |   |-- [3.25]--增加系统调用(1)..mp4

*   |   |-- [3.26]--增加系统调用(2)..mp4

*   |   |-- [3.27]--增加系统调用(3)..mp4

*   |   |-- [3.28]--使用LDT(1).mp4

*   |   |-- [3.29]--使用LDT(2).mp4

*   |   |-- [3.30]--使用LDT(3).mp4

*   |   `-- [3.31]--课程总结.mp4

*   |   |-- [4.1]--计算机启动流程简介.mp4

*   |   |-- [4.2]--接管运行控制权.mp4

*   |   |-- [4.3]--创建可引导的启动程序.mp4

*   |   |-- [4.4]--初始化引导程序(1).mp4

*   |   |-- [4.5]--初始化引导程序(2).mp4

*   |   |-- [4.6]--使用BIOS中断显示字符.mp4

*   |   |-- [4.7]--使用BIOS中断读取磁盘.mp4

*   |   |-- [4.8]--进入C语言环境并跳到loader(1).mp4

*   |   `-- [4.9]--进入C语言环境并跳到loader(2).mp4

*   |   |-- [5.1]--利用内联汇编显示字符串.mp4

*   |   |-- [5.2]--检测内存容量(1).mp4

*   |   |-- [5.3]--检测内存容量(2).mp4

*   |   |-- [5.4]--切换进保护模式(1)-1.mp4

*   |   |-- [5.5]--切换进保护模式(1)-2.mp4

*   |   |-- [5.6]--切换进保护模式(1)-3.mp4

*   |   |-- [5.7]--切换进保护模式(2)-1.mp4

*   |   |-- [5.8]--切换进保护模式(2)-2.mp4

*   |   |-- [5.9]--使用LBA模式读取磁盘.mp4

*   |   |-- [5.10]--创建内核工程.mp4

*   |   |-- [5.11]--向内核传递启动信息(1).mp4

*   |   |-- [5.12]--向内核传递启动信息(2).mp4

*   |   |-- [5.13]--代码段数据段与链接脚本(1).mp4

*   |   |-- [5.14]--代码段数据段与链接脚本(2).mp4

*   |   |-- [5.15]--加载内核映像文件(1).mp4

*   |   `-- [5.16]--加载内核映像文件(2).mp4

*   |   |-- [6.1]--创建GDT表及其表项(1).mp4

*   |   |-- [6.2]--创建GDT表及其表项(2).mp4

*   |   |-- [6.3]--保护模式下的内存管理简介.mp4

*   |   |-- [6.4]--重新加载GDT(1).mp4

*   |   |-- [6.5]--重新加载GDT(2).mp4

*   |   |-- [6.6]--触发异常与异常简介.mp4

*   |   |-- [6.7]--添加中断门描述符.mp4

*   |   |-- [6.8]--初始化IDT表.mp4

*   |   |-- [6.9]--捕获除0异常(1).mp4

*   |   |-- [6.10]--捕获除0异常(2).mp4

*   |   |-- [6.11]--解析异常栈信息(1).mp4

*   |   |-- [6.12]--解析异常栈信息(2).mp4

*   |   |-- [6.13]--利用宏重用异常处理代码(1).mp4

*   |   |-- [6.14]--利用宏重用异常处理代码(2).mp4

*   |   |-- [6.15]--处理其它类型的异常(1).mp4

*   |   |-- [6.16]--处理其它类型的异常(2).mp4

*   |   |-- [6.17]--初始化中断控制器(1).mp4

*   |   |-- [6.18]--初始化中断控制器(2).mp4

*   |   |-- [6.19]--中断的打开与关闭.mp4

*   |   |-- [6.20]--启动定时器并开中断(1).mp4

*   |   |-- [6.21]--启动定时器并开中断(2).mp4

*   |   `-- [6.22]--启动定时器并开中断(3).mp4

*   |   |-- [7.1]--创建日志输出接口.mp4

*   |   |-- [7.2]--实现基本的信息输出.mp4

*   |   |-- [7.3]--实现基本的信息输出(1).mp4

*   |   |-- [7.4]--实现基本的信息输出(2).mp4

*   |   |-- [7.5]--若干字符串和内存操作函数实现.mp4

*   |   |-- [7.6]--实现字符串的格式化输出(1).mp4

*   |   |-- [7.7]--实现字符串的格式化输出(2).mp4

*   |   |-- [7.8]--支持整数的格式化(1).mp4

*   |   |-- [7.9]--支持整数的格式化(2).mp4

*   |   |-- [7.10]--在异常处理程序中打印信息..mp4

*   |   `-- [7.11]--利用assert辅助调试.mp4

*   |   |-- [8.1]--创建两个小任务.mp4

*   |   |-- [8.2]--添加任务状态段(1).mp4

*   |   |-- [8.3]--添加任务状态段(2).mp4

*   |   |-- [8.4]--任务的简单初始化(1).mp4

*   |   |-- [8.5]--任务的简单初始化(2)-1.mp4

*   |   |-- [8.6]--任务的简单初始化(2)-2.mp4

*   |   |-- [8.7]--简单双任务相互切换(1).mp4

*   |   |-- [8.8]--简单双任务相互切换(2).mp4

*   |   |-- [8.9]--简单双任务相互切换(3).mp4

*   |   |-- [8.10]--另一种任务切换方法(1).mp4

*   |   `-- [8.11]--另一种任务切换方法(2).mp4

*   |   |-- [9.1]--定义结点和链表.mp4

*   |   |-- [9.2]--实现链表的查询函数.mp4

*   |   |-- [9.3]--链表的两种插入.mp4

*   |   |-- [9.4]--链表的两种删除.mp4

*   |   |-- [9.5]--获取结点所在的结构(1).mp4

*   |   `-- [9.6]--获取结点所在的结构(2).mp4

*   |   |-- [10.1]--添加任务管理器.mp4

*   |   |-- [10.2]--将任务加入就绪队列.mp4

*   |   |-- [10.3]--进程主动放弃CPU.mp4

*   |   |-- [10.4]--让进程按时间片运行(1).mp4

*   |   |-- [10.5]--让进程按时间片运行(2).mp4

*   |   |-- [10.6]--临界资源及简单的保护(1).mp4

*   |   |-- [10.7]--临界资源及简单的保护(2).mp4

*   |   |-- [10.8]--临界资源及简单的保护(3).mp4

*   |   |-- [10.9]--让进程能够延时运行.mp4

*   |   `-- [10.10]--让所有进程都能延时.mp4

*   |   |-- [11.1]--计数信号量及其初始化.mp4

*   |   |-- [11.2]--发送和等待信号.mp4

*   |   |-- [11.3]--使用计数信号量.mp4

*   |   |-- [11.4]--互斥锁及其初始化.mp4

*   |   |-- [11.5]--互斥锁的加解锁.mp4

*   |   `-- [11.6]--应用互斥锁.mp4

*   |   |-- [12.1]--内存管理问题.mp4

*   |   |-- [12.2]--位图数据结构与初始化.mp4

*   |   |-- [12.3]--位图位的分配(1).mp4

*   |   |-- [12.4]--位图位的分配(2).mp4

*   |   |-- [12.5]--创建地址分配结构(1).mp4

*   |   |-- [12.6]--创建地址分配结构(2).mp4

*   |   |-- [12.7]--规划内存空间的分配(1).mp4

*   |   |-- [12.8]--规划内存空间的分配(2).mp4

*   |   |-- [12.9]--规划内存空间的分配(3).mp4

*   |   |-- [12.10]--内存分页机制介绍.mp4

*   |   |-- [12.11]--开启内存分页机制(1).mp4

*   |   |-- [12.12]--开启内存分页机制(2)-1.mp4

*   |   |-- [12.13]--开启内存分页机制(2)-2.mp4

*   |   |-- [12.14]--开启内存分页机制(2)-3.mp4

*   |   |-- [12.15]--创建内核页表(1)-建立映射表(1).mp4

*   |   |-- [12.16]--创建内核页表(1)-建立映射表(2).mp4

*   |   |-- [12.17]--创建内核页表(2)-页目录和页表结构.mp4

*   |   |-- [12.18]--创建内核页表(3)-建立映射表(1).mp4

*   |   |-- [12.19]--创建内核页表(3)-建立映射表(2).mp4

*   |   |-- [12.20]--创建内核页表(3)-建立映射表(3).mp4

*   |   |-- [12.21]--创建内核页表(4)-添加权限处理.mp4

*   |   |-- [12.22]--为进程创建页表(1).mp4

*   |   `-- [12.23]--为进程创建页表(2).mp4

*   |   |-- [13.1]--隔离操作系统与进程(1)-代码分离.mp4

*   |   |-- [13.2]--隔离操作系统与进程(2)-地址分离.mp4

*   |   |-- [13.3]--隔离操作系统与进程(3)-搬运代码.mp4

*   |   |-- [13.4]--调整应用的特权级(1).mp4

*   |   |-- [13.5]--调整应用的特权级(2).mp4

*   |   |-- [13.6]--调整异常处理函数(1).mp4

*   |   |-- [13.7]--调整异常处理函数(2).mp4

*   |   |-- [13.8]--修改空闲任务的特权级.mp4

*   |   |-- [13.9]--切换至应用进程的特权级为最低.mp4

*   |   `-- [13.10]--为进程添加特权级0的栈空间.mp4

*   |   |-- [14.1]--创建调用门.mp4

*   |   |-- [14.2]--实现系统调用的调用和返回(1).mp4

*   |   |-- [14.3]--实现系统调用的调用和返回(2).mp4

*   |   |-- [14.4]--实现msleep系统调用(1).mp4

*   |   |-- [14.5]--实现msleep系统调用(2).mp4

*   |   |-- [14.6]--实现getid系统调用.mp4

*   |   |-- [14.7]--实现pint_msg调用.mp4

*   |   `-- [14.8]--使用int$0x80实现系统调用.mp4

*   |   |-- [15.1]--实现fork系统调用(1)-添加调用接口.mp4

*   |   |-- [15.2]--实现fork系统调用(2)-分配任务块.mp4

*   |   |-- [15.3]--实现fork系统调用(3)-初始化任务块.mp4

*   |   |-- [15.4]--实现fork系统调用(4)-复制进程地址空间.mp4

*   |   |-- [15.5]--实现exec系统调用(1)-创建一个空应用.mp4

*   |   |-- [15.6]--实现exec系统调用(2)-增加空的exec调用.mp4

*   |   |-- [15.7]--实现exec系统调用(3)-添加虚似文件访问接口.mp4

*   |   |-- [15.8]--实现exec系统调用(4)-解析并加载elf文件.mp4

*   |   |-- [15.9]--实现exec系统调用(5)-分配栈并进入进程执行.mp4

*   |   |-- [15.10]--实现exec系统调用(6)-为进程传递参数(1).mp4

*   |   |-- [15.11]--实现exec系统调用(6)-为进程传递参数(2).mp4

*   |   `-- [15.12]--添加sys_yield()系统调用.mp4

*   |   |-- [16.1]--增加文件系统调用(1).mp4

*   |   |-- [16.2]--增加文件系统调用(2).mp4

*   |   |-- [16.3]--导入newlibc并调用printf.mp4

*   |   |-- [16.4]--为malloc实现sys_brk调用(1).mp4

*   |   |-- [16.5]--为malloc实现sys_brk调用(2).mp4

*   |   `-- [16.6]--简单的printf调用实现.mp4

*   |   |-- [17.1]--控制台简介与初始化(1).mp4

*   |   |-- [17.2]--控制台简介与初始化(2).mp4

*   |   |-- [17.3]--在控制台上显示字符串.mp4

*   |   |-- [17.4]--处理换行和清屏.mp4

*   |   |-- [17.5]--设置光标并重定向日志输出到显示器.mp4

*   |   |-- [17.6]--有趣的转义字符串以及删除字符.mp4

*   |   |-- [17.7]--保存并恢复光标位置.mp4

*   |   |-- [17.8]--更新显示字体的颜色.mp4

*   |   |-- [17.9]--移动光标位置及清屏.mp4

*   |   |-- [17.10]--键盘初始化.mp4

*   |   |-- [17.11]--借助按键映射表进行键值转换(1).mp4

*   |   |-- [17.12]--借助按键映射表进行键值转换(2).mp4

*   |   |-- [17.13]--处理caplock键.mp4

*   |   `-- [17.14]--处理其它特殊功能键.mp4

*   |   |-- [18.1]--设备管理框架简介.mp4

*   |   |-- [18.2]--增加tty设备.mp4

*   |   |-- [18.3]--实现dev层接口操作.mp4

*   |   |-- [18.4]--为tty设备添加结构描述.mp4

*   |   |-- [18.5]--实现tty设备的打开.mp4

*   |   |-- [18.6]--通过tty设备写显示数据(1).mp4

*   |   |-- [18.7]--通过tty设备写显示数据(2).mp4

*   |   |-- [18.8]--文件系统简介及初始化.mp4

*   |   |-- [18.9]--为进程添加文件打开表.mp4

*   |   |-- [18.10]--打开tty设备并向其写入数据.mp4

*   |   |-- [18.11]--从tty读取键值字符串并显示.mp4

*   |   |-- [18.12]--打开标准输出及错误输出文件.mp4

*   |   |-- [18.13]--允许切换tty窗口(1).mp4

*   |   |-- [18.14]--允许切换tty窗口(2).mp4

*   |   `-- [18.15]--为每个tty窗口创建进程并保护.mp4

*   |   |-- [19.1]--初始化命令行解释器.mp4

*   |   |-- [19.2]--实现help命令的解析.mp4

*   |   |-- [19.3]--执行echo命令并给输出加点颜色(1).mp4

*   |   |-- [19.4]--执行echo命令并给输出加点颜色(2).mp4

*   |   |-- [19.5]--为进程增加exit接口.mp4

*   |   |-- [19.6]--为进程增加wait接口(1).mp4

*   |   |-- [19.7]--为进程增加wait接口(2).mp4

*   |   |-- [19.8]--为进程增加wait接口(3).mp4

*   |   `-- [19.9]--让子进程继承父进程已打开的文件.mp4

*   |   |-- [20.1]--描述一个文件系统.mp4

*   |   |-- [20.2]--挂载设备文件系统(1).mp4

*   |   |-- [20.3]--挂载设备文件系统(2).mp4

*   |   |-- [20.4]--挂载设备文件系统(3).mp4

*   |   |-- [20.5]--打开devtty0文件(1)-只打开devfs中的文件.mp4

*   |   |-- [20.6]--打开devtty0文件(2)-更通用的打开方式.mp4

*   |   `-- [20.7]--往devtty0读写数据.mp4

*   |   |-- [21.1]--磁盘基本特性简介.mp4

*   |   |-- [21.2]--识别系统中已有的磁盘(1).mp4

*   |   |-- [21.3]--识别系统中已有的磁盘(2).mp4

*   |   |-- [21.4]--识别系统中已有的磁盘(3).mp4

*   |   |-- [21.5]--识别系统中已有的磁盘(4).mp4

*   |   |-- [21.6]--解析磁盘分区表(1).mp4

*   |   |-- [21.7]--解析磁盘分区表(2).mp4

*   |   |-- [21.8]--增加磁盘设备管理.mp4

*   |   |-- [21.9]--实现磁盘的读取和写入(1).mp4

*   |   |-- [21.10]--实现磁盘的读取和写入(2).mp4

*   |   |-- [21.11]--FAT16文件系统简介(1).mp4

*   |   |-- [21.12]--FAT16文件系统简介(2).mp4

*   |   |-- [21.13]--挂载FAT16文件系统(1).mp4

*   |   |-- [21.14]--挂载FAT16文件系统(2).mp4

*   |   |-- [21.15]--挂载FAT16文件系统(3).mp4

*   |   |-- [21.16]--遍历目录命令ls的实现(1)-添加系统调用接口.mp4

*   |   |-- [21.17]--遍历目录命令ls的实现(2)-列出虚假的目录内容.mp4

*   |   |-- [21.18]--遍历目录命令ls的实现(3)-列出真实的目录内容(1).mp4

*   |   |-- [21.19]--遍历目录命令ls的实现(3)-列出真实的目录内容(2).mp4

*   |   |-- [21.20]--遍历目录命令ls的实现(3)-列出真实的目录内容(3).mp4

*   |   |-- [21.21]--文件查看命令less的实现(1)-打开文件.mp4

*   |   |-- [21.22]--文件查看命令less的实现(2)-显示部分文件内容.mp4

*   |   |-- [21.23]--文件查看命令less的实现(3)-显示全部文件内容.mp4

*   |   |-- [21.24]--文件查看命令less的实现(4)-逐行显示文件内容.mp4

*   |   |-- [21.25]--通过文件系统加载shell.mp4

*   |   |-- [21.26]--让shell加载应用程序运行.mp4

*   |   |-- [21.27]--应用运行异常时强制中断运行.mp4

*   |   |-- [21.28]--文件复制命令cp的实现(1)-创建新文件.mp4

*   |   |-- [21.29]--文件复制命令cp的实现(2)-删除文件.mp4

*   |   |-- [21.30]--文件复制命令cp的实现(3)-文件写入(1).mp4

*   |   |-- [21.31]--文件复制命令cp的实现(4)-文件写入(2).mp4

*   |   `-- [21.32]--最后的调整.mp4

*   |   `-- [22.1]--设计总结.mp4

配套笔记(4 份 PDF)

*   |   |-- (1.2)--资料下载链接.pdf

*   |   |-- (1.4)--常见问题.pdf

*   |   |-- (2.2)--注意事项(必看!!!).pdf

*   |   |-- (3.1)--课程说明.pdf

课程购买
课程价格
金币29.9
299金币限时优惠会员免费
销量:0
💎 开通会员每日免费下载,比单买更划算 →
支付成功后会自动显示下载资源云盘的链接!点击链接即可下载到本地。