信息安全系統設計基礎第八週期中總結

1、知識點總結

注:期中知識點總結概括了教材第1、2、3、4、6、七章的重點內容和Linux命令man、cheat、grep、vi、gcc、gdb、make的使用,詳細知識點內容請見前六篇博客。 程序員

(一)第一章 計算機系統漫遊

1. 信息=位+上下文。算法

2. 翻譯過程分爲四個階段:預處理、編譯、彙編、連接,預處理器、編譯器、彙編器、連接器一塊兒構成編譯系統。 數組

3. 系統的硬件組成:總線、I/O設備、內存、處理器。 緩存

4. 併發:一個同時具備多個活動的系統。並行:用併發使一個系統運行地更快,並行能夠在計算機系統多個抽象層次上運用。按照系統層次結構由高到低的順序強調三個層次:線程級併發、指令級並行、單指令多數據並行。安全

5. 操做系統內核是應用程序和硬件之間的媒介,提供三個基本的抽象:網絡

  • 文件是對I/O設備的抽象併發

  • 虛擬存儲器是對主存和磁盤的抽象函數

  • 進程是對處理器、主存和I/O設備的抽象工具

6. 計算機系統是由硬件和系統軟件組成的,程序被其餘程序翻譯成不一樣的形式,開始時是ASCII文本,而後被編譯器和連接器翻譯成二進制可執行文件。性能

7. 處理器讀取並解釋存放在主存裏的二進制指令。

(二)第二章 信息的表示和處理

1. 字長:指明整數和指針數據的標稱大小。一個字長爲w的機器的虛擬地址範圍爲0~2^(w-1),程序最多訪問2^w個字節。

2. int 、char 4字節,單精度float 字節,雙精度double 8字節。

3. 三種最重要的數字表示:無符號、補碼、浮點數。

4. 運算:整數運算、浮點運算。

5. 小端法和大端法

  • 小端法:最低有效字節在前面——「高對高,低對低」

  • 大端法:最高有效字節在前面

6.布爾代數:

  • 與: &
  • 或: |
  • 非: ~
  • 異或:^

7. 邏輯運算符

  • 與:&&
  • 或:||
  • 非:!

8. 邏輯運算和位運算的區別

  • 只有當參數被限制爲0或1時,邏輯運算才與按位運算有相同的行爲。
  • 若是對第一個參數求值就能肯定表達式的結果,邏輯運算符就不會對後面的參數求值。

9. 移位運算

  • 邏輯右移:在左端補k個0,多用於無符號數移位運算
  • 算術右移:在左端補k個最高有效位的值,多用於有符號數移位運算。

10. 有符號數和無符號數的轉換

(1)有符號數→無符號數:

  • 非負數——保持不變
  • 負數——轉換成大正數

(2)無符號數→有符號數:

  • 小於2的w-1次方——保持不變
  • 大於2的w-1次方——轉換爲負數值

11.擴展

  • 零擴展:多用於無符號數轉換爲一個更大的數據類型,只需在開頭加上0便可。
  • 符號擴展:多用於補碼數字轉換,最高有效位是什麼,就添加什麼。

12.截斷數字

將一個w位的數截斷爲k位數字時,就會丟棄高w-k位。

  • 對於無符號數來講,就至關於 mod 2的k次冪
  • 對於有符號數來講,先按照無符號數截斷,而後再轉化爲有符號數

13.舍入

  • 向偶舍入:將數字向上或向下舍入,是的結果的最低有效數字爲偶數。能用於二進制小數。
  • 向零舍入:把整數向下舍入,負數向上舍入。
  • 向下舍入:正數和負數都向下舍入。
  • 正數和負數都向上舍入。

(三)第三章 程序的機器級表示

1. GCC將源代碼轉化爲可執行代碼的步驟

  • C預處理器——擴展源代碼-生成.i文件
  • 編譯器——產生兩個源代碼的彙編代碼-——生成.s文件
  • 彙編器——將彙編代碼轉化成二進制目標代碼——生成.o文件
  • 連接器——產生可執行代碼文件

