第二章 核心導言 Unix作業系統設計 讀書筆記

2021-09-26 15:13:34 字數 3682 閱讀 5637

核心資料結構---思想層面

系統管理

本章小結

核心框圖,給出各種模組及他們之間的相互關係,其中檔案系統和程序管理是最核心部分:

翻譯成系統呼叫介面有點low,應該是系統呼叫介面叭,為什麼將儲存管理放置到程序管理當中呢,應該切分出來叭,畢竟儲存管理、記憶體管理、快取管理那塊重要程度也是挺高的,既然挺重要為什麼不抽離出來呢!

什麼是所謂的單核心、微核心呢?

見知識補充-微核心與單核心-筆記

乙個檔案的內部表示由乙個索引節點(inode)給出,inode:index node,每個檔案都有乙個索引結點,但是它可以有幾個名字,且這幾個名字都對映到索引節點上,每個名字稱為乙個聯結。

索引結點儲存在檔案系統中,但是當操縱檔案時,核心把它們讀到記憶體索引節點表中。

核心還包含另外兩個資料結構,檔案表和使用者檔案描述符表。檔案表是乙個全程核心結構,但是使用者檔案描述符表對每個程序分配乙個。也就是說和檔案系統有關的有三個表:檔案表、使用者檔案描述符表、索引結點表,當乙個程序開啟或建立乙個檔案時,核心在每個表中都相應於該檔案的索引節點分配乙個表項。

檔案表儲存檔案中的位元組偏移,使用者檔案描述符表標識著乙個程序的所有開啟檔案。

核心在邏輯上只涉及檔案系統,不涉及磁碟,每個檔案系統都當作由乙個邏輯裝置號標識的邏輯裝置。

乙個檔案系統由乙個邏輯塊序列組成,每個塊都包含512、1024、2048個位元組或512個位元組的任意倍數。下文都是以來講解的。

乙個檔案系統具有如下資料結構:

引導塊:可以包含引導作業系統的引導**,雖然為了引導系統只需要乙個**塊,但每個檔案系統都有乙個引導塊,當然可能是空的。

超級塊:描述了檔案系統的狀態—它有多大,它能儲存多少檔案,在檔案系統的何處可找到空閒空間,以及其他資訊。

索引節點表:在執行了系統呼叫mount之後,該檔案系統的目錄結構就可以從這個根索引結點開始訪問了。

資料塊:包含檔案資料與管理資料

用實際的術語來說,unix系統上的程序是被系統呼叫fork所建立的實體。除了0程序以外,每個程序都是被另乙個程序執行系統呼叫fork時建立的。0程序是系統引導後手動建立的,在它建立了乙個子程序1後,0程序就變成了對換程序。1程序被稱為init程序,是系統中其他每個程序的祖先,並且享有同它們之間的特殊關係。

可執行檔案由以下幾部分組成:

描述檔案屬性的一組「頭標」

程式正文

資料的機器語言表示,它給出程式開始執行時的初值;乙個空間指示,它指出核心應該為被稱為bss的未初始化資料分配多大的空間;

其他段,諸如符號表資訊;

一般都會有:**段(程式正文)、資料段(bss段)、堆疊段

因為unix系統中的乙個程序能在兩種態—和心態和使用者態下執行,所以unix系統中核心棧與使用者棧是分開的。

系統呼叫的過程:每個系統呼叫都在系統呼叫庫中有乙個入口點,系統呼叫庫按組合語言編碼幷包含乙個特殊的trap指令,當該指令被執行時,它引起乙個中斷,從而導致硬體轉換到核心態。

執行核心態**時,使用核心棧。

後面幾章討論的程序表中的字段是:

狀態字段

識別符號—指出擁有該程序的使用者

當乙個程序被掛起時的事件描述符集合

u區包含的是用來描述程序的資訊,這些資訊僅當程序正在執行時才需要被訪問,重要的字段是:

指向當前正在執行的程序的程序表項的指標;

當前系統呼叫的引數,返回值以及錯誤碼

所有的開啟檔案的檔案描述符

內部io引數

當前目錄和當前根

程序以及檔案大小的限度

u區在linux核心中還存在嘛?

當執行乙個程序時,系統被說成在該程序的上下文中執行,當核心決定它應該執行另乙個程序時,它做乙個上下文切換,以使系統在另乙個程序的上下文中執行。

從使用者態到核心態的轉變並不涉及到上下文切換,上下文並沒有切換,僅僅換了乙個狀態;

