程式設計師的自我修養 chapter 1

22
程式設計師的自我修養 連結. 載入. 程式庫 Shu-Yu Fu ([email protected])

Upload: shu-yu-fu

Post on 18-Dec-2014

6.942 views

Category:

Documents


17 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 程式設計師的自我修養 Chapter 1

程式設計師的自我修養

連結. 載入. 程式庫

Shu-Yu Fu ([email protected])

Page 2: 程式設計師的自我修養 Chapter 1

第一篇 簡介

1. Chapter 1 溫故而知新a. 從Hello World說起b. 萬變不離其宗c. 站得高,望得遠d. 作業系統的功能e. 記憶體不夠麼辦f. 團結力量大

g. 本章小結

Page 3: 程式設計師的自我修養 Chapter 1

從Hello World說起

#include <stdio.h> int main (){ printf ("Hello World\n"); return 0;} 你知道這個Hello World從編譯、靜態鏈結到作業系統如何載入程式、動態鏈結及執行階段程式庫和標準程式庫的實作嗎?

Page 4: 程式設計師的自我修養 Chapter 1

萬變不離其宗

● CPU、記憶體、I/O控制晶片

Page 5: 程式設計師的自我修養 Chapter 1

匯流排【Bus】

Page 6: 程式設計師的自我修養 Chapter 1

PCI/ISA及南北橋設計的硬體架構

Page 7: 程式設計師的自我修養 Chapter 1

SMP與多核

● CPU幾乎已經達到實體限制,4GHz● 對稱式多重處理,Symmetrical Multi-

Processing● CPU的數量和處理的速度並不成正比● 將多個處理器合併在一起,以一個處理器的外

包裝出售

Page 8: 程式設計師的自我修養 Chapter 1

站得高,望得遠

Page 9: 程式設計師的自我修養 Chapter 1

作業系統的功能

● 管理CPU、記憶體、I/O設備● CPU

○ 多重程式,Multiprogramming○ 分時系統,Time-Sharing System○ 多工系統,Multi-tasking

■ 行程,Process■ 先佔式,Preemptive

● 硬體驅動程式(Device Driver)○ 讀檔

Page 10: 程式設計師的自我修養 Chapter 1

記憶體不夠怎麼辦

● 位址空間不隔離● 記憶體使用效率低● 程式執行的位址不確定● 虛擬位址,Virtual Address

○ 分段○ 分頁

Page 11: 程式設計師的自我修養 Chapter 1

分段

Page 12: 程式設計師的自我修養 Chapter 1

分頁

● 虛擬頁,Virtual Page● 實體頁,Physical Page● 磁碟頁,Disk Page● 分頁錯誤(Page Fault)● MMU,Memory Management Unit

Page 13: 程式設計師的自我修養 Chapter 1

分頁(cont.)

Page 14: 程式設計師的自我修養 Chapter 1

團結力量大

● 緒程,Thread,有時稱為羽量級行程(Lightweight Process)

● 由緒程ID、PC、暫存器集合和堆疊組成

Page 15: 程式設計師的自我修養 Chapter 1

緒程的存取權限

Page 16: 程式設計師的自我修養 Chapter 1

緒程排程

Page 17: 程式設計師的自我修養 Chapter 1

緒程排程(cont.)

● 優先順序排程(Priority Schedule)○ 緒程優先順序(Thread Priority)

● 輪轉法(Round Robin)● 餓死(Starvation)

○ 使用者指定優先順序○ 根據進入等待狀態的頻繁程度提升或降低優先順序

■ IO密集型緒程(IO Bound Thread)■ CPU密集型緒程(CPU Bound Thread)

○ 長時間得不到執行而被提升優先順序

● 先佔(Preemption)

Page 18: 程式設計師的自我修養 Chapter 1

Linux的多緒程

● 無論緒程或行程都稱為任務(Task)● 不同的Task之間可以共用記憶體空間。怎麼知

道Task實際使用多少?● 寫時複製(Copy-on-Write)

Page 19: 程式設計師的自我修養 Chapter 1

緒程安全

● void inc_x () { x++; }● 原子(Atomic)操作,glib● Semaphore《Glib Semaphores》

○ 可以被任意緒程獲取並釋放

● Mutex《類似binary semaphore》glib○ 哪個緒程獲取了互斥器,哪個緒程就要負釋放這個鎖

● Criticsl Section● Read-Write Lock

○ Sema、Mutex、CS遇到偶爾寫入的情況,效能不彰

● Condition Variable

Page 20: 程式設計師的自我修養 Chapter 1

緒程安全(cont.)

● 可重入(Reentrant)● 過度最佳化

○ volatile(C語言中volatile關鍵字)●CPU動態排程換序,

○ 參考(《大话处理器》连载——微架构(19) 乱序执行

总结)

○ barrier防止指令交換

Page 21: 程式設計師的自我修養 Chapter 1

多緒程內部情況

Page 22: 程式設計師的自我修養 Chapter 1

本章小結

● 有夠雜的