程序、進程和作業的關係

程序與進程之間的區別:

(1)進程更能真實地描述併發,而程序不能。

(2)進程由程序和數據兩部分組成,進程是競爭計算機系統有限資源的基本單位,也是進程處理機調度的基本單位。

(3)程序是靜態的概念;進程是程序在處理機上一次執行的過程,是動態的概念。

(4)進程有生存週期,有誕生有消亡。是短暫的;而程序是相對長久的。

(5)一個程序可以作爲多個進程的運行程序;一個進程也可以運行多個程序。

(6)進程具有創建其他進程的功能;而程序沒有。

 

作業與進程的區別:

    一個進程是一個程序對某個數據集的執行過程,是分配資源的基本單位。作業是用戶需要計算機完成的某項任務,是要求計算機所做工作的集合。一個作業的完成要經過作業提交、作業收容、作業執行和作業完成4個階段。而進程是對已提交完畢的程序所執行過程的描述,是資源分配的基本單位。其主要區別如下。

   (1)作業是用戶向計算機提交任務的任務實體。在用戶向計算機提交作業後,系統將它放入外存中的作業等待隊列中等待執行。而進程則是完成用戶任務的執行實體,是向系統申請分配資源的基本單位。任一進程,只要它被創建,總有相應的部分存在於內存中。

   (2)一個作業可由多個進程組成,且必須至少由一個進程組成,反過來則不成立。

   (3)作業的概念主要用在批處理系統中,像UNIX這樣的分時系統中就沒有作業的概念。而進程的概念則用在幾乎所有的多道程序系統中。

 注:作業與進程最主要的區別是:前者是由用戶提交,後者是由系統自動生成;前者以用戶任務爲單位,後者是操作系統控制的單位。參考:http://ks.ppkao.com/daan/3898542/

操作系統只認識進程,只對進程進行調度,作業其實和操作系統沒有關係。 執行一個可執行程序,就會生成一個進程(程序裏面exec別的可執行程序或者fork進程除外),所以執行date,who,cut這些都會各自生成一個進程。 
作業是shell裏面的一個概念,我們的所有操作都是提交給shell,然後通過shell進行解釋後再執行,管道連起來的命令以及自己寫的shell程序都相當於一個批處理。 
一個批處理就是一個作業。管道連接在一起的命令也是一個作業。一個作業就是我們提交給shell的一項任務,這個任務可能包含多個命令或者可執行程序,再複雜一些的任務可能需要我們自己進行shell編程,寫一個shell程序,裏面含有分支,循環等,然後在命令行執行這個shell程序(比如:test.sh),這也是一個作業。這個作業具體執行的時候,可能會生成一個進程(比如ls),或者多個進程(比如:who | cut -c 1-8 | sort | uniq -c)。 
一個作業是我們提交給shell的一項任務或者批處理,和操作系統無關。 進程是具體執行的一個可執行程序,是操作系統調度的對象。

參考:http://www.iteye.com/problems/89964


作業、進程和程序之間的聯繫:

    一個作業通常包括程序、數據和操作說明書3部分。每一個進程由PCB、程序和數據集合組成。這說明程序是進程的一部分,是進程的實體。因此,一個作業可劃分爲若干個進程來完成,而每一個進程有其實體————程序和數據集合。

參考:http://blog.sina.com.cn/s/blog_59a3fe6f0100c0o6.html

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