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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

作业、进程、线程

發(fā)布時(shí)間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 作业、进程、线程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作業(yè)、進(jìn)程、線程

標(biāo)簽: web互聯(lián)網(wǎng)youtube創(chuàng)業(yè)myspace 6056人閱讀 評(píng)論(2) 收藏 舉報(bào) 分類: 操作系統(tǒng)(4)

目錄(?)[+]

1. 基本概念

線程,進(jìn)程是什么?要理解兩者概念,須要先了解一下操作系統(tǒng)的一些相關(guān)概念。

任務(wù)調(diào)度:

大部分操作系統(tǒng)(如Windows、Linux)的任務(wù)調(diào)度是采用時(shí)間片輪轉(zhuǎn)的搶占式調(diào)度方式,也就是說一個(gè)任務(wù)執(zhí)行一小段時(shí)間后強(qiáng)制暫停去執(zhí)行下一個(gè)任務(wù),每個(gè)任務(wù)輪流執(zhí)行。任務(wù)執(zhí)行的一小段時(shí)間叫做時(shí)間片,任務(wù)正在執(zhí)行時(shí)的狀態(tài)叫運(yùn)行狀態(tài),任務(wù)執(zhí)行一段時(shí)間后強(qiáng)制暫停去執(zhí)行下一個(gè)任務(wù),被暫停的任務(wù)就處于就緒狀態(tài)等待下一個(gè)屬于它的時(shí)間片的到來。這樣每個(gè)任務(wù)都能得到執(zhí)行,由于CPU的執(zhí)行效率非常高,時(shí)間片非常短,在各個(gè)任務(wù)之間快速地切換,給人的感覺就是多個(gè)任務(wù)在“同時(shí)進(jìn)行”,這也就是我們所說的并發(fā)(別覺得并發(fā)有多高深,它的實(shí)現(xiàn)很復(fù)雜,但它的概念很簡(jiǎn)單,就是一句話:多個(gè)任務(wù)同時(shí)執(zhí)行)。多任務(wù)運(yùn)行過程的示意圖如下:



操作系統(tǒng)中的任務(wù)調(diào)度



作業(yè):用戶在一次解決或是一個(gè)事務(wù)處理過程中要求計(jì)算機(jī)系統(tǒng)所做的工作的集合,它包括用戶程序、所需要的數(shù)據(jù)集控制命令等。作業(yè)是由一系列有序的步驟組成的。作業(yè)的完成要經(jīng)過作業(yè)提交、作業(yè)收容、作業(yè)執(zhí)行和作業(yè)完成4個(gè)階段。在執(zhí)行一個(gè)作業(yè)可能會(huì)運(yùn)行多個(gè)不同的進(jìn)程。

進(jìn)程:程序在一個(gè)數(shù)據(jù)集上的一次運(yùn)行過程。是操作系統(tǒng)資源分配的基本單位。

?????????? 在Windows下,進(jìn)程又被細(xì)化為線程,也就是一個(gè)進(jìn)程下有多個(gè)能獨(dú)立運(yùn)行的更小的單位.? 進(jìn)程還擁有一個(gè)私有的虛擬地址空間,該空間僅能被它所包含的線程訪問。

線程:是進(jìn)程中的一個(gè)實(shí)體,是被操作系統(tǒng)獨(dú)立調(diào)度和執(zhí)行的基本單位。一個(gè)進(jìn)程包含一個(gè)或多個(gè)線程。

????????????? 線程只能歸屬于一個(gè)進(jìn)程并且它只能訪問該進(jìn)程所擁有的資源。當(dāng)操作系統(tǒng)創(chuàng)建一個(gè)進(jìn)程后,該進(jìn)程會(huì)自動(dòng)申請(qǐng)一個(gè)名為主線程或首要線程的線程。主線程將執(zhí)行運(yùn)行時(shí)宿主, 而運(yùn)行時(shí)宿主會(huì)負(fù)責(zé)載入CLR。


簡(jiǎn)單總結(jié):

作業(yè)是向計(jì)算機(jī)提交任務(wù)的任務(wù)實(shí)體,

而進(jìn)程是執(zhí)行實(shí)體,是資源分配的基本單位,

線程是處理機(jī)調(diào)度的基本單位。

??

2. 進(jìn)程

? ? ? ?我們都知道計(jì)算機(jī)的核心是CPU,它承擔(dān)了所有的計(jì)算任務(wù);而操作系統(tǒng)是計(jì)算機(jī)的管理者,它負(fù)責(zé)任務(wù)的調(diào)度、資源的分配和管理,統(tǒng)領(lǐng)整個(gè)計(jì)算機(jī)硬件;應(yīng)用程序側(cè)是具有某種功能的程序,程序是運(yùn)行于操作系統(tǒng)之上的。

? ? ? ? ?

2.1 進(jìn)程的概念主要有兩點(diǎn):

??????? 第一,進(jìn)程是一個(gè)實(shí)體。每一個(gè)進(jìn)程都有它自己的地址空間,一般情況下,包括文本區(qū)域(text region)、數(shù)據(jù)區(qū)域(data region)和堆棧(stack region)。文本區(qū)域存儲(chǔ)處理器執(zhí)行的代碼;數(shù)據(jù)區(qū)域存儲(chǔ)變量和進(jìn)程執(zhí)行期間使用的動(dòng)態(tài)分配的內(nèi)存;堆棧區(qū)域存儲(chǔ)著活動(dòng)過程調(diào)用的指令和本地變量。

