# برنامه نویسی سطح پایین > توسعه‌ی هسته‌ی سیستم عامل >  CMD

## 1010011010

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

----------


## prpe26

CMD شل هست، یکی از لایه های سیستم عامل و اون چیزی که میبنیم یک ترمینال مجازی هست.

----------


## 1010011010

تشکر. ببخشید عجله کردم بد پرسیدم که جواب شما مبنی بر shell بودن cmd منو به یاد اطلاعات قبلیم در این زمینه انداخت که باعث میشه سوالم رو بهتر بپرسم.
در واقع آیا در لایه زیرین cmd که شل هست خبری از سیستم عامل *مجازی و* 16بیتی داس هست!؟ یا نه این فقط معادل ویندوزی *COMMAND.COM*  موجود در داس هست؟ و در واقع در پس cmd ویندوز هست بجای داس مجازی! نمیدونم سوالم رو خوب پرسیدم یا بد ولی میدونم معمولا زیبا سوال میپرسم  :لبخند گشاده!:

----------


## prpe26

شل رابطی هست که کاربر و سیستم عامل رو بهم پیونده میده (پیوندشان مبارک  :لبخند گشاده!: ) ، و CMD رابط مجازی شل Batch هست، و خبری از داس نیست!

----------


## 1010011010

پس میخواید بگید اگر مثلا با اسمبلی برای این محیط کد بزنیم دیگه خبری از وقفه های داس(!) {ببخشید مطمئن نیستم اصطلاح رو درست بکار بردم یا نه فک کنم به api های های داس مثل بایوس وقفه گفته میشه دیگه نه؟ } نیست؟
یا شاید هم به نحوی مجازی خود ویندوز وقفه های داس رو شبیه سازی میکنه و تحویل این شل میده(!)

این قسم از پرسشها دلیلش *در عمل* مبتدی بودن هست. بنده اطلاعاتی در مورد کامپیوتر از سطح پائینش (حتی سخت افزار) بگیر تا سطح بالا دارم که شاید خیلی برنامه نویس ها روحشون ازش بی خبر باشه، ولی خودم *در عمل* تقریبا یک خط هم کد نزدم! البته این افتخار نیست و دارم شروع میکنم عملگرایی را. اخه من یه وسواس عجیبی دارم تا نفهمم تا فیها خالدون کامپیوتر چی میگذره! برنامه نویسی بهم حال نمیده  :کف کرده!:

----------


## prpe26

> تا نفهمم تا فیها خالدون کامپیوتر چی میگذره! برنامه نویسی بهم حال نمیده


اشتباه بزرگتون همینه. یکی از مشکلاتی که این سبک از مطالعه به همراه داره، اشتباه گرفتن مفاهیم با هم هست که الان شما دچارش شدید. داس یک سیستم عامل ۱۶ بیتی سینگل تسک هست، در صورتی که ویندوز یک سیستم عامل ۳۲ و ۶۴ بیتی مالتی تسک. 
مطالعه در مورد ویندوز اصلا آسون نیست (چون کد بسته هست!) و بهتره که از مهندسی معکوسی که در پروژه های FreeDOS و ReactOS از داس و NT انجام شده کمک بگیرید! 
در مورد این که شل و کرنل و ... چی هست، پروژه MikeOS یک راهنمای خیلی خیلی خوب هست، بخصوص اینکه سورسهاش خط به خط توضیح دارند. 
همچنین پروژه ای مثل BYOOS که خودم درست کرده بودم میتونه کمکتون کنه. 

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

کرنل --> شل --> نرم افزار، محیط گرافیکی و ... . 

در واقع اینها لایه های سیستم عامل هستند.

----------


## pswin.pooya

> پس میخواید بگید اگر مثلا با اسمبلی برای این محیط کد بزنیم دیگه خبری از  وقفه های داس(!) {ببخشید مطمئن نیستم اصطلاح رو درست بکار بردم یا نه فک  کنم به api های های داس مثل بایوس وقفه گفته میشه دیگه نه؟ } نیست؟


داس علاوه بر وقفه های بایوس یکسری وقفه دیگه رو فراهم می کرد ( شماره 21 اگر اشتباه نکنم) که کار برنامه نویسی رو راحتر می کرد. یه حالت از API حساب میشد. این وقفه ها فقط در مود 16 بیتی (real mode) اجرا میشن. توی مد 32 بیتی (pmode) برای وقفه ها از GDT و IDT کمک گرفته میشه که باعث میشد بطور کلی نشه از وقفه های قبلی استفاده کرد.

برای همین فکر کنم یک لایه مجازی وجود داشته باشه. که 16 بیتی رو شبیه سازی کنه.





> این قسم از پرسشها دلیلش *در عمل* مبتدی بودن هست. بنده اطلاعاتی در  مورد کامپیوتر از سطح پائینش (حتی سخت افزار) بگیر تا سطح بالا دارم که  شاید خیلی برنامه نویس ها روحشون ازش بی خبر باشه، ولی خودم *در عمل*  تقریبا یک خط هم کد نزدم! البته این افتخار نیست و دارم شروع میکنم  عملگرایی را. اخه من یه وسواس عجیبی دارم تا نفهمم تا فیها خالدون کامپیوتر  چی میگذره! برنامه نویسی بهم حال نمید


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




> اونطور که دنیس ریچی در مورد سیستم عامل توضیح میده :
> 
> کرنل --> شل --> نرم افزار، محیط گرافیکی و ... .


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

----------


## 1010011010

> برای همین فکر کنم یک لایه مجازی وجود داشته باشه. که 16 بیتی رو شبیه سازی کنه.


البته یه چیزایی در این زمینه خونده بودم که فکر میکنم مفید باشه مثل موارد زیر:
Unlike COMMAND.COM, which is a DOS program, cmd.exe is a native Windows application usually running in Win32 console

و در مورد win32 console میگه:
Win32 console applications *are often mistaken* for MS-DOS applications, especially on Windows 9x and Windows Me.  However, a Win32 Console application is, virtually, just a special form  of a native Win32 application. Indeed, 32-bit Windows can run MS-DOS programs in Win32 console through the use of the NT Virtual DOS Machine 

