2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  淺談(windows)線程</p><p><b>  1,前言</b></p><p>  隨著微型計算機的越來越興盛,對進程的資源掌控,已經(jīng)不再適用于微型計算機的資源分配模式,線程的出現(xiàn)也就成為了必然。所以說線程是為了提高操作系統(tǒng)的執(zhí)行效率而引入的,它是進程的一段程序的基本調(diào)度單位。進程具有動態(tài)性、并發(fā)性等特點。線程可以合理的分配進程從CPU

2、占用的資源,并與其他線程共享。每個程序最少有一個進程,每個進程最少有一個線程。</p><p>  為了對線程進行深一步的了解。我在這個實驗報告中對線程做了一個淺顯的分析。除了對線程的一些基本概念,特點,,線程同步,已經(jīng)多線程等等做了一個詳細的解釋。在研究線程的過程中肯定少不了進程的存在。所以在最后對線程和進行做了一個比對。更深層的了解一些有關(guān)的信息。</p><p><b> 

3、 2,什么是線程?</b></p><p>  線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源. 線程也可以稱為輕型進程 (Light Weight Process,LWP)。</p><

4、;p>  它是一種非常"節(jié)儉"的多任務(wù)操作方式。在Linux系統(tǒng)下,啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數(shù)據(jù)表來維護它的代碼段、堆棧段和數(shù)據(jù)段,這是一種"昂貴"的多任務(wù)工作方式。而運行于一個進程中的多個線程,它們彼此之間使用相同的地址空間,共享大部分數(shù)據(jù),啟動一個線程所花費的空間遠遠小于啟動一個進程所花費的空間,而且,線程間彼此切換所需的時間也遠遠小于進程間切換所需要的時間

5、。當然,在具體的系統(tǒng)上,這個數(shù)據(jù)可能會有較大的區(qū)別;</p><p>  每個正在系統(tǒng)上運行的程序都是一個進程。每個進程包含一到多個線程。進程也可能是整個程序或者是部分程序的動態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執(zhí)行。也可以把它理解為代碼運行的上下文。所以線程基本上是輕量級的進程,它負責在單個程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負責多個線程的調(diào)度和執(zhí)行。</p><

6、p>  2.1,什么是多線程?</p><p>  多線程是為了使得多個線程并行的工作以完成多項任務(wù),以提高系統(tǒng)的效率。線程是在同一時間需要完成多項任務(wù)的時候被實現(xiàn)的。</p><p><b>  3,線程的特點</b></p><p><b>  1)輕型實體</b></p><p>  線

7、程中的實體基本上不擁有系統(tǒng)資源,只是有一點必不可少的、能保證獨立運行的資源,比如,在每個線程中都應(yīng)具有一個用于控制線程運行的線程控制塊,用于指示被執(zhí)行指令序列的程序計數(shù)器、保留程序變量、少數(shù)狀態(tài)參數(shù)和返回地址等的一組寄存器和堆棧。</p><p>  2)獨立調(diào)度和分派的基本單位</p><p>  在多線程OS中,線程是能獨立運行的基本單位,因而也是獨立調(diào)度和分派的基本單位。由于線程很“

8、輕”,故線程的切換非常迅速且開銷?。ㄔ谕贿M程中的)。</p><p><b>  3)可并發(fā)執(zhí)行</b></p><p>  在一個進程中的多個線程之間,可以并發(fā)執(zhí)行,甚至允許在一個進程中所有線程都能并發(fā)執(zhí)行;同樣,不同進程中的線程也能并發(fā)執(zhí)行,充分利用和發(fā)揮了處理機與外圍設(shè)備并行工作的能力。</p><p><b>  4)共享進

9、程資源</b></p><p>  在同一進程中的各個線程,都可以共享該進程所擁有的資源,這首先表現(xiàn)在:所有線程都具有相同的地址空間(進程的地址空間),這意味著,線程可以訪問該地址空間的每一個虛地址;此外,還可以訪問進程所擁有的已打開文件、定時器、信號量機構(gòu)等。由于同一個進程內(nèi)的線程共享內(nèi)存和文件,所以線程之間互相通信不必調(diào)用內(nèi)核。</p><p>  4,什么是線程同步?&l

