رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران

پست های پیشنهاد شده

ارسال شده در (ویرایش شده)

با سلام،

معمولاً یکی از سوأل‌هایی که در ذهن افراد بلند‌پرواز رجوع می‌کند این است که من می‌خواهم سیستم‌عامل بنویسم! ?

از لحاظ تجربیِ من و نظرات اساتید و افراد حرفه‌ای، تولید و توسعهٔ سیستم‌عامل یکی از پیچیده‌ترین و مشکل‌ترین کار‌های برنامه‌نویسی در این حوزه است. تولید و توسعهٔ چنین محصولی زمان و دانش بسیار بالایی در زمینه‌های مختلف علوم کامپیوتر را می‌طلبد که من در این پست به برخی از آن‌ها اشاره می‌کنم.

نقل قول

نکته: من قصد ندارم که شما را از این کار منصرف کنم، بلکه با توجه به وظایف خودم در حوزهٔ منتورینگ لازم می‌دانم برخی از نکاتی که می‌توان به آن‌ها اشاره کرد را در اختیار شما قرار دهم تا زمینه‌ای برای مطالعه و تحقیقات اولیه در این حوزه را در اختیار داشته باشید.

اختراع چرخ از اول

ممکن است در بعضی از موارد اختراع یک محصول از اول کار منطقی باشد، اما در بسیاری از آن‌ها هم ساخت و توسعهٔ آن از اول از جنبهٔ اقتصادی و حتی علمی قابل توجیح نمی‌باشد؛ ساخت و تولید سیستم‌عامل می‌تواند به عنوان یکی از عواملِ پیشرفت کشوری در حوزهٔ فناوری و اهمیت آن به عنوان یک محصول بومی بسیار موثر باشد، اما همه چیز در اینجا خلاصه نمی‌شود بنابراین تولید و توسعهٔ چنین محصولاتی باید با مهارت و انگیزه‌های بسیار حساب‌ کتاب شده‌ای پیاده سازی شود.

 

بلند پروازی و حماقت

تنها نکته‌ای که موجب شد من این پست را ایجاد کنم، اشاره به اهمیت بلند پروازی در حرفه‌ای شدن و کسب مهارت‌های فوق پیشرفته است! این که شما بلند پرواز هستید بسیار خوب است. اما باید این را در نظر داشته باشید بعضی از بلند پروازی‌هایی که بدون تحقیقات فنی ایجاد می‌شوند حماقتی بیش نیستند.

برای مثال باید در نظر داشته باشید تولید و توسعهٔ سیستم‌عامل هیچ شباهتی به یک نرم‌افزار ساده‌ای با عمل‌ِ CRUD نیست و نویسندهٔ سیستم‌عامل حتی یک برنامه‌نویس متوسط به بالا محسوب نمی‌شود! چرا که توسعه‌‌دهندهٔ سیستم‌عامل باید به عنوان واقعی یک مهندس کاملِ کامپیوتر به تمام ویژگی‌های آن باشد (برنامه‌نویس کاملاً حرفه‌ای با کوله‌باری از تجربه‌های خفن و دانش خوب در رابطه با الگوریتم‌ها و قالب‌های طراحی و غیره...).

اگر شما یک برنامه‌نویس تازه‌کار هستید و در ابتدای کار به سراغ چنین بلند‌پروازی آمده‌اید پیشنهاد می‌شود در حد آشنایی با این موارد که در ادامه آمده است قانع باشید و تا زمانی که به این سطح از دانش و تجربه نرسیده‌اید حتی به فکر نوشتن چنین محصولی نباشید (این کار برای بررسی و آزمایش جهت ارتقاء مهارت‌های خود توصیه می‌شود) اما اگر خارج از آن باشد حماقتی بیش نخواهد بود ? من افراد بسیار زیادی را می‌شناسم که با هدف تولید سیستم‌عامل بومی قدم برداشته‌اند اما در نهایت وارد یک دامنهٔ وسیعی از پیچیدگی افتاده‌اند که آن‌ها را منصرف کرده است.

بخش‌های اصلی سیستم‌عامل

  • هسته (کرنِل)
    • کرنل به عنوان قلب سیستم‌عامل محسب می‌شود، اولین برنامه‌ای است که در آغاز به کار کامپیوتر اجرا می‌شود، و مدیریت منابع کامپیوتر و همچنین مدیریت درخواست‌ها از طرف برنامه‌های سیستمی و کاربردی را به عهده می‌گیرد.

  • برنامه‌های سیستمی
    • برنامه‌های سیستمی در بالاترین بخش کرنِل اجرا می‌شود. این نوع برنامه‌ها به عنوان انجام کار‌های مهم و مفید نیستند، بلکه برنامه‌هایی هستند که لازم است برای اتصال هسته به برنامه‌های کاربر و دستگاه‌های جانبی استفاده شوند. درایور‌های دستگاه‌ها، فایل‌سیستم‌ها، برنامه‌های شبکه، و نرم‌افزار‌های سیستمی مانند مباحث مدیریت دیسک که همهٔ آن‌ها مثال‌هایی از برنامه‌های سیستمی هستند.
  • برنامه‌های کاربردی
    • این نوع برنامه‌ها بخشی از برنامه‌های سیستم‌عامل نیستند. برنامه‌هایی همچون مرورگری اینترنت، مدیا پلیر و برنامه‌هایی از این قبیل به عنوان برنامه‌های عامیانه‌ای هستند که بعد‌ها می‌تواند در کنار سیستم‌عامل آن‌ها را قرار داد.

