You are on page 1of 9

‫مروری بر تاریخچه یونیکس‬

‫پس از گذشت سه دهه هنوز یونیکس (‪ )Unix‬یکی از قدرتمندترین و زیباترین سیستم‌های عامل‬
‫به شمار می رود‪ .‬از زمان پیدایش یونیکس در سال ‪ ۱۹۶۹‬تاکنون افکار دنیس ریچی (‪Dennis‬‬
‫‪ )Ritchie‬و کن تامپسون (‪ )Ken Thompson‬به موجودی افسانه ای بدل شده است‬

‫یونیکس از مالتیکس (‪ )Multics‬که یک پروژه سیستم عامل چند کاربره شکست خورده بود که در‬
‫ازمایشگاه‌های بل توسعه داده شده بود زاییده شد‪ .‬هنگامی که پروژه مالتیکس با شکست به اتمام‬
‫رسید‪ ,‬اعضای مرکز تحقیقات علوم کامپیوتر ازمایشگاه‌های بل بدون یک سیستم عامل موفق با‬
‫قابلیت باقی مانده بودند‪ .‬در تابستان سال ‪ ۱۹۶۹‬توسعه دهندگان ازمایشگاه بل طرحی بسیار‬
‫ساده از یک فایل سیستم را ارایه کردند که بعدها زمینه ساز ایجاد یونیکس شد‪ .‬آن ها سیستم‬
‫جدید خود را بر روی دستگاه‌های ‪ PDP-7‬آن زمان تست می کردند‪ .‬در سال ‪ ۱۹۷۱‬این سیستم نو‬
‫به دستگاه‌های ‪ PDP-11‬پورت و روی آنها امتحان شد‪ .‬در آن روزها دیگر این مخلوق جدید که بر‬
‫اساس کدهای سیستم شکست خورده مالتیکس بود یونیکس نامیده می شد‪ .‬در سال ‪ ۱۹۷۳‬سیستم‬
‫عامل یونیکس با زبان ‪ C‬بازنویسی شد‪ .‬قدمی بسیار بزرگ که موجب شد یونیکس در سال‌های‬
‫بعد به سیستم‌های زیادی پورت شود‪ .‬اولین یونیکسی که در بیرون از ازمایشگاه‌های بل مورد‬
‫استفاده قرار گرفت یونیکس نسخه ‪ ۶‬یا به اختصار ‪ V6‬بود‪.‬‬