10、t;/p><p>  同步就是協(xié)同步調(diào),按預(yù)定的先后次序進行運行。如:你說完,我再說“同”字從字面上容易理解為一起動作,其實不是,“同”字應(yīng)是指協(xié)同、協(xié)助、互相配合。如進程、線程同步,可理解為進程或線程A和B一塊配合,A執(zhí)行到一定程度時要依靠B的某個結(jié)果,于是停下來,示意B運行;B依言執(zhí)行,再將結(jié)果給A;A再繼續(xù)操作。所謂同步,就是在發(fā)出一個功能調(diào)用時,在沒有得到結(jié)果之前,該調(diào)用就不返回,同時其它線程也不能調(diào)用這個方

11、法。按照這個定義,其實絕大多數(shù)函數(shù)都是同步調(diào)用(例如sin, isdigit等)。但是一般而言,我們在說同步、異步的時候,特指那些需要其他部件協(xié)作或者需要一定時間完成的任務(wù)。例如Window API函數(shù)SendMessage。該函數(shù)發(fā)送一個消息給某個窗口,在對方處理完消息之前,這個函數(shù)不返回。當對方處理完畢以后,該函數(shù)才把消息處理函數(shù)所返回的LRESULT值返回給調(diào)用者。在多線程編程里面,一些敏感數(shù)據(jù)不允許被多個線程同時訪問,此時就使用

12、同步訪問技術(shù),保證數(shù)據(jù)在任何時刻,最多有一個線程訪問,以保證數(shù)據(jù)的完整性。</p><p><b>  5,多線程同步方法</b></p><p>  現(xiàn)在流行的進程線程同步互斥的控制機制,其實是由最原始最基本的4種方法實現(xiàn)的:</p><p>  1. 臨界區(qū):通過對多線程的串行化來訪問公共資源或一段代碼,速度快,適合控制數(shù)據(jù)訪問。</

13、p><p>  2. 互斥量:為協(xié)調(diào)一起對一個共享資源的單獨訪問而設(shè)計的</p><p>  3. 信號量:為控制一個具備有限數(shù)量用戶資源而設(shè)計。 . </p><p>  4. 事 件:用來通知線程有一些事件已發(fā)生,從而啟動后繼任務(wù)的開始。</p><p>  5,1 臨界區(qū)(Critical Section) </p><

14、p>  保證在某一時刻只有一個線程能訪問數(shù)據(jù)的簡便辦法。在任意時刻只允許一個線程對共享資源進行訪問。如果有多個線程試圖同時訪問臨界區(qū),那么在有一個線程進入后其他所有試圖訪問此臨界區(qū)的線程將被掛起,并一直持續(xù)到進入臨界區(qū)的線程離開。臨界區(qū)在被釋放后,其他線程可以繼續(xù)搶占,并以此達到用原子方式操作共享資源的目的。</p><p>  臨界區(qū)包含兩個操作原語: EnterCriticalSection()進入臨界

15、區(qū) LeaveCriticalSection()離開臨界區(qū) </p><p>  5,2 互斥量(Mutex) </p><p>  互斥量跟臨界區(qū)很相似,只有擁有互斥對象的線程才具有訪問資源的權(quán)限,由于互斥對象只有一個,因此就決定了任何情況下此共享資源都不會同時被多個線程所訪問。當前占據(jù)資源的線程在任務(wù)處理完后應(yīng)將擁有的互斥對象交出,以便其他線程在獲得后得以訪問資源?;コ饬勘扰R界區(qū)

16、復(fù)雜。因為使用互斥不僅僅能夠在同一應(yīng)用程序不同線程中實現(xiàn)資源的安全共享,而且可以在不同應(yīng)用程序的線程之間實現(xiàn)對資源的安全共享。 </p><p>  互斥量包含的幾個操作原語:</p><p>  CreateMutex()創(chuàng)建一個互斥量</p><p>  OpenMutex()打開一個互斥量</p><p>  ReleaseMutex

17、()釋放互斥量</p><p>  WaitForMultipleObjects()等待互斥量對象 </p><p>  5.3 信號量(Semaphores) </p><p>  信號量對象對線程的同步方式與前面幾種方法不同,信號允許多個線程同時使用共享資源,這與操作系統(tǒng)中的PV操作相同。它指出了同時訪問共享資源的線程最大數(shù)目。它允許多個線程在同一時刻訪問同一