2. 幾個處理器

  • 程序計數器(CS:IP)
  • 整數寄存器(AX,BX,CX,DX)
  • 條件碼寄存器(OF,SF,ZF,AF,PF,CF)
  • 浮點寄存器

3. 數據格式

(1)Intel:

8 位:字節
16位:字
32位:雙字
64位:四字

(2)c語言基本數據類型對應的IA32表示:

char    字節  1字節
short   字   2字節
int     雙字  4字節
long int 雙字 4字節
long long int (不支持) 4字節
char *  雙字 4字節
float   單精度 4字節
double  雙精度 8字節
long double 擴展精度 10/12字節

4. 操做數類型:當即數、寄存器、存儲器

5. 尋址方式

(1)當即數尋址方式
格式:$後加用標準c表示法表示的整數,如$0xAFF

(2)寄存器尋址方式
如%eax,與彙編中學過的AX寄存器類比。

(3)存儲器尋址方式

- 直接尋址方式
- 寄存器間接尋址方式
- 寄存器相對尋址方式
- 基址變址尋址方式
- 相對基址變址尋址方式

6. 數據傳送指令

  • mov指令
  • 入棧push
  • 出棧pop

7. 條件碼

  • CF:進位標誌
  • ZF:零標誌
  • SF:符號標誌
  • OF:溢出標誌

8. 循環

  • do while
  • while
  • for

9. 棧幀

  • 寄存器%ebp-幀指針,寄存器%esp-棧指針
  • 棧用來傳遞參數、存儲返回信息、保存寄存器,以及本地存儲。

10. 轉移控制

  • call:CALL指令的效果是將返回地址入棧,並跳轉到被調用過程的起始處。返回地址是還在程序中緊跟在call後面的那條指令的地址。
  • ret:指從棧中彈出地址,並跳轉到這個位置。
  • leave可使棧作好返回的準備

11. 指針

  • 每一個指針都對應一個類型
  • 每一個指針都有一個值
  • 指針用&運算符建立
  • 運算符*用於指針的間接引用
  • 數組與指針緊密聯繫
  • 將指針從一種類型強制轉換成另外一種類型,只改變它的類型而不改變它的值
  • 指針也能夠指向函數

(四)第四章 處理器體系結構

1. Y86指令集

  • 4個整數操做指令:addl、subl、andl、xorl
  • 7個跳轉指令:jmp、jle、jl、je、jne、jge、jg
  • 6個條件傳送指令:cmovle、cmovl、cmove、cmovne、cmovge、cmovg
  • Halt指令中止指令的執行

2. 邏輯設計和硬件控制語言HCL

  • 邏輯門:&&、|| 、!
  • 字級的組合電路和HCL整數表達式:一些位級信號表明一個整數或一些控制模式。執行字級計算的組合電路根據輸入字的各個位,用邏輯門來計算輸出字的各個位。
  • 兩類存儲器設備

    時鐘寄存器(簡稱寄存器):存儲單個位或字,時鐘信號控制寄存器加載輸入值

    隨機訪問存儲器(簡稱存儲器):存儲多個字,用地址來選擇該讀或該寫哪一個字

3. Y86的順序實現

  • 取指:取指階段從存儲器讀取指令字節,地址爲程序計數器PC的值
  • 譯碼:譯碼階段從寄存器文件讀入最多兩個操做數
  • 執行:在執行階段,算數/邏輯單元要麼根據ifun的值執行指令指明的操做,計算機存儲器引用的有效地址,要麼增長或減小棧指針
  • 訪存:訪存階段能夠將數據寫入存儲器,或從存儲器讀出數據
  • 寫回:寫回階段最多能夠寫兩個結果到寄存器文件
  • 更新PC:將PC設置成下一條指令的地址