و در مورد Win32 console Implementations در os های مختلف:
Windows 95/98/Me support is relatively poor compared to Windows NT, because the console window runs in the system virtual DOS machine and so keyboard input to a Win32 console application had to be directed to it by *conagent.exe* running in a DOS VM that are also used for real DOS applications by hooking the keyboard interrupt. conagent.exe then calls *Vcond* (which is a VxD). *Vcond*  then had to pass the keyboard input to the System VM, and then finally  to the Win32 console application. Besides performance, another problem  with this implementation is that drives that are local to a DOS VM are  not visible to a Win32 console application. *This can cause confusion.

* این جمله *This can cause confusion* آخرش منو کشته!

----------


## r00tkit

سلام



> توی مد 32 بیتی (pmode) برای وقفه ها از GDT و IDT کمک گرفته میشه که باعث میشد بطور کلی نشه از وقفه های قبلی استفاده کرد.


مد 32 بیتی نداریم( منظومر اینه که خواننده برداشت نکنه که مد اجرایی 32 بیتی داریم یا  فکر نشه که تعداد بیت به مود اجرایی سی پی یو ربط داره )  ,  protected mode دی که 16 بیتی باشه هم داریم ( دقیقا اولین باری که یه cpu حالت اجرایی PM رو تجربه کرد 16 بیتی بود ) http://en.wikipedia.org/wiki/80286

برای اجرای برنامه های real mode دی که برای داس نوشته شده بود توی ویندوز های 32 بیتی از http://en.wikipedia.org/wiki/Virtual_DOS_machine
استفاده می شه ( 64 بیت ساپورت نمی کنه )
http://en.wikipedia.org/wiki/Virtual_DOS_machine



> مطالعه در مورد ویندوز اصلا آسون نیست (چون کد بسته هست!) و بهتره که از مهندسی معکوسی که در پروژه های FreeDOS و ReactOS از داس و NT انجام شده کمک بگیرید!


زیادم کار سختی نیست :) windbg+ida-pro +Wrk+ reactos
البته بنده سورس ویندوز Xp رو دارم و مطالعه کردم +  :D

----------


## 1010011010

> windbg+ida-pro +Wrk+ reactos


تشکر. به به به r00tkit عجب اسمی انتخاب کردی استاد  :چشمک:  تو ایران برنامه نویس مد کرنل خیلی کم داریم، نه؟




> 64 بیت ساپورت نمی کنه


آهان پس فکر کنم دلیل یکی از سوالاتم رو یافتم اینکه، واسه همینه توی سیستم عامل 64 بیتی وقتی توی cmd آلت + اینتر رو میزنم fullscreen نمیشه؟ اگه اشتباه فکر نکنم!




> مد 32 بیتی نداریم( منظومر اینه که خواننده برداشت نکنه که مد اجرایی 32  بیتی داریم یا  فکر نشه که تعداد بیت به مود اجرایی سی پی یو ربط داره )  ,   protected mode دی که 16 بیتی باشه هم داریم ( دقیقا اولین باری که یه  cpu حالت اجرایی PM رو تجربه کرد 16 بیتی بود )


نه اشتباه نمی افتم من. جناب پویا از اونجایی که مفهوم 32  بیتی و protected mode در مقایسه با داس به هم گره خوردند و موضوع بحث ما داس بود شاید از این ادبیات استفاده میکنن که منه مبتدی گیج نشم. ولی جالب بود این نکته که اولین protected mode روی معماری 16 بیتی بوده، تشکر.

----------


## pswin.pooya

> مد 32 بیتی نداریم( منظومر اینه که خواننده برداشت نکنه که مد اجرایی 32  بیتی داریم یا  فکر نشه که تعداد بیت به مود اجرایی سی پی یو ربط داره )  ,   protected mode دی که 16 بیتی باشه هم داریم ( دقیقا اولین باری که یه  cpu حالت اجرایی PM رو تجربه کرد 16 بیتی بود ) http://en.wikipedia.org/wiki/80286


هر CPU خانواده x86 چند وضعیت کاری داری. خانواده c86 با مد واقعی (real mode) یا همون 16 بیتی کلاسیک شروع به کار میکنه و بعد با ست کردن ریجیسترهای CR ( ریجیسترهای کنترلی ) و تعداد از جداول میشه مد اون رو تغییر داد مثلا به 32 بیتی ( یا pmode ) و یا 64 بیتی یا long mode

خب. به غیر از مدهای اصلی مدهای میانی و ترکیبی هم وجود دارن که کمتر مورد توجه هستن. مثل virtual mode.

اما pmode از همون اول 32 بیتی هست. (یعنی زمانی که بهش سوئیچ کردین ).





> زیادم کار سختی نیست :) windbg+ida-pro +Wrk+ reactos
> البته بنده سورس ویندوز Xp رو دارم و مطالعه کردم +  :D


حتی اگر سورس رو هم داشته باشید که فکر نکنم. بازهم مطالعه ممکن نیست. سورس لینوکس که باز هست و کلی کتاب در موردش نوشته شده. با وجود کتابها هم نمیشه زیاد ازش سر در آورد ( من بهش میگم باز بسته ). یعنی سورس باز بودنش تاثیر خاصی برای من نداره  :لبخند گشاده!:  البته این قاعده شامل 99 درصد برنامه نویسها میشه اون یه درصد رو هم برای استثنا و برنامه نویسهای خود لینوکس کنار گذاشتم. واقعیش رو بخوایین حتی سورس سیستم عاملهای آموزشی هم مثل minix هم سخته. و اکثر برنامه نویسها سراغ قسمتهای اصلی این سیستم عاملها نمیرن و خیلی شاهکار کنن ماژول اینا مینویسن.





> یا  فکر نشه که تعداد بیت به مود اجرایی سی پی یو ربط داره


اتفاقا ربط هم داره. خیلی ها فکر میکنن ریز پردازنده 32 بیتی یعنی اینکه پردازنده آدرس دهی 32 بیتی میکنه یا گذرگاه آدرس 32 بیتی داره. اما همچین چیزی واقعیت نداره. در حقیقت یعنی اینکه ریز پردازنده واحد محاسبات 32 بیتی داره (ALU) پس 100 درصد بر میگرده به تعداد بیت ها. 
لازم ذکر کنم که پردازنده پنتیوم 3 یا 4 بود که با اینکه 32 بیتی نبود گذرگاه آدرس 48 بیتی داشت. 





