計算機操作系統(tǒng)實驗四_第1頁
計算機操作系統(tǒng)實驗四_第2頁
計算機操作系統(tǒng)實驗四_第3頁
計算機操作系統(tǒng)實驗四_第4頁
計算機操作系統(tǒng)實驗四_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

/實驗三進程與線程問題:進程是具有獨立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動.是系統(tǒng)進行資源分配和調(diào)度的獨立單位.具有動態(tài)性、并發(fā)性、獨立性、異步性和交互性。然而程序是靜態(tài)的.并且進程與程序的組成不同.進程=程序+數(shù)據(jù)+PCB.進程的存在是暫時的.程序的存在是永久的;一個程序可以對應多個進程.一個進程可以包含多個程序。當操作系統(tǒng)引入線程的概念后.進程是操作系統(tǒng)獨立分配資源的單位.線程成為系統(tǒng)調(diào)度的單位.與同一個進程中的其他線程共享程序空間。本次實驗主要的目的是:理解進程的獨立空間;加深對進程概念的理解.明確進程和程序的區(qū)別;進一步認識并發(fā)執(zhí)行的實質(zhì);了解紅帽子〔Linux系統(tǒng)中進程通信的基本原理。理解線程的相關(guān)概念。要求:請查閱資料.掌握進程的概念.同時掌握進程創(chuàng)建和構(gòu)造的相關(guān)知識和線程創(chuàng)建和構(gòu)造的相關(guān)知識.了解C語言程序編寫的相關(guān)知識;進程:進程〔Process是計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動.是系統(tǒng)進行資源分配和調(diào)度的基本單位.是操作系統(tǒng)結(jié)構(gòu)的基礎。程序是指令、數(shù)據(jù)及其組織形式的描述.進程是程序的實體。進程的概念主要有兩點:第一.進程是一個實體。每一個進程都有它自己的地址空間.一般情況下.包括文本區(qū)域〔textregion、數(shù)據(jù)區(qū)域〔dataregion和堆?!瞫tackregion。文本區(qū)域存儲處理器執(zhí)行的代碼;數(shù)據(jù)區(qū)域存儲變量和進程執(zhí)行期間使用的動態(tài)分配的內(nèi)存;堆棧區(qū)域存儲著活動過程調(diào)用的指令和本地變量。第二.進程是一個"執(zhí)行中的程序"。程序是一個沒有生命的實體.只有處理器賦予程序生命時〔操作系統(tǒng)執(zhí)行之.它才能成為一個活動的實體.我們稱其為進程?!?進程的創(chuàng)建和構(gòu)造:進程簡單來說就是在操作系統(tǒng)中運行的程序.它是操作系統(tǒng)資源管理的最小單位。但是進程是一個動態(tài)的實體.它是程序的一次執(zhí)行過程。進程和程序的區(qū)別在于:進程是動態(tài)的.程序是靜態(tài)的.進程是運行中的程序.而程序是一些保存在硬盤上的可執(zhí)行代碼。新的進程通過克隆舊的程序〔當前進程而建立。fork<>和clone<>〔對于線程系統(tǒng)調(diào)用可用來建立新的進程?!?線程的創(chuàng)建和構(gòu)造:線程也稱做輕量級進程。就像進程一樣.線程在程序中是獨立的、并發(fā)的執(zhí)行路徑.每個線程有它自己的堆棧、自己的程序計數(shù)器和自己的局部變量。但是.與獨立的進程相比.進程中的線程之間的獨立程度要小。它們共享內(nèi)存、文件句柄和其他每個進程應有的狀態(tài)。線程的出現(xiàn)也并不是為了取代進程.而是對進程的功能作了擴展。進程可以支持多個線程.它們看似同時執(zhí)行.但相互之間并不同步。一個進程中的多個線程共享相同的內(nèi)存地址空間.這就意味著它們可以訪問相同的變量和對象.而且它們從同一堆中分配對象。盡管這讓線程之間共享信息變得更容易.但你必須小心.確保它們不會妨礙同一進程里的其他線程。線程與進程相似.是一段完成某個特定功能的代碼.是程序中單個順序的流控制.但與進程不同的是.同類的多個線程是共享同一塊內(nèi)存空間和一組系統(tǒng)資源的.而線程本身的數(shù)據(jù)通常只有微處理器的寄存器數(shù)據(jù).以及一個供程序執(zhí)行時使用的堆棧。所以系統(tǒng)在產(chǎn)生一個線程.或者在各個線程之間切換時.負擔要比進程小得多.正因如此.線程也被稱為輕型進程〔light-weightprocess。一個進程中可以包含多個線程。理解進程的獨立空間的實驗內(nèi)容及步驟shared=1shared=1pid=fork<>pid=fork<>pid<0ERRORpid<0ERRORYNpid>0輸出shared操作Ypid>0輸出shared操作pid==0Npid==0輸出shared操作Y輸出shared操作〔1編寫一個程序.在其main〔函數(shù)中定義一個變量shared.對其進行循環(huán)加/減操作.并輸出每次操作后的結(jié)果;源程序如下所示:運行結(jié)果如圖所示:使用系統(tǒng)調(diào)用fork〔創(chuàng)建子進程.觀察該變量的變化;在〔1的基礎上修改源碼.增加多進程部分代碼:結(jié)果:與〔1的運行結(jié)果不同.多進程情況下.子進程拷貝了父進程的內(nèi)存區(qū).因此父子進程有各自的內(nèi)存空間.有各自的變量.互不影響。父子進程從fork語句開始分開執(zhí)行.且一般情況下.父子進程會爭奪系統(tǒng)資源.誰先占用資源.誰先執(zhí)行修改程序把shared變量定義到main〔函數(shù)之外.重復第〔2步操作.觀察該變量的變化。結(jié)果截圖:和〔2的運行結(jié)果相同;說明父子進程有各自的內(nèi)存空間.有各自的變量.獨立運行。在多進程情況下.不管是局部變量還是全局變量.父子進程都會有各自的一份拷貝.從而獨立運行。理解線程的實驗步驟流程圖如下所示:開始開始開始設置全局變量shared開始設置全局變量shared創(chuàng)建主進程創(chuàng)建主進程創(chuàng)建線程創(chuàng)建線程Sleep1SSleep1SShared++Shared++輸出Shared的值輸出Shared的值結(jié)束結(jié)束開始開始創(chuàng)建主進程創(chuàng)建主進程開始設置全局變量shared開始設置全局變量shared創(chuàng)建線程創(chuàng)建線程Sleep1SSleep1SShared++Shared++輸出Shared的值輸出Shared的值結(jié)束結(jié)束編寫一個程序.在其main〔函數(shù)中創(chuàng)建一個〔或多個線程.觀察該線程是如何與主線程并發(fā)運行的。輸出每次操作后的結(jié)果;代碼截圖:結(jié)果截圖:多次運行程序.可以看到會有不同的結(jié)果出現(xiàn);原因:多個線程是并發(fā)執(zhí)行的.相互獨立運行的.多次執(zhí)行結(jié)果可能不相同。在main<>函數(shù)外定義一個變量shared〔全局變量.在main<>中創(chuàng)建一個線程.在main<>中和新線程shared進行循環(huán)加/減操作.觀察該變量的變化;代碼截圖:結(jié)果截圖:分析:程序中兩個進程都對shared變量產(chǎn)生影響.從而使shared的值在重復0和1。原因:在多個線程中均可使用.說明多個線程共享了一塊存儲區(qū).從而驗證了這多個線程共享了同一進程塊。修改程序把shared變量定義到main〔函數(shù)之內(nèi).重復第〔2步操作.觀察該變量的變化。直接把全局變量shared改成局部定義.其它的保持不變直接編譯出現(xiàn)錯誤;代碼:當shared為全局變量時.程序可以正常執(zhí)行.說明了shared在共享的進程塊中.而不是某個線程所獨占;然而此時.shared只是改為局部變量.編譯時出現(xiàn)錯誤.不能繼續(xù)進行操作.需要改動程序.通過傳遞指針變量消除錯誤.繼續(xù)運行。4.編寫一段程序.使用系統(tǒng)調(diào)用fork<>創(chuàng)建兩個子進程。當此程序運行時.在系統(tǒng)中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符:父進程顯示'a'.子進程分別顯示字符'b'和字符'c'。試觀察記錄屏幕上的顯示結(jié)果〔多次運行.查看結(jié)果是否有變化.并分析原因;多次執(zhí)行的話.a/b/c的顯示順序不一定.取決于進程的調(diào)度時機:P1和父進程執(zhí)行先后次序隨機1執(zhí)行p1進程時.先輸出‘b’;執(zhí)行到語句2執(zhí)行父進程時.當執(zhí)行到語句P2=fork<>時.如果創(chuàng)建新進程成功.則又出現(xiàn)一個新進程.即子進程<記為p2>.父進程仍然存在。P2=fork<>語句執(zhí)行完之后.p2和父進程執(zhí)行先后次序隨機。此時執(zhí)行p2時.輸出‘c’;父進程會輸出‘a(chǎn)’。5、修改已編寫的程序.將每個進程輸出一個字符改為每個進程輸出一句話.在觀察程序執(zhí)行時屏幕出現(xiàn)的現(xiàn)象〔多次運行.查看結(jié)果是否有變化.并分析原因;結(jié)果:字符串內(nèi)部字符的數(shù)字不會改變;分析:由于函數(shù)printf<>輸出的字符串之間不會被中斷.因此.字符串內(nèi)部的字符順序輸出時不變。但是,由于進程并發(fā)執(zhí)行時的調(diào)度順序和父子進程的搶占處理機問題.輸出字符串的順序和先后隨著執(zhí)行的不同而發(fā)生變化。這與打印單字符的結(jié)果相同6、如果在程序中使用調(diào)用lockf<>來給每一個子進程加鎖.可以實現(xiàn)進程之間的互斥.觀察并分析出現(xiàn)的現(xiàn)象;代碼:結(jié)果:分析:lockf<1,1,0>鎖定標準輸出設備.lockf<1,0,0>解鎖標準輸出設備.在lockf<1,1,0>與lockf<1,0,0

溫馨提示

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

最新文檔

評論

0/150

提交評論