- 註冊時間
- 2006-10-8
- 最後登錄
- 2019-6-20
- 主題
- 查看
- 積分
- 1306
- 閱讀權限
- 110
- 文章
- 1393
- 相冊
- 0
- 日誌
- 1
狀態︰
離線
|
本帖最後由 mm117777 於 2012-3-18 10:43 編輯
在早期想要讓電腦執行程式就得要參考一堆硬體功能函數,並且學習機器語言才能夠撰寫程式。 同時每次寫程式時都必須要重新改寫,因為硬體與軟體功能不見得都一致之故。那如果我能夠將所有的硬體都驅動, 並且提供一個發展軟體的參考介面來給工程師開發軟體的話,那發展軟體不就變的非常的簡單了?那就是作業系統啦!
• 作業系統核心(Kernel)
作業系統(Operating System, OS)其實也是一組程式, 這組程式的重點在於管理電腦的所有活動以及驅動系統中的所有硬體。 我們剛剛談到電腦沒有軟體只是一堆廢鐵,那麼作業系統的功能就是讓CPU可以開始判斷邏輯與運算數值、 讓主記憶體可以開始載入/讀出資料與程式碼、讓硬碟可以開始被存取、讓網路卡可以開始傳輸資料、 讓所有周邊可以開始運轉等等。總之,硬體的所有動作都必須要透過這個作業系統來達成就是了。
上述的功能就是作業系統的核心(Kernel)了!你的電腦能不能做到某些事情,都與核心有關! 只有核心有提供的功能,你的電腦系統才能幫你完成!舉例來說,你的核心並不支援TCP/IP的網路協定, 那麼無論你購買了什麼樣的網卡,這個核心都無法提供網路能力的!
• 但是單有核心我們使用者也不知道能作啥事的~因為核心主要在管控硬體與提供相關的能力(例如網路功能), 這些管理的動作是非常的重要的,如果使用者能夠直接使用到核心的話,萬一使用者不小心將核心程式停止或破壞, 將會導致整個系統的崩潰!因此核心程式所放置到記憶體當中的區塊是受保護的! 並且開機後就一直常駐在記憶體當中。系統呼叫(System Call)
系統呼叫(System Call)
既然我的硬體都是由核心管理,那麼如果我想要開發軟體的話,自然就得要去參考這個核心的相關功能! 唔!如此一來不是從原本的參考硬體函數變成參考核心功能,還是很麻煩啊!有沒有更簡單的方法啊!
為了解決這個問題,作業系統通常會提供一整組的開發介面給工程師來開發軟體! 工程師只要遵守該開發介面那就很容易開發軟體了!舉例來說,我們學習C程式語言只要參考C程式語言的函式即可, 不需要再去考量其他核心的相關功能,因為核心的系統呼叫介面會主動的將C程式語言的相關語法轉成核心可以瞭解的任務函數, 那核心自然就能夠順利運作該程式了!
如果我們將整個電腦系統的相關軟/硬體繪製成圖的話,他的關係有點像這樣:
圖4.2.1、作業系統的角色
電腦系統主要由硬體構成,然後核心程式主要在管理硬體,提供合理的電腦系統資源分配(包括CPU資源、記憶體使用資源等等), 因此只要硬體不同(如x86架構與RISC架構的CPU),核心就得要進行修改才行。 而由於核心只會進行電腦系統的資源分配,所以在上頭還需要有應用程式的提供,使用者才能夠操作系統的。
為了保護核心,並且讓程式設計師比較容易開發軟體,因此作業系統除了核心程式之外,通常還會提供一整組開發介面, 那就是系統呼叫層。軟體開發工程師只要遵循公認的系統呼叫參數來開發軟體,該軟體就能夠在該核心上頭運作。 所以你可以發現,軟體與核心有比較大的關係,與硬體關係則不大!硬體也與核心有比較大的關係! 至於與使用者有關的,那就是應用程式啦!
簡單的說,上面的圖示可以帶給我們底下的概念:
• 作業系統的核心層直接參考硬體規格寫成, 所以同一個作業系統程式不能夠在不一樣的硬體架構下運作。舉例來說,個人電腦版的Windows XP不能直接在RISC架構的電腦下運作。 所以您知道為何Windows XP又分為32位元及64位元的版本了吧?因為32/64位元的CPU指令集不太相同, 所以當然要設計不同的作業系統版本了。
• 作業系統只是在管理整個硬體資源,包括CPU、記憶體、輸入輸出裝置及檔案系統檔。 如果沒有其他的應用程式輔助,作業系統只能讓電腦主機準備妥當(Ready)而已!並無法運作其他功能。 所以你現在知道為何Windows XP上面要達成網頁影像的運作還需要類似PhotoImpact或Photoshop之類的軟體安裝了吧?
• 應用程式的開發都是參考作業系統提供的開發介面, 所以該應用程式只能在該作業系統上面運作而已,不可以在其他作業系統上面運作的。 現在您知道為何去購買線上遊戲的光碟時,光碟上面會明明白白的寫著該軟體適合用於哪一種作業系統上了吧? 也該知道某些遊戲為何不能夠在Linux上面安裝了吧?
• 核心功能
既然核心主要是在負責整個電腦系統相關的資源分配與管理,那我們知道其實整部電腦系統最重要的就是CPU與主記憶體, 因此,核心至少也要有這些功能的:
• 系統呼叫介面(System call interface)
剛剛談過了,這是為了方便程式開發者可以輕易的透過與核心的溝通,將硬體的資源進一步的利用, 於是需要有這個簡易的介面來方便程式開發者。
• 程序管理(Process control)
總有聽過所謂的『多工環境』吧?一部電腦可能同時間有很多的工作跑到CPU等待運算處理, 核心這個時候必須要能夠控制這些工作,讓CPU的資源作有效的分配才行!另外, 良好的CPU排程機制(就是CPU先運作那個工作的排列順序)將會有效的加快整體系統效能呢!
• 記憶體管理(Memory management)
控制整個系統的記憶體管理,這個記憶體控制是非常重要的,因為系統所有的程式碼與資料都必須要先存放在記憶體當中。 通常核心會提供虛擬記憶體的功能,當記憶體不足時可以提供記憶體置換(swap)的功能哩。
• 檔案系統管理(Filesystem management)
檔案系統的管理,例如資料的輸入輸出(I/O)等等的工作啦!還有不同檔案格式的支援啦等等, 如果你的核心不認識某個檔案系統,那麼您將無法使用該檔案格式的檔案囉!例如:Windows 98就不認識NTFS檔案格式的硬碟;
• 裝置的驅動(Device drivers)
就如同上面提到的,硬體的管理是核心的主要工作之一,當然囉,裝置的驅動程式就是核心需要做的事情啦! 好在目前都有所謂的『可載入模組』功能,可以將驅動程式編輯成模組,就不需要重新的編譯核心啦!
|
|