日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Linux下運(yùn)行程序的內(nèi)存管理技巧(linux內(nèi)存運(yùn)行)

一、概述

貴溪網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,貴溪網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為貴溪近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的貴溪做網(wǎng)站的公司定做!

隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,內(nèi)存管理技術(shù)也逐漸成熟和完善,為了使程序能夠更加高效地運(yùn)行,Linux下的內(nèi)存管理技巧顯得尤為重要。本文將針對(duì)這一問(wèn)題進(jìn)行探討和分析,為讀者介紹一些內(nèi)存管理技巧,幫助讀者更加高效地運(yùn)行程序。

二、內(nèi)存管理技巧

1. 分配內(nèi)存

在Linux下運(yùn)行程序時(shí),需要比較靈活地分配內(nèi)存。可以使用malloc、calloc、realloc等函數(shù)來(lái)完成內(nèi)存分配。其中,malloc函數(shù)用于動(dòng)態(tài)分配內(nèi)存,calloc函數(shù)則用于動(dòng)態(tài)分配數(shù)組。realloc函數(shù)可以重新分配內(nèi)存,這些函數(shù)可以幫助程序員根據(jù)需要分配合適的內(nèi)存。

2. 釋放內(nèi)存

同時(shí),在程序運(yùn)行時(shí),需要及時(shí)釋放無(wú)用的內(nèi)存,以避免內(nèi)存的浪費(fèi)和程序的異常終止??梢允褂胒ree函數(shù)將不需要的內(nèi)存釋放,保證內(nèi)存的有效利用和程序的穩(wěn)定運(yùn)行。

3. 垃圾回收

垃圾回收是一種常見(jiàn)的內(nèi)存管理技巧,它可以在程序運(yùn)行時(shí)自動(dòng)回收未使用的內(nèi)存。Java語(yǔ)言中的垃圾回收機(jī)制被廣泛采用,這種機(jī)制會(huì)自動(dòng)回收未使用的內(nèi)存,并且可以節(jié)省程序員不少時(shí)間。

4. 內(nèi)存映射

內(nèi)存映射是一種高級(jí)的內(nèi)存管理技術(shù),它可以將文件或設(shè)備映射到進(jìn)程的內(nèi)存空間中,以實(shí)現(xiàn)文件或設(shè)備的讀寫(xiě)。Linux下的mmap函數(shù)就是一種支持內(nèi)存映射的函數(shù),它能夠?qū)⒁粋€(gè)文件映射到進(jìn)程的地址空間中,快速地進(jìn)行讀寫(xiě)操作。

5. 緩存技巧

緩存技巧也是一種常見(jiàn)的內(nèi)存管理技巧,它可以將頻繁使用的數(shù)據(jù)緩存到內(nèi)存中,以加快程序的運(yùn)行速度。Linux系統(tǒng)下,常常使用緩存技巧來(lái)提升文件系統(tǒng)的性能,如通過(guò)緩存inode信息來(lái)減少相同的磁盤(pán)讀操作。

6. 內(nèi)存池技巧

內(nèi)存池技巧是一種高效的內(nèi)存管理技巧,它可以在程序啟動(dòng)時(shí)分配一定數(shù)量的內(nèi)存空間,然后在程序運(yùn)行時(shí)動(dòng)態(tài)地進(jìn)行分配和釋放。通過(guò)使用內(nèi)存池技巧,可以減少內(nèi)存碎片的產(chǎn)生,提高內(nèi)存利用效率。

三、

在本文中,我們針對(duì)進(jìn)行了探討和分析。通過(guò)分配內(nèi)存、釋放內(nèi)存、垃圾回收、內(nèi)存映射、緩存技巧和內(nèi)存池技巧等技巧的運(yùn)用,可以提高程序的運(yùn)行效率,減少內(nèi)存的浪費(fèi),保證程序的穩(wěn)定性和高效性。未來(lái),在計(jì)算機(jī)技術(shù)的不斷發(fā)展中,內(nèi)存管理技巧也將更加成熟和完善,為程序員提供更多的選擇和幫助。

