www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]程序:   程序構(gòu)成:     (1)源代碼     (2)可執(zhí)行的二進(jìn)制代碼   程序是指令和數(shù)據(jù)的有序集合,其本身沒(méi)有任何運(yùn)行的含義,是一個(gè)靜態(tài)的概念。由操作系統(tǒng)加載其可執(zhí)行的二進(jìn)制代碼,分配相應(yīng)

程序:   

程序構(gòu)成:     

(1)源代碼     

(2)可執(zhí)行的二進(jìn)制代碼   程序是指令和數(shù)據(jù)的有序集合,其本身沒(méi)有任何運(yùn)行的含義,是一個(gè)靜態(tài)的概念。由操作系統(tǒng)加載其可執(zhí)行的二進(jìn)制代碼,分配相應(yīng)的數(shù)據(jù)結(jié)構(gòu):進(jìn)程控制塊PCB(Process Control Block),進(jìn)行一些列初始化操作(創(chuàng)建進(jìn)行ID、分配時(shí)間片等)后得到進(jìn)程。 ??

2.進(jìn)程:分配資源的最小單位   進(jìn)程構(gòu)成:     

(1)內(nèi)核對(duì)象:存放進(jìn)程相關(guān)信息    

 (2)地址空間:可執(zhí)行模塊、DLL的代碼和數(shù)據(jù)以及動(dòng)態(tài)分配的內(nèi)存空間 ?   

是一個(gè)正在執(zhí)行的程序;計(jì)算機(jī)中正在運(yùn)行的程序?qū)嵗?;可以分配給處理器并由處理器執(zhí)行的一個(gè)實(shí)體?! ?  

進(jìn)程是一個(gè)具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。它可以申請(qǐng)和擁有系統(tǒng)資源,是一個(gè)動(dòng)態(tài)的概念,是一個(gè)活動(dòng)的實(shí)體。它不只是程序的代碼,還包括當(dāng)前的活動(dòng),通過(guò)程序計(jì)數(shù)器的值和處理寄存器的內(nèi)容來(lái)表示。

?特征   ? ?

進(jìn)程的特征:   

動(dòng)態(tài)性:進(jìn)程的實(shí)質(zhì)是程序在多道程序系統(tǒng)中的一次執(zhí)行過(guò)程,進(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í)行過(guò)程中,程序不能發(fā)生改變。 ? ?

進(jìn)程的切換:     

進(jìn)行進(jìn)程切換就是從正在運(yùn)行的進(jìn)程中收回處理器,然后再使待運(yùn)行進(jìn)程來(lái)占用處理器。 ?   這里所說(shuō)的從某個(gè)進(jìn)程收回處理器,實(shí)質(zhì)上就是把進(jìn)程存放在處理器的寄存器中的中間數(shù)據(jù)找個(gè)地方存起來(lái),從而把處理器的寄存器騰出來(lái)讓其他進(jìn)程使用。那么被中止運(yùn)行進(jìn)程的中間數(shù)據(jù)存在何處好呢?當(dāng)然這個(gè)地方應(yīng)該是進(jìn)程的私有堆棧。 ?   讓進(jìn)程來(lái)占用處理器,實(shí)質(zhì)上是把某個(gè)進(jìn)程存放在私有堆棧中寄存器的數(shù)據(jù)(前一次本進(jìn)程被中止時(shí)的中間數(shù)據(jù))再恢復(fù)到處理器的寄存器中去,并把待運(yùn)行進(jìn)程的斷點(diǎn)送入處理器的程序指針PC,于是待運(yùn)行進(jìn)程就開(kāi)始被處理器運(yùn)行了,也就是這個(gè)進(jìn)程已經(jīng)占有處理器的使用權(quán)了。 ?   這就像多個(gè)同學(xué)要分時(shí)使用同一張課桌一樣,所謂要收回正在使用課桌同學(xué)的課桌使用權(quán),實(shí)質(zhì)上就是讓他把屬于他的東西拿走;而賦予某個(gè)同學(xué)課桌使用權(quán),只不過(guò)就是讓他把他的東西放到課桌上罷了。 ?   在切換時(shí),一個(gè)進(jìn)程存儲(chǔ)在處理器各寄存器中的中間數(shù)據(jù)叫做進(jìn)程的上下文,所以進(jìn)程的 切換實(shí)質(zhì)上就是被中止運(yùn)行進(jìn)程與待運(yùn)行進(jìn)程上下文的切換。在進(jìn)程未占用處理器時(shí),進(jìn)程 的上下文是存儲(chǔ)在進(jìn)程的私有堆棧中的。 ? ?進(jìn)程的狀態(tài):  

