强奸久久久久久久|草草浮力在线影院|手机成人无码av|亚洲精品狼友视频|国产国模精品一区|久久成人中文字幕|超碰在线视屏免费|玖玖欧洲一区二区|欧美精品无码一区|日韩无遮一区二区

首頁 > 廠商 > 問答 > linux內(nèi)存管理,linux的儲存管理機(jī)制

linux內(nèi)存管理,linux的儲存管理機(jī)制

來源:整理 時間:2023-08-24 19:52:43 編輯:智能門戶 手機(jī)版

本文目錄一覽

1,linux的儲存管理機(jī)制

Linux存儲管理的基本框架管理機(jī)制 其內(nèi)核采用虛擬頁式存儲管理,采用三次映射機(jī)制實(shí)現(xiàn)從線性地址到物理地址的映射。 參考資料: http://club.chinaren.com/bbs/index.jsp?boardid=682&hotmsgid=82224784

linux的儲存管理機(jī)制

2,如何有效的學(xué)習(xí)linux內(nèi)存管理

Linux內(nèi)存管理機(jī)制: 一 物理內(nèi)存和虛擬內(nèi)存 我們知道,直接從物理內(nèi)存讀寫數(shù)據(jù)要比從硬盤讀寫數(shù)據(jù)要快的多,因此,我們希望所有數(shù)據(jù)的讀取和寫入都在內(nèi)存完成,而內(nèi)存是有限的,這樣就引出了物理內(nèi)存與虛擬內(nèi)存的概念
linux管理內(nèi)存是優(yōu)先使用物理內(nèi)存,只有在物理內(nèi)存不足的時候才會使用虛擬內(nèi)存(swap交換分區(qū)),而windows是數(shù)據(jù)隨機(jī)的 寫進(jìn)虛擬內(nèi)存或者物理內(nèi)存中的

如何有效的學(xué)習(xí)linux內(nèi)存管理

3,linux操作系統(tǒng)下的存儲管理是怎么樣的

樹枝形目錄管理的,所有目錄全掛在/(根目錄)下。.簡單給你介紹下,linux存儲文件都是亂放,比如一間房,linux存放文件就是亂扔里面,讀取時比較快,方便。windows存放文件是一個挨著一個,這樣如果讀取文件時,有些文件被壓在其他文件下面,讀取沒有l(wèi)inux方便。大致這么理解就行。
這不是一兩句能寫清楚的,建議你看看講內(nèi)核的《linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)(原書第3版)》,比較適合你這樣的有點(diǎn)點(diǎn)基礎(chǔ)的入門新獸。

linux操作系統(tǒng)下的存儲管理是怎么樣的

4,Linux 系統(tǒng)是怎樣進(jìn)行內(nèi)存管理的

Linux 系統(tǒng)和android 雖然都是用的是linux內(nèi)核,但對處理程序內(nèi)存的方式不一樣,特別是前臺的上層程序,內(nèi)核級程序基本是一樣的。 linux內(nèi)核基本是先把數(shù)據(jù)都放在內(nèi)存上的,內(nèi)存不夠才放到交換分區(qū)(虛擬內(nèi)存)上
在終端中運(yùn)行 fdisk -l查看哪個分區(qū)有空,然后運(yùn)行sudo mkswap /dev/sda 添加交換分區(qū),sudo swapon /dev/sda啟用分區(qū),sudo /dev/sda swap swap defaults 0 0寫入啟動,如果沒有空的分區(qū),那就在較大的分區(qū)中設(shè)置交換文件 sudo dd if=/dev/zero of=/swapfile1 bs=1024k count=512 創(chuàng)建大小為512m的交換文件(512可以自己定義),sudo swapon /swapfile1 啟用交換文件sudo /swapfile1 swap swap defaults 0 0寫入啟動

5,linux 如何動態(tài)分配內(nèi)存

