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

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀] 內(nèi)存是Linux內(nèi)核所管理的最重要的資源之一,內(nèi)存管理系統(tǒng)是操作系統(tǒng)中最為重要的部分。對于Linux的初學者來說,熟悉Linux的內(nèi)存管理非常重要。進程是運行于虛擬地址空間的

 內(nèi)存是Linux內(nèi)核所管理的最重要的資源之一,內(nèi)存管理系統(tǒng)是操作系統(tǒng)中最為重要的部分。對于Linux的初學者來說,熟悉Linux的內(nèi)存管理非常重要。

進程是運行于虛擬地址空間的一個程序??梢哉f,任何在Linux系統(tǒng)下運行的程序都是進程。Linux系統(tǒng)中包括交互進程和批處理進程。交互進程是由Shell控制和運行的,既可以在前臺運行,也可以在后臺運行。批處理進程不屬于某個終端,被提交到一個隊列中以便順序執(zhí)行。大多數(shù)的進程都需要虛擬內(nèi)存。

一般需要多少內(nèi)存

對于典型的Linux應用系統(tǒng),128MB內(nèi)存是合理的選擇。如果不運行X-Window系統(tǒng),那么在一臺特殊用途的機器(比如用于調(diào)試設備驅(qū)動程序的“崩潰和燒毀”系統(tǒng))上僅用8MB內(nèi)存就可以工作。

筆者曾經(jīng)做過實驗,在128MB和256MB下編譯內(nèi)核所需的時間幾乎一樣,都少于3分半鐘(筆者的Linux發(fā)行版本是Mandrake Linux 9.1,內(nèi)核2.4.21)。在一個只有8MB內(nèi)存的系統(tǒng)上,編譯需要的時間會更長一些。類似Web瀏覽器這樣的多媒體應用軟件,在內(nèi)存充足時會運行得更流暢,特別是在一邊編譯程序,一邊上網(wǎng)瀏覽的時候更是如此。因此,如果只有128MB內(nèi)存,則預期的性能會有所降低。類似地,如果要開發(fā)消耗大量內(nèi)存的應用程序,可能會要求更多的內(nèi)存。所以,需要多少內(nèi)存由工作需求來決定。

實時監(jiān)控內(nèi)存使用情況

1.在命令行使用“Free”命令監(jiān)控內(nèi)存使用情況 #free

total  used  free shared buffers cached

Mem:    256024 192284  63740   0  10676 101004

-/+ buffers/cache: 80604  75420

Swap:    522072   0 522072

上面代碼給出了一個256MB的RAM和512MB交換空間的系統(tǒng)情況。第三行輸出(Mem:)顯示物理內(nèi)存。Total列不顯示核心使用的物理內(nèi)存(通常大約1MB)。Used列顯示被使用的內(nèi)存總額(第二行不計緩沖)。Free列顯示全部沒有使用的內(nèi)存。Shared列顯示多個進程共享的內(nèi)存總額。Buffers列顯示磁盤緩存的當前大小。第五行(Swap:)對換空間,顯示的信息類似上面。如果這行為全0,那么就沒有使用對換空間。在缺省的狀態(tài)下,free命令以千字節(jié)(也就是1024字節(jié)為單位)來顯示內(nèi)存使用情況。使用-h參數(shù),以字節(jié)為單位顯內(nèi)存使用情況;或者使用-m參數(shù),以兆字節(jié)為單位顯示內(nèi)存使用情況。還可以通過-s參數(shù),使用命令來不間斷地監(jiān)視內(nèi)存使用情況:

#free -b -s5

這個命令將會在終端窗口中連續(xù)不斷地報告內(nèi)存的使用情況,每5秒鐘更新一次。

2.使甩vmstat命令監(jiān)視虛擬內(nèi)存使用情況 # vmstat

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

r b  swpd  free  buff cache  si  so  bi  bo  in  cs us sy id wa

1 0   0 63692 10704 101008  0  0  239  42 126  105 48 45 7 0

vmstat()命令是一個通用監(jiān)控程序,是Virtual Meomory Statistics(虛擬內(nèi)存統(tǒng)計)的縮寫。如果使用vmstat命令的時候沒有使用任何命令行參數(shù),將會得到一個一次性的報告。vmstat命令報告主要的活動類型有進程(procs)、內(nèi)存(以千字節(jié)為單位)、交換分區(qū)(以千字節(jié)為單位)、來自塊設備(硬盤驅(qū)動器)的輸入輸出量、系統(tǒng)中斷(每秒鐘發(fā)生的次數(shù)),以及中央處理單元(CPU)分配給用戶、系統(tǒng)和空閑時分別占用的比例。

