Virtual File System(مخفف VFS) یک ساب سیستم مهم در Kernel لینوکس هست که لایه بین filesystem و برنامه های user-space رو تشکیل میده. و درواقع همه filesystem ها، با تکیه بر VFS می تونن شناسایی بشن و تبادل اطلاعات کنن... همین مسئله، برنامه های user-space رو قادر کرده تا توسط دستورات موجود در VFS برای خواندن و نوشتن در filesystem های گوناگون اقدام کنن:
![[تصویر: vfs.gif]](http://bayanbox.ir/view/2594336172025076206/vfs.gif)
نکته: در حالت معمول، زمانی که سیستم در حال بوت شدن هست، بیشتر filesystem ها init میشن و خودشون رو توسط VFS ثبت می کنن. بعضی از این filesystem ها بصورت built-in در داخل Kernel تعبیه شدن و بعضی دیگر بصورت Loadable Kernel Module... البته این filesystem های LKM فقط زمانی Load میشن که سیستم بهشون نیاز داشته باشن... مثلا وقتی که دیسک FAT به داخل دستگاه میره و mount میشه.
امروزه به لطف VFS،اfilesystem های جدید و device های مختلف براحتی می تونن راهشونو در لینوکس پیدا کنن; و برنامه ها هم نیازی به نوشته و کامپایل شدن مجدد ندارن... به این صورت که طرف Abstraction layer در VFS، توسط تعریف اینترفیس های اولیه و ساختمانهای داده ای کار می کنه که همه filesystem ها و برنامه ها ازش پیروی می کنن و طرف filesystem هم توسط تعریف رفتار و عملکرد استانداردش، با Abstraction layer در VFS ارتباط برقرار میکنه.
بنابراین از اونجایی که همه filesystem ها قادرن با فایل و دایرکتوری کار کنن، عملیات حذف، ساخت و جابه جایی انجام بدن و حتی خروجی و ورودیشون رو با VFS منطبق بدن، میشه گفت همه filesystem های disk-based یکی هستن!
نکته: در Kernel هیچ چیزی نیازی نداره تا از زیر و بم filesystem ها مطلع باشه، بغیر از VFS و خود filesystem.
مثال C استاندارد:
کد:
write(int fileHandler, void *buff, int len)
![[تصویر: c-write.png]](http://bayanbox.ir/view/6155548104017027773/c-write.png)
کد:
Robert Love: People often miss this, or even deny it, but there are many examples of object-oriented programming in the Kernel. Although the Kernel 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.
در انتها لازمه بگم دو ساختمان استاندارد دیگری هم وجود دارن که Kernel از اونها برای مدیریت داده های مربوط به filesystem ها استفاده میکنه... ولی خارج از بحث VFS هستن پس ما کاری باهاشون نداریم.
مراجع:
https://kernel.org/doc/Documentation/
http://tldp.org/LDP/tlk/tlk-toc.html
Linux Kernel Development
http://lxr.free-electrons.com/source/Doc...ms/vfs.txt
دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم: آنکس که تخصص ندارد و کاری را می پذیرد، بی تقواست.
برچسب: مقدمه ای بر مهندسی پزشکی,مقدمه ای برای کارورزی,مقدمه ای برای انشا,مقدمه ای بر نظریه های یادگیری,مقدمه ای برای کارورزی 2,مقدمه ای برای پروژه امار,مقدمه ای بر جهان بینی اسلامی,مقدمه ای بر استانداردهای حسابداری,مقدمه ای بر , اسلامی,مقدمه ای برجهان بینی اسلامی (2),
نویسنده: استخدام کار