2017-2018-1 20155318 《信息安全系統設計基礎》第八週學習總結

2017-2018-1 20155318 《信息安全系統設計基礎》第八週學習總結

教材學習內容總結

學習目標

  • 掌握三種併發的方式:進程、線程、I/O多路複用
  • 掌握線程控制及相關係統調用
  • 掌握線程同步互斥及相關係統調用

教材學習

  • 客戶端-服務器編程模型
  1. 一個服務器進程 -> 管理某種資源 -> 經過操做這種資源來爲它的客戶端提供某種服務
  2. 一個或多個客戶端進程,客戶端和服務器都是進程
  • 網絡
  1. 對主機而言:網絡是一種I/O設備,經過DMA(直接存儲器存取方式)傳送:從網絡上接收到的數據從適配器通過I/O和存儲器總線拷貝到存儲器
  2. 協議:互聯網由採用不一樣技術,互不兼容的局域網和廣域網組成,並能使其相互通訊。其中不一樣網絡相互通訊的解決辦法是一層運行在每臺主機和路由器上的協議軟件,消除不一樣網絡的差別。
  3. 協議提供的兩種基本能力
    • 命名機制:惟一的標示一臺主機
    • 傳送機制:定義一種把數據位捆紮成不連續的片的同一方式
  4. CP/IP協議族:混合使用套接字接口函數和UnixI/O函數進行通訊
  5. 世界範圍的主機集合特性:
    • 主機集合被映射爲一組32位的IP地址
    • 這組IP地址被映射爲一組稱爲因特網域名的標識符
    • 因特網主機上的進程可以經過鏈接和任何其餘主機上的進程
  • Web服務器
  1. HTTP (Hypertext Transfer Protocol,超文本傳輸協議):Web 客戶端和服務器之間交互時用的一個基於文本的應用級協議。
  2. 一個 HTML 程序(頁)包含指令(標記),它們告訴瀏覽器如何顯示這頁中的各類文本和圖形對象。
  3. Web 服務器以兩種不一樣的方式向客戶端提供內容:
    取一個磁盤文件,並將它的內容返回給客戶端。磁盤文件稱爲靜態內容 (static content), 而返回文件給客戶端的過程稱爲服務靜態內容 (serving static content)。 運行一個可執行文件,並將它的輸出返回給客戶端。運行時可執行文件產生的輸出稱爲態內容 (dynamic content),而運行程序並返回它的輸出到客戶端的過程稱爲服務動態內容 (serving dynamic content)。
  • 併發
  1. 併發程序:使用應用級併發的應用程序。
  2. 三種基本構造方法:
    • 進程
    • I/O多路複用
    • 線程
  • 基於進程的併發編程
  1. 在父進程中接受客戶端鏈接請求後,建立一個新的子進程來爲每一個新客戶端提供服務。
  2. 服務器會運行較長時間,需用SIGCHLD 處理程序回收僵死 (zombie) 子進程的資源
  3. 優缺點:
    父、子進程間共享狀態信息,但不共享用戶地址空間。
    • 優勢:一個進程不可能不當心覆蓋另外一個進程的虛擬存儲器
    • 缺點:獨立的地址空間使得進程共享狀態信息變得更加困難,進程控制和 IPC 的開銷很高,速度變慢。
  • 線程
  1. 主線程:每一個進程開始生命週期時都是單一線程,在某一時刻,主線程建立一個對等線程 ,從這個時間點開始,兩個線程就併發地運行。最後,由於主線程執行一個慢速系統調用。或者由於它被系統的間隔計時器中斷, 控制就會經過上下文切換傳遞到對等線程。對等線程會執行一段時間,而後控制傳遞迴主線程,依次類推。
  2. 建立:pthread_create 函數,一個輸入變量arg,能用attr參數來改變新建立線程的默認屬性。
  3. 終止:經過調用 pthreadexit 函數,線程會顯式地終止。若是主線程調用 pthreadexit , 它會等待全部其餘對等線程終止,而後再終止主線程和整個進程,返回值爲 thread_return。
  4. 回收:線程經過調用 pthread_join 函數等待其餘線程終止,pthreadjoin 函數會阻塞,直到線程 tid 終止,將線程例程返回的 (void*) 指針賦值爲 threadreturn 指向的位置,而後回收己終止線程佔用的全部存儲器資源。
  5. 分離
  6. 初始化:pthread_once 函數
  • 一個基於線程的併發服務器
  1. 調用 pthread_ create 時,如何將已鏈接描述符傳遞給對等線程
  2. 藉助結構體能夠把全部的函數化成萬能函數的等價形式。