虛擬內(nèi)存實現(xiàn)的機制

存儲管理子系統(tǒng)是操作系統(tǒng)中最重要的組成部分之一。在早期計算時代,由于人們所需要的內(nèi)存數(shù)目遠遠大于物理內(nèi)存,因此設計出了各種各樣的策略來解決此問題,其中最成功的就是虛擬內(nèi)存技術,它使得系統(tǒng)中有限的物理內(nèi)存競爭進程所需內(nèi)存空間得到滿足。虛擬內(nèi)存通過在各個進程之間共享內(nèi)存,而使系統(tǒng)看起來有多于實際內(nèi)存的內(nèi)存容量。Linux支持虛擬內(nèi)存, 就是使用磁盤作為RAM的擴展,使可用內(nèi)存相應地有效擴大。核心把當前不用的內(nèi)存塊存到硬盤,騰出內(nèi)存給其它目的。當原來的內(nèi)容又要使用時,再讀回內(nèi)存。運行于Linux的程序只看到大量的可用內(nèi)存,而不關心哪部分在磁盤上。當然,讀寫硬盤比真的內(nèi)存慢(大約慢千倍),所以程序運行較慢。用做虛擬內(nèi)存的這部分硬盤叫對換空間。

虛擬內(nèi)存技術不僅僅讓我們可以使用更多的內(nèi)存,它還提供了下面這些功能:

1.巨大的尋址空間

操作系統(tǒng)讓系統(tǒng)看上去有比實際內(nèi)存大得多的內(nèi)存空間。虛擬內(nèi)存可以是系統(tǒng)中實際物理空間的許多倍。每個進程運行在其獨立的虛擬地址空間中,這些虛擬空間相互之間都完全隔離開來,所以進程間不會互相影響。同時,硬件虛擬內(nèi)存機構可以將內(nèi)存的某些區(qū)域設置成不可寫,這樣可以保護代碼與數(shù)據(jù)不會受惡意程序的干擾。

2.公平的物理內(nèi)存分配

內(nèi)存管理子系統(tǒng)允許系統(tǒng)中每個運行的進程公平地共享系統(tǒng)中的物理內(nèi)存。

3.共享虛擬內(nèi)存

盡管虛擬內(nèi)存允許進程有其獨立的虛擬地址空間,但有時也需要在進程之間共享內(nèi)存。例如,有可能系統(tǒng)中有幾個進程同時運行BASH命令外殼程序。為了避免在每個進程的虛擬內(nèi)存空間內(nèi)都存在BASH程序的拷貝,較好的解決辦法是系統(tǒng)物理內(nèi)存中只存在一份BASH的拷貝,并在多個進程間共享。動態(tài)庫則是另外一種進程間共享執(zhí)行代碼的方式。共享內(nèi)存可用來作為進程間通信(IPC)的手段,多個進程通過共享內(nèi)存來交換信息。Linux支持SYSTEM V的共享內(nèi)存IPC機制。

4.進程的保護

系統(tǒng)中的每一個進程都有自己的虛擬地址空間。這些虛擬地址空間是完全分開的,這樣一個進程的運行不會影響其它進程,并且硬件上的虛擬內(nèi)存機制是被保護的,內(nèi)存不能被寫入。這樣可以防止迷失的應用程序覆蓋代碼的數(shù)據(jù)。

5.Linux虛擬內(nèi)存實現(xiàn)機制

Linux虛擬內(nèi)存的實現(xiàn)需要6種機制的支持:地址映射機制、內(nèi)存分配回收機制、緩存和刷新機制、請求頁機制、交換機制和內(nèi)存共享機制。

內(nèi)存管理程序通過映射機制把用戶程序的邏輯地址映射到物理地址。當用戶程序運行時,如果發(fā)現(xiàn)程序中要用的虛地址沒有對應的物理內(nèi)存,就發(fā)出了請求頁要求。如果有空閑的內(nèi)存可供分配,就請求分配內(nèi)存(于是用到了內(nèi)存的分配和回收),并把正在使用的物理頁記錄在緩存中(使用了緩存機制)。如果沒有足夠的內(nèi)存可供分配,那么就調(diào)用交換機制;騰出一部分內(nèi)存。另外,在地址映射中要通過TLB(翻譯后援存儲器)來尋找物理頁;交換機制中也要用到交換緩存,并且把物理頁內(nèi)容交換到交換文件中,也要修改頁表來映射文件地址。Linux虛擬內(nèi)存實現(xiàn)原理見圖1。[!--empirenews.page--]

