tmpfs 是 Linux/Unix 系統上的一種基于內存的文件系統,即 tmpfs 使用內存或 swap 分區來存儲文件。
Linux 內核中的 VM 子系統負責在后臺管理虛擬內存資源 Virtual Memory,即 RAM 和 swap 資源,透明地將 RAM 頁移動到交換分區或從交換分區到 RAM 頁,tmpfs 文件系統需要 VM 子系統的頁面來存儲文件。tmpfs 自己并不知道這些頁面是在交換分區還是在 RAM 中;做這種決定是 VM 子系統的工作。tmpfs 文件系統所知道的就是它正在使用某種形式的虛擬內存。
由于 tmpfs 是基于內存的,因此速度是相當快的。另外 tmpfs 使用的 VM 資源是動態的,當刪除 tmpfs 中文件,tmpfs 文件系統驅動程序會動態地減小文件系統并釋放 VM 資源,當然在其中創建文件時也會動態的分配VM資源。另外,tmpfs 不具備持久性,重啟后數據不保留。
/dev/shm 就是一個基于 tmpfs 的設備,在有些 Linux 發行版中 /dev/shm 是 /run/shm/ 目錄的一個軟鏈接。實際上在很多系統上的 /run 是被掛載為 tmpsf 的。用 df -T 可以查看系統中的磁盤掛載情況:
文件系統 1K-塊 已用 可用 已用% 掛載點udev 1859684 4 1859680 1% /devtmpfs 374096 1524 372572 1% /run/dev/sda8 76561456 36029540 36619724 50% /none 4 0 4 0% /sys/fs/cgroupnone 5120 0 5120 0% /run/locknone 1870460 27688 1842772 2% /run/shmnone 102400 56 102344 1% /run/user
那么,我們就先來說說 /run 目錄?,F在我們知道,該目錄是基于內存的,實際上它的前身是 /var/run 目錄,后來被 /run 替換。這是因為 /var/run 文件系統并不是在系統一啟動就是就緒的,而在此之前已經啟動的進程就先將自己的運行信息存放在 /dev 中,/dev 同樣是一種 tmpfs,而且是在系統一啟動就可用的。但是 /dev 設計的本意是為了存放設備文件的,而不是為了保存進程運行時信息的,所以為了不引起混淆,/dev 中存放進程信息的文件都以 "." 開始命名,也就是都是隱藏文件夾。但是即便是這樣,隨著文件夾的數量越來越多,/dev 里面也就越來越混亂,于是就引入了替代方案,也就是 /run。實際上在很多系統上 /var/run 目錄仍然存在,但其是 /run 目錄的一個軟鏈接。
/var/run 目錄中主要存放的是自系統啟動以來描述系統信息的文件。比較常見的用途是 daemon 進程將自己的 pid 保存到這個目錄。
/dev/shm/ 是 Linux 下一個非常有用的目錄,它的意思是 Shared memory,也就是共享內存。由于它在內存上,所以所有系統進程都能共享該目錄。默認情況下它的大小是內存的一半。如果希望改變它的大小,可以用 mount 來管理:
mount -o size=4000M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
如果希望永久生效,可以修改 /etc/fstab 文件:
tmpfs /dev/shm tmpfs defaults,size=4G 0 0
利用 /dev/shm 可以做很多事情,這里說一個 Python 的應用。用 Python 做數據處理時,可能會用到 numpy,通常做數據處理時的數據量都是很大的,如果有多個進程都需要用到同樣的數據,那么 /dev/shm 就派上了用場,也就是用共享內存技術。Python 有一個第三方庫可以用來在多個進程間共享 numpy 數組,即 SharedArray。SharedArray 便是基于 /dev/shm 的,并且采用 POSIX 標準,能夠兼容多個平臺。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。
新聞熱點
疑難解答
圖片精選