在未被 CPU 執行之前,程式做不了任何事。如前所述,
執行的程式稱為進程。
分時系統的使用者程式(如編譯器)就是進程,PC 的單個使用者執行的字處理程式也是進程。系統任務,如將輸出發到印表機,也可以是進程(或至少是進程的一部分)。現在,進程可以作為作業或分時系統程式,但是以後進程的概念將會更廣。
進程為了完成任務,需要一定的資源,包括 CPU 時間、記憶體、檔案、I/O 裝置等。這些資源可以在進程建立時賦予,也可以在執行進程時分配。除了建立時得到的各種物理和邏輯資源外,進程還可以接受傳輸過來的各種初始化資料(輸入)。
例如,考慮這樣一個進程,它要在終端或者螢幕上顯示檔案狀態,而且需要有一個檔名作為輸入。檔名的獲得和資訊的終端顯示,可以通過適當指令和系統呼叫來進行。當進程中止時,作業系統就會收回所有可再利用的資源。
需要強調的是,程式本身不是進程,程式是個被動實體(passive entity),如同儲存在磁碟上的檔案內容,而進程是個主動實體(active entity)。單執行緒進程有一個程式計數器(program counter),指定了下一個所要執行的指令。這樣一個進程的執行應是順序的。CPU 一個接著一個地執行進程的指令,直至進程完成。
再者,在任何時候,每個進程最多只能執行一條指令。因此,儘管兩個進程可能與同一個程式相關聯,然而這兩個進程都有各自的執行順序。多執行緒進程有多個程式計數器,每一個指向下一個給定執行緒需要執行的指令。
進程是系統的工作單元。系統由多個行程群組成,其中有的是作業系統進程(執行系統程式碼),其他的是使用者進程(執行使用者程式碼)。所有這些進程都會並行執行,例如通過在單 CPU 上採用多路複用來實現。
作業系統負責進程管理的以下活動:
-
在 CPU 上排程進程和執行緒;
-
建立和刪除使用者進程和系統進程;
-
掛起和重新啟動進程;
-
提供進程同步機制;
-
提供進程通訊機制;