1. 程式人生 > >【內核】——簡介

【內核】——簡介

文件的 保存 ash 正文 emp 內存 指針 心態 稱多

1、系統概貌

UNICS——>UNIX——>增加管道功能——>C重寫UNIX

v.0     v.1      v.2      v.5

1970                  1973

2、什麽是內核?

系統調用(system call):是內核函數呈現給用戶的接口,為應用程序的運行創建良好的操作系統環境。

內核(kernel):系統調用的集合及實現系統調用的內部算法就形成了操作系統的核心,簡稱內核。

3、用戶態和核心態,中斷

技術分享圖片

如上圖,內核獨立於普通的應用程序,他一般處於系統態,擁有受保護的內存空間和訪問硬件設備的所有權限。這種系統態和被保護起來的內存空間,統稱為內核空間(相對的是用戶空間)。

當應用程序執行一條系統調用時,應用程序被稱為通過系統調用在內核空間執行,而內核被稱為運行於進程上下文中

另外內核還要負責管理系統的硬件設備(I/O設備管理)。當I/O設備為準備就緒時,硬件設備先發出一個異步的中斷信號去打斷CPU的執行,繼而打斷內核的執行。中斷通常對應著一個中斷號,內核通過這個中斷號查找相應的中斷服務程序,並調用這個程序響應和處理中斷。許多操作系統的中斷服務程序,包括Linux的,都不在進程上下文中執行。他們在一個與所有進程都無關的、專門的中斷上下午中運行。

4、什麽是上下文?

上下文代表著內核(應用程序)的活動範圍。

進程上下文:可以看作是用戶進程傳遞給內核的這些參數以及內核要保存的那一整套的變量和寄存器值和當時的環境等。

可以分為三個部分:用戶級上下文、寄存器上下文以及系統級上下文。

(1)用戶級上下文: 正文、數據、用戶堆棧以及共享存儲區;
(2)寄存器上下文: 通用寄存器、程序寄存器(IP)、處理器狀態寄存器(EFLAGS)、棧指針(ESP);
(3)系統級上下文: 進程控制塊task_struct、內存管理信息(mm_struct、vm_area_struct、pgd、pte)、內核棧。

中斷上下文:可以看作就是硬件傳遞過來的這些參數和內核需要保存的一些其他環境(主要是當前被打斷執行的進程環境)。中斷時,內核不代表任何進程運行,它一般只訪問系統空間,而不會訪問進程空間,內核在中斷上下文中執行時一般不會阻塞。

實際上,我們可以將每個CPU在任何指定時間點上的活動必然概括為下列三者之一:

  運行於用戶空間,執行用戶進程。

  運行於內核空間,執行進程上下文,代表某個特定的進程執行。

  運行於內核空間,執行中斷上下文,與任何進程無關,處理某個特定的中斷。

5、單內核和微內核

單內核:

  就是把內核從整體上作為一個單獨的大過程來實現,同時也運行在一個單獨的地址空間上。通常,內核以單個靜態二進制文件的形式存放於磁盤中,內核之間的通信是微不足道的,因為大家都運行在內核態。

    優點:具有性能高,簡單的特點。

微內核:

  不作為一個單獨的大過程來實現,微內核的功能被劃分為多個獨立的過程,每個過程叫做一個服務器。所有的服務器都保存獨立並運行在各自的地址空間上,因此需要通過消息傳遞(進程間通信(IPC)機制)處理微內核的通信,即各個服務器之間通過IPC機制互通消息,互換“服務”。

    優點:服務器的各自獨立有效畢渺了一個服務器的失效禍及另一個。  

    缺點:IPC機制的開銷多於函數調用,又因為會涉及到內核空間與用戶空間的上下文切換,因此,消息傳遞需要一定的周期。

Linux是一個單內核,也就是說Linux內核單獨運行在獨立的內核空間地址上。不過Linux汲取了微內核的精華:模塊化設計、搶占式內核、支持內核線程以及動態裝載模塊的能力。

6、Linux內核與Unix系統之間存在的差異:

  6.1、Linux支持動態加載內核模塊。盡管Linux是單內核,可是允許在需要的時候動態地卸載和加載部分內核代碼。

  6.2、Linux支持對稱多處理(SMP)機制。傳統的Unix並不支持這種機制。

  6.3、Linux內核是可以搶占(preemptive)。大多數Unix內核不支持搶占(這點很重要,關於Unix高速緩沖的算法都是表面不支持搶占的)

  6.4、Linux對線程支持的實現比較有意思:內核並不區分線程和其他的一般進程。對於內核來說,所有進程都是一樣——只不過是其中的一些共享資源而已。

  6.5、Linux聽具有設備類的面向對象的設備模型、熱拔插事件,以及用戶空間的設備文件系統(sysfs)

    

【內核】——簡介