4. SEQ階段的實現

  • 取指階段

    取指階段包括指令存儲器硬件單元。以PC做爲第一個字節(字節0)的地址,這個單元一次從存儲器讀出6個字節,第一個字節被解釋稱指令字節,分爲兩個4位數。標號爲「icode」和「ifun」的控制邏輯塊計算指令和功能碼等於從存儲器讀出值,或者當指令地址不合法時(imem_error指明),這些值對應於nop指令。

  • 譯碼和寫回階段

    都要訪問寄存器文件。寄存器文件有四個端口,支持同時進行兩個讀(端口A、B)和兩個寫(E、M),每一個端口都有一個地址鏈接和一個數據鏈接。根據指令代碼icode以及寄存器指示值rA和rB,可能還會根據執行階段計算出的Cnd條件信號。

  • 執行階段

    執行階段包括算術/邏輯單元(ALU)第一步每條指令的ALU計算,執行階段還包括條件碼寄存器。

  • 訪存階段

    訪存階段的任務是讀或者寫程序數據,兩個控制塊產生存儲器地址和存儲器輸入數據的值,另外兩個塊產生控制信號代表應該執行讀操做仍是寫操做。當執行讀操做時數據存儲器產生值valM。

  • 更新PC階段

    SEQ中最後一個階段會產生程序計數器的新值,依據指令的類型和是否要選擇分支,新的PC多是valC、valM、valP。

(五)第六章 存儲器層次結構

1. 存儲器系統是一個具備不一樣容量、成本和訪問時間的存儲設備的層次結構。CPU寄存器保存着最經常使用的數據。小而快的高速緩存寄存器靠近CPU,下層存儲設備慢而大、便宜。

2. 基本存儲技術

  • SRAM存儲器
  • DRAM存儲器
  • ROM存儲器
  • 旋轉和固態的硬盤

3. 隨機訪問存貯器:分爲靜態(SRAM)和動態(DRAM)兩類,SRAM更快更貴,用來做爲高速緩存存儲器。DRAM用來做爲主存以及圖形系統的幀緩衝區。

  • 靜態RAM:將每一個位存儲在一個雙穩態的存儲器單元裏,只要有電就會永遠保持它的值。
  • 動態RAM:將每一個位存儲爲對一個電容的充電,當電容的電壓被幹擾後就存儲器單元就永遠不會恢復了。存儲器系統必須週期性地經過讀出,而後重寫來刷新存儲器的每一位。

4. 訪問主存:數據流經過稱爲總線的共享電子電路在處理器和DRAM主存之間來回。讀事物 從主存傳送數據到CPU,寫事物從CPU傳送數據到主存。

  • 總線是一組並行的導線,能攜帶地址、數據和控制信號。
  • 計算機系統配置:CPU芯片、I/O橋、組成主存的DRAM存儲器模塊
  • 系統總線鏈接CPU和I/O橋,存儲器總線鏈接I/O橋和主存

5. 磁盤構造:磁盤由盤片構成,每一個盤片有兩面或稱爲表面,盤片中央有一個可旋轉的主軸,它使盤片以固定的旋轉速率旋轉。

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

7. 對扇區的訪問時間有三個主要部分:尋道時間、旋轉時間、傳送時間

  • 尋道時間:爲了讀取某個目標扇區的內容,傳動臂首先將讀寫頭定位到包含目標扇區的磁道上。移動傳動臂所需的時間稱爲尋道時間。
  • 旋轉時間:最大旋轉延遲Tmax rotation=1/RPM * 60secs/1min。平均旋轉時間Tavg rotation的一半。
  • 傳送時間:Tavg transfer=1/RPM * 1/(平均扇區數/磁道) * 60secs/1min
  • 估計總訪問時間=Tavg seek+Tavg rotation+Tavg transfer。由於尋道時間和旋轉延遲大體相等,因此將尋道時間乘以2可簡單估計磁盤訪問時間。

8. 局部性:時間局部性、空間局部性

  • 重複引用同一個變量的程序有良好的時間局部性。
  • 對於具備步長爲k的引用模式的程序,步長越小空間局部性越好。具備步長爲1的引用模式的程序有很好的空間局部性。在存儲器中以大步長跳來跳去的程序空間局部性不好。
  • 對於取指令而言,循環有好的時間和空間局部性。循環體越小,循環迭代次數越多,局部性越好。