‫کمپانی‌های دیگری یونیکس را به ماشین‌های جدید پورت کردند‪ .‬با این پورت‌های زیاد یونیکس‌های‬
‫مختلفی شکل گرفتند‪ .‬در سال ‪ ۱۹۷۷‬ازمایشگاه‌های بل ترکیبی از این یونیکس ها را در قالب یک‬
‫سیستم به نام یونیکس سیستم ‪ )Unix System III( ۳‬منتشر کرد و در سال ‪ AT&T ,۱۹۸۲‬نسخه‬
‫‪ System V‬را منتشر ساخت‪.‬‬

‫طراحی ساده یونیکس‪ ,‬همراه با در اختیار بودن سورس کد آن موجب توسعه فوق العاده آن در‬
‫سازمان‌های دیگر شد‪ .‬یکی از بزرگترین این سازمان ها دانشگاه برکلی کالیفرنیا بود‪ .‬نسخه ای از‬
‫یونیکس که در برکلی توسعه داده شده بود نام ‪ BSD‬که مخفف عبارت ‪Berkeley Software‬‬
‫‪ Distribution‬است گرفت‪ .‬اولین نسخه ‪ BSD‬در سال ‪ ۱۹۷۹‬منتشر شد‪ .‬سری‌های ‪4.3BSD ,‬‬
‫‪ 4.2BSD , 4.1BSD , 4.0BSD , 4BSD‬بعد از ‪ 3BSD‬منتشر شدند‪ .‬در این نسخه ها امکاناتی چون‬
‫حافظه مجازی‪ ,‬تخصیص دینامیک حافظه‪ TCP/IP ,‬اضافه شدند‪ .‬در سال ‪ ۱۹۹۳‬اخرین نسخه‬
‫رسمی یونیکس برکلی که حافظه مجازی در آن بازنویسی شده بود تحت عنوان ‪ 4.4BSD‬منتشر‬
‫شد‪ .‬امروزه توسعه ‪ BSD‬در قالب پروژه‌هایی چون ‪OpenBSD, NetBSD, FreeBSD,‬‬
‫‪ DragonflyBSD, Darwin‬ادامه می یابد‪ .‬در دهه ‪ ۱۹۸۰‬و ‪ ۱۹۹۰‬کمپانی‌های مختلفی نسخه‌های‬
‫تجاری از یونیکس خود را منتشر کردند‪ .‬این سیستم ها که معمول بر مبنای یونیکس ‪ AT&T‬یا ‪BSD‬‬
‫بودند برای پشتیبانی از قابلیت‌های معماری سخت افزارهای خاص تغییر می یافتند‪ .‬معروف ترین‬
‫این سیستم ها ‪ True 64, HP-UX, IBM's AIX, DUNIX/ptx, SGI's IRIX, Sun's Solaris‬بودند‪.‬‬
‫طراحی بسیار ماهرانه یونیکس با بهبود‌های فراوانی که در طول سال ها بر روی آن آنجام شده‬
‫بود آن را به یک سیستم عامل قدرتمند‪ ,‬تنومند و پایدار تبدیل کرده بود‪ .‬برخی از خصوصیاتی که‬
‫سکوی پرتاب یونیکس دارد عبارتند از‪:‬‬
‫‪ -۱‬سادگی یونیکس‪ :‬بعضی سیستم‌های عامل هزاران هزار تابع سیستمی (‪ )system call‬را پیاده‬
‫سازی می کنند و اهداف مشخصی ندارند اما یونیکس فقط نزدیک به صد تابع سیستمی داشت و‬
‫طراحی کامل هدفمندانه ای شده بود‪.‬‬
‫‪ -۲‬در یونیکس همه چیز فایل است (به توضیح آنتهای پاراگراف رجوع شود)‪ .‬این سطح از تجرید(‬
‫‪ )abstraction‬کار با اطلعات و دستگاه ها را در قالب کار با چند تابع سیستمی کار با فایل ها‬
‫ساده می کند‪ .‬توابع سیستمی چون ()‪. open)(, read)(, write)(, ioctl)(, close‬‬
‫‪ -۳‬هسته یونیکس به زبان ‪ C‬توسعه داده شده بود‪ .‬با این قابلیت یونیکس می توانست به اسانی‬
‫قابل حمل و قابل پورت شدن باشد و به اسانی در اختیار خیل عظیمی از توسعه دهندگان قرار‬
‫گیرد‪.‬‬
‫‪ -۴‬یونیکس با تنها تابع سیستمی ()‪ fork‬که در اختیار داشت سرعت بالیی در ایجاد پروسه ها‬
‫داشت‪ .‬با این امکان سیستم‌هایی که شدیدا تقسیم بندی شده بودند بدون هیچ مشکلی می‬
‫توانستند بر روی یونیکس کار کنند‪.‬‬
‫‪ -۵‬یونیکس توابع قدرتمندی در ارتباط بین پروسه ها یا ‪)InterProcess Communication( IPC‬‬
‫داشت که وقتی با امکان ایجاد سریع پروسه ها همراه می شد اجازه ایجاد ابزارهای مفیدی را می‬
‫داد که می توانستند با ابزارهای دیگر کارهای بزرگی در سیستم آنجام دهند‪.‬‬
‫توضیح ‪ :‬البته همه چیز در یونیکس‌های امروزی فایل نیست‪ .‬می توان گفت بخش اعظمی از آن با‬
‫‪ API‬فایل ها پیاده سازی شده است‪ .‬اما ‪ API‬یونیکسی که در ازمایشگاه‌های بل ایجاد شده بود‬
‫کامل فایل بود‪.‬‬
‫امروزه یونیکس یک سیستم عامل مدرن است که امکاناتی چون چند کار موازی (‪,)multitasking‬‬
‫چند رشته موازی (‪ ,)multithreading‬حافظه مجازی (‪ ,)virtual memory‬تخصیص دینامیکی‬
‫حافظه (‪ ,)demand paging‬کتابخانه‌های دینامیکی (‪ )shared libraries‬با بارگذاری دینامیک (‬
‫‪ )demand loading‬و شبکه ‪ TCP/IP‬را پشتیبانی می کند‪.‬‬
‫بعضی از شکل‌های یونیکس به صدها سخت افزار پورت شده آند و بعضی نیز تنها بر روی‬
‫دستگاه‌های جاسازی شده (‪ )embedded devices‬اجرا می شوند‪.‬‬

‫آشنایی با لینوکس‬

‫لینوکس در سال ‪ ۱۹۹۱‬توسط لینوس بندیکت توروالدز ایجاد شد‪ .‬در آن زمان یونیکس قدرتمندی‬
‫که به صورت ازادانه در اختیار باشد وجود نداشت و تمام یونیکس ها مجوز اختصاصی و تجاری‬
‫داشتند و این موضوع لینوس را به عنوان یک جوان ‪ ۲۱‬ساله که در دانشگاه هلسینکی فنلند درس‬
‫می خواند خیلی رنج می داد‪ .‬لینوس از مینیکس (‪ )Minix‬که برای اهداف اموزشی ایجاد شده بود‬
‫و کد آن در اختیار بود ولی حق تغییر نداشت) استفاده می کرد‬
‫در پاسخ به این وضع نامساعد لینوس کاری کرد که هر دانشجوی معقول اگر در شرایط او می بود‬
‫آنجام می داد‪ .‬او تصمیم گرفت که خودش سیستم عاملش را بنویسد‪ .‬لینوس ابتدا شروع به‬
‫نوشتن یک شبیه ساز ترمینال کرد که می توانست با آن به کامپیوتر بزرگ یونیکسی که در‬
‫دانشگاه بود متصل شود‪ .‬شبیه ساز ترمینالش رشد کرد و بهتر شد‪ .‬مدتی بعد‪ ,‬لینوس یک سیستم‬
‫یونیکس خیلی کوچک در اختیار داشت‪ .‬او یونیکس خود را در سال ‪ ۱۹۹۱‬بر روی شبکه اینترنت‬
‫منتشر ساخت‪.‬‬

