深刻理解計算機系統

程序運行的基礎
程序語言到機器指令的過程編程

  • 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

系統層面的輸入輸出對象

相關文章
相關標籤/搜索