18、資源,但是需要限制在同一時刻訪問此資源的最大線程數(shù)目。在用CreateSemaphore()創(chuàng)建信號量時即要同時指出允許的最大資源計數(shù)和當前可用資源計數(shù)。一般是將當前可用資源計數(shù)設(shè)置為最大資源計數(shù),每增加一個線程對共享資源的訪問,當前可用資源計數(shù)就會減1,只要當前可用資源計數(shù)是大于0的,就可以發(fā)出信號量信號。但是當前可用計數(shù)減小到0時則說明當前占用資源的線程數(shù)已經(jīng)達到了所允許的最大數(shù)目,不能在允許其他線程的進入,此時的信號量信號將無法發(fā)

19、出。線程在處理完共享資源后,應(yīng)在離開的同時通過ReleaseSemaphore()函數(shù)將當前可用資源計數(shù)加1。在任何時候當前可用資源計數(shù)決不可能大于最大資源計數(shù)。 </p><p>  PV操作及信號量的概念都是由荷蘭科學(xué)家E.W.Dijkstra提出的。信號量S是一個整數(shù),S大于等于零時代表可供并發(fā)進程使用的資源實體數(shù),但S小于零時則表示正在等待使用共享資源的進程數(shù)。 </p><p>

20、<b>  P操作申請資源:</b></p><p><b> ?。?)S減1;</b></p><p> ?。?)若S減1后仍大于等于零,則進程繼續(xù)執(zhí)行;</p><p>  (3)若S減1后小于零,則該進程被阻塞后進入與該信號相對應(yīng)的隊列中,然后轉(zhuǎn)入進程調(diào)度。   </p><p><b&

21、gt;  V操作 釋放資源:</b></p><p><b> ?。?)S加1;</b></p><p> ?。?)若相加結(jié)果大于零,則進程繼續(xù)執(zhí)行;</p><p> ?。?)若相加結(jié)果小于等于零,則從該信號的等待隊列中喚醒一個等待進程,然后再返回原進程繼續(xù)執(zhí)行或轉(zhuǎn)入進程調(diào)度。 </p><p>  信號

22、量包含的幾個操作原語:</p><p>  CreateSemaphore()創(chuàng)建一個信號量</p><p>  OpenSemaphore()打開一個信號量</p><p>  ReleaseSemaphore()釋放信號量</p><p>  WaitForSingleObject()等待信號量 </p><p>

23、  5.4 事件(Event) </p><p>  事件對象也可以通過通知操作的方式來保持線程的同步。并且可以實現(xiàn)不同進程中的線程同步操作。 </p><p><b>  總結(jié): </b></p><p>  1. 互斥量與臨界區(qū)的作用非常相似,但互斥量是可以命名的,也就是說它可以跨越進程使用。所以創(chuàng)建互斥量需要的資源更多,所以如果只為

24、了在進程內(nèi)部是用的話使用臨界區(qū)會帶來速度上的優(yōu)勢并能夠減少資源占用量。因為互斥量是跨進程的互斥量一旦被創(chuàng)建,就可以通過名字打開它。 </p><p>  2. 互斥量(Mutex),信號燈(Semaphore),事件(Event)都可以被跨越進程使用來進行同步數(shù)據(jù)操作,而其他的對象與數(shù)據(jù)同步操作無關(guān),但對于進程和線程來講,如果進程和線程在運行狀態(tài)則為無信號狀態(tài),在退出后為有信號狀態(tài)。所以可以使用WaitForSi

25、ngleObject來等待進程和線程退出。 </p><p>  3. 通過互斥量可以指定資源被獨占的方式使用,但如果有下面一種情況通過互斥量就無法處理,比如現(xiàn)在一位用戶購買了一份三個并發(fā)訪問許可的數(shù)據(jù)庫系統(tǒng),可以根據(jù)用戶購買的訪問許可數(shù)量來決定有多少個線程/進程能同時進行數(shù)據(jù)庫操作,這時候如果利用互斥量就沒有辦法完成這個要求,信號燈對象可以說是一種資源計數(shù)器。</p><p><b

