亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 進程與線程的空間問題

進程與線程的空間問題 時間:2014-11-29      來源:未知

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

在說這個問題之前我們先說一下早期的內存管理機制。在早期的計算機中,程序都是直接運行在內存上的,也就是說程序中訪問的內存地址都是實際的物理內存地址。當計算機同時運行多個程序時,必須保證這些程序用到的內存總量要小于計算機實際物理內存的大小。那當程序同時運行多個程序時,操作系統順次向下分配物理內存地址例如一臺計算機的內存大小是128M,現在同時運行程序A和B,A需占用內存30M,B需占用內存60M。計算機在給程序分配內存時先將內存中的前30M分配給程序A,接著再從內存中剩余的98M中劃分出60M分配給程序B。這種分配方法可以保證程序A和程序B都能運行,但是這種簡單的內存分配策略問題很多。首先進程地址空間不隔離。由于程序都是直接訪問物理內存,惡意程序可以很容統修改別的進程的內存數據,以達到破壞的目的。即使是非惡意的,但是有bug的程序也可能不小心修改了其它程序的內存數據,就會導致其它程序的運行出現異常。其中一個任務失敗了,可能也會影響其它的任務。其次是程序運行的地址不確定。當內存中的剩余空間可以滿足程序C的要求后,操作系統會在剩余空間中隨機分配一段連續的20M大小的空間給程序C使用,因為是隨機分配的,所以程序運行的地址是不確定的。內存使用效率低。在A和B都運行的情況下,如果用戶又運行了程序C,而程序C需要20M大小的內存才能運行,而此時系統只剩下8M的空間可供使用,所以此時系統必須在已運行的程序中選擇一個將該程序的數據暫時拷貝到硬盤上,釋放出部分空間來供程序C使用,然后再將程序C的數據全部裝入內存中運行。可以想象得到,在這個過程中,有大量的數據在裝入裝出,導致效率十分低下。

為了解決上述問題,人們設計了間接的地址訪問方法訪問物理內存。按照這種方法,程序中訪問的內存地址不再是實際的物理內存地址,而是一個虛擬地址,然后由操作系統將這個虛擬地址映射到適當的物理內存地址上。這樣,只要操作系統處理好虛擬地址到物理內存地址的映射,就可以保證不同的程序終訪問的內存地址位于不同的區域,彼此沒有重疊,就可以達到內存地址空間隔離的效果。

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

但是這種分段的映射方法并沒有解決內存的使用效率問題。在分段的映射方法中,每次換入換出內存的都是整個程序,這樣會造成大量的磁盤訪問操作,導致效率低下;谶@種情況,人們想到了內存分割和映射方法,這種方法就是分頁(Paging)。

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

上一篇:M0傳感器新板子

下一篇:WindowsPhone自定義控件詳解(一) - 控件類庫分析

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 2021国产成人综合亚洲精品 | 欧美色爱综合网 | 免费一级毛片免费播放 | 欧美午夜精品久久久久免费视 | 精品入口麻豆 | 国产精品久久久久毛片真精品 | 在线免费视频a | 天天色踪合 | 激情视频在线免费 | 欧洲一级黄色 | 欧美日韩生活片 | 精品一区二区在线欧美日韩 | 日本一区二区视频在线 | 日本小视频在线 | 老熟女毛茸茸浓毛 | 狠狠综合久久综合88亚洲日本 | 亚洲视频www| 亚洲午夜精品在线 | 国产欧美视频在线 | 亚洲视频一区在线 | 国产精品扒开做爽爽爽的视频 | aaa毛片视频免费观看 | 久草干| 国产欧美一区二区精品仙草咪 | 免费看麻豆视频 | 国产精品亚洲第一区广西莫菁 | 欧美太黄太色视频在线观看 | 午夜视频在线观看www中文 | 日本色区 | 另类ts人妖一区二区三区 | 免费视频不卡一区二区三区 | 国内精品手机在线观看视频 | 日韩在线视频一区 | 青青热在线精品视频免费 | 国产靠逼视频 | 欧美freesex另类蛇交hd | 欧美激情一区二区 | 欧美精品在线免费观看 | 欧美日韩国产成人精品 | 九九九色 | 特黄特色的大片观看免费视频 |