> ولی جالب بود این نکته که اولین protected mode روی معماری 16 بیتی بوده، تشکر.


من زیاد در مورد مدهای میانی و ترکیبی کار نکردم. اما فکر نکنم 16 بیتی با مد محافظت شده داشته باشیم. مد محافظت شده. دارای 4 رینگ هست که انگار 4 لول امنیتی هستن. حالا به نواحی حافظه و وقفه ها و ... یک لول امنیتی داده میشه. مثلا میگه اگر زیر 3 بود اررور بده ( نه دقیقا ) . خب این ساختار جدید وقفه و حافظه هم با مد 16 بیتی زمان داس که از جداول وقفه استفاده میکرد به شدت در تضاد هست. من بازهم به ایده ماشین مجازی بیشتر معتقد هستم.

----------


## r00tkit

از شما دور بود  این حرفا رو بزنید و اینکه حرف های من رو این طوری متوجه بشید 



> خانواده c86 با مد واقعی (real mode) یا همون 16 بیتی کلاسیک





> د مثلا به 32 بیتی ( یا pmode ) و یا 64 بیتی یا long mode


  ۳۲ بیتی بودن یا  ۱۶  بیتی بودن ربطی به حالت اجرایی نداره  که شما  می گی  


> 32 بیتی ( یا pmode )





> اما pmode از همون اول 32 بیتی هست. (یعنی زمانی که بهش سوئیچ کردین ).


در این ادرس http://en.wikipedia.org/wiki/X86-64     قسمت Operating modes   و ستون Type of code being run از جدول یه چیزی داریم به اسم 16-bit protected mode code  حالت میانی هم نیست 

من نمی دونم شما چطور حالت اجرایی cpu  رو به Default address size و Default operand size ربط می دین 




> اتفاقا ربط هم داره. خیلی ها فکر میکنن ریز پردازنده 32 بیتی یعنی اینکه پردازنده آدرس دهی 32 بیتی میکنه یا گذرگاه آدرس 32 بیتی داره. اما همچین چیزی واقعیت نداره. در حقیقت یعنی اینکه ریز پردازنده واحد محاسبات 32 بیتی داره (ALU) پس 100 درصد بر میگرده به تعداد بیت ها. 
> لازم ذکر کنم که پردازنده پنتیوم 3 یا 4 بود که با اینکه 32 بیتی نبود گذرگاه آدرس 48 بیتی داشت.


الان این چیزا که گفتین چه ربطی به حرف من که گفتم ؛تعداد بیت ها ادرس دهی یا دستور عمل ربطی به مود اجرایی cpu ندارد  ؛  داره ؟ 
متن  من رو تیکه تیکه نکنید




> حتی اگر سورس رو هم داشته باشید که فکر نکنم. بازهم مطالعه ممکن نیست. سورس لینوکس که باز هست و کلی کتاب در موردش نوشته شده. با وجود کتابها هم نمیشه زیاد ازش سر در آورد ( من بهش میگم باز بسته ). یعنی سورس باز بودنش تاثیر خاصی برای من نداره  البته این قاعده شامل 99 درصد برنامه نویسها میشه اون یه درصد رو هم برای استثنا و برنامه نویسهای خود لینوکس کنار گذاشتم. واقعیش رو بخوایین حتی سورس سیستم عاملهای آموزشی هم مثل minix هم سخته. و اکثر برنامه نویسها سراغ قسمتهای اصلی این سیستم عاملها نمیرن و خیلی شاهکار کنن ماژول اینا مینویسن.


نخیر برادر من لازم نیست فکر کنید این جور مواقع سرچ می کنن   سورس ویندوز ۲۰۰۰ لیک شد  سورس ویندوز xp هم  به اهداف اموزشی به یه سری توی دنیا داده می شه که به لطف یکی من هم دارمش 

سورس ویندوز ۲۰۰۰ 



> On or shortly before February 12, 2004, "portions of the Microsoft Windows 2000 and Windows NT 4.0 source code were illegally made available on the Internet."[32] The source of the leak remains unannounced. Microsoft issued the following statement:


اینم سورس کرنل xp :
https://www.facultyresourcecenter.co...&c1=en-us&c2=0

مطالعه و یاد گیری این سورسا هم برای   طی  ۴ -۵ ساله به صورت فول تایم  برای کسی که تخصصی کارش  نوشتن درایور برای ویندوزه سخت نیست 




> من زیاد در مورد مدهای میانی و ترکیبی کار نکردم. اما فکر نکنم 16 بیتی با مد محافظت شده داشته باشیم


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



> در این ادرس http://en.wikipedia.org/wiki/X86-64     قسمت Operating modes   و ستون Type of code being run از جدول یه چیزی داریم به اسم 16-bit protected mode code  حالت میانی هم نیست


در اخر هم سایر دوستان بخونن از inprise :

https://barnamenevis.org/showthread.p...6%D8%AF-%D8%9F

یکی دقیقا همین اشتباه رو کرده و در جواب گرفته :



> . قبل از انتقال به Protected Mode ( که تو به غلط اون رو محیط "32 بیتی" توصیف کردی )

----------


## ssbostan

باسلام،
کاملا جناب r00tkit درست میگن. حالت های اجرایی real-mode و protected-mode هیچ ربطی به 16بیت یا 32بیت بودن ندارن.
برای دسترسی به حافظه بیشتر در پردازنده های 80286 به بعد باید A20 رو فعال کرد چراکه خطوط 20 به بعد به صورت پیشفرض برای ایجاد سازگاری با پردازنده های 8086 در این پردازنده ها غیر فعال هستند و برای دسترسی به حافظه بیشتر باید توسط برنامه نویس فعال شوند.

موفق باشید.

----------


## prpe26

> حتی اگر سورس رو هم داشته باشید که فکر نکنم. بازهم مطالعه ممکن نیست. سورس  لینوکس که باز هست و کلی کتاب در موردش نوشته شده. با وجود کتابها هم  نمیشه زیاد ازش سر در آورد ( من بهش میگم باز بسته ). یعنی سورس باز بودنش  تاثیر خاصی برای من نداره   البته این قاعده شامل 99 درصد برنامه نویسها میشه اون یه درصد رو هم برای  استثنا و برنامه نویسهای خود لینوکس کنار گذاشتم. واقعیش رو بخوایین حتی  سورس سیستم عاملهای آموزشی هم مثل minix هم سخته. و اکثر برنامه نویسها  سراغ قسمتهای اصلی این سیستم عاملها نمیرن و خیلی شاهکار کنن ماژول اینا  مینویسن.