‫این یونیکس ازاد که نام لینوکس بر روی آن گذاشته شد به سرعت کاربرانی یافت‪ .‬به دلیل مجوز‬
‫ازاد ‪ GPL‬لینوکس که اجازه هر گونه تغییر و بررسی بر روی کدهای لینوکس را می داد توسعه‬
‫دهندگان مشتاقی برای بررسی و تغییر لینوکس آن را دریافت کردند‪ .‬مجوز لینوکس باعث شد که‬
‫این سیستم عامل در زمان کوتاهی تبدیل به یک پروژه گروهی در سطح اینترنت شود که توسط‬
‫افراد زیادی توسعه یابد‪.‬‬

‫اما امروزه لینوکس یک سستم عامل پرقدرت است که می تواند بر گستره وسیعی از معماری‌های‬
‫سخت افزاری اجرا گردد‪ .‬معماری‌هایی چون ‪AMD x86-64, ARM, Compaq Alpha, CRIS, DEC‬‬
‫‪VAX, H8/300, Hitachi SuperH, HP PA-RISC, IBM S/390, Intel IA-64, MIPS, Motorola‬‬
‫‪ 68000, PowerPC, SPARC, Ultra SPARC, v850‬معماری‌هایی بوده آند که تاکنون لینوکس به‬
‫آنها پورت شده است‪ .‬لینوکس بر روی سیستم‌هایی به کوچکی یک ساعت مچی و به بزرگی‬
‫ابرکامپیوترهایی که در ساختمان‌های بسیار بزرگ نگهداری می شوند اجرا می شوند‪ .‬امروزه‬
‫لینوکس میل تجاری بزرگی برای کمپانی‌های تجاری ایجاد کرده است‪ .‬کمپانی‌های مشهوری چون‬
‫‪ Novell, IBM, RedHat, Montavista‬راه کارهای بر پایه لینوکس در سطوح مختلف ارایه می‬
‫کنند‪.‬‬

