国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 進(jìn)程與線程的空間問(wèn)題

進(jìn)程與線程的空間問(wèn)題 時(shí)間:2014-11-29      來(lái)源:未知

這兩天有同學(xué)問(wèn)到進(jìn)程線程的地址空間的問(wèn)題,提到在linux下每個(gè)進(jìn)程單獨(dú)占有4G的虛擬地址空間,而這個(gè)進(jìn)程下的所有線程共享著它的地址空間。這只是一個(gè)概念上的理解,具體是怎么回事呢?

在說(shuō)這個(gè)問(wèn)題之前我們先說(shuō)一下早期的內(nèi)存管理機(jī)制。在早期的計(jì)算機(jī)中,程序都是直接運(yùn)行在內(nèi)存上的,也就是說(shuō)程序中訪問(wèn)的內(nèi)存地址都是實(shí)際的物理內(nèi)存地址。當(dāng)計(jì)算機(jī)同時(shí)運(yùn)行多個(gè)程序時(shí),必須保證這些程序用到的內(nèi)存總量要小于計(jì)算機(jī)實(shí)際物理內(nèi)存的大小。那當(dāng)程序同時(shí)運(yùn)行多個(gè)程序時(shí),操作系統(tǒng)順次向下分配物理內(nèi)存地址例如一臺(tái)計(jì)算機(jī)的內(nèi)存大小是128M,現(xiàn)在同時(shí)運(yùn)行程序A和B,A需占用內(nèi)存30M,B需占用內(nèi)存60M。計(jì)算機(jī)在給程序分配內(nèi)存時(shí)先將內(nèi)存中的前30M分配給程序A,接著再?gòu)膬?nèi)存中剩余的98M中劃分出60M分配給程序B。這種分配方法可以保證程序A和程序B都能運(yùn)行,但是這種簡(jiǎn)單的內(nèi)存分配策略問(wèn)題很多。首先進(jìn)程地址空間不隔離。由于程序都是直接訪問(wèn)物理內(nèi)存,惡意程序可以很容統(tǒng)修改別的進(jìn)程的內(nèi)存數(shù)據(jù),以達(dá)到破壞的目的。即使是非惡意的,但是有bug的程序也可能不小心修改了其它程序的內(nèi)存數(shù)據(jù),就會(huì)導(dǎo)致其它程序的運(yùn)行出現(xiàn)異常。其中一個(gè)任務(wù)失敗了,可能也會(huì)影響其它的任務(wù)。其次是程序運(yùn)行的地址不確定。當(dāng)內(nèi)存中的剩余空間可以滿足程序C的要求后,操作系統(tǒng)會(huì)在剩余空間中隨機(jī)分配一段連續(xù)的20M大小的空間給程序C使用,因?yàn)槭请S機(jī)分配的,所以程序運(yùn)行的地址是不確定的。內(nèi)存使用效率低。在A和B都運(yùn)行的情況下,如果用戶又運(yùn)行了程序C,而程序C需要20M大小的內(nèi)存才能運(yùn)行,而此時(shí)系統(tǒng)只剩下8M的空間可供使用,所以此時(shí)系統(tǒng)必須在已運(yùn)行的程序中選擇一個(gè)將該程序的數(shù)據(jù)暫時(shí)拷貝到硬盤(pán)上,釋放出部分空間來(lái)供程序C使用,然后再將程序C的數(shù)據(jù)全部裝入內(nèi)存中運(yùn)行?梢韵胂蟮玫,在這個(gè)過(guò)程中,有大量的數(shù)據(jù)在裝入裝出,導(dǎo)致效率十分低下。

為了解決上述問(wèn)題,人們?cè)O(shè)計(jì)了間接的地址訪問(wèn)方法訪問(wèn)物理內(nèi)存。按照這種方法,程序中訪問(wèn)的內(nèi)存地址不再是實(shí)際的物理內(nèi)存地址,而是一個(gè)虛擬地址,然后由操作系統(tǒng)將這個(gè)虛擬地址映射到適當(dāng)?shù)奈锢韮?nèi)存地址上。這樣,只要操作系統(tǒng)處理好虛擬地址到物理內(nèi)存地址的映射,就可以保證不同的程序終訪問(wèn)的內(nèi)存地址位于不同的區(qū)域,彼此沒(méi)有重疊,就可以達(dá)到內(nèi)存地址空間隔離的效果。