چرا ممکن نیست؟ یکی از مشکلات سیستم عاملهای متن باز / مهندسی معکوس شده اینه که حجم کدهاشون خیلی زیاده! لینوکس رو بی هیچ چیز اضافه (مثل ماژولهای مرتبط با گرافیک و ... ) حدودا ۱۵ میلیون خط میشه. 
در مورد مینیکس، فقط کافیه سورس رو داشته باشید، توی گروه minix.comp.os عضو بشید و کتاب رو هم بعنوان مرجع استفاده کنید. اگرچه توصیه من اینه که چون از User Space مربوط به NetBSD استفاده میکنه، قبلش سورسهای NetBSD و OpenBSD رو مورد مطالعه قرار بدید. اینطوری هیچ ابهامی توی سورسها نخواهید داشت!

----------


## pswin.pooya

> برای دسترسی به حافظه بیشتر در پردازنده های 80286 به بعد باید A20 رو فعال  کرد چراکه خطوط 20 به بعد به صورت پیشفرض برای ایجاد سازگاری با پردازنده  های 8086 در این پردازنده ها غیر فعال هستند و برای دسترسی به حافظه بیشتر  باید توسط برنامه نویس فعال شوند.


شما هم همون اشتباه رو که من میگم دارین می کنید. اصلا تعداد بیت به آدرس دهی و اندازه اون ربط نداره. من الان با لینوکس ۳۲ بیتی بالا اومدم اما ۸ گیگ رم دارم و همش هم در دسترس هست. ۳۲ بیتی بودن ۱۰۰ درصد مربوط به ریز پردازنده هست ( فقط واحد گذر داده و محاسبات ) و ۱۰۰ درصد به آدرس دهی ربطی نداره. گفتم در مورد ۳۲ بیتی با همون pmode هم میتونید تا ۴۸ بیت آدرس دهی کنید و یا حتی خیلی از پردازنده های ۶۴ بیت هم گذرگاه آدرس ۶۴ بیتی ندارن و کمتر هست.

یه الحاقی به اسم PAE هست که این امکان رو میده که در مود ۳۲ بیتی بتونید تا ۲ بتوان 48 بیت آدرس دهی کنید. ( مثل همون A20 در مد ۱۶ بیتی)

اگر شما از ثباتهای توسعه یافته مثل EAX و یا طولانی مثل RAX در مد واقعی (real mode) استفاده کنید نتیجه اون کرش هست که در مد ۳۲ بیتی باعث GPF میشه که دستور شناسایی نشده. 

متاسفانه این ۳۲ و ۶۴ بیتی بودن یه اشتباه خیلی رایج هست که مابین برنامه نویسها و کاربرهای عادی مرسوم شده. در لینک زیر جدول ۳.۱ رو نگاه کنید با اینکه پردازنده پنتیوم ۳ سی و دو  بیتی است اما تا ۶۴ گیگ میتونه آدرس دهی کنه:
http://www.quepublishing.com/article...82324&seqNum=3




> چرا ممکن نیست؟ یکی از مشکلات سیستم عاملهای متن باز / مهندسی معکوس شده  اینه که حجم کدهاشون خیلی زیاده! لینوکس رو بی هیچ چیز اضافه (مثل ماژولهای  مرتبط با گرافیک و ... ) حدودا ۱۵ میلیون خط میشه. 
> در مورد مینیکس، فقط کافیه سورس رو داشته باشید، توی گروه minix.comp.os  عضو بشید و کتاب رو هم بعنوان مرجع استفاده کنید. اگرچه توصیه من اینه که  چون از User Space مربوط به NetBSD استفاده میکنه، قبلش سورسهای NetBSD و  OpenBSD رو مورد مطالعه قرار بدید. اینطوری هیچ ابهامی توی سورسها نخواهید  داشت!


واقعا دلم میخواد بدونم. تا حالا حتی خودت سعی کردی سورس رو نگاه کنی و یا از روش الگو برداری؟!! بردار من واقعا تغییر قسمتهای حساس سورس مثل زمانبند و ... از عهده ۹۹ درصد برنامه نویسها خارجه اون یک درصد رو هم محض احتیاط گفتم. مطمئن باش با کتاب و اینا هم نمیشه. من خودم دو باز کتاب مینیکس رو از اول خوندم و دوباره هم دارم میخونم.

نوشتن سیستم عامل از اول به مراتب ساده تر از تغییر سیستم عاملهایی مثل لینوکس هست ( در مورد هسته )





> اگرچه توصیه من اینه که چون از User Space مربوط به NetBSD استفاده میکنه،  قبلش سورسهای NetBSD و OpenBSD رو مورد مطالعه قرار بدید. اینطوری هیچ  ابهامی توی سورسها نخواهید داشت!


user space به فضای حافظه کاربرها توی سیستم اشاره میشه که از کرنل جداست. اینی که شما مد نظرتون هست. احتمالا برنامه های کاربردیه که از هر لیسانسی و سیستم عاملی داخلش هست

----------


## ssbostan

در مورد لینوکس که گفتید، بله هسته لینوکس PAE رو ساپورت میکنه و PAE در پردازنده های 32بیتی میتونه تا 36بیت آدرس فیزیکی رو پشتیبانی کنه که این یعنی 64گیگابایت حافظه اما آدرس مجازی تغییری نمیکنه و هر پردازه به بیش از 4گیگابایت حافظه بیشتر دسترسی نداره و این نکته قابل ذکر هست که هرچی تعداد بیت بالا بره و از تکنولوژی های جدیدتر بخوایم صحبت کنیم، مباحث پیچیده تر میشه.