相關(guān)問(wèn)題拓展閱讀:

  • LINUX系統(tǒng)的內(nèi)存管理知識(shí)詳解
  • LINUX內(nèi)存機(jī)制是什么?

LINUX系統(tǒng)的內(nèi)存管理知識(shí)詳解

內(nèi)存是Linux內(nèi)核所管理的最重要的資源之一。內(nèi)存管理系統(tǒng)是操作系統(tǒng)中最為重要的部分,因?yàn)橄到y(tǒng)的物理內(nèi)存總是少于系統(tǒng)所需要的內(nèi)存數(shù)量。虛擬內(nèi)存就是為了克服這個(gè)矛盾而采用的策略。系統(tǒng)的虛擬內(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)存。以下就是我為大家整理到的詳細(xì)LINUX系統(tǒng)內(nèi)存管理的知識(shí),歡迎大家閱讀!!!

  

LINUX系統(tǒng)教程:內(nèi)存管理的知識(shí)詳解

  

一、內(nèi)存使用情況監(jiān)測(cè)

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

  在命令行使用“Free”命令可以監(jiān)控內(nèi)存使用情況

  代碼如下:

  #free

  total used free shared buffers cached

  Mem:

  -/+ buffers/cache:

  Swap:72

  上面給出了一個(gè)256兆的RAM和512兆交換空間的系統(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ì)對(duì)換空間,顯示的信息類似上面。如果這行為羨芹全0,那么沒(méi)使用對(duì)換空間。在缺省的狀態(tài)下,free命令以千字節(jié)(也就是1024字節(jié)為單位)來(lái)顯示內(nèi)存使用情況??梢允褂谩猦參數(shù)以字節(jié)為單位顯示內(nèi)存使用情況,或者可以兄晌使用—m參數(shù)以兆字節(jié)為單位顯示內(nèi)存使用情況。還可以通過(guò)—s參數(shù)使用命令來(lái)不間斷地監(jiān)視內(nèi)存使用情況:

  #free –b –s2

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

  (2)組合watch與 free命令用來(lái)實(shí)時(shí)監(jiān)控內(nèi)存使用情況:

  代碼如下:

  #watch -n 2 -d free

  Every 2.0s: free Fri Jul 6 06:06:

  total used free shared buffers cached

  Mem:64784

  -/+ buffers/cache:

  Swap:15928

  watch命令會(huì)每?jī)擅雸?zhí)行 free一次,執(zhí)行前會(huì)清除屏幕,在同樣位置顯示數(shù)據(jù)。因?yàn)?watch命令不會(huì)卷動(dòng)屏幕,所以適合出長(zhǎng)時(shí)間的監(jiān)測(cè)內(nèi)存使用率??梢允褂?-n選項(xiàng),控制執(zhí)行的頻率;也可以利用 -d選項(xiàng),讓命令將每次不同的地方顯示出來(lái)。Watch命令會(huì)一直執(zhí)行,直到您按下 – 為止。

  

二、虛擬內(nèi)存的概念

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

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

  首先內(nèi)存管理程序通過(guò)映射機(jī)制把用戶程序的邏輯地址映射到物理地址,在用戶程序運(yùn)行時(shí)如果發(fā)現(xiàn)程序中要用的虛地址沒(méi)有對(duì)應(yīng)的物理內(nèi)存時(shí),就發(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)映射文件地址。

  (2)虛擬內(nèi)存容量設(shè)定

  也許有人告訴你,應(yīng)該分配2倍于物理內(nèi)存的虛擬內(nèi)存,但這是個(gè)不固定的規(guī)律。如果你的物理保存比較小,可以這樣設(shè)定。如果你有1G物理內(nèi)存或更多的話,可以縮小一下虛擬內(nèi)存。Linux會(huì)把大量的內(nèi)存用做Cache的,但在資源緊張時(shí)回收回.。你只要看到swap為0或者很小就可以放心了,因?yàn)閮?nèi)存放著不用才是更大的浪費(fèi)。

  

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

  vmstat是Virtual Meomory Statistics(虛擬內(nèi)存統(tǒng)計(jì))的縮寫(xiě),可對(duì)操作系統(tǒng)的虛擬內(nèi)存、進(jìn)程、CPU活動(dòng)進(jìn)行監(jiān)視。它是對(duì)系統(tǒng)的整體情況進(jìn)行統(tǒng)計(jì),不足之處是無(wú)法對(duì)某個(gè)進(jìn)程進(jìn)行深入分析。通常使用vmstat 5 5(表示在5秒時(shí)間內(nèi)進(jìn)行5次采樣)命令測(cè)試。將得到一個(gè)數(shù)據(jù)匯總它可以反映真正的系統(tǒng)情況。

  代碼如下:

  #vmstat 5 5

  procemoryswapiosystemcpu—-

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

