سيستم فايل (File System) يا فايل سيستم الگويي است که براي ذخيره، بازيابي و سازماندهي فايلها و دادهها بر روي حافظهها مورد استفاده قرار ميگيرد. ميدانيم که مجموعهاي از دادهها يک فايل را بوجود ميآورند. فايل چيزي است که توسط سيستم فايل ايجاد ميشود؛ يعني دادههاي مشخص توسط سيستم فايل به بخش يا بخشهاي مجزايي تبديل ميشوند که اين بخشها درواقع همان فايلهايي هستند که ما ميشناسيم. تمامي الگويي که براي اين سازماندهي مورد استفاده قرار ميگيرد سيستم فايل ناميده ميشود.
چرا وجود يک سيستم فايل ضروري است؟
تصاوير، ويدئوها، اسناد و درکل تمامي فايلهايي که بر روي حافظه کامپيوتر خود داريد توسط يک فايل سيستم اداره ميشوند. براي اين که به اهميت وجود يک فايل سيستم در فرايند ابتدايي ذخيره سازي و بازيابي پي ببريد دو حالت زير را در نظر بگيريد. به علاوه سه فايل با نام و محتواي زير داريم:
| نام فایل | محتوای فایل |
| Text1 | VsyB2GI |
| Text2 | s2U11u7 |
| Text3 | ay53e8yH |
ذخيره و بازيابي بدون فايل سيستم
بدون يک سيستم فايل، دادهها فقط بر روي حافظه ذخيره ميشوند. در اين حالت چيزي به نام فايل وجود نخواهد داشت چون تمامي دادهها به صورت پشت سرهم قرار خواهند گرفت که هيچ اطلاعاتي از بيت شروعي يا بيت پاياني فايل وجود نخواهد داشت؛ يعني يکي از اصول پايهاي بازيابي فايل در دست نخواهد بود. براي مثال فرض کنيد همان کتاب دارمان فقط صفحات را درون قفسه نگه داري ميکند درحالي که هيچ نشانهاي وجود نخواهد داشت که اولين و آخرين صفحه کتاب در کجا قرار دارند.
براي درک بهتر فرض کنيد سه فايل بالا را ذخيره ميکنيم. به ياد داشته باشيد که در اين فرايند از هيچ سيستم فايلي استفاده نشده است؛ بنابراين ابتدا و انتهاي فايلها مشخص نميشوند:

همانطور که ميبينيد دادههاي ما به خوبي بر روي حافظه ذخيره شده اند. حال اگر بخواهيد فايل Text2 را بازيابي کنيم چه؟ درحالي که از محل قرارگيري اولين داده اين فايل (يعني عدد 7، در مکان شماره 8) و آخرين آن (يعني حرف u کوچک، در مکان شماره 14) يا طول دادهها (7 کاراکتر) اطلاعي نداريم، غير ممکن است که بتوانيم فايل مورد نظر را به درستي بازيابي کنيم؛ بنابراين حتي اسم فايلها نيز مشخص نخواهند بود.
ذخيره و بازيابي توسط فايل سيستم
حال فرض کنيد که همان فايلها را با استفاده از يک فايل سيستم ذخيره ميکنيم؛ بنابراين ابتدا و انتهاي فايل مشخص شده است. (البته درصورت ناپيوسته بودن دادههاي فايل مکان دادههاي جدا نيز مشخص ميشود.)

