1. 程式人生 > 其它 >南京大學《作業系統》筆記(二)

南京大學《作業系統》筆記(二)

併發與並行

並行:允許多個執行流同時執行(要求多個處理器);
併發:多個執行流可以不按照一個特定的順序執行。

多工作業系統中的併發

併發性的來源:程序會呼叫作業系統的API,作業系統在併發執行兩個執行流的時候,要保證它們互不干擾,因此,對處理器和記憶體提出了要求。

處理器 記憶體 典型的併發系統 併發/並行
單處理器 共享記憶體 OS核心/多執行緒程式 併發不併行
多處理器 共享記憶體 OS核心/多執行緒程式 併發、並行
多處理器 不共享記憶體 分散式系統(訊息通訊) 併發、並行

多處理器程式設計(多執行緒程式設計)

多執行緒之間,暫存器組的值、堆疊(包括堆疊中的區域性變數)是互相獨立

的;程式碼是共享的。
在C++中,可以使用pthread_create和pthread_join得到共享程式碼、共享資料、獨立堆疊的多個執行緒。(will新開一個部落格寫)

Q1:每個執行緒的堆疊範圍和大小?
A1:每個執行緒有8MB的記憶體對映區域和前後各4KB的保護頁。

Q2:每個執行緒有8M的堆疊,那麼為什麼1000個執行緒沒有耗盡記憶體?
A2:因為雖然每個執行緒有8MB的記憶體區域,但是它們是虛擬記憶體,並且在沒有被使用的時候不會對映到實體記憶體上(Lazy allocate),因此實體記憶體的佔用並沒有那麼多。

多處理器程式設計的困難

  • 編譯器優化->順序的喪失:指令的執行不保證按照程式碼書寫的順序發生;
  • 中斷/並行->原子性的喪失:程式碼的原子性隨時被破壞;
  • 亂序執行->可見性的喪失:執行過的指令可能在多處理器之間不可見。