
网易云 - 从0手写自己的Linux x86操作系统
来自 网络整理·免费领取学习资源
8,354 领取 · 5,895 收藏更新于 2026年9月20日
这份资料来自网络整理2026年的付费VIP课,内容以视频为主,对应《网易云 - 从0手写自己的Linux x86操作系统》。官网需要单独购买,有集上可以免费领取。
课程采用从0行代码编写的方式,教你如何写一个类似(非相同)Linux 0.11的x86操作系统,从而深入掌握操作系统的工作原理
本操作系统目前已经支持网络协议栈,并提供socket套接字编程接口,支持同时运行多个网络应用程序。如果有兴趣,可能联系老师
课程目录
- {10}–进程的管理与延时
- [10.10]–让所有进程都能延时
- [10.1]–添加任务管理器
- [10.2]–将任务加入就绪队列
- [10.3]–进程主动放弃CPU
- [10.4]–让进程按时间片运行(1)
- [10.5]–让进程按时间片运行(2)
- [10.6]–临界资源及简单的保护(1)
- [10.7]–临界资源及简单的保护(2)
- [10.8]–临界资源及简单的保护(3)
- [10.9]–让进程能够延时运行
- {11}–进程间的同步与互斥
- [11.1]–计数信号量及其初始化
- [11.2]–发送和等待信号
- [11.3]–使用计数信号量
- [11.4]–互斥锁及其初始化
- [11.5]–互斥锁的加解锁
- [11.6]–应用互斥锁
- {12}–虚拟内存管理和保护模式
- [12.10]–内存分页机制介绍
- [12.11]–开启内存分页机制(1)
- [12.12]–开启内存分页机制(2)-1
- [12.13]–开启内存分页机制(2)-2
- [12.14]–开启内存分页机制(2)-3
- [12.15]–创建内核页表(1)-建立映射表(1)
- [12.16]–创建内核页表(1)-建立映射表(2)
- [12.17]–创建内核页表(2)-页目录和页表结构
- [12.18]–创建内核页表(3)-建立映射表(1)
- [12.19]–创建内核页表(3)-建立映射表(2)
- [12.1]–内存管理问题
- [12.20]–创建内核页表(3)-建立映射表(3)
- [12.21]–创建内核页表(4)-添加权限处理
- [12.22]–为进程创建页表(1)
- [12.23]–为进程创建页表(2)
- [12.2]–位图数据结构与初始化
- [12.3]–位图位的分配(1)
- [12.4]–位图位的分配(2)
- [12.5]–创建地址分配结构(1)
- [12.6]–创建地址分配结构(2)
- [12.7]–规划内存空间的分配(1)
- [12.8]–规划内存空间的分配(2)
- [12.9]–规划内存空间的分配(3)
- {13}–隔离操作系统与进程
- [13.10]–为进程添加特权级0的栈空间
- [13.1]–隔离操作系统与进程(1)-代码分离
- [13.2]–隔离操作系统与进程(2)-地址分离
- [13.3]–隔离操作系统与进程(3)-搬运代码
- [13.4]–调整应用的特权级(1)
- [13.5]–调整应用的特权级(2)
- [13.6]–调整异常处理函数(1)
- [13.7]–调整异常处理函数(2)
- [13.8]–修改空闲任务的特权级
- [13.9]–切换至应用进程的特权级为最低
- {14}–建立系统调用
- [14.1]–创建调用门
- [14.2]–实现系统调用的调用和返回(1)
- [14.3]–实现系统调用的调用和返回(2)
- [14.4]–实现msleep系统调用(1)
- [14.5]–实现msleep系统调用(2)
- [14.6]–实现getid系统调用
- [14.7]–实现pint_msg调用
- [14.8]–使用int$0x80实现系统调用
- {15}–新进程的加载与创建
- [15.10]–实现exec系统调用(6)-为进程传递参数(1)
- [15.11]–实现exec系统调用(6)-为进程传递参数(2)
- [15.12]–添加sys_yield系统调用
- [15.1]–实现fork系统调用(1)-添加调用接口
- [15.2]–实现fork系统调用(2)-分配任务块
- [15.3]–实现fork系统调用(3)-初始化任务块
- [15.4]–实现fork系统调用(4)-复制进程地址空间
- [15.5]–实现exec系统调用(1)-创建一个空应用
- [15.6]–实现exec系统调用(2)-增加空的exec调用
- [15.7]–实现exec系统调用(3)-添加虚似文件访问接口
- [15.8]–实现exec系统调用(4)-解析并加载elf文件
- [15.9]–实现exec系统调用(5)-分配栈并进入进程执行
- {16}–使用c标准库中的printf输出
- [16.1]–增加文件系统调用(1)
- [16.2]–增加文件系统调用(2)
- [16.3]–导入newlibc并调用printf
- [16.4]–为malloc实现sys_brk调用(1)
- [16.5]–为malloc实现sys_brk调用(2)
- [16.6]–简单的printf调用实现
- {17}–使用控制台与键盘进行输入输出
- [17.10]–键盘初始化
- [17.11]–借助按键映射表进行键值转换(1)
- [17.12]–借助按键映射表进行键值转换(2)
- [17.13]–处理caplock键
- [17.14]–处理其它特殊功能键
- [17.1]–控制台简介与初始化(1)
- [17.2]–控制台简介与初始化(2)
- [17.3]–在控制台上显示字符串
- [17.4]–处理换行和清屏
- [17.5]–设置光标并重定向日志输出到显示器
- [17.6]–有趣的转义字符串以及删除字符
- [17.7]–保存并恢复光标位置
- [17.8]–更新显示字体的颜色
- [17.9]–移动光标位置及清屏
- {18}–设备管理与文件系统
- [18.10]–打开tty设备并向其写入数据
- [18.11]–从tty读取键值字符串并显示
- [18.12]–打开标准输出及错误输出文件
- [18.13]–允许切换tty窗口(1)
- [18.14]–允许切换tty窗口(2)
- [18.15]–为每个tty窗口创建进程并保护
- [18.1]–设备管理框架简介
- [18.2]–增加tty设备
- [18.3]–实现dev层接口操作
- [18.4]–为tty设备添加结构描述
- [18.5]–实现tty设备的打开
- [18.6]–通过tty设备写显示数据(1)
- [18.7]–通过tty设备写显示数据(2)
- [18.8]–文件系统简介及初始化
- [18.9]–为进程添加文件打开表
- {19}–实现一个命令行解释器
- [19.1]–初始化命令行解释器
- [19.2]–实现help命令的解析
- [19.3]–执行echo命令并给输出加点颜色(1)
- [19.4]–执行echo命令并给输出加点颜色(2)
- [19.5]–为进程增加exit接口
- [19.6]–为进程增加wait接口(1)
- [19.7]–为进程增加wait接口(2)
- [19.8]–为进程增加wait接口(3)
- [19.9]–让子进程继承父进程已打开的文件
- {1}–课前准备
- (1.2)–资料下载链接
- (1.4)–常见问题
- [1.1]–课程简介
- [1.3]–资料下载说明
- {20}–使用文件系统管理硬件设备
- [20.1]–描述一个文件系统
- [20.2]–挂载设备文件系统(1)
- [20.3]–挂载设备文件系统(2)
- [20.4]–挂载设备文件系统(3)
- [20.5]–打开devtty0文件(1)-只打开devfs中的文件
- [20.6]–打开devtty0文件(2)-更通用的打开方式
- [20.7]–往devtty0读写数据
- {21}–磁盘与fat16文件系统
- [21.10]–实现磁盘的读取和写入(2)
- [21.11]–FAT16文件系统简介(1)
- [21.12]–FAT16文件系统简介(2)
- [21.13]–挂载FAT16文件系统(1)
- [21.14]–挂载FAT16文件系统(2)
- [21.15]–挂载FAT16文件系统(3)
- [21.16]–遍历目录命令ls的实现(1)-添加系统调用接口
- [21.17]–遍历目录命令ls的实现(2)-列出虚假的目录内容
- [21.18]–遍历目录命令ls的实现(3)-列出真实的目录内容(1)
- [21.19]–遍历目录命令ls的实现(3)-列出真实的目录内容(2)
- [21.1]–磁盘基本特性简介
- [21.20]–遍历目录命令ls的实现(3)-列出真实的目录内容(3)
- [21.21]–文件查看命令less的实现(1)-打开文件
- [21.22]–文件查看命令less的实现(2)-显示部分文件内容
- [21.23]–文件查看命令less的实现(3)-显示全部文件内容
- [21.24]–文件查看命令less的实现(4)-逐行显示文件内容
- [21.25]–通过文件系统加载shell
- [21.26]–让shell加载应用程序运行
- [21.27]–应用运行异常时强制中断运行
- [21.28]–文件复制命令cp的实现(1)-创建新文件
- [21.29]–文件复制命令cp的实现(2)-删除文件
- [21.2]–识别系统中已有的磁盘(1)
- [21.30]–文件复制命令cp的实现(3)-文件写入(1)
- [21.31]–文件复制命令cp的实现(4)-文件写入(2)
- [21.32]–最后的调整
- [21.3]–识别系统中已有的磁盘(2)
- [21.4]–识别系统中已有的磁盘(3)
- [21.5]–识别系统中已有的磁盘(4)
- [21.6]–解析磁盘分区表(1)
- [21.7]–解析磁盘分区表(2)
- [21.8]–增加磁盘设备管理
- [21.9]–实现磁盘的读取和写入(1)
- {22}–课程总结
- [22.1]–设计总结
- {2}–开发环境准备
- (2.2)–注意事项(必看!!!)
- [2.1]–开发工具总览
- [2.3]–Windows平台
- [2.4]–Linux平台(ubuntu)
- [2.5]–Mac平台
- {3}–前置课(选学,介绍x86保护模式下的编程)
- (3.1)–课程说明
- [3.10]–进入保护模式(1)
- [3.11]–进入保护模式(2)
- [3.12]–进入保护模式(3)
- [3.13]–打开分页机制(1)
- [3.14]–打开分页机制(2)
- [3.15]–打开分页机制(3)
- [3.16]–开启定时中断(1)
- [3.17]–开启定时中断(2)
- [3.18]–开启定时中断(3)
- [3.19]–切换至低特权级(1)
- [3.20]–切换至低特权级(2)
- [3.21]–切换至低特权级(3)
- [3.22]–两个任务的切换(1)
- [3.23]–两个任务的切换(2)
- [3.24]–两个任务的切换(3)
- [3.25]–增加系统调用(1)…mp4
- [3.26]–增加系统调用(2)…mp4
- [3.27]–增加系统调用(3)…mp4
- [3.28]–使用LDT(1)
- [3.29]–使用LDT(2)
- [3.2]–课程简介
- [3.30]–使用LDT(3)
- [3.31]–课程总结
- [3.3]–开发环境安装(与前面部分内容有重复)
- [3.4]–工程组织结构
- [3.5]–让计算机跑我们的操作系统
- [3.6]–x86处理器编程模型(1)
- [3.7]–x86处理器编程模型(2)
- [3.8]–加载自己的剩余部分(1)
- [3.9]–加载自己的剩余部分(2)
- {4}–引导程序:接管控制权
- [4.1]–计算机启动流程简介
- [4.2]–接管运行控制权
- [4.3]–创建可引导的启动程序
- [4.4]–初始化引导程序(1)
- [4.5]–初始化引导程序(2)
- [4.6]–使用BIOS中断显示字符
- [4.7]–使用BIOS中断读取磁盘
- [4.8]–进入C语言环境并跳到loader(1)
- [4.9]–进入C语言环境并跳到loader(2)
- {5}–加载器loader的实现
- [5.10]–创建内核工程
- [5.11]–向内核传递启动信息(1)
- [5.12]–向内核传递启动信息(2)
- [5.13]–代码段数据段与链接脚本(1)
- [5.14]–代码段数据段与链接脚本(2)
- [5.15]–加载内核映像文件(1)
- [5.16]–加载内核映像文件(2)
- [5.1]–利用内联汇编显示字符串
- [5.2]–检测内存容量(1)
- [5.3]–检测内存容量(2)
- [5.4]–切换进保护模式(1)-1
- [5.5]–切换进保护模式(1)-2
- [5.6]–切换进保护模式(1)-3
- [5.7]–切换进保护模式(2)-1
- [5.8]–切换进保护模式(2)-2
- [5.9]–使用LBA模式读取磁盘
- {6}–中断与异常处理
- [6.10]–捕获除0异常(2)
- [6.11]–解析异常栈信息(1)
- [6.12]–解析异常栈信息(2)
- [6.13]–利用宏重用异常处理代码(1)
- [6.14]–利用宏重用异常处理代码(2)
- [6.15]–处理其它类型的异常(1)
- [6.16]–处理其它类型的异常(2)
- [6.17]–初始化中断控制器(1)
- [6.18]–初始化中断控制器(2)
- [6.19]–中断的打开与关闭
- [6.1]–创建GDT表及其表项(1)
- [6.20]–启动定时器并开中断(1)
- [6.21]–启动定时器并开中断(2)
- [6.22]–启动定时器并开中断(3)
- [6.2]–创建GDT表及其表项(2)
- [6.3]–保护模式下的内存管理简介
- [6.4]–重新加载GDT(1)
- [6.5]–重新加载GDT(2)
- [6.6]–触发异常与异常简介
- [6.7]–添加中断门描述符
- [6.8]–初始化IDT表
- [6.9]–捕获除0异常(1)
- {7}–日志与printf格式化输出
- [7.10]–在异常处理程序中打印信息…mp4
- [7.11]–利用assert辅助调试
- [7.1]–创建日志输出接口
- [7.2]–实现基本的信息输出
- [7.3]–实现基本的信息输出(1)
- [7.4]–实现基本的信息输出(2)
- [7.5]–若干字符串和内存操作函数实现
- [7.6]–实现字符串的格式化输出(1)
- [7.7]–实现字符串的格式化输出(2)
- [7.8]–支持整数的格式化(1)
- [7.9]–支持整数的格式化(2)
- {8}–实现简单的进程切换
- [8.10]–另一种任务切换方法(1)
- [8.11]–另一种任务切换方法(2)
- [8.1]–创建两个小任务
- [8.2]–添加任务状态段(1)
- [8.3]–添加任务状态段(2)
- [8.4]–任务的简单初始化(1)
- [8.5]–任务的简单初始化(2)-1
- [8.6]–任务的简单初始化(2)-2
- [8.7]–简单双任务相互切换(1)
- [8.8]–简单双任务相互切换(2)
- [8.9]–简单双任务相互切换(3)
- {9}–实现链表数据结构
- [9.1]–定义结点和链表
- [9.2]–实现链表的查询函数
- [9.3]–链表的两种插入
- [9.4]–链表的两种删除
- [9.5]–获取结点所在的结构(1)
- [9.6]–获取结点所在的结构(2)
包含内容
- · {10}–进程的管理与延时
- · [10.10]–让所有进程都能延时
- · [10.1]–添加任务管理器
- · [10.2]–将任务加入就绪队列
- · [10.3]–进程主动放弃CPU
- · [10.4]–让进程按时间片运行(1)
- · [10.5]–让进程按时间片运行(2)
- · [10.6]–临界资源及简单的保护(1)
贡献者
Mia
黄金