操作系統知識點回顧—內存和中斷

一、虛擬內存

(一)概念

1.定義:

具有請求調入功能置換功能,能從邏輯上對內存容量加以擴充得一種存儲器系統。其邏輯容量由內存之和和外存之和決定。

2.與傳統存儲器比較虛擬存儲器有以下三個主要特徵

  • 多次性,是指無需在作業運行時一次性地全部裝入內存,而是允許被分成多次調入內存運行。
  • 對換性,是指無需在作業運行時一直常駐內存,而是允許在作業的運行過程中,進行換進和換出。
  • 虛擬性,是指從邏輯上擴充內存的容量,使用戶所看到的內存容量,遠大於實際的內存容量。

3.虛擬內存的實現有以下兩種方式

  • 請求分頁存儲管理。
  • 請求分段存儲管理。

4.分頁存儲

分頁系統的核心在於,將虛擬內存空間和物理內存空間皆劃分爲大小相同的頁面,如 4KB、8KB 或 16KB 等,並以頁面作爲內存空間的最小分配單位,一個程序的一個頁面可以存放在任意一個物理頁面裏。

爲了便於在內存中找到進程的每個頁面所對應的物理塊,系統爲每個進程建立一張頁表,記錄頁面在內存中對應的物理塊號,頁表一般存放在內存中。在配置了頁表後,進程執行時,通過查找該表,即可找到每頁在內存中的物理塊號。可見頁表作用是實現從頁號到物理塊號的地址映射,這種是頁存儲管理方式。如下圖所示:
在這裏插入圖片描述

  • 解決空間浪費碎片化問題
  • 解決程序大小受限問題

5.分段存儲

將用戶程序地址空間分成若干個大小不等的段,每段可以定義一組相對完整的邏輯信息。存儲分配時,以段爲單位,段與段在內存中可以不相鄰接,也實現了離散分配,這種是段存儲管理方式。如下圖所示:

在這裏插入圖片描述

6.段頁存儲

段頁式管理就是將程序分爲多個邏輯段,在每個段裏面又進行分頁,即將分段和分頁組合起來使用。這樣做的目的就是想同時獲得分段和分頁的好處,但又避免了單獨分段或單獨分頁的缺陷。如果我們將每個段看做一個單獨的程序,則邏輯分段就相當於同時加載多個程序。

作業的地址空間首先被分成若干個邏輯分段,每段都有自己的段號,然後再將每段分成若干個大小相等的頁。對於主存空間也分成大小相等的頁,主存的分配以頁爲單位,這種是段頁存儲管理方式。如下圖所示:

在這裏插入圖片描述

7.內部碎片與外部碎片

  • 內部碎片是已經被分配出去的的內存空間大於請求所需的內存空間

  • 外部碎片是指還沒有分配出去,但是由於大小太小而無法分配給申請空間的新進程的內存空間空閒塊

頁式虛擬存儲系統存在內部碎片;段式虛擬存儲系統,存在外部碎片

爲了有效的利用內存,使內存產生更少的碎片,要對內存分頁,內存以頁爲單位來使用,最後一頁往往裝不滿,於是形成了內部碎片。

爲了共享要分段,在段的換入換出時形成外部碎片,比如 5K 的段換出後,有一個 4k 的段進來放到原來 5k 的地方,於是形成 1k 的外部碎片。


二、頁面置換算法

操作系統將內存按照頁面進行管理,在需要的時候才把進程相應的部分調入內存。當產生缺頁中斷時,需要選擇一個頁面寫入。如果要換出的頁面在內存中被修改過,變成了 “髒” 頁面,那就需要先寫會到磁盤。頁面置換算法,就是要選出最合適的一個頁面,使得置換的效率最高。頁面置換算法有很多,簡單介紹幾個,重點介紹比較重要的 LRU 及其實現算法。

1.最優頁面置換算法

最理想的狀態下,我們給頁面做個標記,挑選一個最遠纔會被再次用到的頁面調出。當然,這樣的算法不可能實現,因爲不確定一個頁面在何時會被用到。

2.先進先出頁面置換算法(FIFO)及其改進

這種算法的思想和隊列是一樣的,該算法總是淘汰最先進入內存的頁面,即選擇在內存中駐留時間最久的頁面予淘汰。實現:把一個進程已調入內存的頁面按先後次序鏈接成一個隊列,並且設置一個指針總是指向最老的頁面。缺點:對於有些經常被訪問的頁面如含有全局變量、常用函數、例程等的頁面,不能保證這些不被淘汰。

3.最近最少使用頁面置換算法 LRU(Least Recently Used)

根據頁面調入內存後的使用情況做出決策。LRU 置換算法是選擇最近最久未使用的頁面進行淘汰。

  1. 爲每個在內存中的頁面配置一個移位寄存器。(P165)定時信號將每隔一段時間將寄存器右移一位。最小數值的寄存器對應頁面就是最久未使用頁面

  2. 利用一個特殊的棧保存當前使用的各個頁面的頁面號。每當進程訪問某頁面時,便將該頁面的頁面號從棧中移出,將它壓入棧頂。因此,棧頂永遠是最新被訪問的頁面號,棧底是最近最久未被訪問的頁面號。


