作業系統教程 第二章 處理器管理 筆記精華

2021-10-09 16:52:34 字數 4318 閱讀 9207

2.3 程序及其實現

2.4 執行緒及其實現

前言:課上的講解方式不是照本宣科,而是有選擇性的進行深入講解。我這裡會把課上講過的東西做乙個總結,同時會列出需要去補習的內容

注:這個80386晶元是接在cpu乙個引腳上的,而io,外部裝置,時鐘金振等裝置,是接在80386晶元上的,也就是說,對80386晶元進行程式設計,就能設定計算機的時鐘頻率,從而更改計算機的中斷時間間隔(中斷時間間隔太短,有時候不是好事,這在後面2.2中斷的時候再講)

保護模式,就是我們使用者一般情況下用電腦時,cpu處於的模式

保護模式使用的是cs:eip,eip(enhance ip) 提供32位,此時的cs就不再提供移位操作

之所以叫保護模式,是因為保護模式可以保證兩個程序不會取到相互的執行緒或者資訊

兩個程序各自執行,互不干擾
每個程序開啟的時候,系統都會給每個程序產生乙個虛擬的作業系統,這個就是核心態,核心態的許可權高,為0 0

​ 使用者態:

使用者態許可權比核心態要低,為1 1,

​ 核心態,使用者態轉換:

核心態因為許可權高,所以在轉移到許可權低使用者態的時候沒有限制。

但是,使用者態轉移到核心態,只有一種方式,那就是中斷

​ 程序有了核心態後的作用:

兩個程序可能要發生資料交換(就是複製、貼上),這個時候核心態就

起作用了

由於後面講七態模型的時候還要用到之前那個電影的例子,所以我先把電影的例子放過來:

虛擬記憶體: 當記憶體不夠,想要開闢虛擬記憶體,還能從什麼地方獲取空間?當然是外存?。通過特定演算法,將外存,變成虛擬記憶體,這個過程是透明的(也就是說,使用者在使用過程中,完全無法察覺)

當記憶體快爆了的時候,將就緒態和等待態 的部分或者全部程序 全部放進虛擬記憶體,這就稱為掛起,但是嚴格來說,這些掛起的程式還是缺少記憶體,所以他們不能直接進入執行態

掛起: 在解釋虛擬記憶體的時候,上面標紅的地方已經說過了,當記憶體快爆了的時候,將就緒態和等待態 的部分或者全部程序 全部放進虛擬記憶體,這就稱為掛起,但是嚴格來說,這些掛起的程式還是缺少記憶體,所以他們不能直接進入執行態。

掛起,是用來保證記憶體快滿的時候,防止計算機宕機或者卡頓的應急手段。這也是為什麼當計算機的外存快慢的時候,有事計算機會執行的相當的慢

多插一句: 在手機上,使用掛起是十分謹慎的(一般不使用),手機的外存不抗磨損。掛起操作頻繁的讀取寫入,可能會對手機外存造成傷害。現代計算機中,很多都不再使用hdd,轉而使用ssd,這也面臨著和手機一樣的問題。所以,虛擬記憶體中掛起這一操作日後還會不會有,還是乙個未知數。

程序映像

用過parallels desktop的朋友應該了解,這個程式有乙個功能,就是」快照「,拍快照,就是將整個虛擬機器的作業系統當時的所有配置,程序,資料等儲存下來,便於日後的恢復。程序的映像,其實就是這個程序的所有配置、資料等現場情況。

同時,課上還提了一下睡眠休眠的概念:

程序映像包含以下幾個方面:(不全說了)

程序控制塊:

就是之前提到的pcb(process control block),這是作業系統識別程序的唯一表示,課上給我們看了linux的核心,pcb是乙個超大的結構體。

程序程式塊:

是被程序執行的乙個程式,規定程序一次執行所能完成的功能。

程序核心棧:

這裡特地將核心棧和使用者棧分開來說,是因為程序的使用者態和核心態必須通過兩個棧來實現(具體什麼原因,目前我還不知道)

程序資料塊:

每個程序**乙個,程序在核心態工作的時候使用,用來儲存中斷/異常現場,儲存函式呼叫的引數、區域性變數和返回位址等。

程序控制塊

書上這部分順序比較亂…程序控制塊之前已經提了很多遍了,就是pcb。其具體的定義和作用,這裡就不再贅述,這裡主要來介紹一下,這個 超大的結構體裡,都有一些什麼東東

標識資訊:

標識資訊,用來唯一的標識乙個程序,系統中所有的程序,都被賦予乙個唯一的,內部使用的數值型程序號(通常是0-32767的正整數,在源**裡是pid),作業系統核心通過標識號來應用pcb

現場資訊:

現場資訊用於保留程序在執行時,存放於處理器中的各種資訊(暫存器內容,棧指標等),程序在讓出處理器是,必須將現場資訊儲存到它的pcb中

控制資訊:

程序佇列及管理

之前在講到程序七態的時候,提到系統在選擇就緒態的程序到執行態時,依靠特定的演算法,而這些待挑選的就緒態的程序,就儲存在程序佇列裡。而程序佇列的實現,就是資料結構中的佇列(線性表,鍊錶…)

linux的程序佇列,使用了乙個512大小的陣列,除了0號位以外,其餘位置都存了pcb。(也就是說,linux最多能開511個程序?)

這裡課上到沒有提太多,就是提到了兩個小問題

程序切換,一定有模式切換:

程序切換的時候,前面乙個程序需要進入核心態,而從使用者態到核心態就必須中斷,這就涉及到了模式的切換(其實現在想想,當初在課上回答問題的時候,自己蠻蠢的…程序切換的時候,就是把自己的cpu資源讓給其他程序,那麼自己不就肯定是處於就緒態,或者等待態了嗎…)

模式切換,不意味著程序切換

比如乙個程序的cpu時間片到了,就不得不將自己的cpu資源讓給其他程序,自己處於就緒態(其實過幾毫秒,這個程序可能就會重獲cpu資源,繼續執行,只是這個過程太短,使用者完全無法發覺)

os引入多程序,是為了使多個程序併發執行,以改善資源利用率,提高系統效率。再在程序之上引入執行緒,是為了減少程式併發執行時所付出的時空開銷。

這樣以來,程序就成了」資源分配的單位「,執行緒就成了」資源排程的單位「

下圖是多執行緒結構程序:

執行緒有以下幾個優點:

快速執行緒切換

通訊易實現:

以下程式的程序、執行緒的**:

減少管理開銷

併發程度高:(充分發揮多核、多處理器的效能)

這裡要多插一句:

linux裡,是沒有執行緒這個概念的,只有程序,但為了實現執行緒,linux使用了乙個叫輕量級程序的東西(其實和執行緒差不多)

核心級執行緒

使用者級執行緒

混合式執行緒(核心級,使用者級混合)

第二章 作業系統

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

作業系統 第二章 3 程序管理

將系統中一次只能被乙個程序使用的資源稱為臨界資源 為了禁止兩個程序同時出現在臨界區,應滿足下列準則 也即 孔融讓梨 的思想 為什麼會出現訊號量機制呢?回顧之前的軟硬體互斥方法,軟體方面上鎖和加鎖操作無法一氣和成,硬體操作不法實現 讓全等待 訊號量機制就是為了更高效的實現程序的同步以及互斥 int s...

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

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