چه چیز‌هایی را باید بدانیم؟

  • علوم پایه و اولیه کامپیوتر
  • تئوری برنامه‌نویسی کامپیوتر و روش‌های بهتر
  • زبان‌های برنامه‌نوسی سطح‌پایین و سطح‌بالا

توسعهٔ سیستم‌عامل مانند توسعهٔ نرم‌افزار یا وب یا اپلیکیشن نیست، این نوع محصول چیزی نیست که شما بتوانید به این راحتی به آن بپردازید و یاد بگیرید. قبل از اینکه وارد این مبحث شوید نیاز است شما یک پایهٔ پایدار و منطقی از یک علوم رایانه را ایجاد کنید.

خلاصه‌ای از حداقل مواردی که قبل از ورود به این حوزه لازم است

  • بررسی سیستم‌عامل‌های موجود به خصوص، منابع سکو‌های یونیکس و لینوکس را بررسی و مورد مطالعه قرار دهید. در نظر داشته باشید که سیستم‌عامل خود به عنوان یک محصول بسیار مهم و کامل مانند یک درخت محسوب می‌شود که ریشهٔ آن مهمترین بخش آن است (هسته یا کرنل).
  • آشنایی با علوم کامپیوتر پایه
  • آشنایی کامل با کامپایلر
  • آشنایی کامل و حرفه‌ای با زبان‌های C و ++C
  • آشنایی با لینوکس و یونیکس
  • آشنایی با قالب‌های اجرایی، قالب‌هایی مانند elf و exe
  • آشنایی با پلتفرم به خصوص مطالعات عمیق در رابطه با معماری و ساختار پردازندهٔ مورد نظر
  • محیط توسعهٔ مناسب (جهت برنامه‌نویسی) که به دو گزینهٔ ویندوز و لینوکس است که بیشتر محیط لینوکس و ابزار‌های GNU و کامپایلر GCC و Clang می‌باشد که در مقابل در ویندوز از کمپایلر MSVC می‌توان استفاده کرد.
  • در اختیار داشتن ابزار‌های آزمایش مانند شبیه‌ساز‌هایی همچون VirtualBox و VMWare نیاز است.
  • داشتن اطلاعات کافی در حوزهٔ سخت‌افزار و شبکه (درک و فهم در رابطه با سخت‌افزار‌ها و نحوهٔ عملکرد آن‌ها) یکی از موارد بسیار مهمی است که قبل از توسعهٔ سیستم‌عامل باید به آن‌ها توجه کرد.
  • و موارد دیگر که در توسعهٔ سیستم‌عامل بسیار مهم هستند.

با توجه به اینکه شما برای توسعهٔ چنین محصولی بر روی پلتفرم x86 و زبان C تصمیم گرفته باشید می‌توانید مراحل زیر را در نظر بگیرید:

  1. انتخاب بارگذار کنندهٔ بوت سیستم‌عامل (بوت‌لودِر) که در اینجا گزینهٔ پیشنهادی Grub است.
  2. پیاده سازی نقطهٔ ورودی کد C به زبان اسمبلی یا همان (Entry Point)
  3. تولید و توسعهٔ یک لاگر (جهت دیباگینگ) ساده مانند printf
  4. مقداردهی اولیه (Initialization) پردازنده (ساخت جدول GDT، برنامه‌ریزی PIC و PIT و ...)
  5. پیاده سازی یک چهارچوب کامل از مدیریت حافظه‌
  6. پیاده سازی یک چهارچوب کامل از مدیریت حافظه‌‌ی مجازی
  7. پیاده سازی زمان‌بندی پردازنده
  8. پیاده سازی موارد مورد نیازی که در مهندسی نرم‌افزار آمده است مانند spinlock
  9. پیاده سازی فایل‌سیستم‌ها
  10. پیاده سازی رابط‌های برنامه‌نویسی API
  11. پیاده سازی رابط‌هایی مانند Shell
  12. در نهایت برنامه‌نویسی جانبی جهت توسعه و تکامل سیستم‌عامل

توضیحاتی که به آن‌ها اشاره شد تنها بخشی از هزاران موردی است که باید در طراحی سیستم‌عامل در نظر داشت که مسلماً افراد حرفه‌ای در این حوزه خود به خوبی می‌دانند چه مباحثی برای توجه به آن‌ها نیاز است.

برخی از منابع جهت طراحی و توسعهٔ سیستم‌عامل

بلند پروازی کنید، اما حماقت نکنید ?

ویرایش شده در توسط Max Base
اصلاح غلط املایی "ساده منند printf"

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...