54 2

  vmstat命令輸出分成六個(gè)部分:

  (1)進(jìn)程procs:

  r:在運(yùn)行隊(duì)列中等待的進(jìn)程數(shù) 。

  b:在等待io的進(jìn)程數(shù) 。

  (2)內(nèi)存memoy:

  swpd:現(xiàn)時(shí)可用的交換內(nèi)存(單位KB)。

  free:空閑的內(nèi)存(單位KB)。

  buff: 緩沖去中的內(nèi)存數(shù)(單位:KB)。

  cache:被用來(lái)做為高速緩存的內(nèi)存數(shù)(單位:KB)。

  (3) swap交換頁(yè)面

  si: 從磁盤(pán)交換到內(nèi)存的交換頁(yè)數(shù)量,單位:KB/秒。

  so: 從內(nèi)存交換到磁盤(pán)的交換頁(yè)數(shù)量,單位:KB/秒。

  (4) io塊設(shè)備:

  bi: 發(fā)送到塊設(shè)備的塊數(shù),單位:塊/秒。

  bo: 從塊設(shè)備接收到的塊數(shù),單位:塊/秒。

  (5)system系統(tǒng):

  in: 每秒的中斷數(shù),包括時(shí)鐘中斷。

  cs: 每秒的環(huán)境(上下文)切換次數(shù)。

  (6)cpu中央處理器:

  cs:用戶進(jìn)程使用的時(shí)間 。以百分比表示。

  sy:系統(tǒng)進(jìn)程使用的時(shí)間。 以百分比表示。

  id:中央處理器的空閑時(shí)間 。以百分比表示。

  如果 r經(jīng)常大于 4 ,且id經(jīng)常小于40,表示中央處理器的負(fù)荷很重。 如果bi,bo 長(zhǎng)期不等于0,表示物理內(nèi)存容量太小。

  

四、Linux 服務(wù)器的內(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或釋放該內(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)存泄漏信息。

  使用kill命令

  使用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)。

  應(yīng)用例子:

  為了高效率回收內(nèi)存可以使用命令ps 參數(shù)v:

  代碼如下:

  # ps v

  PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND

tty1 Ss+ 0:8 0.1 /in/mingetty tty1

tty2 Ss+ 0:8 0.1 /in/mingetty tty2

tty3 Ss+ 0:2 0.1 /in/mingetty tty3

tty4 Ss+ 0:8 0.1 /in/mingetty tty4

tty5 Ss+ 0:2 0.1 /in/mingetty tty5

tty6 Ss+ 0:4 0.1 /in/mingetty tty6

tty7 Ss+ 1:.0 /usr/bin/Xorg :0 -br -a

pts/2 Ss 0:1496 0.6 -bash

pts/4 Ss 0:1472 0.6 /bin/bash

pts/4 S+ 0:48 0.2 ping 192.168.1.12