همانطور که ميبينيد دادههاي ما به خوبي بر روي حافظه ذخيره شده اند و با توجه به مشخص بودم محل ابتدا، انتها و طول مجموعه دادهها، فايلها به صورت کامل و صحيح در دسترسي خواهند بود. به همين دليل متاديتاي فايل در دسترس بوده و نام و کليه خصوصيات آن نيز قابل مشاهده خواهند بود. براي مثال در فايل Text2 به توجه به مشخص بودن ابتدا (مکان شماره 8) و طول آن (7 کاراکتر)، محتواي آن به درستي بازيابي خواهد شد؛ يعني عبارت “7” s2U11u را خواهيم داشت.
مديريت حافظه در سيستم فايل:
يکي از وظايف اصلي سيستم فايل يا فايل سيستم مديريت و سازماندهي فضا (Space Management) و حافظه ذخيره سازي است. براي عملکرد بهينه تر (از نظر سرعت و کارايي)، دادههاي مربوط به هر فايل در سيستم فايلها در بلوکهاي (Clusters) اختصاص داده شده با اندازههاي معين (Allocation Size) که سکتورهاي فيزيک را شامل ميشوند، ذخيره ميشوند. اين بلوکها هنگام ساخته شدن سيستم فايل (وقتي که حافظهاي را فرمت ميکنيم) پاک شده، سپس طبق اندازه تعيين شده ساخته ميشوند. براي مثال ما حافظهاي با حجم 6144 بايت داريم که ميخواهيم بلوکهاي 2048 بايتي بسازيم بنابراين 3 بلوک خالي خواهيم داشت که تمامي حجم حافظه را شامل ميشوند:

هنگام ذخيره سازي، ممکن است سايز فايل مورد نظر از اندازه بلوک کمتر باشد (براي مثال فايل Picture.jpg با حجم 1200 بايت)، در اين حالت به صورت انفرادي در بلوک اختصاصي خود ذخيره ميشود و در همان بلوک 848 بايت فضاي غيرقابل استفاده باقي خواهد ماند:

اما درصورتي که بيشتر يا برابر اندازه بلوکها باشند (براي مثال فايل Doc.txt با حجم 3000 بايت)، به قسمتهاي مختلف، دقيقاً به اندازه بلوکها، تقسيم شده و در آن ذخيره ميشوند؛ يعني يک بلوک کامل و يک بلوک شامل 952 بايت که 1096 بايت آن غيرقابل استفاده خواهد شد:

فضاهاي خالي درون بلوکهايي که به صورت کامل خالي نيستند، غيرقابل استفاده است. يعني آن بلوک فرقي با يک بلوک کاملاً پرشده ندارد و همان حجم (2048 بايت) را از حافظه خواهد گرفت. براي مثال درصورتي که هر دو فايل بالا (فايل Picture.jpg با حجم 1200 بايت و فايل Doc.txt با حجم 3000 بايت) را بر روي حافظه ذخيره کنيم وضعيت بلوکها به اين ترتيب خواهد بود:

با اين حال حجم ظرفيت کامل اين حافظه 6144 بايتي کامل شده درحالي که فقط 4200 بايت آن را استفاده کرده ايم و 1944 بايت آن به صورت غيرقابل استفاده درآمده است. بر روي سيستم عامل ويندوز، 6144 سايز روي ديسک (Size on disk) و 4200 سايز (Size) نام گذاري شده است.
براي درک بهتر Allocation size، فرض کنيد شما يک کاميون باري (همان حافظه مورد نظر) داريد که محل نگه داري بار (ظرفيت حافظه) آن به صورت ثابت، 32 مترمربع است. شما اجازه داريد تا بارتان (فايلها) را با جعبههايي (بلوکها) با اندازههايي (Allocation size) که به صورت کامل محل بار را پوشش دهد، حمل کنيد. درحالي که بار شما انواع مايعات (فايلهاي مختلف) است، فقط ميتوانيد در يک جعبه يک نوع مايع را بريزيد که ممکن است يکي تا نصف پر شود و يک مايع ديگر يک جعبه و نيم نياز داشته باشد.
به اين ترتيب بايد در انتخاب اندازه بلوکها (Allocation unit size يا Cluster Size) در حافظه مورد نظرتان دقت کنيد تا فضاي حافظه بيهوده تلف نشود. براي فايلهاي بزرگ اندازههاي بيشتر و براي فايلهاي کوچگ اندازههاي کوچکتري در نظر بگيريد. شايد به نظر بيايد که هرچه اندازه اين بلوکها کوچک تر باشند، فضاي بهينه تري براي ذخيره سازي در اختيار داريد. اين حرف درست است اما انتخاب اندازه کوچک ميتواند مشکلاتي از جمله سرريزي Overhead را همراه داشته باشد که در اين صورت نگه داشتن فايلها ريسک بالايي است.
براي نشان دادن اهميت Allocation unit size، آزمايشي انجام داديم که در آن 10000 فايل 1024 بايتي ساخته و درون يک حافظه 8 گيگابايتي با اندازه بلوکها 64 کيلوبايتي توسط فايل سيستم FAT32 ذخيره کرديم:

