20145326蔡馨熠《信息安全系統設計基礎》第八週學習總結

20145326蔡馨熤《信息安全系統設計基礎》第八週學習總結

第一章

教材內容

一、信息就是位+上下文
二、計算機系統的核心是高速緩存的概念,一層存儲器是低一層存儲器的高速緩存。
三、操做系統中的抽象是進程、文件、虛擬存儲器、虛擬機。linux

常見的Linux命令

man

man -k :程序員

經常使用來搜索,結合管道使用。例句以下:數據庫

man -k k1 | grep k2 | grep 2

搜索同時含有k1和k2,且屬於系統調用。 最後的數字意味着幫助手冊中的區段,man手冊共有8個區段,最經常使用的是123,含義以下: 1.Linux 2.系統調用 3.c語言vim

例如:咱們輸入man ls,它會在最左上角顯示「LS(1)」,在這裏,「LS」表示手冊名稱,而「(1)」表示該手冊位於第一節章,一樣,咱們輸入man ifconfig它會在最左上角顯示「IFCONFIG(8)」。也能夠這樣輸入命令:「man [章節號] 手冊名稱」。數組

man是按照手冊的章節號的順序進行搜索的,好比:緩存

man sleep

只會顯示sleep命令的手冊,若是想查看庫函數sleep,就要輸入:安全

man 3 sleep

即查找c語言中printf的用法。網絡

cheat

cheat命令:告訴你一個命令如何使用。經過使用實例告訴你一個命令如何使用。 用法:cheat 命令名tcp

find locate which whereis的用法和區別

find用法編輯器

find是查找命令,find查找磁盤空間 find的使用格式以下:   $ find <指定目錄> <指定條件> <指定動做>   - <指定目錄>: 所要搜索的目錄及其全部子目錄。默認爲當前目錄。   - <指定條件>: 所要搜索的文件的特徵。   - <指定動做>: 對搜索結果進行特定的處理。 舉例:

$ find . -type f -mmin -10

  搜索當前目錄中,全部過去10分鐘中更新過的普通文件。若是不加-type f參數,則搜索普通文件+特殊文件+目錄

locate命令

locate命令是find -name的另外一種寫法,但更快,緣由在於它不搜索具體目錄,而是搜索一個數據庫(/var/lib/locatedb),這個數據庫中含有本地全部文件信息。在使用locate以前,先使用updatedb命令,手動更新數據庫。 locate命令的使用實例:

  $ locate /etc/sh   搜索etc目錄下全部以sh開頭的文件。   $ locate ~/m   搜索用戶主目錄下,全部以m開頭的文件。  $ locate -i ~/m   搜索用戶主目錄下,全部以m開頭的文件,而且忽略大小寫。

whereis

whereis命令只能用於程序名的搜索,並且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。若是省略參數,則返回全部信息。同locate同樣,查詢數據庫(/var/lib/locatedb)文件。 whereis命令的使用實例:

 $ whereis grep

四、which

which命令的做用是,在PATH變量指定的路徑中,搜索某個系統命令的位置,而且返回第一個搜索結果。也就是說,使用which命令,就能夠看到某個系統命令是否存在,以及執行的究竟是哪個位置的命令。 which命令的使用實例:  

 $ which grep

區別

which (尋找執行檔) :這個指令是根據PATH這個環境變量所規範的路徑,去搜尋執行檔的檔名,因此,重點是找出執行檔而已,which 後面接的是完整檔名。 
whereis (尋找特定檔案):搜尋linux數據庫檔案中所記錄的東西,和locate的主要區別在於後面的參數 。
locate:搜尋linux數據庫檔案中所記錄的東西,後面直接跟檔案的部分名稱就行。 
find:直接搜索整個硬盤。

apt-cache search

經常使用使用方法

一、apt-cache show package_name: 顯示指定軟件包的信息,包括版本號,安裝狀態和包依賴關係等.

二、apt-cache search package_name:搜索軟件包,能夠按關鍵字查找軟件包,一般用於查詢的關鍵字會使用軟件包的名字或軟件包的一部分.

三、apt-cache showpkg package_name:顯示軟件包的依賴關係信息.

四、apt-cache stats:顯示當前系統所使用的數據源的統計信息,用戶可使用該命令查看數據源的相關統計信息.