進(jìn)程的三個(gè)基本狀態(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í)來(lái)劃分隊(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ù)目。在沒(méi)有其他進(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)程同步),在條件滿足之前無(wú)法繼續(xù)執(zhí)行。該事件發(fā)生前即使把處理機(jī)分配給該進(jìn)程,也無(wú)法運(yùn)行。 ? ?進(jìn)程的創(chuàng)建過(guò)程: ?   一旦操作系統(tǒng)發(fā)現(xiàn)了要求創(chuàng)建新進(jìn)程的事件后,便調(diào)用進(jìn)程創(chuàng)建原語(yǔ)Creat()按下述步驟創(chuàng)建一個(gè)新進(jìn)程。 ?   1) 申請(qǐng)空白PCB。為新進(jìn)程申請(qǐng)獲得唯一的數(shù)字標(biāo)識(shí)符,并從PCB集合中索取一個(gè)空白PCB。 ?   2) 為新進(jìn)程分配資源。為新進(jìn)程的程序和數(shù)據(jù)以及用戶棧分配必要的內(nèi)存空間。顯然,此時(shí)操作系統(tǒng)必須知道新進(jìn)程所需要的內(nèi)存大小。 ?   3) 初始化進(jìn)程控制塊。PCB的初始化包括:①初始化標(biāo)識(shí)信息。將系統(tǒng)分配的標(biāo)識(shí)符和父進(jìn)程標(biāo)識(shí)符,填入新的PCB中;②初始化處理機(jī)狀態(tài)信息。使程序計(jì)數(shù)器指向程序的入口地址,使棧指針指向棧頂;③初始化處理機(jī)控制信息。將進(jìn)程的狀態(tài)設(shè)置為就緒狀態(tài)或靜止就緒狀態(tài),對(duì)于優(yōu)先級(jí),通常是將它設(shè)置為最低優(yōu)先級(jí),除非用戶以顯式的方式提出高優(yōu)先級(jí)要求。 ?   4) 將新進(jìn)程插入就緒隊(duì)列。如果進(jìn)程就緒隊(duì)列能夠接納新進(jìn)程,便將新進(jìn)程插入到就緒隊(duì)列中。 ? 3.虛擬地址空間:   虛擬地址空間構(gòu)成:     (1)內(nèi)核方式分區(qū):內(nèi)核代碼、設(shè)備驅(qū)動(dòng)、IO高速緩沖等使用     (2)用戶方式分區(qū):進(jìn)程的私有地址空間,維護(hù)進(jìn)程數(shù)據(jù)   操作系統(tǒng)分配給進(jìn)程的虛擬地址的范圍。32位下為232B = 4GB。所以不同進(jìn)程的同一個(gè)內(nèi)存地址互不相關(guān)。 ? Windows?使用基于分頁(yè)機(jī)制的虛擬內(nèi)存。每個(gè)進(jìn)程有4GB的虛擬地址空間?;诜猪?yè)機(jī)制,這4GB地址空間的一些部分被映射了物理內(nèi)存,一些部分映射硬盤(pán)上的交換文件,一些部分什么也沒(méi)有映射。程序中使用的都是4GB地址空間中的虛擬地址。而訪問(wèn)物理內(nèi)存,需要使用物理地址。 ??   物理地址 (physical address): 放在尋址總線上的地址。放在尋址總線上,如果是讀,電路根據(jù)這個(gè)地址每位的值就將相應(yīng)地址的物理內(nèi)存中的數(shù)據(jù)放到數(shù)據(jù)總線中傳輸。如果是寫(xiě),電路根據(jù)這個(gè)地址每位的值就將相應(yīng)地址的物理內(nèi)存中放入數(shù)據(jù)總線上的內(nèi)容。物理內(nèi)存是以字節(jié)(8位)為單位編址的。 ?   虛擬地址 (virtual address): 4G虛擬地址空間中的地址,程序中使用的都是虛擬地址。 ?   如果CPU寄存器中的分頁(yè)標(biāo)志位被設(shè)置,那么執(zhí)行內(nèi)存操作的機(jī)器指令時(shí),CPU會(huì)自動(dòng)根據(jù)頁(yè)目錄和頁(yè)表中的信息,把虛擬地址轉(zhuǎn)換成物理地址,完成該指令。 ?  ?  使用了分頁(yè)機(jī)制之后,4G的地址空間被分成了固定大小的頁(yè),每一頁(yè)或者被映射到物理內(nèi)存,或者被映射到硬盤(pán)上的交換文件中,或者沒(méi)有映射任何東西。對(duì)于一般程序來(lái)說(shuō),4G的地址空間,只有一小部分映射了物理內(nèi)存,大片大片的部分是沒(méi)有映射任何東西。物理內(nèi)存也被分頁(yè),來(lái)映射地址空間。對(duì)于32bit的Win2k,頁(yè)的大小是4K字節(jié)。CPU用來(lái)把虛擬地址轉(zhuǎn)換成物理地址的信息存放在叫做頁(yè)目錄和頁(yè)表的結(jié)構(gòu)里。 ?   物理內(nèi)存分頁(yè),一個(gè)物理頁(yè)的大小為4K字節(jié),第0個(gè)物理頁(yè)從物理地址 0x00000000 處開(kāi)始。由于頁(yè)的大小為4KB,就是0x1000字節(jié),所以第1頁(yè)從物理地址 0x00001000 處開(kāi)始。第2頁(yè)從物理地址 0x00002000 處開(kāi)始??梢钥吹接捎陧?yè)的大小是4KB,所以只需要32bit的地址中高20bit來(lái)尋址物理頁(yè)。??? ?   頁(yè)表,一個(gè)頁(yè)表的大小為4K字節(jié),放在一個(gè)物理頁(yè)中。由1024個(gè)4字節(jié)的頁(yè)表項(xiàng)組成。頁(yè)表項(xiàng)的大小為4個(gè)字節(jié)(32bit),所以一個(gè)頁(yè)表中有1024個(gè)頁(yè)表項(xiàng)。頁(yè)表中的每一項(xiàng)的內(nèi)容(每項(xiàng)4個(gè)字節(jié),32bit)高20bit用來(lái)放一個(gè)物理頁(yè)的物理地址,低12bit放著一些標(biāo)志。 ?   頁(yè)目錄,一個(gè)頁(yè)目錄大小為4K字節(jié),放在一個(gè)物理頁(yè)中。由1024個(gè)4字節(jié)的頁(yè)目錄項(xiàng)組成。頁(yè)目錄項(xiàng)的大小為4個(gè)字節(jié)(32bit),所以一個(gè)頁(yè)目錄中有1024個(gè)頁(yè)目錄項(xiàng)。頁(yè)目錄中的每一項(xiàng)的內(nèi)容(每項(xiàng)4個(gè)字節(jié))高20bit用來(lái)放一個(gè)頁(yè)表(頁(yè)表放在一個(gè)物理頁(yè)中)的物理地址,低12bit放著一些標(biāo)志。 ? ? 4.線程:資源調(diào)度的最小單位   線程的構(gòu)成:     (1)內(nèi)核對(duì)象:存放線程相關(guān)信息     (2)線程堆棧:維護(hù)執(zhí)行代碼時(shí)所需的參數(shù)和變量   通常在一個(gè)進(jìn)程中可以包含若干個(gè)線程,它們可以利用進(jìn)程所擁有的資源。在引入線程的操作系統(tǒng)中,通常把進(jìn)程作為分配資源的基本單位,而把線程作為獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位。由于線程比進(jìn)程更小,基本上不擁有系統(tǒng)資源,故對(duì)它的調(diào)度所付出的開(kāi)銷(xiāo)就會(huì)小得多,能更高效的提高系統(tǒng)內(nèi)多個(gè)程序間并發(fā)執(zhí)行的程度。 ??

