日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

程序:   

程序構(gòu)成:     

(1)源代碼     

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

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

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

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

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

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

?特征   ? ?

進程的特征:   

動態(tài)性:進程的實質(zhì)是程序在多道程序系統(tǒng)中的一次執(zhí)行過程,進程是動態(tài)產(chǎn)生,動態(tài)消亡的。 ?   并發(fā)性:任何進程都可以同其他進程一起并發(fā)執(zhí)行 ?   獨立性:進程是一個能獨立運行的基本單位,同時也是系統(tǒng)分配資源和調(diào)度的獨立單位; ?   異步性:由于進程間的相互制約,使進程具有執(zhí)行的間斷性,即進程按各自獨立的、不可預知的速度向前推進 ?   結(jié)構(gòu)特征:進程由程序、數(shù)據(jù)和進程控制塊三部分組成。 ?   多個不同的進程可以包含相同的程序:一個程序在不同的數(shù)據(jù)集里就構(gòu)成不同的進程,能得到不同的結(jié)果;但是執(zhí)行過程中,程序不能發(fā)生改變。 ? ?

進程的切換:     

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

進程的三個基本狀態(tài)

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

下面看看C++創(chuàng)建進程的相關(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?);

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

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

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

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

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

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

6.線程ID

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

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

  而_beginthreadex(內(nèi)部也調(diào)用CreateThread)和_beginthreadex(會自動調(diào)用CloseHandle關(guān)閉句柄)對這個內(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并不會終止線程的執(zhí)行,而是遞減線程內(nèi)核對象句柄計數(shù),線程執(zhí)行完畢后也會自動遞減,當計數(shù)為0時釋放線程內(nèi)核對象。當進程終止時也會清理內(nèi)核對象。

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

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

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

(2)SuspendThread:掛起線程

(3)ResumeThread:恢復線程

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

(5)ExitThread:退出線程

(6)TerminateThread:終止線程

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

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

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

?注意:最好不要顯式的調(diào)用ExitThread和TerminateThread,因為可能導致線程無法清理某些東西,導致內(nèi)存泄露~

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

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