五、apt-cache policy package_name:顯示軟件包的安裝狀態和版本信息.

六、apt-cache depends package_name:顯示指定軟件包所依賴的軟件包。當用戶須要瞭解某個軟件包依賴於其餘哪些包時,可使用apt-cache depends來查詢包依賴關係.

七、apt-cache rdepends package_name:查詢指定軟件包的反向依賴關係,即那些其餘的軟件包須要依賴你所指定的軟件包作爲安裝和運行的必須條件.

八、apt-cache dump:顯示緩存中的每一個軟件包的簡要描述信息.

九、apt-cache unmet:顯示不符合一致性的依賴關係.

cat

命令說明: 查看文件內容,也能夠給文件追加內容到結尾 語法:cat [-AbEnTv]

參數:

-A :至關於-vET的整合參數,能夠列出一些特殊字符,而不是空白而已
-b :列出行號,僅對非空行號顯示,空白行不標記行號 
-E :將結尾的斷行字符$顯示出來
-n :打印出行號,連同空白行也有行號,與-b參數不一樣 
-T :將[tab]按鍵以^I 顯示出來 
-v :列出一些看不出的特殊字符

touch

命令功能: touch命令參數可更改文檔或目錄的日期時間,包括存取時間和更改時間。 命令格式:

touch [選項]... 文件...

命令參數:

-a 或--time=atime或--time=access或--time=use  只更改存取時間。 -c 或--no-create  不創建任何文檔。 -d  使用指定的日期時間,而非如今的時間。 -f  此參數將忽略不予處理,僅負責解決BSD版本touch指令的兼容性問題。 -m 或--time=mtime或--time=modify  只更改變更時間。 -r  把指定文檔或目錄的日期時間,通通設成和參考文檔或目錄的日期時間相同。 -t  使用指定的日期時間,而非如今的時間。

grep

這條語句能夠用來查找關鍵字,全文搜索,而且能夠直接查找文件內的內容。其中:

n:爲顯示行號

r:爲遞歸查找

例如,若是想查找某個宏,咱們已知宏保存在include文件夾中,因此可使用下列語句:

grep -nr XXX /usr/include(XXX爲所要找的宏)

重點習題

  1. 填空:Linux Bash中,Ctrl+a快捷鍵的做用是(將光標移至輸入行頭,至關於Home鍵)。
  2. 填空:Linux中沒有C盤,D盤,其文件系統的目錄是由(FHS)標準規定好的。
  3. 判斷:Linux Bash中,cd ~ 命令能夠切換到'home'目錄。 (Ok)
  4. 判斷:Linux Bash中,強制刪除test文件的命令是(rm -f test )。
  5. 填空:Linux Bash中,查找home目錄中昨天建立的文件的命令是(find ~ -ctime 1)。
  6. 判斷:Linux Bash中,使用tar命令把home目錄打包成home.tar的命令是( tar -cf home.tar ~)
  7. 填空:Linux Bash中,zip命令使用(-e)參數能夠建立加密壓縮包。
  8. 填空:Linux Bash中,ls . | sort 命令的功能是( 顯示當前目錄內容並排序 )
  9. 填空:Linux Bash中,使用grep查找當前目錄下*.c中main函數在那個文件中的命令是( grep main *.c )
  10. 填空:Linux Bash中,使用wc統計hello.c和main.c共有幾行代碼的的命令是( wc -l hello.c main.c )
  11. 填空:Linux Bash中,把ls命令顯示當前目錄的結果存入ls.txt的命令輸出重定向命令是(ls > ls.txt)

第二章

教材內容

一、進制轉化 
(1)x=2^n轉化爲十六進制 將x寫成x=2^n的形式,令n=i+4j,x的十六進制表示爲:開頭爲2^i的值,後面補j個0。

二、字和字節順序 字長:一個字長指明整數和指針數據的標稱大小。字長決定最重要的系統參數就是虛擬地址空間的最大大小。對一個字長爲w位的機器而言,虛擬地址的範圍是0~2^w-1,程序最多訪問2^w個字節。

對於跨越多字節的程序對象需創建兩個規則:

  • 小端法:高對高,低對低
  • 大端法:從視覺上,是此次閱讀的順序,與小端法相反。