9. 存儲器結構

  • 高速緩存是一個小而快速的存儲設備,它做爲存儲在更大也更慢的設備中的數據對象的緩衝區域。使用高速緩存的過程稱爲緩存。
  • 存儲器層次結構的中心思想:對於每一個k,位於k層的更快更小的存儲設備做爲位於k+1層的更大更慢的存儲設備的緩存。
  • 緩存命中:當程序須要第k+1層的某個數據對象d時,首先在當前存儲於第k層的一個塊中查找d,且d恰好緩存在第k層。
  • 緩存不命中:當程序須要第k+1層的某個數據對象d時,首先在當前存儲於第k層的一個塊中查找d,且第k層沒有緩存數據對象d。覆蓋一個現存的塊的過程稱爲替換或驅逐這個塊,被驅逐的這個塊也稱爲犧牲塊。決定該替換哪一個塊由緩存的替換策略控制。

10. 直接映射高速緩存:高速緩存肯定一個請求是否命中,而後抽取被請求的字的過程分爲三步

  • 組選擇
  • 行匹配
  • 字抽取

11. 組相聯高速緩存

  • 組中的任何一行都能包含任何映射到這個組的存儲器塊,因此高速緩存必須搜索組中的每一行,尋找一個有效的行,其標記與地址中的標記相匹配。若是高速緩存找到了這樣一行就命中,塊偏移從這個塊中選擇一個字,和前面同樣。
  • 緩存不命中則高速緩存必須從存儲器中取出包含這個字的塊,若是有一個空行則能夠被替換,若是沒有空行則必須從中選擇一個非空的行,但願CPU不會很快引用這個被替換的行。

    (1)最不經常使用策略

    (2)最近最少使用策略

12. 全相聯高速緩存:全相聯高速緩存中的行匹配和字選擇與組相聯高速緩存中的同樣,主要區別是規模大小的問題。全相聯高速緩存只適合作小的高速緩存。

13. 寫

  • 寫命中:

    直寫:高速緩存更新了它的w拷貝後當即將w的高速緩存塊寫到緊接着的低一層中。缺點是每次寫都會引發總線流量。

    寫回:儘量推遲存儲器更新,只有當替換算法要驅逐更新過的塊時,才把它寫到緊接着的低一層中。能顯著地減小總線流量,缺點是增長了複雜性。高速緩存必須爲每一個高速緩存行維護一個額外的修改位,代表這個高速緩存塊是否被修改過。

  • 寫不命中

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

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

14. 高速緩存參數的性能影響

  • 高速緩存大小的影響:較大的高速緩存可能會提升命中率,使大存儲器運行得更快更難,較大的高速緩存可能會增長命中時間。
  • 塊大小的影響:較大的塊能利用程序中可能存在的空間局部性,幫助提升命中率。但對於給定的高速緩存大小,塊越大表明高速緩存行數越少,會損害時間局部性比空間局部性更好的程序的命中率。較大的塊對不命中處罰也有負面影響。
  • 相聯度的影響:較高的相聯度(E值較大)的優勢是下降了高速緩存因爲衝突不命中出現抖動的可能性。但較高的相聯度成本較高,很難使之速度變快,增長命中時間,增長不命中處罰。
  • 寫策略的影響:直寫高速緩存容易實現,且能獨立於高速緩存的寫緩衝區,用來更新存儲器。讀不命中的開銷不大,由於不會觸發存儲器寫。另外,寫回高速緩存引發的傳送較少。通常高速緩存越往下層越可能使用寫回。

15. 存儲器山

  • 一個程序從存儲系統中讀數據的速率稱爲讀吞吐量或讀帶寬。
  • 每臺計算機都有代表他存儲器系統的能力特點的惟一的存儲器山。
  • 目的:使得程序運行在山峯而不是低谷。利用時間局部性,使得頻繁使用的字從L1中取出;利用空間局部性,使得儘量多的字從一個L1高速緩存行中訪問到。

(六)第七章 連接

1. 靜態連接器主要任務:符號解析、重定位。