三、中斷

1.定義:所謂的中斷就是在計算機執行程序的過程中,由於出現了某些特殊事情,使得 CPU 暫停對程序的執行,轉而去執行處理這一事件的程序。等這些特殊事情處理完之後再回去執行之前的程序。中斷一般分爲三類:

  • 計算機硬件異常或故障引起的中斷,稱爲內部異常中斷

  • 程序中執行了引起中斷的指令而造成的中斷,稱爲軟中斷(這也是和我們將要說明的系統調用相關的中斷);

  • 外部設備請求引起的中斷,稱爲外部中斷

簡單來說,對中斷的理解就是對一些特殊事情的處理。


與中斷緊密相連的一個概念就是中斷處理程序了。當中斷髮生的時候,系統需要去對中斷進行處理,對這些中斷的處理是由操作系統內核中的特定函數進行的,這些處理中斷的特定的函數就是我們所說的中斷處理程序了。

另一個與中斷緊密相連的概念就是中斷的優先級。中斷的優先級說明的是當一箇中斷正在被處理的時候,處理器能接受的中斷的級別。中斷的優先級也表明了中斷需要被處理的緊急程度。每個中斷都有一個對應的優先級,當處理器在處理某一中斷的時候,只有比這個中斷優先級高的中斷可以被處理器接受並且被處理。優先級比這個當前正在被處理的中斷優先級要低的中斷將會被忽略。

典型的中斷優先級如下所示:

機器錯誤 > 時鐘 > 磁盤 > 網絡設備 > 終端 > 軟件中斷


四、系統調用

在講系統調用之前,先說下進程的執行在系統上的兩個級別:用戶級和核心級,也稱爲用戶態和系統態 (user mode and kernel mode)核心態下的進程能夠存取內核和用戶地址,某些機器指令是特權指令,在用戶態下執行特權指令會引起錯誤

用戶空間就是用戶進程所在的內存區域,相對的,系統空間就是操作系統佔據的內存區域。用戶進程和系統進程的所有數據都在內存中。處於用戶態的程序只能訪問用戶空間而處於內核態的程序可以訪問用戶空間和內核空間。

1.用戶態切換到內核態的方式如下:

  • 系統調用:程序的執行一般是在用戶態下執行的,但當程序需要使用操作系統提供的服務時,比如說**打開某一設備、創建文件、讀寫文件(這些均屬於系統調用)**等,就需要向操作系統發出調用服務的請求,這就是系統調用。

  • 異常:當 CPU 在執行運行在用戶態下的程序時,發生了某些事先不可知的異常,這時會觸發由當前運行進程切換到處理此異常的內核相關程序中,也就轉到了內核態,比如缺頁異常

  • 外圍設備的中斷:當外圍設備完成用戶請求的操作後,會向 CPU 發出相應的中斷信號,這時 CPU 會暫停執行下一條即將要執行的指令轉而去執行與中斷信號對應的處理程序,如果先前執行的指令是用戶態下的程序,那麼這個轉換的過程自然也就發生了由用戶態到內核態的切換。比如硬盤讀寫操作完成,系統會切換到硬盤讀寫的中斷處理程序中執行後續操作等。


補充:陷阱、中斷、異常

  • 陷阱
    陷阱指令可以使執行流程從用戶態陷入內核(這也就是爲什麼叫做陷阱,而不是捕獵的陷阱)並把控制權轉移給操作系統,使得用戶程序可以調用內核函數和使用硬件從而獲得操作系統所提供的服務,比如用視頻軟件放一個電影,視頻軟件就發出陷阱使用顯示器和聲卡從而訪問硬件。

  • 中斷
    中斷是由外部事件導致並且它發生的時間是不可預測的,這一點和陷阱不同。外部事件主要是指時鐘中斷,硬件中斷等。CPU 決定切換到另一個進程運行,就會產生一個時鐘中斷,切換到下一個進程運行。硬件中斷顧名思義就是由硬件引起的中斷,比如一個程序需要用戶輸入一個數據,但用戶一直沒有輸入,操作系統決定是一直等待用戶輸入還是轉而運行別的進程,一般情況是轉而運行別的進程,如果用戶的輸入到來了,那麼鍵盤驅動器會產生一箇中斷通知操作系統,操作系統保存正在運行的程序的狀態,從而切換到原來的進程處理到來的數據。

  • 異常
    異常就是程序執行過程中的異常行爲。比如除零異常,緩衝區溢出異常等。不同的操作系統定義了不同種類和數量的異常並且每個異常都有一個唯一的異常號,異常會擾亂程序的正常執行流程,所以異常是在 CPU 執行指令時本身出現的問題,比如除數爲零而出現的除零異常。異常的產生表示程序設計不合理,所以在編程的時候要儘量避免異常的產生。

發佈了165 篇原創文章 · 獲贊 852 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章