File System مجموعه قوانین و الگوهایی است که با استفاده از آنها میتوانیم فایلهای مورد نیاز خود را ذخیره و طبقهبندی کنیم (همانطور که در تصویر فوق مشخص است، یک فایل سنتی داریم که برای ذخیرهسازی پوشهها مورد استفاده قرار میگیرد؛ اما در عین حال امروزه اکثر دادهها در فایل سیستم بر روی هارددیسکها ذخیره میشوند.) از این روی، درک ساختار و نحوۀ کار فایل سیستم موجب تسهیل فرآیند مواجهۀ با مشکلات عجیبوغریب مربوط به دیتا نظیر ناسازگاری نوع دیتای ذخیرهشده، بازیابی و یا اِعمال تغییرات در آنها میشود و از همین روی، در ادامه قصد داریم تا برخی از مفاهیم اصلی فایل سیستم را مورد بررسی قرار میدهیم.
فایل چیست؟
File مجموعهای از آدرسهای منطقی مختلف است بدین معنی که هر فایل به نوعی متشکل از یکسری آدرس است که در هر یک از آنها بخشی از دیتای خاصی ذخیره شده و مجموعهٔ این دادهها یک فایل را تشکیل میدهند که برای درک بهتر این موضوع، بایستی تفاوت بین آدرسهای منطقی و فیزیکی را دریابیم.
Logical addresse (آدرس منطقی) چیزی است که توسط سیپییو تولید میشود و تحت عنوان Virtual Addresse (آدرس مجازی) نیز شناخته میشود اما این در حالی است که Physical Address (آدرس فیزیکی) به یک سلول خاص از حافظهٔ اصلی سیستم، یا به عبارتی رَم، اشاره دارد.
هر یک از فایلها میتوانند فرمتهای متفاوتی داشته باشند که از آن جمله میتوان فایلی با قابلیت اجرا، فایل متنی و غیره را نام برد و همانطور که پیشتر بیان کردیم، تمام محتوای فایلها در یکسری آدرس ذخیره میشوند و دیتای ذخیرهشده نیز از نوع عدد، کاراکتر یا به صورت محتوای باینری (صفر و یک) میتواند باشد؛ علاوه بر موارد مذکور، هر یک از این فایلها یکسری اَتربیوت یا ویژگی مانند تاریخ ایجاد، نام یا محل ذخیره و غیره را شامل میشوند.
مدیریت فایلهای باز یا به عبارت دیگر فایلهایی که اصطلاحاً قابلیت Read دارند، در سیستمعامل با سازوکار خاصی انجام میشود به طوری که جدولی تحت عنوان Open-File، لیستی از آدرس فایلهایی با قابلیت Read را نگاهداری میکند که علاوه بر آدرس فایلها، یکسری اطلاعات دیگر در مورد هر فایل در این جدول ذخیره میشود که در ادامه هر یک از آنها را بیان میکنیم:
- تعداد دفعاتی که فایل مد نظر توسط کاربری خوانده شده یا مورد استفاده قرار گرفته
- آخرین موقعیت فایلهای خواندهشده
- آدرس فایل روی هارددیسک
- قوانین دسترسی به یک فایل خاص
همچنین در برخی موارد نیاز است تا دسترسی به برخی فایلها را محدود کنیم به ویژه هنگامی که کاربر دیگری قصد به اصطلاح Write کردن روی آن را فایل داشته باشد. برای مثال، در سیستمعامل یونیکس و دیگر سیستمعاملهای مبتنی بر آن همچون گنو/لینوکس، استفاده از چنین جدولی موجب جلوگیری از وقوع مسائلی همچون Race Condition میشود (Race Condition اساساً زمانی به وجود میآید که نحوۀ کارکرد درست یک اپلیکیشن به اجرای ترتیبی از فرآیندها یا تِرِدها بستگی داشته باشد به طوری که اگر اپلیکیشن مدنظر وارد یک فاز رقابتی شود، چنین شرایطی منجر به اجرای نادرست اپلیکیشن و در نهایت ایجاد باگ در آن شده که این مسئله ارتباط مستقیمی با اجرای فرآیندها یا تِرِدها با امکان دسترسی به یکسری منابع مشترک در سیستم بستگی دارد که از همین روی و برای اجتناب از چنین شرایطی، بایستی از ابزارهایی استفاده کرد تا عملیات سیستم بهگونهای هندل شوند تا در یک زمان خاص فقط یکی از پروسسها به منابع مشترک دسترسی داشته باشند.)
دایرکتوری چیست؟
Directory به طور خلاصه به مجموعهای از فایلها گفته میشود. به عبارت دیگر، دایرکتوری ساختاری است که مجموعهای از اصطلاحاً File Object و اطلاعات مربوط به هر یک از فایلها را شامل میشود (این فایل آبجکتها معمولاً به طیفی از آدرسها اشاره دارند که مرتبط با بخشهای مختلف یک فایلی هستند روی حافظه ذخیره شده است.) بنابراین میتوان گفت که ساختار دایرکتوری به صورت یک ساختار سلسله مراتبی است که یکسری زیرشاخه را شامل میشود.
دیسک چیست؟
Disk برای ذخیرهسازی فایل سیستمها مورد استفاده قرار میگیرد و انواع مختلفی دارد که از آن جمله میتوان به Solid State Drive یا به اختصار SSD و Hard Disk Drive یا به اختصار HDD اشاره کرد. همچنین هر دیسک قابلیت تقسیم به بخشهای مختلف را دارا است و هر قسمت اصطلاحاً Partition نامیده میشود و حجمی از پارتیشنهای دیسک که در دسترس بوده و قابلیت ذخیرهسازی دیتا را دارند، اصطلاحاً Volume نام دارد؛ به بیان دیگر، Volume معمولاً ناحیۀ در دسترس از یک پارتیشن دیسک برای ذخیرهسازی دیتا است.
ایجاد، حذف، تغییر نام فایلها، ایجاد فهرستی از محتویات دایرکتوری و غیره جزو عملیات رایج در فایل سیستم است (حتی برخی سیستمها وجود دارند که یکسری عملیات کاستومایزشده به منظور رفع نیاز کاربران را ارائه میدهند.) در ارتباط با فایل سیستم و همچنین به منظور کسب اطلاعات بیشتر، توصیه میکنیم به مقالات مرتبط زیر مراجعه نمایید:
- چرا لینوکس نیازی به Defragmentation ندارد؟
- EXT2/3/4 ،XFS ،Btrfs یا ZFS: معرفی فایل سیستمهای مطرح لینوکس
- آشنایی با تفاوت میان فایل سیستمهای NTFS ،FAT32 و exFAT
نتیجهگیری
ساختار یک فایل سیستم ممکن است بسیار پیچیده باشد و مسلماً بررسی تفاوت معماری فایل سیستمها و تکنیکهای بهبود عملکرد آنها موضوع گستردهای است که بخشهایی از آن در مقالات فوق پوشش داده شده است. بنابراین تعیین فایل سیستم مناسب برای یک سیستمعامل نیازمند آنالیز بنچمارکهای زیاد به منظور آشنایی با سرعت و میزان اصطلاحاً Trade Off آنها است.