?????? 第二,進(jìn)程是一個(gè)“執(zhí)行中的程序”。程序是一個(gè)沒有生命的實(shí)體,只有處理器賦予程序生命時(shí),它才能成為一個(gè)活動(dòng)的實(shí)體,我們稱其為進(jìn)程。

進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集上的一次動(dòng)態(tài)執(zhí)行的過程,是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,是應(yīng)用程序運(yùn)行的載體。

2.2 進(jìn)程特征  

??????? 動(dòng)態(tài)性:進(jìn)程的實(shí)質(zhì)是程序在多道程序系統(tǒng)中的一次執(zhí)行過程,進(jìn)程是動(dòng)態(tài)產(chǎn)生,動(dòng)態(tài)消亡的。

  并發(fā)性:任何進(jìn)程都可以同其他進(jìn)程一起并發(fā)執(zhí)行

  獨(dú)立性:進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的基本單位,同時(shí)也是系統(tǒng)分配資源和調(diào)度的獨(dú)立單位;

  異步性:由于進(jìn)程間的相互制約,使進(jìn)程具有執(zhí)行的間斷性,即進(jìn)程按各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn)

  結(jié)構(gòu)特征:進(jìn)程由程序、數(shù)據(jù)和進(jìn)程控制塊三部分組成。

  多個(gè)不同的進(jìn)程可以包含相同的程序:一個(gè)程序在不同的數(shù)據(jù)集里就構(gòu)成不同的進(jìn)程,能得到不同的結(jié)果;但是執(zhí)行過程中,程序不能發(fā)生改變。

2.3 進(jìn)程和作業(yè)的區(qū)別

1、作業(yè)是用戶向計(jì)算機(jī)提交任務(wù)的任務(wù)實(shí)體。在用戶向計(jì)算機(jī)提交作業(yè)后,系統(tǒng)將它放入外存中的作業(yè)等待隊(duì)列中等待執(zhí)行。而進(jìn)程則是完成用戶任務(wù)的執(zhí)行實(shí)體,是向系統(tǒng)申請(qǐng)分配資源的基本單位。任一進(jìn)程,只要它被創(chuàng)建,總有相應(yīng)的部分存在于內(nèi)存中。
2、一個(gè)作業(yè)可由多個(gè)進(jìn)程組成,且必須至少由一個(gè)進(jìn)程組成,反過來則不成立。
3、作業(yè)的概念主要用在
批處理系統(tǒng)中,像UNIX這樣的分時(shí)系統(tǒng)中就沒有作業(yè)的概念。而進(jìn)程的概念則用在幾乎所有的多道程序系統(tǒng)中

2.4 進(jìn)程和程序的區(qū)別

1、程序是靜態(tài)概念,本身可以作為一種軟件資源保存;而進(jìn)程是程序的一次執(zhí)行過程,是動(dòng)態(tài)概念,它有一定的生命期,是動(dòng)態(tài)地產(chǎn)生和消亡的。

2、進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的單位,能與其他進(jìn)程并發(fā)執(zhí)行,進(jìn)程是作為資源申請(qǐng)和調(diào)度單位存在的;而通常的程序段不能作為一個(gè)獨(dú)立運(yùn)行的單位。

3、程序和進(jìn)程無一一對(duì)應(yīng)關(guān)系。一方面一個(gè)程序可由多個(gè)進(jìn)程共用;另一方面,一個(gè)進(jìn)程在活動(dòng)中又可順序地執(zhí)行若干個(gè)程序。?

2.3 進(jìn)程的狀態(tài)

????? 進(jìn)程執(zhí)行時(shí)的間斷性,決定了進(jìn)程可能具有多種狀態(tài)。事實(shí)上,運(yùn)行中的進(jìn)程可能具有以下三種基本狀態(tài)。

  1)就緒狀態(tài)(Ready):

  進(jìn)程已獲得除處理器外的所需資源,等待分配處理器資源;只要分配了處理器進(jìn)程就可執(zhí)行。就緒進(jìn)程可以按多個(gè)優(yōu)先級(jí)來劃分隊(duì)列。例如,當(dāng)一個(gè)進(jìn)程由于時(shí)間片用完而進(jìn)入就緒狀態(tài)時(shí),排入低優(yōu)先級(jí)隊(duì)列;當(dāng)進(jìn)程由I/O操作完成而進(jìn)入就緒狀態(tài)時(shí),排入高優(yōu)先級(jí)隊(duì)列。

  2)運(yùn)行狀態(tài)(Running):

  進(jìn)程占用處理器資源;處于此狀態(tài)的進(jìn)程的數(shù)目小于等于處理器的數(shù)目。在沒有其他進(jìn)程可以執(zhí)行時(shí)(如所有進(jìn)程都在阻塞狀態(tài)),通常會(huì)自動(dòng)執(zhí)行系統(tǒng)的空閑進(jìn)程。

  3)阻塞狀態(tài)(Blocked):

  由于進(jìn)程等待某種條件(如I/O操作或進(jìn)程同步),在條件滿足之前無法繼續(xù)執(zhí)行。該事件發(fā)生前即使把處理機(jī)分配給該進(jìn)程,也無法運(yùn)行。

?????????????

??