26、>  6,線程的創(chuàng)建</b></p><p><b>  6.1 創(chuàng)建線程</b></p><p>  通過pthread_create()函數(shù)創(chuàng)建線程,API定義如下:</p><p>  與fork()調(diào)用創(chuàng)建一個進程的方法不同,pthread_create()創(chuàng)建的線程并不具備與主線程(即調(diào)用pthread_create

27、()的線程)同樣的執(zhí)行序列,而是使其運行start_routine(arg)函數(shù)。thread返回創(chuàng)建的線程ID,而attr是創(chuàng)建線程時設(shè)置的線程屬性(見下)。pthread_create()的返回值表示線程創(chuàng)建是否成功。盡管arg是void *類型的變量,但它同樣可以作為任意類型的參數(shù)傳給start_routine()函數(shù);同時,start_routine()可以返回一個void *類型的返回值,而這個返回值也可以是其他類型,并由pt

28、hread_join()獲取。 </p><p>  6.2 線程創(chuàng)建屬性</p><p>  pthread_create()中的attr參數(shù)是一個結(jié)構(gòu)指針,結(jié)構(gòu)中的元素分別對應(yīng)著新線程的運行屬性,主要包括以下幾項:</p><p>  __detachstate,表示新線程是否與進程中其他線程脫離同步,如果置位則新線程不能用pthread_join()來同步,且

29、在退出時自行釋放所占用的資源。缺省為PTHREAD_CREATE_JOINABLE狀態(tài)。這個屬性也可以在線程創(chuàng)建并運行以后用pthread_detach()來設(shè)置,而一旦設(shè)置為PTHREAD_CREATE_DETACH狀態(tài)(不論是創(chuàng)建時設(shè)置還是運行時設(shè)置)則不能再恢復(fù)到PTHREAD_CREATE_JOINABLE狀態(tài)。</p><p>  __schedpolicy,表示新線程的調(diào)度策略,主要包括SCHED_O

30、THER(正常、非實時)、SCHED_RR(實時、輪轉(zhuǎn)法)和SCHED_FIFO(實時、先入先出)三種,缺省為SCHED_OTHER,后兩種調(diào)度策略僅對超級用戶有效。運行時可以用過pthread_setschedparam()來改變。</p><p>  __schedparam,一個struct sched_param結(jié)構(gòu),目前僅有一個sched_priority整型變量表示線程的運行優(yōu)先級。這個參數(shù)僅當調(diào)度策

31、略為實時(即SCHED_RR或SCHED_FIFO)時才有效,并可以在運行時通過pthread_setschedparam()函數(shù)來改變,缺省為0。</p><p>  __inheritsched,有兩種值可供選擇:PTHREAD_EXPLICIT_SCHED和PTHREAD_INHERIT_SCHED,前者表示新線程使用顯式指定調(diào)度策略和調(diào)度參數(shù)(即attr中的值),而后者表示繼承調(diào)用者線程的值。缺省為PTH

32、READ_EXPLICIT_SCHED。</p><p>  __scope,表示線程間競爭CPU的范圍,也就是說線程優(yōu)先級的有效范圍。POSIX的標準中定義了兩值:PTHREAD_SCOPE_SYSTEM和PTHREAD_SCOPE_PROCESS,前者表示與系統(tǒng)中所有線程一起競爭CPU時間,后者表示僅與同進程中的線程競爭CPU。目前LinuxThreads僅實現(xiàn)了PTHREAD_SCOPE_SYSTEM一值。

33、</p><p>  pthread_attr_t結(jié)構(gòu)中還有一些值,但不使用pthread_create()來設(shè)置。</p><p>  為了設(shè)置這些屬性,POSIX定義了一系列屬性設(shè)置函數(shù),包括pthread_attr_init()、pthread_attr_destroy()各個屬性相關(guān)的pthread_attr_get---/pthread_attr_set---函數(shù)。</p&

34、gt;<p><b>  7,線程取消</b></p><p>  7.1 線程取消的定義</p><p>  一般情況下,線程在其主體函數(shù)退出的時候會自動終止,但同時也可以因為接收到另一個線程發(fā)來的終止(取消)請求而強制終止。</p><p>  7.2 線程取消的語義</p><p>  線程取消的方法

