Q1. 程序與進程的概念分別是什麼?為什麼要引入“進程”的概念?
A:
1) 程序是一個普通文件,是機器代碼指令和數據的集合,這些指令和數據存儲在磁盤上的一個可執行映像中,可執行映像(executable image)就是一個可執行文件的內容;
2) 進程代表程序的執行過程,它是一個動態的實體,隨著程序中指令的執行而不斷地變化,在某個時刻進程的內容被稱為進程映像(process image);
3) 程序的執行過程可以說是一個執行環境的總和,這個執行環境除了包括程序中各種指令和數據外,還有一些額外數據;而執行環境的動態變化體現了程序的運行,為了對動態變化的過程進行描述,就引入了“進程”概念。
Q2. 什麼是進程控制塊?它包含哪些基本信息?
A:
1) Linux中把對進程的描述結構叫做task_struct,將這樣的數據結構稱作進程控制塊(PCB);
2) PCB是一個其域多達80多項的相當龐大的數據結構,按其功能將所有域劃分為:狀態信息,鏈接信息、各種標識符、進程間通信信息、時間和定時器信息、調度信息、文件系統信息、虛擬內存信息和處理器環境信息。
Q3. Linux內核的狀態有哪些?
A:
1) Linux最基本的進程狀態有三種:運行態、就緒態和阻塞態(或等待態);這三種狀態之間有四種可能的轉換關系:運行態->阻塞態、運行態->就緒態、就緒態->運行態和阻塞態->就緒態;
2) 為了管理上的方便,將就緒態和運行態合並為一個狀態—可運行態,再包括其它方面的一些改變,將進程狀態劃分為:可運行態、睡眠(或等待)態(分為深度睡眠態和淺度睡眠態)、暫停狀態和僵死狀態。
Q4. PCB的組織方式有哪幾種?
A:PCB的組織方式有:進程鏈表、散列表、可運行隊列和等待隊列。
Q5. 主要的調度算法包括哪些?一個好的調度算法要考慮哪些方面?
A:
1) 主要的調度算法包括:時間片輪轉調度算法、優先級調度算法(非搶占式優先級算法和搶占式優先級算法)、多級反饋隊列調度算法和實時調度算法;
2) 一個好的調度算法應該考慮五個方面:公平、高效、響應時間、周轉時間和吞吐量。