‫لینوکس شبیه یونیکس یا اصطلحا ‪ Unix Clone‬است ولی یونیکس نیست‪ .‬به دلیل اینکه اگرچه‬
‫لینوکس ایده‌های زیادی را از یونیکس قرض گرفته و ‪ Unix API‬که در استاندارد ‪ POSIX‬تعریف‬
‫شده است پیاده سازی کرده است اما حتی یک خط از کد لینوکس از کد یونیکس قرض گرفته‬
‫نشده است و به عبارتی همه چیز از ابتدا نوشته شده است با این حال برنامه‌های کامپایل شده‬
‫یونیکس به خوبی در لینوکس اجرا می شوند و بالعکس‪ .‬یکی از بزرگترین و مهمترین مزایای‬
‫لینوکس این است که یک محصول تجاری نیست‪ .‬یک پروژه گروهی است که در سطح اینترنت‬
‫توسعه یافته است‪ .‬اگرچه لینوس بنیان گذارو نگهدارنده اصلی لینوکس است اما پیشرفت و‬
‫توسعه لینوکس توسط خیل عظیمی از توسعه دهندگان ادامه می یابد‪ .‬به زبان ساده تر همه می‬
‫توانند در لینوکس مشارکت کنند‪ .‬مجوز ‪ GPL‬این اجازه را به همه داده است‪ .‬فقط بایستی به یاد‬
‫داشته باشیدهر تغییری را که در لینوکس می دهید و آن را بهتر می کنید بایستی به صورت ازادانه‬
‫به لینوکس بازگردانید و این همان مفهوم تضمین ازادی است که ‪ GPL‬برای شما به ارمغان می‬
‫اورد‪.‬‬

‫درآمدی بر سیستم‌های عامل و هسته ها‬

‫به دلیل وجود سیستم عامل‌های مدرن تجاری که طراحی اشتباهی دارند فکر کنم منظورم را‬
‫متوجه شده باشید) مفهوم دقیق سیستم عامل دچار ابهام شده است‪ .‬کاربران زیادی تصور می‬
‫کنند هر آنچه که بر روی صفحه مانیتور خود می بینند سیستم عامل است‪ .‬اگر بخواهیم بحث‬
‫تکنیکی بکنیم سیستم عامل بخشی از سیستم است که مسئول رفع نیازهای اولیه و مدیریت‬
‫سیستم است‪ .‬سیستم عامل شامل هسته (‪ ,)kernel‬راه آندازهای دستگاه ها (‪,)device drivers‬‬
‫بوت لودر (‪ ,)boot loader‬پوسته فرمان (‪ )command shell‬یا دیگر راه‌های ارتباطی و ابزارهای‬
‫ابتدایی کار با فایل ها وسیستم است‪ .‬مثل مرورگر اینترنت یا پخش کننده موسیقی جزیی از‬
‫سیستم عامل نیستند‪ .‬در عوض واژه ‪ system‬به سیستم عامل و تمامی برنامه‌هایی که بر روی‬
‫آن اجرا می شوند اطلق می گرددلیه ظاهری کاربری (‪ )user interface‬خارجی ترین بخش‬
‫سیستم عامل و هسته داخلی ترین بخش آن می باشد‪ .‬هسته سرویس‌های ابتدایی برای دیگر‬
‫بخش‌های سیستم را فراهم می کند‪ ,‬سخت افزار را مدیریت می کند و منابع سیستم را توزیع می‬
‫نماید‪ .‬گاهی از هسته به عنوان مدیر یا قلب سیستم عامل یاد می شود‪ .‬اجزای شاخص هسته‬
‫عبارتند از‪ :‬راه آنداز‌های وقفه (‪ ,)interrupt handlers‬زمانبند پردازنده (‪ )CPU scheduler‬که‬
‫زمان پردازنده را بین پروسه ها تقسیم می کند‪ ,‬سیستم مدیریت حافظه (‪memory‬‬
‫‪ )management system‬که فضای آدرس پروسه ها را مدیریت می کند و سیستم و‬
‫سرویس‌هایی مانند شبکه (‪ )networking‬و ارتباط بین پروسه ها (‪ .)IPC‬در سیستم‌های مدرن با‬
‫واحد محافظت شده مدیریت حافظه معمول هسته در سطح بالتری نسبت به برنامه‌های کاربران‬
‫قرار داشته و اجرا می شوند‬

‫این مورد شامل دسترسی محافظت شده به حافظه و دسترسی مستقیم به سخت افزارها می‬
‫باشد‪ .‬از این فضا به فضای هسته (‪ )kernel space‬و برعکس فضایی که برنامه‌های کاربران در‬
‫آن قرار دارند فضای کاربر (‪ )user space‬نامیده می شود‪ .‬در فضای کاربر در دسترسی به منابع‬
‫سیستم محدودیت وجود دارد‪ ,‬نمی توان مستقیم به سخت افزارها دسترسی داشت و یه طور‬
‫کلی نمی توان بی ادبی کرد‪.‬‬

