Outline


Execution Abstractions in Operating Systems


在作業系統中,要讓計算機知道如何運作,需要先讓開發者撰寫好程式,再將該程式載入到記憶體中,再由 Compute Unit 執行,而在 Multiple GPUs 中,這會變得更複雜,因為我們可能同時會有好幾個 CPU、GPU,甚至會是一個計算機叢集,包括了多個主機與更多 GPUs。

為了更了了計算機怎麼分配工作,我們需要了解計算機的運行流程。

Program and Job

Program

Program 是靜態的指令集合,保存在硬碟中等待執行。舉例而言,我們寫的 Python、C++ 或是編譯完成的 binary file 都是 Program。

當需要執行該 Program 時,作業系統會將 Program 交給 Memory,讓 CPU 可以存取這些指令。

Job

Job 是使用者或排程器提交給作業系統執行的單位。在執行時,它通常被視為一個程序(Process)或一系列的任務。

有了要執行的 Job,接下來該怎麼執行這個 Program 呢?

Process and Thread

Process

Process 是作業系統進行「資源分配」的最基本單位,當 Program 真正開始執行時,便成為一個Process。

一個 Process 就是一個獨立的執行環境,擁有自己獨立的記憶體空間、檔案資源和權限。

但因為 Process 擁有自己獨立的記憶體空間,造成彼此的切換成本高、共享資料困難。

User Thread