Linux內(nèi)核運(yùn)行在X86機(jī)器的物理內(nèi)存管理使用簡單平坦內(nèi)存模型,每個用戶進(jìn)程內(nèi)存(虛擬內(nèi)存)地址范圍為從0到TASK_SIZE字節(jié),超過此內(nèi)存的限制不能被用戶訪問。用戶進(jìn)程被分為幾個邏輯段,成為虛擬內(nèi)存區(qū)域,內(nèi)核跟蹤和管理用戶進(jìn)程的虛擬內(nèi)存區(qū)域提供適當(dāng)?shù)膬?nèi)存管理和內(nèi)存保護(hù)處理。 do_brk()是一個內(nèi)核函數(shù),用于間接調(diào)用管理進(jìn)程的內(nèi)存堆的增加和縮減 (brk),它是一個mmap(2)系統(tǒng)調(diào)用的簡化版本,只處理匿名映射(如未初始化數(shù)據(jù))。 do_brk()改變進(jìn)程的地址空間。地址是代表數(shù)據(jù)段結(jié)束的一個指針(事實(shí)上是進(jìn)程的堆區(qū)域)。 do_brk()的參數(shù)是一個絕對邏輯地址,這個地址代表地址空間新的結(jié)尾。更實(shí)際地說,我們在編寫用戶程序的時候從來就不應(yīng)該使用這個函數(shù)。使用這個函數(shù)的用戶程序就不能再使用malloc(),這是一個大問題,因?yàn)闃?biāo)注庫的許多部分依賴于malloc()。 如果在用戶程序中使用do_brk()可能會導(dǎo)致難以發(fā)現(xiàn)的程序崩潰。 do_brk(addr, len)函數(shù)給從addr到addr+len建立虛擬內(nèi)存區(qū)vm_area_struct(該區(qū)的起始地址為addr;結(jié)束地址為addr+len),該虛擬內(nèi)存區(qū)作為進(jìn)程的堆來使用。 malloc將從此區(qū)域獲取內(nèi)存空間(虛擬內(nèi)存), free()將會把malloc()獲取的虛擬空間釋放掉(歸還到該進(jìn)程的堆的空閑空間中去)

6,Linux的內(nèi)存管理機(jī)制是什么樣的