35、是向目標線程發(fā)Cancel信號,但如何處理Cancel信號則由目標線程自己決定,或者忽略、或者立即終止、或者繼續(xù)運行至Cancelation-point(取消點),由不同的Cancelation狀態(tài)決定。</p><p>  線程接收到CANCEL信號的缺省處理(即pthread_create()創(chuàng)建線程的缺省狀態(tài))是繼續(xù)運行至取消點,也就是說設(shè)置一個CANCELED狀態(tài),線程繼續(xù)運行,只有運行至Cancelat

36、ion-point的時候才會退出。</p><p><b>  7.3 取消點</b></p><p>  根據(jù)POSIX標準,pthread_join()、pthread_testcancel()、pthread_cond_wait()、pthread_cond_timedwait()、sem_wait()、sigwait()等函數(shù)以及read()、write()等

37、會引起阻塞的系統(tǒng)調(diào)用都是Cancelation-point,而其他pthread函數(shù)都不會引起Cancelation動作。但是pthread_cancel的手冊頁聲稱,由于LinuxThread庫與C庫結(jié)合得不好,因而目前C庫函數(shù)都不是Cancelation-point;但CANCEL信號會使線程從阻塞的系統(tǒng)調(diào)用中退出,并置EINTR錯誤碼,因此可以在需要作為Cancelation-point的系統(tǒng)調(diào)用前后調(diào)用pthread_testc

38、ancel(),從而達到POSIX標準所要求的目標,即如下代碼段:</p><p>  pthread_testcancel();</p><p>  retcode = read(fd, buffer, length);</p><p>  pthread_testcancel();</p><p>  7.4 程序設(shè)計方面的考慮</

39、p><p>  如果線程處于無限循環(huán)中,且循環(huán)體內(nèi)沒有執(zhí)行至取消點的必然路徑,則線程無法由外部其他線程的取消請求而終止。因此在這樣的循環(huán)體的必經(jīng)路徑上應(yīng)該加入pthread_testcancel()調(diào)用。</p><p>  7.5與線程取消相關(guān)的pthread函數(shù)</p><p>  int pthread_cancel(pthread_t thread) </

