Xv6是由麻省理工學院(MIT)為作業系統工程的課程(代號6.828),開發的一個教學目的的作業系統。Xv6是在x86處理器上(x即指x86)用ANSI標準C重新實現的Unix第六版(Unix V6,通常直接被稱為V6)。
基本介紹
- 外文名:xv6
- 屬於:麻省理工學院
- 類別:一個教學目的的作業系統
- 或稱為:V6
課程簡介,歷史背景,課程教程,商用版本,
課程簡介
Xv6是由麻省理工學院(MIT)為作業系統工程的課程(代號6.828),開發的一個教學目的的作業系統。
Xv6是在x86處理器上(x即指x86)用ANSI標準C重新實現的Unix第六版(Unix V6,通常直接被稱為V6)。Unix V6是1975年發布的,基於DEC PDP-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使用x86 CPU,更適合學生的經驗,而且將6.828課程統一到單一的體系結構上。增加多處理器支持需要使用鎖和執行緒來處理並發(單處理器只要簡單的開/關中斷即可)。重寫一個新系統的過程中,也使V6中比較粗糙的一些部分,如調度和檔案系統得到了改進。於是MIT在2006年秋季的6.828課程中就開始使用Xv6了。
課程教程
截止2018年9月,Xv6的最新版本是rev8,使用MIT許可證。可以通過git獲得最新的原始碼
git clone https://github.com/mit-pdos/xv6-public.git
此外還有一份適合列印的pdf檔案,包括了全部原始碼,雙面列印的話不到50頁。
還有一份Xv6簡明的講義。
Xv6使用GNU C編譯器gcc ,以 ELF執行檔格式作為支持的執行檔格式。這有兩層含義,一是作業系統的實現代碼中有可以識別和執行ELF檔案的模組,另一層意思是要有能夠生成ELF檔案的編譯器。如果使用其它的執行檔格式,就需要重寫一個編譯器(至少是後端)。使用gcc和ELF可以省下不少工作。
BSD和Linux系統是直接支持這些gcc和ELF的,Mac OS X和Windows 不使用ELF,必須使用交叉編譯器才能生成ELF格式執行檔。
Xv6可以在真實的硬體上啟動,但通常使用虛擬機來運行它,如Bochs,QEMU和Vmware player,VirtualBox。
更多內容可訪問6.828課程的網站(英文)。
商用版本
TrustKernel的T6安全核心是一個xv6 ARM移植的作業系統,已經部署到中國的許多智慧型手機中。