/ssxOS

一个小型操作系统的学习与实现

Primary LanguageCMIT LicenseMIT

ssxOS

 ▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄▄  ▄       ▄  ▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄▄ 
▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░▌     ▐░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌
▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀▀▀  ▐░▌   ▐░▌ ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀▀▀ 
▐░▌          ▐░▌            ▐░▌ ▐░▌  ▐░▌       ▐░▌▐░▌          
▐░█▄▄▄▄▄▄▄▄▄ ▐░█▄▄▄▄▄▄▄▄▄    ▐░▐░▌   ▐░▌       ▐░▌▐░█▄▄▄▄▄▄▄▄▄ 
▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌    ▐░▌    ▐░▌       ▐░▌▐░░░░░░░░░░░▌
 ▀▀▀▀▀▀▀▀▀█░▌ ▀▀▀▀▀▀▀▀▀█░▌   ▐░▌░▌   ▐░▌       ▐░▌ ▀▀▀▀▀▀▀▀▀█░▌
          ▐░▌          ▐░▌  ▐░▌ ▐░▌  ▐░▌       ▐░▌          ▐░▌
 ▄▄▄▄▄▄▄▄▄█░▌ ▄▄▄▄▄▄▄▄▄█░▌ ▐░▌   ▐░▌ ▐░█▄▄▄▄▄▄▄█░▌ ▄▄▄▄▄▄▄▄▄█░▌
▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░▌     ▐░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌
 ▀▀▀▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀▀▀▀  ▀       ▀  ▀▀▀▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀▀▀▀ 
                                                               

一个小型操作系统的学习与实现,实现了 MBR 跳转到 BootLoader ,在 BootLoader 中实现分页分段,并从实模式跳转到保护模式,之后在跳转到 kernel ,实现中断,通过 IO 位图实现简单的内存管理,实现简易内核线程与线程同步系列函数,实现用户进程,之后在通过 int 80 号中断实现系统调用.

此 demo 涉及到的大多知识来源于《操作系统真相还原》这本书,虽然与真正能够使用的操作系统还有很大差距,但是通过整个学习过程我理解了很多操作系统的底层原理,夯实了操作系统相关的基础知识。

开发环境

  • 操作系统版本: 5.4.70-amd64-desktop
  • 类型: 64位
  • 处理器: Intel(R) Core(TM) i7-8750H CPU @2.20GHz
  • 编译器版本: GCC 9.3
  • nasm 版本: 2.14
  • bochs 版本: 2.6.9
  • dd 版本: 8.3

如何运行

  1. 请在运行之前确保你使用的 Linux 发型版本之下中拥有 gcc , bochs , dd , nasm , bximage 命令,以上命令在Debian/Ubuntu 环境下都可以直接通过软件包直接安装,当然网上也能很容易查到相应的安装教程.

    sudo install apt-get xx
  2. 通过 bximage 命令生成硬盘,然后放到固定的一个目录下(我选择放在 /usr/share/bochs/ ),有两种方式.

    • 方式一: 直接通过输入命令(但是我的 bximage 版本无法执行该语句).

      bximage -hd -mode="flat" -size=60 -q hd60M.img
    • 方式二: 命令行输 bximage 交互生成硬盘.

    在这里插入图片描述

  3. 按照自己的实际开发环境创建 bochsrc.disk 文件,可以参考我的 bochsrc.disk 文件写法.

  4. 修改 Makefile 中的 img 路径为自己硬盘路径,例如

    img=/usr/share/bochs/hd60M.img
  5. 在主目录运行 make all 和 make image 命令.

  6. 运行 bochs -f bochsrc.disk所在路径,例如:

    bochs -f bochsrc.disk

之后就可以通过 bochs 进行调试运行了.

运行截图

在这里插入图片描述

参考书籍

  • 《X86汇编语言 从实模式到保护模式》
  • 《操作系统真相还原》
  • 《程序员的自我修养》
  • 《深入理解计算机系统》
  • 还有很多的博客文章,再次不一一列举了,十分感谢.