40、p><p>  發(fā)送終止信號給thread線程,如果成功則返回0,否則為非0值。發(fā)送成功并不意味著thread會終止。 </p><p>  int pthread_setcancelstate(int state, int *oldstate) </p><p>  設(shè)置本線程對Cancel信號的反應(yīng),state有兩種值:PTHREAD_CANCEL_ENABLE(缺

41、?。┖蚉THREAD_CANCEL_DISABLE,分別表示收到信號后設(shè)為CANCLED狀態(tài)和忽略CANCEL信號繼續(xù)運行;old_state如果不為NULL則存入原來的Cancel狀態(tài)以便恢復(fù)。 </p><p>  int pthread_setcanceltype(int type, int *oldtype) </p><p>  設(shè)置本線程取消動作的執(zhí)行時機,type由兩種取值:

42、PTHREAD_CANCEL_DEFFERED和PTHREAD_CANCEL_ASYCHRONOUS,僅當Cancel狀態(tài)為Enable時有效,分別表示收到信號后繼續(xù)運行至下一個取消點再退出和立即執(zhí)行取消動作(退出);oldtype如果不為NULL則存入運來的取消動作類型值。 </p><p>  void pthread_testcancel(void) </p><p>  檢查本線程

43、是否處于Canceld狀態(tài),如果是,則進行取消動作,否則直接返回。</p><p><b>  8,線程的調(diào)度</b></p><p>  當若干進程都有多個線程時,就存在兩個層次的并行:進程和線程,在這樣的系統(tǒng)中調(diào)度處理有本質(zhì)差別,這取決于系統(tǒng)所支持的是用戶級線程還是內(nèi)核級線程</p><p><b>  用戶級線程</b&g

44、t;</p><p>  由于內(nèi)核并不知道線程的存在,所以內(nèi)核還是和以前一樣地操作,選取一個進程A,并給與A以時間片控制,A中的線程調(diào)度程序決定線程的調(diào)度,由于多道線程并不存在時鐘中斷,所以這個線程可以運行任意長時間,如果進程運行完了他的時間片,系統(tǒng)就會選擇另一個進程執(zhí)行,當內(nèi)核再次輪轉(zhuǎn)到該進程執(zhí)行,原來的線程又會繼續(xù)執(zhí)行,而不會自動交由另一個線程運行,除非該線程主動放棄CPU</p><p&

45、gt;<b>  內(nèi)核級線程</b></p><p>  內(nèi)核按照線程進行調(diào)度,而不需要考慮這個線程屬于哪個進程,對被選擇的線程賦予一定的時間片</p><p>  用戶線程和內(nèi)核線程的差別在于:</p><p>  性能,用戶級線程的切換需要少量的機器指令,而內(nèi)核線程的切換則需要完整的上下文切換,修改內(nèi)存映像,使告訴緩存失效,這導(dǎo)致了若干數(shù)量

46、級的延遲,但對于內(nèi)核線程,同進程內(nèi)的線程切換要比不同進程間的線程切換要高效</p><p>  對于用戶線程,如果一個線程阻塞在IO上,整個進程都會進入阻塞狀態(tài),而內(nèi)核級線程則不會這樣,用戶級線程可以使用專門為應(yīng)用程序定制的線程調(diào)度程序,運行系統(tǒng)可以了解所有線程的作用,從而定制最合理的調(diào)度順序,而內(nèi)核對于內(nèi)核線程則缺乏這樣的了解,因此,應(yīng)用程序定制的用戶線程比內(nèi)核線程更好的滿足應(yīng)用的需要。</p>

47、<p>  9, 進程與線程的區(qū)別</p><p>  9.1 區(qū)別的總體論述</p><p>  線程和進程的區(qū)別在于,子進程和父進程有不同的代碼和數(shù)據(jù)空間,而多個線程則共享數(shù)據(jù)空間,每個線程有自己的執(zhí)行堆棧和程序計數(shù)器為其執(zhí)行上下文。多線程主要是為了節(jié)約CPU時間,發(fā)揮利用,根據(jù)具體情況而定。線程的運行中需要使用計算機的內(nèi)存資源和CPU。</p><p&

48、gt;  通常在一個進程中可以包含若干個線程,它們可以利用進程所擁有的資源。在引入線程的操作系統(tǒng)中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調(diào)度的基本單位。由于線程比進程更小,基本上不擁有系統(tǒng)資源,故對它的調(diào)度所付出的開銷就會小得多,能更高效的提高系統(tǒng)內(nèi)多個程序間并發(fā)執(zhí)行的程度,從而顯著提高系統(tǒng)資源的利用率和吞吐量。</p><p>  9.2 進程與線程的區(qū)別和聯(lián)系</p>

49、<p>  (1)劃分尺度:線程更小,所以多線程程序并發(fā)性更高;</p><p>  (2)資源分配:進程是資源分配的基本單位,同一進程內(nèi)多個線程共享其資源;</p><p>  (3)地址空間:進程擁有獨立的地址空間,同一進程內(nèi)多個線程共享其資源;</p><p>  (4)處理器調(diào)度:線程是處理器調(diào)度的基本單位;</p><p&

50、gt;  (5)執(zhí)行:每個線程都有一個程序運行的入口,順序執(zhí)行序列和程序的出口,但線程不能單獨執(zhí)行,必須組成進程,一個進程至少有一個主線程。簡而言之,一個程序至少有一個進程,一個進程至少有一個線程。</p><p>  9.3 進程與程序的區(qū)別和聯(lián)系</p><p>  (1)程序只是一組指令的有序集合,它本身沒有任何運行的含義,它只是一個靜態(tài)的實體。而進程則不同,它是程序在某個數(shù)據(jù)集上的

51、執(zhí)行。進程是一個動態(tài)的實體,它有自己的生命周期。反映了一個程序在一定的數(shù)據(jù)集上運行的全部動態(tài)過程。</p><p>  (2)進程和程序并不是一一對應(yīng)的,一個程序執(zhí)行在不同的數(shù)據(jù)集上就成為不同的進程,可以用進程控制塊來唯一地標識每個進程。而這一點正是程序無法做到的,由于程序沒有和數(shù)據(jù)產(chǎn)生直接的聯(lián)系,既使是執(zhí)行不同的數(shù)據(jù)的程序,他們的指令的集合依然是一樣的,所以無法唯一地標識出這些運行于不同數(shù)據(jù)集上的程序。一般來說

52、,一個進程肯定有一個與之對應(yīng)的程序,而且只有一個。而一個程序有可能沒有與之對應(yīng)的進程(因為它沒有執(zhí)行),也有可能有多個進程與之對應(yīng)(運行在幾個不同的數(shù)據(jù)集上)。</p><p>  (3)進程還具有并發(fā)性和交往性,這也與程序的封閉性不同。</p><p>  9.4 進程與程序區(qū)別和聯(lián)系的表現(xiàn)</p><p>  1)程序只是一組指令的有序集合,它本身沒有任何運行