使字節順序變得可見的三種方式:

  • 不一樣類型的機器之間經過網絡傳送二進制數據時,網絡應用程序的代碼編寫必須遵照已創建的關於字節順序的規則;
  • 使用反彙編器,處理整數數據的字節序列的存儲字節順序問題;
  • 當編寫規避正常的類型系統的程序時。

三、布爾代數

(1)位向量的運算:按位運算 
(2)位向量的應用:表示有限集合 掩碼錶示的是設置爲有效信號的集合。 
(3)位級運算

  • |:或
  • &:與
  • ~:取反
  • ^:異或

掩碼運算:掩碼是一個位模式,表示從一個字中選出的位的集合。例如:位級運算x&0xFF生成一個有x的最低有效字節組成的值。

 

四、補碼編碼

補碼形式是最多見的有符號數的計算機表示方式 將字的最高有效位解釋爲負權 B2T(W)函數爲:B2T(x) = -x(w-1)2^(w-1)+∑xi2^i(求和從i=0到i=w-2)

五、有符號數和無符號數之間的轉換

負數和正數相等的狀況:u=2147483648 =-2147483648 (當輸出分別爲無符號形式和有符號形式時)

六、擴展數的位表示 零擴展:將無符號數轉換爲更大的數在表示的開頭添加0 符號擴展:將一個補碼數字轉換爲一個更大的數據類型

七、截斷數字 截斷數字:不用額外的位來擴展一個數值,而是減小表示一個數字的位數。

注意!!補碼通過截斷處理後的結果還是補碼,注意結果爲負數時轉化爲十進制數

八、使用無符號數的狀況

(1)把字僅僅看作是位的集合,並無任何數字意義時

(2)當實現模運算和多精度運算的數學包時,數字是由數的數組來表示的,無符號值也會很是有用。

九、整數運算

(1)無符號加法

(2)補碼加法

(3)補碼的非

(4)無符號乘法

兩個數x、y相乘且x、y的位數爲w,則結果的位數爲2w。

(5)補碼乘法

同無符號乘法。 若爲截斷後的結果,則取結果的後w位做爲計算結果。 注意:無符號運算和補碼運算在「+」、「-」、「」在位級上有相同的結果。

(6)乘以常數

對於某個常數K的表達式xK生成代碼,編譯器會將K的二進制表示表達爲一組0或1的交替的序列: [(0…0)(1…1)(0…0)…(1…1)] 能夠用如下兩種形式來計算這些乘積的結果:

A:(x<<n)+(x<<n-1)+……+(x<<m) 
B:(x<<n+1)-(x<<m)

注意:對於n爲最高位的狀況,B:-(x<<m)

注意!!(x<<0)的結果是x,而不是0

(7)除以2的冪 
設x/K,令K=2^n, 
當x爲正數時,計算 x>>n; 
當x爲負數時,將x加上偏置量,即加上2^n-1(即K-1),計算** (x+偏置量)>>n**。

十、浮點數

(1)二進制小數

將十進制小數轉換爲二進制小數 。 首先,將十進制小數寫成分數的形式,將分數的分子部分,寫成二進制的形式;將分數的分母部分寫成2^n的形式,將分子的二進制形式,從右往左數,數n位添加小數點。

小數點左移:除以2

小數點右移:乘以2

(2)IEEE浮點數表示

表示形式爲:V = (-1)^s * M * 2^E 
符號:s符號位。 
尾數:M是一個二進制小數,它的範圍是1 ~ 2-ε,或者是0 ~ 1-ε。 
階碼:E的做用是對浮點數據加權,這個權重是2的E次冪(多是負數)。

根據階碼的值,可分爲一下三種狀況:

  • 狀況一:規格化的值 (當階碼字段不全爲0或全爲1時)

E = e-Bias 
Bias = 2^(k-1)-1 
M = 1+f

  • 狀況二:非規格化的值 (當階碼字段全爲0時)

E = 1-Bias
Bias = 2^(k-1)-1 
M = f

  • 狀況三:特殊值 (當階碼字段全爲1時)

當小數域全爲0時, 當s=1時,爲-∞;當s=0時,爲+∞。
當小數域不全爲0時,爲NaN。

(3)浮點數的舍入

有四種狀況分別是:向偶數舍入(默認)、向零舍入、向下舍入、向上舍入。

(4)浮點運算

