PDA

View Full Version : اجرای سی بدون سیستم عامل



qazwsx
دوشنبه 20 آذر 1385, 21:26 عصر
لصفا در مورد اینکه سیستم عاملی مانند ویندوز یا لینوکس را چگونه با سی نوشته اند

آیا تمام کارهای گرافیکی را فقط با سی نوشته اند.

آیا برنامه سیستم عامل را ابتدا در یک سیستم عامل دیگر می نویسند یا نه

مثلا در ویندوز برنامه exe میشود ولی فقط در ویندوز قابل اجرا است

mehrzad007
سه شنبه 21 آذر 1385, 03:59 صبح
لصفا در مورد اینکه سیستم عاملی مانند ویندوز یا لینوکس را چگونه با سی نوشته اند
نوشتن سیستم عامل یه کمی از یه ذره سخت تره! ( اما غیر ممکن نیست؟!) یه سری چیزها رو باید در موردشون بدونی . وظایف . قسمت های مختلف و .... یعنی نمیشه گفت چه طوری ویندوز و لینوکس رو نوشتن بدون اینکه یه خروار کتاب بخونی . بعد بیشتر در مورد لینوکس مطلب وجود داره تا ویندوز و شاید بیهوده باشه که بگم چرا.
می تونی برای اطلاعات بیشتر از سایت osdever.net (البته اگه آدرسش درست باشه ) استفاده کنی .

آیا تمام کارهای گرافیکی را فقط با سی نوشته اند.

معمولا از زبان سی توی نوشتن سیستم عامل خیلی استفاده می شه . مخصوصا تو لینوکس و قسمت هایی که دیگه زیادی پایینه از اسمبلی . منظورت از گرافیک اگه همون شل گرافیکی هست یا چیزی دیگه؟

آیا برنامه سیستم عامل را ابتدا در یک سیستم عامل دیگر می نویسند یا نه

برای نوشتن یه سیستم عامل به چند چیز احتیاج داری اول یک کامپیوتر!
دوم یک محیط ادیتور برای نوشتن برنامه
بعد به یه کامپایلر که برنامه تو باهاش کامپایل کنی معمولا gcc
بعد یه (تیم)برنامه نویس باسواد و بیکار

مثلا در ویندوز برنامه exe میشود ولی فقط در ویندوز قابل اجرا است
در مورد فایلها و نحوه برخورد سیستم عامل با اونا باز بر میگرده به ساختار فایل و واکنش سیستم عامل و ....... همون قضیه کتاب و اینجور چزا دیگه. اما اگه منظورت اینه که چه طور یه فایل برای اجرا کامپایل میشه موقعی که هیچ سیستم عاملی نیست که اجراش کنه اون تکه اولیه بارگزاری به زبان اسمبلی هست که میشینه توی بوت لودر و.... osdev رو نگاه کن یه مقاله به تفضیل و تفصیل اینو توضیح داده با اینکه چه نرم افزار هایی لازم داری و حتی یه مثال ساده هم داره .

oVERfLOW
سه شنبه 21 آذر 1385, 12:08 عصر
نوشتن سیستم عامل بخش اصلی‌ش نوشتن kernel اون هست که باید با اسمبلی یا C که بعدش به اسمبلی تبدیل بشه انجام می‌شه
نوشتن Kernel یا هسته هم با C امکان پذیره و هم با اسمبلی
ولی اگه با C بنویسید دیگه نمی‌تونید از خیلی از امکاناتش استفاده کنید و خیلی چیزا رو خودتون باید بنویسید

وقتی که Kernel آماده شد اونوقت می‌شه یه کامپایلر مخصوص به سیستم عامل خودتون درست کنید یا یه کامپایلر دیگه رو توی ویندوز یا لینوکس مجبور کنید تا برای سیستم شما کامپایل کنه !!! با (SDK) (همون کاری که برای Windows Mobile یا Symbian انجام می‌دیم)

از اینجا به بعد دیگه کار خیلی راحت می‌شه...

shr6557
چهارشنبه 22 آذر 1385, 05:02 صبح
بحث خیلی خوبیه بود
حالا که sdk تو این بحث مطرح شد کسی می تونه توضیح بیشتری در موردش بده؟

qazwsx
جمعه 24 آذر 1385, 22:54 عصر
در مورد همون شل بیشتر توضیح بدین

