天天看點

程序概念

1.程序

    狹義定義:程序是正在運作的程式的執行個體

    廣義定義:程序是一個具有一定獨立功能的程式關于某個資料集合的一次運作活動。它是作業系統動态執行的基本單元,在傳統的作業系統中,程序既是基本的配置設定單元,也是基本的執行單元。

    程序是由程序控制塊、程式段、資料段三部分組成

2.程式

  程式是指令和資料的有序集合,其本身沒有任何運作的含義,是一個靜态的概念。而程序是程式在處理機上的一次執行過程,它是一個動态的概念。

  程序和程式差別      1.程式是靜态概念,本身作為一種軟體資源長期儲存;而程序是程式的執行過程,它是動态概念,有一定的生命期,是動态産生和消亡的。    

3.程式和程序無一一對應關系。一個程式可以由多個時程公用;另一一方面,一個程序在活動中有可順序地執行若幹個程式  

 4.線程

     程序和線程關系

     通常在一個程序中可以包含若幹個線程,它們可以利用程序所擁有的資源,在引入線程的作業系統中,通常都是把程序作為配置設定資源的基本機關,而把線程作為獨立運作和獨立排程的基本機關,由于線程比程序更小,基本上不擁有系統資源,故對它的排程所付出的開銷就會小得多,能更高效的提高系統内多個程式間并發執行的程度。

  常用程序常在緩存中,不常用的在記憶體中。

5.父子程序的關系  

  1.子程序是由一個程序所産生的程序,産生這個子程序的程序稱為父程序    

   2.在linux系統中,使用系統調用fork建立程序。fork複制的内容包括父程序的資料和堆棧段以及父程序的程序環境。      

  3.父程序終止子程序自然終止。

4程序狀态

  task_struct中的state描述程序的目前狀态。程序的狀态一共有5種,而程序必然處于其中一種狀态:

  TASK_RUNNING(運作)——程序是可執行的,它或者正在執行,或者在運作隊列中等待執行。這是程序在使用者空間中執行唯一可能的狀态;也可以應用到核心空間中正在執行的程序。

  2)TASK_INTERRUPTIBLE(可中斷)——程序正在睡眠(也就是說它被阻塞)等待某些條件的達成。一旦這些條件達成,核心就會把程序狀态設定為運作,處于此狀态的程序也會因為接收到信号而提前被喚醒并投入運作。

  3)TASK_UNINTERRUPTIBLE(不可中斷)——除了不會因為接收到信号而被喚醒進而投入運作外,這個狀态與可打斷狀态相同。這個狀态通常在程序必須在等待時不受幹擾或等待事件很快就會發生時出現。由于處于此狀态的任務對信号不作響應,是以較之可中斷狀态,使用得較少。

  4)TASK_ZOMBIE(僵死)——該程序已經結束了,但是其父程序還沒有調用wait4()系統調用。為了父程序能夠獲知它的消息,子程序的程序描述符仍然被保留着。一旦父程序調用了wait4(),程序描述符就會被釋放。

  5)TASK_STOPPED(停止)——程序停止執行,程序沒有投入運作也不能投入運作。通常這種狀态發生在接收到SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU等信号的時候。此外,在調試期間接收到任何信号,都會使程序進入這種狀态。

  需要調整程序的狀态,最好使用set_task_state(task, state)函數,在必要的時候,它會設定記憶體屏障來強制其他處理器作重新排序(SMP)。

  程序的各個狀态之間的轉化構成了程序的整個生命周期

<a href="http://s3.51cto.com/wyfs02/M01/86/E6/wKiom1fOUbHxoZjMAAGKmmZJQmc054.png" target="_blank"></a>

本文轉自willis_sun 51CTO部落格,原文連結:http://blog.51cto.com/willis/1846809,如需轉載請自行聯系原作者

繼續閱讀