浮點加法:不知足結合性、知足單調性 浮點乘法:不知足結合性、知足單調性,在加法上不知足分配性

vi、gcc、gdb、make的使用

vi編輯器:編寫代碼

一、六種模式

普通模式  
插入模式:按i鍵進入,按esc鍵退出  
可視模式  
選擇模式  
命令行模式:從普通模式輸入:進入命令行模式  
Ex模式

二、遊標移動

按鍵  說明
h   左
l   右(小寫L)
j   下
k   上
w   移動到下一個單詞
b   移動到上一個單詞

三、插入

命令  說明
i   在當前光標處進行編輯
I   在行首插入
A   在行末插入
a   在光標後插入編輯
o   在當前行後插入一個新行
O   在當前行前插入一個新行
cw  替換從光標所在位置後到一個單詞結尾的字符

四、退出

命令  說明
:q! 強制退出,不保存
:q  退出
:wq!強制保存並退出
:w <文件路徑>   另存爲
:saveas 文件路徑另存爲
:x  保存並退出
:wq 保存並退出

五、刪除

命令  說明
x   刪除遊標所在的字符
X   刪除遊標所在前一個字符
Delete  同x
dd  刪除整行
dw  刪除一個單詞(不適用中文)
d$或D刪除至行尾
d^  刪除至行首
dG  刪除到文檔結尾處
d1G 刪至文檔首部

六、行間跳轉

命令  說明
nG(n Shift+g)   遊標移動到第 n 行(若是默認沒有顯示行號,請先進入命令模式,輸入:set nu以顯示行號)
gg  遊標移動到到第一行
G(Shift+g)  到最後一行

七、行內跳轉

命令  說明
w   到下一個單詞的開頭
e   到下一個單詞的結尾
b   到前一個單詞的開頭
ge  到前一個單詞的結尾
0或^ 到行頭
$   到行尾
f<字母>   向後搜索<字母>並跳轉到第一個匹配的位置(很是實用)
F<字母>   向前搜索<字母>並跳轉到第一個匹配的位置
t<字母>   向後搜索<字母>並跳轉到第一個匹配位置以前的一個字母(不經常使用)
T<字母>   向前搜索<字母>並跳轉到第一個匹配位置以後的一個字母(不經常使用)

八、複製、粘貼、剪切

命令  說明
yy  複製遊標所在的整行(3yy表示複製3行)
y^  複製至行首,或y0。不含光標所在處字符。
y$  複製至行尾。含光所在處字符。
yw  複製一個單詞。
y2w 複製兩個單詞。
yG  複製至文本末。
y1G 複製至文本開頭。

p(小寫) 粘貼至光標後(下)
P(大寫) 粘貼至光標前(上)

dd  刪除命令就是剪切

九、查找

命令  說明
/icmp   查找字符串icmp
n   查找下一個icmp
?tcp向上查找字符串tcp
N   查找上一個出現的tcp
\*  尋找遊標所在處的單詞
\#同上但 \* 是向前(上)找,\#則是向後(下)找
g\*同\*  但部分符合該單詞便可
g\#同\#  但部分符合該單詞便可

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

靜態庫