وقتی سیستم در حالت عادی و بدون انجام هیچ تنظیماتی بوت میشه، شما در حالت اجرایی real-mode و به 16بیت خطوط آدرس دسترسی دارید.
حالا یا A20 رو فعال میکنید و به خطوط بیشتری دسترسی پیدا میکنید یا نه و این نکته قابل گفتن هست که شما وقتی وارد protected-mode میشید باید حتما A20 رو فعال کنید چراکه در غیر این صورت با مشکل آدرس فیزیکی روبرو میشید. اما لازم نیست برای دسترسی به خطوط آدرس 24بیتی در پردازنده های 80286 یا 32بیتی در پردازنده های 80386 حتما به حالت protected-mode برید چراکه بحث حالت اجرایی و خطوط آدرس دوتا چیز جدا از هم هستند.

در مورد بحثی هم که مطرح کردید باید به آدرس دهی فیزیکی و مجازی رجوع کنیم.
مثلا در حالت آدرس دهی سگمنت:آفست در پردازنده 8086 شما 32بیت رو مشخص میکنید اما در نهایت این 32بیت میشه آدرس فیزیکی 20بیتی و همچنین در پردازنده 80286 به آدرس فیزیکی 24بیتی تبدیل میشه. شما در حالت مجازی حافظه رو هر طوری شاید ببینید اما بعد که فیزیکی شد بسته به خطوط آدرس هست.

موفق باشید.

----------


## prpe26

> واقعا دلم میخواد بدونم. تا حالا حتی خودت سعی کردی سورس رو نگاه کنی و یا  از روش الگو برداری؟!! بردار من واقعا تغییر قسمتهای حساس سورس مثل زمانبند  و ... از عهده ۹۹ درصد برنامه نویسها خارجه اون یک درصد رو هم محض احتیاط  گفتم. مطمئن باش با کتاب و اینا هم نمیشه. من خودم دو باز کتاب مینیکس رو  از اول خوندم و دوباره هم دارم میخونم.


اگر یک مقدار خودخواهی اون ۹۹٪ کم بشه و برن سراغ گروه های گوگل، کانالهای IRC و ... و سوالشون رو بپرسن، از عهده اونها هم بر خواهد آمد!




> user space به فضای حافظه کاربرها توی سیستم اشاره میشه که از کرنل جداست.  اینی که شما مد نظرتون هست. احتمالا برنامه های کاربردیه که از هر لیسانسی  و سیستم عاملی داخلش هست


همونطور که الان لینوکس هسته و گنو بخش سمت کاربر Userland سیستم عامل هست، مینیکس هم همینطوره. فی الواقع با چیزی مثل NetBSD/Minix روبرو هستیم. الان شما توی مینیکس به pkgsrc دسترسی دارید و میتونید تقریبا هرچیزی که توی مخازن pkgin نیست رو نصب کنید (حتی نسخه ۳.۱۰ گنوم!)

----------


## pswin.pooya

> همونطور که الان لینوکس هسته و گنو بخش سمت کاربر Userland سیستم عامل هست،


خوبه حداقل از user space به user land رسیدیم. بگذریم از اینکه user land هم یه اصطلاحه. باز خوبه نرمش قهرمانانه انجام داید  :لبخند گشاده!: 




> در مورد لینوکس که گفتید، بله هسته لینوکس PAE رو ساپورت میکنه و PAE در  پردازنده های 32بیتی میتونه تا 36بیت آدرس فیزیکی رو پشتیبانی کنه که این  یعنی 64گیگابایت حافظه اما آدرس مجازی تغییری نمیکنه و هر پردازه به بیش از  4گیگابایت حافظه بیشتر دسترسی نداره و این نکته قابل ذکر هست که هرچی  تعداد بیت بالا بره و از تکنولوژی های جدیدتر بخوایم صحبت کنیم، مباحث  پیچیده تر میشه.


خب من کم کم دارم به نتیجه میرسم که جفتمون هم داریم یه چیز رو میگیم. فقط PAE با یزرگ کردن اندازه صفحه کار میکنه. به شکلی که هر صفحه به جای ۴ کیلوبایت اندازه اون ۶ مگابایت میشه (بیت granularity در GDT‌). بخاطر همین هست که اگر ریز پردازنده در حالت آدرس دهی خطی باشه نمی تونه بیشتر از چهار گیگابایت آدرس دهی کنه و هر فرایند ( نه پردازنده. - اشتباهی process رو پردازنده ترجمه کردی) نمی تونه بیشتر از چهار گیگابایت آدرس دهی کنه. اما سیستم عامل که صفحه ها رو مپ میکنه. میتونه به آدرسهای بیشتر از چهار گیگ هم دسترسی پیدا کنه. (یا بهتره بگیم مپ کنه ).

کلا من بحثم نحوه آدرس دهی نیست. میگم آدرس دهی رو با pmode و یا a20 و ... رو با اون اشتباه نگیرید. اینها کلا معقوله های جدا هستن. pmode کلا آدرس دهی پایه ۳۲ بیتی داره اما دلیل اینکه بهش میگن ۳۲ بیتی اون واحد لعنتی ALU هست که امروز ۳ بار بهش اشاره کردم. یعنی اگر مثلا ALU  128 بیتی یود. اون موقعه میگفتن مد ۱۲۸ بیتی. 

من به این گفته اعتراض داشتم و دارم



> مد 32 بیتی نداریم( منظومر اینه که خواننده برداشت نکنه که مد اجرایی 32  بیتی داریم یا  فکر نشه که تعداد بیت به مود اجرایی سی پی یو ربط داره )  ,   protected mode دی که 16 بیتی باشه هم داریم


مساله اینه که pmode کلا نشانه ۳۲ بیتی هست. و اینکه از ۳۲ بیتی دوبازه سوئیچ کنی به ۱۶ تا مثلا virtual و اینا برسی دلیل نمیشه که بازهم تو pmode هستی. یا pmode شانزده بیتی داریم.

----------


## pswin.pooya

> https://www.facultyresourcecenter.co...&c1=en-us&c2=0


این الان سورس ویندوز xp بود؟!!!




> مطالعه و یاد گیری این سورسا هم برای   طی  ۴ -۵ ساله به صورت فول تایم   برای کسی که تخصصی کارش  نوشتن درایور برای ویندوزه سخت نیست


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




> در اخر هم سایر دوستان بخونن از inprise :


خب ایشون هم همین اشتباه رو کرده  :لبخند گشاده!: . همچین گفتی من فکر کردم intel اعتراف کرده.