???????????????????????????????????? 進(jìn)程狀態(tài)的轉(zhuǎn)換

進(jìn)程狀態(tài)五態(tài)模型: 運(yùn)行狀態(tài)(Running)當(dāng)一個(gè)進(jìn)程正在處理機(jī)上運(yùn)行時(shí)。 就緒狀態(tài)(Ready)一個(gè)進(jìn)程獲得了除處理機(jī)之外的一切所需資源,一旦得到處理機(jī)即可運(yùn)行. 等待狀態(tài)又稱阻塞狀態(tài)(Blocked)一個(gè)進(jìn)程正在等待某一事件而暫停運(yùn)行時(shí)。如等待某資源,等待輸入/輸出完成。 創(chuàng)建狀態(tài)(NEW)一個(gè)進(jìn)程正在被創(chuàng)建,還沒被轉(zhuǎn)到就緒狀態(tài)之前的狀態(tài)。 結(jié)束狀態(tài)(Exit)一個(gè)進(jìn)程正在從系統(tǒng)中消失時(shí)的狀態(tài),這是因?yàn)檫M(jìn)程結(jié)束或由于其他原因所導(dǎo)致。

?

?????????????????????????????????????????????????

??????????????????????????????????????????????????????? 狀態(tài)變化圖

?

2.5 Windows 和linux進(jìn)程

????? 進(jìn)程創(chuàng)建:WINDOWS:WIN32接口,函數(shù)CreateProcess。LINUX:FORK函數(shù),父子進(jìn)程的區(qū)別PPID和PID。

???????LINUX中的進(jìn)程的含義和WINDOWS中是不一樣的。LINUX中的進(jìn)程本身是可以執(zhí)行的。而WINDOWS中,進(jìn)程只是表示一個(gè)資源的擁有體,是不能執(zhí)行的。要執(zhí)行的話,一定需要一個(gè)線程。這也部分解釋了為什么CreateProcess中為啥一定要傳入要執(zhí)行的文件的名字。LINUX子進(jìn)程直接使用父親的地址空間,只有子進(jìn)程加載一個(gè)新的可執(zhí)行文件的時(shí)候才創(chuàng)建自己的地址空間。也就是很多時(shí)候共享地址空間,有個(gè)函數(shù)(忘了)就是如果決定開始寫入,則將資源拷貝一份;如果此時(shí)突然決定不需要寫入,此時(shí)就能避免系統(tǒng)資源的消耗。

????? 進(jìn)程相對(duì)于WINDOWS中的線程,所以同WINDOWS中的線程創(chuàng)建相比,二者的開銷應(yīng)該差不多。

????? 執(zhí)行:LINUX:exec, WNDOWS:WIN32函數(shù)CreateProcess。

????? 底層:兩者大部分都是C和匯編,在我們看來以為L(zhǎng)INUX全是C,WINDOWS是C++,其實(shí)不然操作硬件的是匯編和C。

??????使用了不少宏定義,簡(jiǎn)化地址運(yùn)算和程序結(jié)構(gòu),如定義一個(gè)空地址:0x000000表示NULL。

????? 內(nèi)核

???????????? WINDOWS:相對(duì)穩(wěn)定的API,就是向后兼容,我們總是看到兼容的字眼。升級(jí)方便,過于臃腫。復(fù)雜的繼承關(guān)系,藏得結(jié)結(jié)實(shí)實(shí)的代碼。

???????????? LINUX:不固定的接口,為了更加的技術(shù)化,所以LINUX一直改進(jìn),很多時(shí)候偏離了桌面用戶。頭文件和執(zhí)行文件也就是一些算法的改進(jìn)和函數(shù)改進(jìn)。如果你看完2.4的內(nèi)核后,再看2.6的內(nèi)核差異不大,但是不少。升級(jí)復(fù)雜,考慮的東西太多。數(shù)不盡的代碼,代碼是寶貴的,又是該死的。

???? 進(jìn)程算法(優(yōu)先級(jí)):

????????????? LINUX:圖形界面少點(diǎn),內(nèi)核支持搶占的同時(shí)又支持CFS公平調(diào)度算法。二叉樹、紅黑樹等算法。

????????????? WINDOWS:進(jìn)程假死現(xiàn)象普遍,采用阻塞算法,很多時(shí)候?qū)е虏涣鲿场⒖ㄋ馈,F(xiàn)在win7做了相當(dāng)大的改進(jìn)。算法不清楚,以前阻塞編程的不少。內(nèi)存:基本上兩者差不多,在X86你懂得。

?

?????? WINDOS里的進(jìn)程/線程是繼承自O(shè)S/2的。在WINDOS里,"進(jìn)程"是指一個(gè)程序,而"線程"是一個(gè)"進(jìn)程"里的一個(gè)執(zhí)行"線索"。從核心上講, WINDOS的多進(jìn)程與Linux并無多大的區(qū)別,在WINDOS里的線程才相當(dāng)于Linux的進(jìn)程,是一個(gè)實(shí)際正在執(zhí)行的代碼。但是,WINDOS里同一個(gè)進(jìn)程里各個(gè)線程之間是共享數(shù)據(jù)段的。這才是與Linux的進(jìn)程最大的不同。


下面這段程序顯示了WINDOS下一個(gè)進(jìn)程如何啟動(dòng)一個(gè)線程。

int g;

