# برنامه نویسی سطح پایین > توسعه‌ی هسته‌ی سیستم عامل > گفتگو: شروع به همکاری

## yassersajjadi

سلام 
خیلی وقته دارم روی ساخت یه سیستم عامل کار میکنم 
تاحالا هم خوب پیش رفتم ، ولی خب طراحی سیستم عامل به تنهایی کار دشواریه ، و کار خیلی کند پیش میره
افراد زیادی واسه این دارن تلاش میکنن ، فکر میکنم اگه با هم کار کنیم ، به نتایج بهتری برسیم
البته نظرم به افرادی که تو این زمینه کار میکنن برمیگرده
حالا اگه کسی تمایل داشت به من ایمیل بزنه تا با هم کارو پیش ببریم 
yassersajjadi@gmail.com

انتقاد قبول نمیکنم ولی به پیشنهادات گوش میدم کسی دوست داشت میتونه نظرم بده

----------


## m.j_banitaba

سلام.
این هم کاری یعنی توسعه سیستمی که شما نوشتید؟ 
بعدشم هر مطلبی هست همین جا مطرح بشه تا همه استفاده کنن.
به نظر من برای انجام کار اونم گروهی باید چند تا چیز رو مطرح کرد 
1- هدف از انجام کار.
2-منافعی که هر کسی در اون کار کسب می کنه .
3-تعاریف دقیق در انجام هر بخش.
مثلا قرار  یک سیستم از ابتدا نوشته بشه؟ به کدام زبان ؟تحت چه استانداردهایی؟با کدام کامپایلر ؟محصول تحت چه license قرار میگیره؟ ایا توسعه اون به لینوکس ختم می شه ؟ قرار طرح جدیدی داده بشه؟

----------


## yassersajjadi

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

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

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

این تایپیک هم بحث در مورد موضوعاتیه که شما گفتین و اون چیزایی که در ذهن بقیه دوستانی که میخوان همکاری کنن ، تا به هدف معین و مشخصی برسیم و کار رو شروع کنیم

----------


## m.j_banitaba

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

----------


## yassersajjadi

بله درسته ، خوانا بودن و مستند سازی مهم هستند ، بدون بخش بندی هم کاری پیش نمیره ، ولی باید اول افرادی که توانایی لازمو دارند اعلام حضور کنن تا بتونیم با هم تصمیم بگیریم و به بخش بندی بپردازیم

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

بوت لودر بخش مهمی از کار هست ولی برای سرعت بیشتر کار نظرم اینه که به ابزار گراب اکتفا کنیم تا بعدها با فرصت بیشتر و شناسایی درخواست ها از بوت لودر ، و کارایی ان برای ما , بتونیم یه بوت لودر کارا معرفی کنیم

به هر حال چیزی که از همه مهم تره اعلام حضور دوستان هست

----------


## pswin.pooya

سلام دوستان

دوستان اگر نظر من رو بخوایید، اول از همه یه کرنل لازم داریم که کاملا abstract باشه. حتی بیشر از لینوکس و یونیکس به عنوان مثال Plan 9  سیستم شبکه رو هم abstract کرده و بقیه موارد مثل درایور و ... رو میشه با ماژولها و استاندارد مولتی بوت کنترلشون کرد.


در مورد سیستم فایل ساختار لینوکس و یا بهتر بگم یونیکس واقعا عالیه اما باید یکسری مانورهای دیگه روشون داد که بهتر هم کار کنن. مثلا باز همون plan9 یه ساختار union directory اضافه کرده که باعث میشه اگر فایل داخل فایل سیستم فعلی نباشه از یک سرور دیگه بصورت اتوماتیک انتقال پیدا کنه که یه جور سیستم توزیع شده حساب میشه. 

مهم اینه که ایده های جدید دنبال و پیاده سازی بشن. 

من خودم بیشتر تاکیدم روی embedded سیستم ها هست. یعنی هسته های کوچیکی برای میکرو کنترلرها و یا همون x86 تولید بشه که به کار صنایع بیاد و نه یه سیستم عامل رومیزی

----------


## sigmaos

با سلام من یک سیستم عامل با اسمبلی نوشتم 

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

www.sigmaos.blogfa.com

----------


## yassersajjadi

