程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 進程

進程

編輯:關於C語言

第2章進程

現代操作系統追求的一個主要目標就是計算機的整體工作效率和利用率,為了達到這個目標,就必須讓程序盡可能多的並發執行同時執行),最大化的共享計算機的的所有資源。在硬件設計上,通過多CPU和多核CPU增加了程序的執行單元,在軟件設計上,操作系統通過進程和線程來提高程序的並發度。程序的並行執行提高了計算機的效率,但也帶來了許多復雜的問題。

2.1進程

1、程序:指令的有序集合,由它規定計算機完成某一任務時所需做的各種操作及操作順序。

早期的計算機每次只能運行一個程序如運行QQ,就不能運行word,看視頻等其他操作),這樣會極大浪費資源,如CPU工作的時候,外部設備可能空閒著,而當外部設備忙碌的時候,可能CPU空閒。

2、進程:一個可並發執行的具有獨立功能的程序關於某個數據集合的一次執行過程。

3、進程和程序的區別:

1)進程是動態的,程序是靜態的。程序是一組指令的集合,而進程是一段程序的一次動態執行。

2)進程是暫時的,程序時永久的。進程是一個狀態變化的過程,動態的創建,執行後消亡。程序可長久保存。

3)進程和程序的組成不同。進程的組成包括程序、數據和進程控制塊。程序時指令的有序集合。

4)進程和程序之間不是一一對應關系,一個程序可以有多個進程,一個進程至少要對應一個程序或多個程序,多個進程也可以對應相同的程序。

5)進程具有並發特征。進程是一個獨立調度並能和其他進程並行運行的單位,而程序不能作為獨立調度運行的單位。

如果把程序比作菜譜,則進程比作按照菜譜烹饪的過程,才就相當於數據集合。

4、進程的狀態:

三狀態:運行態,就緒態,阻塞態。

五狀態:運行態,就緒態,阻塞態,創建態,終止態。

七狀態:運行態,就緒太,阻塞態,創建態,終止態,掛起就緒態,掛起阻塞態。

5、進程控制塊PCB)

操作系統為了管理進程設置的一個專門的數據機構,用它來記錄進程的外部特征,描述進程的運動變化過程。系統利用PCB來控制管理進程,一個進程只有一個PCB,PCB是進程存在與否的唯一標記,因為操作系統只有依據PCB才能感知進程、管理進程與控制進程,所以PCB是系統感知進程存在的唯一標志。進程與PCB是一一對應的。

PCB的組織方式:線性,鏈表,索引方式。

6、進程的映像

當一個程序進入計算機的內存就構成了進程,操作系統中把進程物理實體和支持進程運行的環境合稱為進程上下文,因此進程的運行被認為是在進程的上下文中執行的。進程的上下文包括三個組成部分。

1)用戶級上下文。

2)系統級上下文。

3)寄存器上下文。

一個進程映像也稱為進程的實體)包括:

1)程序塊。2)數據塊。3)系統/用戶堆棧。4)進程控制塊

7進程創建的時機

系統初始化時,系統調用時,用戶進程創建,批處理系統初始化

8進程的創建

申請空白PCB,為新進程分配資源,初始化進程控制塊,將新進程加入到管理隊列。

9有關進程的原語

創建,撤銷,阻塞,喚醒,掛起,解掛

2.2線程

1、線程:是進程的一個實體,它是比進程更小的能獨立運行的基本單位。在操作系統中引入進程的目的是為了使多個程序並發執行,以提高資源的利用率和系統的吞吐量,而在操作系統引入線程的目的是為了減少程序並發執行時所付出的時空開銷。

如進程間切換需要一定的時間開銷,假如進程之間頻繁的切換,則進程切換開銷會占據很大一部分時間,因此引入線程,即在同一進程中不同線程之間切換,切換代價會很小。但是在不同進程之間的不同線程中切換,切換代價還是很大的。

2、線程和進程的關系:

1)線程是進程的一部分,它是進程內的一個執行單元,通常,一個進程含有若干個線程,至少有一個線程。一個進程的多個線程都進程的地址空間裡活動。

2)引入線程的操作系統中,資源分配的對象是進程,而不是線程。進程仍然是擁有資源的一個獨立單位,它擁有自己的資源,一般的說,線程除有一點必不可少的資源外不擁有系統資源。線程使用的資源是進程分到的資源。

3)引入線程的操作系統,調度的基本單位是線程而不是進程。即CPU是分給線程的,真正在CPU上執行的是線程。

4)進程之間可以並發執行,而一個進程中的這些線程之間也可並發執行,而且在並發執行過程中,也需要協作同步。