شاید من واقعا من نمی کشم مثل دوستان rootkit یا prepe باهوش باشم از سورسهای ویندوز لینوکس و مینیکس سر در بیارم. اما خب با توجه به این وضعیت باهوشی خودم زیاد فشار نمیارم و خیال بافی نمی کنم و سعی میکنم به جای مطالعه ۵ ساله سورس کدها، به صورت تفریحی تو ۵ سال os خودم رو بنویسم. (شاید تو هفته هم کمتر از ۲ ساعت وقت بذارم ). اما چیزی رو که میگم البته که سرچ کردم اما قبل از گفتنش پیاده سازی هم کردم. فکر میکنم بقیه هم مثل من لا اقل پیاده سازی میکردن و نه مثل بعضیهای دیگه اسمها رو تغییر میدادن الان میتونستیم جلوتر باشیم.

----------


## ssbostan

متن ترجمه شده نیست!!!! نوشتم پردازه نه پردازنده!!!

درسته، بحث pmode اصلا ربطی به آدرس دهی نداره و بنده هم عرض کردم که شما وقتی وارد pmode میشید باید حتما از تمام خطوط آدرس استفاده کنید، چون تو این مد اجرایی باید تمامی خطوط فعال باشند و مورد استفاده قرار بگیرند اما بدون رفتن به pmode هم میشه از تمام خطوط استفاده کرد و کافی هست که A20 رو فعال کنیم.
این حرف که پایه pmode 32bit هست رو تایید نمیکنم و بهتره بگیم در حالت pmode باید تمامی خطوط آدرس مورد استفاده قرار بگیره چون pmode 24bit هم داریم.

چیزی که شما در مورد ALU دارید میگید مربوط به اندازه گذرگاه داده هست.

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

موفق باشید.

----------


## pswin.pooya

> متن ترجمه شده نیست!!!! نوشتم پردازه نه پردازنده!!!


شرمنده عذر میخوام




> این حرف که پایه pmode 32bit هست رو تایید نمیکنم و بهتره بگیم در حالت  pmode باید تمامی خطوط آدرس مورد استفاده قرار بگیره چون pmode 24bit هم  داریم.


امکان داره پردازنده داشته باشیم که ۲۴ بیت آدرس دهی کنه و pmode داشته باشه. اما مساله اینه که دستورهای pmode ( ISA) برای ۳۲ بیت طراحی شدن. حالا میتونه خطوط آدرس دهی بیتشر باشه یا نه.




> چیزی که شما در مورد ALU دارید میگید مربوط به اندازه گذرگاه داده هست.


نه اصلا
مسیر گذر داده با گذرگاه داده ( data bus) فرق داره. بیشتر بر میگرده به اینکه واحد محاسبات در معماری SISD ( و نه SIMD ) میتونه حداکثر مثلا چه رقمهایی از نظر بیتی رو باهم جمع کنه. (که مثلا ۳۲ تا در pmode هست ). گذرگاه داده الان سالیان سال هست که ۶۴ بیتیه (فکر کنم از زمان پنتیوم ۳ که حتی ۶۴ بیتی وجود هم نداشت. )
چیزی که شما در مورد ALU دارید میگید مربوط به اندازه گذرگاه داده هست. یک کتاب خوب برای مطالعه پردازنده ها که برای برنامه نویسهای سیستمی واقعا الزامی هست کتاب طراحی و معماری و سازمان کامپیوتر نوشته پترسون هست. که توسط دکتر ملکیان و ذاکر الحسینی به خوبی ترجمه شده. ( جز معدود ترجمه های خوب در ایران است). این کتاب بسیاری از این مساپل رو باز میکنه و اشتباهات خیلی زیادی رو که اکثر کاربرها درگیرش هستن اصلاح میکنه.




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


موردی نداره. شما هم مثل منی.  از ما بهترون سردرمیارن  :لبخند گشاده!: 

سورس واقعا پیچیده هست. نه تنها من و شما حتی برنامه نویسهای بزرگ هم که سالیان ساله با این سیستم عامل سروکله میزنن سر در نمیارن مخصوصا از ۲.۴ به بعد که لینوکس  تغییرات زیادی کرد. اگر به ویرایشهای اولیه مثل یک و ... نگاه کنید باز رونتر هستن. 

بدتر از همه اینه که هر موقع بخوای متوجه بشی و مطالعه کنی ویرایش جدید و جدید میاد و باز هم از قافله عقبی. پس به نظر من بهتره که به جای تعقیب تکنولوژی، تکنولوژی خودت رو داشته باشی. (هر چند cutting edge نباشه). این شبیه همون قضیه هکرهاست. همیشه باید منتظر برنامه نویسها باشند تا برنامه بنویسن و بعد اینا وارد عمل شن. مثل اینکه هیچ چیزی از خودشون ندارن

----------


## ssbostan

منظورتون رو اینطور متوجه شدم:
منظور شما این هست که در حالت real-mode شما دسترسی به ثبات های 32بیتی ندارید که کاملا درست هست و در نتیجه از توان کامل ALU نمیشه استفاده کرد و بعد از ورود به حالت protected-mode شما قادر به استفاده از ثبات های 32بیتی هستید.

اما موضوع جالب این هست که در حالت real-mode هم میشه از ثبات های 32بیتی استفاده کرد که به اون حالت، حالت unreal-mode یا big real-mode گفته میشه.

موفق باشید.

----------


## pswin.pooya

> منظور شما این هست که در حالت real-mode شما دسترسی به ثبات های 32بیتی  ندارید که کاملا درست هست و در نتیجه از توان کامل ALU نمیشه استفاده کرد و  بعد از ورود به حالت protected-mode شما قادر به استفاده از ثبات های  32بیتی هستید.


آره. از نظر ساختاری این مدها تفاوتهای زیادی رو دارن. اولیه ترین تفاونها همون gdt، ldt و idt هست.