> من خودم بیشتر تاکیدم روی embedded سیستم ها هست. یعنی هسته های کوچیکی برای میکرو کنترلرها و یا همون x86 تولید بشه که به کار صنایع بیاد و نه یه سیستم عامل رومیزی


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

----------


## pswin.pooya

> اول باید از تمامی ابعاد این پردازنده ها اگاه باشم تا بتونیم برای صنعت  قدمی برداریم ، دستیابی به منابع در هر سیستمی میتونه متفاوت باشه و در کل  گستره خیلی زیادی داره و نیاز به یه سیستم عامل خیلی قوی هست که بتونه با  هر نوع دستگاهی ارتباط برقرار کنه مگه اینکه سیستم خاصی مد نظر باشه که روی  اون کار کنیم


دقیقا حق با شماست من تقریبا حدود 7، ماه هست که دارم روی پردازندهای آرم هم کار می کنم که شانس بیشتری برای صنعت نسبت به x86 دارن. به همین شکل میخوام روی FPGA و امثال اون هم کار کنم.





> با سلام من یک سیستم عامل با اسمبلی نوشتم


لطفا تاپیک جدید ایجاد کنید و مستنداتی برای سیستم عاملتون عرضه کنید.

----------


## brightening-eyes

سلام
یه چیزی که باید مد نظر باشه و خیلیا اصلا راجع بهش حتی یه ثانیه فکرم نمیکنن یه اینستالر خیلی قویه که یوزر بتونه سیستم عامل رو نصب کنه
همینطور اگه ما بخوایم یه سیستم عامل برا میکرو کنترلر بنویسیم باید تمام سی پی یوهایی که میخوایم باهاشون رابطه برقرار کنیم رو باید کاملا بشناسیم
یه چیز دیگه که هست و اونم رابط کاربری مناسبه
ویندوز فقط به خاطر رابط کاربریش معروف شد.
از همه ی اینا گذشته یه سایت باید برا سیستم عاملمون بنویسیم
آقایون با وبلاگ نمیشه راجع به سیستم عامل تبلیغ کرد
همینطور اگه ما میخوایم سیستم عامل بنویسیم باید حتما یه جوری بتونیم کدایی که مینویسیم رو به  هم بدیم
به علاوه grub یه بوت لودر خیلی قویه
و اینکه وقتی میتونه کارمونو راه بندازه چرا خودمون بشینیم بوت لودر بنویسیم؟
یه چیز دیگه که هست اسم سیستم عامله
خیلی زایست مثلا بزاریم ExampleOS
اینطور نیست؟
ما میخوایم نوآوری کنیم
نه اینکه تکرارو دوباره تکرار کنیم
یه نکته دیگه اینه که هر چی API بیشتر باشه باحالتره
اینو دیگه همه میدونن
یکی دیگه از قابلیتهای ویندوز که معروفش کرد همینه که یه چیز حدود 15000 تا تابع API داره
حالا از استروکچراش بگزریم
سیستم عامل باید خیلی خیلی سریع باشه
یعنی اگه نباشه اسمش سیستم عامل نیست!
دلیلشم اینه که بتونه سخت افزارو خیلی خوب کنترل کنه
اینو همتون بهتر از من میدونین!
سخنرانی بسه!
خلاصه هر کی میخواد یه پروژه سیستم عامل شروع کنه باید آماده باشه

----------


## pswin.pooya

> یه چیزی که باید مد نظر باشه و خیلیا اصلا راجع بهش حتی یه ثانیه فکرم  نمیکنن یه اینستالر خیلی قویه که یوزر بتونه سیستم عامل رو نصب کنه


الان معمولا نصاب ها همون هسته خود سیستم عامل هستند که در یک تصویر قرار دارن. و نصاب خودش برناهمه همون سیستم عامله





> همینطور اگه ما بخوایم یه سیستم عامل برا میکرو کنترلر بنویسیم باید تمام  سی پی یوهایی که میخوایم باهاشون رابطه برقرار کنیم رو باید کاملا بشناسیم


حق با شماست تقریبا زمانی که سیستم عامل مینویسی باید حتما اینجوری باشه





> یه چیز دیگه که هست و اونم رابط کاربری مناسبه
> ویندوز فقط به خاطر رابط کاربریش معروف شد.


معمولا سیستم های embedded رابط کاربری ندارن یا حداقل در سطح گرافیکی




