《操作系統(tǒng)》第四章:線程_第1頁
《操作系統(tǒng)》第四章:線程_第2頁
《操作系統(tǒng)》第四章:線程_第3頁
《操作系統(tǒng)》第四章:線程_第4頁
《操作系統(tǒng)》第四章:線程_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第4章

線程主要內(nèi)容4.1線程的引入4.2多線程模型多對一模型、一對一模型、多對多模型4.3線程庫

POSIXPthread線程庫、Win32線程庫、Java線程庫

Linux2.6線程程序示例4.1線程的引入回顧并討論進程的相關問題:

(1)進程生命周期中,核心任務是競爭CPU

(2)一個進程只有一個代碼執(zhí)行序列

(3)若進程遇到了I/O等待,不得不放棄CPU

(4)代碼序列中是否有可以并行處理的程序段?代碼例:完全可以并行執(zhí)行的代碼再看看IE瀏覽器的工作過程訪問一個網(wǎng)頁從Web服務器接收數(shù)據(jù)(主要網(wǎng)卡工作)顯示文本信息(普通Tag)解壓縮圖片文件顯示圖片4.1線程的引入再看看IE瀏覽器的工作過程訪問一個網(wǎng)頁從Web服務器接收數(shù)據(jù)(主要網(wǎng)卡工作)顯示文本信息(普通Tag)解壓縮圖片文件顯示圖片4.1線程的引入再看看IE瀏覽器的工作過程訪問一個網(wǎng)頁從Web服務器接收數(shù)據(jù)(主要網(wǎng)卡工作)顯示文本信息(普通Tag)解壓縮圖片文件顯示圖片4.1線程的引入線程概念–更有效的并發(fā)思想什么是線程?線程:進程中代碼執(zhí)行的一個序列顯然,一個進程中至少存在一個線程從一個程序的邏輯功能角度,可以將其劃分成n個執(zhí)行序列

這些序列可以獨立,可以有一定的關聯(lián)關系在一個進程的生命周期中,可以創(chuàng)建n個線程線程是CPU使用的基本單元,由線程ID、程序計數(shù)器PC、

寄存器組和棧構成4.1線程的概念代碼數(shù)據(jù)文件等資源寄存器棧線程單線程進程

代碼數(shù)據(jù)文件等資源寄存器棧寄存器棧寄存器棧線程多線程進程

多個執(zhí)行序列+一個地址空間是否實用?這些線程共用一個地址空間嗎?一個網(wǎng)頁瀏覽器一個線程用來從服務器接收數(shù)據(jù)一個線程用來處理圖片(如解壓縮)一個線程用來顯示文本一個線程用來顯示圖片同一個服務器建立連接并接收數(shù)據(jù)所有文本、圖片都顯示在一個屏幕上4.1線程的引入前面的例子使用子進程+IPC不可以嗎?完全可以!但開銷較大、控制過程繁瑣!一個網(wǎng)頁瀏覽器程序(主進程)一個子進程用來從服務器接收數(shù)據(jù)一個子進程用來處理圖片(如解壓縮)一個子進程用來顯示文本一個子進程用來顯示圖片每個進程必須有一個完整的映像(存儲空間)4.1線程的引入大量的重復存儲:庫函數(shù)、復用的過程、全局變量等主進程協(xié)調子進程工作:只有通過頻繁的IPC過程完成子進程之間調度切換代價大:現(xiàn)場、棧、頁表多線程編程的4個優(yōu)點:響應度高:交互程序采用多線程,即使部分阻塞,其他部分

仍能夠執(zhí)行4.1線程的引入資源共享:線程默認共享他們所屬進程的所有資源經(jīng)濟快捷:(1)多進程比多線程消耗資源更多;

(2)線程切換只需切換少量現(xiàn)場(寄存器、棧),

速度快很多方便多CPU處理:線程由用戶(程序員)編寫,能夠充分考

慮任務的有效分離,同時執(zhí)行序列隸屬于同一個進程的

地址空間,因此可以充分利用多CPU處理線程有2種實現(xiàn)方法:(1)用戶層的用戶線程

(2)內(nèi)核層的內(nèi)核線程4.2多線程模型用戶線程:受內(nèi)核支持,但不需內(nèi)核管理

內(nèi)核線程:由操作系統(tǒng)直接支持和管理用戶線程是用戶程序建立的,內(nèi)核線程是操作系統(tǒng)建立的??答案:線程都是由用戶程序創(chuàng)建的,但操作系統(tǒng)的機制可以創(chuàng)建對應的數(shù)據(jù)結構對這些線程直接進行管理,并以線程為調度單位;也可以完全不“感知”線程的存在,仍然以進程為管理和調度單位,線程的管理與調度完全由用戶級程序來完成(當然也可能由編程語言提供用戶級的庫函數(shù)支持即線程庫)--前者為內(nèi)核線程,后者為用戶線程用戶線程機制和內(nèi)核線程機制存在一種關聯(lián)關系,具體反映在線

