اطلاعیه

Collapse
No announcement yet.

سوالاتی در مورد x86

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    سوالاتی در مورد x86

    سلام
    یه سری سوال پایه ای در معماری x86 واسم پیش اومده و میخواستم چک کنم ببینم بعضی چیزا رو درست فهمیدم یا نه...
    1-برای کار با فضای io فقط دستورات in /out یا get/put استفاده میشه؟
    2- نحوه کار memory mapped input outputs به چه صورتی هست؟ یعنی سیستم عامل چجوری به سخت افزار حالی میکنه فلان دیوایس که به فلان پورت وصل شده محلش در حافظه فلان ادرس باشه؟
    3-interupt vector table همون محلی هست که ادرس بردار وقفه های نرم افزاری توش ذخیره میشه؟ یعنی وقتی از دستور INT استفاده میشه پردازنده به این محل مراجعه میکنه؟
    4-اگه بله برنامه نویس میتونه هر ادرسی رو که میخواد در محل مربوط به هر وکتور بزاره؟
    5- وقتی bios اجرا میشه ادرس های روتین های خودش رو در این جدول قرار میده؟
    6-IRQ ها مشابه همون اینتراپت های سخت افزاری در میکروکنترلر ها هستن؟
    7-هر کدوم از این IRQ ها یه پین جدا روی پروسسور دارن؟ اعمال کردن اینها وظیفه چی هست ؟ ایا south bridge اینا رو اعمال میکنه؟
    8- هر کدوم از IRQ ها به طور ثابت مربوط به یک پورت یا دیوایس هستن یا میشه تعیین کرد مثلا فلان دیوایس ها از فلان IRQ استفاده کنن و کلا دستکاریش کرد؟
    9- چجوری تعیین میشه وقتی هر IRQ رخ داد پردازنده به کجا مراجعه کنه؟ (و ایا باید در همون فضای اینتراپت وکتور تیبل تعیین بشه؟)
    10-وقتی وقفه ای رخ میده پردازنده به طور خودکار قبل اجراش محتویات ریجیستر ها رو ذخیره میکنه؟(اگه اره کجا و چطور تعیین میشه؟)
    11-rom بایوس فقط memory mapped هست یا واقعا در اول کار محتویاتش در رم کپی میشه؟(کلا این مپ کردنش یا کپی کردنش وظیفه north bridge هست؟)
    12- پردازنده در زمان اجرا به طور خودکار از اولین خونه رم که یه int vector هست شروع میکنه و قبل از شروع پردازنده ادرس روتین های بایوس در این تیبل قرار میگیره یا اینکه پردازنده به طور خودکار از ادرس خاص rom بایوس شروع میکنه؟
    13- اگه میشه چند رفرنس در زمینه معماری IBM PC و سخت افزارش و اسمبلی و ... معرفی کنید
    با سپاس

    #2
    پاسخ : سوالاتی در مورد x86

    نوشته اصلی توسط علی علی پور ریکنده
    1-برای کار با فضای io فقط دستورات in /out یا get/put استفاده میشه؟
    2- نحوه کار memory mapped input outputs به چه صورتی هست؟ یعنی سیستم عامل چجوری به سخت افزار حالی میکنه فلان دیوایس که به فلان پورت وصل شده محلش در حافظه فلان ادرس باشه؟
    3-interupt vector table همون محلی هست که ادرس بردار وقفه های نرم افزاری توش ذخیره میشه؟ یعنی وقتی از دستور INT استفاده میشه پردازنده به این محل مراجعه میکنه؟
    4-اگه بله برنامه نویس میتونه هر ادرسی رو که میخواد در محل مربوط به هر وکتور بزاره؟
    5- وقتی bios اجرا میشه ادرس های روتین های خودش رو در این جدول قرار میده؟
    6-IRQ ها مشابه همون اینتراپت های سخت افزاری در میکروکنترلر ها هستن؟
    7-هر کدوم از این IRQ ها یه پین جدا روی پروسسور دارن؟ اعمال کردن اینها وظیفه چی هست ؟ ایا south bridge اینا رو اعمال میکنه؟
    8- هر کدوم از IRQ ها به طور ثابت مربوط به یک پورت یا دیوایس هستن یا میشه تعیین کرد مثلا فلان دیوایس ها از فلان IRQ استفاده کنن و کلا دستکاریش کرد؟
    9- چجوری تعیین میشه وقتی هر IRQ رخ داد پردازنده به کجا مراجعه کنه؟ (و ایا باید در همون فضای اینتراپت وکتور تیبل تعیین بشه؟)
    10-وقتی وقفه ای رخ میده پردازنده به طور خودکار قبل اجراش محتویات ریجیستر ها رو ذخیره میکنه؟(اگه اره کجا و چطور تعیین میشه؟)
    11-rom بایوس فقط memory mapped هست یا واقعا در اول کار محتویاتش در رم کپی میشه؟(کلا این مپ کردنش یا کپی کردنش وظیفه north bridge هست؟)
    12- پردازنده در زمان اجرا به طور خودکار از اولین خونه رم که یه int vector هست شروع میکنه و قبل از شروع پردازنده ادرس روتین های بایوس در این تیبل قرار میگیره یا اینکه پردازنده به طور خودکار از ادرس خاص rom بایوس شروع میکنه؟
    13- اگه میشه چند رفرنس در زمینه معماری IBM PC و سخت افزارش و اسمبلی و ... معرفی کنید
    با سپاس
    ۱- بله
    ۲- در این مورد مطمین نیستم ولی فکر میکنم این مسیله مخصوص PCI ها هستش. این دستگاهها به IO متصل نیستن مستقیم از فضای حافظه رم استفاده میکنن بنابراین در سیستم های ۳۲ بیتی همه ۴ گیگ فضا در اختیار کاربر قرار نمیگیره مگر اینکه هسته PAE استفاده بشه.
    ۳- هم بله هم خیر. وقفه های سخت افزاری و نرم افزاری این تو هستن. وقفه های سیستم عاملی توی مد ۳۲ و ۶۴ بیتی به صورت خاصی تعریف میشن ولی تو ۱۶ بیت من نمیدونم وقفه های سیستمی دقیقا چطوری تعریف میشن. یعنی نمیدونم تو ۱۶ بیتی اصلا وقفه نرم افزاری هست یا نه.
    ۴- برنامه نویس نه. کسی که هسته سیستم عامل رو مینویسه میتونه. شما در مد کاربر به این فضا دسترسی ندارید. هر چند که میتونید به سیستم عامل بگید برای بعضی شرایط تابع خاصی رو برای برنامه شما فراخونی کنه. البته اگر دارید برای ۸۰۸۶ برنامه مینویسید خوب بله میتونید این کار رو انجام بدید.
    ۵- در مد ۱۶ شما میتونید با بایوس تماس بگیرید. ولی جواب کلی تون خیر هست. آدرس روتین های بایوس جایی قرار نمیگیرن برای اینکه این روتین ها رو خود بایوس اجرا میکنه نه پردازنده. این جدول مال وقفه هایی است که پردازنده بهشون جواب میده نه بایوس. اون جدولی هم که گفتید اصلا برای اینترپت های بایوس نیست.
    ۶- دقیقا همون ها هستن. هر میکرو یک پردازنده داخلی داره که مثل پردازنده کامپیوتر میمونه فقط یک سری واحدهایی که خاص کامپیوتر هستند رو ندارن.
    ۷- 8086 یک پین برای این کار داره. برای اینکه بشه IRQ های مختلف رو بهش داد توسط یک آی سی خارجی، تعداد این اینتراپت ها زیاد میشن و وقتی اینتراپت رخ داد، شماره ای که این کار رو کرده روی دیتاباس توسط همین آی سی قرار میگیره در نتیجه پردازنده میفهمه کدوم اینتراپت خارجی رخ داده.
    ۸- توی بایوس میتونید بعضی هاشون رو عوض بدل کنید. بعضیهاشون هم نیاز به دستکاری سیم کشی مادر بورد داره. ولی در هر حال این کار رو نکنید چون سیستم عاملتون برای همون حالت استاندارد طراحی شده.
    ۹-بله اینها هم توسط همون وکتور مدیریت میشن
    ۱۰- بستگی به پردازنده داره. بعضی هاشون این کار رو میکنن. بعضی ها نه. ولی در هر حال اگر پردازنده این کار رو نکنه سیستم عامل براتون انجام میده.
    ۱۱- من جایی ندیدم رام بایوس در اختیار شما باشه. اگر میشه واضح تر بگید چه موردی مد نظرتونه. چون رام بایوس دلیلی نداره در اختیار پردازنده قرار بگیره.
    ۱۲- پردازنده از آدرس 7C00 شروع میکنه و اون آدرس ها رو هم سیستم عاملتون درست میکنه. در ضمن بایوس فقط در مود ۱۶ بیتی در دسترس هست. به محض اینکه به مود ۳۲ یا ۶۴ برید دیگه از بایوس خبری نیست. یعنی در سیستم های امروزی اصلا بایوس توسط سیستم عامل دیده نمیشه.
    ۱۳- http://wiki.osdev.org/Main_Page

    دیدگاه

    لطفا صبر کنید...
    X