DWORD WINAPI ChildProcess( LPVOID lpParameter ){

int i;

for ( i = 1; i <1000; i ++) {

g ++;

printf( "This is Child Thread: %d", g );

}

ExitThread( 0 );

};

void main()

{

int threadID;

int i;

g = 0;

CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID );

for ( i = 1; i <1000; i ++) {

g ++;

printf( "This is Parent Thread: %d", g );

}

}


在WINDOS下,使用CreateThread函數(shù)創(chuàng)建線程,與Linux下創(chuàng)建進(jìn)程不同,WINDOS線程不是從創(chuàng)建處開始運(yùn)行的,而是由 CreateThread指定一個(gè)函數(shù),線程就從那個(gè)函數(shù)處開始運(yùn)行。此程序同前面的UNIX程序一樣,由兩個(gè)線程各打印1000條信息。 threadID是子線程的線程號(hào),另外,全局變量g是子線程與父線程共享的,這就是與Linux最大的不同之處。大家可以看出,WINDOS的進(jìn)程/線程要比Linux復(fù)雜,在Linux要實(shí)現(xiàn)類似WINDOS的線程并不難,只要fork以后,讓子進(jìn)程調(diào)用ThreadProc函數(shù),并且為全局變量開設(shè)共享數(shù)據(jù)區(qū)就行了,但在WINDOS下就無法實(shí)現(xiàn)類似fork的功能了。所以現(xiàn)在WINDOS下的C語言編譯器所提供的庫(kù)函數(shù)雖然已經(jīng)能兼容大多數(shù)Linux/UNIX的庫(kù)函數(shù),但卻仍無法實(shí)現(xiàn)fork。


對(duì)于多任務(wù)系統(tǒng),共享數(shù)據(jù)區(qū)是必要的,但也是一個(gè)容易引起混亂的問題,在WINDOS下,一個(gè)程序員很容易忘記線程之間的數(shù)據(jù)是共享的這一情況,一個(gè)線程修改過一個(gè)變量后,另一個(gè)線程卻又修改了它,結(jié)果引起程序出問題。但在Linux下,由于變量本來并不共享,而由程序員來顯式地指定要共享的數(shù)據(jù),使程序變得更清晰與安全。


至于WINDOS的"進(jìn)程"概念,其含義則是"應(yīng)用程序",也就是相當(dāng)于UNIX下的exec了。

?

?

2.6 進(jìn)程通信

????? windows的進(jìn)程間的通信方式有:

????? 1.文件映射;2. 共享內(nèi)存(是文件映射的一種特殊情況);3.郵件槽(mailslot)(點(diǎn)對(duì)點(diǎn)消息隊(duì)列); 4.匿名管道;5;命名管道; 6. 剪貼板;7.動(dòng)態(tài)數(shù)據(jù)交換;8.對(duì)象鏈接與嵌入;9.遠(yuǎn)程過程調(diào)用;10.動(dòng)態(tài)鏈接庫(kù);11.socket;12.WM_COPYDATA .
???????linux進(jìn)程間通信的方式有:1.管道 2.信號(hào)量 3.共享內(nèi)存 4.消息隊(duì)列 5.套接字 6.信號(hào)
??????windows和linux共有的進(jìn)程間通信方式:1. 消息(linux中叫做信號(hào)) 2. 共享內(nèi)存? 3. 郵槽? 4. 管道?? 5.socket

Windows 進(jìn)程

在運(yùn)行于32位處理器上的32位Windows操作系統(tǒng)中,可將一個(gè)進(jìn)程視為一段大小為4GB(232字節(jié))的線性內(nèi)存空間,它起始于0x00000000結(jié)束于0xFFFFFFFF。這段內(nèi)存空間不能被其他進(jìn)程所訪問,所以稱為該進(jìn)程的私有空間。這段空間被平分為兩塊,2GB被系統(tǒng)所有,剩下2GB被用戶所有。

如果有N個(gè)進(jìn)程運(yùn)行在同一臺(tái)機(jī)器上,那么將需要N×4GB的海量RAM,還好事實(shí)并非如此。

  • Windows是按需為每個(gè)進(jìn)程分配內(nèi)存的,4GB是32位系統(tǒng)中一個(gè)進(jìn)程所占空間的上限。
  • 將進(jìn)程所需的內(nèi)存劃分為4KB大小的內(nèi)存頁,并根據(jù)使用情況將這些內(nèi)存頁存儲(chǔ)在硬盤上或加載到RAM中,通過系統(tǒng)的這種虛擬內(nèi)存機(jī)制,我們可以有效地減少對(duì)實(shí)際內(nèi)存的需求量。當(dāng)然這些對(duì)用戶和開發(fā)者來說都是透明的。

??????? 在32位Windows中,進(jìn)程占據(jù)4GB的虛擬地址空間。與它們?cè)贛S-DOS和16位Windows操作系統(tǒng)中不同,32位Windows進(jìn)程是沒有活力的。這就是說,一個(gè)32位Windows進(jìn)程并不執(zhí)行什么指令,它只是占據(jù)著4GB的地址空間,此空間中有應(yīng)用程序EXE文件的代碼和數(shù)據(jù)