> و اینکه وقتی میتونه کارمونو راه بندازه چرا خودمون بشینیم بوت لودر بنویسیم؟


واقعیتش اینه که من یه زمانی اینکار رو کردم بعدش دیدم x86 اینقدر استثناء و ... داره که نمیشه جمع کرد و باید کلی مطالعه کنم و بعد از اون متوجه شدم که دارم کرنل می نویسم نه بوت لودر پس بهتره اگر وقت اضافه آوردم شروع کنم.




> یه نکته دیگه اینه که هر چی API بیشتر باشه باحالتره


از یه نظر حرف شما درسته اما از یه جنبه دیگر مشکلات زیادی رو از جمله سختر کردن کار با سیستم عامل و توسعه نرم افزار رو به همراه داره. من واقعیتش مد نظرم هست که API سیستم عامل کم باشه بجاش کتابخونه ها زیاد باشن. مثلا دیگه API ای به اسم GetTime نباشه در عوض زمان داخل یه فایل نگهداری بشه و یا یه API برای خودندن CD نباشه در عوض خود cdrom هم یه فایل باشهو توی این حالت کاربر هرکاری که میخواد انجام بده رو میتونه با یادگیری کنترل فایلها انجام بده.





> یکی دیگه از قابلیتهای ویندوز که معروفش کرد همینه که یه چیز حدود 15000 تا تابع API داره


متاسفانه دقیقا مشکل همیجاست
API های ختلف یعنی باگ بیشتر ، یادگیری سختر و ... . دقت کنید کمتر کسی رو پیدا می کنید که با win32 API مستقیما  برنامه بنویسه و همه دارن از کتابخونه هایی استفاده میکنن که روی این API نوشته شده اما داخل لینوکس و یا یونیکس این شکلی نیست. 




> خیلی زایست مثلا بزاریم ExampleOS


کاملا حق با شماست که یه سیستم عامل رو کپی پست کنیم و اسمش رو تغییر بدیم و بگیم این کار ماست.

----------


## brightening-eyes

خوب pswin عزیز
حرف شما راجع به API درست
ولی اینکه اون فایل لعنتی هی باید آپ تو دیت بشه؟
پس یوزر چه جوری میتونه ساعت و دیت و اینجور مخلفات رو تغییر بده؟
اما اینکه همه چی رو نمیشه تو shell بچپونی
اینطور نیست؟
پس یوزرهای مبتدی چی میشن؟
بعدشم چند خط باید کد نوشته بشه که یوزر مثلا کانکت بشه به اینترنت؟
حالا اصلا تو یه خط کانکت شد فکر اینو باید بکنیم که چه جوری طرف میخواد بره پیج ببینه و یا اینکه یه فایل دانلود و یا آپلود کنه؟
اما راجع به API
شما خودت جای مایکروسافت بودی چی کار میکردی؟
شما یه کنترل رو میتونی تو یه فایل بریزی؟
فکر کن یه نفر میخواد برنامه هاشو بفروشه
آیا باید کد رجیستر رو بزاره تو یه فایل تا همه نرم افزارو بدزدن؟
یا تنظیمات رجیستری که هر کس بلد نیست؟
فکر کنین حالا یه کد باینری تو رجیستری ست میشه توسط یه نرم افزار فروشی
خوب احتمال دسترسی به نرم افزار تا چه حد میره بالا؟
اون وقت با چه سرعتی فکر میکنی نرم افزار هک میشه؟
از نرم افزار بگذریم
فکر کنین طرف یه پسورد Encrypt شده رو ست کرده تو یه نرم افزار که از فایل استفاده میکنه
خوب اون فایل خیلی خیلی راحت دست هکر میفته و دیگه تمومه
ولی من نمیگم باید اونقدر API داشته باشه که هیشکی نتونه یاد بگیره
هر چی جای خود دارد!
راجع به لایسنس:
اگه سیستم عامل تجاری باشه که مطمئن باشین کسی نمیخره
اما اگه اوپن سورس باشه کپی رایت میره زیر سوال
خیلی راحت یکی سیستم عاملو تغییر میده و به اسم خودش به بقیه میده
خوب زحمت ما چی میشه؟
در ضمن اگه سیستم عامل ما رابط کاربری نداشته باشه فاطحش خوندست
مخصوصا برا کاربرای مبتدی
همه که بلد نیستن از shell استفاده کنن!
به علاوه اگه ما میخوایم بهتر هم بشه باید اول از همه امکان پشتیبانی از custem devices که دیوایسهای دیگه غیر از موس و کیبورد و اینجور مخلفات باشنو فراهم کنیم که باید اینارم خیلی خیلی خوب بشناسیم
اینطور نیست؟