5)進程調度,系統要進行進程上下文的切換,需要系統大量的開銷。

6)線程調度,由於同一進程的線程共享進程的資源,其切換是把線程僅有的一小部分資源變換即可,從而提高了系統的效率。線程切換比進程切換快得多。因此有些人把線程又稱為輕型進程。

7)從一個進程的線程向另一個進程的線程切換,將引起進程的上下文切換。

8)同一進程的多線程共享進程的所有資源,一個線程可以改變另一個線程的額數據,而多進程機制則不會產生這個問題。從安全角度看,線程不如進程安全。

3、線程控制塊TCB)

操作系統引入線程後,通常在一個進程中包含多個線程,每個線程作為利用CPUdejibe的基本單位,是具有最小開銷的實體。線程控制塊包含以下內容

1)線程標識信息:系統內唯一的標識符。

2)線程狀態和調度信息。

3)現場消息:主要是CPU內各個寄存器的內容。

4)線程私有存儲區:系統棧和用戶棧的指針。

5)指向PCB的指針:該線程歸屬哪個進程,使用哪個進程的資源。

由於線程不包含系統資源,所以TCB比PCB要小得多。因此線程的創建、切換、撤銷所需要的系統的時空開銷小,速度塊。

4、線程的級別

用戶級線程ULT):在進程中控制各個線程,由用戶來表示。

內核級線程KLT):系統內核來控制各個線程。系統的各個線程是並行的。

混合級

用戶級線程轉換時開銷少,但是在傳統的進程操作系統中,大多數系統調用將阻塞進程,因此,當線程執行一個系統調用時,不僅該線程被阻塞,而且,進程內的所有線程會被阻塞。而在內核級線程中,可以去選擇另一個線程運行。

2.3進程間通信

進程間的兩種關系:同步關系和互斥關系

進程間主要是資源的競爭和同步兩個問題

1、臨界區:訪問共享資源的程序段,也就是對共享資源進行讀寫的那段程序片。臨界區中被讀寫的共享資源被稱為臨界資源,即同時只能被一個進程訪問的資源稱為臨界資源。

2、互斥,在某一時刻,資源只能讓一個進程訪問,如何實現互斥呢?

通過臨界區和下面4個必要條件來保證對共享資源的互斥使用

1)任何兩個進程都不能同時處於臨界區

2)不對CPU的速度和數量做任何的假設

3)臨界區外的額進程不得阻塞其他進程

4)不得是進程在臨界區無休止的等待。

具體實現方法:

1)關中斷。2)鎖變量。3)嚴格輪轉法。4)peterson算法。5)TSL指令。6)對換指令

3、用信號量和P、V操作來解決同步和互斥

信號量是個結構變量,由兩部分組成,整數部分表示資源的個數,指針部分標識阻塞隊列的頭指針。信號量的操作只能通過P和V原語來操作,P表示申請資源,V表示釋放資源。

使用信號量,P,V操作實現互斥應注意兩點:

1)在每個程序中用於實現互斥的P(mutex)和V(mutex)必須成對出現,即先做P操作,進入臨界區;後做V操作,退出臨界區。

2)互斥信號量mutex的初值是資源的個數,一般為1。

使用信號量,來進行同步應注意兩點:

1)信號量的初值一般設置為0;

2)同步信號量的P和V操作要成對出現,但是,它們分別出現在不同的進程嗲嗎中,應注意P和V操作在程序代碼中出現的位置。

4、管程

管程實際上就是將系統的中所有信號量封裝到一個公共函數中,供用戶進程進行系統調用,這樣用戶就不用涉及到具體信號量的操作,也不用顧忌系統中的物理資源的增加和減少。管程是管理進程間同步的機制,它可以保證進程互斥地訪問共享變量,並且提供了一個使用方便的阻塞和喚醒進程的原語。

可以這樣認為,把系統中的共享資源用數據抽象的形式表示出來,對共享資源的管理就可用數據及在其上實施操作的若干過程來表示。而代表共享資源的數據及在其上實施操作的額一組過程就構成了管程。管程是被請求和釋放資源的進程所調用。

5、三級調度

高級調度是選擇哪些作業由外村調入內存,低級調度是選擇內存中的就緒隊列中的那個進程占有CPU,中級調度是選擇內存中的進程與外存互換。

6、批處理系統的調度算法

先來先服務,最短作業優先,最短剩余時間優先,高響應比。

7、交互式系統的調度算法

時間片輪轉,優先級算法,最短進程優先,多級反饋對壘,彩票算法,保證算法,公平算法

本文出自 “李海川” 博客,請務必保留此出處http://lihaichuan.blog.51cto.com/498079/1304092

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved