日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[OS复习]进程管理5

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [OS复习]进程管理5 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
線程

1.多線程

操作系統中引入進程的目的 為了描述和實現多個程序的并發執行,以改善資源利用率及提高系統的吞吐量。
操作系統引入線程的目的
這是為了減少程序并發執行時系統所付出的額外開銷(減少管理進程以及切換進程的時間花銷,使操作系統具有更好的并發性。 進程的兩個基本屬性
(1)進程是一個擁有資源的獨立單位;
(2)進程同時又是一個可以獨立調度的基本單位。

1.1 系統為進程進行的操作

創建進程 、撤消進程 、進程切換?
進程作為資源的擁有者和系統的調度對象,需要花費系統較大的額外開銷。因此,系統中同時存在的進程數目不宜過多,進程切換的頻率也不宜過高,而這也就限制了并發度的進一步提高。

1.2 由進程到線程

目標:既能提高進程并發度,又能降低系統的額外開銷。
實現:將進程的資源申請和調度屬性分開。即進程作為資源的申請和擁有者,但不作為調度的基本單位。這樣,就產生了線程的概念。線程是進程中的一個實體,是獨立調度和分派的基本單位。線程自身基本上不擁有系統資源,只擁有少許運行中必不可少的私有資源。線程可與同屬一個進程的其它線程共享進程的全部資源。
進程中的所有線程共享該進程的狀態。
線程具有三種基本狀態:就緒、執行和阻塞。
線程一般不具有掛起狀態,因為線程共享進程的資源,包括存儲空間,如果掛起一個進程,其所屬的全部進程必將被掛起。而單獨掛起某進程中的一個線程,必然會影響同一進程中的其它線程的執行,這是沒有任何意義的。
一個進程可以創建和撤消一個或多個線程,同一進程中的多個線程可以并發執行。

1.3 對線程的操作

A.派生(Spawn),當系統創建一個進程時,同時也為該進程派生一個線程,同一進程中的線程可以再派生其它線程。
B.阻塞(Block),當線程需要等待某事件時,它將被阻塞,釋放處理機執行其它線程。【
注意,線程阻塞不一定會引起整個進程的阻塞,否則,引入線程帶來的并發性就不會提高 C.解除阻塞(Unblock),當線程的阻塞事件發生,其狀態轉換為就緒,并插入到就緒隊列,等待調度執行。
D.結束(Finish),當線程執行完畢,釋放其私有資源。

2.比較進程與線程

傳統操作系統中,一個進程可以創建一個線程, 如MS DOS就是一個單用戶、單進程、單線程的操作系統,UNIX是一個多用戶、多進程、單線程的操作系統。
現代操作系統和軟件設計大多支持多線程運行。例如,Java虛擬機是一個單進程、多線程的運行環境,Windows系列操作系統和Linux操作系統都采用了多進程、多線程技術。

2.1 調度情況

傳統操作系統中,進程既是擁有資源的基本單位,又是獨立調度的基本單位。引入線程的操作系統中,線程是獨立調度的基本單位,進程是資源擁有的基本單位,從而可以顯著地提高系統的并發程度。同一進程中的線程間切換不會引起進程切換【進程切換會造成大量系統開銷(保存進程上下文),而切換線程不會】,但當一個進程中的線程切換到另一進程中的線程時,將會引起進程切換。

2.2 并發

進程之間可以并發執行
同屬于一個進程的多個線程之間,亦可并發執行【思考:不同進程的線程是否可以并發進行?】
因而使操作系統具有更好的并發性,從而能更有效地使用系統資源和提高系統吞吐量。
例題:在一個未引入線程的單處理機操作系統中,若僅設置一個文件服務進程,當它由于某種原因而被阻塞時,便沒有其它的文件服務進程來提供服務。
引入線程以后,可以在一個文件服務進程中設置多個服務線程,當第一個線程阻塞時,文件服務進程中的第二個線程可以繼續運行;當第二個線程阻塞時,第三個線程可以繼續執行,從而顯著地提高了文件服務的質量和系統吞吐量。?

2.3 擁有資源

進程是擁有資源的獨立單位,它有權申請系統的各類資源。
線程除了擁有很少的私有資源以外,不能申請系統資源,可以共享其所屬進程的資源。即,進程的代碼段、數據段以及系統資源,如已打開的文件、I/O設備等,都可被其內的所有線程共享。

2.4 系統開銷

操作系統管理進程的開銷顯著地大于管理線程所需的開銷。
進程切換的開銷也遠大于線程切換的開銷。
由于同一進程中的多個線程具有相同的地址空間,使它們之間的同步和通信也比較容易。
有些類型的線程切換、同步和通信都無需操作系統內核的干預。

3.線程的類型

線程可以分為用戶級線程和內核級線程。

3.1 用戶級線程?

由于系統內核不知道用戶級線程的存在,其調度針對進程進行。
當某進程被調度執行時,線程庫即開始工作,可以調用spawn例程派生一個從屬于該進程的新線程,并為之建立相應的數據結構。或者啟動線程調度例程,調度該進程中的某個就緒線程執行。當執行線程需要阻塞等待某事件時,線程被中斷,需要保護包括用戶寄存器內容、程序計數器和棧指針等上下文信息。如果進程的時間片還未用完,線程調度例程繼續調度同一進程中的其它就緒線程。如果需要切換進程,其內的所有線程都不再執行。
例1: 用戶級線程阻塞是否會引起整個進程阻塞呢?
這要視具體情況而定。當某進程中的一個線程需要等待另一線程的輸出數據而阻塞時,整個進程并不會阻塞。即進程保持執行狀態,其內的某個線程也是執行狀態。當某線程因為I/O阻塞時,內核需要啟動系統I/O,控制從用戶級轉到系統內核級,這時常會引起整個進程阻塞。隨即將發生進程切換,進程調度程序重新調度另一個就緒進程執行。?
例2: 用戶級線程能節省大量的系統額外開銷,并提高程序并發性。為什么?
線程的管理和控制僅在用戶級進行,線程切換無須內核干預,沒有模式切換,減少了模式切換的開銷。調度更靈活。應用程序可以根據需要選用線程庫中不同的線程調度算法,而不受系統內核進程調度程序的約束。由于線程庫獨立于系統內核,可以運行在不同的操作系統之上,使用戶級線程可以得到不同操作系統的支持,而無須修改操作系統內核。?
劣勢: 由于很多操作系統的系統調用都會引起阻塞,用戶級線程中的系統調用常常會引起線程及整個進程阻塞,削弱了線程的并發性。由于系統內核不知用戶級線程的存在,可能出現進程切換時,強行中斷其內某個執行線程的情況。很難實現不同進程的線程并發。

3.2 內核級線程

內核級線程的管理全由系統內核完成,應用程序無權進行線程切換等操作系統為應用程序提供了相應的應用程序編程接口API【俗稱:手動分線程】
Windows2000、Linux和OS/2等操作系統即采用內核級線程技術
系統內核負責內核級線程的創建、撤消、切換等操作。應用程序可以設計成多線程程序,多個線程同屬于一個進程。系統以線程為調度單位。
進行線程切換時,需要同時保存整個進程的上下文以及線程的上下文信息。這樣,當進程中的某個線程阻塞時,內核可以調度另一個就緒線程執行(同一進程或不同進程)。線程切換時需要進行模式切換。?

總結

以上是生活随笔為你收集整理的[OS复习]进程管理5的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。