20145324 《信息安全系統設計基礎》第七週學習總結

20145324 《信息安全系統設計基礎》第七週學習總結

教材學習內容總結

存儲器系統是一個具備不一樣容量、成本和訪問時間的存儲設備的層次結構html

隨機訪問存儲器(兩類)

1.靜態RAM
SRAM的特色:存儲器單元具備雙穩態特性,只要有電就會永遠保持它的值,干擾消除時,電路就會恢復到穩定值git

2.動態RAM
DRAM的特色:每一位的存儲是對一個電容的充電,當電容的電壓被擾亂以後,就永遠不會恢復
DRAM存儲不穩定的應對機制:
①存儲器系統必須週期性地經過讀出,或者重寫來刷新存儲器的每一位
②使用糾錯碼算法

SRAM和DRAM的區別:

①只要有電,SRAM就會保持不變,而DRAM須要不斷刷新
②SRAM的存取比DRAM快
③SRAM對光和電噪聲等干擾不敏感
④SRAM比DRAM須要使用更多的晶體管,因此更昂貴shell

傳統的DRAM:
行地址i:RAS
列地址j:CAS
DRAM組織成二位陣列下降芯片上地址引腳的數量,但增長了訪問時間vim

DRAM芯片包裝在存儲器模塊中插入到主板的擴展槽上
存儲器模塊分類:
①168個引腳的雙列直插存儲器模塊,以64位爲塊傳送數據
②72個引腳的單列直插存儲器模塊,以32位爲塊傳送數據數組

訪問主存:

讀事務:從主存傳送數據到CPU
寫事務:從CPU傳送數據到主存
總線:一組並行的導線,能攜帶地址、數據和控制信號(兩個以上的設備也能共享同一根總線)緩存

磁盤存儲

磁盤構造:
由盤片構成
表面:每一個盤片有兩個表面
主軸:盤片中央,可旋轉
磁道:同心圓
扇區:每一個磁道被劃分爲一組扇區
數據位:每一個扇區包含相等數量的數據位,一般爲512字節
間隙:存儲用來標識扇區的格式化位
柱面:全部盤片表面上到主軸中心的距離相等的磁道的集合安全

磁盤驅動器→磁盤→旋轉磁盤(同樣的)ssh

磁盤容量:
記錄密度:磁道一英寸的段中能夠放入的位數
磁道密度:從盤片中心出發半徑上一英寸的段內能夠有的磁道數
面密度:記錄密度與磁道密度的乘積
記錄區:柱面的集合被分割成不相交的子集合(多區記錄技術)函數

計算公式:

磁盤容量=字節數/扇區x平均磁盤數/磁道x磁道數/表面x表面數/盤片x盤片數/磁盤

1GB=10^9字節

磁盤操做:

讀寫頭:磁盤用讀寫頭來讀寫存儲在磁性表面的位

尋道:經過沿着半徑軸先後移動的這個傳動臂,驅動器能夠將讀寫頭定位在盤片上的任何磁道上在任什麼時候刻,全部的讀寫頭都位於同一個柱面上

讀寫頭碰撞:讀寫頭碰到了阻礙,讀寫頭就會停下來

磁盤以扇區大小的塊來讀寫數據:

尋道時間:移動傳送臂所須要的時間

旋轉時間:一旦讀寫頭定位你到了指望的磁道,驅動器等待目標扇區的第一個位旋轉到讀寫頭下
Tmax rotation=1/RPM x 60secs/1min
Tavg rotation=0.5Tmax rotation

傳送時間:一個扇區的傳送時間依賴於旋轉速度和每條磁道的扇區數目
Tavg transfer= 1/RPM x 1/(平均扇區數/磁道) x 60s/1min

訪問時間=Tavg rotation+Tavg transfer+Tavg seek

邏輯磁盤塊
磁盤控制器:磁盤中一個小的硬件、固件設備,維護着邏輯塊號和實際物理磁盤扇區之間的映射關係

鏈接到I/O設備:
外圍設備互連(PCI):鏈接到CPU和主存 I/O總線的分類:
通用串行總線(USB):包括鍵盤、鼠標、調制解調器、數碼相機、遊戲操縱桿、打印機、外部磁盤驅動器和固態硬盤等
圖形卡(適配器):負責表明CPU在顯示器上畫像素
主機總線適配器:使用特別的主機總線接口定義的通訊協議

固態硬盤(SSD):

一個SSD包由一個或多個閃存芯片和閃存翻譯層組成
隨機讀和寫的性能差異是由底層閃存基本屬性決定的

讀寫很慢的緣由:
①擦除塊須要相對較長的時間
②寫操做試圖修改一個包含已經有數據的頁p,那麼這個二塊中的全部帶有用數據的頁都必須被拷貝到一個新(擦除過的)塊,而後才能進行對頁p的寫

優勢:隨機訪問時間比旋轉磁盤塊,能耗更低,更結實。
缺點:閃存翻譯層中的平均磨損邏輯試圖經過將擦除平均分佈在全部的塊上來最大化每一個塊的壽命