‫برنامه‌هایی که در سیستم در حال اجرا شدن هستند از طریق توابع سیستمی (‪ )system calls‬با‬
‫هسته ارتباط برقرار می کنند‪ .‬یک برنامه معمول یک تابع کتابخانه ای مثل تابعی در کتابخانه‬
‫استاندارد زبان ‪ C‬را صدا می کند و در عوض تابع سیستمی از میان آن تابع کتابخانه ای صدا زده‬
‫می شود‪ .‬شکل ‪ ۱.۱‬ارتباط بین برنامه ها‪ ,‬هسته و سخت افزارها را نشان می دهد‪.‬‬
‫شکل ‪ – ۱.۱‬ارتباط بین برنامه ها‪ ,‬هسته و سخت افزارها‬

‫بعضی توابع کتابخانه ای امکانات وسیعی را که در توابع سیستمی پیدا نمی شوند فراهم می کنند‪.‬‬
‫بنابراین صدا کردن هسته در حقیقت رفتن به یک تابع بزرگتر است‪ .‬به عنوان مثال تابع معروف ()‬
‫‪ printf‬را در نظر بگیرید‪ .‬این تابع شکل دهی و ذخیره سازی داده ها را آنجام داده و در نهایت با‬
‫صدا کردن تابع سیستمی ()‪ write‬اطلعات را بر روی ترمینال می نویسد‪ .‬در عوض بعضی از‬
‫توابع کتابخانه ای رابطه ای یک به یک با توابع سیستمی دارند‪ .‬به عنوان مثال تابع کتابخانه ای ()‬
‫‪ open‬چیزی جز صدا کردن تابع سیستمی ()‪ open‬نیست‪ .‬بعضی از توابع کتابخانه ای زبان ‪ C‬مانند‬
‫()‪ strcpy‬نیز اصل از توابع سیستمی استفاده نمی کنند‪ .‬هنگامی که یک برنامه تابع سیستمی را‬
‫اجرا می کند در حقیقت هسته است که از طرف برنامه اجرا می گردد‪ .‬لذا گفته می شود که‬
‫برنامه تابع سیستمی را در فضای هسته اجرا می کند و هسته در متن (‪ )context‬برنامه اجرا می‬
‫شود‪.‬‬

‫هسته همچنین سخت افزار سیستم را مدیریت می کند‪ .‬تقریبا تمامی معماری‌های سخت افزاری‬
‫و آنچه لینوکس پشتیبانی می کند مفهوم وقفه ها (‪ )interrupts‬راپشتیبانی و فراهم می کنند‪.‬‬
‫هنگامی که سخت افزار می خواهد با سیستم ارتباط برقرار کند یک وقفه ایجاد می کند که به‬
‫طور اسنکرون یا غیرهمزمان هسته را دچار وقفه می کند‪ .‬وقفه ها با یک شماره مشخص می‬
‫شوند‪ .‬هسته این شماره را برای اجرای تابع مشخصی که وظیفه پردازش و پاسخ به وقفه را دارد‬
‫به کار می برد‪ .‬به عنوان مثال هنگامی که شما تایپ می کنید کنترلر صفحه کلید وقفه ای ایجاد‬
‫می کند که به سیستم می فهماند که اطلعات جدیدی در بافر صفحه کلید وجود دارد‪ .‬هسته با‬
‫توجه به شماره وقفه تابع راه آنداز وقفه صحیح را اجرا می کند‪ .‬تابع راه آنداز وقفه اطلعات‬
‫صفحه کلید را پردازش کرده و به صفحه کلید اجازه دریافت اطلعات بیشتر را می دهد‪.‬‬