----------


## m.j_banitaba

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

----------


## pswin.pooya

> ولی اینکه اون فایل لعنتی هی باید آپ تو دیت بشه؟


فابل فقط یه دیدگاه انتزائی از یه موجودیت هست. در حقیقت محتویات فایل میتونه یه ساختار داده در حافظه باشه که شاخه /proc داخل لینوکس هم اینجوری هست. اگر شما داخل فایل بنویسی در حقیقت زمان رو تغییر دادی. این یه انعطاف پذیری دیگه رو هم بهت میده که میتونی مجوزهای لازم برای هر مورد سیستم رو فقط به یوزر خاصی بدی. مثلا فقط یوزر x از واحد زمانشانسی کشوری اجازه تغییر زمان سیستم ها رو داره.




> اما اینکه همه چی رو نمیشه تو shell بچپونی


اصلا بحث شل از این موضوع جداست. اما چه اشکالی داره که هر اطلاعاتی که یوزر لازم داره رو هم بتونه بدون کمک برنامه از طریق شل راحت بدست بیاره؟




> بعدشم چند خط باید کد نوشته بشه که یوزر مثلا کانکت بشه به اینترنت؟


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




> آیا باید کد رجیستر رو بزاره تو یه فایل تا همه نرم افزارو بدزدن؟
> یا تنظیمات رجیستری که هر کس بلد نیست؟
> فکر کنین حالا یه کد باینری تو رجیستری ست میشه توسط یه نرم افزار فروشی
> خوب احتمال دسترسی به نرم افزار تا چه حد میره بالا؟


خب ببینید برای کسی که میخواد برنامه رو هک کنه ریجیستری با فایل فرقی نداره. اما حالا فرض کن که مجوز خوندن فایل رو فقط یه یوزر داره و اون یوزر هم تحت اختیار برنامه هست. ایجوری به غیر از root کسی دیگه ای نمی تونه و امکان نداره که بتونه فایل رو بخونه. اما بطور کا کلا قضیه امنیت با این مبحث فرق داره




> فکر کنین طرف یه پسورد Encrypt شده رو ست کرده تو یه نرم افزار که از فایل استفاده میکنه
> خوب اون فایل خیلی خیلی راحت دست هکر میفته و دیگه تمومه


بازم مثل مورد بالا، پسوردهای لینوکسی الان سالیان سال هست که در فایل /etc/shadow نگهداری میشن. اما به غیر از روت که ادمین سیستم هست. حتی بقیه کاربرها نمی تونن این فایل رو بخونن. حالا بگذریم که بخوان دیکدش هم بکنن. معمولا چه این نوع رمزنگارهای استفاده شده کلید دوطرفه اینا داره خیلی خیلی باز کردنشون سخت و بعضا جزء محالات میشه





> در ضمن اگه سیستم عامل ما رابط کاربری نداشته باشه فاطحش خوندست
> مخصوصا برا کاربرای مبتدی


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






> به علاوه اگه ما میخوایم بهتر هم بشه باید اول از همه امکان پشتیبانی از  custem devices که دیوایسهای دیگه غیر از موس و کیبورد و اینجور مخلفات  باشنو فراهم کنیم که باید اینارم خیلی خیلی خوب بشناسیم


خب اینها هم با ماژولها که یه جور برنامه هستن حل میشه. در حقیقت هر دیوایس درایور باید چند تا تابع از جمله read، write او اینها رو فراهم کنه. حالا هرکس خواست از فایل اون دیوایس بخونه هسته این توابع رو صدا میزنه و بعدش درایور با سخت افزار ارتباط برقرار می کنه. و بعد ....




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


مواردی که شما میفرماید هم هست. اما مساله اینه که ما فعلا خود تکنولوژی رو نداریم چه برسه به اینکه بخواییم در موردش ایده بدیم

----------


## m.j_banitaba

> اما مساله اینه که ما فعلا خود تکنولوژی رو نداریم چه برسه به اینکه بخواییم در موردش ایده بدیم


