|
系統(tǒng)軟件這個(gè)概念其實(shí)比較模糊,傳統(tǒng)意義上一半將用于管理計(jì)算機(jī)本身的軟件稱為系統(tǒng)軟件,以區(qū)別普通的應(yīng)用程序。系統(tǒng)軟件可以分成兩塊,
- 一塊是平臺(tái)性的,比如操作系統(tǒng)內(nèi)核、驅(qū)動(dòng)程序、運(yùn)行庫和數(shù)以千計(jì)的系統(tǒng)工具;
- 另外一塊是用于程序開發(fā)的,比如 編譯器,鏈接器,匯編器等開發(fā)工具和開發(fā)庫。
計(jì)算機(jī)系統(tǒng)軟件體系結(jié)構(gòu)采用一種層的結(jié)構(gòu),有人說過一句名言:
“計(jì)算機(jī)科學(xué)領(lǐng)域的任何問題都可以通過增加一個(gè)間接的中間層來解決”
“Any problem in computer science can be solved by anther layer of indirection.”
這句話幾乎概括了計(jì)算機(jī)系統(tǒng)軟件體系結(jié)構(gòu)的設(shè)計(jì)要點(diǎn),整個(gè)體系結(jié)構(gòu)從上到下都是按照嚴(yán)格的層次結(jié)構(gòu)設(shè)計(jì)的,不僅是計(jì)算機(jī)系統(tǒng)軟件整個(gè)體系是這樣的,體系里面的每個(gè)組件比如OS本身,很多應(yīng)用程序、軟件系統(tǒng)甚至很多硬件結(jié)構(gòu)都是按照這種層次的結(jié)構(gòu)組織和設(shè)計(jì)的。系統(tǒng)軟件體系結(jié)構(gòu)中,各種軟件的位置如圖
- 每個(gè)層次之間都需要相互通信,既然需要通信就必須有一個(gè)通信的協(xié)議,我們一般將其稱為接口(Interface),接口的下面那層是接口的提供者,由它定義接口;
- 接口的上面那層是接口的使用者,它使用該接口來實(shí)現(xiàn)所需要的功能。
- 在層次體系中,任何一個(gè)層都可以被修改或者被替換。
- 除了硬件和應(yīng)用程序,其他都是所謂的中間層,每個(gè)中間層都是對它下面的那層的包裝和擴(kuò)展。正是這些中間層的存在,使得application 和 hardware 之間保存相對的獨(dú)立,比如hardware和OS都日新月異地發(fā)展,但最初的80836芯片和DOS 設(shè)計(jì)的軟件在最新的Multi-core和Windows Vista 下還是能夠運(yùn)行的,這方面就歸功于hardware和OS本身保持了向后兼容性,另一方面不得不歸功于這種層次結(jié)構(gòu)的設(shè)計(jì)方式。
- 最近開始流行的虛擬機(jī)技術(shù)更是在hardware和OS之間增加了一層虛擬層,使得一個(gè)計(jì)算機(jī)上可以同時(shí)運(yùn)行多個(gè)OS,這也是層次結(jié)構(gòu)帶來的好處,在盡可能少改變甚至不改變其他層的情況下,新增加一個(gè)層次就可以提供前所未有的功能。
- 我們的軟件體系最上層就是application,比如我們平常使用的 web browser、Email、VideoPlayer,ImageViewer等。從整個(gè)層次結(jié)構(gòu)上看,開發(fā)工具與應(yīng)用程序是屬于同一個(gè)層次的,因?yàn)樗鼈兌际褂靡粋€(gè)接口,那就是操作系統(tǒng)應(yīng)用程序編程接口(Application Programming Interface)。應(yīng)用程序接口的提供者是 運(yùn)行庫(Runtime library),什么樣的運(yùn)行庫提供什么樣的API,比如 Linux下的glibc庫 提供POSIX 的API; Windows的 運(yùn)行庫提供Windows API,最常見的32bit Windows提供的API 又被稱為win32。
- 運(yùn)行庫 使用OS提供的 系統(tǒng)調(diào)用接口(System call Interface),系統(tǒng)調(diào)用接口在實(shí)現(xiàn)中往往以軟中斷(Software Interpt)的方式提供,比如Linux使用0x80號中斷作為系統(tǒng)調(diào)用接口,windows使用0x2e號 中斷作為系統(tǒng)調(diào)用接口。
|