定義
對(duì)待知識(shí)領(lǐng)域饲宛,我們總喜歡去下一個(gè)定義嗜价。操作系統(tǒng)是我們每天工作都要使用的東西,由于現(xiàn)代商業(yè)操作系統(tǒng)的復(fù)雜性和沒有統(tǒng)一的標(biāo)準(zhǔn)久锥,若對(duì)一個(gè)操作系統(tǒng)下定義并不能精確的描述操作系統(tǒng)所屬領(lǐng)域。根據(jù)經(jīng)驗(yàn)我們可以認(rèn)為操作系統(tǒng)就是在整個(gè)應(yīng)用系統(tǒng)中負(fù)責(zé)最基本功能和系統(tǒng)管理的那部分絮重。包括內(nèi)核歹苦、設(shè)備驅(qū)動(dòng)程序、啟動(dòng)引導(dǎo)程序殴瘦、命令行Shell或者GUI界面蚪腋、基本文件管理工具和系統(tǒng)工具。
嚴(yán)格的來講linux只是操作系統(tǒng)內(nèi)核本身屉凯,廣義上的linux則常用來指基于linux內(nèi)二的完整的操作系統(tǒng),它包括GUI組件和其它許多工具晓勇。
內(nèi)核到底是什么
GUI其實(shí)只是操作系統(tǒng)的表象哩簿,內(nèi)核才是操作系統(tǒng)內(nèi)在的核心。系統(tǒng)的其它部分必須依靠?jī)?nèi)核所提供的服務(wù)节榜,像管理硬件設(shè)備、分配系統(tǒng)資源等稼稿,內(nèi)核有時(shí)候被稱為管理者或者操作系統(tǒng)核心。
通常一個(gè)內(nèi)核由負(fù)責(zé)響應(yīng)中斷的中斷服務(wù)程序敞恋,負(fù)責(zé)進(jìn)程調(diào)度的CPU調(diào)度程序谋右,負(fù)責(zé)管理進(jìn)程地址空間的內(nèi)存管理程序以及網(wǎng)絡(luò)、進(jìn)程間通信等系統(tǒng)服務(wù)共同組成的改执。
內(nèi)核態(tài)和用戶態(tài)
內(nèi)核在有安全機(jī)制的操作系統(tǒng)中不同于普通程序,一般處于系統(tǒng)態(tài)(內(nèi)核態(tài))衬横,擁有受保護(hù)的內(nèi)存空間和訪問硬件設(shè)備的所有權(quán)限终蒂。這種系統(tǒng)狀態(tài)和被保護(hù)起來的內(nèi)存空間,統(tǒng)稱為內(nèi)核空間拇泣。
與內(nèi)核空間相對(duì)的,用戶所執(zhí)行的應(yīng)用程序在用戶空間執(zhí)行构眯。用戶態(tài)的應(yīng)用程序只能訪問允許它們使用的系統(tǒng)資源早龟,并且只使用某些特定的系統(tǒng)功能猫缭,不能直接訪問硬件,也不能訪問內(nèi)核劃分給其它應(yīng)用程序的內(nèi)存空間芝加。
內(nèi)核與應(yīng)用程序
應(yīng)用程序通過系統(tǒng)調(diào)用來和內(nèi)核通信射窒,當(dāng)一個(gè)應(yīng)用程序發(fā)起系統(tǒng)調(diào)用時(shí),內(nèi)核便代其執(zhí)行脉顿。在這種情況下應(yīng)用程序通過系統(tǒng)調(diào)用在內(nèi)核空間運(yùn)行,而內(nèi)核被稱為運(yùn)行在進(jìn)程上下文中来吩。應(yīng)用程序通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核空間時(shí)應(yīng)用完成其工作的基本方式。
單內(nèi)核和微內(nèi)核
操作系統(tǒng)內(nèi)核可分為兩大陣營(yíng):?jiǎn)蝺?nèi)核和微內(nèi)核戚长。
單內(nèi)核
單內(nèi)核是一種較為簡(jiǎn)單的設(shè)計(jì)怠苔,通常以單個(gè)靜態(tài)二進(jìn)制文件存儲(chǔ)在磁盤中,整體上作為一個(gè)單獨(dú)的大過程柑司,所有的內(nèi)核服務(wù)都在這樣的一個(gè)大內(nèi)核地址空間上運(yùn)行帜羊。內(nèi)核服務(wù)都處于內(nèi)核態(tài),并身處同一內(nèi)核地址空間讼育,之間可以幾乎無(wú)性能損耗的相互通信。
單內(nèi)核具有簡(jiǎn)單和高性能等特點(diǎn)饥瓷。
微內(nèi)核
微內(nèi)核根據(jù)功能被分割成多個(gè)獨(dú)立的過程痹籍,每個(gè)過程都叫做一個(gè)服務(wù)器。所有的服務(wù)器都運(yùn)行在各自的地址空間上(大部分處于用戶空間)蹲缠,只有強(qiáng)烈請(qǐng)求特權(quán)服務(wù)的服務(wù)器才運(yùn)行在特權(quán)模式下。
微內(nèi)核服務(wù)器之間不能直接調(diào)用函數(shù)通信娜谊,而是通過消息傳遞通信斤讥。系統(tǒng)采用進(jìn)程間通信(IPC)機(jī)制,服務(wù)之間各自獨(dú)立派草,通過IPC互換消息铛楣,有效的避免了服務(wù)之間的失敗傳染。
IPC機(jī)制的開銷遠(yuǎn)高于函數(shù)調(diào)用蛉艾,而且在運(yùn)行時(shí)還會(huì)牽扯到內(nèi)核空間和用戶空間上下文切換衷敌,所以消息傳遞需要一些開銷拓瞪。所以在內(nèi)核的實(shí)際實(shí)現(xiàn)上大部分微內(nèi)核的操作系統(tǒng)也會(huì)讓大部分的服務(wù)放置與內(nèi)核中,這樣就可以直接調(diào)用函數(shù)面氓,消除消息傳遞的開銷蛆橡。
示例
windows NT和Mach(Mac OS X)都是典型的微內(nèi)核,不過在實(shí)際實(shí)現(xiàn)上呻拌,其所有服務(wù)都運(yùn)行在內(nèi)核空間睦焕。
linux是一個(gè)單內(nèi)核,不過linux汲取了微內(nèi)核的精華垃喊,并擁有模塊化設(shè)計(jì)、搶占式內(nèi)核初家、支持內(nèi)核線程以及動(dòng)態(tài)裝載內(nèi)核模塊等特性乌助。
linux內(nèi)核和UNIX內(nèi)核
linux內(nèi)核在設(shè)計(jì)時(shí)充分參考了已有的很多UNIX的內(nèi)核實(shí)現(xiàn),并且有一些創(chuàng)新方案炕泳。linux內(nèi)核和傳統(tǒng)的UNIX系統(tǒng)之間存在一些顯著的差異:
- linux支持動(dòng)態(tài)加載內(nèi)核模塊
- linux支持對(duì)稱多處理(SMP)機(jī)制
- linux內(nèi)核可以搶占
- linux內(nèi)核并不區(qū)分線程和一般進(jìn)程上祈,對(duì)于linux來說所有的進(jìn)程都一樣浙芙,只不過是其中的一些共享資源而已。
- linux提供具有設(shè)備類的面向?qū)ο蟮脑O(shè)備模型嗡呼、熱插拔事件,以及用戶空間的設(shè)備文件系統(tǒng)sysfs
- linux自由的態(tài)度南窗,以及樂于接受改變的心態(tài):任何改變都必須能通過簡(jiǎn)潔的設(shè)計(jì)及正確可靠的實(shí)現(xiàn)來解決現(xiàn)實(shí)中確實(shí)存在的問題郎楼。
引用
本文的寫作和學(xué)習(xí)中參考了以下資料
1.《Linux Kenel Development ~ Thrid Edition 》