EXE需要的DLL也將它們的代碼的數(shù)據(jù)裝入到進(jìn)程的地址空間除了地址空間,進(jìn)程還占有某些資源,比如文件、動(dòng)態(tài)內(nèi)存分配和線程。當(dāng)進(jìn)程終止時(shí),在它生命期中創(chuàng)建的各種資源將被清除。
如上所述,進(jìn)程是沒有活力的,它只是一個(gè)靜態(tài)的概念

為了讓進(jìn)程完成一些工作,進(jìn)程必須至少占有一線程,所以線程是描述進(jìn)程內(nèi)的執(zhí)行,正是線程負(fù)責(zé)執(zhí)行包含在進(jìn)程的地址空間中的代碼。

實(shí)際上,單個(gè)進(jìn)程可能包含幾個(gè)線程,它們可以同時(shí)執(zhí)行進(jìn)程的地址空間中的代碼。
為了做到這一點(diǎn),
每個(gè)線程有自己的一組CPU寄存器和椎。每個(gè)進(jìn)程至少有一個(gè)線址程在執(zhí)行其地址空間中的代碼,
如果沒有線程執(zhí)行進(jìn)程地空間中的代碼,進(jìn)程也就沒有繼續(xù)存在的理由,系統(tǒng)將自動(dòng)清除進(jìn)程及其地址空間。
為了運(yùn)行所有這些線程,操作系統(tǒng)為每個(gè)獨(dú)立線程安排一些CPU時(shí)間,操作系統(tǒng)以輪轉(zhuǎn)方式向線程提供時(shí)間片,這就給人一種假象,好象這些線程都在同時(shí)運(yùn)行。
創(chuàng)建一個(gè)32位Windows進(jìn)程時(shí),它的第一個(gè)線程稱為主線程,由系統(tǒng)自動(dòng)生成,然后可由這個(gè)主線程生成額外的線程,這些線程又可生成更多的線程。

?

?

3. 線程

3.1 線程的引入

在早期的操作系統(tǒng)中并沒有線程的概念,進(jìn)程是能擁有資源和獨(dú)立運(yùn)行的最小單位,也是程序執(zhí)行的最小單位。任務(wù)調(diào)度采用的是時(shí)間片輪轉(zhuǎn)的搶占式調(diào)度方式,而進(jìn)程是任務(wù)調(diào)度的最小單位,每個(gè)進(jìn)程有各自獨(dú)立的一塊內(nèi)存,使得各個(gè)進(jìn)程之間內(nèi)存地址相互隔離。

后來,隨著計(jì)算機(jī)的發(fā)展,對(duì)CPU的要求越來越高,進(jìn)程之間的切換開銷較大,已經(jīng)無法滿足越來越復(fù)雜的程序的要求了。于是就發(fā)明了線程,線程是程序執(zhí)行中一個(gè)單一的順序控制流程,是程序執(zhí)行流的最小單元,是處理器調(diào)度和分派的基本單位。一個(gè)進(jìn)程可以有一個(gè)或多個(gè)線程,各個(gè)線程之間共享程序的內(nèi)存空間(也就是所在進(jìn)程的內(nèi)存空間)。一個(gè)標(biāo)準(zhǔn)的線程由線程ID、當(dāng)前指令指針(PC)、寄存器和堆棧組成。而進(jìn)程由內(nèi)存空間(代碼、數(shù)據(jù)、進(jìn)程空間、打開的文件)和一個(gè)或多個(gè)線程組成。

?

引入線程總結(jié):

? ? ?(1)創(chuàng)建進(jìn)程。系統(tǒng)在創(chuàng)建進(jìn)程時(shí),必須為之分配其所必需的、除處理機(jī)以外的所有資源。如內(nèi)存空間、I/O設(shè)備以及建立相應(yīng)的PCB結(jié)構(gòu)。

? ? ?(2)撤消進(jìn)程。系統(tǒng)在撤消進(jìn)程時(shí),又必須先對(duì)這些資源進(jìn)行回收操作,然后再撤消PCB結(jié)構(gòu)。

? ? ?(3)進(jìn)程切換。在對(duì)進(jìn)程進(jìn)行切換時(shí),由于要保留當(dāng)前進(jìn)程的CPU環(huán)境和設(shè)置新選中進(jìn)程的CPU環(huán)境,為此需花費(fèi)不少處理機(jī)時(shí)間。

3.2 線程特征:

1、線程的執(zhí)行狀態(tài)包括運(yùn)行、就緒和等待。

2、進(jìn)程中的所有線程共享所屬進(jìn)程內(nèi)的主存和其他資源。

3、擁有自己的線程控制塊和執(zhí)行棧,寄存器。

3.3 線程屬性