局部性

傾向於引用鄰近與其餘最近引用過的數據項的數據項,或者最近引用過的數據項自己,這種傾向性,被稱爲局部性原理。

時間局部性:被引用過一次的存儲器位置極可能在不遠的未來再被屢次引用
空間局部性:一個存儲器位置被引用了一次,那麼程序極可能在不遠的未來引用附近的一個存儲器位置

評價一個程序中局部性的簡單原則:

①重複引用同一個變量的程序有良好的時間局部性
②對於具備步長爲k的引用模式的程序,步長越小,空間局部性越好
③對於取指令來講,循環有好的時間和空間局部性,循環體越小,循環迭代次數越多,局部性越好

存儲器層次結構

存儲器層次結構中的緩存

高速緩存:是一個小而快速地存儲設備,它做爲存儲在更大、也更慢的設備中的數據對象的緩衝區域cash
緩存:使用高速緩存的過程cashing
塊:第k+1層的存儲器被劃分紅連續的對象片,每一個塊有一個惟一的地址或名字,使之區別於其餘的塊
傳送單元:數據老是以塊大小爲傳送單元

緩存命中:

當程序須要第k+1層的某個數據對象d時,它首先在當前存儲在第k層的一個塊中查找d,若是d恰好緩存在第k層中,那麼就是咱們說的緩存命中。

緩存不命中:若第k層中沒有緩存數據對象d,那麼就是咱們所說的緩存不命中

替換或驅逐:覆蓋一個現存的塊的過程
犧牲塊:被驅逐的這個塊
替換策略:決定應該替換哪一個塊

緩存不命中的種類:
冷緩存(強制不命中\冷不命中):一個空的緩存,對於有效位爲0的狀況
放置策略:發生了不命中,第k層的緩存就必須執行某個放置策略,肯定把它從第k+1層中取出來的塊放在哪裏
衝突不命中:限制性的放置策略會引發的一種不命中
工做集:程序是按照一系列階段來運行的,每一個階段訪問緩存塊的某個相對穩定不變的集合
容量不命中:當工做集的大小超過緩存的大小時

緩存管理:某個東西要將緩存劃分紅塊,在不一樣的層之間傳送塊,斷定是命中仍是不命中,並處理它們

高速緩存存儲器

通用的高速緩存存儲器結構:

每一個存儲器地址有m位,造成M=2^m個不一樣的地址
高速緩存組:S=2^s個高速緩存組的數組
高速緩存行:B=2^b字節的數據塊組成
有效位:指明這個行是否包含有意義的信息
標記位:惟一地標識存儲在這個高速緩存行中的塊,t=m -(b+s)

有關寫的問題

直寫:當即將w的高速緩存塊寫回到緊接着的第一層中 ,可是每次寫都會引發總線流量

寫回:只有當替換算法要驅逐更新過的塊時,才能把它寫到緊接着的低一層中,因爲局部性,寫回能顯著減小總線流量,可是增長了複雜性。

高速緩存必須爲每一個高速緩存行維護一個額外的修改位,代表這個高速緩存塊是否被修改過

寫分配:加載相應的低一層中的塊到高速緩存中,而後更新這個高速緩存塊,可是每次不命中都會致使一個塊從低一層傳送到高速緩存

非寫分配:避開高速緩存,直接把這個字寫到低一層中

高速緩存參數的性能影響

不命中率:不命中數量/引用數量
命中率:1-不命中率
命中時間:組選擇、行確認和字選擇的時間
不命中處罰:不命中須要的額外的時間

代碼驅動的程序設計學習

git的安裝測試

1.輸入git,檢查是否安裝
2.如未安裝輸入sudo apt-get install git安裝
3.安裝完後輸入git --version檢查是否安裝成功
4.安裝成功後開始配置git
5.輸入git init
6.git config --global user.name "SJZGM10(用戶民)"
7.git config --global user.eamil "suju1015463462@vip.qq.com(郵箱地址)"
8.配置完成後建立公鑰
9.輸入ssh-keygen -C 'suju1015463462@vip.qq.com(郵箱地址)' -t rsa
10.建立完公鑰後上傳公鑰
11.輸入cd ~/.ssh
12.輸入gedit id_rsa.pub
13.複製公鑰,並粘貼到http://git.oschina.net/profile/sshkeys
14.完成後輸入ssh -T git@git.oschina.net檢查是否通暢

