OS & Lisp
每位程式員都有自己的 “作業系統”(os) 和 “語言”(lisp) 夢!
簡介
項目位址
實作一個簡單的作業系統,隻需此作業系統支援
Lisp
語言。
開機動畫:
開機後啟動
Lisp
解釋器:
Lisp
可自舉(第一版已實作,即 lisp_c分支):
運作
環境
隻針對
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
一些說明
分支:
-
,此分支使用 C 實作 Lisp,最終 Lisp 已能自舉。但是,在執行 Lisp 表達式過程中若出現多于一次的 GC 就極有可能出錯(GC 的問題)lisp_c
-
,此分支使用彙編實作 Lisp,解決lisp_asm
中 GC 存在的問題,目前 Lisp 還不能自舉(還差一小步)lisp_c
啟動流程:
内容:
- 第 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