多處理器調度
一般任務在處理器上的調度是通過用戶執行緒(User Thread,相對於核心執行緒 - Kernel Thread 而言)實現的。作業系統核心通過操縱調度器(Scheduler)對執行緒進行調度從而將任務映射到各個處理器上。這種調度方式一般不能滿足用戶自由安排分配任務的要求:通常需要作業系統提供一個用戶模式下的調度器來完成這個任務。調度器的任務就是儘可能合理的將任務分配和均衡到個處理器上。
任務並行涉及到的概念
同步是任務並行里涉及到最重要的任務之間通信的方法,分為進程同步(或者執行緒同步)和 數據同步。進程同步主要研究如何確定數個進程之間的執行順序和避免數據競爭(Data race condition)的問題。避免數據競爭的主要方法是在程式中設立臨界區,即一次只允許一個執行緒執行的一段代碼,通常用於保護重要的公共變數。然而也有理論研究一次允許數個執行緒執行臨界區代碼的一般情況,稱為l-exclusion問題。
就編程方法來說,保持進程間同步的主要方法有記憶體屏障(Memory barrier),互斥鎖(Mutex),信號量(Semaphore)和鎖(Lock),管程(Monitor),訊息(Message),管道(Pipe)。
數據同步則是研究如何保證在一個變數的多個副本之間保持一致性的問題。數據同步通常涉及到的話題有Cache一致性(Cache Coherence),數據複製(Data replication)等等。
數據同步和進程同步的目的是為了使程式在多處理器執行的條件下保持一定的記憶體模型。