[操作系統]常見問題總結

1、進程與線程

1 進程與線程的概念
進程:是一定功能的程序關於某個數據集合的一次運行活動,進程是系統進行資源調度和分配的獨立單位。
線程:是進程的實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。

2 進程與線程的關係

a. 一個線程可以創建和撤銷另一個線程,一個進程中可以多個線程併發執行;
b. 相對進程而言,線程更加接近於執行體的概念,多個線程可以共享同一個進程的資源,每個線程還有自己私有的桟空間並擁有獨立的執行序列。
c. 進程有獨立的地址空間,在保護模式下,進程崩潰時不會對其他進程有影響。線程有自己的堆桟和局部變量,但是線程之間沒有獨立的地址空間,所以一個線程的死亡就相當於進程的死亡。因此,多進程的程序比多線程的程序具有更好的健壯性,但是進程間切換耗費資源較大,大約是線程間切換的十倍,所以多線程擁有更高的效率

線程和進程的區別聯繫:
1,進程:子進程是父進程的複製品。子進程獲得父進程數據空間、堆和棧的複製品。
2,線程:相對與進程而言,線程是一個更加接近與執行體的概念,它可以與同進程的其他線程共享數據,但擁有自己的棧空間,擁有獨立的執行序列。
兩者都可以提高程序的併發度,提高程序運行效率和響應時間。
線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源管理和保護;而進程正相反。同時,線程適合於在SMP機器上運行,而進程則可以跨機器遷移。
根本區別就一點:用多進程每個進程有自己的地址空間(address space),線程則共享地址空間。所有其它區別都是由此而來的:
1、速度:線程產生的速度快,線程間的通訊快、切換快等,因爲他們在同一個地址空間內。
2、資源利用率:線程的資源利用率比較好也是因爲他們在同一個地址空間內。
3、同步問題:線程使用公共變量/內存時需要使用同步機制還是因爲他們在同一個地址空間內

2、進程間通信

進程間通信主要有:管道、系統IPC(消息隊列、信號量、共享存儲)和socket。

管道主要分爲普通管道、流管道、命名管道。
•   管道是一種半雙工的通信方式,數據只能單項流動,並且只能在具有親緣關係的進程間流動,進程的親緣關係通常是父子進程
•   命名管道也是半雙工的通信方式,它允許無親緣關係的進程間進行通信
•   信號量是一個計數器,用來控制多個進程對資源的訪問,它通常作爲一種鎖機制。
•   消息隊列是消息的鏈表,存放在內核中並由消息隊列標識符標識。
•   信號是一種比較複雜的通信方式,用於通知接收進程某個事件已經發生。
•   共享內存就是映射一段能被其它進程訪問的內存,這段共享內存由一個進程創建,但是多個進程可以訪問。

3、緩衝區溢出

概念: 緩衝區溢出是指計算機向緩衝區填寫的數據超過了緩衝區的容量,數據覆蓋在其他合法區域上。
危害: 程序崩潰,導致拒絕服務;跳轉並執行一段惡意代碼
注:緩衝區溢出的原因是程序員沒有對輸入數據進行檢查。

4、死鎖

1 概念:在兩個及兩個進程併發執行的過程中,有的線程持有了一部分資源,又在等待其他進程持有的資源,資源的互相持有和等待就導致了進程死鎖。
2 死鎖產生的四個條件(ACID):
互斥性: 一個資源只能被一個進程持有
請求和保持:一個進程因請求資源而阻塞導致原來持有的資源得不到釋放
不可剝奪: 進程未完成功能之前,不可強制釋放當前所持有的資源
環路等待: 若干進程之間形成環路等待資源的情形
3 解決死鎖的方法:

解決死鎖的基本思路就是破壞死鎖產生的四個必要條件
解決死鎖的基本方法如下: 
預防死鎖、避免死鎖、檢測死鎖、解除死鎖 
解決四多的常用策略如下: 
鴕鳥策略、預防策略、避免策略、檢測與解除死鎖 

5、進程調度的策略

FCFS(先來先服務)、優先級、時間片輪轉、多級反饋

6、進程同步的方式

原子操作、信號量、自旋鎖管程、會合、分佈式系統

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章