‫برای فراهم کردن همزمانی‪ ,‬هسته می تواند تمام وقفه ها یا وقفه خاصی را غیر فعال نماید‪ .‬در‬
‫سیستم‌های عامل زیادی از جمله لینوکس راه آندازهای وقفه در متن پروسه ها اجرا نمی شوند‪.‬‬
‫در عوض آنها در متن یا ‪ context‬ویژه ای که متعلق به هیچ پروسه ای نیست اجرا می شوند‪.‬‬
‫در حقیقت در لینوکس به طور عمومی می توان گفت که هر پردازنده یکی از سه کار زیر را در‬
‫هر لحظه از زمان آنجام می دهد‪:‬‬
‫‪ -۱‬در فضای هسته و متن پروسه است و یک پروسه خاص را اجرا می کند‪.‬‬
‫‪ -۲‬در فضای هسته و متن وقفه است‪ ,‬پروسه ای را اجرا نمی کند و به وقفه ها پاسخ می دهد‪.‬‬
‫‪ -۳‬در فضای کاربر است و یک پروسه خاص را اجرا می کند‪.‬‬

‫هسته لینوکس در برابر هسته یونیکس‌های کلسیک‬

‫با داشتن یک ریشه و یک ‪ API‬هسته‌های یونیکس‌های مدرن ویژگی‌های طراحی تقریبا یکسانی‬
‫دارند‪ .‬یک هسته یونیکس یک فایل باینری استاتیک یکپارچه (‪ )monolithic‬است‪ .‬یک ایمیج اجرایی‬
‫بزرگ که در یک آدرس مستقل قرار می گیرد‪ .‬سیستم‌های یونیکسی معمول به یک واحد مدیریت‬
‫صفحه ای حافظه نیاز دارند‪ .‬این مورد امکان حافظه محافظت شده را الزامی می دارد و فضای‬
‫آدرس مجازی یکتا برای هر پروسه فراهم می کند‪.‬‬

‫در این قسمت برای اینکه بتوانیم طراحی هسته لینوکس را بهتر درک کنیم بحثی پیرامون‬
‫هسته‌های یکپارچه (‪ )monolithic kernels‬و طراحی ریز هسته (‪ )microkernel design‬آنجام‬
‫می دهیم‪:‬‬
‫طراحی هسته می تواند به دو نوع اصلی دسته بندی شود‪ :‬یکپارچه (‪ )monolithic‬و ریزهسته (‬
‫‪( .)microkernel‬البته روش سومی نیز به نام ‪ exokernel‬نیز وجود دارد که تاکنون بیشتر در‬
‫تحقیقات مطرح شده است ولی در دنیای واقعی نیز در حال راه یابی است‪ .‬روش ها و متدهای‬
‫دیگری نیز هستند که کاربرد چندانی ندارند و از سه روش فوق مشتق شده آند‪).‬‬
‫هسته‌های یکپارچه طراحی ساده تری دارند و تقریبا تمامی طراحی ها تا دهه ‪ ۱۹۸۰‬بدین گونه‬
‫بوده آند‪ .‬هسته‌های یکپارچه به صورت یک ایمیج باینری بزرگ که در فضای آدرس معینی قرار می‬
‫گیرد پیاده سازی می گردد‪ .‬این هسته در دیسک به صورت یک فایل باینری استاتیک مستقل ذخیره‬
‫می شود‪ .‬تمامی سرویس‌های هسته وجود دارند و در فضای بزرگ هسته اجرا می شوند‪.‬‬
‫ارتباطات ناچیزی در هسته وجود دارد چون تمام هسته در فضای آدرس مشخصی قابل دسترسی‬
‫است و نیاز به هیچ گونه ارتباطی نمی باشد‪ .‬در این نوع هسته می توان به طور مستقیم توابع را‬
‫صدا زد‪ .‬این نوع طراحی دارای سادگی و بازدهی بال می باشد و تقریبا تمامی یونیکس ها از این‬
‫نوع طراحی بهره می برند‪.‬‬
‫در آن سو‪ ,‬ریز هسته به صورت یک فایل باینری بزرگ پیاده سازی نمی شود‪ .‬در عوض قابلیت‌های‬
‫هسته در قالب پروسه‌های جداجدا که معمول به آنها نام سرور (‪ )server‬داده می شود خرد می‬
‫گردد‪.‬‬

