Btrfs فایل سیستم
Btrfs با تلفظ ها مختلف Butter F S، Better F S یا B-tree F S یک فایل سیستم copy-on-write تحت GPL برای لینوکس میباشد. copy-on-write در واقع یک روشی برای بهبود بخشی است که در برنامه نویسی های کامپیوتر مورد استفاده قرار میگیره.
Btrfs به منظور آدرس دهی کمبود ادغام ، snapshot ها ، قسمت های کنترلی و پوشش صحیح muli-deviceها در فایل سیستم لینوکس ایجاد شده اند. این قابلیت ها نقش تعیین کننده ای بازی میکنند مثل استفاده در ارتقای مقیاس های لینوکس برای پیاده سازی storageهای بزرگتر که معمولا در Enterpriseها مورد استفاده قرار میگیرد. Enterprise-storageها برای استفاده از مقیاس های بزرگ و تکنولوژی های پیشرفته طراحی شده اند.
Chris Mason نویسنده اصلی Btrfs گفته که هدف این فایل سیستم اجازه دادن به مقیاس لینوکس یا همون Linux Scale برای استفاده از فضای حافظه ای موجود خواهد بود، مقیاس بندی تنها مرتبط به آدرس دهی نمیباشد بلکه به معنی توانایی در اداره کردن و مدیریت آن با یک interface تمیز و رله که به ملت اجازه دیدن چیزهای مورد استفاده رو بده هستش و آن را قابل اعتماد میکند.
چندین دیسترو لینوکس Btrfs رو به عنوان یک انتخاب آزمایشی برای فایل سیستم root پیشنهاد میکنند. دیسروهایی مثل Arch، openSUSE 11.3، SLE11 SP1، Ubuntu 10.10، Sabayon Linux، Redhat Enterprise Linux 6، Fedora 15، Meego، Debian و Slackware 13.37. که البته Fedora نیز اشاره کرده که در نسخه ۱۷ ممکنه این فایل سیستم به صورت دیفالت روی آن قرار بگیره.
در سال ۲۰۰۸ Theodore Ts’o نویسنده اصلی فایل سیستم های ext3 و ext4، گفته که Btrfs راه بعدی برای ext4 میباشد. با داشتن تعداد زیادی طرح با ایده های مشابه که reiser3/4 داشت.
قابلیت ها:
دیفراگ به صورت آنلاین
اضافه کردن حجم و shrink کردن از volumeها به صورت آنلاین
متوازن سازی آنلاین (حرکت objectها بین block deviceها برای توازن load به صوزت آنلاین)
levelهای فایل سیستم (RAID1-like) برای mirroring و (RAID0-like) برای Sprinting
volumeهای فرعی (یک یا چند فایل سیستم جداگانه قابل مونت شدن root در هر پارتیشن فیزیکی)
فشرده سازی شفاف (در حال حاضر Zlib و LZO)
شبیه سازی فایلها (copy-on-write روی فایل های شخصی و یا byte-storage آنها)
کنترل روی data و metadata
تبدیل در محل یا in-place conversion
seeding فایل سیستم
transaction های قابل تعریف توسط کاربر
بلاک کردن پشتیبانی های پایان یافته
قابلیت های برنامه ریزی شده:
levelهای آبجکت RAID0، RAID1 و RAID10 و همچنین RAID برپایه توازن (RAID5 و RAID6)
چک کردن آنلاین و آفلاین سیستم
Incremental Dump (اینو خودمم نفهمیدم :دی)
توانایی در هندل کردن فایلها و پارتیشن های swap
جلوگیری از نوشته شدن تکراری dataها
پی نوشت : در مجموع فایل سیستم گولاخی به نظر میرسه که با توجه به کارایی هاش خوراک سرور های کوچیک و بزرگ هستش و خیلی هم انعطاف پذیره جایگزین خوبی برای فایل سیستم های دیگه میتونه باشه و با کرنل های hybrid هم هماهنگی بسیار خوبی داره.
ردیابی ماهواره ها
طی وب گردی هایی که داشتم با یه برنامه گولاخ مواجه شدم که خیلی باهاش حال کردم اسمش Gpredict یا Gnome Predict هستش یه برنامه برای ردیابی زنده ماهواره ها روی گنوم که بر پایه موتور ردیابی پیشبینی کننده موقعیت ماهواره ای John Magliacane کار میکنه. محیط برنامه برای گنوم طراحی شده و تو KDE این شکلیه.
قابلیت ها:
ردیابی تعداد نامحدودی ماهواره فقط محدود به حافظه فیزیکی و قدرت پردازش کامپیوتر
نشان دادن لیست داده های ردیابی شده، نقشه ها، قطب نما و هر ترکیبی از اینها
شما میتونید توسط این برنامه تعدادی ماژول رو در هر notebook یا در پنجره مخصوص به خود باز کنید و همچنین ماژولها میتوانند به صورت full-screenنمایش داده شوند.
میتونید از تعداد زیادی ground station استفاده کنید مختصات هر ground station میتواند به صورت دستی داده شود و یا میتونید که به صورت تقریبی آنها را از لیستی با 2000 آیتم انتخاب کنید.
میتوانید موقعیت آینده ماهواره ها رو پیش بینی کنید و بفهمید که از کجا عبور خواهند کرد و همچنین بین پنجره ها ارتباط برقرار کنید.
اطلاعات خیلی دقیق در مورد داده های کنونی و جاهایی که قرار ماهواره باشه.
Gpredict میتونه به صورت زنده یا real time، شبه زنده (با قابلیت عقب جلو کردن سریع) و کنترل زمان دستی اجرا بشه.
برنامه جالبی به نظرم اومد و دلم نیومد راجع بهش چیزی ننویسم امکانات جالبی هم داره و خود قابلیت اضافه کردن ماهواره های جدید هم باعث میشه خیلی جالب باشه. میتونید پکیج های این برنامه رو از اینجا دریافت کنید.
| Ubuntu | 32-bit | 64-bit |
| dapper | 0.5.1-2ubuntu1 | 0.5.1-2ubuntu1 |
| hardy | 0.9.0-0ubuntu1 | 0.9.0-0ubuntu1 |
| lucid | 1.1-5ubuntu1 | 1.1-5ubuntu1 |
| maverick | 1.1-7 | 1.1-7 |
| natty | 1.1-7 | 1.1-7 |
هسته سیستم عامل یا همون کرنل
مسلما بحث کرنل در یک پست نمیگنجه ولی کلیاتی از کرنل، انواع و نوع ساختارشون رو قرار تو این پست بشناسیم. در واقع کرنل بخش اصلي بيشتر سيستم هاي عامل برای كامپيوترها در محاسبات هستش، و پلي بين برنامه ها و پردازش واقعي داده ها در سطح سخت افزار میباشد، وظيفه كرنل شامل مديريت منابع سيستم (ارتباط بين قسمت هاي نرم افزاري و سخت افزاري) است.
معمولا به عنوان جزء اصلي يك سيستم عامل، يك كرنل مي تونه پايين ترين سطح دسترسي لايه هاي انتزاعي ( يا abstraction layers ) براي منابع ( مخصوصا CPU و I/O Device ها ) كه برنامه هاي نرم افزاري بايد كارايي انها را كنترل كنند مهيا كند. كرنل به طور معمول اين امكانات رو براي پردازش برنامه ها در حين مكانيزم ارتباطات ميان پردازشي (IPC) و همچنين فراخواني هاي سيستم به وجود مي اورد.
وظايف سيستم عاملها با كرنل هاي متفاوت به گونه هاي مختلف انجام مي شود. مثلا monolithic kernel ها همه كدهاي عملياتي رو براي بالا بردن performanceسيستم در يك address space اجرا ميكنند ولی micro kernel ها بيشتر سرويس هاي سيستم عامل رو در user space به عنوان server با هدف بهبود قابليت هاي نگه داشت (maintainability) و قابلیت ماژولار بودن (modularity) سيستم اجرا مي كنند.
اختیارات کرنل:
- اولویت بندی انتخاب برنامه ها برای پردازش و همچنین زمان دهی یا timing در CPU تحت نظر کرنل انجام میشه.
- حافظه برای نگهداری دستورالعمل های برنامه ها و همچنین داده های آنها مورد استفاده قرار میگیره و چون قراره برنامه های زیادی به حافظه دسترسی داشته باشن ممکنه مقدار حافظه موجود برای همه آنها کافی نباشه بنابراین کرنل تصمیم میگیره که کدوم پردازش از کدوم قسمت حافظه و به چه اندازه استفاده کنه و اگر حافظه به اندازه کافی موجود نبود چه کار هایی باید انجام بشه.
- و همچنین سیستم های ورودی و خروجی را نیز تحت اختیار داره که به همه این سه، منابع سیستم میگویند.
کرنل روش هایی برای همگاه سازی (همزمان سازی) و ارتباط بین پردازش ها مهیا میکنه که بهش IPC یا inter-process communication میگویند.
مدیریت پردازش:
برای اجرای برنامه، معمولا کرنل یک address space برای آن ایجاد میکنه و فایل های شامل کد های برنامه رو در حافظه بارگزاری میکنه (ممکنه با demand paging که یک برنامه حافظه مجازی میباشد انجام شود) و همچنین یک stack به منظور دادن موقعیت در داخل برنامه برای آن و شاخه هایش ایجاد میکند و در آخر هم اجرای برنامه آغاز میشه.
مقوله multi tasking :
کرنل های با قابلیت Multi-tasking میتونن باعث این بشن که کابر توهم بزنه و خیال کنه که تعداد پردازش های همزمانی که انجام میشه بیشتر از تعداد پردازش هایی هستش که در یک زمان CPU به صورت فیزیکی میتونه انجامش بده. در واقع تعداد پردازش های همزمانی که یک کامپیوتر قادر به انجامش هست با تعداد CPUهای نصب شده روی آن برابره.
در یک سیستم pre-emptive multitasking کرنل به هر برنامه کسری از زمان را تخصیص میده و بین آنها با سرعت زیاد سوییچ میکنه بطوری که از نظر کاربر اجرای آنها همزمان انجام میشود. کرنل از scheduling algorithms استفاده میکنه تا مشخص کنه که پردازش بعدی چی هست و زمان مورد نیاز برای آن چقدره.
در سیستم های دیگر (به ویژه کوچکتر و با قدرت کمتر) از co-operative multitasking استفاده میشه، که در آن یک برنامه بدون وقفه اجرا میشه تا زمانی که یک درخواست مهم از آن به کرنل داده بشه که باعث بشه به پردازش دیگری سوییچ کنه. درخواست هایی که با نام “yielding” شناخته میشوند و به طور معمول جواب به درخواست ها برای ارتباطات میان پردازشی و یا انتظار برای رخ دادن یک رویداد هستند. نسخه های قدیمی هر دو سیستم عامل Mac و Window از این روش استفاده میکردن ولی در حال حاضر به pre-emptive سوییچ کردند.
سیستم عامل ممکنه از multiprocessing (SMP یا Non-Uniform Memory Access) پشتیبانی کنه، در این صورت برنامه ها و ترد (thread) های مختلف ممکنه روی پردازنده های متفاوت اجرا شوند. کرنل برای اینگونه سیستم ها باید به صورت re-entrant طراحی بشه، این به این معنیه که ممکنه دوقسمت مختلف از کدهاش رو در یک زمان اجرا کنه. این در واقع مکانیزم همزمان سازی یا synchronization (مانند spinlocks) را به وجود می آورد که باعث میشود مطمئن باشیم که هیچ دو پردازشی روی دیتای یکسان انجام نمیپذیرد.
مدیریت حافظه:
کرنل به حافظه دسترسی کامل دارد و در صورت لزوم باید به پردازش ها اجازه دسترسی ایمن بده. در اغلب موارد اولین گام برای این کار virtual addressing هستش که معمولا با paging ویا segmentation انجام میشه. virtual addressing این اجازه رو به کرنل میده که آدرس های فیزیکی رو یه جورایی به آدرس های مجازی پورت کنه. فضاهای آدرس مجازی برای پردازش های مختلف ممکنه متفاوت باشه. حافظه خاصی (مجازی) که یک پردازش بهش دسترسی داره، ممکنه متفاوت از حافظه ای باشه که یک پردازش دیگه در همون زمان بهش دسترسی داره. این اجازه میده به برنامه که فکر کنه فقط خودشه و خودش و این باعث میشه برنامه ها با هم کرش نداشته باشند و از confilict بین آنها جلوگیری میشه.
در بیشتر سیستم ها آدرس مجازی ممکنه به داده ای اشاره کنه که هنوز در حافظه قرار نگرفته. لایه های غیرمستقیم ایجاد شده توسط آدرس دهی مجازی این اجازه رو به سیستم عامل میدن که از بقیه داده ها که در جا های دیگه ذخیزه شدن مثل hard drive، برای ذخیره آن چه میخواهیم اگرچه باید در حافطه (RAM) باقی بمونه استفاده کنه.
با این وجود سیستم عامل میتونه حافظه ای بیش از حافظه فیزیکی موجود داشته باشه، وقتی برنامه ای داده ای را که در حافظه نیست احتیاج دارد CPU سیگنالی رو مبنی بر این اتفاق به کرنل میفرستد، و کرنل بلوک غیرفعال رو در صورت نیاز روی دیسک مینویسد و داده های درخواست شده رو به حافظه منتقل میکند. و برنامه میتونه کار خودش رو از نقطه ای که متوقف شده ادامه بده و این رویداد معمولا با عنوان demand paging شناخته میشود.
خوب مباحث دیگه ای به اسم Device Mangement و System Calls هم هستند که در این پست نمیگنجه.
کرنل ها برحسب ساختار به دسته های زیر تقسیم میشوند:
کرنل های مونولتیک (monolithic):
در این کرنل ها همه سرویس های سیستم عامل در ادامه thread کرنل اصلی اجرا میشوند بنابر این در یک مکان از حافظه قرار دارند. این باعث میشه که قدرت زیادی در دسترسی به سخت افزار فراهم بشه. بعضی از توسعه دهندگان یونیکس مثل Ken Thompson گفتند که پیاده سازی کرنل های مونولتیک خیلی ساده تر از کرنل های میکرو میباشد. معایب اصلی این کرنل این است که یک باگ در درایور سخت افزار میتونه باعث کرش کل سیستم شود و پشتیبانی از درایور های بزرگ بسیار سخته. کرنل لینوکس در حال حاضر از این ساختار تبعیت میکند. خیلی هم شیک و مجلسی هستش.
کرنل های میکرو (micro kernels):
در این کرنل ها درایور ها به صورت server در userspace قرار میگیرند و در حین اجرا ارتباطات میان پردازشی باید صورت بگیرد از مزایای آن سرعت بالای و قابلیت نگهداشت بالا اشاره کرد که در مقایسه با مونولتیک ها از مزایای خیلی زیاد بهره مند هست. در این کرنل ها تعداد زیاد فراخوانی ها باعث پایین آمدن سرعت خواهد شد به علت IPC یا همون ارتباطات میان پردازشی. GNU/Hurd از این ساختار استفاده میکند. با استفاده از این کرنل ها میتوان به صورت پویا یا همون dynamic خودمون بین سیستم های عامل مختلف سویچ کرد و میتوان بیش از یک سیستم عامل را همزمان تحت اختیار داشت.
کرنل های هیبرید(hybrid kernels) :
این نوع کرنل ها ساختاری بین میکرو و مونولتیک دارند، در نتیجه یک سری از سرویس ها (مثل network stack ویا filesystem) رو برای کاهش کم شدن performance سیستم در kernel space اجرا میکنند. ولی همچنان کد های کرنل را به عنوان سرور در user space اجرا میکنند. ویندوز و مک از این ساختار استفاده میکنند.
کرنل های نانو (nano kernels):
در این کرنل ها اختیارات سرویس های مجازی (شامل پایه ای ترین قسمت ها مثل interrupt controllers و timer) برای کمتر کردن تقاضا نسبت به میکرو کرنل به device driverها داده میشود.
کرنل های اگزو (ٍexo kernels):
اینم حسش نیس دیگه توضح بدم یه چی تو همون مایه هاس :دی
طبق شنیده هام و اینطور که فهمیدم از نظر تئوری بهترین کرنلها به ترتیب میکرو، هیبرید و مونولتیک هستند ولی در عمل به ترتیب مونولتیک در صدره و بعدش هم هیبرید قرار میگیره و میکرو هم به دلایلی که گفته شد پیاده سازیش فوق العاده مشکله.
GNU/Hurd اندر باب پروژه هرد
مطمئنا خیلی از کسایی که با پروژه GNU آشنا هستن اسم Hurd را شنیدن امروز میخوام راجع به این نرم افزار بنویسم، GNU Hurd پروژه ای که به Hurd مشهور است از سری نرم افزار های Unix-like هست. یعنی از خانواده یونیکسه و به منظور جایگزینی برای کرنل Unix تحت لایسنس دوست داشتنی GNU منتشر شده. این پروژه از سال 1990 توسط پروژه GNU از بنیاد نرم افزارهای آزاد در حال توسعه است. Hurd شامل یک سری از پروتکل ها و محاسبات سروری (یا به اصطلاح یونیکسی daemons) هستش که توسط GNU Match microkernel اجرا میشه که در واقع این دو باهم قصد تشکیل سیستم عامل GNUرا داشتند
هدف اصلی Hurd پیشی گرفتن در کارایی، امنیت و پایداری و در عین حال سازگاری با سیستم عامل های یونیکس بود. GNU ساختار server-client microkernel را به علت برتری و مزایای آن بر ساختار monolithic kernel انتخاب کرد. در باره ساختار کرنل حتما در آینده خواهم گفت
یه جورایی تاریخچه:
توسعه سیستم عامل GNU از سال 1984 شروع شد و در ابتدا پیشرفت خوبی داشت. ابزارهای آزاد GNU شروع به کسب اعتبار کردن و با نرم افزارهای تجاری ای که توسط فروشندگان سیستم درست میشد منطبق شدند. در سال 1990 تنها کمبودی که حس میشد نبود یه کرنل درست و حسابی و آزاد بود
گفتن چیکار کنیم چیکار نکنیم اومدن یه تز دادن که بیاین بشینیم Hurd بنویسیم. از سال 1990 بخاطر اون فاجعه ای که گفتم یعنی نبود کرنل توسعه Hurd بر پایه سیستم عامل TRIX که توسط فردی به اسم Steve Ward و تیمش در آزمایشگاه کامپیوتر MIT توسعه پیدا کرده بود شروع شد. با توجه به حرف های Thomas Bushnell هدف اولیه Hurd سازگاری با 4.4BSD-Lite بود، توماس میگفت “برای من کاملا روشنه که این پروژه پیروزی باشکوهی خواهد داشت و امروز جهان جای خیلی متفاوتی میشود”
اگرچه، در سال 1987 به علت همکاری نکردن برنامه نویسان دانشگاه Berkeley استاد بزرگ Richard Stallman اعظم تصمیم گرفت که پروژه رو در دانشگاه دیگری به اسم Carnegie Mellon ادامه بده. کار روی این پروژه سه سال به تاخیر افتاد. برای اینکه باید CMU تحت یک لایسنس مناسب منتشر میشد. با انتشار کرنل لینوکس در سال 1991 خیلی زود سیستم عاملی هولویی به اسم GNU/Linux متولد شد
توسعه Hurd به کندی پیش میرفت. اگرچه یک خبر خوش بینانه در سال 2002 توسط ریچارد استالمن نوید این رو میداد که در سال بعد GNU/Hurd انتشاری خواهد داشت، Hurd هنوز برای تولید محیط مناسب نیست و توسعه Hurd در کل راضی کننده نیست و انتظارات رو برآورده نکردند. و هنوز باگ خیز هستش و قابلیت هایی رو از دست داده ایم. در سال 2010 بعد از بیست سال توسعه استالمن گفت که در مورد Hurd خیلی خوش بین نیست. Hurd کمی پیشرفت کرده ولی برای اینکه عالی بشه نیاز به حل مشکلات اساسی داره و همچنین گفته که تمام کردن پروژه برای سیستم GNU خیلی حیاتی نیست و خوب کرنل آزادی به اسم Linux برای آن موجوده و با درست شدن آن مشکلات اصلی باقیمانده برای یک سیستم عامل آزاد حل نمیشود: پشتیبانی سخت افزاری
دبیان از جمله پروژه هاییه که روی Hurd برای تولید یک توزیع باینری بر پایه سیستم عاملGNI/Hurd روی سیستمهای سازگار با IBM PC کار میکنه
ساختار:
برخلاف خیلی از کرنلها از خانواده یونیکس Hurd از ساختار server-client استفاده میکنه که روی یک کرنل با ساختار میکرو بنا شده که وظیفه اش مهیا کردن اکثر سرویس های بنیادی کرنل – هماهنگ سازی دسترسی به سخت افزار سخت افزار: CPU (در process management و scheduling( RAM (توسط memory management)، و ورودی خروجی های دیگر توسط (input/output) و صدا و گرافیک و… هستش
در تئوری طراحی microkernel به شما این اجازه رو میده که تمام درایور ها رو به عنوان server در user space بسازید. اما امروزه بیشتر درایور ها از این نوع در kernel space GNU Mach دربر گرفته شده اند.
درایور های user-space از از بین رفتن performance رنج میبرند این از زمان لازم برای انجام ارتباطات میان پردازشی ناشی میشود. با کارایی ماشین های امروزی این امکان وجود دارد که این زمان دست رسی بیش از این باعث مشکلات مهم در performance سیستم نشود
پی نوشت : به عقیده خود من پروژه خیلی عظیمیه و با توجه به performce ای که میکرو کرنل میده واقعا جای کار داره این پروژه در حال حاضر به نظر میرسه که دبیان دولوپ این پروژه رو در دست گرفته اخبار زیادی ازش به گوش نمیرسه ولی امیدوارم بتونن مشکلاتش رو حل کنن من خودم با Hurd کمی کار کردم ولی خوب به علت نداشتن پوسته برای دسکتاپ سیستم عامل جالبی به نظر نمیرسه
اولین حرفم برای گفتن
اولین پستی که مینویسم درباره خودمه و این سایت و چگونگی تصمیمم گیری برای راه اندارزیشه، خیلی وقت بود دوست داشتم برای خودم وب سایت شخصی داشته باشم اولش با کل کل با یکی از رفقا شروع شد ولی بعد یکم قضیه فرق کرد تصمیم گرفتم یکم به این قضیه توجه کنم که دیگه باید یه کار درست حسابی رو پایه ریزی کنم. به شخصه به طراحی وب و گرافیک علاقه شدیدی داشتم ولی خوب کسی نبود راهنماییم کنه و آدمی هم نیستم الکی از کسی سوال کنم تا وقتی خودم دنبالش نرفتم. این شد که شروع کردم به یاد گیری از طریق وب که کار خیلی سخت و طاقت فرسایی بود. ولی خوب خسته نشدم چون واقعا کارای قشنگی میشه تحت وب انجام داد
در حال حاضر خیلی دوست دارم برنامه نویسیم تحت کیوت رو ادامه بدم و همچنان در تلاش برای یادگیریه هرچه بیشتر طراحی و توسعه وب هستم. خوب یکم هم از خودم و زندگی لینوکسیم بگم من کلا عاشق لینوکسم دوست داشتم همیشه گیک باشم و همیشه برای این منظور تلاش میکنم. در حال حاضر از دو دیسترو اوبونتو و اوپن سوزه استفاده میکنم و در تلاش برای نوشتن برنامه های مورد نیاز خودم هستم که ممکنه بعدا به عموم هم کشیده بشه
برای کارایی که انجام میدم دلیل دارم و دوست ندارم به کسی اجازه بدم که در مسایل زندگی دخالت کنه غیر از دوستام اونم در حد پیشنهاد. آدم نارسیسیسم پرستی هستم و خیلی دوست دارم که ملت با اعتماد به نفس باشن و همیشه روی کاری که انجام میدن پافشاری کنن حتی اگه همه دنیا قبولشون نداشته باشن مهم اینه که خود آدم به کاری که انجام میده اعتقاد داشته باشه. خوب فک میکنم به اندازه کافی از چیزهایی که باید تعریف کردم. امیدوارم مفید واقع شده باشه در شناخت ادمین این وب سایت





