20135306黃韌 信息安全系統設計基礎期中學習總結

信息安全系統設計基礎第八週學習總結html

知識點總結程序員

第1計算機系統漫遊編程

△計算機系統是由硬件和系統軟件組成的,它們共同協做以運行應用程序。計算機內部的信息被表示爲一組組的位.它們依據上下文有不一樣的解釋方式。程序被其餘程序翻譯成不一樣的形式,開始時是ASCII文本.而後被編譯器和連接器翻譯成二進制可執行文件。
處理器讀取並解釋存放在主存裏的二進制指令,由於計算機能夠把大量的時間用於存儲器、I/O設備和CPU寄存器之間複製數據,因此將系統中的存儲設備劃分紅層次結構--CPU寄存器在頂部,接着是多層的硬件高速緩存存儲器、DRAM主存和磁盤存儲器在層次模型中,位於更高層的存儲設備比低層的存儲設備要更快,單位比特開銷也更高。層次結構中較高層次存儲設備能夠做爲較低層次設備的高速緩存。
操做系統內核是應用程序和硬件之間的媒介。
它提供三個基本的抽象:1)文件是對I/O的抽象;2)虛擬存儲器是對主存和磁盤的抽象:3)進程是對處理器、主存抽象和I/O設備的設備最後,網絡提供了計算機系統之間通訊的手段。從特殊系統的角度來看,網絡就是一種I/O設備。緩存

第2信息的表示和處理安全

△計算機將信息按位編碼,一般組織成字節序列。用不一樣的編碼方式表示整數、實數和字符串。不一樣的計算機模型在編碼數字和多字節數據中的字節排序時使用不一樣的約定。
C語言的設計能夠包容多種不一樣字長和數字編碼的實現。雖然高端機器逐漸開始使用64位字長,可是目前大多數機器仍使用32位字長。大多數機器對整數使用補碼編碼,而對浮點數使用IEEE浮點編碼。在位級上理解這些編碼,而且理解算術運算的數學特性,對於想使編寫的程序能在所有數值範圍上正確運算的程序員來講,是很重要的。
在相同長度的無符號和有符號整數之間進行強制類型轉換時,大多數C語言實現遵循的原則是底層的位模式不變。在補碼機器上,對於一個W位的值,這種行爲是由函數T2Uw和U2Tw來描述的。網絡

第3程序的機器級表示數據結構

△在本章中,咱們窺視了C語言提供的抽象層下面的東西,以瞭解機器級編程。經過讓編譯器產生機器級程序的彙編代碼表示,咱們瞭解了編譯器和它的優化能力,以及機器、數據類型和指令集。在第5章,咱們會看到,當編寫能有效映射到機器上的程序時,瞭解編譯器的特性會有所幫助。咱們還更完整地瞭解了程序如何將數據存儲在不一樣的存儲器區域中。在第12章會看到許多這樣的例子,咱們須要知道個程序變量是在運行時棧中,是在某個動態分配的數據結構中,是在某個全局存儲位置中。理解程序如何映射到機器上,會讓理解這些存儲之間的區別容易些。
機器級程序和它們的彙編代碼表示,與C程序的差異很大。在彙編語言程序中,各類數據類型之間的差異很小。程序是以指令序列來表示的,每條指令都完成一個單獨的操做。部分程序狀態,如寄存器和運行時棧,對程序員來講是直接可見的。本書僅提供了低級操做來支持數據處理和程序控制。編譯器必須用多條指令來產生和操做各類數據結構,來實現像條件、循環和過程這樣的控制結構。咱們講述了C語言和如何編譯它的許多不一樣方面。咱們看到C語言中缺少邊界檢查,使得許多程序容易出現緩衝區溢出。雖然最近的運行時系統提供了安全保護,並且編譯器幫助使得程序更安全,可是這已經使許多系統容易受到入侵者的惡意攻擊。框架

第4處理器體系結構函數

