亚洲欧美中文字幕专区,日韩免费在线播放,777免费视频,欧美手机看片,色cccwww在线播放,欧美亚洲另类自拍偷在线拍,欧美无限看

當(dāng)前位置:首頁(yè) -> 焦點(diǎn)新聞

Linux巧用Windows打印機(jī)

2005/1/7 10:16:59       
初學(xué)者如何熟悉Linux內(nèi)存管理
何勤童
   內(nèi)存是Linux內(nèi)核所管理的最重要的資源之一,內(nèi)存管理系統(tǒng)是操作系統(tǒng)中最為重要的部分。對(duì)于Linux的初學(xué)者來(lái)說(shuō),熟悉Linux的內(nèi)存管理非常重要。

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

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

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

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

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

    #free -b -s5

    這個(gè)命令將會(huì)在終端窗口中連續(xù)不斷地報(bào)告內(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()命令是一個(gè)通用監(jiān)控程序,是Virtual Meomory Statistics(虛擬內(nèi)存統(tǒng)計(jì))的縮寫(xiě)。如果使用vmstat命令的時(shí)候沒(méi)有使用任何命令行參數(shù),將會(huì)得到一個(gè)一次性的報(bào)告。vmstat命令報(bào)告主要的活動(dòng)類型有進(jìn)程(procs)、內(nèi)存(以千字節(jié)為單位)、交換分區(qū)(以千字節(jié)為單位)、來(lái)自塊設(shè)備(硬盤(pán)驅(qū)動(dòng)器)的輸入輸出量、系統(tǒng)中斷(每秒鐘發(fā)生的次數(shù)),以及中央處理單元(CPU)分配給用戶、系統(tǒng)和空閑時(shí)分別占用的比例。

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

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

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

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

    2.公平的物理內(nèi)存分配
    內(nèi)存管理子系統(tǒng)允許系統(tǒng)中每個(gè)運(yùn)行的進(jìn)程公平地共享系統(tǒng)中的物理內(nèi)存!

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

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

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

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

 

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

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

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

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

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

    3.內(nèi)存泄露的檢測(cè)和回收
    對(duì)于內(nèi)存溢出之類的麻煩,大家可能在編寫(xiě)指針比較多的復(fù)雜程序時(shí)就會(huì)遇到。在Linux或Unix下,C和C++語(yǔ)言是最常使用的工具。但是C++程序缺乏相應(yīng)的手段來(lái)檢測(cè)內(nèi)存信息,只能使用top指令觀察進(jìn)程的動(dòng)態(tài)內(nèi)存總額。而且程序退出時(shí),我們無(wú)法獲知任何內(nèi)存泄漏信息。

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

    下面舉例說(shuō)明,為了高效率回收內(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   586  2501 1592  0.6 bash
    2711 pts/0    S      0:00    545    16  2643  968  0.3 [su]
    2714 pts/0    S      0:00    361   586  2501 1592  0.6 bash
    2754 pts/2    S      0:00    545    16  2643  968  0.3 [su]
    2757 pts/2    S      0:00    361   586  2501 1592  0.6 bash
    2818 pts/1    S      0:00    120    29  1478  480  0.1 ping 192.168.1.7
    2939 pts/2    R      0:00    156    58  2469  644  0.2 ps -v
 
    如果想回收ping命令的內(nèi)存的話,可以使用下面命令:
    # kill -9 2818

    (2)使用工具軟件
    Memprof是一個(gè)非常具有吸引力且易于使用的軟件,它由Red Hat的Owen Talyor創(chuàng)立。這個(gè)工具用于GNOME前端的Boehm-Demers-Weiser垃圾回收器。這個(gè)工具直接就可以執(zhí)行,并且其工作起來(lái)無(wú)需對(duì)源代碼進(jìn)行任何修改。在程序執(zhí)行時(shí),這個(gè)工具會(huì)以圖形化的方式顯示內(nèi)存的使用情況,工作界面見(jiàn)圖2。

    圖2 內(nèi)存回收工具M(jìn)emprof

    但是,該工具目前只能運(yùn)行于x86和PPC體系結(jié)構(gòu)的Linux系統(tǒng)之中,需要一個(gè)完整的GNOME環(huán)境。這樣就使得其不能靈活用于所有的地方。此外,該工具的開(kāi)發(fā)工作進(jìn)展得也比較緩慢,現(xiàn)在是0.5.1版。

    上面講述了Linux內(nèi)存的概念、需要多少內(nèi)存、實(shí)時(shí)監(jiān)控內(nèi)存使用情況、虛擬內(nèi)存實(shí)現(xiàn)的機(jī)制,以及內(nèi)存泄露和回收方法等五個(gè)方面內(nèi)容,希望能對(duì)Linux初學(xué)者高效率使用內(nèi)存系統(tǒng)有所幫助。(

  

煤炭網(wǎng)版權(quán)與免責(zé)聲明:

凡本網(wǎng)注明"來(lái)源:煤炭網(wǎng)m.jingweixianlan.com "的所有文字、圖片和音視頻稿件,版權(quán)均為"煤炭網(wǎng)m.jingweixianlan.com "獨(dú)家所有,任何媒體、網(wǎng)站或個(gè)人在轉(zhuǎn)載使用時(shí)必須注明"來(lái)源:煤炭網(wǎng)m.jingweixianlan.com ",違反者本網(wǎng)將依法追究責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,是本著為讀者傳遞更多信息的目的,并不意味著本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載使用時(shí),必須保留本網(wǎng)注明的稿件來(lái)源,禁止擅自篡改稿件來(lái)源,并自負(fù)版權(quán)等法律責(zé)任。違反者本網(wǎng)也將依法追究責(zé)任。 如本網(wǎng)轉(zhuǎn)載稿件涉及版權(quán)等問(wèn)題,請(qǐng)作者在兩周內(nèi)盡快來(lái)電或來(lái)函聯(lián)系。

  • 用手機(jī)也能做煤炭生意啦!
  • 中煤遠(yuǎn)大:煤炭貿(mào)易也有了“支付寶”
  • 中煤開(kāi)啟煤炭出口貿(mào)易人民幣結(jié)算新時(shí)代
  • 下半年煤炭市場(chǎng)依然嚴(yán)峻
市場(chǎng)動(dòng)態(tài)

網(wǎng)站技術(shù)運(yùn)營(yíng):北京真石數(shù)字科技股份有限公司、喀什中煤遠(yuǎn)大供應(yīng)鏈管理有限公司、喀什煤網(wǎng)數(shù)字科技有限公司

總部地址:北京市豐臺(tái)區(qū)總部基地航豐路中航榮豐1層

京ICP備18023690號(hào)-1      京公網(wǎng)安備 11010602010109號(hào)


關(guān)注中煤遠(yuǎn)大微信
跟蹤最新行業(yè)資訊