多線程OS中,通常是在一個(gè)進(jìn)程中包括多個(gè)線程,每個(gè)線程都是作為利用CPU的基本單位,是花費(fèi)最小開銷的實(shí)體。線程具有以下屬性。

  1)輕型實(shí)體

  線程中的實(shí)體基本上不擁有系統(tǒng)資源,只是有一點(diǎn)必不可少的、能保證獨(dú)立運(yùn)行的資源,比如,在每個(gè)線程中都應(yīng)具有一個(gè)用于控制線程運(yùn)行的線程控制塊TCB,用于指示被執(zhí)行指令序列的程序計(jì)數(shù)器、保留局部變量、少數(shù)狀態(tài)參數(shù)和返回地址等的一組寄存器堆棧

  2)獨(dú)立調(diào)度和分派的基本單位。

  在多線程OS中,線程是能獨(dú)立運(yùn)行的基本單位,因而也是獨(dú)立調(diào)度和分派的基本單位。由于線程很“輕”,故線程的切換非常迅速且開銷小。

  3)可并發(fā)執(zhí)行。

  在一個(gè)進(jìn)程中的多個(gè)線程之間,可以并發(fā)執(zhí)行,甚至允許在一個(gè)進(jìn)程中所有線程都能并發(fā)執(zhí)行;同樣,不同進(jìn)程中的線程也能并發(fā)執(zhí)行。

  4)共享進(jìn)程資源。

  在同一進(jìn)程中的各個(gè)線程,都可以共享該進(jìn)程所擁有的資源,這首先表現(xiàn)在:所有線程都具有相同的地址空間(進(jìn)程的地址空間),這意味著,線程可以訪問該地址空間的每一個(gè)虛地址;此外,還可以訪問進(jìn)程所擁有的已打開文件、定時(shí)器、信號(hào)量機(jī)構(gòu)等。

?

3.4 進(jìn)程和線程的區(qū)別:

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

  通常在一個(gè)進(jìn)程中可以包含若干個(gè)線程,它們可以利用進(jìn)程所擁有的資源。在引入線程的操作系統(tǒng)中,通常都是把進(jìn)程作為分配資源的基本單位,而把線程作為獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位。由于線程比進(jìn)程更小,基本上不擁有系統(tǒng)資源,故對(duì)它的調(diào)度所付出的開銷就會(huì)小得多,能更高效的提高系統(tǒng)內(nèi)多個(gè)程序間并發(fā)執(zhí)行的程度,從而顯著提高系統(tǒng)資源的利用率和吞吐量。

  因而近年來推出的通用操作系統(tǒng)都引入了線程,以便進(jìn)一步提高系統(tǒng)的并發(fā)性,并把它視為現(xiàn)代操作系統(tǒng)的一個(gè)重要指標(biāo)。

①、在調(diào)度方面,線程是調(diào)度和指派的基本單位,而進(jìn)程是資源擁有的基本單位。在同一進(jìn)程中,線程的切換不會(huì)引起進(jìn)程切換。在不同的進(jìn)程中進(jìn)行線程切換,如一個(gè)進(jìn)程內(nèi)的線程切換到另一個(gè)進(jìn)程中的線程時(shí),將會(huì)引起進(jìn)程切換。?

②、在擁有資源方面,線程不擁有系統(tǒng)資源,但可以訪問其隸屬進(jìn)程的系統(tǒng)資源,從而獲得系統(tǒng)資源。?進(jìn)程間相互獨(dú)立,同一進(jìn)程的各線程間共享。某進(jìn)程內(nèi)的線程在其它進(jìn)程不可見。?

③、在并發(fā)性方面,在引入線程的操作系統(tǒng)中,不僅進(jìn)程之間可以并發(fā)執(zhí)行,而且同一進(jìn)程內(nèi)的多線程之間也可并發(fā)執(zhí)行,從而使操作系統(tǒng)具有更好的并發(fā)性,大大提高系統(tǒng)的吞吐量。

④、調(diào)度切換的系統(tǒng)開銷方面,進(jìn)程切換時(shí)的時(shí)空開銷很大,但線程切換時(shí),只需保存和設(shè)置少量寄存器內(nèi)容,因此開銷很小。

另外通信方面進(jìn)程間通信IPC,而線程通信由于同一進(jìn)程內(nèi)的多個(gè)線程共享進(jìn)程的相同地址空間,線程間可以直接讀寫進(jìn)程數(shù)據(jù)段(如全局變量)來進(jìn)行通信。因此,多線程之間的同步與通信非常容易實(shí)現(xiàn),甚至無須操作系統(tǒng)內(nèi)核的干預(yù)

在多線程OS中,進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體

3.5 引入線程的好處:

??? (1) 易于調(diào)度。線程占用內(nèi)存少,易于切換,可以輕裝運(yùn)行。

?? 2) 提高并發(fā)性。由于線程占用內(nèi)存少,在內(nèi)存中一次容納的線程就多。這樣有利于提高程序的并發(fā)與并行程度。

?? (3) 開銷少。創(chuàng)建線程比創(chuàng)建進(jìn)程開銷少。

?? 4) 利于充分發(fā)揮多處理器功能。在多處理器系統(tǒng)中,一個(gè)進(jìn)程通過創(chuàng)建多個(gè)線程,讓每個(gè)線程在不同的處理器上運(yùn)行,進(jìn)一步提高并發(fā)性。

3.6 用戶級(jí)線程和內(nèi)核支持線程較兩種線程的優(yōu)缺點(diǎn) :

1.線程的調(diào)度與切換速度:內(nèi)核支持線程的調(diào)度和切換與進(jìn)程的調(diào)度和切換十分相似。

?2.系統(tǒng)功能調(diào)用:當(dāng)傳統(tǒng)的用戶進(jìn)程調(diào)用一個(gè)系統(tǒng)功能調(diào)用時(shí),要由用戶態(tài)進(jìn)入核心態(tài),用戶進(jìn)程將被阻塞。當(dāng)內(nèi)核完成系統(tǒng)調(diào)用而返回時(shí),才將該進(jìn)程喚醒,繼續(xù)執(zhí)行。 ?