void *  func( void * parameter)
typedef void* (*uf)(void * para)
  1. fflush(stdout):在printf()後使用fflush(stdout)將要輸出的內容輸出。
    當使用printf()函數後,系統將內容存入輸出緩衝區,等到時間片輪轉到系統的輸出程序時,將其輸出。
  2. pthread_join()函數:以阻塞的方式等待thread指定的線程結束。
  • 讀者—寫者問題:
  1. 讀者優先,要求不讓讀者等待,除非已經把使用對象的權限賦予了一個寫者。
  2. 寫者優先,要求一旦一個寫者準備好能夠寫,它就會盡量地完成它的寫操做。
  3. 飢餓就是一個線程無限期地阻塞,沒法進展。

教材及代碼學習中的問題和解決過程

暫無html

代碼託管

代碼量截圖git

上週考試錯題總結

1. 假設用ADD指令完成C表達式t=a+b的功能,有關條件碼寄存器的說法正確的是?
答案ADF
A   .   若t==0  ,則ZF=1
B   .   若t<0, 則CF=1
C   .   若t<0, 則SF=1
D   .   若(a<0==b<0)&&(t<0 != a<0), 則OF=1
E   .   若(a<0==b<0)&&(t<0 != a<0), 則CF=1
F   .   leaq指令不影響條件碼寄存器
G   .   cmp指令不影響條件碼寄存器

2. 假設%rax中的值爲x, %rcx中的值爲y,關於leaq指令,下面正確的()AC
A   .   leaq 6(%rax), %rdx; %rdx中值爲6+x
B   .   leaq 6(%rax), %rdx; %rdx中值爲6x
C   .   leaq 7(%rax, %rax,8), %rdx; %rdx中值爲9x
D   .   leaq 7(%rax, %rax,8), %rdx; %rdx中值爲63x
E   .   leaq 7(%rax, %rax,8), %rdx; %rdx中值爲15x

3. 有關exec系列函數,下面說法正確的是()CE
A   .   能夠用char[][] 來傳遞argv
B   .   進程調用了exec系列函數後,pid會變
C   .   進程調用了exec系列函數後,代碼會改變。
D   .   system()和exec系列等價。
E   .   exec系列函數中帶e的要傳入環境變量參數
F   .   exec系列函數中帶v的要傳入環境變量參數

4. 從程序員角度看進程狀態有 ACD
A   .   運行
B   .   就緒
C   .   中止
D   .   終止

5. Unix/Linux中經過調用?能夠獲取子進程PID。D
A   .   getpid()
B   .   getppid()
C   .   getcpid()
D   .   fork()

6. 進程提供給應用程序的關鍵抽象讓咱們的程序感受獨佔了處理器和內存。()提供了獨佔處理器的假象。
A   .   地址空間
B   .   虛擬內存
C   .   邏輯控制流
D   .   指令控制流
正確答案: C  

7. 有關異常,下面說法正確的是()
A   .   系統中的異常由異常名惟一肯定
B   .   異常表中存放的是異常處理程序
C   .   異常表的起始地址存放在異常表基址寄存器中
D   .   異常處理程序運行在內核模式下
正確答案: C D

結對及互評

點評模板:

  • 博客中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 代碼中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 其餘

本週結對學習狀況

其餘(感悟、思考等)

使用多進程和多線程可大大提升代碼的運行效率。程序員

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 3/3
第二週 100/100 1/2 3/6
第三週 300/400 1/3 4/10
第四周 0/400 2/5 2/12
第五週 25/425 1/6 4/16
第六週 181/606 3/9 10/26
第七週 201/807 2/11 7/33
第八週 -(包括腳本無心義)/6719 2/13 7/40

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。編程

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法瀏覽器

  • 計劃學習時間:7小時安全

  • 實際學習時間:7小時服務器

  • 改進狀況:網絡

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)多線程

參考資料

相關文章
相關標籤/搜索