2. 目標文件形式:可重定位目標文件、可執行目標文件、共享目標文件。

3. 每一個可重定位目標模塊m都有一個符號表,它包含m所定義和引用的符號的信息。有三種不一樣的符號:

  • 由m定義並能被其餘模塊引用的全局符號

  • 由其餘模塊定義並被模塊m引用的全局符號

  • 只被模塊m定義和引用的本地符號

(七)Linux命令

1. man -k

  • man -k k1|grep k2|grep 2

2. cheat

  • 使用du命令對當前目錄下的目錄或文件按大小排序 的命令是du -sk *| sort -rn
  • To list the content of /path/to/foo.tgz archive using tar ( tar -jtvf /path/to/foo.tgz )

3. grep

  • 使用grep查找當前目錄下*.c中main函數在那個文件中的命令是grep main *.c
  • grep -nr xxx/usr/include 查找宏
  • ~/test 文件夾下有不少c源文件,查找main函數在哪一個文件中可用命令grep main *.c

4. find

  • 查找當前目錄下2天前被更改過的文件find . -mtime +2 -type f -print
  • 查找當前目錄下全部目錄的find命令是find . -type d

(八)vi、gcc、gdb、make的使用

1. gcc庫選項

  • static 進行靜態編譯,即連接靜態庫,禁止使用動態庫

  • shared 1.能夠生成動態庫文件 2.進行動態編譯,儘量地連接動態庫,只有當沒有動態庫時纔會連接同名的靜態庫(默認選項,便可省略)

  • L dir 在庫文件的搜索路徑列表中添加dir 目錄

  • lname 連接稱爲libname.a(靜態庫)或者libname.so(動態庫)的庫文件。若兩個庫都存在,則根據編譯方式(-static 仍是-shared)而進行連接

  • $ gcc –g gdb.c -o testgdb 使用gdb調試$ gdb testgdb 啓動gdb鍵入 l命令至關於list命令,從第一行開始列出源碼

2. gdb調試器

  • 查看文件: 在gdb 中鍵入「l」(list)就能夠查看所載入的文件

  • 設置斷點: 設置斷點是調試程序中一個很是重要的手段,它可使程序運行到必定位置時暫停。所以,程序員在該位置處能夠方便地查看變量的值、堆棧狀況等,從而找出代碼的癥結所在。在gdb 中設置斷點很是簡單,只需在「b」後加入對應的行號便可

  • 查看斷點狀況: 在設置完斷點以後,用戶能夠鍵入「info b」來查看設置斷點狀況

  • 運行代碼: gdb 默認從首行開始運行代碼,鍵入「r」(run)便可(若想從程序中指定行開始運行,可在r 後面加上行號)

  • 查看變量值: 在程序中止運行以後,程序員所要作的工做是查看斷點處的相關變量值。在gdb 中鍵入「p」+變量值便可

  • 單步運行: 單步運行可使用命令「n」(next)或「s」(step),它們之間的區別在於:如有函數調用的時候,「s」會進入該.數而「n」不會進入該函數。

  • (gdb) break 16 設置斷點,在源程序第16行處。

  • (gdb) break func 設置斷點,在函數func()入口處。
  • (gdb) info break 查看斷點信息。

3. make

  • makefile的好處:自動化編譯。make是一個命令工具,是一個及時makefile中命令的工具程序。make工具最主要也是最基本的功能就是根據makefile文件中描述的源程序至今的相互關係來完成自動編譯、維護多個源文件工程。
  • Makefile的通常寫法

    test(目標文件): prog.o code.o(依賴文件列表)tab(至少一個tab的位置) gcc prog.o code.o -o test(命令)

4. vi

vi 有3 種模式,分別爲命令行模式、插入模式及命令行模式。

(1)命令行模式

用戶在用vi 編輯文件時,最初進入的爲通常模式。在該模式中用戶能夠經過上下移動光標進行「刪除字符」或「整行刪除」等操做,也能夠進行「複製」、「粘貼」等操做,但沒法編輯文字。

(2)插入模式

只有在該模式下,用戶才能進行文字編輯輸入,用戶按[ESC]可鍵回到命令行模式。

