20145240 《資訊安全系統設計基礎》期中總結
自己新學到的知識點總結
Linux指令
1.man指令
- man -k:
常用來搜尋,結合管道使用。例句如下:
man -k k1 | grep k2 | grep 2
搜尋同時含有k1和k2,且屬于系統調用。
最後的數字意味着幫助手冊中的區段,man手冊共有8個區段,最常用的是123,含義如下: 1.Linux 2.系統調用 3.c語言
- eg:我們輸入 man ls,它會在最左上角顯示“LS(1)”,在這裡,“LS”表示手冊名稱,而“(1)”表示該手冊位于第一節章,同樣,我們輸入“man ifconfig”它會在最左上角顯示“IFCONFIG(8)”。也可以這樣輸入指令:“man [章節号] 手冊名稱”。

2.find用法
-
的使用格式如下:find
$ find <指定目錄> <指定條件> <指定動作> - <指定目錄>: 所要搜尋的目錄及其所有子目錄。預設為目前目錄。 - <指定條件>: 所要搜尋的檔案的特征。 - <指定動作>: 對搜尋結果進行特定的處理。
eg:
$ find . -type f -mmin -10
搜尋目前目錄中,所有過去10分鐘中更新過的普通檔案。如果不加-type f參數,則搜尋普通檔案+特殊檔案+目錄
3.locate指令
locate
指令是
find -name
的另一種寫法,但更快,原因在于它不搜尋具體目錄,而是搜尋一個資料庫(/var/lib/locatedb),這個資料庫中含有本地所有檔案資訊。
在使用locate之前,先使用updatedb指令,手動更新資料庫。
locate指令的使用執行個體:
$ locate /etc/sh
搜尋etc目錄下所有以sh開頭的檔案。
$ locate ~/m
搜尋使用者主目錄下,所有以m開頭的檔案。
$ locate -i ~/m
搜尋使用者主目錄下,所有以m開頭的檔案,并且忽略大小寫。
5.grep
這條語句可以用來查找關鍵字,全文搜尋,并且可以直接查找檔案内的内容。其中:
n:為顯示行号
r:為遞歸查找
例如,如果想查找某個宏,我們已知宏儲存在include檔案夾中,是以可以使用下列語句:
grep -nr XXX /usr/include(XXX為所要找的宏)
6.which
which指令的作用是,在PATH變量指定的路徑中,搜尋某個系統指令的位置,并且傳回第一個搜尋結果。也就是說,使用which指令,就可以看到某個系統指令是否存在,以及執行的到底是哪一個位置的指令。
- which指令的使用執行個體:
$ which grep
- 差別
which (尋找執行檔) :這個指令是根據PATH這個環境變量所規範的路徑,去搜尋執行檔的檔名,是以,重點是找出執行檔而已,which 後面接的是完整檔名 whereis (尋找特定檔案):搜尋linux資料庫檔案中所記錄的東西,和locate的主要差別在于後面的參數 locate:搜尋linux資料庫檔案中所記錄的東西,後面直接跟檔案的部分名稱就行 find:直接搜尋整個硬碟
7.cheat
cheat指令:告訴你一個指令如何使用。通過使用執行個體告訴你一個指令如何使用。
用法:cheat 指令名
8.touch
-
指令功能:
touch指令參數可更改文檔或目錄的日期時間,包括存取時間和更改時間。
- 指令格式:
touch [選項]... 檔案...
- 指令參數:
-a 或--time=atime或--time=access或--time=use 隻更改存取時間。 -c 或--no-create 不建立任何文檔。 -d 使用指定的日期時間,而非現在的時間。 -f 此參數将忽略不予處理,僅負責解決BSD版本touch指令的相容性問題。 -m 或--time=mtime或--time=modify 隻更改變動時間。 -r 把指定文檔或目錄的日期時間,統統設成和參考文檔或目錄的日期時間相同。 -t 使用指定的日期時間,而非現在的時間。
正規表達式
-
‘多種字元’ 表達式:正規表達式中的一些表示方法,可以比對 '多種字元 ' 其中的任意一個字表達符式。
規則:
\d 0~9 中的任意一個數字
\w 任一字母或數字或下劃線,即A~Z、a~z、0~9、_中任一個
\s 包括空格、制表符、換頁符等空白字元中任意一個
. 比對除換行符( \n)以外任意一個字元
[ ] 比對其中任意字元,但每次比對隻比對一個
[^ ] 比對除其中的任意字元,每次比對隻比對一個
vi、 gcc、gdb、make的使用
- vim編輯器:編寫代碼
- gcc編譯連結器:編譯程式
預處理:gcc –E hello.c –o hello.i ;gcc –E調用cpp 産生預處理過的C原始程式 編 譯:gcc –S hello.i –o hello.s ;gcc –S調用ccl 産生彙編語言原始程式 彙 編:gcc –c hello.s –o hello.o ;gcc -c 調用as 産生目标檔案 鍊 接:gcc hello.o –o hello ;gcc -o 調用ld 産生可執行檔案 運作: ./hello
- 注意:
gcc的一般格式為:
gcc [選項] 要編譯的檔案 [選項] [目标檔案]
其中,目标檔案可預設,gcc預設生成可執行的檔案,名為編譯檔案.out.
- gcc連接配接器将目标檔案連結為一個可執行檔案
- gcc編譯子產品化的程式
- 靜态庫
靜态庫是一系列的目标檔案(.o檔案)的歸檔檔案((lib+name).a文 件);連結階段,選擇靜态庫,字尾名為“.a”;選擇動态庫,字尾名為“.so”。
靜态連結庫的生成:
gcc -c 檔案名.c ar rcsv libxxx.a xxx.o
靜态庫的使用:
gcc -o 檔案名 檔案名.c -L. -lxxx //連結到靜态庫
注意:-L :在庫檔案的搜尋路徑清單中添加dir目錄
-l : 在頭檔案的搜尋路徑清單中添加dir目錄
- 共享庫
共享庫的生成
gcc -fPIC -c xxx.c
gcc -shared -o libxxx.so xxx.o
共享庫的使用:
gcc -o main main.c -L. -lxxx
注冊共享庫的方法
将庫檔案直接複制到/lib或者/usr/lib目錄下:
cp (lib+name).so /lib
- gdb調試器:調試代碼
(1)使用流程
檢視檔案:l
設定斷點:在b後加入相對應的行号。例b 6
檢視斷點情況:設定完斷點後鍵入info b,在gdb中可以設定多個斷點。bt 查詢調用函數的情況。
運作代碼:預設從首行開始運作代碼,鍵入r;r+行号:從該行号開始運作 檢視變量值:p 變量。例:p n
單步運作:n或s,s會進入函數,n不會進入函數
恢複程式運作:c
注意:程式的運作狀态有“運作”、“暫停”、“停止“三種。
(2)斷點的設定
函數:b 檔案名.c:函數名
行:b 行數
條件:b 行數 if 表達式(b 8 if == 10)
臨時:tb [檔案名:]行号或函數名 <條件表達式>
make項目管理器
功能 :識别檔案代碼是否更新,減少編譯工作量
- make項目管理器
功能 :識别檔案代碼是否更新,減少編譯工作量
(1)makefile檔案的編寫規則
格式為:
目标體:依賴檔案
[tab鍵]各目标體運作指令
目标體:由make建立,通常是目标檔案或可執行檔案
依賴檔案:建立目标體所依賴的檔案
運作指令:建立每個目标體時需要的運作指令,必須以tab鍵開頭。
使用make的格式:make 目标體
(2)makefile變量的定義
遞歸展開方式:在引用該變量時進行替換(不能用于引用自己的情況),缺點:不能在變量後追加内容。
格式定義:VAR = var
非遞歸展開方式:在定義處展開,并隻展開一次。優點:消除變量的嵌套引用。
格式定義:VAR := var
make中變量的使用格式: $(變量名)
變量名的命名:不包括“:”、“#”、“=”以及結尾空格的任何字元串;變量名大小寫不敏感。
變量分類:使用者自定義變量、預定義變量、自動變量及環境變量。
(3)makefile規則
隐含規則
模式規則
教材内容
第一章
1、資訊就是位+上下文
2、計算機系統的核心是高速緩存的概念,一層存儲器是低一層存儲器的高速緩存。
3、作業系統中的抽象是程序、檔案、虛拟存儲器、虛拟機。
第二章
1、數字的三種表示 :無符号數、有符号數、浮點數
2、進制轉化
eg:x=2^n轉化為十六進制
将x寫成x=2^n的形式,令n=i+4j,x的十六進制表示為:開頭為2^i的值,後面補j個0。
3、字和位元組順序
字長:一個字長指明整數和指針資料的标稱大小。字長決定最重要的系統參數就是虛拟位址空間的最大大小。對一個字長為w位的機器而言,虛拟位址的範圍是0~2^w-1,程式最多通路2^w個位元組。
對于跨越多位元組的程式對象需建立兩個規則:
小端法:高對高,低對低
大端法:從視覺上,是這次閱讀的順序,與小端法相反。
4、布爾代數
(1)位向量的運算:按位運算
(2)位向量的應用:表示有限集合
掩碼表示的是設定為有效信号的集合。
(3)位級運算
|:或
&:與
~:取反
^:異或
掩碼運算:掩碼是一個位模式,表示從一個字中選出的位的集合。例如:位級運算x&0xFF生成一個有x的最低有效位元組組成的值。
(4)邏輯運算
邏輯運算符:||(或)、&&(與)、!(非)
(5)移位運算 右移包括:邏輯右移、算數右移
邏輯右移:左端補k個0(常用于無符号數)
算數右移:左端補k個最高有效位的值(用于有符号數)
5、補碼編碼
補碼形式是最常見的有符号數的計算機表示方式 将字的最高有效位解釋為負權 B2T(W)函數為:
B2T(x) = -x(w-1)2^(w-1)+∑xi2^i(求和從i=0到i=w-2)
6、有符号數和無符号數之間的轉換
負數和正數相等的情況:
u=2147483648 =-2147483648
(當輸出分别為無符号形式和有符号形式時)
7、擴充數的位表示
零擴充:将無符号數轉換為更大的數在表示的開頭添加0
符号擴充:将一個補碼數字轉換為一個更大的資料類型
8、截斷數字
截斷數字:不用額外的位來擴充一個數值,而是減少表示一個數字的位數。
注意!!補碼經過截斷處理後的結果仍是補碼,注意結果為負數時轉化為十進制數
第三章
1、反彙編指令
objdump -d xxx.o
2、執行彙編指令:
gcc –s xxx.c –o xxx.s
3、64位處理器得到32代碼的指令:
gcc –m32 –s xxx.c
4、三種操作數:立即數、寄存器、存儲器
5、條件碼 : CF:進位标志 ZF:零标志 SF:符号标志 OF:溢出标志
6、jump指令:直接跳轉——後面跟标号作為跳轉目标; 間接跳轉——*後面跟一個操作數訓示符
7、傳送指令包括:資料傳送指令和條件傳送指令
8、call指令的效果是将傳回位址入棧。并跳轉到被調用過程的起始處。
9、ret指令傳回到call指令後的那條指令
10、leave指令可以使棧做好傳回的準備 等價于:
movl %ebp,%esp ; popl %ebp
第四章
1、指令體系結構:一個處理器支援的指令和指令的位元組級編碼
2、程式員可見狀态:8個寄存器狀态、程式計數器PC。
3、指令集的一個重要性質:位元組編碼必須有唯一的解釋。
4、Y86異常:狀态碼1,AOK,程式正常; 狀态碼2,HLT,處理處執行halt指令; 狀态碼3,ADR,非法位址;狀态碼4,INS,非法指令。
5、建立Y86代碼的唯一工具是彙編器 ;YIS:指令集模拟器 6、pushl指令會把棧指針減4,并且将一個寄存器值寫入存儲器中。
7、SEQ執行處理一條完整指令的步驟:取址、譯碼、執行、訪存、寫回、更新
8、nop指令:除了将PC加1,不進行任何處理; halt指令:将處理器狀态設定為HLT,導緻處理器停止運作。
9、取址階段包括指令存儲器硬體單元。
instrvalid:訓示指令是否合法 needregids:訓示是否包括一個寄存器訓示符位元組 need_valC:訓示是否包括一個常數字 instrvalid和imemerror在訪存階段被用來産生狀态碼。
10、“cond”硬體單元會根據條件碼和功能碼來确定是否進行條件分支或者條件資料傳送。
第六章
1、随機通路存儲器分為:靜态的SRAM、動态的DRAM
2、根據攜帶信号不同,總線可分為資料總線、位址總線、控制總線。
3、計算磁盤容量的公式
磁盤容量 = 位元組數/扇區 X 平均磁盤數/磁道 X 磁道數/表面 X 表面數/盤片 X 盤片數/磁盤
4、通路時間=尋道時間+旋轉時間+傳送時間
5、
最大旋轉延遲=1/RPM X 60secs/1min (s)
;平均旋轉時間是最大旋轉時間的一半
6、平均傳送時間=
1/RPM x 1/(平均扇區數/磁道) x 60s/1min
7、邏輯磁盤塊三元組(盤面,磁道,扇區):唯一地标示了對應的實體扇區
8、CPU使用一種稱為存儲器映射I/O的技術來向I/O裝置發出指令。
9、局部性包括時間局部性和空間局部性。
10、循環有好的時間和空間局部性
11、高速緩存:上一層做下一層的高速緩存
12、緩存不命中的種類
冷緩存(強制不命中\冷不命中):一個空的緩存,對于有效位為0的情況 ; 容量不命中:當工作集的大小超過緩存的大小時;沖突不命中:限制性的放置政策會引起的一種不命中。
13、每個存儲器位址有m位,形成M=2^m個不同的位址; 高速緩存組:S = 2^m個高速緩存組的數組 ; 高速緩存行:B = 2^m位元組的資料塊組成 ; 有效位:指明這個行是否包含有意義的資訊; 标記位:唯一地辨別存儲在這個高速緩存行中的塊,
t = m -(b+s)
14、高速緩存參數的性能影響
緩存大小的影響;塊大小的影響;相聯度的影響;寫政策的影響
第七章
1、c語言程式執行的過程涉及的工具:c預處理器(cpp)、編譯器(cc1)、彙編器(as)、連結器程式(ld)
2、連結器的任務:符号解析、重定位
3、目标檔案的三種形式:可重定位目标檔案、可執行目标檔案、共享目标檔案
4、目标檔案的格式:a.out、COFF、DE、ELF
5、連結器上下文的三種符号:全局符号、外部符号、本地符号
自己的收獲
通過八周的學習,對linux的學習從一開始的迷茫到現在能去了解課本的具體内容,老師每周圈出的練習題對學習每個章節十分有用,自己也在努力做到能夠解決每一道課後習題,隻要用心學就會發現沒有自己想象的那麼難。而且我覺得越往後學習,就會越發現前面的知識的重要性,而且此次期中總結,給了我們一個機會,讓我們系統的回顧一下前幾周的學習内容,之前學習的地方當時可能不懂,而且老師沒考到,或者不清楚具體在幹什麼,就這麼過去了,但是我覺得這個周我将那些知識又重新在腦海裡整理了一遍,會發現,原來有些内容的本質是什麼,不再單純的跟着實驗指導,而是學會了思考每一步的意義,希望自己以後能主動做到這一點,将會對學習十分有幫助。
自己的不足
有的時候還是習慣将部落格拖到周天,老師周一發送了學習任務甚至到周三周四才開始看,是以學習的時間很緊張,希望自己以後從周一開始就投身于本周任務的學習,而且沉澱一周的學習将會比短短一兩天的學習更有效,前一天學的知識,可能當第二天自己再回顧的時候才能有更深的了解,這樣對知識的記憶也将更牢固,有助于我們系統的了解整個課程。
建議
我認為前兩周的任務量過大,實驗樓中linux課程學習的實驗有17節,需要一周學完,而且學完之後說實話我沒有很好的了解,是後面幾個周用到前面的知識的時候又回頭重新學習了一遍,感覺效率有點低如果一次學習那麼多。
學習進度條
代碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小時 |
第一周 | 200/200 | 1/2 | 20/20 |
第二周 | 300/500 | 1/3 | 18/38 |
第三周 | 150/650 | 1/4 | 20/58 |
第四周 | 200/850 | 1/5 | 22/80 |
第五周 | 200/1050 | 1/6 | 24/104 |
第六周 | 220/1270 | 1/7 | 25/129 |
第七周 | 150/1300 | 1/8 | 20/149 |
第八周 | 50/1350 | 2/10 | 21/170 |
參考資料
- 《深入了解計算機系統V2》學習指導
- ...
轉載于:https://www.cnblogs.com/20145240lsj/p/6034246.html