2017-2018-1 20155312 《信息安全系統設計基礎》第十一週學習總結

2017-2018-1 20155312 《信息安全系統設計基礎》第十一週學習總結

教材學習內容總結

理解虛擬存儲器的概念和做用

  • 虛擬存儲器的概念:虛擬存儲器是硬件異常、硬件地址翻譯、主存、磁盤文件和內核軟件的完美交互,它爲每一個進程提供了一個大的、一致的和私有的地址空間。
  • 虛擬存儲器的做用:
    • 將主存看作是一個存儲在磁盤上的地址空間的高速緩存,在主存中只保護活動區域
    • 爲每一個進程提供了一致的地址空間,從而簡化了存儲器管理。
    • 保護每一個進程的地址空間不被其餘進程破壞。

理解地址翻譯的概念

  • 地址翻譯:把一個虛擬地址轉換爲物理地址的任務。須要CPU硬件和操做系統之間的緊密合做。地址翻譯經過CPU芯片上的存儲器管理單元完成。
    • 物理尋址:主存被組織成一個由M個連續字節大小的單元組成的數組,每字節都有一個惟一的物理地址(PA)。依次類推的尋址方式稱爲物理尋址。
    • 虛擬尋址:CPU生成一個虛擬地址(VA)來訪問主存,在被傳送到存儲器以前先轉換成適當的物理地址html

      理解存儲器映射

  • 存儲器映射:Linux經過將一個虛擬存儲器區域與一個磁盤上的對象關聯起來,以初始化這個虛擬存儲器區域的內容的過程。
  • 映射對象:
    • Unix文件系統中的普通文件:一個區域能夠映射到一個普通磁盤文件的連續部分。
    • 匿名文件:匿名文件由內核建立,全是二進制的0。
  • 共享對象:
    • 一個對象被映射到虛擬存儲器的一個區域,要麼做爲共享對象,要麼做爲私有對象
      • 共享對象:共享對象對於全部把它映射到本身的虛擬存儲器進程來講都是可見的。一個映射到共享對象的虛擬存儲器區域叫作共享區域
      • 私有對象:私有對象時使用一種叫寫時拷貝的技術被映射到虛擬存儲器中的,相應私有區域的頁表條目都被標記爲只讀,而且區域結構被標記爲私有的寫時拷貝。
  • execve函數
    • 使用execve函數將a.out程序加載到存儲器的過程Execve("ut",NULL,NULL);
    • 具體通過的步驟以下:
      • 刪除已存在的用戶區域。
      • 映射私有區域。
      • 映射共享區域。
      • 設置程序計數器。
  • 用戶級存儲器映射相關函數
    • Unix進程可使用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

      理解垃圾收集的概念

  • 垃圾收集器是一種動態存儲分配器。自動釋放程序已經再也不須要的已分配塊(垃圾)。垃圾收集器將存儲器視爲一張有向可達圖,圖的節點被分配爲一組根節點和一組堆節點。當存在一條從任意根節點出發到併到達P的有向路徑時,就稱節點P是可達的。
  • Mark&Sweep垃圾收集器:由標記階段清除階段組成,標記階段標記出根節點全部可達的和已分配的後繼,清除階段釋放每一個未被標記的已分配塊。
    • 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的後繼。

瞭解C語言中與存儲器有關的錯誤

  • 間接引用壞指針
  • 讀未初始化的存儲器
  • 容許棧緩衝區溢出
  • 假設指針和指向他們的對象大小是相同的
  • 形成錯位錯誤
  • 引用指針,而不是他所指向的對象
  • 誤解指針運算
  • 引用不存在的變量
  • 引用空閒堆塊中的數據
  • 引發存儲器泄露

