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