新聞中心
引用計數(shù)是Linux內(nèi)核中一個基本概念,是實現(xiàn)對象回收機制的一種方式,特別是對于文件系統(tǒng)中的文件節(jié)點,引用計數(shù)機制十分重要。本文將深入探討Linux中的引用計數(shù)機制。

創(chuàng)新互聯(lián)公司服務(wù)項目包括憑祥網(wǎng)站建設(shè)、憑祥網(wǎng)站制作、憑祥網(wǎng)頁制作以及憑祥網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,憑祥網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到憑祥省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
什么是引用計數(shù)?
在進程創(chuàng)建一個對象時,通常會分配一個內(nèi)存塊用于存儲對象的數(shù)據(jù),同時還會分配一塊內(nèi)存來存儲對象用于管理的數(shù)據(jù),比如訪問計數(shù)器、鎖、指向其他對象的指針等等。其中,訪問計數(shù)器就是引用計數(shù),用于記錄當(dāng)前對象被引用的次數(shù)。
當(dāng)一個新對象創(chuàng)建時,引用計數(shù)通常從1開始,表示有一個對象指向它。當(dāng)有其他對象指向它時,它的引用計數(shù)就會加1;當(dāng)對象指向它的其他對象被釋放時,它的引用計數(shù)就會減1。只有當(dāng)引用計數(shù)降至0時,對象才會被銷毀。
在Linux內(nèi)核中,引用計數(shù)機制被廣泛使用,比如在文件系統(tǒng)inode節(jié)點、網(wǎng)絡(luò)協(xié)議棧中的套接字、塊設(shè)備中的緩沖區(qū)等等。在這些對象中,引用計數(shù)的值可以通過特殊的API來獲取和更新。這些API通常包括get()和put()函數(shù)。
在文件系統(tǒng)inodes的引用計數(shù)中,通常使用i_count字段來記錄引用計數(shù)的值。在網(wǎng)絡(luò)協(xié)議棧中的套接字中,使用sk->sk_refcnt來記錄引用計數(shù)的值。在塊設(shè)備中的緩沖區(qū)中,使用bh->b_count來記錄引用計數(shù)的值。
在Linux內(nèi)核中,引用計數(shù)通常是通過讀寫鎖來保護的。引用計數(shù)以原子方式更新,以避免并發(fā)訪問問題。
何時使用引用計數(shù)?
在Linux內(nèi)核中,引用計數(shù)機制通常用于實現(xiàn)對象回收機制。由于內(nèi)核需要管理大量的對象,很難利用垃圾回收器來自動處理不再被引用的對象。因此,在Linux中,內(nèi)存管理和回收通常是在內(nèi)核中手動進行的。
當(dāng)一個對象被創(chuàng)建時,內(nèi)核會將它添加到相應(yīng)的管理列表中。當(dāng)對象不再被使用時,內(nèi)核會將其從管理列表中刪除,并將其內(nèi)存釋放回內(nèi)存池中。
在實現(xiàn)對象回收機制時,引用計數(shù)機制是一種特別有用和高效的方法。通過引用計數(shù),內(nèi)核可以在對象不再被使用時立即釋放其內(nèi)存,而不必等待垃圾回收器進行回收。這樣可以大大減少內(nèi)存的使用,提高系統(tǒng)性能。
實例分析
下面以文件系統(tǒng)inode節(jié)點為例進行分析。inode是文件系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu),用于描述文件、目錄和符號鏈接等類型的對象。inode節(jié)點包含了文件的元數(shù)據(jù)信息,比如文件大小、創(chuàng)建時間、修改時間等等。
在inode節(jié)點中,引用計數(shù)可以用于實現(xiàn)文件的刪除和回收。當(dāng)文件被打開時,系統(tǒng)會為該文件的inode節(jié)點增加一個引用計數(shù)。當(dāng)文件被關(guān)閉時,引用計數(shù)會減1。只有當(dāng)引用計數(shù)降至0時,該文件的inode節(jié)點才會被銷毀。
這種引用計數(shù)機制可以避免文件被多次刪除。比如,在一個文件正在被使用時,系統(tǒng)管理員可能希望刪除該文件。這種情況下,如果沒有引用計數(shù)機制,系統(tǒng)可能會立即刪除該文件。但由于該文件還在被使用,當(dāng)打開該文件的進程再次訪問該文件時,系統(tǒng)會因找不到該文件而崩潰。因此,使用引用計數(shù)機制可以避免這種情況的發(fā)生。
引用計數(shù)機制也可以用于避免文件被鏈接到多個目錄中。當(dāng)一個文件節(jié)點被鏈接到某個目錄中時,系統(tǒng)會為該目錄的inode節(jié)點增加一個引用計數(shù)。當(dāng)該文件所在的目錄被刪除時,引用計數(shù)會減1。只有當(dāng)引用計數(shù)降至0時,該目錄的inode節(jié)點才會被銷毀。這種機制可以保證系統(tǒng)中同一文件只存在一個副本,避免文件的重復(fù)。同時,還可以減少目錄的內(nèi)存使用,提高系統(tǒng)性能。
引用計數(shù)是Linux內(nèi)核中一個非常重要的概念,用于實現(xiàn)對象回收機制。引用計數(shù)機制是一種高效的方法,可以避免垃圾回收器的性能問題,同時也可以避免因?qū)ο蟊欢啻蝿h除而導(dǎo)致系統(tǒng)崩潰等問題。
在Linux內(nèi)核中,引用計數(shù)機制被廣泛使用,比如在文件系統(tǒng)inode節(jié)點、網(wǎng)絡(luò)協(xié)議棧中的套接字、塊設(shè)備中的緩沖區(qū)等等。想要,需要仔細研究相關(guān)的API和數(shù)據(jù)結(jié)構(gòu),并嘗試分析其實際應(yīng)用場景。
相關(guān)問題拓展閱讀:
- Linux基本命令
Linux基本命令
# ls -l
總用量 44
-rw——.root —- root07 1 月14 18:18 anaconda-ks.cfg
權(quán)限–引用計數(shù) 所有者 — 所屬組— 大小– 文件修改時間 文件名
ls
選項:
-a :顯示所有文件
–color=when:支持顏色輸出
-d :顯示目錄信息,而不是目錄下的文件
-h :人性化顯示﹐按照我們習(xí)慣的顯示文件大小
-i :顯示文件的i節(jié)點號
-l:長格式顯示
pwd 命令是查詢當(dāng)前所在的目錄的絕對路徑
選項:
-L (默認(rèn)值)打印環(huán)境變量”$PWD”的值,可能為符號鏈接。
-P 打印當(dāng)前工作目錄的物理位置。
mkdir
是創(chuàng)建目錄的命令
選項:
-Z:設(shè)置安全上下文,當(dāng)使用SELinux時有效;
-m或–mode:建立目錄的同時設(shè)置目錄的權(quán)限;
-p或–parents:若所要建立目錄的上層目錄目前尚未建立,則會一并建立上層目錄;
rmdir
是刪除空目錄的命令
-p: 遞歸刪除目錄
touch 是 創(chuàng)建空文件或修改文件的時間戳
# touch 文件名
-a:或–time=atime或–time=access或–time=use 只更改存取時間;
-c:或–no-create 不建立任何文件;
-d: 使用指定的日期時間,而非現(xiàn)在的時間;
-f:此參數(shù)將忽略不予處理,僅負責(zé)解決BSD版本touch指令的兼容性問題;
-m:或–time=mtime或–time=modify 只更該變動時間;
-r: 把指定文件或目錄的日期時間,統(tǒng)統(tǒng)設(shè)成和參考文件或目錄的日期時間相同;
-t: 使用指定的日期時間,而非現(xiàn)在的時間;
–help:在線幫助;
–version:顯示版本信息。
stat 是查看文件詳細信息的命令,而且可以看到文件的這三個時間戳
選項:
-L:支持符號連接;
-f:顯示文件系統(tǒng)狀態(tài)而非文件狀態(tài);
-t:以簡潔方式輸出信息;
cat 命令用來查看文件內(nèi)容
選項:
-A: 相當(dāng)于-vET 選項的整合,用于列出所有隱藏符號
-E: 列出每行結(jié)尾的回車符$
-n: 顯示行號
-T: 把 Tab 鍵用^I顯示出來
-v: 列出特殊字符
more 是分屏顯示文件的命令
less 是分行顯示文件的絕游命令
用less命令顯示文件時,侍宏派用PageUp鍵向上翻頁,用PageDown鍵向下翻頁。要退出less程序,應(yīng)按Q鍵。
選項:
-e:文件內(nèi)容顯示完畢后,自動退出;
-f:強制顯示文件;
-g:不加亮顯示搜索到的所有關(guān)鍵詞,僅顯示當(dāng)前顯示的關(guān)鍵字,以提高顯示速度;
-l:搜索時忽略大小寫的差異;
-N:每一行行首顯示行號;
-s:將連續(xù)多個空行壓縮成一行顯示;
-S:在單行顯示較長的內(nèi)容,而不換行顯示;
-x:將TAB字符顯示為指定個數(shù)的空格字符。
head 是用來顯示文件開頭的命令
選項:
-c –bytes=NUM顯示前NUM字節(jié);如果NUM前有”-“,那么會打印除了文件末尾的NUM字節(jié)以外的其他內(nèi)容。
-n, –lines=NUM顯示前NUM行而不是默認(rèn)的10行;如果NUM前有”-“,那么會打印除了文件末尾的NUM行以外的其他行。
-q, –quiet, –silent 不打印文件名行。
-v, –verbose總是打印文件名行。
-z, –zero-terminated 行終止符為NUL而不是換行符。
tail 是用來顯示文件末尾的命令
選項:
-c, –bytes=NUM 輸出文件尾部的NUM(NUM為整數(shù)老賀)個字節(jié)內(nèi)容。
-f, –follow 顯示文件最新追加的內(nèi)容?!皀ame”表示以文件名的方式監(jiān)視文件的變化。
-F 與 “–follow=name –retry” 功能相同。
-n, –line=NUM 輸出文件的尾部NUM(NUM位數(shù)字)行內(nèi)容。
–pid= 與“-f”選項連用,當(dāng)指定的進程號的進程終止后,自動退出tail命令。
-q, –quiet, –silent當(dāng)有多個文件參數(shù)時,不輸出各個文件名。
–retry即是在tail命令啟動時,文件不可訪問或者文件稍后變得不可訪問,都始終嘗試打開文件。使用此選項時需要與選項“–follow=name”連用。
-s, –sleep-interal= 與“-f”選項連用,指定監(jiān)視文件變化時間隔的秒數(shù)。
-v, –verbose 當(dāng)有多個文件參數(shù)時,總是輸出各個文件名。
ln 是用來為文件創(chuàng)建鏈接的命令
# ln 源文件 目標(biāo)文件
選項:
-s: 建立軟鏈接文件。如果不加“-s”選項,則建立硬鏈接文件
-f: 強制。如果目標(biāo)文件已經(jīng)存在,則刪除目標(biāo)文件后再建立鏈接文件
-d, -F, –directory 創(chuàng)建指向目錄的硬鏈接(只適用于超級用戶)
-f, –force 強行刪除任何已存在的目標(biāo)文件
-i, –interactive覆蓋既有文件之前先詢問用戶
-L, –logical 取消引用作為軟鏈接的目標(biāo)
-n, –no-dereference把軟鏈接的目的目錄視為一般文件
-P, –physical直接將硬鏈接到軟鏈接
-r, –relative創(chuàng)建相對于鏈接位置的軟鏈接
-s, –symbolic對源文件建立軟鏈接
硬鏈接特征:
源文件和硬鏈接文件擁有相同的 Inode 和 Block
? 修改任意一個文件,另一個都改變
? 刪除任意一個文件,另一個都能使用
? 硬鏈接標(biāo)記不清,很難確認(rèn)硬鏈接文件位置,不建議使用
? 硬鏈接不能鏈接目錄
? 硬鏈接不能跨分區(qū)
軟鏈接特征:
? 軟鏈接和源文件擁有不同的 Inode 和 Block
? 兩個文件修改任意一個,另一個都改變
? 刪除軟鏈接,源文件不受影響;刪除源文件,軟鏈接不能使用
? 軟鏈接沒有實際數(shù)據(jù),只保存源文件的 Inode,不論源文件多大,軟鏈接大小不變
? 軟鏈接的權(quán)限是更大權(quán)限 lrwxrwxrwx.,但是由于沒有實際數(shù)據(jù),最終訪問時需要參考源文
件權(quán)限
? 軟鏈接可以鏈接目錄
? 軟鏈接可以跨分區(qū)
? 軟鏈接特征明顯,建議使用軟連接
rm 是強大的刪除命令,不僅可以刪除文件,也可以刪除目錄
# rm 文件或目錄
選項:
d:直接把欲刪除的目錄的硬連接數(shù)據(jù)刪除成0,刪除該目錄;
-f:強制刪除文件或目錄;
-i:刪除已有文件或目錄之前先詢問用戶;
-r:遞歸處理,將指定目錄下的所有文件與子目錄一并處理;
–preserve-root:不對根目錄進行遞歸操作;
-v:顯示指令的詳細執(zhí)行過程。
cp 是文件或目錄用于復(fù)制的命令
# cp 源文件 目標(biāo)文件
選項:
-a:此參數(shù)的效果和同時指定”-dpR”參數(shù)相同;
-d:當(dāng)復(fù)制軟鏈接時,把目標(biāo)文件或目錄也建立為軟鏈接,并指向與源文件或目錄連接的原始文件或目錄;
-f:強行復(fù)制文件或目錄,不論目標(biāo)文件或目錄是否已存在;
-i:覆蓋既有文件之前先詢問用戶;
-l:對源文件建立硬連接,而非復(fù)制文件;
-p:保留源文件或目錄的屬性;
-r:遞歸處理,將指定目錄下的所有文件與子目錄一并處理;
-s:對源文件建立軟鏈接,而非復(fù)制文件;
-u:使用這項參數(shù)后只會在源文件的更改時間較目標(biāo)文件更新時或是名稱相互對應(yīng)的目標(biāo)文件并不存在時,才復(fù)制文件;
-S:在備份文件時,用指定的后綴“SUFFIX”代替文件的默認(rèn)后綴;
-b:覆蓋已存在的文件目標(biāo)前將目標(biāo)文件備份;
-v:詳細顯示命令執(zhí)行的操作。
mv 是用來對文件或目錄重新命名,或者將文件移動至其他目錄
# mv 源文件 目標(biāo)文件
選項:
-b:當(dāng)文件存在時,覆蓋前,為其創(chuàng)建一個備份;
-f:若目標(biāo)文件或目錄與現(xiàn)有的文件或目錄重復(fù),則直接覆蓋現(xiàn)有的文件或目錄;
-i:交互式操作,覆蓋前先行詢問用戶,如果源文件與目標(biāo)文件或目標(biāo)目錄中的文件同名,則詢問用戶是否覆蓋目標(biāo)文件。用戶輸入”y”,表示將覆蓋目標(biāo)文件;輸入”n”,表示取消對源文件的移動。這樣可以避免誤將文件覆蓋。
–strip-trailing-slashes:刪除源文件中的斜杠“
/
”;
-S:為備份文件指定后綴,而不使用默認(rèn)的后綴;
–target-directory=:指定源文件要移動到目標(biāo)目錄;
-u:當(dāng)源文件比目標(biāo)文件新或者目標(biāo)文件不存在時,才執(zhí)行移動操作。
# ls -l install.log
-rw-r–r–. 1 root root月:17 install.log
之一列的權(quán)限位如果不計算最后的“.”,則共有 10 位。
第 2~4 位代表文件所有者的權(quán)限。
chmod 用來變更文件或目錄的權(quán)限
# chmod 權(quán)限模式 文件名
選項:
-c, –changes:當(dāng)文件的權(quán)限更改時輸出操作信息。
–no-preserve-root:不將’/’特殊化處理,默認(rèn)選項。
–preserve-root:不能在根目錄下遞歸操作。
-f, –silent, –quiet:抑制多數(shù)錯誤消息的輸出。
-v, –verbose:無論文件是否更改了權(quán)限,一律輸出操作信息。
–reference=RFILE:使用參考文件或參考目錄RFILE的權(quán)限來設(shè)置目標(biāo)文件或目錄的權(quán)限。
-R, –recursive:對目錄以及目錄下的文件遞歸執(zhí)行更改權(quán)限操作。
用戶身份
首先,讀、寫、執(zhí)行權(quán)限對文件和目錄的作用是不同的。
目錄的可用權(quán)限其實只有以下幾個。
chown 是修改文件和目錄的所有者和所屬組的命令
# chown 所有者:所屬組 文件或目錄
選項:
-c或——changes:效果類似“-v”參數(shù),但僅回報更改的部分;
-f或–quite或——silent:不顯示錯誤信息;
-h或–no-dereference:只對軟鏈接的文件作修改,而不更改其他任何相關(guān)文件;
-R或——recursive:遞歸處理,將指定目錄下的所有文件及子目錄一并處理;
-v或——version:顯示指令執(zhí)行過程;
–reference=:把指定文件或目錄的擁有者與所屬群組全部設(shè)成和參考文件或目錄的擁有者與所屬群組相同;
普通用戶不能修改文件的所有者,哪怕自己是這個文件的所有者也不行
普通用戶可以修改所有者是自己的文件的權(quán)限
chgrp 是修改文件和目錄的所屬組的命令
# chgrp 所屬組 文件或目錄
-R 遞歸式地改變指定目錄及其下的所有子目錄和文件的所屬的組
-c或——changes:效果類似“-v”參數(shù),但僅回報更改的部分;
-f或–quiet或——silent:不顯示錯誤信息;
-h或–no-dereference:只對符號連接的文件作修改,而不是該其他任何相關(guān)文件;
-H如果命令行參數(shù)是一個通到目錄的軟鏈接,則遍歷軟鏈接
-R或——recursive:遞歸處理,將指令目錄下的所有文件及子目錄一并處理;
-L:遍歷每一個遇到的通到目錄的軟鏈接
-P:不遍歷任何符號鏈接(默認(rèn))
-v或——verbose:顯示指令執(zhí)行過程;
–reference=:把指定文件或目錄的所屬群組全部設(shè)成和參考文件或目錄的所屬群組相同;
umask 是顯示或設(shè)置創(chuàng)建文件的權(quán)限掩碼。我們需要先了解一下新建文件和目錄的默認(rèn)更大權(quán)限。
linux 引用計數(shù)的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux 引用計數(shù),深入理解Linux引用計數(shù)機制,Linux基本命令的信息別忘了在本站進行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
標(biāo)題名稱:深入理解Linux引用計數(shù)機制(linux引用計數(shù))
網(wǎng)頁鏈接:http://fisionsoft.com.cn/article/dpoeieh.html


咨詢
建站咨詢
