{0,1,2.....}
VM系統將虛擬存儲器分割爲虛擬頁,虛擬頁面的集合分爲三個不相交的子集:html
按需頁面調度和獨立的虛擬地址空間的結合簡化了連接和加載、代碼和數據共享,以及應用程序的存儲器分配。git
MAP(A)= A':若是虛擬地址A處的數據在PAS的物理地址A處' 空:若是虛擬地址A處的數據不在物理存儲器中 - CPU中的一個控制寄存器頁表基址寄存器指向當前頁表,n位的虛擬地址包含兩個部分:一個p位的虛擬頁面偏移(VPO) 和一個(n-p)位的虛擬頁號,頁表條目中的物理頁頁號和虛擬地址中的VPO串聯起來,就獲得了相應的物理地址。 - 在MMU中包括了一個關於PTE的小的緩存,稱爲翻譯後備緩衝器(TLB),其中每一行都保存着一個由單個PTE組成的塊。
CPU產生一個虛擬地址。
MMU從TLB中取出相對應的PTE。
MMU將這個虛擬地址翻譯成一個物理地址,並將它發送到高速緩存/主存。
高速緩存/主存將所請求的數據字返回給CPU。數組
- 多級頁表:用來壓縮頁表的經常使用方法是使用層次結構的頁表。 ####存儲器映射 Linux經過將一個虛擬存儲器區域與一個磁盤上的對象關聯起來,以初始化這個虛擬存儲器區域的內容,這個過程成爲存儲器映射。具體能夠映射的對象有兩種: - Unix文件系統中的普通文件。一個區域能夠映射到一個普通磁盤文件的連續部分。 - 匿名文件。匿名文件由內核建立,包含的全是二進制的0。 一旦一個虛擬頁面被初始化了,它就在一個由內核維護的專門的交換文件之間換來換去。交換文件也叫交換空間,或交換區域。 #####共享對象 - 一個對象被映射到虛擬存儲器的一個區域,要麼做爲共享對象,要麼做爲私有對象。 - 一個映射到共享對象的虛擬存儲器區域叫作共享區域,相似的,也有虛擬區域。 - 私有對象時使用一種叫作寫時拷貝的技術被映射到虛擬存儲器中的,相應私有區域的頁表條目都被標記爲只讀,而且區域結構被標記爲私有的寫時拷貝。 #####execve函數 - 使用execve函數將a.out程序加載到存儲器的過程 ``` Execve("a.out",NULL,NULL); ``` 具體通過的步驟以下:
刪除已存在的用戶區域。
映射私有區域。
映射共享區域。
設置程序計數器。緩存
#####使用map函數的用戶級存儲器映射 - Unix進程可使用mmap函數來建立新的虛擬存儲器區域,並將對象映射到這些區域當中
void mmap(void start,size_t length,int prot,int flags,int fd,off_t offest);
若成功則爲指向映射區域的指針,若出錯則MAP_FAILD(-1)
`- munmap函數刪除虛擬存儲器的區域。 ``` int munmap(void *start,size_t length); 若成功則返回0,若失敗則返回-1.
安全
當運行時須要額外虛擬存儲器時,使用動態存儲器分配器維護一個進程的虛擬存儲器區域。分配器有兩種風格。函數
void *malloc(size_t size); 若成功則爲指針,若出錯則爲NULL。
void free(void *ptr);
處理任意請求序列。 當即響應請求。 只使用堆。 對齊塊(對齊要求)。 不修改已分配的額塊。
最大化吞吐率:吞吐率定義爲每一個單位時間裏完成的請求數。 最大化存儲器利用率:最有用的標準是峯值利用率。
ptr isPtr(ptr p):若是p指向一個已分配塊中的某個字,那麼就返回一個指向這個塊起始位置的指針b,不然返回NULL。 int blockMarked(ptr b):若是已經標記了塊b,就返回true。 int blockAllocated(ptr b):若是塊b是已分配的,就返回true。 void markBlock(ptr b):標記塊b。 int length(ptr b):返回塊b的以字爲單位的長度(不包括頭部)。 void unmarkBlock(ptr b):將塊b的狀態由已標記的改成未標記的。 ptr nextBlock(ptr b):返回堆中塊b的後繼。
https://git.oschina.net/20145304/computer-systems工具
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第五週 | 30/60 | 1/5 | 10/32 | |
第七週 | 0/160 | 1/7 | 8/48 | |
第八週 | 0/160 | 1/8 | 5/53 | |
第九周 | 157/317 | 1/9 | 7/60 | |
第十週 | 647/964 | 1/10 | 6/66 | |
第十一週 | 1086/2050 | 1/11 | 9/75 | |
第十二週 | 10/2060 | 7/18 | 10/85 | |
第十三週 | 473/2533 | 1/19 | 10/85 | |
第十四周 | /2533 | 220 | 10/95 |