△咱們已經看到,指令集體系結構,即ISA,在處理行爲和如何實現處理器之間提供了一層抽象。ISA提供了程序執行器行爲的一種順序說明,也就是一條指令執行完了,下一條指令纔會開始。從IA32指令開始,大大簡化數據類型、地址模式和指令編碼,咱們定義了Y86指令集。獲得的ISA既有RISC指令集的屬性,也有CISC指令集的屬性。而後,將不一樣指令組織放到五個階段中處理,在此,根據被執行指令的不一樣,每一個階段中的操做也不相同。據此,咱們構造了SEQ處理器,其中每一個時鐘週期執行一條指令,它會經過全部五個階段。
流水線化經過讓不一樣的階段並行操做,改進了系統的吞吐量性能。在任意一個給定的時刻:多條指令被不一樣的階段處理。在引入這種並行性的過程當中,咱們必須很是當心,以提供與程序的順序執行相同的程序級行爲。經過從新調整SEQ各個部分的順序,引入流水線,咱們獲得SEQ+,接着添加流水線寄存器,建立出PIIE―流水線。而後,添加了轉發邏輯,加速了將結果從一條指令發送到另外一條指令,從而提升了流水線的性能。有幾種特殊狀況須要額外的流水線控制邏輯來暫停或取消一些流水線階段。
在本章中,咱們學習了有關處理器設計的幾個重要經驗:
1.管理複雜性是首要問題,想要優化使用硬件資源,在最小的成本下得到最大的性能。爲了實現這個目的,咱們建立了一個很是簡單而一致的框架,來處理全部不一樣的指令類型。有了這個框架,就可以在處理不一樣指令類型的邏輯中共享硬件單元。
2.咱們不須要直接實現ISA。它的直接實現意味着一個順序的設計。爲了得到更高的性能咱們想運用硬件能力以同時執行許多操做,這就致使要使用流水線化設計。經過仔細設計和分析,咱們可以處理各類流水線冒險,所以運行一個程序的總體效果,同用ISA模型得到的效果徹底一致。
3.硬件設計人員必須很是謹慎當心。一旦芯片製造出來,就幾乎不可能改正任何錯誤了。開始就使設計正確是很是重要的。這就意味着要仔細地分析各類指令類型和組合,甚至那些看上去沒有意義的狀況,例如彈出值到棧指針。必須用系統的模擬測試程序完全地測試設計。在開發PIPE的控制邏輯中,咱們的設計有個細微的錯誤,只有經過對控制組合的仔細而系統的分析才能發現。工具

第6存儲器層次結構

△基本存儲技術包括隨機存儲器(RAM)、非易失性存儲器(即OM)和磁盤。RAM有兩種基本類型。靜態RAM(SRAM)快一些,可是也貴一些,它既能夠用作CPU芯片上的高速緩存,也能夠用作芯片下的高速緩存。動態RAM(DRAM)慢一些,也便宜一些,用作主存和圖形幀緩衝區。非易失性存儲器,也稱爲只讀存儲器(ROM)即便是在關電的時候,也能保持它們的信息,它們用來存儲固件。旋轉磁盤是機械的非易失性存儲設備,以每一個位很低的成本保有大量的數據,可是訪問時間比DRAM更長。固態硬盤(SSD基於非易失性的閃存,愈來愈變成旋轉磁盤對某些應用的具備吸引力的替代產品。
通常而言,較快的存儲技術每一個位的價格會更高,並且容量較小。這些技術的價格和性能屬性正在以顯著不一樣的速度變化着。特別地,DRAM和磁盤訪問時間遠遠大於CPU週期時間。系統經過將存儲器組織成存儲設備的層次結構來彌補這些差別,在這個層次結構中,較小、較快的設備在頂部,較大、較慢的設備在底部。由於編寫良好的程序有好的局部性,大多數數據均可以從較高層獲得服務,結果就是存儲系統能以較高層的速度運行,但卻有較低層的成本和容量。
程序員能夠經過編寫有良好空間和時間局部性的程序來顯著地改進程序的運行時間。利用基於SRAM的高速緩存存儲器特別重要。

實驗操做

(一)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 取消行號顯示

 

本身的收穫

    第一次接觸老師的這種授課方式剛開始的時候有些不適應,畢竟本身的計算機基礎很差並且很難對計算機方面的課程產生興趣,可是仍是養成了積累按部就班的習慣,掌握了必定的計算機系統及Linux指令知識, 這本《深刻理解計算機系統》確實是本值得推薦的好書,基本上面面俱到,涉及到了目前所學習內容的方方面面,對任何一門專業課都能起到啓蒙做用。其中最大的收穫是提升實際操做能力的提升,可以將理論和實踐造成統一。

本身的不足

  • 對有的難點問題沒有一問到底,有的題只掌握了方法沒有掌握原理,在學習過程當中接受所學知識比較困難。
  • 沒有及時複習,並且並無很好地理解,看過的知識點會忘記,Linux命令尚未完全掌握。
  • 編程方面仍是有很大的問題,並且有問題問的不夠及時,若是問題堆積的話會更不容易解決。

參考資料

  1. 教材《深刻理解計算機系統》
  2. 每週測試答案解析 http://group.cnblogs.com/topic/73060.html
  3. 教材學習指導:http://group.cnblogs.com/topic/73069.html
相關文章
相關標籤/搜索