虛擬尋址:CPU生成一個虛擬地址(VA)來訪問主存,在被傳送到存儲器以前先轉換成適當的物理地址。html
Execve("ut",NULL,NULL);
void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offest);
來建立新的虛擬存儲器區域,並將對象映射到這些區域當中。函數參數、返回值不在此處贅述。int munmap(void *start,size_t length);
刪除虛擬存儲器的區域。void *malloc(size_t size);
來從標準堆中分配塊。void free(void *ptr);
來釋放已分配的塊。調用vid *sbrk(intptr_t incr);
申請額外的堆存儲器。java
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的狀態由已標記的改成未標記的。存儲管理的任務有如下幾個:git
其中地址映射又稱地址重定位,指將用戶程序中的邏輯地址轉換爲運行時由機器直接尋址的物理地址,保證CPU執行指令時可正確訪問存儲單元。編程
隨着對地址映射的深刻了解,我發現不一樣的存儲技術對應着不一樣的地址映射過程,所用到的數據結構也有所不一樣。數組
存儲技術分爲如下兩類:緩存
(1)簡單存儲技術:相對於虛擬存儲而言,爲了實現簡單,執行以前,操做系統必須將待執行的程序所有裝入內存。安全
(2)虛擬存儲技術:現代OS大都支持虛擬存儲技術,容許進程裝入部分程序便可開始執行。網絡
①分區存儲管理數據結構
這一種基於連續存儲管理的簡單存儲技術,因此在其進行地址映射時沒必要存放邏輯地址與物理地址的對應表,只須要利用基址寄存器存放當前進程所在分區的物理存儲單元的起始地址,並利用加法器對其與邏輯地址進行加法運算,便可計算出物理地址。這裏還有個比較器,它經過界限寄存器中存放的當前執行進程所在分區最後一個物理存儲單元的地址來限定進程的執行範圍,保護其它進程不被非法訪問。函數
地址翻譯過程描述以下圖所示:
②簡單頁式存儲管理
頁式管理的邏輯地址被分爲兩部分:頁號和頁內偏移量。
地址映射過程當中涉及到一種數據結構叫作頁表:系統爲每一個進程創建一張頁表,用於記載進程的各頁面到物理內存中頁框的映射信息。進程的每一個頁面依次對應頁表中的一個表項,其中包含相應頁在內存中對應的物理頁框號和頁面存取控制權限等字段。
地址映射的具體步驟以下:
這裏涉及到CPU硬件頁表寄存器:實現快速地址映射,存儲執行進程的頁表起始地址。
地址翻譯過程描述以下圖所示:
③簡單段式存儲管理
這種管理技術將程序的地址空間劃分爲若干個相對獨立的段,程序加載時,以段爲單位,分配其所需的全部段,每一個段佔據內存連續的分區,這些段沒必要連續;段式管理是把內存視爲二維空間,與進程邏輯相一致。
分段管理的邏輯地址表示:段號和段內偏移量
簡單段式管理的基本數據結構段表:每一個進程建一個,用於描述進程的分段狀況,記載進程各個段到物理內存中分區的映射狀況。包含段號、段長、段基址及對本段的存取控制權限等信息。
簡單段式存儲管理地址映射過程經過段號與段基址相加計算各段物理地址中的起始地址,再與偏移量相加來計算出進程中具體的物理地址。這裏涉及到段表寄存器:爲實現快速地址變換,用來存放當前執行進程的段表在物理內存中的起始地址。
地址翻譯過程描述以下圖所示:
④簡單段頁式存儲管理
這種管理技術採用分段方法組織用戶程序,採用分頁方法分配和管理內存。系統將內存劃分紅固定大小的頁框,並將程序的每一段分頁後裝入內存執行。
段頁式管理的邏輯地址表示:段號、段內地址+頁號、頁內地址
簡單段頁式存儲管理涉及到段式管理技術和頁式管理技術中的兩種數據結構:段表、頁表
地址翻譯過程描述以下圖所示:
1.下面代碼中,對數組x填充後,採用直接映射高速緩存,全部對x和y引用的命中率爲(D)
(題目1)
A. 1
B. 1/4
C. 1/2
D. 3/4
2.有關高速緩存的說法正確的是(ACD)
A . 高速緩存的容量能夠用C=SEB 來計算
B . 高速緩存容量爲2048,高速緩存結構爲( 32 ,8,8,32)
C . 直接映射高速緩存要:組選擇、行匹配、字抽取
D . 當程序訪問大小爲2的冪的數組時,直接映射高帶緩存中常發生衝突不命中
3.The following table gives the parameters for a number of different caches. For
each cache, determine the number of cache sets (S), tag bits (t), set index bits (s),
and block offset bits (b) (ACD)
(題目3)
A . 第三行S爲1
B . 第一行t爲24
C . 第二行b爲5
D . 第三行s的值爲0
4.有關緩存的說法,正確的是(AC)
A .
LRU策略指的是替換策略的緩存會選擇最後被訪問時間距如今最遠的塊
B .
不一樣層之間以字節爲傳送單元來回複製
C .
緩存不命時,決定哪一個塊是犧牲塊由替換策略來控制
D .
空緩存的不命中叫衝突不命中
6.下面代碼的步長是()
(題目6)
B . N
11.下面說法正確的是(ABCD)
A . CPU經過內存映射I/O向I/O設備發命令
B . DMA傳送不須要CPU的干涉
C . SSD是一種基於閃存或Flash的存儲技術
D . 邏輯磁盤塊的邏輯塊號能夠翻譯成一個(盤面,磁道,扇區 )三元組。
14.有關磁盤操做,說法正確的是(AC)
A . 對磁盤扇區的訪問時間包括三個部分中,傳送時間最小。
B . 磁盤以字節爲單位讀寫數據
C . 磁盤以扇區爲單位讀寫數據
D . 讀寫頭總處於同一柱面
17.根據攜帶信號不一樣,總線可分爲(BDE)
A . 系統總線
B . 數據總線
C . 內存總線
D . 地址總線
E . 控制總線
21.有關計算機存儲系統,下面說法正確的是(BCD)
A . 程序具備良好的局部性表如今傾向於從存儲器層次結構中的較低層次處訪問數據,這樣節省時間
B . 存儲層次涉用不一樣容量,成本,訪問時間的存儲設備
C . 存儲層次設計基於局部性原理
D . 「存儲山」是時間局部性和空間局部性的函數
解析:少選了D 「存儲山」是時間局部性和空間局部性的函數
上次第九周博客教材中的問題和代碼調試的問題解決過程沒有截圖,並且提的問題比較淺,被老師評論博客寫的太糙了,這周有改進。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 200/200 | 2/2 | 20/20 | |
第二週 | 300/500 | 2/4 | 18/38 | |
第三週 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1500 | 2/9 | 30/90 | |
第五週 | 200/1800 | 2/11 | 20/120 | |
第六週 | 300/2000 | 2/13 | 18/140 | |
第七週 | 500/2300 | 2/14 | 22/158 | |
第八週 | 300/2800 | 1/16 | 30/180 | |
第九周 | 1000/3800 | 2/17 | 20/210 | |
第十週 | 600/4800 | 0/19 | 20/230 | |
第十一週 | 800/5400 | 2/19 | 20/250 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
計劃學習時間:20小時
實際學習時間:17小時
改進狀況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)