从0到1写自己的Linux x86操作系统

从0到1写自己的Linux x86操作系统
共170节 1672人在学 课程详情
  • 课前准备

    • 课程介绍
    • 资料下载
  • 开发环境准备

    • 开发工具总览
    • Windows平台
    • Linux平台(ubuntu)
    • Mac平台
    • 工程组织结构说明
  • 引导:boot的实现

    • 计算机启动流程简介
    • 接管运行控制权
    • 创建可引导的启动程序
    • 初始化引导程序
    • 使用BIOS中断显示字符
    • 使用BIOS中断读取磁盘
    • 进入C语言环境并跳到loader
  • 加载:loader的实现

    • 利用内联汇编显示字符串
    • 检测内存容量
    • 切换至保护模式(1)
    • 切换至保护模式(2)
    • 使用LBA读取磁盘
    • 创建内核工程
    • 向内核传递启动信息
    • 代码段数据段与链接脚本
    • 加载内核映像文件(1)
    • 加载内核映像文件(2)
  • 中断系统配置

    • 创建GDT表及其表项
    • 保护模式下的内存管理简介
    • 重新加载GDT
    • 触发异常与异常简介
    • 添加中断门描述符
    • 初始化IDT表
    • 捕获除0异常
    • 解析异常栈信息
    • 利用宏重用异常处理代码
    • 处理其它类型的异常
    • 初始化中断控制器
    • 中断的打开与关闭
    • 启动定时器并开中断
  • 日志与printf格式化输出

    • 创建日志输出接口
    • 实现基本的信息输出
    • 若干字符串和内存操作函数实现
    • 实现字符串的格式化输出
    • 支持整数和字符的格式化
    • 在异常处理程序中打印信息.
    • 利用assert辅助调试
  • 实现简单的进程切换

    • 创建两个小任务
    • 添加任务状态段
    • 任务的简单初始化(1)
    • 任务的简单初始化(2)
    • 简单双任务相互切换
    • 另一种任务切换方法
    • 补充一:历代Windows操作系统
  • 实现链表数据结构

    • 定义结点和链表
    • 实现链表的查询函数
    • 链表的两种插入
    • 链表的两种删除
    • 获取结点所在的结构
  • 进程的管理与延时

    • 添加任务管理器
    • 将任务加入就绪队列
    • 进程主动放弃CPU
    • 让进程按时间片运行
    • 临界资源及简单的保护
    • 让进程能够延时运行
    • 让所有进程都能延时
  • 进程间的同步与互斥

    • 计数信号量及其初始化
    • 发送和等待信号
    • 使用计数信号量
    • 互斥锁及其初始化
    • 互斥锁的加解锁
    • 应用互斥锁
  • 虚拟内存管理和保护模式

    • 内存管理问题
    • 位图数据结构与初始化
    • 位图位的分配
    • 创建地址分配结构
    • 规划内存空间的分配
    • 内存分页机制介绍
    • 开启内存分页机制(1)
    • 开启内存分页机制(2)
    • 创建内核页表(1)-建立映射表
    • 创建内核页表(2)-页目录和页表结构
    • 创建内核页表(3)-完成映射
    • 创建内核页表(4)-添加权限处理
    • 为进程创建页表
  • 隔离操作系统与用户进程

    • 隔离操作系统与进程(1)-代码分离
    • 隔离操作系统与进程(2)-地址分离
    • 隔离操作系统与进程(3)-搬运代码
    • 调整应用进程的特权级
    • 调整异常处理函数
    • 修改空闲任务的特权级
    • 切换至应用进程的特权级为最低
    • 为进程添加特权级0的栈空间
  • 建立系统调用接口

    • 创建调用门
    • 实现系统调用的调用和返回
    • 实现msleep系统调用
    • 实现getid系统调用
    • 实现pint_msg调用
    • 使用int $0x80实现系统调用
  • 新进程的加载与创建

    • 实现fork系统调用(1)- 添加调用接口
    • 实现fork系统调用(2)- 分配任务块
    • 实现fork系统调用(3)- 初始化任务块
    • 实现fork系统调用(4) - 复制进程地址空间
    • 实现exec系统调用(1) - 创建一个空应用
    • 实现exec系统调用(2) - 增加空的exec调用
    • 实现exec系统调用(3) - 添加虚似文件访问接口
    • 实现exec系统调用(4) - 解析并加载elf文件
    • 实现exec系统调用(5) - 分配栈并进入进程执行
    • 实现exec系统调用(6) - 为进程传递参数
    • 添加sys_yield()系统调用
  • 使用c标准库中的printf输出

    • 调整系统调用
    • 导入newlib c并调用printf
    • 为malloc实现sys_brk调用
    • 简单的printf调用实现
  • 使用控制台与键盘进行输入输出

    • 控制台简介与初始化
    • 在控制台上显示字符串
    • 处理换行和清屏
    • 设置光标并重定向日志输出到显示器
    • 有趣的转义字符串以及删除字符
    • 保存并恢复光标位置
    • 更新显示字体的颜色
    • 移动光标位置及清屏
    • 键盘初始化
    • 借助按键映射表进行键值转换
    • 处理caplock键
    • 处理其它特殊功能键
  • 设备管理与文件系统

    • 设备管理框架简介
    • 增加tty设备
    • 实现dev层接口操作
    • 为tty设备添加结构描述
    • 实现tty设备的打开
    • 通过tty设备写显示数据
    • 文件系统简介及初始化
    • 为进程添加文件打开表
    • 打开tty设备并向其写入数据
    • 从tty读取键值字符串并显示
    • 打开标准输出及错误输出文件
    • 允许切换tty窗口
    • 为每个tty窗口创建进程并保护
  • 实现一个命令行解释器

    • 初始化命令行解释器
    • 实现help命令的解析
    • 执行echo命令并给输出加点颜色
    • 为进程增加exit接口
    • 为进程增加wait接口
    • 让子进程继承父进程已打开的文件
  • 使用文件系统管理硬件设备

    • 描述一个文件系统
    • 挂载设备文件系统
    • 打开/dev/tty0文件(1) - 只打开devfs中的文
    • 打开/dev/tty0文件(2) - 更通用的打开方式
    • 往/dev/tty0读写数据
  • 磁盘与fat16文件系统

    • 磁盘基本特性简介
    • 识别系统中已有的磁盘
    • 解析磁盘分区表
    • 增加磁盘设备管理
    • 实现磁盘的读取和写入
    • FAT16文件系统简介
    • 挂载FAT16文件系统
    • 遍历目录命令ls的实现(1)- 添加系统调用接口
    • 遍历目录命令ls的实现(2)- 列出虚假的目录内容
    • 遍历目录命令ls的实现(3)- 列出真实的目录内容
    • 文件查看命令less的实现(1)- 打开文件
    • 文件查看命令less的实现(2)- 显示部分文件内容
    • 文件查看命令less的实现(3)- 显示全部文件内容
    • 文件查看命令less的实现(4)- 逐行显示文件内容
    • 通过文件系统加载shell
    • 让shell加载应用程序运行
    • 应用运行异常时强制中断运行
    • 文件复制命令cp的实现(1)- 创建新文件
    • 文件复制命令cp的实现(2)- 删除文件
    • 文件复制命令cp的实现(3)- 文件写入(1)
    • 文件复制命令cp的实现(4)- 文件写入(2).
    • 最后的调整与总结
  • 课程总结

    • 课程总结

    订阅失败

    从0到1写自己的Linux x86操作系统
    从0到1写自己的Linux x86操作系统 ...

    订阅列表已满,请先移出部分订阅内容。

    当前章节需购买后观看
    开通超级会员免费看!专家精选系列课程,满足你从入门到精通!更有问答月卡免费送,你的问题有问必答!
    提交答案

    购买课程

    扫码完成付费,可继续学习全部课程内容

    加载中...
    播放页问题反馈
    视频学习中有任何产品建议都可由此反
    馈,我们将及时处理!

    课时介绍

    介绍计数信号量的功能及作用,定义相关的结构

    课程介绍

    本课程采用从0行代码编写的方式,带你写一个x86操作系统,从而深入掌握操作系统的工作原理。

     

    推荐课程

    信息系统项目管理师自考笔记

    李明 · 910人在学

    python从0到1:期货量化交易系统(CTP实战,高频及合成K线数据

    王先生 · 22798人在学

    手把手搭建Java超市管理系统【附源码】(毕设)

    汤小洋 · 4294人在学

    Java毕设springboot外卖点餐系统 毕业设计毕设源码 使用教

    黄菊华 · 838人在学

    基于SSM酒店管理系统(毕设)

    小尼老师 · 899人在学

    java项目实战之购物商城(java毕业设计)

    Long · 5203人在学

    手把手搭建Java求职招聘系统【附源码】(毕设)

    汤小洋 · 1531人在学

    Python Django 深度学习 小程序

    钟翔 · 2406人在学

    城管局门前三包管理系统+微信小程序(vue+springboot)

    赖国荣 · 681人在学

    Vue+Uni-app(uniapp)入门与实战+赠送仿美团点餐小程序

    李杰 · 4075人在学

    正在试验
    后自动删除环境
    课程实验
    本次实验时间已到期 00:00:00
    课件正在飞速打包中,请耐心等待几秒钟~