|
îáú÷áîéå
file system - æopÍaÔ ÔoÍa, coÄepÖaÝÉÊ ÆaÊÌo×yÀ cÉcÔeÍy.
óéîôáëóéó
#include <sys/filsys.h> #include <sys/types.h> #include <sys/param.h>
ïðéóáîéå
KaÖÄÙÊ ÔoÍ, coÄepÖaÝÉÊ ÆaÊÌo×yÀ cÉcÔeÍy (ÎaÐpÉÍep, ÖecÔËÉÊ
ÄÉcË) ÐoÄpaÚÄeÌÑeÔcÑ Îa ÂÌoËÉ Ðo 256 cÌo× (512 ÂaÊÔ). âÌoË c
ÎoÍepoÍ 0 Îe ÉcÐoÌØÚyeÔcÑ É coÄepÖÉÔ ÐpoÇpaÍÍy ÎaÞaÌØÎoÊ
ÚaÇpyÚËÉ ÉÌÉ ÄpyÇyÀ ÉÎÆopÍaÃÉÀ.
âÌoË ÎoÍep 1 - cyÐepÂÌoË. æopÍaÔ ÜÔoÇo ÂÌoËa oÐÉcaÎ × ÍaËpo ÆaÊÌe /usr/include/sys/filesys.h. B ÜÔoÍ ÍaËpo ÆaÊÌe S_isize ÐpeÄcÔa×ÌÑeÔ coÂoÊ aÄpec Ðep×oÇo ÂÌoËa ÄaÎÎÙx ÐocÌe cÐÉcËa ÉÎÄeËcÎÙx ÄecËpÉÐÔopo×, ÎaÞÉÎaÀÝeÇocÑ cpaÚy ÐocÌe cyÐepÂÌoËa × ÂÌoËe ÎoÍep 2; ÄÌÉÎa cÐÉcËa ÉÎÄeËcÎÙx ÄecËpÉÐÔopo× pa×Îa s_isize-2. S-fsize ÐpeÄcÔa×ÌÑeÔ coÂoÊ Ðep×ÙÊ ÂÌoË, ÎeÄocÔyÐÎÙÊ ÆaÊÌo×oÊ cÉcÔeÍe. üÔÉ ÂÌoËÉ ÉcÐoÌØÚyÀÔcÑ oÐepaÃÉoÎÎoÊ cÉcÔeÍoÊ ÄÌÑ ÚaÍeÎÙ ÄeÆeËÔÎÙx ÂÌoËo×. EcÌÉ oÐepaÃÉoÎÎÑ cÉcÔeÍa ×ÙÎyÖÄeÎa ×ÙÄeÌÉÔØ ÂÌoË ÉÚ cÐÉcËa ÚaÍeÎÙ ÉÌÉ, ÎaÐpoÔÉ×, oc×oÂoÖÄaeÔcÑ ÂÌoË ÉÚ cÐÉcËa ÚaÍeÎÙ, Îa ËoÎcoÌØ ×Ù×oÄÉÔcÑ cooÂÝeÎÉe. âoÌee ÔoÇo, cÐÉcoË c×oÂoÄÎÙx ÂÌoËo× ËoppeËÔÉpyeÔcÑ ÔaË, ÞÔoÂÙ ÄeÆeËÔÎÙÊ ÂÌoË Îe ÐoÐaÌ × cÐÉcoË c×oÂoÄÎÙx ÂÌoËo×.
CÐÉcoË c×oÂoÄÎÙx ÂÌÏËo× ËaÖÄoÇo ÔoÍa oÂpaÚo×aÎ cÌeÄyÀÝÉÍ oÂpaÚoÍ. MaccÉ× s_free coÄepÖÉÔ × ÜÌeÍeÎÔax s_free[1], ... , s_free[s_nfree-1] Äo 49 ÎoÍepo× c×oÂoÄÎÙx ÂÌoËo×. S_free[0] coÄepÖÉÔ ÎoÍep ÂÌoËa ÚaÇoÌo×Ëa ÃeÐÉ ÂÌoËo×, cocÔa×ÌÑÀÝÉx cÐÉcoË c×oÂoÄÎoÇo ÐpocÔpaÎcÔ×a. ðep×aÑ ÐepeÍeÎÎaÑ ÔÉÐa long × ËaÖÄoÊ ÃeÐÉ c×oÂoÄÎÙx ÂÌoËo× ÐpeÄcÔa×ÌÑeÔ coÂoÊ ÞÉcÌo (Äo 50) ÎoÍepo× c×oÂoÄÎÙx ÂÌoËo×, ÚaÐÉcaÎÎÙx × cÌeÄyÀÝÉx 50 ÜÌeÍeÎÔax ÔÉÐa long ÜÔoÇo ÜÌeÍeÎÔa ÃeÐÉ. ðep×ÙÊ ÉÚ ÜÔÉx ÐÑÔÉÄecÑÔÉ ÂÌoËo× c×ÑÚaÎ co cÌeÄyÀÝÉÍ ÜÌeÍeÎÔoÍ ÃeÐÉ. äÌÑ ÔoÇo, ÞÔoÂÙ ×ÙÄeÌÉÔØ ÂÌoË: yÍeÎØÛÉÔØ ÚÎaÞeÎÉe s_nfree É Îo×ÙÊ s_free[s_nfree]. EcÌÉ ÎoÍep Îo×oÇo ÂÌoËa pa×eÎ ÎyÌÀ, Îe cyÝecÔ×yeÔ ocÔa×ÛÉxcÑ ÂÌoËo×, ÐoÜÔoÍy ×ÙÄaeÔcÑ oÛÉÂËa. EcÌÉ s_nfree cÔaÎo×ÉÔcÑ 0, ÐpoÞecÔØ × ÂÌoËe, oÐpeÄeÌÑeÍÙÍ ÎoÍepoÍ Îo×oÇo ÂÌoËa, ÚaÍeÎÉÔØ s_nfree eÇo Ðep×ÙÍ cÌo×oÍ É ËoÐÉpo×aÔØ ÎoÍepa ÂÌoËo× × cÌeÄyÀÝÉx 50 ÜÌeÍeÎÔax ÔÉÐa long × ÍaccÉ× s_free. äÌÑ ÔoÇo, ÞÔoÂÙ oc×oÂoÄÉÔØ ÂÌoË Ðpo×epÉÔØ, ecÌÉ s_nfree pa×Îo 50; ecÌÉ Äa, ËoÐÉpo×aÔØ s_nfree É ÍaccÉ× s_free × ÎeÇo É ycÔaÎo×ÉÔØ ÚÎaÞeÎÉe s_nfree pa×ÎÙÍ 0. B ÌÀÂoÍ cÌyÞae ycÔaÎo×ÉÔØ s_free[s_nfree] Îa ÎoÍep oc×oÂoÖÄeÎÎoÇo ÂÌoËa É y×eÌÉÞÉÔØ s_nfree.
S_tfree ÐpeÄcÔa×ÌÑeÔ coÂoÊ ËoÌÉÞecÔ×o c×oÂoÄÎÙx ÂÌoËo×, ÄocÔyÐÎÙx ÆaÊÌo×oÊ cÉcÔeÍe.
S_ninide ÐpeÄcÔa×ÌÑeÔ coÂoÊ ÎoÍepa c×oÂoÄÎÙx ÉÎÄeËcÎÙx ÄecËpÉÐÔopo× × ÍaccÉ×es_inode. äÌÑ ×ÙÄeÌeÎÉÑ ÉÎÄeËcÎoÇo ÄecËpÉÐÔopa ÆaÊÌa: ecÌÉ s_ninode ÂoÌØÛe ÎyÌÑ, yÍeÎØÛÉÔØ eÇo É ×epÎyÔØ s_inode[s_ninode]. EcÌÉ oÎ pa×eÎ 0, ÞÉÔaÔØ cÐÉcoË ÉÎÄeËcÎÙx ÄecËpÉÐÔopo× É paÚÍecÔÉÔØ ÎoÍepa c×oÂoÄÎÙx ÉÎÄeËcÎÙx ÄecËpÉÐÔopo× ÆaÊÌo×(Äo 100) × ÍaccÉ×e s_inode, ÚaÔeÍ ÐoÐÙÔaÔØcÑ cÎo×a. äÌÑ oc×oÂoÖÄeÎÉÑ ÉÎÄeËcÎoÇo ÄecËpÉÐÔopa ÆaÊÌa, ÐpÉÞeÍ s_ninode ÍeÎØÛe 100, paÚÍecÔÉÔØ eÇo ÎoÍep × s_inode[s_ninode] É y×eÌÉÞÉÔØ s_ninode. EcÌÉ s_ninode pa×eÎ 100, Îe ÎyÖÎo ÄoÂa×ÌÑÔØ ÉÎÄeËcÎÙÊ ÄecËpÉÐÔop ÆaÊÌa × ÌÀÂyÀ ÔaÂÌÉÃy. üÔoÔ cÐÉcoË ÉÎÄeËcÎÙx ÄecËpÉÐÔopo× ÆaÊÌo× ÔoÌØËo y×eÌÉÞÉ×aeÔ cËopocÔØ ÐpoÃecca ×ÙÄeÌeÎÉÑ. éÎÆopÍaÃÉÑ o ÔoÍ, Ñ×ÌÑeÔcÑ ÌÉ ÉÎÄeËcÎÙÊ ÄecËpÉÐÔop ÆaÊÌa ÄeÊcÔ×ÉÔeÌØÎo c×oÂoÄÎÙÍ coÄepÖÉÔcÑ coÂcÔ×eÎÎo × ÉÎÄeËcÎoÍ ÄecËpÉÐÔope.
S_tinode ÐpeÄcÔa×ÌÑeÔ coÂoÊ ËoÌÉÞecÔ×o c×oÂoÄÎÙx ÉÎÄeËcÎÙx ÄecËpÉÐÔopo×, ÄocÔyÐÎÙÙx ÆaÊÌo×oÊ cÉcÔeÍe.
æÌaÇÉ S_flock É silock ÉcÐoÌØÚyÀÔcÑ ÔoÌØËo ÔoÇÄa, ËoÇÄa ÆaÊÌo×aÑ cÉcÔeÍa cÍoÎÔÉpo×aÎa. úÎaÞeÎÉe s_fmode Îa ÄÉcËe ÔaËÖe ÎecyÝecÔ×eÎÎo É ÉcÐoÌØÚyeÔcÑ ËaË ÆÌaÇ ÄÌÑ oÔpaÖeÎÉÑ ÔoÇo, ÞÔo cyÐepÂÌoË ÂÙÌ ÉÚÍeÎeÎ É ÄoÌÖeÎ ÂÙÔØ cËoÐÉpo×aÎ Îa ÄÉcË × ÔeÞeÎÉÉ cÌeÄyÀÝeÇo ÐepÉoÄa oÂÎo×ÌeÎÉÑ ÉÎÆopÍaÃÉÉ ÆaÊÌo×oÊ cÉcÔeÍÙ.
æÌaÇ S_ronly ÐoËaÚÙ×aeÔ, ÞÔo ÔoÍ ÄocÔyÐeÎ ÔoÌØËo ÄÌÑ ÞÔeÎÉÑ.
S_time Ñ×ÌÑeÔcÑ ÐocÌeÄÎÉÍ ×peÍeÎeÍ, ËoÇÄa cyÐepÂÌoË ÆaÊÌo×oÊ cÉcÔeÍÙ ÂÙÌ ÉÚÍeÎeÎ É ÐpeÄcÔa×ÌÑeÔcÑ ÞÉcÌoÍ Ä×oÊÎoÊ ÔoÞÎocÔÉ, × ceËyÎÄax,ËoÔopoe ÐpoÛÌo c ÍoÍeÎÔa 00:00 ñÎ×apÑ 1, 1970 (Ðo çpÉÎ×ÉÞy). Bo ×peÍÑ ÐepeÚaÇpyÚËÉ, ÜÌeÍeÎÔ s_time cyÐepÂÌoËa ËopÎe×oÊ ÆaÊÌo×oÊ cÉcÔeÍÙ ÉcÐoÌØÚyeÔcÑ ÄÌÑ ycÔaÎo×ËÉ cÉcÔeÍÎoÇo ×peÍeÎÉ.
HoÍepa ÄecËpÉÐÔopo× ÎaÞÉÎaÀÔcÑ c 1 É xpaÎÑÔcÑ × ÂÌoËe 2. TaËÖe, ÉÎÄeËcÎÙe ÄecËpÉÐÔopÙ ÆaÊÌo× ÐpeÄcÔa×ÌÑÀÔcÑ 64 ÂaÊÔaÍÉ, ÐoÜÔoÍy 8 ÉÚ ÎÉx ÐoÍeÝaÀÔcÑ × ÂÌoË. TaËÉÍ oÂpaÚoÍ, ÉÎÄeËcÎÙÊ ÄecËpÉÐÔop ÆaÊÌa i paÚÍeÝaeÔcÑ × ÂÌoËe c ÎoÍepoÍ(i+15)/8 É ÎaÞÉÎaÀÔcÑ 64x((i+15)(mod 8)) ÂaÊÔ oÔ ÎaÞaÌa. éÎÄeËcÎÙÊ ÄecËpÉÐÔop ÆaÊÌa 1 peÚep×ÉpyeÔcÑ ÄÌÑ ÉcÐoÌØÚo×aÎÉÑ × ÂyÄyÝeÍ. éÎÄeËcÎÙÊ ÄecËpÉÐÔop ÆaÊÌa 2 peÚep×ÉpyeÔcÑ ÄÌÑ ËopÎe×oÇo ËaÔaÌoÇa ÆaÊÌo×oÊ cÉcÔeÍÙ, ÄpyÇÉe ÎoÍepa ÄecËpÉÐÔopo× Îe peÚep×ÉpyÀÔcÑ ÄÌÑ cÐeÃÉaÌØÎoÇo ÉcÐoÌØÚo×aÎÉÑ. KaÖÄÙÊ ÉÎÄeËcÎÙÊ ÄecËpÉÐÔop ÆaÊÌa ÐpeÄcÔa×ÌÑeÔ oÄÉÎ ÆaÊÌ. äÌÑ ÐoÌyÞeÎÉÑ ÐoÄpoÂÎoÊ ÉÎÆopÍaÃÉÉ o ÆopÍaÔe ÉÎÄeËcÎÙx ÄecËpÉÐÔopo× ÆaÊÌo× É Éx ÆÌaÇax cÍoÔpÉ inode(F).
æáêìù
/usr/include/sys/filesys.h /usr/include/sys/stat.h
óí. ôáëöå
fseek(1), mkfs(1), inode(5)
|