1.經常使用來搜索,結合管道使用。例句以下:html
man -k k1 | grep k2 | grep 2 搜索同時含有k1和k2,且屬於系統調用。linux
2.man 3 printf 即查找c語言中printf的用法。正則表達式
這條語句能夠用來查找關鍵字,全文搜索,而且能夠直接查找文件內的內容。其中:編程
n:爲顯示行號vim
r:爲遞歸查找windows
例如,若是想查找某個宏,咱們已知宏保存在include文件夾中,因此可使用下列語句:緩存
grep -nr XXX /usr/include(XXX爲所要找的宏)bash
提供顯示Linux命令使用案例網絡
cheat ls編輯器
vim是一種很是好用的編輯器,總共有六種基本模式,最經常使用的是普通模式、插入模式和命令行模式。須要熟悉這三種模式之間的切換方式:
·普通→插入: i 或 a
·插入→普通: Esc 或 Ctrl + [
·普通→命令行: :
·命令行→普通:Esc 或 Ctrl + [
·經常使用的進入、保存和退出指令:
·進入:vim 文件名
·保存:命令行模式 :w
·退出:命令行模式 :q
·經常使用動做:
刪除:dd刪除整行
複製:yy複製整行
粘貼:p
經常使用選項
-c 只編譯不連接,生成目標文件.o
-S 只編譯不彙編,生成彙編代碼
-E 只進行預編譯,不作其餘處理
-g 在可執行程序中包含標準調試信息
-o file 將file文件指定爲輸出文件
-v 打印出編譯器內部編譯各過程的命令行信息和編譯器的版本
-I dir 在頭文件的搜索路徑列表中添加dir目錄
編譯過程
·預處理:gcc –E hello.c –o hello.i; gcc –E調用cpp 生成中間文件
·編 譯: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** 建立可執行目標文件
-o後面是接的你給生成的文件指定的名字,若是不指定,則默認爲a.out
在命令行上運行這個可執行目標文件須要輸入它的名字:
./a.out 其中./表明當前目錄。
【注意:使用GCC編譯時要加「-g」參數,而後纔可以用gdb調試】
GDB最基本的命令有:
·gdb programm(啓動GDB)
·l 查看所載入的文件b 設斷點
·info b 查看斷點狀況
·run 開始運行程序
·bt 打印函數調用堆棧p 查看變量值
·c 從當前斷點繼續運行到下一個斷點
·n 單步運行(不進入)
·s 單步運行(進入)
·quit 退出GDB
四種斷點:
1.行斷點
b [行數或函數名] <條件表達式>2.函數斷點
b [函數名] <條件表達式>3.條件斷點
b [行數或函數名] <if表達式>4.臨時斷點
tbreak [行數或函數名] <條件表達式>
Makefile的通常寫法:
一個Makefile文件主要含有一系列的規則,每條規則包含如下內容:
·須要由make工具建立的目標體,一般是可執行文件和目標文件,也能夠是要執行的動做,如‘clean’;
·要建立的目標體所依賴的文件,一般是編譯目標文件所須要的其餘文件。
·建立每一個目標體時須要運行的命令,這一行必須以製表符TAB開頭
格式爲:
test(目標文件): prog.o code.o(依賴文件列表)tab(至少一個tab的位置) gcc prog.o code.o -o test(命令)
.......
即:
target: dependency_files
command
定義變量的兩種方式:
(1)遞歸展開方式 VAR=var
(2)簡單方式 VAR:=var
使用變量的格式爲: $(VAR)
做用:
·驗證是否匹配查找替換\
·特殊符號,表示後面的字符自己[ ]
·匹配其中任意字符,但每次匹配只匹配一個[^ ]
·匹配除其中的任意字符,每次匹配只匹配一個
規則:
·{n} 次數修飾,重複n次,具體以下:
·?= {0,1}
·+= {1, } *= {0, }
·{m,n}:至少爲m,至多爲n
從字符串開始的地方匹配$
從字符串結束的地方匹配|
能夠匹配左或者右
1.次數修飾中,能夠表示當作總體。
2.結果中,能夠表示單獨表示。
靜態庫:.a(linux)、.lib(windows)
動態庫:.so(linux)、.dll(windows)
建立該庫:
gcc -c addvec.c multvec.c
ar rcs libvector.a addvec.o multvec.o
涉及到的參數所作動做:
gcc -c只編譯,不鏈接成爲可執行文件。 即:把.c文件編譯成.o文件
ar -r:在庫中插入模塊(替換)
-c:建立一個庫
-s:寫入一個目錄文件索引到庫中。 即:把兩個.o文件歸檔成靜態庫存檔文件.a而且寫入目錄文件索引到庫中
建立它的可執行文件
gcc -02 -c main2.c
gcc -static -o p2 main2.o ./libvector.a
相關參數含義:
gcc -02 和-0都是代碼優化指令,能夠減小編譯時間
-c 只編譯,不鏈接成爲可執行文件
-static 告訴編譯器驅動程序,連接器應該構建一個徹底連接的可執行目標文件
-o 命名生成文件
構造建立共享庫:
gcc -shared -fPIC -o libvector.so addvec.c multvec.c
參數解析:
-fPIC 指示編譯器生成與位置無關的代碼
-shared 指示連接器建立一個共享的目標文件
-o 命名生成文件
把.c文件編譯成爲.o文件,放入新建的共享庫中,而且命名。
連接程序:
gcc -o p2 main2.c ./libvector.so
建立一個可執行目標文件p2,在運行時能夠和動態庫libverctor.so連接。
位+上下文
編譯系統
預處理器、編譯器、彙編器、連接器
核心思想:緩存
操做系統核心抽象:文件、虛存、進程、虛擬機
進制轉換:拿二進制做中間量
網絡編程基礎:字節順序
大端法:高對低,低對高
小端法:高對高,低對低
運算:
邏輯運算:結果0或1(若是對第一個參數求值就能肯定表達式的結果,那麼就不會對第二個參數求值)
位運算:結果位向量
·有無符號計算、截斷、擴展都要結合具體的練習來體會公式的使用。
·掩碼:對特定位能夠置一,能夠清零
IEEE浮點標準:
V=(-1)^s X 2^E X M 來表示一個數
符號:s決定這個數是正仍是負。
階碼:E對浮點數加權,權重是2的E次冪。
尾數:M是一個二進制小數,範圍爲1~2-ε或者0~1-ε。
舍入:
向偶舍入:將數字向上或向下舍入,結果的最低有效數字爲偶數。
能用於二進制小數。(默認)
向零舍入:把整數向下舍入,負數向上舍入。
向下舍入:正數和負數都向下舍入。
向上舍入:正數和負數都向上舍入。
通用形式:
do body-statement while(test-expr);
循環體body-statement至少執行一次。
能夠翻譯成:
loop: body-statement t = test-expr; if(t) goto loop;
即先執行循環體語句,再執行判斷。
通用形式:
while (test-expr) body-statement
GCC的方法是,使用條件分支,表示省略循環體的第一次執行:
if(!test-expr) goto done; do body-statement while(test-expr); done:
接下來:
t = test-expr; if(!t) goto done: loop: body-statement t = test-expr; if(t) goto loop; done:
歸根究底,仍是要把循環改爲do-while的樣子,而後用goto翻譯。
for循環能夠輕易的改爲while循環,因此再依照上面的方法改爲do-while再翻譯便可。
程序寄存器組是惟一能被全部過程共享的資源。
這個慣例是爲了防止一個過程P調用另外一個過程Q時寄存器中的值被覆蓋。慣例以下:
%eax,%edx,%ecx 調用者保存寄存器(Q可覆蓋,P的數據不會被破壞)
%ebx,%esi,%edi 被調用者保存寄存器(Q在覆蓋這些值前必須壓入棧並在返回前回復他們)
%ebp,%esp 慣例保持%eax用來保存返回值
棧幀結構
·棧幀——爲每個過程分配的內存空間,它包含兩個特殊的參數,棧指針和幀指針。
·棧是向低地址增加的。
·幀指針:%ebp,指向棧底。
·棧指針:%esp,指向棧頂,棧指針能夠移動,來分配或釋放空間。
·%esp減少——分配空間
·%esp增大——釋放空間
Y86指令集體系結構
halt指令、非法指令、訪問非法地址
HCL硬件控制語言
組合邏輯、存儲器元素、時針信號
表達式:
AND:&&OR:||NOT:!
Y86的順序實現
取指、譯碼、執行、訪存、寫回、更新PC
隨機訪問存儲器RAM
分類:SRAM和DRAM
特色:掉電失憶
SRAM比較DRAM
SRAM:供電不變,不刷新,抗干擾,存取快,貴
只讀存儲器ROM
分類:根據能被從新編寫次數和對其編程所用機制分
PROM:編程一次EPROM:能被擦除和重編1000次EEPROM:基於EPROM,達10^5次flash:一類非易失性存儲器
特色:非易失性
磁盤
·磁盤的容量 = 每扇區大小每磁道扇區數磁道數 2 盤片數量
· 訪問時間
T(max rotation)=1/RPM * 60secs/1min ——最大旋轉延遲時間
T(avg rotation)=1/2 * T(max rotation) ——平均延遲時間
T(avg transfer)=1/RPM * 1/(平均扇區數/磁道) * 60secs/1min ——平均傳送時間
T(access)=T(avg seek)+T(avg rotation)+T(avg transfer) ——整個估計的訪問時間
·總結:訪問一個磁盤扇區中512字節主要花在尋道時間和旋轉延遲
總線
存儲總線
·並行傳遞方式。
·指令和數據向CPU傳遞時的通道。
分三組:
·數據總線(用於傳遞數據)。
·地址總線(用於傳遞主存儲器的地址)。
·控制總線(用於各類內部控制指令的傳遞)。
·系統總線
傳送的信息包括數據信息、地址信息、控制信息。
數據總線(用於傳送數據信息)。
地址總線(用來傳送地址的地址總線的位數決定了CPU可直接尋址的內存空間大小)。
控制總線(用來傳送控制信號和時序信號)。
I/O總線:指纜線和鏈接器系統,用來傳輸I/O路徑技術指定的數據和控制信號。
參考資料:
1.教材《深刻理解計算機系統》
2.博客每週測試解析
3.小組同窗提問與老師的解析
4.20135202閆佳歆http://www.cnblogs.com/20135202yjx/p/4926597.html循環部分
總結
兩個月以來的學習,讓我天天都感到很充實,看着厚厚的教材勾勾畫畫的「摧殘」了一半多,心裏仍是挺有成就感的,雖然第一遍看都不怎麼看得懂有點打擊信心,可是經過題目,經過老師講解,經過抱着書躥來躥去的問學霸,雖然不是很紮實,但仍是收穫了不少東西。我很喜歡論壇小組答疑交流這個環節,看看你們提出的問題,給個人學習提供了不小的指導和幫助,也同時解決了一些我也存在的問題,而且節省了我去問老師問同窗的時間。
因爲沒學過彙編,對於彙編語言那一塊內容實在讓我很頭疼,而後只能花費大量的時間去學習查閱資料,可是對於代碼也僅僅是作到了大體知道是個什麼意思還達不到理解透徹。有些題目就算對着答案也仍是看得似懂非懂,路漫漫其修遠兮,在以後的學習我會盡我所能將這本書啃透。