pts/2 R+ 0:68 0.3 ps v

  然后如果想回收Ping命令的內(nèi)存的話,使用命令:

  代碼如下:

  # Kill

  使用工具軟件

  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)存的使用情況。

  相關(guān)介紹:Linux

  嚴(yán)格來(lái)講,Linux這個(gè)詞本身只表示Linux內(nèi)核,但人們已經(jīng)習(xí)慣了用Linux來(lái)形容整個(gè)基于Linux內(nèi)核,并且使用GNU 工程各種工具和數(shù)據(jù)庫(kù)的操作系統(tǒng)。

  Linux擁有以下特性:類似于Unix的基本思想,支持完全免費(fèi)與自由傳播,完全兼容POSIX1.0標(biāo)準(zhǔn),支持多用戶、多任務(wù)、有著良好的界面、支持多種平臺(tái)。Linux 能運(yùn)行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。

LINUX內(nèi)存機(jī)制是什么?

Linux 內(nèi)存機(jī)制

Linux支持虛擬內(nèi)存(Virtual Mmemory),虛擬內(nèi)存是指使用磁盤(pán)當(dāng)作RAM的擴(kuò)展,這樣可用的內(nèi)存的大小就相應(yīng)地增大了。內(nèi)核會(huì)將暫時(shí)不用的內(nèi)存塊的內(nèi)容寫(xiě)到硬盤(pán)上,這樣一來(lái),這塊內(nèi)存就可用于其它目的。當(dāng)需要用到原始的內(nèi)容時(shí),它們被重新讀入內(nèi)存。這些操作對(duì)用戶來(lái)說(shuō)是完全透明的;Linux下運(yùn)行的程序只是看到有大量的內(nèi)存可供使用而并沒(méi)有注意到時(shí)不時(shí)它們的一部分是駐留在硬盤(pán)上的。當(dāng)然,讀寫(xiě)硬盤(pán)要比直接使用真實(shí)內(nèi)存慢得多(要慢數(shù)千倍),所以程序就不會(huì)象一直在內(nèi)存中運(yùn)行的那樣快。用作虛擬內(nèi)存的硬盤(pán)部分被稱為交換空間(Swap Space)。

一般,在交換空間中的頁(yè)面首先被換入內(nèi)存;如果此時(shí)沒(méi)有足夠的物理內(nèi)存來(lái)容納它們又將被交換出來(lái)(到其他的交換空間中)。如果沒(méi)有足夠的虛擬內(nèi)存來(lái)容納所有這些頁(yè)面,Linux就會(huì)波動(dòng)而不正常;但經(jīng)過(guò)一段較長(zhǎng)的時(shí)間Linux會(huì)恢復(fù),但此時(shí)系統(tǒng)已不可用了。

有時(shí),盡管有許多的空閑內(nèi)存,仍然會(huì)有許多的交換空間正被使用。這種情況是有可能發(fā)生的,例如如果在某一時(shí)刻有進(jìn)行交換的必要,但后來(lái)一個(gè)占用很多物理內(nèi)存的大進(jìn)程結(jié)束并釋放內(nèi)存時(shí)。被交換出的數(shù)據(jù)并不會(huì)自動(dòng)地交換進(jìn)內(nèi)存,除非有這個(gè)需要時(shí)。此時(shí)物理內(nèi)存會(huì)在一段時(shí)間內(nèi)保持空閑狀態(tài)。對(duì)此并沒(méi)有什么可擔(dān)心的,但是知道了是怎么一回事,也就無(wú)所謂了。

許多操作系統(tǒng)使用了虛擬內(nèi)存的方法。因?yàn)樗鼈儍H在運(yùn)行時(shí)才需要交換空間,以解決不會(huì)在同一時(shí)間使用交換空間,因此,除了當(dāng)前正在運(yùn)行的操作系統(tǒng)的交換空間,其它的就是一種浪費(fèi)。所以讓它們共享一個(gè)交換空間將會(huì)更有效率。

注意:如果會(huì)有幾個(gè)人同時(shí)使用這個(gè)系統(tǒng),他們都將消耗內(nèi)存。然而,如果兩個(gè)人同時(shí)運(yùn)行一個(gè)程序,內(nèi)存消耗的總量并不是翻倍,因?yàn)榇a頁(yè)以及共享的庫(kù)只存在一份。