靜態庫是一系列的目標文件(.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調試器:調試代碼

  • 使用流程

查看文件:l 
設置斷點:在b後加入相對應的行號。例b 6 
查看斷點狀況:設置完斷點後鍵入info b,在gdb中能夠設置多個斷點。 bt 查詢調用函數的狀況。 
運行代碼:默認從首行開始運行代碼,鍵入r;r+行號:從該行號開始運行

查看變量值:p 變量。例:p n 
單步運行:n或s,s會進入函數,n不會進入函數 
恢復程序運行:c
注意:程序的運行狀態有「運行」、「暫停」、「中止「三種。

  • 斷點的設置

函數:b 文件名.c:函數名

行:b 行數

條件:b 行數 if 表達式(b 8 if == 10)

臨時:tb [文件名:]行號或函數名 <條件表達式>

make項目管理器

功能 :識別文件代碼是否更新,減小編譯工做量

  • makefile文件的編寫規則

格式爲:

目標體:依賴文件

[tab鍵]各目標體運行命令

目標體:由make建立,一般是目標文件或可執行文件

依賴文件:建立目標體所依賴的文件

運行命令:建立每一個目標體時須要的運行命令,必須以tab鍵開頭。

使用make的格式:make 目標體

  • makefile變量的定義

遞歸展開方式:在引用該變量時進行替換(不能用於引用本身的狀況),缺點:不能在變量後追加內容。

格式定義:VAR = var

非遞歸展開方式:在定義處展開,並只展開一次。優勢:消除變量的嵌套引用。

格式定義:VAR := var

make中變量的使用格式: $(變量名)

變量名的命名:不包括「:」、「#」、「=」以及結尾空格的任何字符串;變量名大小寫不敏感。

變量分類:用戶自定義變量、預約義變量、自動變量及環境變量。

(3)makefile規則

隱含規則

模式規則

重點習題

find 填空:查找根目錄下全部目錄的find命令是(find / -type d)

grep 填空:查找宏 STDOUTFILENO 的值的命令是(grep -nr STDOUTFILENO /usr/include)

CH07填空:Linux系統中,連接器程序是(ld)

CH07選擇:教材p449中 swap.c中的buffp1 是在(C) A .text段 B.data段 C.bss段 .symtab段

CH07 判斷:gcc –c hello.c 產生的hello.o是可重定位目標文件。(ok)

CH07 填空:(加載器)將可執行文件的內容映射到存儲器,並運行這個程序。

CH07 填空:p455 foo3.c的運行結果是x=(15212).

 

在vim中,查看printf man pages(幫助文檔)的命令是3k

編譯和運行以上代碼的命令(1分)

gcc *.c -o main (-o 後面的能夠變化,下面要一致)

./main

使用GDB調試以上代碼:編譯代碼的命令是?main.c中如何給say_hello函數設置斷點?(2分)

gcc -g *.c -o main 

b say_hello

除了main.c外,hello.c的源代碼不想給別人,如何製做一個myhello.a靜態庫?main.c如何使用myhello.a?(2分) 製做、使用各一分

gcc -c hello.c

ar rcvs libhello.a hello.c

gcc main.c -o main -L. -lhello (or gcc main.c ./libhello.a -o main)

除了main.c外,hello.c的源代碼不想給別人,如何製做一個myhello.so共享庫?main.c如何使用myhello.so?(2分)製做、使用各一分

gcc -fPIC -c hello.c

gcc -shared -o libhello.so hello.o

gcc -o main main.c -L. -lhello

libhello.so 要拷貝到/lib or /usr/lib

寫出編譯上面代碼的makefile,編譯出來的目標文件爲testhello, 只用顯式規則就能夠.(3分),一條一分

testhello: main.o hello.o 

gcc main.o hello.o -o testhello

main.o: main.c hello.h

gcc -c main.c

hello.o: hello.c hello.h

gcc -c hello.c

第三章

教材內容

一、反彙編命令 objdump -d xxx.o 
二、執行彙編命令:gcc –s xxx.c –o xxx.s
三、64位處理器獲得32代碼的命令:gcc –m32 –s xxx.c
四、jump指令:直接跳轉——後面跟標號做爲跳轉目標; 間接跳轉——*後面跟一個操做數指示符
五、傳送指令包括:數據傳送指令和條件傳送指令 
六、call指令的效果是將返回地址入棧。並跳轉到被調用過程的起始處。 
七、ret指令返回到call指令後的那條指令
八、leave指令可使棧作好返回的準備 等價於:
movl %ebp,%esp ; popl %ebp

重點習題

ch07 判斷:C語言中的全局變量能夠一次聲明,屢次定義。(X)

2.6 填空:練習2.6中整數換成12345,浮點數換成12345.0,最多時共(13)位匹配。

2.8 填空: a,b長度都是一個字節,a=6,b=15, a|b = ( 15 )

2.12 填空: 得到unsigned x的最低位字節的C表達式是(x & 0xff)

2.14 填空:a,b長度都是一個字節,a=6,b=15, a||b = ( 1,True,非零 均可以 )

2.18 填空:16位機器上,補碼0xFFFE轉化等值的十進制是( -2 )

2.19 填空:T2U4(8) = ( 8 )

2.21 判斷:C語言中: -2147483647-1 < -2147483647 ( ok )

2.23 填空:fun1(0xED005380) = ( 0x00000080 ,0x80都行 )

2.24 填空:四位數0xD 截斷爲3位數,解釋爲無符號數的截斷後值是( 5 )

2.33 填空:對於四位數補碼0xC,其補碼的非表示爲十進制爲( 4 )

2.34 填空:三位數補碼乘法(截斷值): [100] * [111] = ( [100] 或-4 )

2.40 填空:K=30 移位2,加/減1,表達式爲( (x<<5)-(x<<2) )

2.45 填空:二進制小數1.11轉化爲十進制爲( 1.75 )

2.47 判斷:浮點數 00110轉化爲十進制爲1.5 ( ok )

2.50 填空:二進制數0.111舍入到最接近的二分之一的十進制的值爲( 1 )

第四章

 

教材內容

一、指令體系結構:一個處理器支持的指令和指令的字節級編碼
二、程序員可見狀態:8個寄存器狀態、程序計數器PC。 
三、指令集的一個重要性質:字節編碼必須有惟一的解釋。 
四、建立Y86代碼的惟一工具是彙編器 ;YIS:指令集模擬器 五、pushl指令會把棧指針減4,而且將一個寄存器值寫入存儲器中。 
五、取址階段包括指令存儲器硬件單元。 instrvalid:指示指令是否合法; needregids:指示是否包括一個寄存器指示符字節; need_valC:指示是否包括一個常數字; instrvalid和imemerror在訪存階段被用來產生狀態碼。
六、「cond」硬件單元會根據條件碼和功能碼來肯定是否進行條件分支或者條件數據傳送。

重點習題

Linux 判斷:zip程序能夠壓縮也能夠解壓文件。(X)

3.1 填空: 針對練習3.1中的圖,操做數 2(%eax,%edx,2)的值是(0x13)

CH03 填空: 把當即數0x4050複製到%eax的指令是( movl $0x4050 ,%eax )

CH03 判斷: %ebp的值爲0x10c, pushl %eax後,%ebp的值爲0x108. (x)

3.5 填空:從彙編代碼看出,decode1的參數先入棧的是(zp)

3.6 填空: 指令leal 8(%ecx,%eax,2), %edx 存儲在%edx中的值爲( 8+2x+y )

CH03 填空: jz/jnz指令中跳轉條件是由(ZF)決定的。

CH03 選擇:爲單個過程(函數)分配的那部分棧叫(棧幀)

CH03 填空:Linux彙編中,銷燬棧幀的語句是(movl %ebp,%esp popl %ebp 或leave)

CH03 填空:Linux彙編中,須要調用者保存的寄存器有(%eax,%edx,%ecx )。

CH03 填空:GDB中以16進制形式打印%eax中內容的命令是(print /x $eax)

第六章

教材內容

一、計算磁盤容量的公式:
磁盤容量 = 字節數/扇區 X 平均磁盤數/磁道 X 磁道數/表面 X 表面數/盤片 X 盤片數/磁盤


二、訪問時間=尋道時間+旋轉時間+傳送時間 


三、最大旋轉延遲=1/RPM X 60secs/1min (s) ;平均旋轉時間是最大旋轉時間的一半

 


四、緩存不命中的種類

冷緩存(強制不命中\冷不命中):一個空的緩存,對於有效位爲0的狀況 ; 
容量不命中:當工做集的大小超過緩存的大小時;

衝突不命中:限制性的放置策略會引發的一種不命中。
五、每一個存儲器地址有m位,造成M=2^m個不一樣的地址; 高速緩存組:S = 2^m個高速緩存組的數組 ; 高速緩存行:B = 2^m字節的數據塊組成 ; 有效位:指明這個行是否包含有意義的信息; 標記位:惟一地標識存儲在這個高速緩存行中的塊,t = m -(b+s)

六、高速緩存參數的性能影響
緩存大小的影響;塊大小的影響;相聯度的影響;寫策略的影響

重點習題

填空:解開sim.tar的Linux命令是(tar -xvf sim.tar)

填空:Ubuntu中安裝flex的命令是(sudo apt-get install flex)

4.2 Y86中 5054fdffffff 對應的彙編語句是( mrmovl –3(%esp), %ebp )

CH04 填空:與、或、非三種邏輯門能夠用一種門(與非門, 或者 或非門)實現。

4.8 填空:位級與非門的HCL表達式是( bool Y = !(A&&B) )

CH04 填空:HCL表達式a||!a的值是( 1 )

CH04 填空:下圖對應的HCL描述是( bool eq=(a&&b)||(!a&&!b) )

CH04 填空:HCL中,多路複用函數使用(狀況表達式)來描述。

CH04 判斷:ALU是一種時序電路。(X)

CH04 填空:bool s= r==1 || r==2 || r=5 等價於(bool s = r in {1,2,5} )

CH04判斷:寄存器是一種時序電路。(X)

第七章

教材內容

一、c語言程序執行的過程涉及的工具:c預處理器(cpp)、編譯器(cc1)、彙編器(as)、連接器程序(ld) 
二、連接器的任務:符號解析、重定位
三、目標文件的三種形式:可重定位目標文件、可執行目標文件、共享目標文件
四、目標文件的格式:a.out、COFF、DE、ELF
五、連接器上下文的三種符號:全局符號、外部符號、本地符號

重點習題

CH06 判斷:SRAM和DRAM掉電後均沒法保存裏面的內容。( ok )

CH06 填空:對磁盤扇區的訪問時間包括三個部分中,(傳送時間)最小。

6.3 填空:題目的最大旋轉時間是( 4ms )。

CH06 判斷:邏輯磁盤塊就是一個塊數組。( ok )

CH06 判斷:P403兩個程序功能等價,性能上不一樣。( ok )

6.8 填空:代碼的步長爲:( N*N )

CH06 填空:LRU策略指的是替換策略的緩存會選擇(最後被訪問時間距如今最遠的塊)。

CH06 判斷:發生不命中要執行(放置)策略。

CH06 填空:存儲層次結構的本質是每一層存儲設備都是較低一層的(緩存)。

6.10 填空:高速緩存容量爲2048,高速緩存結構爲(( 32 ),8,8,32)

CH06 填空:程序員能夠編寫(有良好空間和時間局部性)的程序來顯著改進程序的運行時間。

CH06 填空:存儲器給出的讀訪問時間是(局部性)的一個函數。

新學到的知識點

1.通配符是一種特殊語句,主要有星號(*)和問號(?),用來對對字符串進行模糊匹配
(好比文件名,參數名)。當查找文件夾時,可使用它來代替一個或多個真正字符;
當不知道真正字符或者懶得輸入完整名字時,經常使用通配符代替一個或多個真正的字符。

Shell 經常使用通配符:

字符含義

  • 匹配 0 或多個字符
    ? 匹配任意一個字符
    [list] 匹配 list 中的任意單一字符
    [!list] 匹配 除list 中的任意單一字符之外的字符
    [c1-c2] 匹配 c1-c2 中的任意單一字符 如:[0-9] [a-z]
    {string1,string2,...} 匹配 sring1 或 string2 (或更多)其一字符串
    {c1..c2} 匹配 c1-c2 中所有字符 如{1..10}

2.使用 pwd 獲取當前路徑
絕對路徑,簡單地說就是以根"/"目錄爲起點的完整路徑,以你所要到的目錄爲終點,表現形式如: /usr/local/bin。
相對路徑,也就是相對於你當前的目錄的路徑,相對路徑是以當前目錄 . 爲起點,以你所要到的目錄爲終點。
使用 -p 參數,同時建立父目錄。
要成功複製目錄須要加上-r或者-R參數,表示遞歸複製 跟複製目錄同樣,要刪除一個目錄,也須要加上-r或-R參數。

將文件"file1"重命名爲"myfile" mv 舊的文件名 新的文件名

3.locate經過數據庫查找,不過這個數據庫也不是實時更新的,系統會使用定時任務天天自動執行updatedb命令更新一次

4.find命令:
與時間相關的命令參數:
-atime 最後訪問時間
-ctime 建立時間
-mtime 最後修改時間

-mtime n: n 爲數字,表示爲在n天以前的」一天以內「修改過的文件  
-mtime +n: 列出在n天以前(不包含n天自己)被修改過的文件  
-mtime -n: 列出在n天以內(包含n天自己)被修改過的文件  
newer file: file爲一個已存在的文件,列出比file還要新的文件名

5.du 命令查看目錄的容量 加上-h參數,以更易讀的方式展現 -d參數指定查看目錄的深度
例: du -h -d 1 ~

 

收穫

  • 站在全局的角度,從新理解計算機系統。從新複習了計算機導論、彙編、c語言的相關知識,感受本身對知識的理解有了更深的認識。

  • 學習了linux的相關命令,這能夠說是元知識,可是,我學習的不太紮實,若是能夠常用,可能會掌握的更熟練。

  • 學習了vim、gcc、gdb、makefile等工具,這樣能夠爲以後的學習打下紮實的基礎。(後來我發現gdb在緩衝區漏洞攻擊中也有很大的做用)

  • 瞭解計算機如何將高級語言轉換爲低級語言,就是彙編語言,又把低級語言轉化成立機器語言,也就是01代碼,在第四章的學習中,我經過學習Y86系統,對計算機的工做原理有了深入的認識。

  • 掌握了自學的方法,也學會了本身解決遇到的問題,這多是除了知識之外最大的收穫。不得不認可,婁老師獨特的教學方式起了很大做用。最開始不習慣,本身也比較懶散,遇到難題就想着等老師講,老師不講就算了。這是很是很差的,學習應該強調主動性。目前學習的知識可能不會一直伴隨咱們,可是掌握一套好的,適合本身的學習方法,將會受益終生!

不足

  • 第一週因爲當時在電子實習,而且參加了一些活動,教材和相關學習資源只是囫圇吞棗的看了一下,因此我剛開始基礎沒打好,學得比較累,也沒有效率。

  • 對學習過的內容沒有進行復習,只是學一遍,沒有作到把書看不少遍,因此理解還只是很淺層,但有以前課程的基礎,還不至於看不懂,可是更深刻的部分,也不能熟練掌握。

  • 有時候有一些擴展資料,沒有好好閱讀,就是把它當小說看了,也沒太過腦子。

  • 其實仍是應該一步一個腳印慢慢來,就好比說第一週的linux基礎的學習,當時爲了按時完成任務,看的很浮躁,固然也很快,看完了一遍後,心裏以爲已經看過了,以後就不會想再看一遍,心態仍是太浮躁,沒有提升學習的效率,也沒有激發學習的主動性。不過在調整本身後,效果慢慢又好起來了。

  • 到如今,我真的以爲。心態是最大的問題,只要想學,沒有什麼學不懂的。最開始以爲學習內容又多又難,態度也不端正,因此學習效率不高。其實仔細一想,真的不難,婁老師把每週的學習重點都放在博客裏了,平時遇到的各類難題,婁老師也都有解答或者發表博客來更細緻的解決同窗們遇到的疑惑。能夠說是面面俱到啊。 我慢慢的調整本身的狀態,靜下心來去看教材,去理解教材,而後本身動手實踐! step by step~效果仍是有很大的提高。因此嘛,仍是態度決定一切。萬事開頭難,可是有了一個好的開頭後,就成功一半了。

課程建議和意見

我如今對這門課頗有激情,平時婁老師說的那些項目,我也都想參與作一作,但自身實力有限,因此不敢報名。感受婁老師那裏有不少經驗和技術,但願老師上課能夠多講一些實用的技巧與知識,就算掌握不了,也讓咱們開開眼界,我以爲無形之中確定仍是能提高能力的。畢竟信息安全專業的學生,之後出去不想太丟臉。我以爲老師以前讓咱們看的課本相關知識,真的就只是皮毛部分,咱們目前只是在瞭解這些知識,但毫不是深刻透徹的理解。這還怎麼學以至用呢,固然每一個同窗的實際狀況不同,老師仍是得照顧大部分人。有的人想學東西,而更多人想混分。但願老師權衡一下吧,我也會多花時間與精力的~!

 

 代碼託管

 (本週沒有託管的代碼)

 

學習進度條

 

  代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時  
第一週 0/0 1/2 20/20 學習了一些Linux命令
第二週 58/58 1/3 20/40 學會了如何使用vi,gcc,gdb
第三週 150/208 1/4 22/62 對信息的表示和處理有更深刻的理解
第五週 150/358 1/5 21/83 對彙編語言有更深入的理解
第六週 136/494 1/6 25/108 安裝Y86模擬器
第七週 115/609 2/8 24/132 理解了存儲器層次結構和局部性原理
第八週 0/609 2/10 22/154 期中總結
相關文章
相關標籤/搜索