操做系統進程與線程筆記

進程與線程

聲明

文章均爲本人技術筆記,轉載請註明出處https://segmentfault.com/u/yzwall算法

進程&線程基本概念

  • 進程:程序的執行實體,操做系統分配資源的最小單位;segmentfault

  • 線程:被稱爲輕量級進程,是CPU調度分配的最小單位。一個標準的線程由線程ID,程序計數器(PC),寄存器集合和堆棧組成;安全

進程間/線程間通訊方式

Linux

Linux進程間通訊:管道,信號(signal),消息隊列(Message),共享內存(shared memory),信號量(semaphore),套接口(socket)
Linux線程間通訊:互斥量(Mutex),信號量(Semaphore),條件變量多線程

Windows

Windows進程間通訊:管道(pipe),消息隊列(Message),共享內存(shared memory),信號量(semaphore),套接口(socket)
Windows線程間通訊:臨界區(critical section),互斥量(Mutex),信號量(Semaphore),事件(Event)socket

線程與進程的區別

資源分配與調度

線程是獨立調度的基本單位,進程是擁有資源的基本單位(進程只做爲除CPU以外系統資源的分配單元,線程做爲CPU的分配單元);
在同一進程中,線程之間的切換不會引發進程的切換,但從一個進程中的線程切換到另外一個進程中的線程時,會引發進程的切換;spa

系統開銷

進程建立和撤銷時,系統開銷遠大於線程開銷;
進程切換時,保存現場開銷和上下文切換開銷遠大於線程開銷;操作系統

地址空間

進程之間的地址空間互相獨立,一個進程崩潰不影響其餘進程;
線程之間(屬於同一進程)共享進程的地址空間,一個線程死掉至關於整個進程死掉;線程

通訊方面

進程間通訊須要藉助操做系統;
因爲線程共享進程的地址空間,所以線程間同步與通訊較容易實現,甚至無需操做系統干預;code

多進程和多線程選擇

多進程和多線程選擇

死鎖與死鎖處理策略

死鎖產生必要條件

死鎖產生必須同時知足如下四個條件:接口

  • 互斥條件:一段時間內,某資源僅被一個進程所佔有,其餘進程只能等待;

  • 不剝奪條件:進程擁有的資源只能由本身釋放,不可被其餘進程強行奪走;

  • 請求和保持條件:在申請資源不能所有知足的條件下,進程佔有已申請的資源,等待新的資源分配

  • 循環等待條件:存在系統資源的進程循環等待鏈;

死鎖處理策略

死鎖

  • 預防死鎖:任意破壞死鎖產生的四個必要條件之一便可;

  • 避免死鎖:在資源動態分配過程當中,採用某種算法(好比銀行家算法)防止系統進入」不安全狀態「(系統有可能死鎖);

  • 死鎖檢測和解除:經過系統檢測機制及時檢測出死鎖現象(利用資源分配圖),而後可經過剝奪資源,撤銷進程和回退進程解除死鎖;

相關文章
相關標籤/搜索