南京大學《作業系統》筆記(二)
阿新 • • 發佈:2021-11-19
併發與並行
並行:允許多個執行流同時執行(要求多個處理器);
併發:多個執行流可以不按照一個特定的順序執行。
多工作業系統中的併發
併發性的來源:程序會呼叫作業系統的API,作業系統在併發執行兩個執行流的時候,要保證它們互不干擾,因此,對處理器和記憶體提出了要求。
處理器 | 記憶體 | 典型的併發系統 | 併發/並行 |
---|---|---|---|
單處理器 | 共享記憶體 | OS核心/多執行緒程式 | 併發不併行 |
多處理器 | 共享記憶體 | OS核心/多執行緒程式 | 併發、並行 |
多處理器 | 不共享記憶體 | 分散式系統(訊息通訊) | 併發、並行 |
多處理器程式設計(多執行緒程式設計)
多執行緒之間,暫存器組的值、堆疊(包括堆疊中的區域性變數)是互相獨立
在C++中,可以使用pthread_create和pthread_join得到共享程式碼、共享資料、獨立堆疊的多個執行緒。(will新開一個部落格寫)
Q1:每個執行緒的堆疊範圍和大小?
A1:每個執行緒有8MB的記憶體對映區域和前後各4KB的保護頁。
Q2:每個執行緒有8M的堆疊,那麼為什麼1000個執行緒沒有耗盡記憶體?
A2:因為雖然每個執行緒有8MB的記憶體區域,但是它們是虛擬記憶體,並且在沒有被使用的時候不會對映到實體記憶體上(Lazy allocate),因此實體記憶體的佔用並沒有那麼多。
多處理器程式設計的困難
- 編譯器優化->順序的喪失:指令的執行不保證按照程式碼書寫的順序發生;
- 中斷/並行->原子性的喪失:程式碼的原子性隨時被破壞;
- 亂序執行->可見性的喪失:執行過的指令可能在多處理器之間不可見。