1、操作系統的認識:
操作系統就是為“用戶提供操作邏輯所有軟硬件資源的工具,相當于用戶與裸機進行交互的界面”。再次層面上,為了節約有限資源,操作系統的目的提升到了“充分、合理地利用計算機系統的所有軟硬件資源,最大限度地讓用戶使用有限的硬件資源完成更多的事情”。
2、進程、程序、并發、資源共享、互斥、同步、異步、阻塞和非阻塞:
進程和程序:進程是程序的依次動態執行,程序是進程的靜態文本。進程的生命周期是短暫的,隨著創建、執行、睡眠到最后銷毀結束,而程序則可以永久的存儲在設備商。一個進程可以執行不同的程序,一個程序也可以由多個不同的進程執行。
并發:在操作系統中同時存在并行處理的多個進程。對于并發,需要考慮任務的切換或調度(調度的時機或進程下臺條件、上臺進程選擇、調度的實際操作)、保護不同進程不會彼此影響(進程互斥)、不同進程之間的相互協調(進程同步)、不同進程之間的消息傳遞(進程通信)。
資源共享:由于系統中存在并發處理的進程,但是系統的軟硬件資源(CPU、存儲設備等)是有限的,所以存在多個進程同時使用一份資源。對于資源共享,需要考慮資源的分配、多個進程同時對一份資源請求、資源回收和資源保護等。
互斥:多個進程同時競爭只允許給一個進程使用的資源,就會產生互斥,而該資源稱為臨界資源。解決互斥的方法有鎖、開關中斷、開關中斷+鎖和信號量(P、V操作)。
同步:一個進程的繼續執行,依賴于另一個進程的結果輸出或者執行狀態,就會產生進程同步,這是如果該進程需要的數據或者信號沒有出現,處理器就會停下等待。
異步:對于一個進程需要的資源沒有準備好,處理器將該進程暫時睡眠,然后處理其他進程,當該進程需要的資源準備完畢,處理器再將該進程喚醒,這種就是進程異步。
一般有同步阻塞、異步輪詢、一部非阻塞。
3、信號量和P、V操作
信號量是一種結構體:
1 struct{2 int value;3 Queue task;4 } sem;
對于value:當value>0時,表示臨界區資源的剩余量;當value<0時,|value|表示隊列task中因等待該臨界資源而掛起的進程數。
P操作:
1 PRocess P(sem s){2 s.value --;3 if(s.value < 0){4 sleep();//將該進程放到s.task中 5 }6 }
V操作:
1 Process V(sem s){2 s.value ++;3 if(s.value <= 0){4 wakeup();//從s.task隊列中喚醒一個進程5 }6 }
無論何種情況,在一個完整的系統中,P、V操作總是成對出現。
對于互斥:每個臨界資源對應一個信號量s,進程在訪問臨界區前,對s執行P操作,在離開臨界區時,對s執行V操作,如下:
進程a 進程b
…… ……
P(s) P(s)
臨界區s 臨界區s
V(s) V(s)
對于同步,假設進程a需要進程b的輸出結果result,該result對應信號量r,當進程a需要result時,對r執行P操作,當進程b產生result時,對r執行V操作。
進程a 進程b
…… ……
P(r) 產生result
操作result V(r)
4、銀行家算法:避免死鎖
算法思想:在進程請求資源之前
1、實際資源檢測:
Request < Need
Request < Available
2、假分配檢測:
假設進行分配,預測是否會產生死鎖。
銀行家算法更詳細介紹見這里
新聞熱點
疑難解答