操作系統——進程9問

買了本《現代操作系統》,前面的介紹部分直接略過,在回家的路上直接從進程開始看。對併發、多道程序設計有了初步的瞭解,在此將心得稍微寫一下。


1、什麼是進程?

進程是正在運行程序的一個實例,可以把他比作計算機正在做的某一件事情。


2、什麼是併發?

在單核CPU中,實現真正的併發是不可能的,因爲在一個時間片裏,CPU只能運行一個進程。就好比,你不可能同時做飯,同時看書。那麼所謂的併發是什麼呢?能實現“併發”是因爲CPU的運轉速度是非常快的,所以進程間來回切換速度是異常迅速的,速度快到人感覺他們是同時運行的,並沒有切換。當然,對於多核CPU來說,併發就不是一回事情了,但是每一個核每次還是隻能運行一個進程。


3、進程和程序有什麼不同?

進程和程序的區別很微妙。進程包含了輸入數據,程序和輸出數據,可以說進程和程序是一個真包含的關係。程序是告訴一個進程該怎麼運行的一個邏輯描述,進程則是實現輸入數據在程序中的執行後的輸出,這樣一整個過程。書中的比喻是做蛋糕:程序相當於是食譜,輸入數據就是做蛋糕的原材料,CPU是做蛋糕的人,進程就是實現做蛋糕這一整件事情的動作總和。


4、什麼是前臺進程和後臺進程?

與人類進行交互的進程稱爲前臺進程(辦公軟件、遊戲),停留在後臺處理如電郵、WEB頁面、新聞、打印的進程稱爲後臺進程,也稱作守護進程。


5、進程的狀態有哪幾種?

運行態——進程實際佔用着CPU;

就緒態——準備運行的進程,但是因爲其他進程佔用着CPU,所以暫時被掛起;

阻塞態——除非某種外部事件發生,否則不能運行(比如需要輸入數據才能運行的進程);


6、進程之間的切換是怎麼控制的?

有一個叫做進程調度程序的程序(-__-),他是操作系統的一部分,如果系統認爲一個進程佔用CPU的時間過長,那麼他會選擇讓另一個進程開始運行。進程調度程序的調度標準主要從整體效率和競爭公平性中去權衡。進程調度程序的層次結構在普通進程之下。


7、進程是用什麼數據結構實現的?

操作系統中有維護着一張表格(書上說的是:結構數組。估計就是個指針實現的動態數組,或者有指定大小的靜態數組),這個表格有個名字:進程表,每個進程佔用着表格中的一個表項。


8、進程在切換時底層是如何實現的?(微機接口沒學好,這段就不是很理解了,真傷不起啊)

當一個磁盤中斷髮生時,中斷硬件將程序計數器、程序狀態字、有時還有一個或多個寄存器壓入堆棧,計算機隨即跳轉到中斷向量指向的地址。這些操作都是由彙編語言實現的。這一部分還有待進一步研究……


9、什麼是多道程序設計模型?

比如有N個進程,每個進程等待I/O操作的時間與其停留在內存中的時間比爲p(也就是在內存中不幹事的時間),則所有進程都在等待I/O的概率是p^n,那麼他的否命題:至少有一個進程不在等待I/O(即,在I/O)的概率,也即CPU的利用率爲:1-p^n。從這個式子裏就可以看出,等待I/O的時間越長或進程數越少,CPU利用率越低,吞吐量也就越低(也就是說,進程幹事的時間比例越高,幹事的進程越多,CPU利用率就越大)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章