一个操作系统的设计与实现——第1章 什么是操作系统
1.1 引言
什么是操作系統(tǒng)呢?
有些讀者可能會像曾經(jīng)的筆者一樣,認(rèn)為操作系統(tǒng)是"一種圖形界面";在學(xué)習(xí)了Linux操作系統(tǒng)后,認(rèn)為操作系統(tǒng)也可以是"一種命令行"。而不同種類,不同版本的操作系統(tǒng),則是"不同的圖形界面",或是"不同的命令行語法"。
那么,以Linux操作系統(tǒng)為例,讀者是否想過這些問題呢?
- 為什么輸入
ls命令,屏幕上就顯示了文件列表? - 什么是"文件"?
- 為什么在鍵盤上按一下
l鍵,屏幕上就會顯示一個字母l,而不是別的字母,或者沒反應(yīng)?s鍵也是一樣 - 計算機(jī)怎么知道鍵盤被按下了?又怎么知道按的是什么鍵?
- 怎么在屏幕上顯示一個字符?
這一系列越來越底層的問題乍一看都問的莫名其妙,尤其是最后一個:學(xué)過C語言的讀者都知道,用C語言的printf函數(shù),不就行了嗎?
那么,printf函數(shù)又是怎么實現(xiàn)的呢?
看來,事情并沒有這么簡單。這些看似莫名其妙的問題,都指向了一個詞:操作系統(tǒng)。
上述所有問題的答案,都可以用一句比較籠統(tǒng)的話來回答:由操作系統(tǒng)對這些功能提供支持。而其中原理,正是本系列要向讀者講述的。
歡迎來到操作系統(tǒng)的實現(xiàn)之旅!
1.2 準(zhǔn)備工作
想要實現(xiàn)一個操作系統(tǒng),需要進(jìn)行一些準(zhǔn)備工作。
首先是一臺安裝有Linux操作系統(tǒng)的物理機(jī)或虛擬機(jī),且?guī)в蠫CC編譯器。
然后,需要下載并安裝匯編編譯器nasm,其官網(wǎng)為https://nasm.us/。使用./configure --prefix=... && make -jN && make install命令即可完成安裝。
然后,需要安裝bochs虛擬機(jī),其官網(wǎng)為https://bochs.sourceforge.io/。bochs擁有強(qiáng)大的硬件模擬及調(diào)試功能,其用于運(yùn)行我們的操作系統(tǒng)。
bochs的安裝比較復(fù)雜,首先,需要使用普通的./configure --prefix=... && make -jN && make install命令將其編譯一次,此時得到的bochs程序是用于運(yùn)行的版本,此外,還會得到一個名為bximage的程序,其用于創(chuàng)建虛擬硬盤。然后,需要使用./configure --prefix=xxx --enable-debugger --enable-debugger-gui && make -jN && make install再編譯一次(注意兩次編譯的--prefix應(yīng)不同,否則就覆蓋了),這一次,得到的是bochs的調(diào)試器版本,當(dāng)操作系統(tǒng)出現(xiàn)問題時,就依靠它了。由于這兩個版本的bochs名字一樣,所以,讀者應(yīng)將第二個bochs更名,筆者使用的名稱是bochsdbg。
然后,需要構(gòu)建虛擬硬盤。運(yùn)行bximage命令,然后輸入1,回車;接下來一直回車,直至命令結(jié)束。此時,當(dāng)前目錄下出現(xiàn)了名為c.img的文件,其大小接近10M,這個文件就是創(chuàng)建好的虛擬硬盤了。
接下來,需要為兩個版本的bochs分別構(gòu)造一個配置文件。第一個配置文件需要放在~/.bochsrc處,其內(nèi)容為:
romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
boot: disk
ata0-master: type=disk, path="c.img", mode=flat
megs: 32
此配置文件中,第4行設(shè)定的是虛擬硬盤信息;第5行設(shè)定的是內(nèi)存容量,單位是M;其他配置無需關(guān)注。
第二個配置文件需要放在~/.bochsdbgrc處,其內(nèi)容較上一個文件多了最后一行:
romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
boot: disk
ata0-master: type=disk, path="c.img", mode=flat
megs: 32
display_library: x, options="gui_debug"
第6行用于啟動bochs調(diào)試器的GUI。
最后,需要在~/.bashrc中將兩個版本的bochs與其配置文件分別對應(yīng)起來:
alias bochs="bochs -q"
alias bochsdbg="bochsdbg -q -f ~/.bochsdbgrc"
至此,所有的準(zhǔn)備工作就都完成了。
如果現(xiàn)在運(yùn)行bochs命令,bochs會顯示:"No bootable device"(沒有可引導(dǎo)的設(shè)備),這是正常的,因為現(xiàn)在什么都還沒有實現(xiàn)。在下一章中,我們將正式開始實現(xiàn)操作系統(tǒng)。
本系列源碼可從https://github.com/yingyulou/Published-Articles/tree/master/code/os獲得。
總結(jié)
以上是生活随笔為你收集整理的一个操作系统的设计与实现——第1章 什么是操作系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt源码解析——元对象系统热身
- 下一篇: 深度解析NLP文本摘要技术:定义、应用与