程模型的實現(xiàn)上--多對一模型、一對一模型、多對多模型4.2多線程模型4.2.1多對一模型

用戶級線程模型PP進程1用戶內(nèi)核硬件進程2進程1進程2P線程1線程n進程不能很好的利用多CPU管理是由線程庫在用戶空間進行的,內(nèi)核并無感知任何時刻只有一個線程能訪問內(nèi)核(如果需要的話)不同進程的線程不能運行在不同的CPU上若一個線程執(zhí)行了阻塞系統(tǒng)調用,則整個進程會被阻塞線程間占用CPU等協(xié)調工作由用戶程序自行解決4.2多線程模型4.2.1多對一模型

用戶級線程模型進程用戶級線程庫線程表進程表線程內(nèi)核空間用戶空間內(nèi)核用戶級線程實現(xiàn)4.2多線程模型4.2.2一對一模型

內(nèi)核級線程模型PP進程1用戶內(nèi)核硬件進程2線程1P線程n用戶創(chuàng)建的就是內(nèi)核級線程!(通過系統(tǒng)調用)一個線程執(zhí)行阻塞系統(tǒng)調用時,允許CPU切換給其他線程,因此

具有更好的并發(fā)能力允許不同線程運行在不同的CPU上,實現(xiàn)多CPU的并行處理但創(chuàng)建內(nèi)核線程的數(shù)量會影響系統(tǒng)性能,OS會限制線程總量4.2多線程模型4.2.2一對一模型

內(nèi)核級線程模型進程線程表進程表線程內(nèi)核空間用戶空間內(nèi)核內(nèi)核級線程實現(xiàn)和用戶級相比,內(nèi)核級線程有什么不同?由內(nèi)核完成線程的創(chuàng)建、調度等主要工作仍是保存現(xiàn)場在哪里?內(nèi)核棧代碼和數(shù)據(jù)用戶內(nèi)核線程控制塊內(nèi)核棧用戶棧每個執(zhí)行序列需有兩個棧:用戶棧+內(nèi)核棧用戶棧:普通的函數(shù)調用內(nèi)核棧:系統(tǒng)調用、中斷處理4.2多線程模型4.2.2一對一模型

內(nèi)核級線程模型4.2多線程模型4.2.3多對多模型

混合線程模型硬件LLLPP進程1用戶內(nèi)核LP進程2線程1線程m線程1線程n輕量級進程m輕量級進程1完成某些內(nèi)核任務的內(nèi)核級線程4.2多線程模型4.2.3多對多模型

混合線程模型進程進程表用戶線程內(nèi)核空間用戶空間內(nèi)核內(nèi)核線程線程表混合線程實現(xiàn)4.3線程庫線程庫:為程序員提供的用來創(chuàng)建和管理線程的API有兩種方法實現(xiàn)線程庫:(1)用戶線程庫:(2)內(nèi)核線程庫:由操作系統(tǒng)直接提供的線程庫。其所有代碼和數(shù)據(jù)結構存在于內(nèi)核空間中。調用庫中的一個API函數(shù)通常會導致對內(nèi)核的系統(tǒng)調用。操作系統(tǒng)提供的API。在用戶空間中提供一個沒有內(nèi)核支持的線程庫,其所有代碼和數(shù)據(jù)結構都存在于用戶空間中。調用庫中的一個函數(shù)只是導致了用戶空間中的一個本地函數(shù)調用,而不是系統(tǒng)調用。編程語言提供的庫函數(shù)。4.3線程庫目前使用的線程庫主要有3類:

(1)POSIXPthread

(2)Win32(3)Java(1)POSIXPthread線程庫:(2)Win32線程庫:(3)Java線程庫:Java線程庫允許在Java程序中直接創(chuàng)建和管理線程Java線程庫跟隨JVM運行在宿主OS中Java線程庫使用宿主OS支持的線程庫實現(xiàn)的Pthread是

POSIX標準的擴展,可以提供用戶級或內(nèi)核級的線程庫Win32線程庫是應用于Windows

OS的內(nèi)核級線程庫線程API功能描述Pthread_create創(chuàng)建一個新線程Pthread_exit結束調用的線程Pthread_join等待一個特定的線程完成/退出Pthread_yield讓出CPU給其他線程Pthread_attr_init創(chuàng)建并初始化一個線程的屬性結構Pthread_attr_destroy刪除一個線程的屬性結構4.3線程庫目前使用的線程庫主要有3類:

(1)POSIXPthread

(2)Win32(3)JavaPOSIXPthread線程庫應用例子:

4-thread-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論