圖1 Linux虛擬內(nèi)存實現(xiàn)原理

6.虛擬內(nèi)存容量設定

也許有人說,虛擬內(nèi)存容量的設定應該分配2倍于物理內(nèi)存,但這只是個規(guī)律。如果物理內(nèi)存比較小,可以這樣設定。如果有256MB物理內(nèi)存或更多的話,就可以縮小虛擬內(nèi)存。Linux會把大量的內(nèi)存用做Cache,但在資源緊張時會收回。只要看到swap為0,或者該數(shù)很小就可以放心了,內(nèi)存放著不用才是最大的浪費。

內(nèi)存泄露和回收內(nèi)存的方法

1.內(nèi)存泄漏的定義

一般常說的內(nèi)存泄漏是指堆內(nèi)存的泄漏。堆內(nèi)存是指程序從堆中分配的、大小任意的(內(nèi)存塊的大小可以在程序運行期決定)、使用完后必須顯示釋放的內(nèi)存。應用程序一般使用malloc、realloc、new等函數(shù)從堆中分配到一塊內(nèi)存,使用完后,程序必須負責相應的調(diào)用free或delete釋放該內(nèi)存塊。否則,這塊內(nèi)存就不能被再次使用,我們就說這塊內(nèi)存泄漏了。

2.內(nèi)存泄露的危害

從用戶使用程序的角度來看,內(nèi)存泄漏本身不會產(chǎn)生什么危害。作為一般的用戶,根本感覺不到內(nèi)存泄漏的存在。真正有危害的是內(nèi)存泄漏的堆積,這會最終消耗盡系統(tǒng)所有的內(nèi)存。從這個角度來說,一次性內(nèi)存泄漏并沒有什么危害,因為它不會堆積。而隱式內(nèi)存泄漏危害性則非常大,因為較之于常發(fā)性和偶發(fā)性內(nèi)存泄漏它更難被檢測到。存在內(nèi)存泄漏問題的程序除了會占用更多的內(nèi)存外,還會使程序的性能急劇下降。對于服務器而言,如果出現(xiàn)這種情況,即使系統(tǒng)不崩潰,也會嚴重影響使用。

3.內(nèi)存泄露的檢測和回收

對于內(nèi)存溢出之類的麻煩,大家可能在編寫指針比較多的復雜程序時就會遇到。在Linux或Unix下,C和C++語言是最常使用的工具。但是C++程序缺乏相應的手段來檢測內(nèi)存信息,只能使用top指令觀察進程的動態(tài)內(nèi)存總額。而且程序退出時,我們無法獲知任何內(nèi)存泄漏信息。

(1)使用Linux命令回收內(nèi)存,可以使用ps、kill兩個命令檢測內(nèi)存使用情況和進行回收。在使用超級用戶權限時使用命令“ps”,它會列出所有正在運行的程序名稱和對應的進程號(PID)。kill命令的工作原理是向Linux操作系統(tǒng)的內(nèi)核送出一個系統(tǒng)操作信號和程序的進程號(PID)。

下面舉例說明,為了高效率回收內(nèi)存可以使用命令ps參數(shù)v: #ps v

PID TTY   STAT  TIME MAJFL  TRS  DRS RSS %MEM COMMAND

2530 vc/1   S   0:00  104   6 1325 408 0.1 /sbin/mingetty tty1

2531 vc/2   S   0:00  104   6 1325 408 0.1 /sbin/mingetty tty2

2532 vc/3   S   0:00  104   6 1325 408 0.1 /sbin/mingetty tty3

2533 vc/4   S   0:00  104   6 1325 408 0.1 /sbin/mingetty tty4

2534 vc/5   S   0:00  104   6 1325 408 0.1 /sbin/mingetty tty5

2535 vc/6   S   0:00  104   6 1325 408 0.1 /sbin/mingetty tty6

2639 pts/1  S   0:00  545  16 2643 968 0.3 [su]

2684 pts/1  S   0:00  361  5

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

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

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

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

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

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

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

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

關鍵字: LED 設計 驅(qū)動電源

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

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

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

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

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

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

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

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

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

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

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

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