(3)底行模式

在該模式下,光標位於屏幕的底行。用戶能夠進行文件保存或退出操做,也能夠設置編輯環境,如尋找字符串、列出行號等。

vi的基本流程

(1)進入vi,即在命令行下鍵入「vi hello」(文件名)。此時進入的是命令行模式,光標位於屏幕的上方

(2)在命令行模式下鍵入i 進入插入模式

(3)最後,在插入模式中,按「Esc」鍵,則當前模式轉入命令行模式,並在底行行中.入「:wq」(存盤退出)進入底行模式
vi 的各模式功能鍵

命令行模式常見功能鍵

i 切換到插入模式,在目前的光標所在處插入輸入的文字,已存在的文字會向後退

a 切換到插入模式,並從目前光標所在位置的下一個位置開始輸入文字

o 切換到插入模式,且從行首開始插入新的一行

0(數字0) 光標移到本行的開頭

G 光標移動到文件的最後

nG 光標移動到第n 行

$ 移動到光標所在行的「行尾」

n<Enter> 光標向下移動n 行

dd 刪除光標所在行

ndd 從光標所在行開始向下刪除n 行

yy 複製光標所在行

nyy 複製光標所在行開始的向下n 行

u 恢復前一個動做

插入模式常見功能鍵

插入模式的功能鍵只有一個,即按「Esc」鍵可回到命令行模式。

底行模式常見功能鍵

:w 將編輯的文件保存到磁盤中

:q 退出vi(系統對作過修改的文件會給出提示)

:q! 強制退出vi(對修改過的文件不做保存)

:wq 存盤後退出

:w [filename] 另存一個名爲filename 的文件

:set nu 顯示行號,設定以後,會在每一行的前面顯示對應行號

:set nonu 取消行號顯示

2、期中學習總結

信息安全信息設計基礎這門課開課以來已通過了半學期,這幾個月的時間內,我從一開始對學習方法的不習慣慢慢過渡到逐漸適應的階段,學習也漸入佳境。目前已經學習了教材第1、2、3、4、6、七章的內容,對於計算機的具體層次結構和數據處理方式有了更深入的理解。不過我認爲我收穫最大的不是這方面,而是在不斷學習、不斷改進中掌握了最適合本身的學習方法,即先閱讀課本,將重點內容和不理解的內容記下來,經過網上查閱資料、諮詢身邊同窗解決問題,而且經過實踐加深對重點內容的理解記憶,定時回顧從前學過的內容,避免遺忘生疏。這種學習方法不只適用於系統設計基礎這門課,對於其餘課程,甚至是工做以後的繼續學習也是大有裨益。我相信「元知識」的積累也必定是短暫的大學生涯中最寶貴的財富。

可是,在學習中我仍存在不足的地方亟需改進。好比在遇到問題時以爲本身沒法解決就習慣於求助同窗和網絡資料,不少時候缺乏深度鑽研、深度思考這個過程,這樣致使對於問題的理解不夠深入,過一段時間就很容易忘記。意識到這個問題後,我下定決心在以後的學習生活中都要改變這種懶散的心態,不畏疑難,遇到難題時首先本身積極思考解決方法而不是依賴於他人。

本門課程的學習任務安排方面,我以爲很合適。萬事開頭難,前面打好基礎後在以後的學習中就感受稍輕鬆一些。除此以外,我對本門課程有感到疑惑的地方,老師偶爾會在羣裏發佈一些額外小任務或是在課堂上說一些加分項,可是這些加分項太多而我不太清楚這些加分項是屬於哪一個部分,那個部分的總分足夠後多餘的分是否會累加到其餘項中。並且如今也存在着有些加分項分數很高的同窗仍然哄搶題目的狀況,或許是他們不知道本身的分數是否已滿,索性多多益善,直接致使手速慢一點的同窗拿不到家庭做業題目。我以爲若是能將全部加分項、對應分值以及該項目多出分數的處理方法列出來,應該能解決這個問題。謝謝老師!

相關文章
相關標籤/搜索