Linux系統(tǒng)常常動(dòng)不動(dòng)就使用交換空間,以保持盡可能多的空閑物理內(nèi)存。即使并沒(méi)有什么事情需要內(nèi)存,Linux也會(huì)交換出暫時(shí)不用的內(nèi)存頁(yè)面。這可以避免等待交換所需的時(shí)間:當(dāng)磁盤(pán)閑著,就可以提前做好交換??梢詫⒔粨Q空間分散在幾個(gè)硬盤(pán)之上。針對(duì)相關(guān)磁盤(pán)的速度以及對(duì)磁盤(pán)的訪問(wèn)模式,這樣做可以提高性能。

與訪問(wèn)物理內(nèi)存相比,磁盤(pán)的讀寫(xiě)是很慢的。另外,在相應(yīng)較短的時(shí)間內(nèi)多次讀磁盤(pán)同樣的部分也是常有的事。例如,某人也許首先閱讀了一段E-mail消息,然后為了答復(fù)又將這段消息讀入編輯器中,然后又在將這個(gè)消息拷貝到文件夾中時(shí),使得郵件程序又一次讀入它。或者考慮一下在一個(gè)有著許多用戶的系統(tǒng)中 ls命令會(huì)被使用多少次。通過(guò)將信息從磁盤(pán)上僅讀入一次并將其存于內(nèi)存中,除了之一次讀以外,可以加快所有其它讀的速度。這叫作磁盤(pán)緩沖(Disk Buffering),被用作此目的的內(nèi)存稱為高速緩沖(Buffer Cache)。但是,由于內(nèi)存是一種有限而又不充足的資源,高速緩沖不可能做的很大(它不可能包容要用到的所有數(shù)據(jù))。當(dāng)緩沖充滿了數(shù)據(jù)時(shí),其中最長(zhǎng)時(shí)間不用的數(shù)據(jù)將被舍棄以騰出內(nèi)存空間用于新的數(shù)據(jù)。

對(duì)寫(xiě)磁盤(pán)操作來(lái)說(shuō)磁盤(pán)緩沖技術(shù)同樣有效。一方面,被寫(xiě)入磁盤(pán)的數(shù)據(jù)常常會(huì)很快地又被讀出(例如,原代碼文件被保存到一個(gè)文件中,又被編譯器讀入),所以將要被寫(xiě)的數(shù)據(jù)放入緩沖中是個(gè)好主意。另一方面,通過(guò)將數(shù)據(jù)放入緩沖中,而不是將其立刻寫(xiě)入磁盤(pán),程序可以加快運(yùn)行的速度。以后,寫(xiě)的操作可以在后成,而不會(huì)拖延程序的執(zhí)行。

大多數(shù)操作系統(tǒng)都有高速緩沖(盡管可能稱呼不同),但是并不是都遵守上面的原理。有些是直接寫(xiě)(Write-Through):數(shù)據(jù)將被立刻寫(xiě)入磁盤(pán)(當(dāng)然,數(shù)據(jù)也被放入緩存中)。如果寫(xiě)操作是在以后做的,那么該緩存被稱為后臺(tái)寫(xiě)(Write-Back)。后臺(tái)寫(xiě)比直接寫(xiě)更有效,但也容易出錯(cuò):如果機(jī)器崩潰,或者突然掉電,緩沖中改變過(guò)的數(shù)據(jù)就被丟失了。如果仍未被寫(xiě)入的數(shù)據(jù)含有重要的薄記信息,這甚至可能意味著文件系統(tǒng)(如果有的話)已不完整。

針對(duì)以上的原因,出現(xiàn)了很多的日志文件系統(tǒng),數(shù)據(jù)在緩沖區(qū)修改后,同時(shí)會(huì)被文件系統(tǒng)記錄修改信息,這樣即使此時(shí)系統(tǒng)掉電,系統(tǒng)重啟后會(huì)首先從日志記錄中恢復(fù)數(shù)據(jù),保證數(shù)據(jù)不丟失。當(dāng)然這些問(wèn)題不再本文的敘述范圍。

