برررسی ساختارهای مورد استفاده در فایل سیستم مجازی لینوکس
ترجمه از کتاب : Understanding the Linux kernel
بصير شريعت رضوي 810182201
محمد مقيمي نجف آبادي 810182235
فایل سیستم مجازی (Virtual File System)::
یکی از قابلیت های Linux که امکان برقراری ارتباط آن را با سیستم ها و قالب های دیگر فراهم میکند وجود فایل سیستم مجازی است (VFS) .
ایده سازنده VFS آنست که اشیای حاوی فایل ها و فایل سیستم ها در حافظه هسته (Kernel) طیف گسترده ای از اطلاعات را نگه میدارد . در VFS برای هر عمل یک تابع معادل آن وجود دارد که هسته آن را با تابع مناسب آن قالب جایگزین میکند .
نقش VFS :
VFS یک نرم افزار در لایه هسته است که تمامی فراخوان های سیستمی را پاسخ میدهد . قدرت اصلی آن در ایجاد یک رابط مناسب با فایل سیستم های مختلف است . VFS یک لایه انتزاعی میان برنامه های کاربردی و هسته است . برای مثال دستور زیر را بررسی میکنیم :
cp /floppy/test /tmp/test
فایل سیستم هایی که توسط VFS مورد استفاده و پشتیبانی قرار میگیرند در 3 دسته زیر تقسیم میشوند :
1- فایل سیستم های مبتنی بر دیسک .
2- فایل سیستم های شبکه .
3- فایل سیستم های خاص .
مدل معمول فایل :
یکی از ایده های سازنده VFS مدل معمول فایل است . برای مثال در مدل معمول فایل هر پوشه یک فایل است که لیستی از فایل ها و پوشه های دیگر را داراست .
یک نمونه از عملکرد VFS : VFS برای انجام عمل خواندن از شئ فایل به صورت زیر عمل میکند:
file à f_op à read(…);
مدل معمول فایل اشیای زیر را در خود دارد :
1- شئ SuperBlock:
اطلاعات مربوط به یک فایل سیستم mount شده را در خود نگه میدارد .
2- شئ inode :
اطلاعات کلی مربوط به یک فایل را ذخیره میکند .
3- شئ file :
اطلاعات مربوط به یک پروسه در حال اجرا و یک فایل باز شده توسط آن و تعاملات آنها را نگه میدارد .
4- شئ dentry :
اطلاعات مربوط یه یک پوشه و فایل متعلق به آن را نگهداری میکند .
شرح ساختمان داده های VFS:
هر شئ از اشیای چهارگانه VFS در یک ساختمان داده مناسب ذخیره میشود . این ساختمان داده ، داده های مربوط به آن شی و اشارهگر به توابع را دربر دارد .
شرح اشیای چهارگانه :
1- شئ SuperBlock :
تمام اشیای SuperBlock در یک لیست پیوندی دوطرفه نگهداری میشوند .آدرس نخستین و آخرین عنصر لیست در فیلدهای next و prev نگهداری میشوند .
فیلد u اطلاعات مربوط به یک فایل سیستم خاص که آن SuperBlock به آن تعلق دارد نگهداری میکند . برای نمونه اگر شی SuperBlock به یک فایل سیستم Ext2 اشاره بکند فیلد u یک ساختمان از نوع Ext2_sb_info را نگه میدارد .
یک مساله رایج در این میان عدم همخوانی اطلاعات شی SuperBlock و فضای متناظر با آن روی دیسک است به همین دلیل یک پرچم به نام s_dirt در نظر گرفته میشود که مشخص میکند که آیا اطلاعات روی دیسک به بازنویسی دارند .
آدرس توابعی که به SuperBlock متناظر شده اند در یک ساختمان از نوع super_operations به نام s_op نگهداری میشوند . هر فایل سیستم توابع SuperBlock خاص خود را دارد و این توابع به صورت زیر فراخوانی میشوند :
sb à s_op à read_ionde(inode);
شرح گذرای عملکرد توابعی که اعمال سطح بالا را پیاده سازی می کند در زیر میآید :
Read_inode(inode);
داده های شئ فرستاده شده را از روی دیسک پر میکند .
Write_inode(inode);
داده های فایل سیستم را از روی شی فرستاده شده بروز رسانی میکند .
Put_inode(inode);
شی فرستاده شده را آزاد میکند در حالت معمول آزاد کردن یک شئ مترادف آزاد کردن حافظه مربوط به آن نیست . چون ممکن است برنامه های دیگر در حال استفاده از آن باشند .
Delete_inode(inode);
فضای روی دیسک متناظر با شی فرستاده شده را آزاد میکند .
Notify_change(dentry,iattr);
بعضی از فیلد های indoe را بر اساس iattr عوض میکند .
Put_super(super);
شئ SuperBlock فرستاده شده را آزاد میکند .(Unmounting)
Write_super(super);
اطلاعات روی دیسک متناظر با SuperBlock داده شده را بروز رسانی میکند .
Statfs(super,buf , bufSize);
اطلاعات آماری فابل سیستم را در buf قرار میدهد .
Remount_fs(super ,flags , data);
فایل سیستم را مشخصه جدید مجددا mount میکند .
Clear_inode(inode);
مشابه put_inode عمل میکند ولی کلیه صفحات در بردارنده اطلاعات مربوط به فایل را آزاد میکند .
Umount_begin(super);
عمل mount را متوقف میکند .
اگرچه تمام توابع بالا برای تمام فایل سیستم ها موجود میباشد تنها بعضی از آنها برای هر فایل سیستم پیاده سازی شده اند و آنهایی که پیاده سازی نشده اند Null میباشند .
2- شئ Inode :
تمام اطلاعاتی که فایل سیستم برای کار با یک فایل مورد نیاز است در یک ساختمان که inode نام دارد ، ذخیره میشوند. نام فایل یک برچسب است که به یک فایل نسبت داده میشود که ممکن است تغییر کند .. درحالی که inode برای یک فایل یکتاست و تا زمانی که فایل وجود دارد ثابت میماند . یک شئ inode که در حافظه قرار دارد یک ساختمان است
فیلد u برای نگهداری داده های مربوط به inode فایل سیستم های خاص مورد استفاده قرار میگیرد. هر شئ inode