3.線程執(zhí)行時(shí)間對(duì)于只設(shè)置了用戶級(jí)線程的系統(tǒng),調(diào)度是以進(jìn)程為單位進(jìn)行的。在采用輪轉(zhuǎn)調(diào)度算法時(shí),各個(gè)進(jìn)程輪流執(zhí)行一個(gè)時(shí)間片,這對(duì)諸進(jìn)程而言似乎是公平的。

?

3. 多線程與多核

參考來源:http://blog.csdn.net/luoweifu/article/details/46595285

操作系統(tǒng)的時(shí)間片輪轉(zhuǎn)的調(diào)度方式說一個(gè)任務(wù)執(zhí)行一小段時(shí)間后強(qiáng)制暫停去執(zhí)行下一個(gè)任務(wù),每個(gè)任務(wù)輪流執(zhí)行。很多操作系統(tǒng)的書都說“同一時(shí)間點(diǎn)只有一個(gè)任務(wù)在執(zhí)行”。那有人可能就要問雙核處理器呢?難道兩個(gè)核不是同時(shí)運(yùn)行嗎?


其實(shí)“同一時(shí)間點(diǎn)只有一個(gè)任務(wù)在執(zhí)行”這句話是不準(zhǔn)確的,至少它是不全面的。那多核處理器的情況下,線程是怎樣執(zhí)行呢?這就需要了解內(nèi)核線程。

多核(心)處理器是指在一個(gè)處理器上集成多個(gè)運(yùn)算核心從而提高計(jì)算能力,也就是有多個(gè)真正并行計(jì)算的處理核心,每一個(gè)處理核心對(duì)應(yīng)一個(gè)內(nèi)核線程。內(nèi)核線程(Kernel Thread, KLT)就是直接由操作系統(tǒng)內(nèi)核支持的線程,這種線程由內(nèi)核來完成線程切換,內(nèi)核通過操作調(diào)度器對(duì)線程進(jìn)行調(diào)度,并負(fù)責(zé)將線程的任務(wù)映射到各個(gè)處理器上。一般一個(gè)處理核心對(duì)應(yīng)一個(gè)內(nèi)核線程,比如單核處理器對(duì)應(yīng)一個(gè)內(nèi)核線程,雙核處理器對(duì)應(yīng)兩個(gè)內(nèi)核線程,四核處理器對(duì)應(yīng)四個(gè)內(nèi)核線程。


現(xiàn)在的電腦一般是雙核四線程、四核八線程,是采用超線程技術(shù)將一個(gè)物理處理核心模擬成兩個(gè)邏輯處理核心,對(duì)應(yīng)兩個(gè)內(nèi)核線程,所以在操作系統(tǒng)中看到的CPU數(shù)量是實(shí)際物理CPU數(shù)量的兩倍,如你的電腦是雙核四線程,打開“任務(wù)管理器\性能”可以看到4個(gè)CPU的監(jiān)視器,四核八線程可以看到8個(gè)CPU的監(jiān)視器。

圖 :雙核四線程在Windows8下查看的結(jié)果


超線程技術(shù)就是利用特殊的硬件指令,把一個(gè)物理芯片模擬成兩個(gè)邏輯處理核心,讓單個(gè)處理器都能使用線程級(jí)并行計(jì)算,進(jìn)而兼容多線程操作系統(tǒng)和軟件,減少了CPU的閑置時(shí)間,提高的CPU的運(yùn)行效率。這種超線程技術(shù)(如雙核四線程)由處理器硬件的決定,同時(shí)也需要操作系統(tǒng)的支持才能在計(jì)算機(jī)中表現(xiàn)出來。


程序一般不會(huì)直接去使用內(nèi)核線程,而是去使用內(nèi)核線程的一種高級(jí)接口——輕量級(jí)進(jìn)程(Light Weight Process,LWP),輕量級(jí)進(jìn)程就是我們通常意義上所講的線程(我們?cè)谶@稱它為用戶線程),由于每個(gè)輕量級(jí)進(jìn)程都由一個(gè)內(nèi)核線程支持,因此只有先支持內(nèi)核線程,才能有輕量級(jí)進(jìn)程。用戶線程與內(nèi)核線程的對(duì)應(yīng)關(guān)系有三種模型:一對(duì)一模型、多對(duì)一模型、多對(duì)多模型,在這以4個(gè)內(nèi)核線程、3個(gè)用戶線程為例對(duì)三種模型進(jìn)行說明。


一對(duì)一模型

對(duì)于一對(duì)一模型來說,一個(gè)用戶線程就唯一地對(duì)應(yīng)一個(gè)內(nèi)核線程(反過來不一定成立,一個(gè)內(nèi)核線程不一定有對(duì)應(yīng)的用戶線程)。這樣,如果CPU沒有采用超線程技術(shù)(如四核四線程的計(jì)算機(jī)),一個(gè)用戶線程就唯一地映射到一個(gè)物理CPU的線程,線程之間的并發(fā)是真正的并發(fā)。一對(duì)一模型使用戶線程具有與內(nèi)核線程一樣的優(yōu)點(diǎn),一個(gè)線程因某種原因阻塞時(shí)其他線程的執(zhí)行不受影響;此處,一對(duì)一模型也可以讓多線程程序在多處理器的系統(tǒng)上有更好的表現(xiàn)。