منظور من هم همینه با الان نقطه صفریم در نقطه صفر در باره دو مطلب بحث میشه قدم اول جهت حرکت البته این جهت حرکته که قدم اول رو تعیین میکنه پس اول باید جهت رو مشخص کرد.
به کدامین سو؟ :متفکر:

----------


## brightening-eyes

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

----------


## yassersajjadi

سلام به همه دوستان

خب خیلی در مورد نحوه ارتباط با سیستم بحث شده

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

کار با سیستم و دیوایس ها هم نظرم اینه که از فایل های ایکس ام ال در یک محیط بسته استفاده بشه و اگه یه زمانی هم وارد بعد گرافیکی بشیم از فایل های css استفاده کنیم

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

در کل یه استاندارد سازی جدید بر خلاف استاندارد های فعلی

----------


## brightening-eyes

فکر کنم بتونیم از TinyXML استفاده کنیم
نمیدونم (تا حالا تو کداش دستکاری نکردم) که این لعنتی از چه توابعی استفاده میکنه!
آقایون برین
اینجا
دان کنین ببینین غضیش چیه؟
خودمون ننویسیم
من که حالشو ندارم برم سر کتابخونه
راجع به فایل css
یه سری محدودیتهای خیلی خفن داره
نظر من اینه به جاش از xml استفاده کنیم
چون یه چیز خیلی خیلی قویه
و اینکه آقایون:
expat هم برا c هست:
با اجازتون سایتشو ندارم
از devpak نصب کردم.

----------


## pswin.pooya

بحث گرافیک رو بزارین برای آخر کار. من با tinyxml کار کردم  و میدونم چه جوری هم کار میکنه. منتها الان وقت کار روی انجور چیزا نیست.

----------


## brightening-eyes

خوب الآن باید به کرنلمون فکر کنیم!
اینکه چه جوری بتونه ساپورت کنه
حالا از چی؟
از همه چی

----------


## yassersajjadi

آقای شاهین فر درست میگن , از الان خیلی زوده راجع به گرافیک بخوایم نظر بدیم , بحث تخصیص حافظه و نخ ها و پروسس ها اهمیت ویژه ای دارین و همچنین درایور ها

ولی باید بدونیم توابع باید تحت چه شرایطی تعریف بشن

----------


## Jarvis

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

----------


## pswin.pooya

من دقیقا چیزی که تو ذهنم هست این شکلیه (البته کامل پخته نیست )

من همچی کرنلم میخوام مبتنی بر فایل باشه حتی پردازنده و داریورها و شبکه. 

هر فایل از چند دستور اصلی پشتیبانی میکنه:

