程序相關知識

2022-09-06 15:36:12 字數 1172 閱讀 7786

1.程序的狀態

程序最主要的狀態有兩種:執行狀態和等待狀態(也叫阻塞狀態,掛起狀態,睡眠狀態)。

執行狀態和等待狀態的程序的最大區別是,系統總是按照優先順序在分時處理執行狀態的程序,而不顧那些處於等待狀態的程序。使用者對程序狀態的關心,主要關心程序在某段時間所處的狀態使得程序會不會去搶奪cpu,尤其那些等待時間長度不定的狀態。

處於執行狀態的程序,會因為等待某些事件的發生而轉為睡眠狀態。處於睡眠狀態的程序,在條件滿足後,被喚醒,重新轉為執行狀態,被排程執行。

unix或其他系統的核心,將可執行程序按優先順序分成幾個不同的佇列,高優先順序程序優先被排程執行。unix中可以用nice()系統呼叫很有限度的調整程序的優先順序,windows也有類似的呼叫。

作為乙個程式設計師,需要了解的是程序進入等待狀態的誘因是因為程式設計師在程式中直接或者間接的安排了某個系統呼叫。

2.程序執行的時間 :time,vmstat

使用time命令,可以列印出 程式執行所花費的時間。這三個值分別是:實際時間,系統時間和使用者時間。

實際時間是程序從開始執行到停止所花費的真實時間。

系統時間是在程序執行期間,作業系統核心為程序的活動所花費的cpu時間。

使用者時間是執行使用者態程式所花費的cpu時間。

系統時間和使用者時間之和不一定等於實際時間,一般來說會小於實際時間。因為程序在生命週期內可能會睡眠,不佔cpu時間,或者,儘管程程在活動期間從不休眠,但是unix是個分時系統,系統會輪流排程其他程序,這樣程序也沒有占用它生命期內100%的cpu時間。

例:使用time命令統計執行乙個命令所占用的cpu時間。

/usr/bin/time find /usr -name '*.c' -print

與cpu時間有關的另乙個命令vmstat,它可以列印出整個系統,包括所有程序,近期內占用cpu的情況。vmstat後跟乙個表示數值的引數,如:vmstat 10,那麼每10秒鐘給出乙個報告。

3.建立新程序 :fork

系統呼叫fork建立乙個新程序,但新程序的指令段,使用者資料段,使用者堆疊段都是舊程序一模一樣的複製。系統資料段幾乎全是舊程序的複製。原先程序被稱為「父程序」,新建立的程序被稱為「子程序」。在unix系統中,fork系統呼叫時建立新程序的唯一方式。fork呼叫出錯的唯一方式是系統中的資源耗盡。

建立新的程序之後,子程序複製了父程序的頁表,而不是複製父程序的記憶體空間。父子程序的頁表都指向了相同的物理記憶體頁面。

程序相關知識

1.程序的狀態 程序最主要的狀態有兩種 執行狀態和等待狀態 也叫阻塞狀態,掛起狀態,睡眠狀態 執行狀態和等待狀態的程序的最大區別是,系統總是按照優先順序在分時處理執行狀態的程序,而不顧那些處於等待狀態的程序。使用者對程序狀態的關心,主要關心程序在某段時間所處的狀態使得程序會不會去搶奪cpu,尤其那些...

多程序的相關知識

案例 context ct this.createpackagecontext com.test.serviceid context.context ignore security 2.1 id不同時候 讀取資源檔案的時候 try catch namenotfoundexception e 2.2....

python多程序相關知識

coding utf8 import multiprocessing def fun print hello world for i in xrange 10 m multiprocessing.process target fun,args m.start 以多程序的方式輸出聲音和畫面 usr b...