中斷產生時,從使用者態切換到核心態,並且保留足夠的上下文資訊,以便後續恢復,然後再核心態下對中斷進行服務,核心並不產生或排程乙個特殊程序來處理中斷。

使用者態-執行

核心態-執行

就緒狀態

程序正在睡眠

核心少不了cli,sti,為了保證一致性叭!!!

在核心態下執行的程序不能被其他程序所搶占,因此核心有時被稱為不可搶先的,所以核心能保證它的資料結構一致性,從而解決了互斥問題,不能搶占的方式包含:不允許排程、關掉中斷!

這裡需要指出linux和unix的乙個區別,linux2.6及更高版本的核心是可以被搶占的,unix的核心不能被搶占;

什麼叫核心態不能搶占呢?

但是如果關掉中斷的話,可能導致中斷的服務推遲,或者可能會損害系統吞吐量,為此,改為當進入**臨界區時,核心把處理機執行級提高,以禁止中斷!,事實上,linux0.11中直接關掉了中斷

乙個中斷處理程式不能去睡眠,因為如果中斷處理程式去睡眠,就意味著將被中斷的程序投入睡眠;

睡眠程序不耗費cpu資源,但是進行上下文切換的過程會影響cpu利用,核心並不是經常去檢視乙個程序是否仍處於睡眠狀態,而是等待事件的發生,那時把程序喚醒。

下圖所示的**片段頻繁出現在linux核心程式中:

很關鍵的一點是不要使用:

if

(條件為真)

sleep

(事件:條件變為假)

置條件為真

而應該使用

while

(條件為真)

sleep

(事件:條件變為假)

置條件為真

有了上面基礎再去看linux核心原始碼就會感覺簡單很多!!!

大多數核心資料結構都是佔據固定長度的表,而不是動態地分配空間,這一方法的優點是核心**簡單高效。

一般認為核心演算法的簡單性比擠出記憶體中每乙個僅有的位元組的必要性更重要。典型地,演算法使用簡單的迴圈,以尋找表中的空閒表項,這是乙個較易於理解的方法,而且有時比複雜的分配方案更為有效。

管理程序和普通程序類似,只是管理程序的許可權稍微大了一點,但是核心並不識別乙個分立的管理程序。

主要描述了檔案系統和程序系統;

其中檔案系統控制使用者檔案中資料的儲存與檢索,每個檔案系統都有乙個用來描述檔案系統的結構和內容的超級塊,並且檔案的索引都是通過inode來完成的。inode:index node。

核心態不能被搶占意味著:核心態下的程序將連續執行,直至它進入睡眠狀態或直至它返回到使用者態下執行為止,維護資料的一致性是可以的,但是核心不可搶占是十分影響實時性的;

核心態通過實施不可搶占策略以及通過在執行**臨界區時封鎖中斷來維護它的資料結構的一致性。

還是需要去查資料,去了解unix和linux的區別,從本書的描述和linus的**中也能看出一些區別,不過查資料得到知識相對來講能讓看**的過程更加明確;

第二章 作業系統

考試題型分析 選擇題 考試時間 上午試題型別 選擇題分值 6 8分 分值佔比 舉例 包餃子。前驅圖表示出了有些任務是有先後順序的,有些任務是可以並行操作的,箭頭表示約束。首次適應法 最佳適應法 最差適應法 迴圈首次適應法 邏輯位址與實體地址轉換 那麼如何根據邏輯位址求實體地址呢?我們得首先知道那一部...

作業系統 第二章 作業系統基礎操作

計算機體系結構概述 計算機記憶體和硬碟布局 開機順序 背景中斷 異常和系統呼叫相比較 中斷和異常處理機制 系統呼叫概念 系統呼叫的實現 程式呼叫與系統呼叫的不同之處開銷 2 disk 存放os 3 bios 存放i o處理系統 4 bios 載入os到記憶體中。5 post 加電自檢 尋找顯示卡和執...

第二章 作業系統歷史

標籤 空格分隔 作業系統之哲學原理 作業系統的演變就是我們對計算機硬體進行粉飾的過程 所謂狀態機作業系統實際上算不上是我們現在通常定義的作業系統,而是一種簡單的狀態轉換程式 根據特定的輸入和現在的特定狀態進行轉換 驅動這一階段作業系統的動力是個人英雄主義。這個階段沒有作業系統,硬要說有的話,就是人。...