mehrzad007
شنبه 25 آذر 1385, 12:03 عصر
:)
sdk = software development kit (google it

نوشتن Kernel یا هسته هم با C امکان پذیره و هم با اسمبلی

قسمت هایی از سیستم عامل اجبارا باید نوشته شوند . اجبارا به این دلیل که باید با جزییات خیلی خیلی سطح پایین سخت افزار سر و کله بزنید .

دیگه نمی‌تونید از خیلی از امکاناتش استفاده کنید و خیلی چیزا رو خودتون باید بنویسید

امکانات چی؟ چی رو باید خودتون بنویسید؟ دقت کنید که خیلی از امکانات زبانهای برنامه نویسی متکی و محدود به سیستم عامل هستند چرا که از api ها و توابع و وقفه های مربوط به سیستم عامل استفاده می کنند . مثلا وقفه های داس.

وقتی که Kernel آماده شد اونوقت می‌شه یه کامپایلر مخصوص به سیستم عامل خودتون درست کنید یا یه کامپایلر دیگه رو توی ویندوز یا لینوکس مجبور کنید تا برای سیستم شما کامپایل کنه !!! با (SDK) (همون کاری که برای Windows Mobile یا Symbian انجام می‌دیم)


؟


در مورد همون شل بیشتر توضیح بدین

شل یعنی خط فرمان . یعنی قسمت عزیزی از سیستم عامل که کارهای شما رو انجام می ده . برین توی منوی ران و تایپ کنید cmd . این یه نوع شل . و یا کل صفحه دسکتاپ رو نگاه کنید اینم یه شل . اون اولیه متنی تشریف دارند و اون یکی گرافیکی توی لینوکس خیلی بیشتر توی چشم می خوره ....

mehrzad007
شنبه 25 آذر 1385, 12:05 عصر
راستی osdever.net رو حتما ببینید. برای توضیحات بیشتر

netspc
شنبه 07 بهمن 1385, 13:12 عصر
سلام به دوستان
در مورد برنامه نویسی سیستم عامل :
همانطور که دوست عزیز overfollow گفتند برای برنامه نویسی سیستم عامل شما نیازمند یک کامپایلر جداگانه و مخصوص به خود سیستم عامل میباشید.
در واقع این بدین صورت هست که شما در ابتدا یک هسته بسیار ساده را بوسیله خود زبان برنامه نویسی (مهم نیست که سی باشد و یا پاسکال و یا هر زبان برنامه نویسی که قدرت ایجاد آبجکت کد و دسترسی به سخت افزار را به شما بدهد)
یعنی به فرض اگر شما از سی استفاده میکنید دیگر نمیتوانید از توابع کتابخانه ای سطح بالا کمک بگیرید برای مثال برای اینکه ببینید هارد دیسک چه ظرفیتی دارد نمیتوانید از کتابخانه dos.h استفاده کنید و باید خودتان دست به کار شده و یک کتابخاته جدید برای سیستم عامل خود تولید کنید.
و اگر هم از اسمبلی استفاده میکنید نمیتوانید از وقفه های نرم افزاری مانند وقفه 21 استفاده کنید و فقط دسترسی به وقفه های سخت افزاری دارید.

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

mortez maya
شنبه 07 بهمن 1385, 20:46 عصر
بالاخره نگفتید گرافیکم با C می نویسن یا نه

netspc
شنبه 07 بهمن 1385, 23:13 عصر
در واقع وقتی کرنل سیستم عامل آماده شده این وظیفه شماست که در کدام مورد مود گرافیکی و اینکه بوسیله کدام زبان برنامه نویسی نوشته شود.
سی یکی از گزیته های موجود میباشد و به این دلیل این زیان انتخاب میشود که منابع و کتابهای بسیار زیادی در مورد آن وجود دارد

mortez maya
شنبه 07 بهمن 1385, 23:54 عصر
یعنی این کیفیت زیبای گرافیک ویندوز رو با C درست میکنن؟ میشه بیشتر توضیح بدین.

mehrzad007
یک شنبه 08 بهمن 1385, 01:52 صبح
به همین راحتی ها هم نیست !
اما توی یک کلمه میشه گفت بله! این گرافیک به قول شما زیبا (حتی ایرو گلاس ویستا) یک جورایی با سی توسعه داده شده . اما این کار یک دفعه ای انجام نشده . برای تولید یک شل گرافیکی با این عظمت کارهای زیادی لازمه شاید اولین کار یک کتابخانه گرافیکی کامل باشه . بعد خدا تا گرافیست و برنامه نویس و ساعتها وقت .
البته اهمیت شل در گرافیک اون نیست . شما خودتون خیلی ساده می تونید با برنامه های تم کریتور قیافه شل رو عوض کنید . مهم پردازش سریع گرافیکی محیط هست که باید سریع اجرا بشه . ویندوز شل بسیار سریعی داره حتی سریع تر از لینوکس. پس همش هم به قیافه نیست

Mamdos
یک شنبه 08 بهمن 1385, 02:23 صبح
لصفا در مورد اینکه سیستم عاملی مانند ویندوز یا لینوکس را چگونه با سی نوشته اند

آیا تمام کارهای گرافیکی را فقط با سی نوشته اند.

آیا برنامه سیستم عامل را ابتدا در یک سیستم عامل دیگر می نویسند یا نه

مثلا در ویندوز برنامه exe میشود ولی فقط در ویندوز قابل اجرا است

فکر می‌کنم منظور شما این باشد که چگونه است که برنامه‌ی سیستم عامل برای اجرا شدن نیاز به یک سیستم عامل دیگر ندارد.

در واقع آن چیزی که «اجرا» می‌شود برنامه‌ی C نیست بلکه کد دودویی است که سخت‌افزار آن را اجرا می‌کند. شما اگر یک پردازنده و یک حافظه داشته باشید که به آن وصل باشد و در آدرس مشخصی از حافظه (مثلا آدرس صفر) شروع کنید و برنامه‌ای را به صورت دودویی بنویسید (مثلا هر دستور از این برنامه می‌تواند اینجوری باشد: 1001110000111010 که یک دستور فرضی دوبایتی است و مثلا روی پردازنده‌ی اینتل باعث انجام یک عمل خاص می‌شود)، سخت‌افزار بدون نیاز به هیچ سیستم‌عاملی آن برنامه را اجرا می‌کند. در واقع رایانه‌های اولیه این‌طوری بودند و تقریبا سیستم عامل نداشتند.

منتها این کار مخصوصا برای برنامه‌هایی که از نوع خیلی کوچک نیستند خیلی سخت است! ضمنا اگر بخواهید برنامه‌های مختلفی را استفاده کنید با این کار پدرتان در می‌آید. بنابراین برای اینکه سخت‌افزار به راحتی و برای کاربران عادی نیز قابل استفاده باشد یک آدم‌های فداکاری (البته معمولا به عشق پول!) می‌آیند و با نوشتن یک سیستم عامل که کارهای نزدیک‌تر به سخت‌افزار را انجام می‌دهد و اجرای برنامه‌های مختلف و منابع (مثل منابع سخت‌افزاری مثلا ورودی/خروجی) را مدیریت می‌کند، یک لایه روی سخت‌افزار درست می‌کنند که از این به بعد شما اگر روی این لایه کارهایتان را انجام دهید فرایند تبدیل کارهای شما به همان کدهای دودویی به صورت خودکار انجام می‌شود. مثلا وقتی شما یک برنامه‌ی C را کامپایل ‌می‌کنید، کامپایلر برنامه‌ی C شما را در نهایت به همان کدهای دودویی تبدیل می‌کند که مثلا با اضافاتی می‌شود همان فایل exe در ویندوز.

بنابراین بیشتر آن فایل exe همان دستورات سخت‌افزار است و باید قاعدتا روی هر سخت‌افزاری از آن نوع (مثلا اینتل) اجرا شود، حتی اگر سیستم عامل آن ویندوز نباشد. در واقع اگر تک تک آن دستورات را نگاه کنید دستورات مجاز سخت‌افزارند. اما موضوع به همین راحتی‌ها هم نیست؛ ترکیب این دستورات مهم است. سیستم عامل‌های مختلف از روش‌های مختلفی برای همین مدیریت سخت‌افزار استفاده می‌کنند. به عنوان یک مثال خیلی خیلی ساده و غیرواقعی مثلا فرض کنید که آن فایل exe نیاز به یک تابع دارد که وقتی سیستم عامل ویندوز در حال اجراست، آن فایل در مثلا آدرس 2000 حافظه است اما همین تابع در لینوکس مثلا در آدرس 3000 حافظه است. پس در لینوکس تک‌دستور سخت‌افزاری آن به تنهایی درست است اما آدرس اشتباهی را می‌خواند و در نتیجه تابع مورد نظر فراخوانی نمی‌شود. بنابراین در حالت کلی باید هنگام کامپایل کردن برنامه‌ی C بدانید که روی چه سیستم عاملی قرار است این برنامه اجرا شود.

وقتی شما بک سیستم عامل جدید می‌نویسید باید اول در همان آدرسی که سخت‌افزار از آن‌جا شروع به اجرای برنامه می‌کند (مثلا آدرس صفر حافظه) همان طور که mehrzad007 گفت یک بارکننده‌ی راه‌انداز (Boot Loader) بگذارید که برود سیستم‌عاملتان را از لوح سخت (Hard Disk) بردارد و بگذارد توی حافظه، و بعد آن را اجرا کند.

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