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