在早期的計(jì)算機(jī)中,程序是直接運(yùn)行在物理內(nèi)存上的。換句話說,就是程序在運(yùn)行的過程中訪問的都是物理地址。如果這個系統(tǒng)只運(yùn)行一個程序,那么只要這個程序所需的內(nèi)存不要超過該機(jī)器的物理內(nèi)存就不會出現(xiàn)問題,我們也就不需要考慮內(nèi)存管理這個麻煩事了,反正就你一個程序,就這么點(diǎn)內(nèi)存,吃不吃得飽那是你的事情了。然而現(xiàn)在的系統(tǒng)都是支持多任務(wù),多進(jìn)程的,這樣CPU以及其他硬件的利用率會更高,這個時候我們就要考慮到將系統(tǒng)內(nèi)有限的物理內(nèi)存如何及時有效的分配給多個程序了,這個事情本身我們就稱之為內(nèi)存管理。下面舉一個早期的計(jì)算機(jī)系統(tǒng)中,內(nèi)存分配管理的例子,以便于大家理解。加入我們有三個程序,程序1,2,3.程序1運(yùn)行的過程中需要10M內(nèi)存,程序2運(yùn)行的過程中需要100M內(nèi)存,而程序3運(yùn)行的過程中需要20M內(nèi)存。如果系統(tǒng)同時需要運(yùn)行程序A和B,那么早期的內(nèi)存管理過程大概是這樣的,將物理內(nèi)存的前10M分配給A, 接下來的10M-110M分配給B。這種內(nèi)存管理的方法比較直接,好了,假設(shè)我們這個時候想讓程序C也運(yùn)行,同時假設(shè)我們系統(tǒng)的內(nèi)存只有128M,顯然按照這種方法程序C由于內(nèi)存不夠是不能夠運(yùn)行的。大家知道可以使用虛擬內(nèi)存的技術(shù),內(nèi)存空間不夠的時候可以將程序不需要用到的數(shù)據(jù)交換到磁盤空間上去,已達(dá)到擴(kuò)展內(nèi)存空間的目的。下面我們來看看這種內(nèi)存管理方式存在的幾個比較明顯的問題。就像文章一開始提到的,要很深層次的把握某個技術(shù)最好搞清楚其發(fā)展歷程。1.進(jìn)程地址空間不能隔離由于程序直接訪問的是物理內(nèi)存,這個時候程序所使用的內(nèi)存空間不是隔離的。舉個例子,就像上面說的A的地址空間是0-10M這個范圍內(nèi),但是如果A中有一段代碼是操作10M-128M這段地址空間內(nèi)的數(shù)據(jù),那么程序B和程序C就很可能會崩潰(每個程序都可以系統(tǒng)的整個地址空間)。這樣很多惡意程序或者是木馬程序可以輕而易舉的破快其他的程序,系統(tǒng)的安全性也就得不到保障了,這對用戶來說也是不能容忍的。2. 內(nèi)存使用的效率低如上面提到的,如果我們要像讓程序A、B、C同時運(yùn)行,那么唯一的方法就是使用虛擬內(nèi)存技術(shù)將一些程序暫時不用的數(shù)據(jù)寫到磁盤上,在需要的時候再從磁盤讀回內(nèi)存。這里程序C要運(yùn)行,將A交換到磁盤上去顯然是不行的,因?yàn)槌绦蚴切枰B續(xù)的地址空間的,程序C需要20M的內(nèi)存,而A只有10M的空間,所以需要將程序B交換到磁盤上去,而B足足有100M,可以看到為了運(yùn)行程序C我們需要將100M的數(shù)據(jù)從內(nèi)存寫到磁盤,然后在程序B需要運(yùn)行的時候再從磁盤讀到內(nèi)存,我們知道IO操作比較耗時,所以這個過程效率將會十分低下。3. 程序運(yùn)行的地址不能確定程序每次需要運(yùn)行時,都需要在內(nèi)存中非配一塊足夠大的空閑區(qū)域,而問題是這個空閑的位置是不能確定的,這會帶來一些重定位的問題,重定位的問題確定就是程序中引用的變量和函數(shù)的地址,如果有不明白童鞋可以去查查編譯愿意方面的資料。內(nèi)存管理無非就是想辦法解決上面三個問題,如何使進(jìn)程的地址空間隔離,如何提高內(nèi)存的使用效率,如何解決程序運(yùn)行時的重定位問題?這里引用計(jì)算機(jī)界一句無從考證的名言:“計(jì)算機(jī)系統(tǒng)里的任何問題都可以靠引入一個中間層來解決?!爆F(xiàn)在的內(nèi)存管理方法就是在程序和物理內(nèi)存之間引入了虛擬內(nèi)存這個概念。虛擬內(nèi)存位于程序和屋里內(nèi)存之間,程序只能看見虛擬內(nèi)存,再也不能直接訪問物理內(nèi)存。每個程序都有自己獨(dú)立的進(jìn)程地址空間,這樣就做到了進(jìn)程隔離。這里的進(jìn)程地址空間是指虛擬地址。顧名思義既然是虛擬地址,也就是虛的,不是現(xiàn)實(shí)存在的地址空間。既然我們在程序和物理地址空間之間增加了虛擬地址,那么就要解決怎么從虛擬地址映射到物理地址,因?yàn)槌绦蜃罱K肯定是運(yùn)行在物理內(nèi)存中的,主要有分段和分頁兩種技術(shù)。分段(Segmentation):這種方法是人們最開始使用的一種方法,基本思路是將程序所需要的內(nèi)存地址空間大小的虛擬空間映射到某個物理地址空間。段映射機(jī)制:每個程序都有其獨(dú)立的虛擬的獨(dú)立的進(jìn)程地址空間,可以看到程序A和B的虛擬地址空間都是從0x00000000開始的。我們將兩塊大小相同的虛擬地址空間和實(shí)際物理地址空間一一映射,即虛擬地址空間中的每個字節(jié)對應(yīng)于實(shí)際地址空間中的每個字節(jié),這個映射過程由軟件來設(shè)置映射的機(jī)制,實(shí)際的轉(zhuǎn)換由硬件來完成。這種分段的機(jī)制解決了文章一開始提到的3個問題中的進(jìn)程地址空間隔離和程序地址重定位的問題。程序A和程序B有自己獨(dú)立的虛擬地址空間,而且該虛擬地址空間被映射到了互相不重疊的物理地址空間,如果程序A訪問虛擬地址空間的地址不在0x00000000-0x00A00000這個范圍內(nèi),那么內(nèi)核就會拒絕這個請求,所以它解決了隔離地址空間的問題。我們應(yīng)用程序A只需要關(guān)心其虛擬地址空間0x00000000-0x00A00000,而其被映射到哪個物理地址我們無需關(guān)心,所以程序永遠(yuǎn)按照這個虛擬地址空間來放置變量,代碼,不需要重新定位。無論如何分段機(jī)制解決了上面兩個問題,是一個很大的進(jìn)步,但是對于內(nèi)存效率問題仍然無能為力。因?yàn)檫@種內(nèi)存映射機(jī)制仍然是以程序?yàn)閱挝?,?dāng)內(nèi)存不足時仍然需要將整個程序交換到磁盤,這樣內(nèi)存使用的效率仍然很低。那么,怎么才算高效率的內(nèi)存使用呢。事實(shí)上,根據(jù)程序的局部性運(yùn)行原理,一個程序在運(yùn)行的過程當(dāng)中,在某個時間段內(nèi),只有一小部分?jǐn)?shù)據(jù)會被經(jīng)常用到。所以我們需要更加小粒度的內(nèi)存分割和映射方法,此時是否會想到Linux中的Buddy算法和slab內(nèi)存分配機(jī)制呢,哈哈。另一種將虛擬地址轉(zhuǎn)換為物理地址的方法分頁機(jī)制應(yīng)運(yùn)而生了。分頁機(jī)制:分頁機(jī)制就是把內(nèi)存地址空間分為若干個很小的固定大小的頁,每一頁的大小由內(nèi)存決定,就像Linux中ext文件系統(tǒng)將磁盤分成若干個Block一樣,這樣做是分別是為了提高內(nèi)存和磁盤的利用率。試想以下,如果將磁盤空間分成N等份,每一份的大小(一個Block)是1M,如果我想存儲在磁盤上的文件是1K字節(jié),那么其余的999字節(jié)是不是浪費(fèi)了。所以需要更加細(xì)粒度的磁盤分割方式,我們可以將Block設(shè)置得小一點(diǎn),這當(dāng)然是根據(jù)所存放文件的大小來綜合考慮的,好像有點(diǎn)跑題了,我只是想說,內(nèi)存中的分頁機(jī)制跟ext文件系統(tǒng)中的磁盤分割機(jī)制非常相似。Linux中一般頁的大小是4KB,我們把進(jìn)程的地址空間按頁分割,把常用的數(shù)據(jù)和代碼頁裝載到內(nèi)存中,不常用的代碼和數(shù)據(jù)保存在磁盤中,我們還是以一個例子來說明,如下圖:進(jìn)程虛擬地址空間、物理地址空間和磁盤之間的頁映射關(guān)系我們可以看到進(jìn)程1和進(jìn)程2的虛擬地址空間都被映射到了不連續(xù)的物理地址空間內(nèi)(這個意義很大,如果有一天我們的連續(xù)物理地址空間不夠,但是不連續(xù)的地址空間很多,如果沒有這種技術(shù),我們的程序就沒有辦法運(yùn)行),甚至他們共用了一部分物理地址空間,這就是共享內(nèi)存。進(jìn)程1的虛擬頁VP2和VP3被交換到了磁盤中,在程序需要這兩頁的時候,Linux內(nèi)核會產(chǎn)生一個缺頁異常,然后異常管理程序會將其讀到內(nèi)存中。這就是分頁機(jī)制的原理,當(dāng)然Linux中的分頁機(jī)制的實(shí)現(xiàn)還是比較復(fù)雜的,通過了也全局目錄,也上級目錄,頁中級目錄,頁表等幾級的分頁機(jī)制來實(shí)現(xiàn)的,但是基本的工作原理是不會變的。分頁機(jī)制的實(shí)現(xiàn)需要硬件的實(shí)現(xiàn),這個硬件名字叫做MMU(Memory Management Unit),他就是專門負(fù)責(zé)從虛擬地址到物理地址轉(zhuǎn)換的,也就是從虛擬頁找到物理頁。
文章TAG:linux內(nèi)存內(nèi)存管理管理linux內(nèi)存管理

