現代計算機系統是由一個或者多個處理器,主存,磁盤,打印機,鍵盤,鼠標顯示器,網絡接口以及各類其餘輸入,輸出設備組成的複雜系統,每位程序員不可能掌握全部系統實現的細節,而且管理優化這些部件是一件挑戰性極強的工做。因此,咱們須要爲計算機安裝一層軟件,成爲操做系統,任務就是用戶程序提供一個簡單清晰的計算機模型,並管理以上全部設備。程序員
定義也就有了:操做系統是一個用來協調、管理和控制計算機硬件和軟件資源的系統程序,它位於硬件和應用程序之間。(程序是運行在系統上的具備某種功能的軟件,好比說瀏覽器,音樂播放器等。)瀏覽器
早期的程序員將對應於程序和數據的已穿孔的紙帶(或卡片)裝入輸入機,而後啓動輸入機把程序和數據輸入計算機內存,接着經過控制檯開關啓動程序針對數據運行;計算完畢,打印機輸出計算結果;用戶取走結果並卸下紙帶(或卡片)後,才讓下一個用戶上機。服務器
手工操做方式有兩個特色:網絡
出現了批處理系統,它是加載在計算機上的一個系統軟件,在它的控制下,計算機可以自動地、成批地處理一個或多個用戶的做業(這做業包括程序、數據和命令)。數據結構
爲了解決上面手工階段的問題,因此產生了批處理系統,而批處理系統又分爲單道批處理和多道批處理。架構
系統對做業的處理是成批進行的,但內存中始終保持一道做業。該系統主要特徵以下
1)自動性:無需人工干預
2)順序性:磁帶上的各道做業順序進入內存,做業完成順序與其進入內存的順序,在正常狀況下應徹底相同
3)單道性:內存中只容許存在一道程序運行併發
多道程序設計技術容許多個程序同時進入內存,並在操做系統的控制下交替運行。內存中的程序共享系統中各中硬、軟件資源。當一道程序因I/O請求而暫停運行時,CPU便當即轉去運行另外一道程序。其主要特色以下:
1)多道:計算機內存中同時容許多道相互獨立的程序
2)宏觀並行:同時進入系統內存的多道程序都處於運行過程當中,宏觀上在並行運行
3)微觀串行:內存中多道程序流輪流佔有CPU,交替執行異步
多道批處理系統的優勢是資源的利用率高,系統吞吐量大,CPU和其餘資源都處於忙碌狀態。缺點是用戶響應時間較長。不提供人機交互能力,用戶既不瞭解本身程序的運行狀況,也不能控制計算機。分佈式
因爲CPU速度不斷提升和採用分時技術,一臺計算機可同時鏈接多個用戶終端,而每一個用戶可在本身的終端上聯機使用計算機,好象本身獨佔機器同樣。
分時技術:把處理機的運行時間分紅很短的時間片,按時間片輪流把處理機分配給各聯機做業使用。
若某個做業在分配給它的時間片內不能完成其計算,則該做業暫時中斷,把處理機讓給另外一做業使用,等待下一輪時再繼續其運行。因爲計算機速度很快,做業運行輪轉得很快,給每一個用戶的印象是,好象他獨佔了一臺計算機。而每一個用戶能夠經過本身的終端向系統發出各類操做控制命令,在充分的人機交互狀況下,完成做業的運行。模塊化
具備上述特徵的計算機系統稱爲分時系統,它容許多個用戶同時聯機使用計算機。
特色:
(1)多路性。若干個用戶同時使用一臺計算機。微觀上看是各用戶輪流使用計算機;宏觀上看是各用戶並行工做。
(2)交互性。用戶可根據系統對請求的響應結果,進一步向系統提出新的請求。這種能使用戶與系統進行人機對話的工做方式,明顯地有別於批處理系統,於是,分時系統又被稱爲交互式系統。
(3)獨立性。用戶之間能夠相互獨立操做,互不干擾。系統保證各用戶程序運行的完整性,不會發生相互混淆或破壞現象。
(4)及時性。系統可對用戶的輸入及時做出響應。分時系統性能的主要指標之一是響應時間,它是指:從終端發出命令到系統予以應答所需的時間。
分時系統的主要目標:對用戶響應的及時性,即不至於用戶等待每個命令的處理時間過長。
分時系統能夠同時接納數十個甚至上百個用戶,因爲內存空間有限,每每採用對換(又稱交換)方式的存儲方法。即將未「輪到」的做業放入磁盤,一旦「輪到」,再將其調入內存;而時間片用完後,又將做業存回磁盤(俗稱「滾進」、「滾出「法),使同一存儲區域輪流爲多個用戶服務。
多用戶分時系統是當今計算機操做系統中最廣泛使用的一類操做系統。
雖然多道批處理系統和分時系統能得到較使人滿意的資源利用率和系統響應時間,但卻不能知足實時控制與實時信息處理兩個應用領域的需求。因而就產生了實時系統,即系統可以及時響應隨機發生的外部事件,並在嚴格的時間範圍內完成對該事件的處理。
實時系統在一個特定的應用中常做爲一種控制設備來使用。
實時系統可分紅兩類:
(1)實時控制系統。當用于飛機飛行、導彈發射等的自動控制時,要求計算機能儘快處理測量系統測得的數據,及時地對飛機或導彈進行控制,或將有關信息經過顯示終端提供給決策人員。當用於軋鋼、石化等工業生產過程控制時,也要求計算機能及時處理由各種傳感器送來的數據,而後控制相應的執行機構。
(2)實時信息處理系統。當用於預約飛機票、查詢有關航班、航線、票價等事宜時,或當用於銀行系統、情報檢索系統時,都要求計算機能對終端設備發來的服務請求及時予以正確的回答。此類對響應及時性的要求稍弱於第一類。
實時操做系統的主要特色:
(1)及時響應。每個信息接收、分析處理和發送的過程必須在嚴格的時間限制內完成。
(2)高可靠性。需採起冗餘措施,雙機系統先後臺工做,也包括必要的保密措施等。
操做系統的發展大體經歷了無結構操做系統(第一代),模塊化的操做系統(第二代),分層式結構(第三代),這些稱爲傳統操做系統結構。而微內核操做系統是現代操做系統結構,他是在C/S(客戶端/服務器)這種架構方式上發展起來的。傳統操做系統的內容,你們只須要了解就能夠了。重點在微內核操做系統。
微內核操做系統每每採用的是C/S模式,它把操做系統分爲微內核和多個服務器。微內核主要用於(1)實現與硬件緊密相關的處理,(2)實現一些較基本的功能,(3)負責客戶和服務器之間的通訊。
因爲微內核結構的存在,那麼程序就運行在兩種不一樣的地方,內核態和用戶態,內核態與用戶態是操做系統的兩種運行級別,跟intel cpu沒有必然的聯繫。
特權級
對於任何一個操做系統來講,建立一個新的進程都屬於核心功能,由於它要作不少底層細緻的工做,消耗系統的物理資源,好比分配物理內存,從父進程拷貝相關信息,拷貝設置頁目錄頁表等,這些顯然不能隨便讓哪一個程序就能去作,因而就天然引發了特權級別的概念,顯然,最關鍵性的權力必須由高特權級別的程序來執行,這樣才能作到幾種管理,減小有限資源的訪問和使用衝突。特權級別顯然是很是有效的管理和控制程序的執行手段,所以在硬件對特權級別作了不少支持,就Intel的x86架構的CPU來講,一共由0~3四個特權級,0爲最高,3爲最低,硬件上在執行每條執行的時候都會對指令所具備的特權級作相應的檢查,相關概念有CPL,DPL和RPL,這裏不在多闡述,硬件已經提供了一套特權級使用的相關機制,軟件天然就是好好利用這個問題,這屬於操做系統要作的事情,對於Unix/Linux來講,只使用了0級特權和3級特權。也就是說在Unix和Linux中,一條工做在0級特權的指令具備CPU能提供的最高權力,而一條工做在3級特權的指令具備CPU提供的最低或者說最基本的權力。
根據上面說的特權級,來理解用戶態和內核態就比較好理解了,當程序運行在3級特權的時候就能夠稱之爲運行在用戶態,由於這是最低特權級,是普通的用戶進行運行的特權級,大部分用戶之間面對的程序都是運行在用戶態;反之,當程序運行在0級特權級上時,就能夠稱之爲是運行在內核態。雖然用戶態下和內核態下工做的程序有不少差距,可是更重要的差異就在於特權級的不一樣,即權力的不一樣。運行在用戶態下的程序不能直接訪問操做系統內核數據結構和程序。當咱們在系統中執行一個程序時,大部分時間是運行在用戶態下的,在其須要操做系統幫助完成某些它沒有權力和能力完成的工做時就會切換到內核態。
內核態:當一個任務(進程)執行系統調用而陷入內核代碼中執行時,咱們就稱進程處於內核運行態(或簡稱爲內核態)。其餘的屬於用戶態。用戶程序運行在用戶態,操做系統運行在內核態.(操做系統內核運行在內核態,而服務器運行在用戶態)。用戶態不能干擾內核態.因此CPU指令就有兩種,特權指令和非特權指令.不一樣的狀態對應不一樣的指令。特權指令:只能由操做系統內核部分使用,不容許用戶直接使用的指令。如,I/O指令、置終端屏蔽指令、清內存、建存儲保護、設置時鐘指令(這幾種記好,屬於內核態)。 非特權指令:全部程序都可直接使用。
因此:
系統態(核心態、特態、管態):執行所有指令。
用戶態(常態、目態):執行非特權指令。
這3種方式是系統在運行時由用戶態轉到內核態的最主要方式,其中系統調用能夠認爲是用戶進程主動發起的,異常和外圍設備中斷則是被動的。
從觸發方式上看,能夠認爲存在前述3種不一樣的類型,可是從最終實際完成由用戶態到內核態的切換操做上來講,涉及的關鍵步驟是徹底一致的,沒有任何區別,都至關於執行了一箇中斷響應的過程,由於系統調用實際上最終是中斷機制實現的,而異常和中斷的處理機制基本上也是一致的,關於它們的具體區別這裏再也不贅述。關於中斷處理機制的細節和步驟這裏也不作過多分析,涉及到由用戶態切換到內核態的步驟主要包括:
前文已經提到,內核的功能:
(1)進程(線程)管理 (進程或者線程的調度)
(2)低級存儲器管理 (用戶程序邏輯空間到內存空間的物理地址的變換)
(3)中斷和陷入管理 (中斷和陷入)
具體的:
(1) I/O指令、置終端屏蔽指令、清內存、建存儲保護、設置時鐘指令。
(2) 中斷、異常、陷入,好比缺頁中斷等
(3)進程(線程)管理
(4)系統調用,好比調用了設備驅動程序
(5)用戶內存地址的轉換(邏輯---> 物理映射)
關於並行與併發說有不少,這裏列舉一些常見的說法:
簡單理解就是:
併發是指一個處理器同時處理多個任務。
並行是指多個處理器或者是多核的處理器同時處理多個不一樣的任務。
併發是邏輯上的同時發生(simultaneous),而並行是物理上的同時發生。
來個比喻:併發是一我的同時吃三個饅頭,而並行是三我的同時吃三個饅頭。
同步和異步一般用來形容一次方法調用。