演算法精解 5 鍊錶應用 虛擬記憶體頁幀管理

2021-08-04 18:09:55 字數 1068 閱讀 2584

1、系統實體地址空間可能沒有實際位址空間大(即虛擬位址空間,由位址線長度決定)。虛擬記憶體是一種位址空間對映機制,它允許程序(執行的程式)不必完全載入到物理記憶體中也可以得到執行,程序操作的是虛擬位址。

2、虛擬記憶體與物理記憶體的對映關係由頁表中的條目決定,mmu會根據程序號和程序所使用的虛擬記憶體自動轉換到對應實際操作的物理空間。虛擬記憶體空閒頁就通過鍊錶一頁一頁串起來。

typedef

struct _dlist_element

dlist_element;

結構體dlist_attritive儲存整個鍊錶的屬性

typedef

struct _dlist_attritive

dlist_attritive;

4、空閒頁的插入和刪除

//從空閒一串頁中申請一頁,即空閒頁串刪除一頁 

int alloc_frame(list

*frames)

}return frame_number;

}//還給空閒頁串

int free_frame(list

*frames, int frame_number)

5、一般情況下很多程序都可能在系統中同時執行,所有的程序都在爭用物理記憶體,有時不得不替換某些頁面到交換磁碟。交換哪個頁面?

維護乙個存在於物理記憶體中的頁表的迴圈鍊錶,鍊錶中每個元素儲存頁碼和乙個索引值(*data指向的結構體)。所有頁面的初始值設定為0,頁面被操作就設定為1。找到第乙個為0的頁面交換到磁碟。找到的1把它設為0,繼續向後找如果都是1迴圈到第乙個從1設為0的頁面。

指標data指向頁面屬性結構體page

typedef struct _page

page;

int replace_page(listelmt **current)

return

((page*)(*current)->data)->number;

//返回第乙個索引值為0的頁面號,該頁面放到交換空間

}

演算法精解 10 鏈式雜湊表的應用 符號表

應用簡介 雜湊表會應用於編譯器中,滿足快速訪問符號資訊的需求。把原始碼中有組織的字元轉換為有意義的字串 語義轉換 一般儲存符號的兩個屬性 語義和標記型別。每次從輸入字串流中接收乙個字串,預設字串之間以空格隔開。如果該字串為全數字標價記為digit 否則為other。ifndef lex h defi...

演算法精解 C語言描述 鍊錶 迴圈鍊錶的實現與分析

同單鏈表相似,迴圈鍊錶中的每個元素也包含兩個部分 乙個資料域指標和乙個指向後繼元素的next指標。資料結構clistelmt代表迴圈鍊錶中的單獨元素。該結構體擁有兩個成員,如上面所述。資料結構clist代表迴圈鍊錶。這個結構體同單鏈表相似,但它不包含tail成員。clist.h ifndef cli...

C 演算法精介 鍊錶 迴圈鍊錶

前面對單鏈表和雙鏈表的定義和抽象資料型別進行簡單的介紹。下面介紹另外一種鍊錶,迴圈鍊錶。他提供了一種更靈活的遍歷鍊錶元素的能力,迴圈鍊錶可以是單向的也可以是雙向的。區分鍊錶是迴圈鍊錶的主要看他最後乙個元素的next指標是不是指向的頭元素 或者說 如果乙個鍊錶沒有尾部元素則是迴圈鍊錶 下面是以單向鍊錶...