操作系統
操作系統是指在整個系統中負責完成最基本功能和系統管理的那些部分。這些部分包括內核,設備驅動程序,啟動引導程序,命令行shell或者其他種類的用戶界面、基本的文件管理工具和系統功能等。
內核
用戶界面是操作系統的外在表象,內核才是操作系統的內在核心。系統其他部分必須依靠內核這部分軟件提供的服務,像管理硬件設備、分配系統資源等。內核有時被稱作是管理者或者操作系統核心。
通常一個內核由下面幾個程序共同組成:
- 由負責響應中斷的中斷服務程序
- 負責管理多個進程從而分享處理時間的調度程序
- 負責管理進程地址空間的內存管理程序
- 網絡、進程間通信
- 對於提高保護機制的現代系統來說,內核獨立於普通應用程序,它一般處於系統態,擁有受保護的內存空間和訪問硬件設備的所有權限,這種系統態和被保護起來的內存空間,統稱為內核空間。
- 相對的,應用程序在用戶空間執行。他們只看到允許他們使用的部分系統資源,並且只使用某些特定的系統功能,不能直接訪問硬件,也不能訪問內核划給別人的內存范圍,還有其他一些使用限制。
- 當內核允許的時候,系統以內核態進入內核空間秩序,而執行一個普通用戶程序時,系統將以用戶態進入用戶空間執行。
在系統中運行的應用程序通過系統調用來與內核通信。應用程序通常調用庫函數(比如C庫函數)再由庫函數通過系統調用界面,讓內核代其完成各種不同任務。
當一個應用程序執行一條系統調用,我們說內核正在代其執行。如果進一步解釋,在這種情況下,應用程序被稱為系通過系統調用在內核空間運行,而內核被稱為運行於進程上下文。這種交互關系-應用程序通過系統調用界面陷入內核---是應用程序完成其工作的基本行為方式。
內核還負責管理系統的硬件設備。當硬件設備想和系統通信的時候,他首先要發出一個異步的中斷信號去打斷處理的執行,繼而打斷內核的執行。中斷通常常對應着一個中斷號,內核通過中斷號查找相應的中斷服務程序,並調用這個程序響應和處理中斷。
舉個例子,當你敲擊鍵盤的時候,鍵盤控制器發送一個中斷信號告知系統,鍵盤緩沖區有數據到來。內核注意到這個中斷對應的中斷號,調用相應的中斷服務程序。該服務程序處理鍵盤數據然后通知鍵盤控制器可以繼續輸入數據。為了保證同步,內核可以停用中止--既可以停止所有的中斷,也可以有選擇地停止某個中斷號對應的中斷。許多操作系統的中斷服務程序,包括Linux的,都不在進程上下文中執行。他們在一個與所有進程都無關的、專門的中斷上下文中運行。之所以存在這一一個專門的執行環境,就是為了保證中斷服務程序能夠在第一時間響應和處理中斷請求,然后快速 地退出。
這些上下文代表着內核活動范圍,實際上我們可以將每個處理器在任何指定時間點上的活動必然概括為下列三者之一:
- 運行於用戶空間,執行用戶進程。
- 運行於內核空間,處理進程上下文,代表某個特定的進程執行。
- 運行於內核空間,處理中斷上下文,與任何進程無關,處理某個特定的中斷。
單內核和微內核設計比較
操作系統內核分為2大陣營:單內核和微內核
單內核
在1980年之前,所有的內核都設計出單內核。所謂單內核就是把它從整體作為一個單獨的大過程來實現,同時也運行在一個單獨的地址空間。因此,這樣的內核通常以單個靜態二進制文件的形式存放於磁盤中。所有的內核服務都再這樣的一個大內核地址空間運行。內核之間的通信是微不足道的,因為大家都運行在內核態,並身處同一地址空間;內核可以直接調用函數,這與用戶空間應用程序沒有什么區別。這種模式的支持者認為單模塊具有簡單和性能高的特點。大多數unix系統都設計為單模塊。
Linux是一個單內核,也就是說linux內核運行在單獨的內核地址空間。不過Linux汲取了微內核的精華,;其引以為豪的是模塊化設計,搶占式內核、支持內核線程以及動態裝載內核模塊的能力。
微內核
微內核並不作為一個單獨的大過程來實現,相反,微內核的功能被划分為很多個獨立的過程,每個過程叫做一個服務器。理想情況下,只有強烈請求特權服務的服務器才運行在特權模式下,其他服務器都運行運行在用戶空間。不過,所有的服務器都保持獨立並運行在各自的地址空間上。因此,就不能像單模塊內核那樣直接調用函數,而是通過消息傳遞處理內核模塊通信,系統采用了進車間通信(IPC)機制,因此,各個服務器之間通過IPC機制互通消息,互換“服務”。服務器的各自獨立有效地避免一個服務器的失效禍及另一個。同樣,模塊化的系統允許一個服務器為了另一個服務器的換出。
因為IPC機制的開銷多於函數調用,又因為會涉及內核空間與用戶空間上下文交換,因此,消息傳遞需要一定的周期,而單內核中簡單的函數調用沒有這些開銷。結果,所有實際應用基於微內核的系統系統都讓大部分或全部服務器位於內核,這樣,就可以直接調用函數,消除頻繁的上下文切換。
版本號解讀
2.6.26.1
- 第一位2是主版本號
- 第二位6是從版本號
- 第三位26是修訂版本號
- 第四位1,代表穩定版本號還是開發版本
第四位數字如果是偶數,那么內核就是穩定版,如果是奇數,那么它就是開發版本。