詳解Linux系統(tǒng)中的tempfs與/dev/shm
tmpfs 是 Linux/Unix 系統(tǒng)上的一種基于內(nèi)存的文件系統(tǒng),即 tmpfs 使用內(nèi)存或 swap 分區(qū)來存儲文件。
Linux 內(nèi)核中的 VM 子系統(tǒng)負責在后臺管理虛擬內(nèi)存資源 Virtual Memory,即 RAM 和 swap 資源,透明地將 RAM 頁移動到交換分區(qū)或從交換分區(qū)到 RAM 頁,tmpfs 文件系統(tǒng)需要 VM 子系統(tǒng)的頁面來存儲文件。tmpfs 自己并不知道這些頁面是在交換分區(qū)還是在 RAM 中;做這種決定是 VM 子系統(tǒng)的工作。tmpfs 文件系統(tǒng)所知道的就是它正在使用某種形式的虛擬內(nèi)存。
由于 tmpfs 是基于內(nèi)存的,因此速度是相當快的。另外 tmpfs 使用的 VM 資源是動態(tài)的,當刪除 tmpfs 中文件,tmpfs 文件系統(tǒng)驅動程序會動態(tài)地減小文件系統(tǒng)并釋放 VM 資源,當然在其中創(chuàng)建文件時也會動態(tài)的分配VM資源。另外,tmpfs 不具備持久性,重啟后數(shù)據(jù)不保留。
/dev/shm 就是一個基于 tmpfs 的設備,在有些 Linux 發(fā)行版中 /dev/shm 是 /run/shm/ 目錄的一個軟鏈接。實際上在很多系統(tǒng)上的 /run 是被掛載為 tmpsf 的。用 df -T 可以查看系統(tǒng)中的磁盤掛載情況:
文件系統(tǒng) 1K-塊 已用 可用 已用% 掛載點 udev 1859684 4 1859680 1% /dev tmpfs 374096 1524 372572 1% /run /dev/sda8 76561456 36029540 36619724 50% / none 4 0 4 0% /sys/fs/cgroup none 5120 0 5120 0% /run/lock none 1870460 27688 1842772 2% /run/shm none 102400 56 102344 1% /run/user
那么,我們就先來說說 /run 目錄。現(xiàn)在我們知道,該目錄是基于內(nèi)存的,實際上它的前身是 /var/run 目錄,后來被 /run 替換。這是因為 /var/run 文件系統(tǒng)并不是在系統(tǒng)一啟動就是就緒的,而在此之前已經(jīng)啟動的進程就先將自己的運行信息存放在 /dev 中,/dev 同樣是一種 tmpfs,而且是在系統(tǒng)一啟動就可用的。但是 /dev 設計的本意是為了存放設備文件的,而不是為了保存進程運行時信息的,所以為了不引起混淆,/dev 中存放進程信息的文件都以 "." 開始命名,也就是都是隱藏文件夾。但是即便是這樣,隨著文件夾的數(shù)量越來越多,/dev 里面也就越來越混亂,于是就引入了替代方案,也就是 /run。實際上在很多系統(tǒng)上 /var/run 目錄仍然存在,但其是 /run 目錄的一個軟鏈接。
/var/run 目錄中主要存放的是自系統(tǒng)啟動以來描述系統(tǒng)信息的文件。比較常見的用途是 daemon 進程將自己的 pid 保存到這個目錄。
/dev/shm/ 是 Linux 下一個非常有用的目錄,它的意思是 Shared memory,也就是共享內(nèi)存。由于它在內(nèi)存上,所以所有系統(tǒng)進程都能共享該目錄。默認情況下它的大小是內(nèi)存的一半。如果希望改變它的大小,可以用 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 做數(shù)據(jù)處理時,可能會用到 numpy,通常做數(shù)據(jù)處理時的數(shù)據(jù)量都是很大的,如果有多個進程都需要用到同樣的數(shù)據(jù),那么 /dev/shm 就派上了用場,也就是用共享內(nèi)存技術。Python 有一個第三方庫可以用來在多個進程間共享 numpy 數(shù)組,即 SharedArray。SharedArray 便是基于 /dev/shm 的,并且采用 POSIX 標準,能夠兼容多個平臺。
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 配置數(shù)據(jù)庫連接池
首先有一點要明確, 我是個新手, 而我所知道的只是一個表面, 根源我并不了解, 目前也不打算去深究. 所以我的方法, 可能只適用于eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 的數(shù)據(jù)庫連接池的配置, 其他版本我無法保證.至少Tomcat 6的admin包還沒出, 所以我的方法肯定不適用于Tomcat 6.2008-10-10修改wamp的apache默認端口80為8088以及www目錄
這篇文章主要介紹了修改wamp的apache默認端口80為8088以及www目錄為workphp,需要的朋友可以參考下2014-03-03