یه چیزی هم جالبه اشاره کنم ( زیاد به بحث مرتبط نیست ). این قضیه مدها برای حفظ سازگاری با مدلهای قدیمی و برنامه های قدیمی گذاشته شده که در عین حال که مزیت به شمار میاد یه dis-advantage هم هست. این قضیه باعث پیچیدگی شدید پردازنده های اینتل شده. و افزایش ترانزیستورها. نتیجه اون هم قیمت بیشتر، گرمای بیشتر، انرژی بیشتر و در عین حال نرخ رشد کمتر است. مثلا توی ISA دستورالعملهای اینتل از دستوری با طول یک بایت تا ۱۵ بایت ( یا کلمه‌ دقیقا یادم نیست) وجود داره. در حالی که معماری های دیگه مثل ARM ماکزیمم ۲ کلمه ( 8 بایت‌)  دستورالعمل داریم و یا تعداد دستور العملهای ARM زیر ۵۰ تاست در حالی که مال مثلا corei7 بیشتر ۱۰۰۰ تا میشه. همین تفاوتهاست که باعث شده cpuهای گوشی و تبلت ARM باشن و خنک کننده نداشته باشن و ... 




> اما موضوع جالب این هست که در حالت real-mode هم میشه از ثبات های 32بیتی  استفاده کرد که به اون حالت، حالت unreal-mode یا big real-mode گفته میشه.


مساله اینه  که اینها real-mode نیستند. مدهای دیگه هستن. البته big real-mode همون unreal هست. تا اونجا هم که یادم میاد برای سوپیچ به این مدها باید ابتدا به pmode سوپیچ کنید و بعد دوباره برگردین به real mode ( فکر کنم همون اولها حدود 2009 یا 2008 بود که در مورد اونها مطالعه داشتم).

----------


## prpe26

> خوبه حداقل از user space به user land رسیدیم. بگذریم از اینکه user land هم یه اصطلاحه. باز خوبه نرمش قهرمانانه انجام داید


من سیستمم اینه  :لبخند گشاده!: 

باز خوبه اینجا با افرادی روبرو نیستم که همه چیز رو به خودشون بگیرن، چون از استفاده از این سیستم خیلی ضرر کردم  :لبخند گشاده!:

----------


## ssbostan

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

درسته، برای رفتن به unreal-mode باید اول به protected-mode رفت و بعد از لود مجددا به real-mode برگشت.

----------


## pswin.pooya

سلام
الان کتاب X86 ISA از ماید شیر رو نگاه می کردم. نوشته که در مدهای ۶۴ بیتی امکان استفاده از مد VM86 وجود نداره ( مدی که برنامه های داس توش اجرا میشن. ).(صفحه 24 کتاب‌)

 پس شاید ویندوز از VM86 برای اجرای برنامه های داس استفاده میکرده.

----------


## ssbostan

در خانواده Windows NT یک بخش تحت عنوان NTVDM وجود داره که کار شبیه سازی روالهای bios و dos رو انجام میده که خوده این بخش 32بیتی هست و به برنامه های 16بیتی سرویس میده و به اینصورت برنامه های داس رو میشه در ویندوز اجرا کرد.



موفق باشید.

----------


## 1010011010

> حتی اگر سورس رو هم داشته باشید که فکر نکنم. بازهم مطالعه ممکن نیست. سورس  لینوکس که باز هست و کلی کتاب در موردش نوشته شده. با وجود کتابها هم  نمیشه زیاد ازش سر در آورد ( من بهش میگم باز بسته ). یعنی سورس باز بودنش  تاثیر خاصی برای من نداره   البته این قاعده شامل 99 درصد برنامه نویسها میشه اون یه درصد رو هم برای  استثنا و برنامه نویسهای خود لینوکس کنار گذاشتم. واقعیش رو بخوایین حتی  سورس سیستم عاملهای آموزشی هم مثل minix هم سخته. و اکثر برنامه نویسها  سراغ قسمتهای اصلی این سیستم عاملها نمیرن و خیلی شاهکار کنن ماژول اینا  مینویسن.


_ببخشید شاید مبتدیانه ابراز نظر کنم از نظر شما ولی نظر من مبتدی اینه:_
اصولا من پی پردم مطالعه حتی سورس نرم افزارهای نرمال، سخت که چه عرض کنم، شق القمر کردنه *امّا، به جز، مگر اینکه* نویسنده یا *نویسندگان!* کد مربوطه یا اقلا شاگرداشون! بالاسرت باشن و *روش حل مسئله ایی* که بکار بردن رو توضیح بدن (ناگفته نماند حتما باید بالاسرت باشن وگرنه کتاب و این حرفا بیشتر شبیه به جوک هست در مفهوم رسانی در این زمینه!)
چرا به این نتیجه رسیدم؟ بنده به عنوان یک فیلسوف معاصر(!) میدانم هر مسئله ایی هزار راه برای حل کردن داره و هر انسانی به طریق خودش حل مسئله میکنه. و وقتی شما داری بدون خود اون شخص الگوریتمش رو مطالعه میکنی حین مطالعه یه حالت معلق بودن و داری تا اینکه با هزار تلاش به ته ماجرا برسی تازه بفهمی اوه این منظورش این بوده.

بد یه سوالی من دارم از شما چرا اینقدر اصرار دارین سورس سیستم عامل ها رو مطالعه کنین؟ چرا بجاش تکنولوژی های سیستم های عامل رو مطالعه نکنین؟ مثلا خود من تا حالا زیاد به سورس سیستم عامل ها خیره نشدم ولی زیاد در مورد تکنولوژی های سیستم های عامل خوندم! مثلا بدون اینکه سورسی رو مطالعه کنم میدونم که مثلا scheduler چیه از چه راهایی استفاده میکنه یا نمیدونم یا مفهوم صف فلان جا استفاده میشه لیست پیوندی اونجا استفاده میشه!
*در کل بی پــیر طی طریقت کردن در سورس لینوکس (با کتاب!!!) عذاب دادن خود هست بنظر من*




> نخیر برادر من لازم نیست فکر کنید این جور مواقع سرچ می کنن


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




> مطالعه و یاد گیری این سورسا هم برای   طی  ۴ -۵ ساله به صورت فول تایم   برای کسی که تخصصی کارش  نوشتن درایور برای ویندوزه سخت نیست


تعریف سخت چیه استاد از نظر شما؟  :متفکر:  مثلا میگن یاد گیری یه زبان مثل چینی سخته، درست؟ غیر از اینه که  چهار یا پنج ساله میشه یادش گرفت؟ سخت بودن مترادف غیرممکن بودن که نیست.




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