教材學習中的問題和解決過程

  • 問題1:使用虛擬尋址的現代系統,CPU經過生成一個虛擬地址來訪問主存,這個虛擬地址在被傳送到內存以前下轉換成適當的物理地址(以下圖所示),此轉換過程由CPU芯片上的內存管理單元(MMU)完成,書上描述的過程是「利用存放在主存中的查詢表來動態翻譯虛擬地址,該表的內容由操做系統管理」,這裏地址翻譯的過程具體是怎樣的呢?

  • 解決過程:虛擬地址轉化爲物理地址的過程讓我聯想到操做系統課程所學的「存儲管理」技術。

存儲管理的任務有如下幾個git

  1. 存儲分配
  2. 地址映射
  3. 存儲保護
  4. 存儲共享
  5. 存儲擴充

其中地址映射又稱地址重定位,指將用戶程序中的邏輯地址轉換爲運行時由機器直接尋址的物理地址,保證CPU執行指令時可正確訪問存儲單元。編程

隨着對地址映射的深刻了解,我發現不一樣的存儲技術對應着不一樣的地址映射過程,所用到的數據結構也有所不一樣。數組

存儲技術分爲如下兩類緩存

(1)簡單存儲技術:相對於虛擬存儲而言,爲了實現簡單,執行以前,操做系統必須將待執行的程序所有裝入內存。安全

  • 簡單存儲技術可分爲如下四種:
    • 分區存儲管理
    • 簡單頁式存儲管理
    • 簡單段式存儲管理
    • 簡單段頁式存儲管理

(2)虛擬存儲技術:現代OS大都支持虛擬存儲技術,容許進程裝入部分程序便可開始執行。網絡

①分區存儲管理數據結構

這一種基於連續存儲管理的簡單存儲技術,因此在其進行地址映射時沒必要存放邏輯地址與物理地址的對應表,只須要利用基址寄存器存放當前進程所在分區的物理存儲單元的起始地址,並利用加法器對其與邏輯地址進行加法運算,便可計算出物理地址。這裏還有個比較器,它經過界限寄存器中存放的當前執行進程所在分區最後一個物理存儲單元的地址來限定進程的執行範圍,保護其它進程不被非法訪問。函數

地址翻譯過程描述以下圖所示:

②簡單頁式存儲管理

頁式管理的邏輯地址被分爲兩部分:頁號和頁內偏移量。

地址映射過程當中涉及到一種數據結構叫作頁表:系統爲每一個進程創建一張頁表,用於記載進程的各頁面到物理內存中頁框的映射信息。進程的每一個頁面依次對應頁表中的一個表項,其中包含相應頁在內存中對應的物理頁框號和頁面存取控制權限等字段。

地址映射的具體步驟以下:

  1. 根據邏輯地址,計算出頁號和頁內偏移量;
  2. 用頁號檢索頁表,查找指定頁面對應的頁框號;
  3. 根據頁框號和頁內偏移量,計算出物理地址。

這裏涉及到CPU硬件頁表寄存器:實現快速地址映射,存儲執行進程的頁表起始地址。

地址翻譯過程描述以下圖所示:

③簡單段式存儲管理

這種管理技術將程序的地址空間劃分爲若干個相對獨立的段,程序加載時,以段爲單位,分配其所需的全部段,每一個段佔據內存連續的分區,這些段沒必要連續;段式管理是把內存視爲二維空間,與進程邏輯相一致。

分段管理的邏輯地址表示:段號和段內偏移量

簡單段式管理的基本數據結構段表:每一個進程建一個,用於描述進程的分段狀況,記載進程各個段到物理內存中分區的映射狀況。包含段號、段長、段基址及對本段的存取控制權限等信息。

簡單段式存儲管理地址映射過程經過段號與段基址相加計算各段物理地址中的起始地址,再與偏移量相加來計算出進程中具體的物理地址。這裏涉及到段表寄存器:爲實現快速地址變換,用來存放當前執行進程的段表在物理內存中的起始地址。

地址翻譯過程描述以下圖所示:

④簡單段頁式存儲管理

這種管理技術採用分段方法組織用戶程序,採用分頁方法分配和管理內存。系統將內存劃分紅固定大小的頁框,並將程序的每一段分頁後裝入內存執行。