1. خواندن read
2. نوشتن - write
3. عملیات IO (ioctl
4. open
5. close

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

یا شما مثلا یک فایل در مسیر /net/tcp با اسم 999 باز میکنید. حالا به کمک ioctl اون رو روی کلاینت میذارید. به این شکل در گاه 999 با پروتکل tcp/ip در اختیار شما گذاشته میشه. و شما می تونید عملیاتی مثل خوندن و نوشتن رو انجام بدید. کارهای به غیر از خوندن و نوشتن توسط ioctl کنترل میشن. مثلا برای cdrom میشه به eject کردن cd اشاره کرد. 

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

چه مزیاتهایی داره:

پردازنده ها:
1. فرض کنیدفقط به یوزر x میخواید اجازه بدید تنها از یک هسته سیستم استفاده کنه و یا مثلا یه هسته در اختیار کارهایی مثل رایانش ابری باشه و بقیه در اختیار کاربر. 
2. فرض کنید به علت سنگین بودن سیستم می خوایید یه فرایند رو سریع از طریق ترمینال انتقال بدید به یه کامپیوتر دیگه

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

مورد بعدی راحتر شدن کارهای سیستمی هست. به عنوان مثال اگر ram هم فایل باشه زمان hibernate خیلی راحت می تونید با باز کردن فایل محتویات اون رو بخونید و بریز توی فایل و بعد از اون سیستم رو خاموش کنید. برای اینکار هم یه ioctl می فرستید برای فایل مثلا acpi.

----------


## brightening-eyes

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

----------


## yassersajjadi

سلام دوستان

با توجه به بحثی که شد ما از تعریف اولین تابع نیاز به سیستم فایلی بر حسب فایل داریم که حتی console ها رو هم در فایل ایجاد کنیم تا حتی بتونیم یه تابع مثل printf داشته باشیم و تعریف درایور مربوطه

یعنی اولین کار پیاده سازی سیستم فایله , دیوایس ها هم احتمالا باید در سیستم فایل تعریف بشن ، بعد توابع ساده ای مثل نوشتن در فایل ، بعد توصیفگرها و GDT , IDT اینتراپت ها و تخصیص حافظه ، بعد درایور های ارتباط با انواع پورت ها ، و بعد پیاده سازی مولتی تسکینگ و تصحیح تخصیص حافظه برای این فاز از کار اونطور که متوجه شدم 

چندتا سوال:
1- دیوایس ها باید در سیستم فایل تعریف بشن یا ساختاری مشابه براشون تعریف کنیم؟
2-malloc , free جاشون با fs->open , fs->close پر میشه؟
3- ما یک سیستم فایل یک پارچه داریم یا هر قسمت سیستم فایل مربوط به خودشو داره و ما فقط اونها رو با هم ارتباط میدیم

----------


## brightening-eyes

جواب سوالا
البته از نظر من
1. تموم دیوایسا تو یه فایل شکل فایل ini تعریف بشن
2. malloc و free باشن فرقی نمیکنه
ولی با fs_open و fs_close هم بشه مموری رو کنترل کرد.
3. اگه ارتباط بدیم فکر کنم بهتر باشه
آخه هر کدوم خوبیها و همینطور بدیهای خودشونو دارن.
در ضمن:
امکان encrypt هم بزاریم.
و یه سری از فایلارو مثل کنترل کننده ی مموری رو از دسترسی حتی یوزر روت خارج کنیم.

----------


## pswin.pooya

سلام




> با توجه به بحثی که شد ما از تعریف اولین تابع نیاز به سیستم فایلی بر حسب  فایل داریم که حتی console ها رو هم در فایل ایجاد کنیم تا حتی بتونیم یه  تابع مثل printf داشته باشیم و تعریف درایور مربوطه


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





> 1- دیوایس ها باید در سیستم فایل تعریف بشن یا ساختاری مشابه براشون تعریف کنیم؟


دیوایسها همین الان هم توی سیستم های مبتنی بر یونیکس فایل هستن که در شاخه /dev قرار دارن. با دستور ll و یا ls -l داخل این شاخه می تونید شماره major رو مشاهده کنید که بیانگر درایور هست و شماره minor که بیانگر شماره دیوایس هست. 

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





> 2-malloc , free جاشون با fs->open , fs->close پر میشه؟


اینها نوابع مربوط به کتابخونه C run time هستن و باید باشن. حالا مهم نیست که چه شکلی پیاده سازی میشن. منتها اینکه خود حافظه هیپ هم یه فایل باشه در لینوکس همچین چیزی هم تقریبا وجود داره. مثلا اگر فرایندی با شماره 2345 داشته باشیم شاخه /proc/2345 اطلاعات اون فرایند رو نگهداری میکنه.





> 3- ما یک سیستم فایل یک پارچه داریم یا هر قسمت سیستم فایل مربوط به خودشو داره و ما فقط اونها رو با هم ارتباط میدیم


یه سیستم فایل کاملا یکپارچه  انتزائی وجود داره که هر فایل یا دایرکتوری (یا تعدادی از اونها) کنترلر خاص خودشون رو دارن. مثلا یه کنترلر از پورت سریال میخونه،  یکی دیگه از روی هارد دیتا رو بر میداره و یا یکی محتویات یه struct خاص داخل هسته رو میخونه





> 1. تموم دیوایسا تو یه فایل شکل فایل ini تعریف بشن


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





> امکان encrypt هم بزاریم.


اینجور مسائل رو میشه با redirect کردن کنترل کرد (مثلا به کمک پایپ ها). البته نمدونم چرا این قضیه اینقدرها هم برای من Ok نیست. شاید دید خوبی بهش ندارم.

هدف از فایل بیس کردن سیستم اینه که کل سیستم رو بشه با یه چیزی شبیه به سیستم های مبتنی بر کامپوننت اداره کرد. مثلا شما به خروچی استاندارد رو redirct میکنن روی tty پس اطلاعات میره توی ترمینال یا اینکه میفرستین به /dev/nulll اون موقع اطلاعات خروجی کلا نابود میشه و ....

----------


## pswin.pooya

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

f: فایل عادی
d: دایرکتوری
s: سوکت
p: پایپ نام دار
b: فایلهای بلوکی
c: فایلهای کاراکتری
l: فایلهای نمادین (symbolic)

برای مطالعه بیشتر می تونید :
http://www.linuxnix.com/2010/02/file...-in-linux.html

از طرف دیگه در پشت صحنه هم یه ساختار بسیار پیچیده قرار داره:
http://www.tldp.org/LDP/tlk/fs/filesystem.html
http://www.tldp.org/LDP/lki/lki-3.html

خب حالا کاری باید کرد اینه:

1. آشنایی با سستم های فایلهای سیستم عاملهای معروف
2. ببینیم چه کاری باهاشون نمیشه کرد و اون رو چه شکلی میشه داخل سیستم عاماتون بیارید.

متاسفانه این روند بسیار وقت گیر و پیچیده وسخت هست. منتهای کار آخر اون یا به نتیجه دلخواهتون میریسید یا حداقل کلی چیز یاد می گیرید که روی نگرش نرم افزاریتون به شدت تاثیر میذاره.

----------


## yassersajjadi

من فکر میکردم منظور از فایل یه ساختار انتزاعی هست !

----------


## pswin.pooya

> من فکر میکردم منظور از فایل یه ساختار انتزاعی هست !


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

----------


## yassersajjadi

خب منظور منم همینه ، که روی رسانه ما فایلی نداریم و فقط یه ساختار باید طراحی کنیم ، ما اگه بخوایم سیستم فایل لینوکس رو کپی کنیم و اونو تغییر بدیم در حقیقت فقط اونو بسط دادیم ، بهتر نیست یه سیستم فایل طراحی بشه که از تمام پیچ و خمش سر در بیاریم ، سیستم فایل لینوکس خیلی پراکندست و به راحتی قابل برسی نیست شاید یک سال زمان بخواد؟

----------


## brightening-eyes

مگه شما نمیخواین یه نوآوری کنین؟
خیل خوب چه ربطی به لینوکس داره
دیگه نباید etc, proc, tmp, var و اینجور چیزا توش باشه
به علاوه شما میتونین فایل سیستمارو هم با C Runtime که همون fopen, fclose و اینجور دستورا باشه بخونین
در ضمن همه چی رو نمیشه تو چندتا دونه فایل جا کرد.
به علاوه
 باید یه ساختار طراحی کنیم
تا با لینوکس فرق کنه.

----------


## pswin.pooya

> دیگه نباید etc, proc, tmp, var و اینجور چیزا توش باشه


اینی که شما میگی نو آوری ایرانیه، چه ربطی داره؟ باید دید در مرحله اول این دایرکتوری ها دقیقا چی هستند؟ چه کارهایی باهاشون نمیشه کرد؟ چه شکلی میشه اینها رو بهبود داد و یا چه ایده ای میشه داد که بهتر از این باشه. حالا من صرفا اینها رو حذف کنم یا دایرکتوری جید بذارم شد نو آوری




> به علاوه شما میتونین فایل سیستمارو هم با C Runtime که همون fopen, fclose و اینجور دستورا باشه بخونین


اینها توابع کتابخونه ای هستند. به CRT ربطی نداردن.




> در ضمن همه چی رو نمیشه تو چندتا دونه فایل جا کرد.


ما همه چی رو نمی خواییم. ولی می تونید مثال نقض بزنید؟




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


این ساختار لینوکسی نیست و یونیکسی هست که سالهای یال که جواب داده و بخوبی کار میکنه. نمونه از سیستم عاملهای با این ساختار عبارتند از:

1. mac os x
2. andriod
3. ios
4. linux
5. bsd

و ....

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


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

----------


## brightening-eyes

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

----------


## pswin.pooya

> اولا یه نوع جویستیک نداریم که
> در ثانی فرض کنین رفت توی یه فایل
> اگه دسته عوض بشه و یکی دیگه جاش بیاد چی؟
> مثلا دسته سوخت و طرف یکی دیگه خرید.
> خوب باید با فایل مذکور چی کار کنیم؟


خب شما اصلا تجربه کار با این سیستم ها رو دارید؟

در مرحله اول باید بگم که معمولا وقتی داریوری یا دستگاهی اضافه میشه حالا درایور هرچی میخواد باشه یه فایل مشخص داخل دایرکتوری /dev ایجاد میشه. مثلا برای هارد دیسک اول hda برای دوم hdb و ....
و .... به همین شکل ماوس و کی بورد و جی استیک که همه گی رابطهای استاندارد هستند اضافه میشن. حالا فرض کنید که یه API شبیه ویندوز دارید. برای گرفتن دکمه کی بورد یک تابع دارید که می تونه توی همون لحظه چک کنه و یا اینکه میتونید از صف پیام ویندوز استفاده کنید. هر دو حالت یه مشکل اصاصی دارن و اونم اینه که اگر خواستید یه کی برد دیگه و یا دستگاه کی برد دار دیگه بذارید ورودی ها بهم میریزه. یعنی نمی دونید از کدوم کی برد داره برای شما داده میاد. نمونه های بارز ایجور دستگاها بارکد ریدر، دستگاهای RFID و ... هستند. 

مشکلات اینجوریه:
1. ورودی نا مشخص هست.
2. همه کی برد ها تحت تاثیر هم قرار می گیرند: مثلا می خواید Alt+F4 رو از کار بندازید اما فقط روی کی برد مشتری و نه سرپرست.
3. ....

اما اگر بصورت فایل مجرا میدیرت شن چه قابلیتهای رو دارید؟
1. می تونید از کی برد خاصی بخونید. مثلا زمانی که داده از بارکد ریدر اومد فقط یه فیلد خاص پر شه
2. می تونید داده های یه کی برد خاص رو فیلتر کنید. مثلا زمانی که کی برد کاربر در دستگاهیی مثل ATM دکمه x رو زد هیج اتفاقی نیافته اما کی برد کاربر سرپرست کارکنه.
3. چندین کی برد داشته باشین. مثلا داخل یه نرم افزار پزشکی می تونید یه num pad بذارین که طرف شماره تلفن خودش رو وارد کنه و در عین حال اپراتور بقیه فیلدها.

خواهش می کنم قبل از اینکه چیزی رو رد کنید و یا نظری در موردش بدید مطالعه کنید.

----------


## Mousavmousab

دوستان دیگه ادامه نمی دین چی شد؟
من منتظر بحث های شما هستم.
بدرود

----------


## m.j_banitaba

> دوستان دیگه ادامه نمی دین چی شد؟
> من منتظر بحث های شما هستم.


این سوال رو از روی کنجکاوی می کنم چرا خود شما نظز نمی دی ؟ نظری نداری؟ دید نداری ؟ تجربه نداری؟ اگه جواب این سوالها مثبت باشه به نظر من نکته اصلی همینه تعداد کمی هستن که متخصص این کار باشن و وقتشونو بیان به این شکل بذارن از طرفی اونایی که علاقه دارن اونقدر تجربه برنامه نویسی ندارن . به نظر من ابتدا باید یک سیستم آموزشی راه انداخت.در صورتی که جواب این سوالها منفی ابتدا یک آمار گرفته بشه تا اونایی آمادگی دارن ،اونایی که متوسطن ، اونایی که فقط علاقه دارن ،... تعدادشون معلوم بشه بفهمیم چند چندیم؟

----------


## yassersajjadi

سلام مجدد به همه دوستان گرامی
یه چند وقتی داشتم روی کد های VX6  کندوکاو میکردم خیلی حرفه ای نوشته شده حتما ببینیدش اگه ندیدین ولی  مشکلاتی هم داره کدش هم زیاد پیچیده نیست

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

منتظر نظر شما هستم

----------


## sigmaos

دعوت به همکاری برای ساخت GUI

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

----------


## zh00bin

اقا این کار به کجا رسید منم هستم اگر هنوز ادامه داره

----------


## mrcoder01

> با سلام من یک سیستم عامل با اسمبلی نوشتم 
> 
> اگه مایل هستید آنرا دانلود کنید 
> 
> www.sigmaos.blogfa.com




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

----------


## mrcoder01

اقا من هستم
09305165115
mrcoder01@yahoo.com
تلگرام-واتس اپ
اسکایپ : teamboxweb

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

----------