15.創建本身的代碼文件夾
16.輸入mkdir 20145324(能夠用本身的學號)
17.輸入cd 20145324進入文件夾
18.輸入mkdir 20145324CSAPP2E(用於保存本課代碼)
19.輸入cd 20145324CSAPP2E進入文件夾
20.輸入mkdir src(用於存放源代碼文件)
21.輸入mkdir include(用於存放頭文件)
22.輸入mkdir bin(用於存放編譯後的目標文件、可執行文件等)
23.輸入mkdir lib(存放項目所需的靜態庫、動態(共享)庫)
24.輸入mkdir res(存放項目所需的圖標、聲音、圖片等資源)
25.輸入mkdir docs(存放項目相關的參考資料、幫助文檔)
26.輸入touch README Makefile 新建README(對項目的簡要介紹:licence、功能、編譯環境等,詳細的要在docs下有幫助文檔)和Makefile(實現項目編譯自動化)連個文件
27.輸入cd src進入文件夾,並建立12章相應的文件夾
28.輸入mkdir 01intro
29.輸入mkdir 02data
30.輸入mkdir 03asm
31.輸入mkdir 04arch
32.輸入mkdir 05perf
33.輸入mkdir 06mem
34.輸入mkdir 07link
35.輸入mkdir 08ecf
36.輸入mkdir 09vm
37.輸入mkdir 10io
38.輸入mkdir 11netp
39.輸入mkdir 12conc

40.完成後輸入cd ..返回上一級
41.輸入tree 查看一下剛剛建的結構目錄(沒有安裝tree再輸入tree後按照提示安裝便可)

42.開始使用git傳代碼
43.輸入ls查看一下
44.輸入vim src/01intro/hello.c
45.輸入i進入編輯模式
46.輸入代碼
-#include <stdio.h>
int main()
{
printf("hello 20145324\n");
}
47.按Esc鍵退出編輯,並輸入:wq保存代碼並退出vim
48.輸入gcc src/01intro/hello.c -o bin/hello編譯程序
49.輸入./bin/hello執行程序

50.上傳代碼前配置一下
51.輸入git init(好像能夠不用輸這個)
52.輸入ls顯示當前目錄內容
53.輸入git config user.name "SJZGM10"
54.輸入git config user.email "suju1015463462@vip.qq.com"
55.輸入config user.core.edit vim
56.輸入git config --list查看配置

57.進入開源中國新建一個項目CSAPP2E
58.輸入git remote add origin https://git.oschina.net/SJZGM10(用戶民)/CSAPP2E(項目名稱).git
59.輸入git pull origin master下載README.md(不進行這一步後面可能會存在git push時有error:failed to push some refs to 'https://git.oschina.net/SJZGM10/CSAPP2E.git')
60.輸入git add .添加代碼
61.輸入git commit -m "gitxuexi"給代碼添加註釋
62.輸入git push origin master
63.輸入SJZGM10(用戶民)回車
63.輸入密碼回車
64.上傳成功

65.經過shell腳原本簡化編譯運行程序

66.輸入compile.sh
67.輸入i編輯腳本
68.輸入腳本:
-#! /bin/sh

-#compile ch01 hello world program (註釋)

gcc ./src/01intro/hello.c -o ./bin/hello
./bin/hello
69.按Esc退出輸入,並輸入:wq保存退出腳本編輯
70.輸入chmod +x compile.sh給腳本添加可執行權限
71.輸入./compile.sh

77.輸入ls顯示當前目錄內容
78.使用.gitignore文件把不想歸入git管理的文件、文件夾排除掉(bin文件夾)
79.輸入vi .gitignore
80.輸入i開始編輯
81.輸入內容:
-# ignore bin directory

bin/
82.按Esc退出輸入,並輸入:wq保存退出編輯

使用gdb輔助學習

1.輸入sudo apt-get install cgdb安裝替代調試工具

2.輸入vi src/02data/testcast.c創建示例
3.按i輸入代碼:

4.按Esc退出輸入,並輸入:wq保存並退出編輯
5.輸入vi compile.sh編輯腳本
6.輸入i編輯腳本
7.腳本內容:
-# ch02 p44 test casting
gcc -g ./src/02data/testcast.c -o ./bin/testcast
./bin/testcast
8.按Esc退出輸入,並輸入:wq保存並退出編輯
9.輸入./compile.sh

10.輸入cgdb bin/testcast進行調試

思考題:使用compile.sh有什麼問題?

答:在操做過程當中我以爲使用compile.sh很方便編譯,寫好了幾個代碼,能夠一塊兒寫腳本再編譯,可是運行程序的時候就不是很好找到結果,若是有問題的話,修改起來也很麻煩

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

在運行教材p402的代碼時出現下圖狀況

再教材給出的代碼上加了main函數仍是沒法運行,說給的實參太少

仔細看上圖本身寫的代碼,發現main函數裏沒有寫參數,修改後便可編譯經過

本週代碼託管截圖

本週根據代碼驅動的程序設計學習從新創建了項目

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

多動手操做,百度,不少問題本身就能夠解決了

學習進度條

博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 30篇 400小時
第零周 1/1 20/20
第一週 1/2 20/40
第二週 1/3 20/60
第三週 1/4 20/80
第四周 1/5 20/100
第五週 1/6 20/120
第六週 1/7 20/140
第七週 1/8 20/160

參考資料

相關文章
相關標籤/搜索