段頁式管理的邏輯地址表示:段號、段內地址+頁號、頁內地址

簡單段頁式存儲管理涉及到段式管理技術和頁式管理技術中的兩種數據結構:段表、頁表

地址翻譯過程描述以下圖所示:

代碼調試中的問題和解決過程

20155312

上週考試錯題總結

ch06:

1.下面代碼中,對數組x填充後,採用直接映射高速緩存,全部對x和y引用的命中率爲(D)
(題目1)

A. 1

B. 1/4

C. 1/2

D. 3/4

  • 誤選了C,因爲直接映射高速緩存中不命中時的行替換,若是緩存不命中,它須要從存儲器層次結構中的下一層取出被請求的塊,而後將新的塊存儲在組索引塊指示的組中的一個高速緩存行中,替換策略就是用新取出的行替換當前的行。未填充時而存放x[i]和y[i]的塊被映射到了同一個高速緩存組,而填充x後,x[i]和y[i]的塊被映射到了不一樣的高速緩存組,消除了抖動衝突不命中。

2.有關高速緩存的說法正確的是(ACD)

A . 高速緩存的容量能夠用C=SEB 來計算

B . 高速緩存容量爲2048,高速緩存結構爲( 32 ,8,8,32)

C . 直接映射高速緩存要:組選擇、行匹配、字抽取

D . 當程序訪問大小爲2的冪的數組時,直接映射高帶緩存中常發生衝突不命中

  • 解析:誤選了B,少選了D

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 .
空緩存的不命中叫衝突不命中

  • 解析:多選了B,錯在:不一樣層之間以塊大小爲傳送單元來回複製

6.下面代碼的步長是()
(題目6)
B . N

  • 解析:計算步長時,不會由於循環的層數而對步長進行其餘運算,此題中是一個三維數組,可是對於一個連續向量,不論是哪一個維度都是每隔N個元素進行訪問。

11.下面說法正確的是(ABCD)

A . CPU經過內存映射I/O向I/O設備發命令

B . DMA傳送不須要CPU的干涉

C . SSD是一種基於閃存或Flash的存儲技術

D . 邏輯磁盤塊的邏輯塊號能夠翻譯成一個(盤面,磁道,扇區 )三元組。

  • 解析:少選了C,SSD是一種基於閃存或Flash的存儲技術

14.有關磁盤操做,說法正確的是(AC)

A . 對磁盤扇區的訪問時間包括三個部分中,傳送時間最小。

B . 磁盤以字節爲單位讀寫數據

C . 磁盤以扇區爲單位讀寫數據

D . 讀寫頭總處於同一柱面

  • 解析:少選了D,磁盤操做中讀寫頭總處於同一柱面

17.根據攜帶信號不一樣,總線可分爲(BDE)

A . 系統總線

B . 數據總線

C . 內存總線

D . 地址總線

E . 控制總線

  • 解析:少選了E根據攜帶信號不一樣,總線可分爲數據總線、地址總線和控制總線

21.有關計算機存儲系統,下面說法正確的是(BCD)

A . 程序具備良好的局部性表如今傾向於從存儲器層次結構中的較低層次處訪問數據,這樣節省時間

B . 存儲層次涉用不一樣容量,成本,訪問時間的存儲設備

C . 存儲層次設計基於局部性原理

D . 「存儲山」是時間局部性和空間局部性的函數

  • 解析:少選了D 「存儲山」是時間局部性和空間局部性的函數

    結對及互評

本週結對學習狀況

  • 20155333
  • 結對照片
  • 結對學習內容
    • 網絡編程第11章
    • 教材第3章
    • ...

其餘(感悟、思考等,可選)

上次第九周博客教材中的問題和代碼調試的問題解決過程沒有截圖,並且提的問題比較淺,被老師評論博客寫的太糙了,這周有改進。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 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小時

  • 改進狀況:

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索