xv6
xv6
Xv6是由麻省理工學院(MIT)為操作系統工程的課程(代號6.828),開發的一個教學目的的操作系統。Xv6是在x86處理器上(x即指x86)用ANSI標準C重新實現的Unix第六版(UnixV6,通常直接被稱為V6)。
Xv6是在x86處理器上(x即指x86)用ANSI標準C重新實現的Unix第六版(Unix V6,通常直接被稱為V6)。UnixV6是1975年發布的,基於DECPDP-11小型機,當時還沒有x86系列CPU,而現在PDP的機器已經很少見了,當時使用是在標準ANSI C發布之前的舊式C語言。
與Linux或BSD系統不同,Xv6很簡單,可以在一個學期講完,全部代碼只有8千行多,但仍包括了Unix的重要概念和組織結構。由於是基於較早的Unix V6,Xv6的結構與現代操作系統,如Linux,Windows的差距較大。
在MIT以外,很多其它大學也在操作系統課程中使用了Xv6或其變種,如耶魯,清華等。
另外一個類似的教學用類Unix系統是著名的Minix。
MIT的一個操作系統工程的課程,代號6.828最初使用了Unix v6和John Lion的《Unix V6註釋和代碼》這本書(通常被稱為“獅”書,Lion是作者的姓,這裡做為一個雙關語,這本書使人們可以得到Unix的源代碼);而在實驗環節,學生們主要是在intel x86 的CPU上實現一個稱為Jos的“外核”架構(exokernel)的操作系統。
向學生介紹多個系統(V6,Jos)能幫助他們建立更多操作系統設計的觀念。但V6從一開始就導致了教學上的麻煩。很多學生懷疑使用V6這樣一個30多年前的,使用舊式C語言(比K&R C還要舊)開發的,並且在過時的PDP-11硬體上運行的系統是否合適。而且學生們還要苦於同時學習PDP-11和Intel x86兩種不同架構的底層差別。於是在2006年夏天,課程的老師們決定以V6為基礎,使用ANSI C寫一個新的在Intel x86多處理器計算機上的系統,也就是Xv6,來代替V6。Xv6使用x86CPU,更適合學生的經驗,而且將6.828課程統一到單一的體系結構上。增加多處理器支持需要使用鎖和線程來處理併發(單處理器只要簡單的開/關中斷即可)。重寫一個新系統的過程中,也使V6中比較粗糙的一些部分,如調度和文件系統得到了改進。於是MIT在2006年秋季的6.828課程中就開始使用Xv6了。
截止2018年9月,Xv6的最新版本是rev8,使用MIT許可證。可以通過git獲得最新的源代碼
此外還有一份適合列印的pdf文件,包括了全部源代碼,雙面列印的話不到50頁。
還有一份Xv6簡明的講義。
Xv6使用GNU C編譯器gcc,以ELF可執行文件格式作為支持的可執行文件格式。這有兩層含義,一是操作系統的實現代碼中有可以識別和執行ELF文件的模塊,另一層意思是要有能夠生成ELF文件的編譯器。如果使用其它的可執行文件格式,就需要重寫一個編譯器(至少是後端)。使用gcc和ELF可以省下不少工作。
BSD和Linux系統是直接支持這些gcc和ELF的,MacOSX和Windows不使用ELF,必須使用交叉編譯器才能生成ELF格式可執行文件。
Xv6可以在真實的硬體上啟動,但通常使用虛擬機來運行它,如Bochs,QEMU和Vmware player,VirtualBox。
TrustKernel的T6安全內核是一個xv6 ARM移植的操作系統,已經部署到中國的許多智能手機中。