下面看看C++創(chuàng)建進(jìn)程的相關(guān)函數(shù):

1?HANDLE?WINAPI?CreateThread(
2???__in??????????LPSECURITY_ATTRIBUTES?lpThreadAttributes,
3???__in??????????SIZE_T?dwStackSize,
4???__in??????????LPTHREAD_START_ROUTINE?lpStartAddress,
5???__in??????????LPVOID?lpParameter,
6???__in??????????DWORD?dwCreationFlags,
7???__out?????????LPDWORD?lpThreadId
8?);
1?uintptr_t?_beginthreadex(?
2????void?*security,
3????unsigned?stack_size,
4????unsigned?(?*start_address?)(?void?*?),
5????void?*arglist,
6????unsigned?initflag,
7????unsigned?*thrdaddr?
8?);

兩個(gè)函數(shù)都是用于創(chuàng)建線程,第一個(gè)是Windows API函數(shù),在WinBase.h頭文件中,第二個(gè)不是API函數(shù),在process.h頭文件中
參數(shù)說(shuō)明:

1.線程安全性:表示是否可以被子進(jìn)程所繼承

2.初始堆棧大小:如果為0或者小于默認(rèn)值,則使用和調(diào)用線程同樣大小的空間

3.線程其實(shí)地址:一個(gè)函數(shù)指針,指向線程函數(shù)

