採用連續分配方式之動態分割槽分配儲存管理,使用首次適應演算法、迴圈首次適應演算法、最佳適應演算法和最壞適應演算法4種演算法完成設計。
設計乙個作業申請佇列以及作業完成後的釋放順序,實現主存的分配和**。採用分割槽說明表進行。
或在程式執行過程,由使用者指定申請與釋放。
設計乙個空閒區說明表,以儲存某時刻主存空間占用情況。
作業及分割槽已分配情況可以在程式中定義或由使用者輸入,使用者根據列印的選單選擇採用哪種演算法為隊首作業分配記憶體空間,也可以列印當前記憶體分配情況,使用者也可以輸出要**的作業的記憶體空間,其選單如下:
退出可以用鏈式儲存結構和陣列實現,需要用記憶體分配情況表記錄已分配記憶體情況(陣列),空閒分割槽結構體可以如下定義:首次適應演算法為隊首作業分配記憶體空間
迴圈首次適應演算法為隊首作業分配記憶體空間
最佳適應演算法為隊首作業分配記憶體空間
最壞適應演算法為隊首作業分配記憶體空間
**指定作業的記憶體空間
顯示當前記憶體分配情況
還原初始狀態
typedef
struct memblockmemblock;
當前記憶體的使用情況為:
要求模擬實現夥伴系統對對記憶體的分配與**。初始記憶體大小為256kb,作業1請求30kb,作業2請求60kb,作業3請求64kb,然後**作業1的記憶體空間,然後**作業2的記憶體空間,然後**作業3的記憶體空間。
進行的操作依次為(省略「顯示當前記憶體分配情況」)
首次適應 ->最壞適應 ->最佳適應 ->迴圈適應 ->**job1 ->循壞適應為防止本校同學直接考批,只放出部分關鍵函式
首次適應演算法
按照鍊錶順序依次查詢符合作業需求的分割槽
最佳、最壞適應演算法按照演算法需求對鍊錶排序即可,注意分配完成後要將鍊錶順序還原,以便之後按位址順序列印void
first_fit()
}if(flag)
++jobid;
system
("cls");
show_menu()
;if(!flag)
printf
("job %d無法放入\n"
, jobid)
;}
迴圈首次適應演算法利用全域性變數記錄上次查詢位置即可,不再展示void
best_fit()
主函式
完整**之後通過其他方式放int
main()
break;}
}return0;
}
作業系統 記憶體管理 連續分配管理
記憶體管理 對記憶體的劃分和動態分配 功能程式鏈結的三種方式 靜態鏈結 裝入時動態鏈結 執行時動態鏈結 裝入的三種方式 絕對裝入 重定位裝入 動態執行時裝入 邏輯位址空間與實體地址空間記憶體保護 1 設定上下限暫存器,cpu要訪問時,與兩個暫存器相比,判斷有無越界 2 重定位暫存器 最小實體地址 和...
作業系統 三 記憶體管理基礎 連續記憶體分配
記憶體分為按位元組編址 8位 和字編制 不同計算機不一樣,64位計算機就是64位,即8個位元組 相對位址 邏輯位址 絕對位址 實體地址 從邏輯位址到實體地址的轉換由裝入解決。裝入的三種方式 絕對裝入 在編譯時知道程式放在記憶體中的哪個位置,編譯程式將產生絕對位址的目標 靈活性很低,只適用於單道程式環...
作業系統 5 物理記憶體管理 連續記憶體分配
目錄5.5 碎片整理 5.6 夥伴系統 buddy system 在該表中,明顯處理器中的l1快取是最快的,有3.6ghz的訪問速度,l2快取較快。其中l1,l2為快取記憶體。以上為硬體mmu控制的記憶體。在快取記憶體未命中時,就需要去記憶體中查詢。若缺頁,則需要到外存,也就是虛擬內卒中查詢。這一切...