天天看點

OS & Lisp -- 每位程式員都有自己的 “作業系統”(os) 和 “語言”(lisp) 夢

OS & Lisp

每位程式員都有自己的 “作業系統”(os) 和 “語言”(lisp) 夢!

簡介

項目位址

實作一個簡單的作業系統,隻需此作業系統支援

Lisp

語言。

開機動畫:

OS & Lisp -- 每位程式員都有自己的 “作業系統”(os) 和 “語言”(lisp) 夢

開機後啟動

Lisp

解釋器:

OS & Lisp -- 每位程式員都有自己的 “作業系統”(os) 和 “語言”(lisp) 夢

Lisp

可自舉(第一版已實作,即 lisp_c分支):

OS & Lisp -- 每位程式員都有自己的 “作業系統”(os) 和 “語言”(lisp) 夢

運作

環境

隻針對

i386

架構,需要交叉編譯器、模拟器環境。

下面以 Mac 為例:

  • 安裝模拟器 -->

    brew install qemu

  • 安裝彙編編譯器 -->

    brew install nasm

  • 安裝交叉編譯器
    brew tap nativeos/i386-elf-toolchain
    
    brew install i386-elf-binutils i386-elf-gcc i386-elf-gdb
               
執行

make run

一些說明

分支:

  • lisp_c

    ,此分支使用 C 實作 Lisp,最終 Lisp 已能自舉。但是,在執行 Lisp 表達式過程中若出現多于一次的 GC 就極有可能出錯(GC 的問題)
  • lisp_asm

    ,此分支使用彙編實作 Lisp,解決

    lisp_c

    中 GC 存在的問題,目前 Lisp 還不能自舉(還差一小步)

啟動流程:

OS & Lisp -- 每位程式員都有自己的 “作業系統”(os) 和 “語言”(lisp) 夢

内容:

  • 第 0 扇區
  • GDT

    IDT

  • CPU 與 IO 通信:

    MMIO

    PMIO

  • 定時器的原生實作
  • 記憶體管理 – 分離空閑連結清單
  • “序對池” 實作
  • 序對池的垃圾回收 GC —— 停止複制算法
    • 存活對象 —— root 表
    • 如何更新“老”指針
  • 字元串常量池實作 —— 哈希表
  • 一種錯誤機制 —— 彙編想怎麼跳就怎麼跳
  • 字元動畫

目标

  • OS’s BootLoader
  • OS’s Kernel ---- screen | interrupt (keyboard timer) | memory management | boot animation
  • Lisp ---- lisp interpreter
  • Lisp ---- enable lisp bootstrapping
  • Lisp ---- optimize lisp (separation of parsing and execution)
  • Lisp ---- in order to solve the problems of GC, use assembly to implement Lisp interpreter
  • Lisp ---- lisp compiler

參考

  • os-tutorial
  • OSDev
  • SICP

繼續閱讀