計算機操作系統之線程與進程

一.線程與進程的區別
根本區別:進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位
在開銷方面:每個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程可以看做輕量級的進程,同一類線程共享代碼和數據空間,每個線程都有自己獨立的運行棧和程序計數器(PC),線程之間切換的開銷小。
所處環境:在操作系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(通過CPU調度,在每個時間片中只有一個線程執行)
內存分配方面:系統在運行的時候會爲每個進程分配不同的內存空間;而對線程而言,除了CPU外,系統不會爲線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源。
包含關係:沒有線程的進程可以看做是單線程的,如果一個進程內有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是進程的一部分,所以線程也被稱爲輕權進程或者輕量級進程。
二.進程間的通信方式
1.管道:速度慢,容量有限,只有父子進程能通訊
2.FIFO:任何進程間都能通訊,但速度慢
3.消息隊列:容量受到系統限制,且要注意第一次讀的時候,要考慮上一次沒有讀完數據的問題
4.信號量:不能傳遞複雜消息,只能用來同步
5.共享內存區:能夠很容易控制容量,速度快,但要保持同步,比如一個進程在寫的時候,另一個進程要注意讀寫的問題,相當於線程中的線程安全,當然,共享內存區同樣可以用作線程間通訊,不過沒這個必要,線程間本來就已經共享了同一進程內的一塊內存
三.什麼是死鎖?
兩個或多個進程無限期的阻塞、相互等待的一種狀態。
四.死鎖產生的四個必要條件
互斥:至少有一個資源必須屬於非共享模式,即一次只能被一個進程使用;若其他申請使用該資源,那麼申請進程必須等到該資源被釋放爲止;
佔有並等待:一個進程必須佔有至少一個資源,並等待另一個資源,而該資源爲其他進程所佔有;
非搶佔:進程不能被搶佔,即資源只能被進程在完成任務後自願釋放
循環等待:若干進程之間形成一種頭尾相接的環形等待資源關係

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