نوشته شده توسط
the king
کتابخانه های زبان C بر اساس سرویس ها و امکاناتی که سیستم عامل در اختیارشون میذاره طراحی شدن و بدون اونها اجرا شدنی نیستن، به همین جهت خروجی کامپایلر هم عموما نمیتونه مناسب اینکار باشه.
در برخی جاها مجبور می شوید با Inline Assembly که برخی کامپایلر ها پشتیبانی اش می کنند روتین های متعارف C مثلا برای نمایش متن یا دریافت کلید رو با سرویس های BIOS جایگزین کنید تا در یک سیستم عامل مستقل قابل اجرا باشن.
مخصوصا فایل اجرایی exe بحاطر ساختارش مناسب استفاده در یک سیسنم عامل مستقل نیست. چون فایل exe برای اجرا شدن به سیستم فایل، سیستم مدیریت حافظه و ... احتیاج داره که اونها رو شما نساختید.
در درجه اول بهتره یک سیستم عامل مستقل و واقعی نسازید. یعنی یک سیستم عامل مجازی بسازید، سیستم عامل تون وابسته به امکانات سیستم عامل واقعی ویندوز یا داس یا ... باشه و فقط تحت اونها اجرا شدنی باشه.
اینطوری بخش عمده ای از حجم کار تون کم میشه و میتوانید روی کلیات سیستم عامل دلخواه تون تمرکز کنید، نه جزئیات فنی.
اما اگر واقعا بخواهید یک سیستم عامل مستقل بسازید، برخی کامپایلر های قدیمی ++C / C تحت DOS مخصوصا قدیمی تر ها از مدل حافظه Tiny پشتیبانی می کنند که خروجی فایل شون com است، نه exe
فایل com ساختار خیلی خیلی ساده ای داره و تقریبا هر بایتی که ازش بردارید رو میشه حتی در بخش بوت سیستم درج کرد.
اصولا برای برنامه نویسی که میخواد دستورات زبان ماشین رو از داخل فایل اجرایی استخراج کنه فایل com مناسب ئه، نه exe. و در نظر بگیرید کامپایلر C بصورت عادی انتظار نداره که شما باهاش سیستم عامل طراحی کنید و کدی که هیچگونه وابستگی به سیستم عامل نداشته باشه تولید نمی کنه، برخی روتین هایی که در اینجور فایل ها می بینید، دارند از سرویس های سیستم عامل (مثلا DOS) استفاده می کنند و اگر بخواهید به عنوان کد یک سیستم عامل مستقل ازشون استفاده کنید اجرا شدنی نیستند.
بهتره فقط زمانی سراغ نوشتن یک سیستم عامل مستقل و واقعی برید که برای طراحی دونه دونه اجزاء سیستم عامل زمان کافی و ایده و تخصص داشته باشید.