‫سرورهایی که به امکانات خاص نیاز دارند در فضای اجازه داده شده و بقیه در فضای کاربر اجرا‬
‫می شوند‪ .‬تمامی سرورها فضای آدرس جداگانه ای دارند لذا امکان صدا کردن مستقیم توابع‬
‫یکدیگر را ندارند‪ .‬در عوض ارتباطات در ریز هسته از طریق ارسال پیغام (‪)message passing‬‬
‫صورت می گیرد‪ .‬با پیاده سازی مکانیزم ارتباط بین پروسه ای (‪ )IPC‬سریع این ارسال پیغام ها‬
‫بین سرورها می تواند بر اساس مکانیزم ‪ IPC‬باشد‪ .‬جداسازی سرورهای مختلف هنگامی که یکی‬
‫از سرور ها دچار شکست شد از شکست کلی سیستم جلوگیری می کند‪ .‬مساله ای که در طراحی‬
‫یکپارچه وجود ندارد و با ناموفق بودن یک قسمت از هسته کل آن دچار شکست می شود‪ .‬به علوه‬
‫ساختاریافتگی (‪ )modularity‬طراحی ریز هسته به آن این امکان را می دهد که در حین اجرای‬
‫هسته یک سرور با سرور دیگری جایگزین گردد‪ .‬با توجه به هزینه ارتباط بین سرورها و تغییر رویه‬
‫اجرایی (‪ )context switch‬و آنتقال پیغام ها طراحی ریزهسته کمی نسبت به طراحی پکپارچه‬
‫کندتر می باشد‪ .‬برای جبران مساله سرعت کمتر و بهبود آن تقریبا تمامی سیستم عامل‌های‬
‫امروزی که از این متد طراحی استفاده می کنند سرورها را در فضای هسته اجرا می کنند‬
‫(جلوگیری از هزینه تغییر رویه اجرایی) و بالقوه امکان صداکردن مستقیم توابع سرورها را‬
‫فراهم می سازند‪ .‬سیستم عامل‌هایی چون ‪ windows NT‬و ‪ ( Mach‬که بعضی قسنت‌های ‪Mac‬‬
‫‪ OS X‬بر مبنای آن است) این گونه هستند‪.‬‬

‫و اما طراحی لینوکس‪ :‬لینوکس نکات مثبت هر دو متد ذکر شده را در خود جمع کرده است‪.‬‬
‫لینوکس یک هسته یکپارچه دارد که در فضای آدرس مشخصی اجرا می گردد‪ ,‬لینوکس طراحی ای‬
‫ساخت یافته (‪ )modular‬با امکاناتی نظیر اعمال زور (‪ ,)preemption‬رشته‌های سطح هسته (‬
‫‪ )kernel threads‬دارد و امکان بارگذاری فایل‌های فایل‌های باینری جدا در حین اجرا را نیز دارد‬
‫(ماجول‌های هسته)‪ .‬با این امکانات لینوکس از یک سو سرعتی برابر با طراحی یکپارچه و از سوی‬
‫دیگر کلیه امکانات ریزهسته را در خود جمع کرده است‪.‬‬

‫هنگامی که لینوس و دیگر توسعه دهندگان لینوکس در آن مشارکت می کنند بدون توجه به‬
‫یونیکس ولی با رعایت ‪ API‬آن به پیاده سازی هسته می پردازند‪ .‬بنابراین با توجه به اینکه لینوکس‬
‫بر پایه هیچ یونیکسی نیست توسعه دهندگان لینوکس می توانند در هر لحظه بهترین تصمیمات را‬
‫اتخاذ کنند و در لینوکس اعمال کنند‪ .‬در زیر مقایسه ای بین هسته لینوکس و دیگر یونیکس ها‬
‫صورت می پذیرد‪:‬‬
‫‪ -۱‬لینوکس بارگذاری دینامیک ماجول‌های هسته را پشتیبانی می کند‪ .‬اگر چه طراحی هسته‬
‫لینوکس یکپارچه است ولی این امکان را دارد که در موقع لزوم بعضی از کدهای هسته به آن وارد‬
‫شوند یا از آن خارج شوند‪.‬‬
‫‪ -۲‬لینوکس چند پردازندگی متقارن (‪ )SMP‬را پشتیبانی می کند‪ .‬اگر چه نسخه‌های جدید یونیکس‬
‫ها این امکان را پشتیبانی می کنند ولی این پشتیبانی در نسخه‌های قدیمی وجود نداشت‪.‬‬
‫‪ -۳‬هسته لینوکس دارای اعمال زور است یا به اصطلح ‪ preemptive‬است‪ .‬یونیکس‌های قدیمی‬
‫تر امکان اعمال زور را نداشتند‪.‬‬
‫‪ -۴‬لینوکس روش جالبی در پیاده سازی رشته‌های اجرایی یا ‪ thread‬ها دارد‪ .‬در لینوکس تقریبا‬
‫فرقی مابین یک رشته و یک پروسه معمولی نیست‪ .‬تنها فرقی که وجود دارد این است که بیت‬
‫‪ thread‬ها منابع به اشتراک گذاشته می شوند‪.‬‬
‫‪ -۵‬لینوکس یک مدل شی گرا بر مدیریت دستگاه ها به همراه رخدادهای قطع و وصل و فایل‬
‫سیستم دستگاه در فضای کاربر (‪ )sysfs‬دارد‪.‬‬
‫‪ -۶‬لینوکس از پیاده سازی بعضی امکانات یونیکس که طراحی خوبی ندارند و به کار نمی روند‬
‫چشم پوشی کرده است مانند ‪ STREAMS‬که تقریبا مرده است‪.‬‬
‫‪ -۷‬و در نهایت لینوکس بر خلف یونیکس‌های دیگر به معنای واقعی کلمه ازاد است‪.‬‬

