注:期中知識點總結概括了教材第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. 邏輯運算和位運算的區別
9. 移位運算
10. 有符號數和無符號數的轉換
(1)有符號數→無符號數:
(2)無符號數→有符號數:
11.擴展
12.截斷數字
將一個w位的數截斷爲k位數字時,就會丟棄高w-k位。
13.舍入
1. GCC將源代碼轉化爲可執行代碼的步驟
2. 幾個處理器
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. 數據傳送指令
7. 條件碼
8. 循環
9. 棧幀
10. 轉移控制
11. 指針
1. Y86指令集
2. 邏輯設計和硬件控制語言HCL
兩類存儲器設備
時鐘寄存器(簡稱寄存器):存儲單個位或字,時鐘信號控制寄存器加載輸入值
隨機訪問存儲器(簡稱存儲器):存儲多個字,用地址來選擇該讀或該寫哪一個字
3. Y86的順序實現
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. 基本存儲技術
3. 隨機訪問存貯器:分爲靜態(SRAM)和動態(DRAM)兩類,SRAM更快更貴,用來做爲高速緩存存儲器。DRAM用來做爲主存以及圖形系統的幀緩衝區。
4. 訪問主存:數據流經過稱爲總線的共享電子電路在處理器和DRAM主存之間來回。讀事物 從主存傳送數據到CPU,寫事物從CPU傳送數據到主存。
5. 磁盤構造:磁盤由盤片構成,每一個盤片有兩面或稱爲表面,盤片中央有一個可旋轉的主軸,它使盤片以固定的旋轉速率旋轉。
6. 磁盤容量=字節數/扇區 * 平均扇區數/磁道 * 磁道數/表面 * 表面數/盤片 * 盤片數/磁盤
7. 對扇區的訪問時間有三個主要部分:尋道時間、旋轉時間、傳送時間
8. 局部性:時間局部性、空間局部性
9. 存儲器結構
10. 直接映射高速緩存:高速緩存肯定一個請求是否命中,而後抽取被請求的字的過程分爲三步
11. 組相聯高速緩存
緩存不命中則高速緩存必須從存儲器中取出包含這個字的塊,若是有一個空行則能夠被替換,若是沒有空行則必須從中選擇一個非空的行,但願CPU不會很快引用這個被替換的行。
(1)最不經常使用策略
(2)最近最少使用策略
12. 全相聯高速緩存:全相聯高速緩存中的行匹配和字選擇與組相聯高速緩存中的同樣,主要區別是規模大小的問題。全相聯高速緩存只適合作小的高速緩存。
13. 寫
寫命中:
直寫:高速緩存更新了它的w拷貝後當即將w的高速緩存塊寫到緊接着的低一層中。缺點是每次寫都會引發總線流量。
寫回:儘量推遲存儲器更新,只有當替換算法要驅逐更新過的塊時,才把它寫到緊接着的低一層中。能顯著地減小總線流量,缺點是增長了複雜性。高速緩存必須爲每一個高速緩存行維護一個額外的修改位,代表這個高速緩存塊是否被修改過。
寫不命中
寫分配:加載相應的低一層中的塊到高速緩存中,而後更新這個高速緩存塊。缺點是每次不命中都會致使一個塊從低一層傳送到高速緩存。
非寫分配:避開高速緩存,直接把這個字寫到低一層中。直寫高速緩存一般是非寫分配的,寫回高速緩存一般是寫分配的。
14. 高速緩存參數的性能影響
15. 存儲器山
1. 靜態連接器主要任務:符號解析、重定位。
2. 目標文件形式:可重定位目標文件、可執行目標文件、共享目標文件。
3. 每一個可重定位目標模塊m都有一個符號表,它包含m所定義和引用的符號的信息。有三種不一樣的符號:
由m定義並能被其餘模塊引用的全局符號
由其餘模塊定義並被模塊m引用的全局符號
只被模塊m定義和引用的本地符號
1. man -k
2. cheat
3. grep
4. find
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行處。
3. make
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 取消行號顯示
信息安全信息設計基礎這門課開課以來已通過了半學期,這幾個月的時間內,我從一開始對學習方法的不習慣慢慢過渡到逐漸適應的階段,學習也漸入佳境。目前已經學習了教材第1、2、3、4、6、七章的內容,對於計算機的具體層次結構和數據處理方式有了更深入的理解。不過我認爲我收穫最大的不是這方面,而是在不斷學習、不斷改進中掌握了最適合本身的學習方法,即先閱讀課本,將重點內容和不理解的內容記下來,經過網上查閱資料、諮詢身邊同窗解決問題,而且經過實踐加深對重點內容的理解記憶,定時回顧從前學過的內容,避免遺忘生疏。這種學習方法不只適用於系統設計基礎這門課,對於其餘課程,甚至是工做以後的繼續學習也是大有裨益。我相信「元知識」的積累也必定是短暫的大學生涯中最寶貴的財富。
可是,在學習中我仍存在不足的地方亟需改進。好比在遇到問題時以爲本身沒法解決就習慣於求助同窗和網絡資料,不少時候缺乏深度鑽研、深度思考這個過程,這樣致使對於問題的理解不夠深入,過一段時間就很容易忘記。意識到這個問題後,我下定決心在以後的學習生活中都要改變這種懶散的心態,不畏疑難,遇到難題時首先本身積極思考解決方法而不是依賴於他人。
本門課程的學習任務安排方面,我以爲很合適。萬事開頭難,前面打好基礎後在以後的學習中就感受稍輕鬆一些。除此以外,我對本門課程有感到疑惑的地方,老師偶爾會在羣裏發佈一些額外小任務或是在課堂上說一些加分項,可是這些加分項太多而我不太清楚這些加分項是屬於哪一個部分,那個部分的總分足夠後多餘的分是否會累加到其餘項中。並且如今也存在着有些加分項分數很高的同窗仍然哄搶題目的狀況,或許是他們不知道本身的分數是否已滿,索性多多益善,直接致使手速慢一點的同窗拿不到家庭做業題目。我以爲若是能將全部加分項、對應分值以及該項目多出分數的處理方法列出來,應該能解決這個問題。謝謝老師!