操作系统之-进程
一、進程
1.1 進程的含義
廣義的說,進程是一個具有獨立功能的程序關于某個數(shù)據(jù)集合的一次運行活動。
1.2 進程的狀態(tài)
三態(tài)模型:等待態(tài)、就緒態(tài)、運行態(tài)。(五態(tài)模型比三態(tài)模型多了新建態(tài)和終止態(tài))。--從名字可以推斷各種狀態(tài)的形態(tài)。
1.3 進程的特征
進程的特征有四點:動態(tài)性、并發(fā)性、獨立性、異步性。
動態(tài)性--進程的實質是程序在多道程序系統(tǒng)中的一次執(zhí)行過程,既然是過程就要有始有終,所以進程會產生、會消亡。進程執(zhí)行完畢后,一般不會留下關于它運行的一絲痕跡。
并發(fā)性--任何進程都可以與其他進程一起并發(fā)執(zhí)行,并發(fā)是任意時刻只有一個程序在運行(要與并行區(qū)別)。
獨立性--進程是一個獨立運行的基本單位,同時也是系統(tǒng)分配資源和調度的基本單位。
異步性--由于進程間的相互制約,使進程具有執(zhí)行的間斷性,即進程按各自獨立的、不可預知的速度向前推進。
1.4 進程的調度
進程的調度分為搶占式和非搶占式。
搶占式調度:搶過來自己占用。
無論是搶占式還是非搶占式,都要依照這個隊列中任務的先后順序來運行他們。所以,隊列代表著任務的“生存周期”。只要任務還在隊列中,任務就沒有“死”,即沒有運行結束而消亡;任務就沒有“生”,即任務還未開始運行。
現(xiàn)在,重點就是如何安排這個隊列(五種調度算法)。
以隊列為基礎,搶占式調度意味著某任務A一旦運行后,可能被其他任務B搶占,現(xiàn)在就要把A移到堆底,把B移到堆頂;非搶占式調度意味著某任務A一旦運行后,就一直運行A知道結束,期間如果任務B也想要開始運行,就只能把B放在A的下面了,即任務的運行順序從它們加入隊列時就確定了,以后隊列的順序不會改變。
二、線程
2.1 線程的含義
線程是程序執(zhí)行流的最小單元,是被系統(tǒng)獨立調度和分派的基本單位。
進程的“進程”,線程的粒度更小。
2.2 線程的狀態(tài)
線程的狀態(tài)與進程一樣,參考五態(tài)模型。
2.3 線程的特點
· 線程是操作系統(tǒng)調度的基本單位;
· 線程的狀態(tài)切換比進程更迅速且開銷更小;
· 線程不擁有資源,只是任務的一種抽象,同一進程內的線程共享該進程的資源;
· 對于單核CPU,同一時刻只能運行一個線程;
· 一個進程至少有一個線程,且是它的主線程。
2.4 線程與進程的區(qū)別
· 進程之間相互獨立(資源獨立),線程之間共享同一進程的資源;
· 進程之間需要通信時,由于資源獨立,所以需要系統(tǒng)提供各種外部方法,比較繁瑣,線程之間可以通過共享數(shù)據(jù)進行通信;
· 線程的狀態(tài)切換比進程快且開銷小;
· 在多線程系統(tǒng)中,線程才是可執(zhí)行對象,因為線程是進程中的并發(fā)任務的抽象。原先,進程是運行任務的主體,有了線程過后,運行任務的重擔就落到了線程之上。
2.5 線程的優(yōu)點
·?充分利用CPU資源;
·?實現(xiàn)進程內并發(fā),使用任務的粒度分得更細,有利于開發(fā)人員對任務的分解、抽象(分解與抽象原則);
·?提高了程序的運行效率。
三、同步與異步
3.1 同步的含義
同步:在調用一個過程時,假如過程還在執(zhí)行,沒有返回結果,那么在該過程返回之前就不能做下一件事情。
3.2 異步的含義
異步:與同步相反,即調用一個過程時,就接著做下面的事情,不立即獲得該過程的返回值。要實現(xiàn)異步:你得學會做兩件事情:
1、添加新任務(創(chuàng)建線程)
2、知道舊任務已經結束了并跑去處理(狀態(tài)、通知和回調)。
3.3 實現(xiàn)異步的方法
創(chuàng)建線程可以通過調用API來實現(xiàn),那么怎么知曉舊任務已經運行結束了呢?
狀態(tài),即設一共享變量(FLAG),舊任務結束時,變量置為有效,之后舊任務結束,新任務循環(huán)檢測變量是否有效;
通知,即舊任務向新任務發(fā)送通知或消息,發(fā)完之后,舊任務結束;
回調,就是把舊任務做完后要做的收尾工作交給舊任務本身,這樣,舊任務做完收尾工作后便結束。
四、并發(fā)與并行
4.1 并發(fā)的含義
當有多個進程在運行時,如果系統(tǒng)是單核的CPU,那它根本不可能真正地同時運行一個以上的進程。系統(tǒng)只能把CPU運行時間劃分若干個時間段(在每個時刻段的起始時刻使用調度算法分配任務),再將每個時間段分配給每個進程執(zhí)行。在一個時間段內,某進程在運行時,其他進程處于掛起(就緒狀態(tài))。這種方式我們稱之為并發(fā)。
并發(fā)的精髓就是分配時間片,微觀上是間斷的,宏觀上是連續(xù)的。
還有一個概念就是超線程:通過特殊的硬件指令,可以把兩個邏輯內核模擬成兩個物理超線程芯片,在但處理器中實現(xiàn)線程級的并行計算,同時相應的軟硬件的支持下大幅度提高運行效能,從而實現(xiàn)在單處理器上模擬雙處理器的效能。(但是本質上不是多核,當兩個進程使用同一資源時,就會變得復雜,性能不如多核)
4.2 并行的含義
當計算機有多個CPU(多核),一個CPU執(zhí)行一個線程,另一個CPU執(zhí)行另一個線程,兩個線程互補搶占CPU資源,可以同時進行,這種方式我們稱之為并行。
4.3 并發(fā)與并行的區(qū)別
并行是指兩個或者多個事件在同一時刻發(fā)生;并發(fā)是指兩個或者多個事件在同一時間間隔內發(fā)生。
并行是多核CPU的產物,微觀上更連續(xù),宏觀上更連續(xù);并發(fā)是單核CPU產品,微觀上間斷,宏觀上連續(xù)。
4.4 死鎖
4.4.1 死鎖的定義
死鎖的規(guī)范定義:集合中的每一個進程都在等待只能由集合中的其他進程才能引發(fā)的事件,那么該組進程是死鎖的。
4.4.2 死鎖發(fā)生的四個必要條件
1、互斥條件:指進程對所分配到的資源進行排他性使用,即在一段時間內某資源只由一個進程占用。如果此時還有其他進程請求資源,則請求者只能等待,知道占有資源的進程釋放資源。
2、請求和保持條件:指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其他進程占有,此時請求進程阻塞,但又對自己已獲得的其他資源保持不放。
3、不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
4、環(huán)路等待條件:指在發(fā)生死鎖時,必然存在一個進程一資源的環(huán)鏈。
轉載于:https://www.cnblogs.com/daisy-996/p/10207753.html
總結
- 上一篇: 七种分布式全局 ID 生成策略,你更爱哪
- 下一篇: 面试官:大型系统架构设计细节你知道多少?