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