程序運行的基礎
程序語言到機器指令的過程編程
- 1.hello.c 源程序一個文本文件,通過預處理(pre-processer)成爲hello.i
- 2.hello.i 修改的源程序,通過編譯處理(compiler) 成爲hello.s
- 3.hello.s 彙編程序,通過彙編器(assembler)成爲hello.o
- 4.hello.o 一個二進制文件+printf.o 通過連接器linker成爲可執行文件(executable) hello
操做系統數組
- 文件是對I/O設備的抽象
- 虛擬內存是對I/O設備和主存的抽象
提供了一個每一個進程都獨自使用主存的假象.
- 進程是對處理器,主存,I/O設備的抽象
處理器在進程間切換實現交錯執行的機制稱爲上下文切換
多線程和多進程sass
- 進程:
是併發執行的程序在執行過程當中分配和管理資源的基本單位.一個程序可能包含多個進程.
- 線程:
是進程的一個執行單元,是進程內可調度實體.比進程更小的獨立運行的基本單位
- 線程能夠共享資源,進程則是獨立的地址空間.
一個進程崩潰後,在保護模式下不會對其餘進程產生影響,可是一個線程崩潰整個進程都死掉。因此多進程要比多線程健壯。
- 進程切換時,消耗的資源大,效率高。
因此涉及到頻繁的切換時,使用線程要好於進程。一樣若是要求同時進行而且又要共享某些變量的併發操做,只能用線程不能用進程
機器表示和計算信息多線程
- 數據的大小(data size)
這些都是對於64-bit機器而言,64位機器
C declaration bytes
short | 2
int | 4
long | 8
char * | 8
float | 4
double | 8
程序的機器級表示併發
- the program counter called %rip
存儲下一個要執行命令的地址在內存中
- integer register file:
adresses or integer data
- condition code registers :
條件代碼寄存器,if and while statements
- vector register :
one or more integer or floating-point values.
- object dump:
對象轉儲. use objdump 能夠進行disassemblers.
- 尋址的基本操做:
immediate : 當即數尋址,register 寄存器尋址, absolute :絕對尋址,indirect :間接尋址
base+diaplacement:基址加偏移量, indexed:變址尋址,scaled indexed:比例變址尋址
信息的讀取:
注意區份內存地址和寄存器地址,以及他們的表達式及數據之間的移動
算術運算和邏輯運算
控制語句:
各類控制語句要儘量的瞭解
控制語句不要去使用goto語句,這會使程序變得很是複雜.
數組的分配和訪問spa
數組的定義
數組的名稱,數組元素大小,數組大小,起始地址,元素位置檢索
char a[12]
int c[6]
char *d[8]操作系統
array element size total size start address element i
a 1 12 \(x_{a}\) \(x_{a}+i\)
c 4 24 \(x_{c}\) \(x_{c}+4i\)
d 8 64 \(x_{d}\) \(x_{d}+8i\)線程
多維數組(二維數組)
\(T D[R][C]\)
數組元素查找
\[ & D[i][j]=x_{D}+L(C*i+j) \]code
系統層面的輸入輸出對象