مقدمه ای بر Virtual File System لینوکس

خرید بک لینک
Virtual Filesystem یا سیستم فایل مجازی(لایه ای)

Virtual File System(مخفف VFS) یک ساب سیستم مهم در Keel لینوکس هست که لایه بین filesystem و برنامه های user-space رو تشکیل میده. و درواقع همه filesystem ها، با تکیه بر VFS می تونن شناسایی بشن و تبادل اطلاعات کنن... همین مسئله، برنامه های user-space رو قادر کرده تا توسط دستورات موجود در VFS برای خواندن و نوشتن در filesystem های گوناگون اقدام کنن:

[تصویر: vfs.gif]

نکته: در اینجا منظور از لایه همون Abstraction layer هستش و منظور از دستورات همون System call ها.
VFS، درواقع اسباب استفاده از System call هایی مثل open(), read(), write(), move() شده، علیرغم نوع filesystem و زیر و بم فیزیکیشون...
شاید این مسئله در این روزها شاهکار نباشه اما در دنیای System call ها، ارتباط برقرار کردن با تعداد بیشماری filesystem و device های متنوع چیز کمی نیست! اینکه می تونید براحتی از یک filesystem به filesystem دیگر، از یک device به device دیگر اطلاعات جابه جا کنید و عملیات انجام بدید خودش کلیه! برای نمونه، در سیستم عامل های قدیمی مثل DOS همچین چیزی امکان نداشت; برای انجام هر نوع عملیات در یک filesystem غیر بومی(از FAT8 به Minix ,Ext) لازم بود تا از ابزارهای خاصی استفاده بشه تا کار انجام بشه...

نکته: در حالت معمول، زمانی که سیستم در حال بوت شدن هست، بیشتر filesystem ها init میشن و خودشون رو توسط VFS ثبت می کنن. بعضی از این filesystem ها بصورت built-in در داخل Keel تعبیه شدن و بعضی دیگر بصورت Loadable Keel Module... البته این filesystem های LKM فقط زمانی Load میشن که سیستم بهشون نیاز داشته باشن... مثلا وقتی که دیسک FAT به داخل دستگاه میره و mount میشه.

امروزه به لطف VFS،اfilesystem های جدید و device های مختلف براحتی می تونن راهشونو در لینوکس پیدا کنن; و برنامه ها هم نیازی به نوشته و کامپایل شدن مجدد ندارن... به این صورت که طرف Abstraction layer در VFS، توسط تعریف اینترفیس های اولیه و ساختمانهای داده ای کار می کنه که همه filesystem ها و برنامه ها ازش پیروی می کنن و طرف filesystem هم توسط تعریف رفتار و عملکرد استانداردش، با Abstraction layer در VFS ارتباط برقرار میکنه.
بنابراین از اونجایی که همه filesystem ها قادرن با فایل و دایرکتوری کار کنن، عملیات حذف، ساخت و جابه جایی انجام بدن و حتی خروجی و ورودیشون رو با VFS منطبق بدن، میشه گفت همه filesystem های disk-based یکی هستن!

نکته: در Keel هیچ چیزی نیازی نداره تا از زیر و بم filesystem ها مطلع باشه، بغیر از VFS و خود filesystem.
مثال C استاندارد:

کد:

write(int fileHandler, void *buff, int len)

این دستور user-space، داده موجود در buff رو با طول len بایت در فایل fileHandler می نویسه... به این صورت که ابتدا از برنامه به دستور write()، بعد به System call هه sys_write() در VFS، بعد به متد نوشتن در filesystem هدایت میشه و نهایتاً دیتا در دیسک سخت ذخیره میشه:
[تصویر: c-write.png]

VFS شی گرایی هستش!
البته نه اون شی گرایی مثل کلاس، آبجکت و غیره در Java و ++C، بلکه منظور ساختمان داده و شبیه سازی الگوهاست:

کد:

Robert Love: People often miss this, or even deny it, but there are many examples of object-oriented programming in the Keel. Although the Keel developers may shun C++ and other explicitly object-oriented languages, thinking in terms of objects is often useful. The VFS is a good example of how to do clean and efficient OOP in C, which is a language that lacks any OOP constructs.

(یادمه وقتی صحبت از ساختار و لایه های Keel لینوکس می شد، من از الگوهای استفاده شده و شبیه سازی شی گرایی درش صحبت میکردم(دست و پا شکسته)، اما حرف یه عده برنامه نویس که فقط تعدادشون از من بیشتر بود به کرسی مینشست و مایه خجالتم میشد -.- )
این اشیای VFS، درواقع همون ساختمان های داده هستن، لیکن شامل داده و اشاره گرهایی هستند که به توابع داخلی filesystem اشاره دارن که بر روی داده ها عملیات انجام میدن.
از جمله مهمترین این ساختمان های VFS میشه:
1- ساختمان داده superblock - مربوط به یک filesystem ای که mount شده
2- ساختمان داده iNode - مربوط به اطلاعات پایه ای فایل و دایرکتوری (مالکیت، شیوه دسترسی، نوع...)
3- ساختمان داده dentry - مربوط به directory (دایرکتوری ها در واقع پوشه نیستند، نوعی فایل هستند و با Folder در ویندوز هم متفاوتند)
4- ساختمان داده file - مربوط به File
رو نام برد.
حال هر یک از این ساختمان های داده(parent)، ساختمان عملیاتی(child) مربوط به خودشون رو دارن:
1- ساختمان super_operations - حاوی متدهایی که Keel میتونه روی یک filesystem خاص کار کنه. (مثل write_inode, sync_fs...)
2- ساختمان inode_operations - حاوی متدهایی که Keel میتونه روی یک فایل بسته کار کنه. (مثل create, link...)
3- ساختمان dentry_operations - حاوی متدهایی که Keel میتونه روی یک دایرکتوری خاص کار کنه. (مثل d_compare, d_delete...)
4- و ساختمان inode_operations - که حاوی متدهایی هستن که Process میتونه روی یک فایل باز کار کنه. (مثل read, write...)

در انتها لازمه بگم دو ساختمان استاندارد دیگری هم وجود دارن که Keel از اونها برای مدیریت داده های مربوط به filesystem ها استفاده میکنه... ولی خارج از بحث VFS هستن پس ما کاری باهاشون نداریم.

مراجع:
https://keel.org/doc/Documentation/
http://tldp.org/LDP/tlk/tlk-toc.html
Linux Keel Development
http://lxr.free-electrons.com/source/Doc...ms/vfs.txt

دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم: آنکس که تخصص ندارد و کاری را می پذیرد، بی تقواست.

php مرکز کد های سایت...

ما را در سایت php مرکز کد های سایت دنبال می‌کنید

برچسب: مقدمه ای بر مهندسی پزشکی,مقدمه ای برای کارورزی,مقدمه ای برای انشا,مقدمه ای بر نظریه های یادگیری,مقدمه ای برای کارورزی 2,مقدمه ای برای پروژه امار,مقدمه ای بر جهان بینی اسلامی,مقدمه ای بر استانداردهای حسابداری,مقدمه ای بر , اسلامی,مقدمه ای برجهان بینی اسلامی (2), نویسنده: استخدام کار بازدید: 138 تاريخ: شنبه 23 مرداد 1395 ساعت: 20:06

صفحه بندی