但一對(duì)一模型也有兩個(gè)缺點(diǎn):1.許多操作系統(tǒng)限制了內(nèi)核線程的數(shù)量,因此一對(duì)一模型會(huì)使用戶線程的數(shù)量受到限制;2.許多操作系統(tǒng)內(nèi)核線程調(diào)度時(shí),上下文切換的開銷較大,導(dǎo)致用戶線程的執(zhí)行效率下降。




圖 :一對(duì)一模型




多對(duì)一模型

?

多對(duì)一模型將多個(gè)用戶線程映射到一個(gè)內(nèi)核線程上,線程之間的切換由用戶態(tài)的代碼來進(jìn)行,因此相對(duì)一對(duì)一模型,多對(duì)一模型的線程切換速度要快許多;此外,多對(duì)一模型對(duì)用戶線程的數(shù)量幾乎無限制。但多對(duì)一模型也有兩個(gè)缺點(diǎn):1.如果其中一個(gè)用戶線程阻塞,那么其它所有線程都將無法執(zhí)行,因?yàn)榇藭r(shí)內(nèi)核線程也隨之阻塞了;2.在多處理器系統(tǒng)上,處理器數(shù)量的增加對(duì)多對(duì)一模型的線程性能不會(huì)有明顯的增加,因?yàn)樗械挠脩艟€程都映射到一個(gè)處理器上了。


圖 :多對(duì)一模型



多對(duì)多模型


多對(duì)多模型結(jié)合了一對(duì)一模型和多對(duì)一模型的優(yōu)點(diǎn),將多個(gè)用戶線程映射到多個(gè)內(nèi)核線程上。多對(duì)多模型的優(yōu)點(diǎn)有:1.一個(gè)用戶線程的阻塞不會(huì)導(dǎo)致所有線程的阻塞,因?yàn)榇藭r(shí)還有別的內(nèi)核線程被調(diào)度來執(zhí)行;2.多對(duì)多模型對(duì)用戶線程的數(shù)量沒有限制;3.在多處理器的操作系統(tǒng)中,多對(duì)多模型的線程也能得到一定的性能提升,但提升的幅度不如一對(duì)一模型的高。


在現(xiàn)在流行的操作系統(tǒng)中,大都采用多對(duì)多的模型。


圖 :多對(duì)多模型


總結(jié)

以上是生活随笔為你收集整理的作业、进程、线程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久激情免费视频 | 久久免费福利视频 | 午夜神器在线观看 | 成人动漫在线观看免费 | 日本高清xxxx| 古装做爰无遮挡三级视频 | 日韩第一页 | 爽妇网国产精品 | 亚洲夜夜爱| 日本黄色免费 | 精品国产区一区二 | 九九久久视频 | 美女日批网站 | 亚洲色图18p| 性做久久久 | 精品人妻一区二区三区四区久久 | 被黑人啪到哭的番号922在线 | 久久久久国产一区二区三区潘金莲 | 高清欧美性猛交xxxx黑人猛交 | 欧洲av片 | 欧美涩涩视频 | 91视频二区| 亚洲九九视频 | 99精品毛片 | 偷拍亚洲 | 69成人免费视频 | 我和岳m愉情xxxⅹ视频 | 国产美女无遮挡永久免费 | 欧美成人h | aa丁香综合激情 | 青青青在线免费观看 | 动漫美女舌吻 | 久久久精品免费视频 | av观看网 | 久久黄色av| 欧美精品自拍偷拍 | 久久夜夜操妹子 | 日韩在线观看一区 | 自拍偷拍亚洲综合 | 日韩不卡一二三 | com国产| 久久欧美视频 | 国产最爽的乱淫视频国语对白 | 最新精品在线 | 欧美日韩中文字幕在线播放 | 日产毛片 | 欧洲精品免费一区二区三区 | 在线高清av | 美女精品 | 91天天干| 亚洲一级电影 | 91久久久久久久久久久久 | 黄色三级片毛片 | 国产一区二区三区在线视频观看 | 黄频网站在线观看 | 日本久久一区二区 | 九九黄色片 | 麻豆精品视频免费观看 | 天天操天天爱天天干 | 国产精品白嫩极品美女 | 日本欧美国产在线 | 国产麻豆剧传媒精品国产 | 51ⅴ精品国产91久久久久久 | 国产精华一区二区三区 | 校园春色欧美 | 日韩激情av | 自拍偷拍亚洲精品 | 欧美日韩福利视频 | 91视频啊啊啊 | 欧美高清一区 | 欧美一区二区三区免费看 | 少妇久久久久久久久久 | 肥熟女一区二区三肥熟女 | 日韩一级完整毛片 | 日本特黄一级片 | 伊人久久大香线 | 女同中文字幕 | 国产精品福利片 | 在线免费观看视频黄 | 久久久久亚洲av无码专区桃色 | 浓精h攵女乱爱av | 全部孕妇毛片 | 天天影视亚洲 | 欧美www | 在线免费av网址 | 小泽玛丽亚在线观看 | 成av人片在线观看www | 最新日韩在线 | 福利影院在线观看 | 色一区二区三区 | 亚洲欧美视频二区 | 可以看黄色的网站 | 台湾150部性三级 | 国产特级黄色录像 | 久草加勒比 | 中文字幕第一页在线播放 | 男女超爽视频免费播放 | 国产按摩一区二区三区 | 欧美成人资源 |