最近更新

  • 一次系統(tǒng),什么是電力系統(tǒng)的一次系統(tǒng)二次系統(tǒng)一次系統(tǒng),什么是電力系統(tǒng)的一次系統(tǒng)二次系統(tǒng)

    什么是電力系統(tǒng)的一次系統(tǒng)二次系統(tǒng)2,電腦多久需要重做系統(tǒng)3,繼電保護(hù)和防雷接地屬于變電站的一次系統(tǒng)設(shè)計(jì)里面嗎4,正常個人電腦要多久重新做一次系統(tǒng)5,家庭電腦適合多久做一次系統(tǒng)6,一個月.....

    問答 日期:2023-08-24

  • pads2007,PADS2007的下載地址pads2007,PADS2007的下載地址

    PADS2007的下載地址2,PADS2007安裝3,pADS2007是什么軟件4,哪位大哥幫下忙急求PADS2007安裝方法5,PADS20076,怎樣安裝PADS2007急急1,PADS2007的下載地址http://www.gougou.com/search?search=.....

    問答 日期:2023-08-24

  • CPU緩存,CPU的緩存是什么CPU緩存,CPU的緩存是什么

    CPU的緩存是什么2,什么是CPU的緩存3,請問電腦的CPU緩存是什么意思4,什么叫CPU的緩存用什么特別的地方很重要嗎作用出現(xiàn)了問5,CPU緩存是什么意思6,cpu緩存有什么用1,CPU的緩存是什么CPU緩存位.....

    問答 日期:2023-08-24

  • led模塊,LED模塊是什么led模塊,LED模塊是什么

    LED模塊是什么2,led模塊的分類3,請問LED電源LED驅(qū)動LED模塊LED模組他們分別是什么關(guān)4,led模組的概念5,LED模組是什么LED食人魚模組貼片模組又是什么現(xiàn)在LED模組6,請教什么是LCD和LED模組兩.....

    問答 日期:2023-08-24

  • 松下伺服電機(jī),松下伺服電機(jī)驅(qū)動器松下伺服電機(jī),松下伺服電機(jī)驅(qū)動器

    松下伺服電機(jī)驅(qū)動器2,安川伺服電機(jī)與松下伺服電機(jī)在性能上的區(qū)別3,去哪買松下伺服電機(jī)便宜點(diǎn)4,松下400w伺服電機(jī)參數(shù)5,松下A5系列伺服驅(qū)動器6,松下伺服電機(jī)怎樣調(diào)機(jī)械剛性7,松下伺服馬達(dá)是變.....

    問答 日期:2023-08-24

  • 電磁閥怎么接線,電磁閥怎么接線電磁閥怎么接線,電磁閥怎么接線

    電磁閥怎么接線2,電磁閥的接法3,電磁閥線咋接4,電磁閥怎么接電啊整個的電路連接5,電磁閥怎么接6,中央空調(diào)電磁閥三條線怎么接1,電磁閥怎么接線電磁閥的接線盒有三個接線端子,并排端子為電源接.....

    問答 日期:2023-08-24

  • 調(diào)試,調(diào)試是什么啊調(diào)試,調(diào)試是什么啊

    調(diào)試是什么啊2,調(diào)試是什么意思3,名詞解釋調(diào)試4,什么叫調(diào)試它和測試有什么區(qū)別5,調(diào)試是什么意思遇到問題了6,調(diào)試是做什么的什么叫調(diào)試1,調(diào)試是什么啊編好程序后,用各種手段進(jìn)行查錯和排錯的過.....

    問答 日期:2023-08-24

  • 單片機(jī)型號,目前性能比較優(yōu)越的單片機(jī)有哪些型號的單片機(jī)型號,目前性能比較優(yōu)越的單片機(jī)有哪些型號的

    目前性能比較優(yōu)越的單片機(jī)有哪些型號的2,最常用的16位單片機(jī)是什么型號的啊3,大型公司主要用的是哪幾款單片機(jī)4,增強(qiáng)型51系列單片機(jī)有哪些5,51單片機(jī)就是80c51嗎6,8051單片機(jī)和C51單片機(jī)有.....

    問答 日期:2023-08-24