由于上述原因,在使用適當(dāng)?shù)年P(guān)閉過(guò)程之前,絕對(duì)不要關(guān)掉電源,Sync命令傾空(Flushes)緩沖,也即,強(qiáng)迫所有未被寫(xiě)的數(shù)據(jù)寫(xiě)入磁盤(pán),可用以確定所有的寫(xiě)操作都已完成。在傳統(tǒng)的UNIX系統(tǒng)中,有一個(gè)叫做update的程序運(yùn)行于后臺(tái),每隔30秒做一次sync操作,因此通常無(wú)需手工使用sync命令了。Linux另外有一個(gè)后臺(tái)程序,Bdflush,這個(gè)程序執(zhí)行更頻繁的但不是全面的同步操作,以避免有時(shí)sync的大量磁盤(pán)I/O操作所帶來(lái)的磁盤(pán)的突然凍結(jié)。

在Linux中,Bdflush是由update啟動(dòng)的。通常沒(méi)有理由來(lái)?yè)?dān)心此事,但如果由于某些原因bdflush進(jìn)程死掉了,內(nèi)核會(huì)對(duì)此作出警告,此時(shí)你就要手工地啟動(dòng)它了(/in/update)。

緩存(Cache)實(shí)際并不是緩沖文件的,而是緩沖塊的,塊是磁盤(pán)I/O操作的最小單元(在Linux中,它們通常是1KB)。這樣,目錄、超級(jí)塊、其它文件系統(tǒng)的薄記數(shù)據(jù)以及非文件系統(tǒng)的磁盤(pán)數(shù)據(jù)都可以被緩沖了。緩沖的效力主要是由它的大小決定的。緩沖太小的話等于沒(méi)用。它只能容納一點(diǎn)數(shù)據(jù),因此在被重用時(shí),所有緩沖的數(shù)據(jù)都將被傾空。實(shí)際的大小依賴于數(shù)據(jù)讀寫(xiě)的頻次、相同數(shù)據(jù)被訪問(wèn)的頻率。只有用實(shí)驗(yàn)的方法才能知道。

如果緩存有固定的大小,那么緩存太大了也不好,因?yàn)檫@會(huì)使得空閑的內(nèi)存太小而導(dǎo)致進(jìn)行交換操作(這同樣是慢的)。為了最有效地使用實(shí)際內(nèi)存,Linux自動(dòng)地使用所有空閑的內(nèi)存作為高速緩沖,當(dāng)程序需要更多的內(nèi)存時(shí),它也會(huì)自動(dòng)地減小緩沖的大小。

這就是一般情況下Linux內(nèi)存的一般機(jī)制,真正的Linux內(nèi)存的運(yùn)行機(jī)制遠(yuǎn)遠(yuǎn)比這個(gè)復(fù)雜。

  在linux的內(nèi)存分配機(jī)制中,優(yōu)先使用物理內(nèi)存,當(dāng)物理內(nèi)存還有空閑時(shí)(還夠用),不會(huì)釋放其占用內(nèi)存,就算占用內(nèi)存的程序已經(jīng)被關(guān)閉了,該程序所占用的內(nèi)存用來(lái)做緩存使用,對(duì)于開(kāi)啟過(guò)的程序、或是讀取剛存取過(guò)得數(shù)據(jù)會(huì)比較快。

linux 內(nèi)存 運(yùn)行的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 內(nèi)存 運(yùn)行,Linux下運(yùn)行程序的內(nèi)存管理技巧,LINUX系統(tǒng)的內(nèi)存管理知識(shí)詳解,LINUX內(nèi)存機(jī)制是什么?的信息別忘了在本站進(jìn)行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


當(dāng)前文章:Linux下運(yùn)行程序的內(nèi)存管理技巧(linux內(nèi)存運(yùn)行)
URL分享:http://www.dlmjj.cn/article/cdeoijh.html