‫نسخه‌های هسته لینوکس‬

‫هسته لینوکس در دو نوع نسخه منتشر می شود‪ .‬پایدار و توسعه‪ .‬هسته‌های پایدار نسخه‌هایی‬
‫هستند که می توانند در محیط کاربری به کار روند‪ .‬نسخه‌های پایدار جدید تنها برای رفع اشکالت‬
‫و راه آندازهای جدید منتشر می شوند‪ .‬در سوی دیگر هسته‌های سری توسعه در هر نسخه تغییرات‬
‫زیادی می کنند و به حد قابل قبولی برای استفاده واقعی نرسیده آند و مناسب نیستند‬

‫نسخه هسته لینوکس به وسیله سه عدد مشخص می شود‪ .‬مثل ‪ . 2.6.20‬عدد اول (‪ )۲‬که عدد‬
‫اصلی (‪ )major version‬نامیده می شود زمانی تغییر می کند که تغییرات بسیار عمده و بنیادی در‬
‫هسته اتفاق بیفتد‪ .‬عدد دوم (‪ )۶‬عدد فرعی (‪ )minor version‬نامیده می شود‪ .‬اگر این عدد زوج‬
‫باشد هسته پایدار و اگر فرد باشد هسته توسعه است‪ .‬دو عدد اول سری هسته را نیز نشان می‬
‫دهند مثل هسته مثال مذکور سری ‪ 2.6‬است‪ .‬عدد سوم نیز ‪ patchlevel‬نامیده می شود‪.‬‬

‫هسته‌های توسعه یک سری فاز توسعه دارند‪ .‬در ابتدا توسعه دهندگان هسته بر روی امکانات جدید‬
‫کار و تحقیق و بحث می کنند‪ .‬بعد از آن مرحله ثبت امکانات یا ‪ feature freeze‬می باشد‪ .‬پس از‬
‫این مرحله هیچ امکان جدیدی به لیست امکانات موردنظر برای پیاده سازی اضافه نخواهد شد‪.‬‬
‫توسعه کدها شروع شده و پس از مدتی که هسته به مرحله ای برسد که بتوان آن را به عنوان‬
‫پایدار معرفی کرد مرحله ثبت کد یا ‪ code freeze‬اغاز می شود‪ .‬پس از این مرحله فقط رفع‬
‫اشکال ها قبول می شوند‪ .‬پس از پایان این مرحله می توان امید داشت نسخه پایداری از هسته‬
‫منتشر شود‪.‬‬

‫اجتماع توسعه هسته لینوکس‬


‫هنگامی که شما توسعه کد برای هسته لینوکس را اغاز می کنید جزیی از اجتماع عمومی توسعه‬
‫هسته لینوکس خواهید بود‪ .‬تالر اصلی توسعه دهندگان هسته لینوکس لیست پستی هسته می‬
‫باشد‪ .‬اطلعات عضویت را می توانید در سایت ‪ http://vger.kernel.org‬مشاهده کنید‪ .‬لیست‬
‫پستی شلوغ با بیش از ‪ ۳۰۰‬نامه الکترونیکی در روز‪.‬‬

Rate