當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),操作系統(tǒng)會(huì)為該進(jìn)程分配一個(gè)4GB大小的虛擬進(jìn)程地址空間。之所以是4GB,是因?yàn)樵?2位的操作系統(tǒng)中,一個(gè)指針長(zhǎng)度是4字節(jié)(64位系統(tǒng)是8字節(jié),由cpu的尋址位數(shù)決定),而4字節(jié)指針的尋址能力是從0x00000000~0xFFFFFFFF,大值0xFFFFFFFF表示的即為4GB大小的容量。與虛擬地址空間相對(duì)的,還有一個(gè)物理地址空間,這個(gè)地址空間對(duì)應(yīng)的是真實(shí)的物理內(nèi)存。如果你的計(jì)算機(jī)上安裝了1G大小的內(nèi)存,那么這個(gè)物理地址空間表示的范圍是0x00000000~0x3FFFFFFF。當(dāng)操作系統(tǒng)做虛擬地址到物理地址映射時(shí),只能映射到這一范圍。當(dāng)進(jìn)程創(chuàng)建時(shí),每個(gè)進(jìn)程都會(huì)有一個(gè)自己的4GB虛擬地址空間。要注意的是這個(gè)4GB的地址空間是"虛擬"的,并不是真實(shí)存在的,而且每個(gè)進(jìn)程只能訪問(wèn)自己虛擬地址空間中的數(shù)據(jù),無(wú)法訪問(wèn)別的進(jìn)程中的數(shù)據(jù),通過(guò)這種方法實(shí)現(xiàn)了進(jìn)程間的地址隔離。實(shí)際上也是增加了地址空間,在這4G中還分為用戶空間和系統(tǒng)空間,用戶態(tài)時(shí)候進(jìn)程只能訪問(wèn)用戶空間(內(nèi)核態(tài)時(shí)候既可以訪問(wèn)用戶空間也可以訪問(wèn)系統(tǒng)空間)。這只是解決了地址問(wèn)題,實(shí)際進(jìn)程的運(yùn)行還是要在真實(shí)的內(nèi)存上,所以,必須在虛擬地址與物理地址間建立一種映射關(guān)系。這樣,通過(guò)映射機(jī)制,當(dāng)程序訪問(wèn)虛擬地址空間上的某個(gè)地址值時(shí),就相當(dāng)于訪問(wèn)了物理地址空間中的另一個(gè)值。人們采用分段(Sagmentation)的方法,它的思想是在虛擬地址空間和物理地址空間之間做一一映射。比如說(shuō)虛擬地址空間中某個(gè)10M大小的空間映射到物理地址空間中某個(gè)10M大小的空間。這種思想理解起來(lái)并不難,操作系統(tǒng)保證不同進(jìn)程的地址空間被映射到物理地址空間中不同的區(qū)域上,這樣每個(gè)進(jìn)程終訪問(wèn)到的物理地址空間都是彼此分開(kāi)的。通過(guò)這種方式,就實(shí)現(xiàn)了進(jìn)程間的地址隔離。在做開(kāi)發(fā)時(shí),開(kāi)發(fā)人員只需訪問(wèn)這段虛擬區(qū)間上的地址即可。應(yīng)用程序并不關(guān)心進(jìn)程的這段地址究竟被映射到物理內(nèi)存的那塊區(qū)域上了,所以程序的運(yùn)行地址也就是相當(dāng)于說(shuō)是確定的了。

但是這種分段的映射方法并沒(méi)有解決內(nèi)存的使用效率問(wèn)題。在分段的映射方法中,每次換入換出內(nèi)存的都是整個(gè)程序,這樣會(huì)造成大量的磁盤(pán)訪問(wèn)操作,導(dǎo)致效率低下。基于這種情況,人們想到了內(nèi)存分割和映射方法,這種方法就是分頁(yè)(Paging)。

分頁(yè)的基本方法是,將地址空間分成許多的頁(yè)。每頁(yè)的大小由CPU決定,然后由操作系統(tǒng)選擇頁(yè)的大小。目前Inter系列的CPU支持4KB或4MB的頁(yè)大小,而PC上目前都選擇使用4KB。按這種選擇,4GB虛擬地址空間共可以分成1048576個(gè)頁(yè),512M的物理內(nèi)存可以分為131072個(gè)頁(yè)。顯然虛擬空間的頁(yè)數(shù)要比物理空間的頁(yè)數(shù)多得多。 在分段的方法中,每次程序運(yùn)行時(shí)總是把程序全部裝入內(nèi)存,而分頁(yè)的方法則有所不同。分頁(yè)的思想是程序運(yùn)行時(shí)用到哪頁(yè)就為哪頁(yè)分配內(nèi)存,沒(méi)用到的頁(yè)暫時(shí)保留在硬盤(pán)上。當(dāng)用到這些頁(yè)時(shí)再在物理地址空間中為這些頁(yè)分配內(nèi)存,然后建立虛擬地址空間中的頁(yè)和剛分配的物理內(nèi)存頁(yè)間的映射。用這樣的方法程序可以使用一系列虛擬地址來(lái)訪問(wèn)大于可用物理內(nèi)存的內(nèi)存緩沖區(qū)。當(dāng)物理內(nèi)存的供應(yīng)量變小時(shí),內(nèi)存管理器會(huì)將物理內(nèi)存頁(yè)(通常大小為 4 KB)保存到磁盤(pán)文件。數(shù)據(jù)或代碼頁(yè)會(huì)根據(jù)需要在物理內(nèi)存與磁盤(pán)之間移動(dòng)。這具體和系統(tǒng)對(duì)內(nèi)存的管理和對(duì)進(jìn)程的調(diào)度有關(guān)。

上一篇:M0傳感器新板子

下一篇:WindowsPhone自定義控件詳解(一) - 控件類(lèi)庫(kù)分析

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專(zhuān)線:010-82525158 企業(yè)培訓(xùn)洽談專(zhuān)線:010-82525379 院校合作洽談專(zhuān)線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部