课程目录:
├── 章节01 课前准备
│ ├── 课时001 课程简介mp4
│ ├── 课时002 资料下载链接.pdf
│ ├── 课时003 资料下载说明.mp4
│ └── 课时004 常见问题pdf
├── 章节02 开发环境准备
│ ├── 课时005 开发工具总览mp4
│ ├── 课时006 注意事项(必看!!!).pdf
│ ├── 课时007 Windows平台mp4
│ ├── 课时008 Linux平台(ubuntu).mp4
│ └── 课时009 Mac平台.mp4
├── 章节03 前置课(选学,介绍x86保护模式下的编程)
│ ├── 课时010 课程说明.pdf
│ ├── 课时011 课程简介mp4
│ ├── 课时012 工程组织结构mp4
│ ├── 课时013 让计算机跑我们的操作系统.mp4
│ ├── 课时014 x86处理器编程模型(1).mp4
│ ├── 课时015 x86处理器编程模型(2)mp4
│ ├── 课时016 加载自己的剩余部分(1)mp4
│ ├── 课时017 加载自己的剩余部分(2).mp4
│ ├── 课时018 进入保护模式(1)mp4
│ ├── 课时019 进入保护模式(2).mp4
│ ├── 课时020 进入保护模式(3)mp4
│ ├── 课时021 打开分页机制(1)mp4
│ ├── 课时022 打开分页机制(2)mp4
│ ├── 课时023 打开分页机制(3).mp4
│ ├── 课时024 开启定时中断(1)mp4
│ ├── 课时025 开启定时中断(2).mp4
│ ├── 课时026 开启定时中断(3).mp4
│ ├── 课时027 切换至低特权级(1)mp4
│ ├── 课时028 切换至低特权级(2).mp4
│ ├── 课时029 切换至低特权级(3)mp4
│ ├── 课时030 两个任务的切换(1)mp4
│ ├── 课时031 两个任务的切换(2)mp4
│ ├── 课时032 两个任务的切换(3).mp4
│ ├── 课时033 增加系统调用(1).mp4
│ ├── 课时034 增加系统调用(2)..mp4
│ ├── 课时035 增加系统调用(3)..mp4
│ ├── 课时036 使用LDT(1)mp4
│ ├── 课时037 使用LDT(2)mp4
│ ├── 课时038 使用LDT(3).mp4
│ └── 课时039 课程总结.mp4
├── 章节04 引导程序:接管控制权
│ ├── 课时040 计算机启动流程简介mp4
│ ├── 课时041 接管运行控制权.mp4
│ ├── 课时042 创建可引导的启动程序mp4
│ ├── 课时043 初始化引导程序(1).mp4
│ ├── 课时044 初始化引导程序(2).mp4
│ ├── 课时045 使用BIOS中断显示字符.mp4
│ ├── 课时046 使用BIOS中断读取磁盘.mp4
│ ├── 课时047 进入C语言环境并跳到loader(1).mp4
│ └── 课时048 进入C语言环境并跳到loader(2)mp4
├── 章节05 加载器loader的实现
│ ├── 课时049 利用内联汇编显示字符串mp4
│ ├── 课时050 检测内存容量(1)mp4
│ ├── 课时051 检测内存容量(2)mp4
│ ├── 课时052 切换进保护模式(1)-1mp4
│ ├── 课时053 切换进保护模式(1)-2mp4
│ ├── 课时054 切换进保护模式(1)-3mp4
│ ├── 课时055 切换进保护模式(2)-1mp4
│ ├── 课时056 切换进保护模式(2)-2mp4
│ ├── 课时057 使用LBA模式读取磁盘mp4
│ ├── 课时058 创建内核工程mp4
│ ├── 课时059 向内核传递启动信息(1)mp4
│ ├── 课时060 向内核传递启动信息(2)mp4
│ ├── 课时061 代码段数据段与链接脚本(1)mp4
│ ├── 课时062 代码段数据段与链接脚本(2).mp4
│ ├── 课时063 加载内核映像文件(1).mp4
│ └── 课时064 加载内核映像文件(2).mp4
├── 章节06 中断与异常处理
│ ├── 课时065 创建GDT表及其表项(1)mp4
│ ├── 课时066 创建GDT表及其表项(2)mp4
│ ├── 课时067 保护模式下的内存管理简介mp4
│ ├── 课时068 重新加载GDT(1)mp4
│ ├── 课时069 重新加载GDT(2)mp4
│ ├── 课时070 触发异常与异常简介mp4
│ ├── 课时071 添加中断门描述符mp4
│ ├── 课时072 初始化IDT表mp4
│ ├── 课时073 捕获除0异常(1)mp4
│ ├── 课时074 捕获除0异常(2)mp4
│ ├── 课时075 解析异常栈信息(1)mp4
│ ├── 课时076 解析异常栈信息(2)mp4
│ ├── 课时077 利用宏重用异常处理代码(1)mp4
│ ├── 课时078 利用宏重用异常处理代码(2)mp4
│ ├── 课时079 处理其它类型的异常(1)mp4
│ ├── 课时080 处理其它类型的异常(2).mp4
│ ├── 课时081 初始化中断控制器(1).mp4
│ ├── 课时082 初始化中断控制器(2)mp4
│ ├── 课时083 中断的打开与关闭.mp4
│ ├── 课时084 启动定时器并开中断(1)mp4
│ ├── 课时085 启动定时器并开中断(2)mp4
│ └── 课时086 启动定时器并开中断(3)mp4
├── 章节07 日志与printf格式化输出
│ ├── 课时087 创建日志输出接口mp4
│ ├── 课时088 实现基本的信息输出mp4
│ ├── 课时089 实现基本的信息输出(1).mp4
│ ├── 课时090 实现基本的信息输出(2).mp4
│ ├── 课时091 若干字符串和内存操作函数实现mp4
│ ├── 课时092 实现字符串的格式化输出(1)mp4
│ ├── 课时093 实现字符串的格式化输出(2)mp4
│ ├── 课时094 支持整数的格式化(1)mp4
│ ├── 课时095 支持整数的格式化(2)mp4
│ ├── 课时096 在异常处理程序中打印信息.mp4
│ └── 课时097 利用assert辅助调试mp4
├── 章节08 实现简单的进程切换
│ ├── 课时098 创建两个小任务mp4
│ ├── 课时099 添加任务状态段(1)mp4
│ ├── 课时100 添加任务状态段(2)mp4
│ ├── 课时101 任务的简单初始化(1)mp4
│ ├── 课时102 任务的简单初始化(2)- 1mp4
│ ├── 课时103 任务的简单初始化(2)- 2mp4
│ ├── 课时104 简单双任务相互切换(1)mp4
│ ├── 课时105 简单双任务相互切换(2)mp4
│ ├── 课时106 简单双任务相互切换(3)mp4
│ ├── 课时107 另一种任务切换方法(1)mp4
│ ├── 课时108 另一种任务切换方法(2)(1)mp4
│ └── 课时108 另一种任务切换方法(2)mp4
├── 章节09 实现链表数据结构
│ ├── 课时109 定义结点和链表mp4
│ ├── 课时110 实现链表的查询函数mp4
│ ├── 课时111 链表的两种插入mp4
│ ├── 课时112 链表的两种删除mp4
│ ├── 课时113 获取结点所在的结构(1)mp4
│ └── 课时114 获取结点所在的结构(2)mp4
├── 章节10 进程的管理与延时
│ ├── 课时115 添加任务管理器mp4
│ ├── 课时116 将任务加入就绪队列mp4
│ ├── 课时117 进程主动放弃CPUmp4
│ ├── 课时118 让进程按时间片运行(1)mp4
│ ├── 课时119 让进程按时间片运行(2)mp4
│ ├── 课时120 临界资源及简单的保护(1)mp4
│ ├── 课时121 临界资源及简单的保护(2)mp4
│ ├── 课时122 临界资源及简单的保护(3)mp4
│ ├── 课时123 让进程能够延时运行mp4
│ └── 课时124 让所有进程都能延时mp4
├── 章节11 进程间的同步与互斥
│ ├── 课时125 计数信号量及其初始化mp4
│ ├── 课时126 发送和等待信号mp4
│ ├── 课时127 使用计数信号量mp4
│ ├── 课时128 互斥锁及其初始化mp4
│ ├── 课时129 互斥锁的加解锁mp4
│ └── 课时130 应用互斥锁mp4
├── 章节12 虚拟内存管理和保护模式
│ ├── 课时131 内存管理问题mp4
│ ├── 课时132 位图数据结构与初始化mp4
│ ├── 课时133 位图位的分配(1)mp4
│ ├── 课时134 位图位的分配(2)mp4
│ ├── 课时135 创建地址分配结构(1)mp4
│ ├── 课时136 创建地址分配结构(2)mp4
│ ├── 课时137 规划内存空间的分配(1)mp4
│ ├── 课时138 规划内存空间的分配(2)mp4
│ ├── 课时139 规划内存空间的分配(3)mp4
│ ├── 课时140 内存分页机制介绍mp4
│ ├── 课时141 开启内存分页机制(1)mp4
│ ├── 课时142 开启内存分页机制(2)- 1mp4
│ ├── 课时143 开启内存分页机制(2)- 2mp4
│ ├── 课时144 开启内存分页机制(2)- 3mp4
│ ├── 课时145 创建内核页表(1)-建立映射表(1)mp4
│ ├── 课时146 创建内核页表(1)-建立映射表(2)mp4
│ ├── 课时147 创建内核页表(2)-页目录和页表结构mp4
│ ├── 课时148 创建内核页表(3)-建立映射表(1)mp4
│ ├── 课时149 创建内核页表(3)-建立映射表(2)mp4
│ ├── 课时150 创建内核页表(3)-建立映射表(3)mp4
│ ├── 课时151 创建内核页表(4)-添加权限处理mp4
│ ├── 课时152 为进程创建页表(1)mp4
│ └── 课时153 为进程创建页表(2)mp4
├── 章节13 隔离操作系统与进程
│ ├── 课时154 隔离操作系统与进程(1)-代码分离mp4
│ ├── 课时155 隔离操作系统与进程(2)-地址分离mp4
│ ├── 课时156 隔离操作系统与进程(3)-搬运代码mp4
│ ├── 课时157 调整应用的特权级(1)mp4
│ ├── 课时158 调整应用的特权级(2)mp4
│ ├── 课时159 调整异常处理函数(1)mp4
│ ├── 课时160 调整异常处理函数(2)mp4
│ ├── 课时161 修改空闲任务的特权级mp4
│ ├── 课时162 切换至应用进程的特权级为最低mp4
│ └── 课时163 为进程添加特权级0的栈空间mp4
├── 章节14 建立系统调用
│ ├── 课时164 创建调用门mp4
│ ├── 课时165 实现系统调用的调用和返回(1)mp4
│ ├── 课时166 实现系统调用的调用和返回(2)mp4
│ ├── 课时167 实现msleep系统调用(1)mp4
│ ├── 课时168 实现msleep系统调用(2)mp4
│ ├── 课时169 实现getid系统调用mp4
│ ├── 课时170 实现pint_msg调用mp4
│ └── 课时171 使用int $0x80实现系统调用mp4
├── 章节15 新进程的加载与创建
│ ├── 课时172 实现fork系统调用(1)- 添加调用接口mp4
│ ├── 课时173 实现fork系统调用(2)- 分配任务块mp4
│ ├── 课时174 实现fork系统调用(3)- 初始化任务块mp4
│ ├── 课时175 实现fork系统调用(4) – 复制进程地址空间mp4
│ ├── 课时176 实现exec系统调用(1) – 创建一个空应用mp4
│ ├── 课时177 实现exec系统调用(2) – 增加空的exec调用mp4
│ ├── 课时178 实现exec系统调用(3) – 添加虚似文件访问接口mp4
│ ├── 课时179 实现exec系统调用(4) – 解析并加载elf文件mp4
│ ├── 课时180 实现exec系统调用(5) – 分配栈并进入进程执行mp4
│ ├── 课时181 实现exec系统调用(6) – 为进程传递参数(1)mp4
│ ├── 课时182 实现exec系统调用(6) – 为进程传递参数(2)mp4
│ └── 课时183 添加sys_yield()系统调用mp4
├── 章节16 使用c标准库中的printf输出
│ ├── 课时184 增加文件系统调用(1)mp4
│ ├── 课时185 增加文件系统调用(2)mp4
│ ├── 课时186 导入newlib c并调用printfmp4
│ ├── 课时187 为malloc实现sys_brk调用(1)mp4
│ ├── 课时188 为malloc实现sys_brk调用(2)mp4
│ └── 课时189 简单的printf调用实现mp4
├── 章节17 使用控制台与键盘进行输入输出
│ ├── 课时190 控制台简介与初始化(1)mp4
│ ├── 课时191 控制台简介与初始化(2)mp4
│ ├── 课时192 在控制台上显示字符串mp4
│ ├── 课时193 处理换行和清屏mp4
│ ├── 课时194 设置光标并重定向日志输出到显示器mp4
│ ├── 课时195 有趣的转义字符串以及删除字符mp4
│ ├── 课时196 保存并恢复光标位置mp4
│ ├── 课时197 更新显示字体的颜色mp4
│ ├── 课时198 移动光标位置及清屏mp4
│ ├── 课时199 键盘初始化mp4
│ ├── 课时200 借助按键映射表进行键值转换(1)mp4
│ ├── 课时201 借助按键映射表进行键值转换(2)mp4
│ ├── 课时202 处理caplock键mp4
│ └── 课时203 处理其它特殊功能键mp4
├── 章节18 设备管理与文件系统
│ ├── 课时204 设备管理框架简介mp4
│ ├── 课时205 增加tty设备mp4
│ ├── 课时206 实现dev层接口操作mp4
│ ├── 课时207 为tty设备添加结构描述mp4
│ ├── 课时208 实现tty设备的打开mp4
│ ├── 课时209 通过tty设备写显示数据(1)mp4
│ ├── 课时210 通过tty设备写显示数据(2)mp4
│ ├── 课时211 文件系统简介及初始化mp4
│ ├── 课时212 为进程添加文件打开表mp4
│ ├── 课时213 打开tty设备并向其写入数据mp4
│ ├── 课时214 从tty读取键值字符串并显示mp4
│ ├── 课时215 打开标准输出及错误输出文件mp4
│ ├── 课时216 允许切换tty窗口(1)mp4
│ ├── 课时217 允许切换tty窗口(2)mp4
│ └── 课时218 为每个tty窗口创建进程并保护.mp4
├── 章节19 实现一个命令行解释器
│ ├── 课时219 初始化命令行解释器.mp4
│ ├── 课时220 实现help命令的解析.mp4
│ ├── 课时221 执行echo命令并给输出加点颜色(1)mp4
│ ├── 课时222 执行echo命令并给输出加点颜色(2).mp4
│ ├── 课时223 为进程增加exit接口mp4
│ ├── 课时224 为进程增加wait接口(1)mp4
│ ├── 课时225 为进程增加wait接口(2)mp4
│ ├── 课时226 为进程增加wait接口(3)mp4
│ └── 课时227 让子进程继承父进程已打开的文件mp4
├── 章节20 使用文件系统管理硬件设备
│ ├── 课时228 描述一个文件系统mp4
│ ├── 课时229 挂载设备文件系统(1)mp4
│ ├── 课时230 挂载设备文件系统(2)mp4
│ ├── 课时231 挂载设备文件系统(3)mp4
│ ├── 课时232 打开devtty0文件(1) – 只打开devfs中的文件mp4
│ ├── 课时233 打开devtty0文件(2) – 更通用的打开方式mp4
│ └── 课时234 往devtty0读写数据mp4
├── 章节21 磁盘与fat16文件系统
│ ├── 课时235 磁盘基本特性简介mp4
│ ├── 课时236 识别系统中已有的磁盘(1)mp4
│ ├── 课时237 识别系统中已有的磁盘(2)mp4
│ ├── 课时238 识别系统中已有的磁盘(3)mp4
│ ├── 课时239 识别系统中已有的磁盘(4)mp4
│ ├── 课时240 解析磁盘分区表(1)mp4
│ ├── 课时241 解析磁盘分区表(2)mp4
│ ├── 课时242 增加磁盘设备管理mp4
│ ├── 课时243 实现磁盘的读取和写入(1)mp4
│ ├── 课时244 实现磁盘的读取和写入(2)mp4
│ ├── 课时245 FAT16文件系统简介(1)mp4
│ ├── 课时246 FAT16文件系统简介(2)mp4
│ ├── 课时247 挂载FAT16文件系统(1)mp4
│ ├── 课时248 挂载FAT16文件系统(2)mp4
│ ├── 课时249 挂载FAT16文件系统(3)mp4
│ ├── 课时250 遍历目录命令ls的实现(1)- 添加系统调用接口mp4
│ ├── 课时251 遍历目录命令ls的实现(2)- 列出虚假的目录内容mp4
│ ├── 课时252 遍历目录命令ls的实现(3)- 列出真实的目录内容(1)mp4
│ ├── 课时253 遍历目录命令ls的实现(3)- 列出真实的目录内容(2)mp4
│ ├── 课时254 遍历目录命令ls的实现(3)- 列出真实的目录内容(3)mp4
│ ├── 课时255 文件查看命令less的实现(1)- 打开文件mp4
│ ├── 课时256 文件查看命令less的实现(2)- 显示部分文件内容mp4
│ ├── 课时257 文件查看命令less的实现(3)- 显示全部文件内容mp4
│ ├── 课时258 文件查看命令less的实现(4)- 逐行显示文件内容mp4
│ ├── 课时259 通过文件系统加载shellmp4
│ ├── 课时260 让shell加载应用程序运行mp4
│ ├── 课时261 应用运行异常时强制中断运行mp4
│ ├── 课时262 文件复制命令cp的实现(1)- 创建新文件mp4
│ ├── 课时263 文件复制命令cp的实现(2)- 删除文件mp4
│ ├── 课时264 文件复制命令cp的实现(3)- 文件写入(1)mp4
│ ├── 课时265 文件复制命令cp的实现(4)- 文件写入(2)mp4
│ └── 课时266 最后的调整mp4
├── 章节22 课程总结
│ └── 课时267 设计总结mp4
└── diy-x86oszip
├── 【课程文档A】从0手写x86操作系统
│ ├── 第10章 进程间的同步与互斥
│ │ ├── 发送和等待信号md
│ │ ├── 互斥锁的加解锁md
│ │ ├── 互斥锁及其初始化md
│ │ ├── 计数信号量及其初始化md
│ │ ├── 使用计数信号量md
│ │ └── 应用互斥锁md
│ ├── 第11章 虚拟内存管理和保护模式
│ │ ├── 创建地址分配结构md
│ │ ├── 创建内核页表md
│ │ ├── 规划内存空间的分配md
│ │ ├── 开启内存分页机制md
│ │ ├── 内存分页机制介绍md
│ │ ├── 内存管理问题md
│ │ ├── 为进程创建页表md
│ │ ├── 位图数据结构与初始化md
│ │ └── 位图位的分配md
│ ├── 第12章 隔离操作系统与进程
│ │ ├── 调整异常处理函数md
│ │ ├── 调整应用的特权级md
│ │ ├── 隔离操作系统与进程md
│ │ ├── 切换至用户特权级为最低md
│ │ ├── 为进程添加特权级0的栈空间md
│ │ └── 修改空闲任务的特权级md
│ ├── 第13章 建立系统调用
│ │ ├── 创建调用门md
│ │ ├── 实现getid系统调用md
│ │ ├── 实现msleep系统调用md
│ │ ├── 实现pint_msg调用md
│ │ ├── 实现系统调用的调用和返回md
│ │ └── 使用int $0x80实现系统调用md
│ ├── 第14章 从磁盘加载程序运行
│ │ ├── 实现exec系统调用md
│ │ ├── 实现fork系统调用md
│ │ └── 添加sys_yield()系统调用md
│ ├── 第15章 使用c标准库中的printf输出
│ │ ├── 导入newlib c并调用printfmd
│ │ ├── 调整文件系统调用md
│ │ ├── 简单的printf调用实现md
│ │ └── 为malloc实现sys_brk调用md
│ ├── 第16章 控制台输出与文件系统框架
│ │ ├── 保存并恢复光标位置md
│ │ ├── 处理caplock键md
│ │ ├── 处理换行和清屏md
│ │ ├── 处理其它特殊功能键md
│ │ ├── 更新显示字体的颜色md
│ │ ├── 键盘初始化md
│ │ ├── 借助按键映射表进行键值转换md
│ │ ├── 控制台简介与初始化md
│ │ ├── 设置光标并重定向日志输出到显示器md
│ │ ├── 移动光标位置及清屏md
│ │ ├── 在控制台上显示字符串.md
│ │ └── 转义字符串以及删除字符.md
│ ├── 第17章 设备管理与文件系统
│ │ ├── 从tty读取键值字符串并显示md
│ │ ├── 打开tty设备并向其写入数据md
│ │ ├── 打开标准输出及错误输出文件md
│ │ ├── 将tty纳入设备管理器中md
│ │ ├── 设备管理框架简介md
│ │ ├── 实现dev层接口操作md
│ │ ├── 通过tty设备写显示数据md
│ │ ├── 为tty设备添加结构描述md
│ │ ├── 为进程添加文件打开表md
│ │ ├── 为每个tty窗口创建进程并保护md
│ │ ├── 文件系统简介及初始化md
│ │ └── 允许切换tty窗口md
│ ├── 第18章 实现命令行解释器
│ │ ├── 初始化命令行解释器md
│ │ ├── 让子进程继承父进程已打开的文件md
│ │ ├── 实现help命令的解析md
│ │ ├── 为进程增加exit接口md
│ │ ├── 为进程增加wait接口md
│ │ └── 执行echo命令并给输出加点颜色md
│ ├── 第19章 使有文件系统管理硬件设备
│ │ ├── 打开devtty0文件(1) – 只打开devfs中的文件md
│ │ ├── 打开devtty0文件(2) – 更通用的打开方式md
│ │ ├── 挂载设备文件系统md
│ │ ├── 描述一个文件系统md
│ │ └── 往devtty0读写数据md
│ ├── 第1章 课前准备
│ │ ├── 面试题目md
│ │ ├── 学习方法md
│ │ ├── 指南介绍md
│ │ └── 资料下载md
│ ├── 第20章 磁盘与fat32文件系统
│ │ ├── FAT16文件系统简介md
│ │ ├── 遍历目录命令ls的实现(1)- 添加系统调用接口md
│ │ ├── 遍历目录命令ls的实现(2)- 列出虚假的目录内容md
│ │ ├── 遍历目录命令ls的实现(3)- 列出真实的目录内容md
│ │ ├── 磁盘基本特性简介md
│ │ ├── 挂载FAT16文件系统md
│ │ ├── 解析磁盘分区表md
│ │ ├── 课程答疑:ls无法列举出文件md
│ │ ├── 让shell加载应用程序运行md
│ │ ├── 识别硬件中已有的磁盘md
│ │ ├── 实现磁盘的读取和写入md
│ │ ├── 通过文件系统加载shellmd
│ │ ├── 文件查看命令less的实现(1)- 打开文件md
│ │ ├── 文件查看命令less的实现(2)- 显示部分文件内容md
│ │ ├── 文件查看命令less的实现(3)- 显示全部文件内容md
│ │ ├── 文件查看命令less的实现(4)- 逐行显示文件内容md
│ │ ├── 文件复制命令cp的实现md
│ │ ├── 应用运行异常时强制中断运行md
│ │ ├── 增加磁盘打开接口md
│ │ └── 重要参考:磁盘映像数据分析md
│ ├── 第2章 开发环境准备
│ │ ├── Linux平台md
│ │ ├── Mac平台md
│ │ ├── Windows平台md
│ │ ├── 常见问题md
│ │ └── 开发工具总览md
│ ├── 第3章 引导:boot的实现
│ │ ├── 初始化引导程序md
│ │ ├── 创建可引导的启动程序md
│ │ ├── 计算机启动流程简介md
│ │ ├── 接管运行控制权md
│ │ ├── 进入C语言环境并跳到loadermd
│ │ ├── 扩展更多功能md
│ │ ├── 使用BIOS中断读取磁盘md
│ │ └── 使用BIOS中断显示字符md
│ ├── 第4章 加载:loader的实现
│ │ ├── 创建内核工程md
│ │ ├── 代码数据段与链接脚本md
│ │ ├── 加载内核映像文件md
│ │ ├── 检测内存容量md
│ │ ├── 利用内联汇编显示字符串md
│ │ ├── 切换至保护模式md
│ │ ├── 使用LBA读取磁盘md
│ │ └── 向内核传递启动信息md
│ ├── 第5章 中断与异常处理
│ │ ├── 保护模式下的内存管理简介md
│ │ ├── 捕获除0异常md
│ │ ├── 初始化IDT表md
│ │ ├── 初始化中断控制器md
│ │ ├── 处理其它类型的异常md
│ │ ├── 触发异常与异常简介md
│ │ ├── 创建GDT表及其表项md
│ │ ├── 解析异常栈信息md
│ │ ├── 利用宏重用异常处理代码md
│ │ ├── 启动定时器并打开中断md
│ │ ├── 添加中断门描述符md
│ │ ├── 中断的打开与关闭md
│ │ └── 重新加载GDTmd
│ ├── 第6章 日志与printf格式化输出
│ │ ├── 创建日志输出接口md
│ │ ├── 利用assert辅助调试md
│ │ ├── 若干字符串和内存操作函数实现md
│ │ ├── 实现基本的信息输出md
│ │ ├── 实现字符串的格式化输出md
│ │ ├── 在异常处理程序中打印信息md
│ │ └── 支持整数和字符的格式化md
│ ├── 第7章 实现简单进程切换
│ │ ├── 初始化任务md
│ │ ├── 创建两个小程序md
│ │ ├── 更简单高效的任务切换方法md
│ │ ├── 简单双任务相互切换md
│ │ └── 添加任务状态段md
│ ├── 第8章 实现链表数据结构
│ │ ├── 定义结点和链表md
│ │ ├── 获取结点所在的结构md
│ │ ├── 链表的两种插入md
│ │ ├── 链表的两种删除md
│ │ └── 实现链表的查询函数md
│ ├── 第9章 任务管理与延时
│ │ ├── 简单的调度算法:时间片运行md
│ │ ├── 将进程加入就绪队列md
│ │ ├── 进程主动放弃CPUmd
│ │ ├── 临界资源及简单的保护md
│ │ ├── 让所有任务都能延时md
│ │ ├── 添加任务管理器md
│ │ └── 为任务增加延时接口md
│ ├── 附录 参考文档
│ │ ├── ASCII码表md
│ │ ├── ASCII转义序列md
│ │ └── GCC内联汇编md
│ ├── 前置课:x86保护模式编程与操作系统设计
│ │ ├── x86处理器编程模型md
│ │ ├── 打开分页机制md
│ │ ├── 加载自己的剩余部分md
│ │ ├── 进入保护模式md
│ │ ├── 开启定时中断md
│ │ ├── 课程说明md
│ │ ├── 课程问题列表md
│ │ ├── 两个任务的切换md
│ │ ├── 切换至低特权级md
│ │ ├── 让计算机跑我们的操作系统md
│ │ ├── 使用LDTmd
│ │ ├── 增加系统调用md
│ │ └── 资料下载及环境配置md
│ └── 视频与代码勘误
│ └── 问题勘误md
├── 参考资料
│ ├── intel编程文档
│ │ ├── 253665-sdm-vol-1pdf
│ │ ├── 325383-sdm-vol-2abcd.pdf
│ │ ├── 325384-sdm-vol-3abcd.pdf
│ │ └── 335592-sdm-vol-4pdf
│ ├── 8253pdf
│ ├── 8259Apdf
│ ├── abi386-4pdf
│ ├── ELF_Formatpdf
│ ├── FAT英文白皮书pdf
│ ├── FAT中文白皮书pdf
│ ├── LINUX内核完全剖析:基于0.12内核pdf
│ └── unix-operating-system-designpdf
├── 磁盘映像
│ ├── disk1vhd
│ ├── disk2vhd
│ ├── diskimg
│ └── 说明txt
├── 开发工具
│ ├── mac
│ │ └── VSCode-darwin-universalzip
│ ├── ubuntu
│ │ └── code_1.66.2-1649664567_amd64deb
│ ├── windows
│ │ ├── DiskGenius
│ │ │ ├── dos
│ │ │ ├── avcodec-58.dll
│ │ │ ├── avdevice-58dll
│ │ │ ├── avfilter-7dll
│ │ │ ├── avformat-58.dll
│ │ │ ├── avutil-56.dll
│ │ │ ├── DGBCDX64exe
│ │ │ ├── DGFileViewerexe
│ │ │ ├── Disk0Part188747776-45693872dgrp
│ │ │ ├── DiskGeniusexe
│ │ │ ├── dsoframerocx
│ │ │ ├── Except_6060
│ │ │ ├── HdrwVdidll
│ │ │ ├── HdrwVhdddll
│ │ │ ├── HdrwVhdxdll
│ │ │ ├── HdrwVhddll
│ │ │ ├── Hdrwvmdll
│ │ │ ├── Letarmdll
│ │ │ ├── libde265dll
│ │ │ ├── libhefcdll
│ │ │ ├── libwimdll
│ │ │ ├── LSlMdll
│ │ │ ├── OfflineRegexe
│ │ │ ├── Optionsini
│ │ │ ├── releasenotetxt
│ │ │ ├── SDL2dll
│ │ │ ├── swresample-3dll
│ │ │ ├── swscale-5dll
│ │ │ └── VPreviewdll
│ │ ├── WinHex
│ │ │ └── WinHex_v20.2_x86_x64exe
│ │ ├── x86_64-elf-tools-windows
│ │ │ ├── bin
│ │ │ ├── include
│ │ │ ├── lib
│ │ │ ├── libexec
│ │ │ ├── share
│ │ │ └── x86_64-elf
│ │ ├── cmake-3.23.1-windows-i386.msi
│ │ ├── git-2.36.0-32-bitexe
│ │ ├── qemu-w32-setup-20170113.exe
│ │ ├── VSCodeUserSetup-x64-1.66.2.exe
│ │ └── x86_64-elf-tools-windowszip
│ └── mac_ubuntu工具请自行下载txt
常见问题FAQ
- 视频课程的格式是什么
- 视频不加密,网盘在线学习,课程免费更新,持续更新
- 怎么发货?
- 有些资源没更新完结怎么办
- 有问题不懂想咨询怎么办