هرچی میکشیم از دست همین گوگل میکشیم دیگه. *مورد داشتیم طرف* تو خیابون میپرسه ساعت چنده؟ میگه گوگل که در اختیار شماست  :لبخند گشاده!:   باباااااااا درسته من آدم سخت کوشی هستم ولی گوگل کردن هم فسفر مغز میسوزونه ها ناسلامتی.  :بامزه: 






> نوشتن سیستم عامل از اول به مراتب ساده تر از تغییر سیستم عاملهایی مثل لینوکس هست ( در مورد هسته )


این مثل گفته خودمه که هزار تا راه حل واسه حل یه مسئله وجود داره. آدم تنها در صورتی میتونی لینوکس تغییر بده که استادی داشته باشه که لینوکس رو درک کرده باشه خفن. کلا بنظر من کلا برنامه نویسی ساده تر از برنامه خونی هست.




> در خانواده Windows NT یک بخش تحت عنوان NTVDM وجود داره که کار شبیه سازی  روالهای bios و dos رو انجام میده که خوده این بخش 32بیتی هست و به برنامه  های 16بیتی سرویس میده و به اینصورت برنامه های داس رو میشه در ویندوز اجرا  کرد.


تشکر که یکی پیدا شد سوالات ماروهم تحویل گرفت.




> خوبه حداقل از user space به user land رسیدیم. بگذریم از اینکه user land هم یه اصطلاحه. باز خوبه نرمش قهرمانانه انجام داید


*نرمش قهرمانانه یعنی چی؟*

----------


## r00tkit

> تشکر که یکی پیدا شد سوالات ماروهم تحویل گرفت.


من قبلا جواب داده بودم 



> برای اجرای برنامه های real mode دی که برای داس نوشته شده بود توی ویندوز های 32 بیتی از http://en.wikipedia.org/wiki/Virtual_DOS_machine
> استفاده می شه ( 64 بیت ساپورت نمی کنه )
> http://en.wikipedia.org/wiki/Virtual_DOS_machine






> این الان سورس ویندوز xp بود؟!!!


حداقل وارد لینک بشین و توضیحات رو بخونید که چی نوشته 





> *The Windows Research Kernel (WRK)* packages core *Microsoft Windows XP x64/Server 2003 SP1 kernel source code* with an environment for building and testing experimental versions of the Windows kernel for use in teaching and research.

----------


## pswin.pooya

> مثلا خود من تا حالا زیاد به سورس سیستم عامل ها خیره نشدم ولی زیاد در مورد تکنولوژی های سیستم های عامل خوندم


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





> *نرمش قهرمانانه یعنی چی؟*


یعنی همون  :لبخند گشاده!:  که برداشت کردی

----------


## 1010011010

> من قبلا جواب داده بودم


اوه ببخشید اینقد حجم جواب ها زیاد شده بود یادم رفت. البته NTVDM رو بنده گوگل نکردم فکر کردم از virtual doc machine جداست، ببخشید حرفم رو راجع به گوگل پس میگیرم! الان گوگلش کردم دیدم همون virtual doc machine هستش  :اشتباه:  البته ایشون گفتن"  NTVDM  وجود داره که کار شبیه سازی روالهای bios و dos رو انجام میده" در واقع توضیح در ادامه در مورد سوال بنده در مورد وقفه یا روال ها مربوط بود که باعث شد کافی بدونم و گوگل نکنم. *و اینکه الان پیشوند NT داره:
*
*NTVDM is a system component of all IA-32 editions of Windows NT family which allows execution of 16-bit Windows and DOS applications*




> حداقل وارد لینک بشین و توضیحات رو بخونید که چی نوشته


ببخشید توی این لینک نوشته * Faculty Only Material*؟ منظورش چیه، چطوری faculty بشیم حالا ؟  :لبخند:

----------


## 1010011010

> متاسفانه بعضی وقتها جواب نمیده. مثلا توی تعریف سمافور میگه باید توابع  اتمیک باشن. من الان نزدیک 1.5 ساله دارم به اتمیک بودن همین توابع سروکله  میزنم. پیاده سازی مفاهیمی که توی کتابها هست و ... هست خیلی مشکلتر هست.  برای همین سورس کدهای مرجع میتونه کمک کنه.


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

----------


## habibb

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


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

----------


## prpe26

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


برای اینکه شل سیستم عامله! مثلا توی لینوکس هم همین منواله!

----------


## habibb

> برای اینکه شل سیستم عامله! مثلا توی لینوکس هم همین منواله!


من هیچی نمی دونم اینم اولین پستم توی این تالاره بیشتر توضیح بدین یا لینک هایی بدین مطالعه کنم
بعد یعنی تمام نرم افزار ها بلا استثنا اول با CMD اجرا میشن ! کد اجرائیش چه شکلیه!
من سرعت کامپیوترم خیلی اومده پایین و دیگه آخرای عمرش محض همین گاهی وقتا قبل اجرای برنامه ها CMD رو می تونم ببینم!
متشکرم


////////////////////////////////////////////////
ی سوال دیگه هم داشتم چند وقته که نمی تونم توی CMD تایپ کنم و فقط کلید های ماشین حسابی کار می کنه
چه جوری درستش کنم؟ نمی دونم چرو اینجوری شده.!

----------


## prpe26

در مورد اون قسمت قرمز رنگ بگم «ویندوزه دیگه!» یعنی هیچ جوابی غیر از این ندارم براش  :لبخند گشاده!: 

ببینید شل دستور رو از کاربر میگیره (ورود متنی مثل CMD یا گرافیکی مثل کلیک کردن) و بعد هرچی که لازم داره اون برنامه برای اجرا شدن رو صدا میکنه و به کاربر نشون میده. 

در واقع شل گارسون، کاربر یک مشتری گرسنه ( :لبخند گشاده!: ) و سیستم عامل رستوران هست (بخوام ساده توضیح بدم!)

----------


## pswin.pooya

سلام

شل میتونه کلا وجود نداشته باشه ( هر چند که خیلی غیر معمول هست اما خب هستند مواردی که شل وجود نداره )




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


اگه اشتباه نکنم دلیلش وقفه 21 و دستورهایی هست که این برنامه تعریف میکنه. به هر حال دیفالت داس اینه که اول شل اجرا شه.




> در واقع شل گارسون، کاربر یک مشتری گرسنه () و سیستم عامل رستوران هست (بخوام ساده توضیح بدم!)


مثال جالب بود

----------

