一、 程序的引入
計算機執行的是程式,程式是指令的序列,指令涉及cpu運算的指令和i/o指令。
計算機的發展歷程:手工操作,簡單批處理,多道批處理,分時系統,unix,dos,windows,linux。
這裡關注兩個過程:簡單批處理和多道批處理。
簡單批處理:計算機能夠識別並自動執行乙個作業,並且連續執行。
多道批處理:計算機的主要執行部件是cpu,但cpu在簡單批處理中的使用效率比較低,原因是 i/o指令執行過程中cpu被占用但是沒有實際工作,在等待i/o結束。多道批處理中dma的出現改進了這一點,使得cpu在不同的併發執行程式之間切換,提高cpu利用率。
位置:程式在磁碟(外存),程序在記憶體。
程式與程序(程式的執行過程):
程式源**(就是程式猿們的心血)à 編譯連線 à 可執行程式(windows裡面常見的 .exe檔案,linux中的 .out檔案等,此時還是程式)à 執行程式,記憶體裡建立程序。
我們日常生活中在電腦裡執行的程式都是程序,對使用者來講,程序是最直觀的,可以互動的客體。
說了這麼多,總結一下:程序和程式是不同的,程序描述了執行程式的狀態,程序概念à多程序切換à提高cpu利用率。
二、 程序在計算機裡是個啥
說了程序的引入,目前對程序的了解,也就是乙個概念,它具體是個什麼呢。
這個需要用資料結構來描述它,雖然不同作業系統對程序有不同的定義,但基本的內容不會變(就像程式猿雖然薪酬公司不一樣,但也都是猿,乙個種族)。程序基礎結構為:資料,**,上下文。
其中,資料指的是在程式執行過程中的一些區域性變數,全域性變數,堆疊,緩衝區等),**就是正在執行的**了(一般不會把所有**都放到記憶體裡,要不記憶體利用率太低了,這個是記憶體管理的內容,以後會說。),上下文的全稱是pcb(process control block),也是程序的核心部分。pcb中記錄的內容大體如下:
1. pid,這是程序的唯一標示,可以看做是乙個特殊的編號,和學生學號差不多。
2. 程序狀態描述,程序優先順序,程式位址範圍,占有資源清單等。
三、 程序的狀態
程序是乙個動態的概念,所以區分程序的狀態就是學習程序的必經之路。程序乙個五個主要的狀態:新建,就緒,執行,阻塞,退出,也很好理解,建立和退出就不用多說了,程序存在時的主要狀態就是就緒態,執行態和阻塞態。這幾種狀態的轉化如下圖所示:
在這個過程中主要發生變化的是程序的佇列,根絕程序的狀態,作業系統中有三類程序的佇列:執行佇列,就緒佇列和等待佇列。程序狀態的改變就是由程序資料結構中的標誌變數和所在佇列改變體現的。比如,乙個程序因為等待i/o而被阻塞,這時,程序就會把自己放入等待佇列中,然後從就緒佇列中挑乙個執行,挑選的過程由排程演算法操縱,這個在程序排程那裡說。切換的過程中會有上下文切換,就是把上乙個程序的相關資料(如變數,堆疊,緩衝區等)存起來,把下乙個執行的程序的資料調出來。
四、 程序通訊的兩種形式
程序通訊有兩種形式,一種是共享記憶體,一種是訊息傳遞,這兩種通訊方式確保了程序之間能夠相互協作。兩者都有相應的系統呼叫支援。
五、 執行緒
執行緒可以看做是程序的細分,乙個程序中有許多可以並行的**序列,舉個例子:在瀏覽器執行乙個網頁的過程中,獲取文字資訊並且顯示和獲取資訊並且顯示就是可以並行的,由於文字資料量相對較小,可以先獲取文字,然後顯示文字和獲取可以同時進行。
因此,引入執行緒可以進一步提高某乙個程序的執行效率。另一種想法也許是:可以把程序直接拆分成子程序,這是乙個不錯的想法,但是執行緒比子程序更好,這就涉及執行緒切換和程序切換的比較:
1. 執行緒存在資源共享,子程序之間的資源無法共享,如果使用子程序,勢必造成空間浪費。
2. 執行緒執行緒切換代價小,只需要切換進暫存器和棧,而程序切換代價大,時間耗費也更高。
3. 多執行緒為多cpu處理乙個程序提供了良好的渠道。
六、 執行緒的分類
執行緒可以分成使用者態和核心態兩種(是不是很熟悉,**也可以這麼劃分的),並且由此可以有三種模型來實現執行緒:多對一,一對一和多對多。
多對一模型中,多個執行緒對應乙個程序,核心直接管理程序,不管執行緒的管理,執行緒的管理是由程式猿決定的。核心中只有程序表,沒有執行緒表。執行緒表在使用者空間中。
一對一模型中,使用者態乙個執行緒對應核心態乙個執行緒,可以說這時的執行緒就是核心級執行緒,核心會管理每乙個建立出來的執行緒,但由於過多的執行緒會影響系統的效能,所以作業系統會限制執行緒的數量。核心中會設立執行緒表來管理。使用者空間沒有執行緒表。
多對多模型中,多個執行緒對應核心中的乙個執行緒,執行緒被劃分為使用者態和核心態。核心態的執行緒完成核心的任務。
作業系統 程序與執行緒
程序 作業系統結構的基礎,是乙個正在執行的程式 計算機中正在執行的程式例項 可以分配給處理器並由處理器執行的乙個實體 由單一順序的執行顯示,乙個當前狀態和一組相關的系統資源所描述的活動單元。程序切換 從正在執行的程序中收回處理器,然後再使待執行程序來占用處理器。這裡所說的從某個程序收回處理器,實質上...
作業系統 程序與執行緒
為什麼會有程序?以前的計算機效能較差,作業系統只支援單任務,也就是一次只能執行乙個任務,當這個任務執行完成之後,才能執行下乙個任務,例如msdos。當該任務進行io時,cpu會處於空閒狀態。隨著計算機效能增強,出現了多工作業系統,作業系統可以將多個任務同時載入到記憶體中,併發執行。當某個任務進行io...
作業系統 程序與執行緒
1 排程 在傳統的作業系統中,擁有資源的基本單位和獨立排程 分派的基本單位都是程序。而引入執行緒的作業系統,則把執行緒作為排程和分派的基本單位,而程序作為資源擁有的基本單位。2 併發性 在引入執行緒的作業系統中,程序之間可併發執行,在乙個程序中的多個執行緒亦可併發執行。3 擁有資源 程序都可以擁有資...