tmpfs 一種基於記憶體的檔案系統

2022-03-02 07:02:19 字數 2281 閱讀 8984

tmpfs是一種基於記憶體的檔案系統,

tmpfs有時候使用rm(物理記憶體),有時候使用swap(磁碟一塊區域)。根據實際情況進行分配。

rm:物理記憶體。real memery的簡稱? 真實記憶體就是電腦主機板上那塊記憶體條,叫做真實記憶體不為過。

tmpfs最大可使用的大小為什麼是rm+swap。

swap就是linux下的虛擬記憶體分割槽,它的作用是在物理記憶體使用完之後,將磁碟空間(也就是swap分割槽)虛擬成記憶體來使用.  它和windows系統的交換檔案作用類似,但是它是一段連續的磁碟空間,並且對使用者不可見。

疑惑:window作業系統經常叫的虛擬記憶體和linux作業系統中的交換分割槽(swap)有什麼區別?

一聽說,虛擬記憶體,我常常就知道含義了。因為在學校使用window,我們可以自己設定虛擬記憶體的大小。可以隨時調。實際上虛擬記憶體就是window系統下的乙個這樣的檔案,如下:

每次看到交換分割槽,就一時不知道什麼東西了。

現在整理一下

實際上,在window系統上叫做虛擬記憶體。而在linux作業系統的概念中叫做交換分割槽。實際上本質都是一樣,都是虛擬記憶體。

後來看資料說,兩個作業系統對於什麼時候使用虛擬記憶體,是不同的。明顯,linux的效能更好。

window平時也會使用虛擬記憶體。而linux只有在記憶體不足的時候才會用到虛擬記憶體?

原理基本都是一樣的 區別就是windows即使物理記憶體沒有用完也會去用到虛擬記憶體而linux不一樣。

​linux只有當物理記憶體用完的時候才會去動用虛擬記憶體(即swap分割槽)這就是兩者的區別。。。

windows的虛擬記憶體是電腦自動設定的
linux的swap分割槽是我們裝系統的時候分好的區,大小是固定了的(難怪叫做交換區,把它當成乙個分割槽的概念了)

看設計思想的不同:

linux 只不過是把交換檔案設計為可以用分割槽而已,linux 也可以用檔案的。他們的區別就是實現方式不同而已。

windows 的虛擬記憶體檔案好處是可以動態變動大小,這個歸系統自己管理的。

windows 的虛擬記憶體設定預設好像是 50%-100% 內存在 c 盤上動態分配。linux 沒有這個自動的設計,但分割槽時安裝程式會根據習慣自動分割槽出乙個適合大小的 swap 分割槽。

windows 的虛擬記憶體交換檔案壞處是混在系統分割槽裡面使用,檔案碎片問題和容量變動問題都會影響交換檔案的效率,linux 因為是獨立的分割槽,所以沒有檔案碎片和容量變動的問題。

windows 其實也可以借用 linux 的 swap 理念,單獨分乙個分割槽,只用來放 windows 的虛擬記憶體交換檔案。

總結:虛擬記憶體和交換分割槽,本質都是同乙個東西,都是解決記憶體不夠用時候,把硬碟當記憶體來使用。怎麼個使用機制,window和linux稍微有不同。

tmpfs 的另乙個主要的好處是它閃電般的速度。因為典型的 tmpfs 檔案系統會完全駐留在 ram 中,讀寫幾乎可以是瞬間的。即使用了一些交換分割槽,效能仍然是卓越的,當更多空閒的 vm 資源可以使用時,這部分 tmpfs 檔案系統會被移動到 ram 中去。讓 vm 子系統自動地移動部分 tmpfs 檔案系統到交換分割槽實際上對效能上是好的,因為這樣做可以讓 vm 子系統為需要 ram 的程序釋放空間。這一點連同它動態調整大小的能力,比選擇使用傳統的 ram 磁碟可以讓作業系統有好得多的整體效能和靈活性。

我可以這麼理解:tmpfs是一種檔案系統,這種檔案系統的特殊性在於,其有時候使用ram,有時候使用vm(虛擬記憶體,磁碟上的交換分割槽)

mount -t 檔案型別 -o option  哪個裝置  掛節點

mount  -t tmpfs -o size=20m  tmpfs  /mnt/tmp

mount tmpfs /dev/shm -t tmpfs -o size=32m
裝置:就是將哪個裝置掛接到linux某個目錄去。這裡是將tmpfs裝置掛接到 /mnt/tmp中去。

這樣操作/mnt/tmp目錄實際上就是操作tmpfs裝置了。

tmpfs為什麼變成乙個裝置了呢?

vm子系統做管理工作。虛擬記憶體。

光碟映象檔案的掛接(mount)

#mkdir /mnt/vcdrom

注:建立乙個目錄用來作掛接點(mountpoint)

#mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom

注:使用/mnt/vcdrom就可以訪問盤映象檔案mydisk.iso裡的所有檔案了。

可以這裡理解掛節點:linux上的乙個目錄,就是掛節點,要把乙個裝置掛接到掛節點上。

記憶體池的一種實現

include include include include include const.h include utilityfunc.h include hashtable.h include logmsg.h define system page size 4096 define default...

一種記憶體池的實現方法

大圖 這裡使用python的 來解釋 size 是呼叫者意欲分配的記憶體大小 def allocate size 如果這裡分配的大小大於了最大快取的size 直接通過malloc operatornew 申請 if size max pooled size use malloc or operato...

一種基於有序序列mapjoin的方法

在解決資料傾斜問題時,我們經常會採用一種方式 mapjoin,按照hive的實現,mapjoin是將其中一張表在map的過程中載入到記憶體中,但是如果在join的表中,最小的表的資料量也不小的情況下。我們該怎麼辦呢?其中一種解決的方式是 將兩張表需要實現排序 直接用hadoop解決 如下,兩張表都是...