4.參數(shù):傳遞給線程函數(shù)的參數(shù)

5.創(chuàng)建選項(xiàng):如果為CREATE_SUSPENDED表示創(chuàng)建后掛起,如果為0表示創(chuàng)建后立即執(zhí)行

6.線程ID

兩個(gè)函數(shù)的區(qū)別:

  malloc、fopen、ctime等函數(shù)需要專門(mén)的線程局部存儲(chǔ)數(shù)據(jù)塊,這個(gè)數(shù)據(jù)塊在創(chuàng)建線程時(shí)創(chuàng)建。如果用CreateThread,則不會(huì)創(chuàng)建,這樣,函數(shù)能夠正常使用,但是會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)塊,但是函數(shù)并不會(huì)釋放創(chuàng)建的數(shù)據(jù)庫(kù),所以并不會(huì)將其刪除,就導(dǎo)致內(nèi)存泄露?。。?/p>

  而_beginthreadex(內(nèi)部也調(diào)用CreateThread)和_beginthreadex(會(huì)自動(dòng)調(diào)用CloseHandle關(guān)閉句柄)對(duì)這個(gè)內(nèi)存塊做了處理。

?

代碼演示:

?1?#include2?#include3?#include4?using?namespace?std;
?5?
?6?
?7?DWORD?WINAPI?CreateFun(LPVOID?lParam)
?8?{
?9?????cout?<<?"CreateThread"?<<?endl;
10?????return?0;//0表示成功
11?
12?}
13?
14?UINT?_stdcall?beginFun(LPVOID?lParam)
15?{
16?????cout?<<?"beginthreadex"?<<?endl;
17?????return?0;
18?}
19?int?main(void)
20?{
21?
22?????DWORD?dwID;
23?????UINT?nID;
24?????HANDLE?hC;
25?????HANDLE?hB;
26?
27?????hC?=?CreateThread(NULL,?0,?CreateFun,?NULL,?0,?&dwID);
28?
29?????if?(NULL?!=?hC)
30?????{
31?????????CloseHandle(hC);
32?????}
33?
34?
35?
36?????hB?=?(HANDLE)_beginthreadex(NULL,?0,?beginFun,?NULL,?0,?&nID);
37?????if?(NULL?!=?hB)
38?????{
39?????????CloseHandle(hB);
40?????}
41?
42?????Sleep(1000);
43?}

?

?CloseHandle:關(guān)閉句柄

  調(diào)用CloseHandle并不會(huì)終止線程的執(zhí)行,而是遞減線程內(nèi)核對(duì)象句柄計(jì)數(shù),線程執(zhí)行完畢后也會(huì)自動(dòng)遞減,當(dāng)計(jì)數(shù)為0時(shí)釋放線程內(nèi)核對(duì)象。當(dāng)進(jìn)程終止時(shí)也會(huì)清理內(nèi)核對(duì)象。

但是,如果不關(guān)閉,可能導(dǎo)致有些進(jìn)程擁有的資源無(wú)法釋放,導(dǎo)致內(nèi)存泄露。

線程的相關(guān)函數(shù):

(1)CreateThread:創(chuàng)建線程,失敗返回NULL,成功返回線程句柄

(2)SuspendThread:掛起線程

(3)ResumeThread:恢復(fù)線程

(4)OpenThread:打開(kāi)線程,根據(jù)線程ID得到線程句柄

(5)ExitThread:退出線程

(6)TerminateThread:終止線程

(7)GetExitCodeThread:獲取線程運(yùn)行狀態(tài),如果為STILL_ALIVE表示正在運(yùn)行。

(8)GetCurrentThread:獲取當(dāng)前線程句柄

(9)GetCurentThreadID:獲取當(dāng)前線程ID

?注意:最好不要顯式的調(diào)用ExitThread和TerminateThread,因?yàn)榭赡軐?dǎo)致線程無(wú)法清理某些東西,導(dǎo)致內(nèi)存泄露~

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