操作系統之進程調度與內存管理

1.進程間的通信與調度

1.1進程間的通信(Inter Process Communication)

生產者消費者問題

數據存到有界緩衝區bounded-buffer中,設置count記錄緩衝區的數據量,如果緩衝區滿count=size,讓生產者睡眠;如果緩衝區爲空count=0,讓消費者睡眠。

 

解決方法:

(1)用信號量(semaphore)

需要三個信號量:full記錄充滿緩衝區數目,empty記錄空的緩衝區數目。mutex用來保證任意時刻只有一個進程讀寫緩衝區變量。

(2)用互斥量(mutex)

是沒有信號量基數能力的簡化版,僅適用於管理共享資源或一小段代碼。互斥量處於兩態之一的變量:解鎖和加鎖

(3)用消息傳遞(message passing)

(4)用屏障(barrier)

1.2 程序/進程的調度

臨界資源:一次只能被一個進程訪問的共享資源。

衡量調度的標準:吞吐量(系統每小時完成的作業量)和週轉時間(批處理作業用時)

進程調度算法

(1)實時系統一般用非搶佔式——先來先服務

交互式系統用搶佔式:

(2)輪傳時間片:時間片設置太長會讓短交互的時間過長,時間片設置太短切換開銷大,降低CPU效率

(3)優先級調度

(4)多級隊列

(5)最短進程優先

(6)彩票調度

2. 操作系統的內存管理

2 .1 內存管理之內存分配方法

 2.1.1 單一連續分配

單用戶單進程時把內存分爲系統區和用戶區兩部分。

  2.1.2 固定分區分配法

給不同程序固定大小的內存空間

2.1.3 動態分區分配算法

動態分區空閒鏈:雙向鏈表,節點需記錄可

(1)首次適應(FF算法)

   每次都從頭開始順序查找適合的內存區(容易造成表頭碎片化,後期優化成循環適應,每次分配都從上次檢索結束的位置開始查內存)

(2)最佳適應(BF算法)

把分區空閒鏈的節點按大小排序,每次選大小最相近的內存區

(3)快速適應(QF算法)

把整個內存分成多個空閒鏈表,每個空閒鏈表存儲一種容量的空閒區。每次都能快速找到空閒鏈表。

操作系統如何管理進程的內存空間?

 

2.2 內存管理之虛擬內存

虛擬內存爲何出現?程序/進程內存超過了物理內存的容量,且一臺機器往往要跑多個程序/進程。

虛擬內存技術實現前提——程序的局部性原理:CPU訪問存儲器時,無論是存取指令還是存取數據,所訪問的存儲單元都趨向於聚集在一個較小的連續區域中。

高速緩存的替換時機 VS 主存缺頁的替換時機:

虛擬內存的置換算法(和高速緩存的置換算法一樣)

2.2.1 FIFO

 利用一個雙向鏈表保存數據,當來了新的數據之後便添加到鏈表末尾,如果Cache存滿數據,則把鏈表頭部數據刪除,然後把新的數據添加到鏈表末尾。

   在訪問數據的時候,如果在Cache中存在該數據的話,則返回對應的value值;否則返回-1。如果想提高訪問效率,可以利用hashmap來保存每個key在鏈表中對應的位置。

2.2.2 LFU(least recently used)

2.2.3 LRU(least recently used)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章