A. 內核是什麼,內核是是軟體嗎內核是演算法嗎
內核是操作系統最基本的部分。它是為眾多應用程序提供對計算機硬體的安全訪問的一部分軟體,這種訪問是有限的,並且內核決定一個程序在什麼時候對某部分硬體操作多長時間。直接對硬體操作是非常復雜的,所以內核通常提供一種硬體抽象的方法來完成這些操作。硬體抽象隱藏了復雜性,為應用軟體和硬體提供了一套簡潔,統一的介面,使程序設計更為簡單。
嚴格地說,內核並不是計算機系統中必要的組成部分。程序可以直接地被調入計算機中執行,這樣的設計說明了設計者不希望提供任何硬體抽象和操作系統的支持,它常見於早期計算機系統的設計中。最終,一些輔助性程序,例如程序載入器和調試器,被設計到機器核心當中,或者固化在只讀存儲器里。這些變化發生時,操作系統內核的概念就漸漸明晰起來了。
一個更重要的問題是,什麼人才要了解內核。或者說,對內核的了解程度,會怎樣影響一個人的工作,畢竟,它是復雜的。
B. linux內核物理內存管理有哪些常用演算法 lru slab
採用夥伴演算法分配內存時,每次至少分配一個頁面。但當請求分配的內存大小為幾十個位元組或幾百個位元組時應該如何處理?如何在一個頁面中分配小的內存區,小內存區的分配所產生的內碎片又如何解決?
Linux2.0採用的解決辦法是建立了13個空閑區鏈表,它們的大小從32位元組到132056位元組。從Linux2.2開始,MM的開發者採用了一種叫做slab的分配模式,該模式早在1994年就被開發出來,用於Sun Microsystem Solaris 2.4操作系統中。Slab的提出主要是基於以下考慮:
· 內核對內存區的分配取決於所存放數據的類型。例如,當給用戶態進程分配頁面時,內核調用get_free_page()函數,並用0填充這個頁面。 而給內核的數據結構分配頁面時,事情沒有這么簡單,例如,要對數據結構所在的內存進行初始化、在不用時要收回它們所佔用的內存。因此,Slab中引入了對象這個概念,所謂對象就是存放一組數據結構的內存區,其方法就是構造或析構函數,構造函數用於初始化數據結構所在的內存區,而析構函數收回相應的內存區。但為了便於理解,你也可以把對象直接看作內核的數據結構。為了避免重復初始化對象,Slab分配模式並不丟棄已分配的對象,而是釋放但把它們依然保留在內存中。當以後又要請求分配同一對象時,就可以從內存獲取而不用進行初始化,這是在Solaris 中引入Slab的基本思想。
實際上,Linux中對Slab分配模式有所改進,它對內存區的處理並不需要進行初始化或回收。出於效率的考慮,Linux並不調用對象的構造或析構函數,而是把指向這兩個函數的指針都置為空。Linux中引入Slab的主要目的是為了減少對夥伴演算法的調用次數。
· 實際上,內核經常反復使用某一內存區。例如,只要內核創建一個新的進程,就要為該進程相關的數據結構(task_struct、打開文件對象等)分配內存區。當進程結束時,收回這些內存區。因為進程的創建和撤銷非常頻繁,因此,Linux的早期版本把大量的時間花費在反復分配或回收這些內存區上。從Linux2.2開始,把那些頻繁使用的頁面保存在高速緩存中並重新使用。
· 可以根據對內存區的使用頻率來對它分類。對於預期頻繁使用的內存區,可以創建一組特定大小的專用緩沖區進行處理,以避免內碎片的產生。對於較少使用的內存區,可以創建一組通用緩沖區(如Linux2.0中所使用的2的冪次方)來處理,即使這種處理模式產生碎片,也對整個系統的性能影響不大。
· 硬體高速緩存的使用,又為盡量減少對夥伴演算法的調用提供了另一個理由,因為對夥伴演算法的每次調用都會「弄臟」硬體高速緩存,因此,這就增加了對內存的平均訪問次數。
Slab分配模式把對象分組放進緩沖區(盡管英文中使用了Cache這個詞,但實際上指的是內存中的區域,而不是指硬體高速緩存)。因為緩沖區的組織和管理與硬體高速緩存的命中率密切相關,因此,Slab緩沖區並非由各個對象直接構成,而是由一連串的「大塊(Slab)」構成,而每個大塊中則包含了若干個同種類型的對象,這些對象或已被分配,或空閑,如圖6.12所示。一般而言,對象分兩種,一種是大對象,一種是小對象。所謂小對象,是指在一個頁面中可以容納下好幾個對象的那種。例如,一個inode結構大約佔300多個位元組,因此,一個頁面中可以容納8個以上的inode結構,因此,inode結構就為小對象。Linux內核中把小於512位元組的對象叫做小對象。
C. 操作系統的內核技術是什麼
學院北京101407)
(版權歸原作者所有)
摘要
文章介紹了作者在過擊5年中在微內核技術上所做的工作.由於集成電路、計算機網路、分布式處理、多機並行處理、容錯等技術的迅速發展,面向單處理機,採用內核不可搶占技術的Unix操作系統已經很難適應硬體技術的發展.為了適應以上技術的發展,Unix操作系統的內核越做越大,越做越復雜.完全喪失了其初始設計目標:系統短小精悍,容易理解.卡內基梅隆大學在美國國防部、國家科學基金的資助下,於1986年推出了一個基於微內核結構的操作系統Math.口:隨後.斯坦福大學等研究機構紛紛發表了他們在這個領域所做的工作, 各個大公司紛紛推出了基於微內核結構的操作系統、D 微內核技術已成為新一代操作系統體系結構的研究熱點.
基於微內核結構的操作系統和傳統操作系統相}匕,具有以下特點:① 內核精巧.通常內核只由任務管理、虛存管理和進程間通信3個部分組成.傳統操作系統內核中的許多部分都被移出內核.採取伺服器方式實現;② 面向多處理機和分布式系統.基於微內核的操作系統,在內核中引入了多處理機調度和管理機制,並引入了細粒度並發機制——
線程,使得多個處理機可以在同一個任務中並行地執行;③ 基於客戶/伺服器體系結構.在微內核結構的操作系統中,任務間通信機制—— 消息機制是系統的基礎,操作系統的各種功能都以伺服器方式實現,向用戶提供服務.用戶對伺服器的請求是以消息傳遞的方式傳給伺服器的.
「八五」期間,耪們在國家「八五攻關項目的支持下,對操作系統微內核技術進行了探入研究,在微內核系統調度技術、存儲管理技術、計時模型、微內核系統擴展技術及微內核操作系統原型系統構造方面取得了一些研究成果.本文將介紹這些研究成果.
正文
1 微內核系統調度技術
與傳統的操作系統內核相比,微內核調度系統中最突出的特徵是增加了處理機和處理機集及線程的管理,並且向用戶提供了靈活的手段來控翩自己的程序在處理機上的運行.這{羊,微內核系統就能很好地支持多處理機體系結構.同時,線程為用戶提供了細粒度的並行處理機制,使得同一個用戶任務中的不同線程可以同時在多個處理機上運行.
與進程相比,線程中所帶的資源很少,因此,創建線程和撤消線程的開銷就比進程小.線程也稱為「輕進程.在系統調度中,線程的切換開銷也比進程步,但是不同任務中的線程切換會引起任務的切換,在這種情況下,線程和進程的調度開銷就變成一樣了.為了優化系統效率,減步由於線程切換而弓I起的任務切換,在調度演算法中加入了以下代碼:
IF (所選中的線程和當前運行的城程屬於同一十任務)
THEN 不做任務切換}
ELSE進行任務切換操作}
顯然,這種方法在某種情況下會對系統性能有所幫助,但是這種方法在很大程度上屬於一種「被動的,或者說是一種「碰運氣」的方法.另外,單純以線程為主的調度演算法對用戶任務有失公平性,以線程為主的調度演算法是完全參照傳統操作系統中的調度演算法設計而成的.當線程投入運行時,系統為它分配周定大小的時間片,系統中線程按時間片輪轉.這樣,就產生了公平性問題:如果一個任務中有兩個線程,那麼,從理論上講,它將比只用一個線程實現的任務多獲得近1倍的處理機時間.在傳統的進程調度系統中,一個用戶可以通過創建多個進程來獲得更多的處理機調度機會,但是,它是建立在增加了創建進程和進程間通訊的系統開銷代價的基礎上的相比之下,創建線程的開銷非常小,同一任務間的線程之閉通訊開銷也很小為了解決上述問題,我們提出並實現了一種將傳統的任務和新的線程調度機翩相結合的方法:以任務為單位分配時間片(這樣可以保證調度的公平性),在線程調度時,當一個線程不是由於任務時間片用完的原因而放棄處理機時,只要系統中沒有高優先順序線程,就從本任務中選取線程,從而使得由線程切換而引起的任務切換操作開銷達到最小.
從目前的發展來看,用戶任務的並行粒度越來越小,即用戶任務中的線程越來越多,而每個線程所執行的操作會越來越步.因此,使用線程+任務的方法可以有效地減少單純的以線程為主的系統調度所引起的系統開銷.
2 微內核虛擬存儲管理技術
微內核虛擬存儲管理系統弓『入了存儲對象(Memory Object)的概念,將物理內存看成外部存儲對象的(如磁碟)高速緩存(Cache),實現了虛擬存儲器寫時拷貝(Copy onWrite)技術,引入了lazy evaluation技術.定義了虛擬存儲器和硬體存儲管理機制的介面(Pmap),實現了與機器無關的虛擬存儲系統.
虛擬存儲器寫時拷貝演算法是微內核虛擬存儲管理系統的核心演算法.它的弓f入使得虛擬存儲器管理的效率大大提高了一步.但是,它的實現依賴於硬體存儲管理機制的頁面保護機制,對於一個具有寫時拷貝共享屬性的存儲區,其頁面保護被設置成防寫.多個用戶可以共享的方式對它進行讀操作,但是,當用戶試圖對這塊區域進行寫操作時,將產生防寫故障,頁面故障管理程序將為用戶進程復制物理頁面.從而達到寫時拷貝的目的.
在I386體系結構下,只有用戶態頁面允許防寫,在其他機器狀態下,硬體存取機制將繞過頁面保護機翩,直接對頁面進行寫操作.在這種狀態下,寫時拷貝演算法將失效.而在微內核體系結構中,可能有各種狀態下的伺服器,如在內核態下運行的伺服器.為了解決這個問題。我們引入了寫時拷貝和訪問時拷貝(Copy oil Reference)相結合的演算法.
即在用戶態上使用寫時拷貝演算法,在其他狀態下使用訪問時拷貝演算法來替換寫時拷貝演算法,以解決寫時拷周演算法失效的問題.訪問時拷貝演算法的實現依賴於頁面保護機制的映頁機制.這樣,在其他狀態下,在設置頁面保護時將防寫改成映頁即可.新的方法在效率上比寫時拷貝演算法低,但是比完全拷貝的方法高出許多,特別是與lazy evaluation技術相配合時
效率會更高.由於微內核提供的寫時拷貝演算法是對用戶透明的,即對於用戶編寫的任何狀態下的伺服器都將使用寫時拷貝演算法.因此,在I386體系結構下,在非用戶態上運行的用戶伺服器有可能出錯,新的演算法解決了這個問題.
3 微內核計時模型
在傳統操作系統中,為統計出每個進程的處理機時間使用量的單元.系統計時一般是放在處理機時鍾中斷服務程序中.系統
IF (當前盎程處於用戶態)
增加當前進程的用戶奮處理機時間使用量
在每個進程結構中都沒有統計進程使用處理機時間
般採用如下代碼段來進行用戶進程的時間統計.
ELSE
增加當前進程的系統態處理機時聞使用量
由於在傳統的操作系統中,操作系統提供的服務完全由操作系統內核來完成。用戶通過系統調用進入內核來取得服務.因此,採用上述方法能比較准確地統計出用戶所用的處理機時間.但是,這種計時方法是一種比較粗糙的計時方法.每次時鍾中斷時,它就將一個固定的時間片(時鍾中斷周期)加入披中斷的進程中,而不管該進程是否完全使用了這些處理機對向.由於這種方法實現起來非常簡單,系統開銷很小,幾乎所有的操作系繞都採用了這種方法.在新的操作系統中引入了細粒度的並行執行部件—— 線程。對於線程的計時也採用了和進程相同的方法.為了取得精確的處理機時同統計精度.一些新型操作系統弓『入了新的計時機制.如MACH 3.0中引^了基於時間戳的精確計時機制.在微內核體系結構下.傳統的操作系統功能是通過伺服器的方式來實現的.伺服器和用戶任務一樣,也作為一個進程運行.當用戶進程調用操作系統服務時,微內核通過消息將系統服務的參數傳遞給操作系統伺服器,由操作系統伺服器來完成用戶請求,並將結果通過消息傳遞給用戶進程.這樣,如果採用傳統的方法來進行進程的處理機時問統十。就會將操作系統為用戶提供服務所用的處理機時間記入伺服器中.而不是用戶進程中.
為了解決這個問題,我們引^了委託線程的概念,建立了新的用戶進程計時模型.在客戶/伺服器模型中,用戶通過消息請求伺服器的服務,伺服器接收用戶的消息完成用戶的請求,再通過消息將結果傳給用戶.在這種體系結構下,可看成用戶將自己的一部分工作委託給伺服器完成,伺服器是在為委託線程服務.當用戶線程向伺服器發出請求時,將用戶線程標識傳遞給伺服器,當伺服器中的某個線程處理這個請求時,將用戶線程標識記^伺服器線程結構中的委託線程域中.在系統時鍾中斷服務程序中增加為委託線程計時的代碼。就可將操作系統伺服器為用戶進程限務的時同計算到用戶進程中.
IF(當前線程結構中有委託線程)
IF(當前線程赴於用戶態)
增加委託線程的用戶態赴理機時間使用量
ELSE
增加委託線程的系統態處理機時間使用量
在多伺服器體系結構下,一個用戶請求往往需要多個伺服器的協同服務,如一個文件讀操作,需要文件伺服器的服務,如果文件伺服器發現數據存放在磁碟中,它就需要請求設備伺服器的眼務,設備伺服器實際上是在為用戶線程服務.因此,在多伺服器情況下,當一個伺服器向另一個伺服器發出請求時,必須將自己的委託線程標識號傳遞給目標伺服器.這樣,操作系統為一個線程提供所有服務所使用的處理機時間都將計算到用戶線程中擊.為了完成以上功能,必須對微內核的消息傳遞機制進行擴充,使用戶在請求服務時能將線程的標識傳遞給伺服器,伺服器在接收消息時能接收到委託線程標識.所有這些操作必須對用戶透明.微內核的消息傳遞機制由消息發送和消息接收兩部分組成.通過在這兩個原語中加入以下邏輯來實現委託線程標識的發送和接收.
SEND :
IF(當前線程結構中有委託線程標識)
將委託線程標識傳遞出去
ELSE
將當前線程的標識傳遞出擊
RECEIVE:
IF(當前線程是伺服器)
將委託線程號放凡伺服器線程結構
在發送原語中,可將委託線程標識從一個伺服器傳遞到另一個伺服器.在接收邏輯中,通過增加伺服器標識的判斷可以避免非伺服器線程之間的偶發通訊而導致的用戶線程的計時錯誤.
4 結論
微內核技術是當今操作系統發展的最新成果.在體系結構方面,它採用了面向對象技術來描述操作系統內核對象,提出並實現了基於客戶伺服器體系結構的操作系統.在演算法方面,提出了許多高教新穎的演算法,如線程及處理機調度演算法、寫時拷貝演算法、與硬體無關的存儲管理演算法以及精確計時演算法等等.在國產微內核操作系統COSIX2.0的研製過程中,通過對國外微內核技術的消化和研究,提出並實現了一些新的演算法和模型,改進了系統的性能,提高了系統的可靠性,做到了有所繼承,有所刨新目前,我們正在進行基於微內核的JAVA虛擬機,支持服務質量(Quality of Services)的調度系統微內核熱重啟(Hot Restart)技術的研究.以上內容是我們一部分研究工作的總結.