53、的含義,它只是一個靜態(tài)的實體。而進程則不同,它是程序在某個數(shù)據(jù)集上的執(zhí)行。</p><p>  進程是一個動態(tài)的實體,它有自己的生命周期。它因創(chuàng)建而產(chǎn)生,因調(diào)度而運行,因等待資源或事件而被處于等待狀態(tài),因完成任務(wù)而被撤消。反映了一個程序在一定的數(shù)據(jù)集上運行的全部動態(tài)過程。</p><p>  2)進程和程序并不是一一對應(yīng)的,一個程序執(zhí)行在不同的數(shù)據(jù)集上就成為不同的進程,可以用進程控制塊來唯

54、一地標識每個進程。而這一點正是程序無法做到的,由于程序沒有和數(shù)據(jù)產(chǎn)生直接的聯(lián)系,既使是執(zhí)行不同的數(shù)據(jù)的程序,他們的指令的集合依然是一樣的,所以無法唯一地標識出這些運行于不同數(shù)據(jù)集上的程序。一般來說,一個進程肯定有一個與之對應(yīng)的程序,而且只有一個。而一個程序有可能沒有與之對應(yīng)的進程(因為它沒有執(zhí)行),也有可能有多個進程與之對應(yīng)(運行在幾個不同的數(shù)據(jù)集上)。</p><p>  3)進程還具有并發(fā)性和交往性,這也與程

55、序的封閉性不同。進程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性。進程和線程的區(qū)別在于:</p><p>  簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.</p><p>  線程的劃分尺度小于進程,使得多線程程序的并發(fā)性高。</p><p>  另外,進程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存,

56、從而極大地提高了程序的運行效率。</p><p>  線程在執(zhí)行過程中與進程還是有區(qū)別的。每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制。</p><p>  從邏輯角度來看,多線程的意義在于一個應(yīng)用程序中,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)并沒有將多個線程看做多個獨立的應(yīng)用,來實現(xiàn)進程的調(diào)度和

57、管理以及資源分配。這就是進程和線程的重要區(qū)別。</p><p>  進程是具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位.</p><p>  線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與

58、同屬一個進程的其他的線程共享進程所擁有的全部資源.</p><p>  一個線程可以創(chuàng)建和撤銷另一個線程;同一個進程中的多個線程之間可以并發(fā)執(zhí)行.</p><p>  線程與進程的區(qū)別可以歸納為以下幾點:</p><p>  1)地址空間和其它資源(如打開文件):進程間相互獨立,同一進程的各線程間共享。某進程內(nèi)的線程在其它進程不可見。</p><

59、p>  2)通信:進程間通信IPC,線程間可以直接讀寫進程數(shù)據(jù)段(如全局變量)來進行通信——需要進程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性。</p><p>  3)調(diào)度和切換:線程上下文切換比進程上下文切換要快得多。</p><p>  4)在多線程OS中,進程不是一個可執(zhí)行的實體。</p><p><b>  課程設(shè)計總結(jié):</b>

60、</p><p>  在做整個課程設(shè)計的過程中,讓我更加深層次的了解了線程。課程設(shè)計的研究中,我從自己的理解還有從各方面查詢到的資料,最后綜合的做出了這個課程設(shè)計。</p><p>  這次的課程設(shè)計讓我從全方位的了解了線程的存在,以及它在操作系統(tǒng)中扮演的重要角色。這次課程設(shè)計在總體上我還是比較滿意。雖然有些知識點沒有能綜合進來,還有一些重要的知識點可能會出現(xiàn)的遺漏。但是我相信這會給我以后

溫馨提示

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

評論

0/150

提交評論