با توجه به اين که در هر بلوک فقط يک کيلوبايت ذخيره ميشود درحالي که ظرفيت هر يک از آنها 64 کيلوبايت است، در نتيجه از هر بلوک 63 کيلوبايت غيرقابل استفاده باقي ميماند. که در مجموع بيش از 615 مگابايت فضاي غيرقابل استفاده و درواقع “پوچ” بر روي حافظه ذخيره ميشود. درحالي که حجم کل فايلها فقط حدود 10 مگابايت است. يعني حدود 1.5% حجم کل ذخيره شده!

مديريت فضاهاي ناپيوسته در سيستم فايل:
دادههاي مربوط به يک فايل يا فضاهاي خالي روي حافظه ممکن است به صورت پيوسته در کنار يکديگر قرار نداشته باشند در اين صورت نحوه قرارگيري آنها بر روي حافظه، ناپيوسته (Fragment) باشد. اين گونه قرارگيري در حافظههاي الکتريکي مانند SSDهاممکن است مشکل چنداني بوجود نياورد اما بر روي حافظههاي مکانيکي مانند هارد ديسکها، سرعت خواندن و نوشتن را به صورت قابل توجهي پايين ميآورد. دليل آن هم اين است که مثلاً در هارد ديسکها، قسمت بازوي مکانيکي هارد بايد Head را به قسمتهاي مختلف Platter هدايت کند و در نتيجه زمان بيشتري لازم است تا يک فايل به صورت کامل خوانده يا نوشته شود.
به همين دليل فايل سيستمها قابليت پيوسته کردن فايلها و فضاهاي خالي را دارند که به اين عمل Defragment (ديفراگمنت) گفته ميشود که سکتورهاي فايل را به صورت ترتيبي مرتب کرده يا فضاهاي خالي را پشت سر هم قرار ميدهد.. ناپيوسته شدن فايلها يا فضاهاي خالي ممکن است به دلايلي مانند حذف شدن، گسترده يا فشرده شدن، اضافه شدن فايل و … انجام گيرد.
خصوصيات مهم فايل سيستم:
سيستم فايل براي شناسايي آسان تر فايل و خصوصيات و ويژگيهاي آن امکاناتي را در اختيار ميگذارد که از مهمترين آنها عبارت اند از:
Filename :به زبان ساده، نام و مسير فايل. طول رشتههاي مربوط به نام و پسوند در فايل سيستمهاي گوناگون داراي محدوديتهاي مختلفي هستند.
Directory :به زبان ساده، پوشههايي که همگي با آنها آشنا هستيم. فايل سيستمها معمولاً براي دسته بندي فايلها داراي پوشه هستند. به اين ترتيب امکان گروهي کردن فايلها را به کاربران ميدهند.
Metadata:
سيستم فايلها امکان دسترسي به ساير ويژگيها فايل مانند حجم، زمان ايجاد و تغيير و … را توسط Metadataهاي فايل به سيستم عامل و کاربران ميدهند.
در تصوير زير که توسط نرم افزار متن باز WinDirStat تهيه شده است، به صورت مجازي نحوه آرايش فايلها و فولدرها (خطوط مستطيلي) را ميتوانيد ببينيد:


