نمایش نتایج 1 تا 6 از 6

نام تاپیک: In و out

  1. #1

    In و out

    درود
    من چند تا سوال بهم مرتبط دارم یجا مطرح میکنم

    اول این که دستورات in و out جزو دستورات اصلی خود پردازنده است؟مثل mov ؟

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

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

  2. #2

    نقل قول: In و out

    نقل قول نوشته شده توسط MAHDI.D.H.F مشاهده تاپیک
    درود
    من چند تا سوال بهم مرتبط دارم یجا مطرح میکنم

    اول این که دستورات in و out جزو دستورات اصلی خود پردازنده است؟مثل mov ؟
    بله.

    نقل قول نوشته شده توسط MAHDI.D.H.F مشاهده تاپیک
    بعد این که وقفه ها چه وقفه بایوس و چه داس چه هر سیستم عامل دیگه ای خودشون منجر به پرش به یه سری روتین میشه.درسته؟حالا این کدهای وقفه ها که ورودی و خروجی ها مثل موس و کیبورد و کارت صدا و ...رو کنترل میکنن،خودشون در نهایت از in و out تشکیل شدن؟
    بله. البته الزاما از In و Out تشکیل نشدن، از In و Out استفاده میشه ولی در نظر بگیرید که همه تبادل داده های بین سخت افزار های جانبی و پردازنده از طریق In و Out نیست.
    یکی از روش های ارتباط و نبادل داده بین سخت افزار جانبی و پردازنده Map شدن روی حافظه RAM ئه، مثلا بخشی از حافظه RAM که پردازنده بصورت عادی هم بهش دسترسی داره داده های کارت گرافیکی رو Mapping می کنه و اگه پردازنده بخواد تصویر روی نمایشگر رو تغییر بده، داده داخل اون بخش از حافظه RAM رو با MOV و ... تغییر میده، الزاما OUT نمی کنه.

    نقل قول نوشته شده توسط MAHDI.D.H.F مشاهده تاپیک
    و اگه این درسته یعنی میشه هر ورودی و خروجی بدون استفاده از هرگونه وقفه با همین in و out کنترل کرد؟البته میدونم این کار اصلا به صرفه نیست فقط میخوام ببینم تو عمل شدنیه یا نه؟
    بله، اما یکسری اگر و اما هست، اولا در هر سیستم عاملی نمیشه مستقیما با سخت افزار از طریق In و Out کار کرد، فرضا در ویندوز برنامه عادی اجازه تبادل داده مستقیم با سخت افزار رو نداره و باید از درایور استفاده کنه.
    در ضمن یکسری In و Out ها با سخت افزار هایی ارتباط دارند که وضعیت ارتباطی شون به flip flop وابسته است که یک بحث سخت افزاری ئه. اگر کاری رو بدون هماهنگی با وقفه های مرتبط و بصورت مستقیم از طریق In و Out انجام بدید و همزمان وقفه مرتبط ای رخ بده، تغییر وضعیت flip flop باعث تداخل و ارسال فرمان یا داده اشتباه میشه.
    البته اغلب وقفه ها رو می توانید موقتا و برای لحظه کوتاهی غیر فعال کنید، اما اونم نه در هر سیستم عاملی.
    استفاده از وقفه ها این مزیت رو داره که تضمین می کنه تداخلی بین درخواست ها پیش نیاد.
    از طرف دیگه هر سخت افزاری مشخصات کاملا منحصر بفرد خودش رو داره، ممکنه حتی مستندات لازم برای فرمان های In و Out اش رو بصورت عمومی منتشر نکرده باشه، لذا اگر بخواهید برای سخت افزار فلان کد نویسی کنید، هم پیدا کردن مستندات فنی لازم ممکنه خیلی سخت باشه و هم احتمال زیادی هست که با مدل دیگری از همون سخت افزار بخوبی سازگار نباشه.

  3. #3

    نقل قول: In و out

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

  4. #4

    نقل قول: In و out

    نقل قول نوشته شده توسط MAHDI.D.H.F مشاهده تاپیک
    و یک سوال دیگه
    وقتی دستگاه ورودی فرضا هشت بیت رو توی پورت مینویسه،این هشت بیت توی پورت باقی میمونه و وقتی از in استفاده میکنیم اخرین هشت بیتی که توی پورت نوشته شده رو میخونه یا این که هر پورت یه حافظه بافر داره و باقی داستان؟
    نه. هر سخت افزاری برای هر پورتی که بهش مربوطه مشخصات و قاعده خاص خودش رو داره، موردی که مثال زدید قطعا برای یکسری موارد درسته، اما فقط یکی از این شرایط ئه، همیشه اینطوری نیست.
    ممکنه حتی یک پورت فقط برای خواندن یا فقط برای نوشتن باشه و مقداری که در جهت معکوس نوشته یا خونده میشه مقداری همیشه ثابت یا تصادفی و در کل بی ربط باشه.
    ممکنه مقداری که در یک پورت نوشته میشه فقط یک کد باشه که خودش مشخص کننده کارکرد داده ای باشه که از پورت دیگری خونده میشه، یعنی داده یک پورت فقط برای فلان موضوع خاص نباشه، برای توصیفش باید توجه بشه که در فلان پورت دیگه چه مقداری قرار داره. مثلا یک سخت افزار بخواد یک رشته string رو ارائه کنه، بجای اینکه 20 تا پورت با شماره متوالی رو بکار ببره، فقط از دو پورت A و B استفاده کنه، بگه در پورت A اگر بنویسی 0 در پورت B طول رشته رو تحویل میدم و اگر اعداد بزرگتر 0 رو در پورت A بنویسی کاراکتر اون خانه از رشته رو در پورت B تحویل میدم.
    ممکنه برای خواندن دادن از یک پورت خاص حتما لازم باشه که اول فلان مقدار در پورت دیگری نوشته بشه تا flip flop مربوط به فلان بخش سخت افزار در وضعیت بهمان قرار بگیره، و نباید پیش از تکرار این عملیات مجددا از اون پورت داده خونده بشه. یعنی اگر در دو کد متوالی از اون پورت داده خونده بشه، تکراری نخواهند شد، دومی یک مقدار نامعتبر و متفاوت میشه.

  5. #5

    نقل قول: In و out

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    نه. هر سخت افزاری برای هر پورتی که بهش مربوطه مشخصات و قاعده خاص خودش رو داره، موردی که مثال زدید قطعا برای یکسری موارد درسته، اما فقط یکی از این شرایط ئه، همیشه اینطوری نیست.
    ممکنه حتی یک پورت فقط برای خواندن یا فقط برای نوشتن باشه و مقداری که در جهت معکوس نوشته یا خونده میشه مقداری همیشه ثابت یا تصادفی و در کل بی ربط باشه.
    ممکنه مقداری که در یک پورت نوشته میشه فقط یک کد باشه که خودش مشخص کننده کارکرد داده ای باشه که از پورت دیگری خونده میشه، یعنی داده یک پورت فقط برای فلان موضوع خاص نباشه، برای توصیفش باید توجه بشه که در فلان پورت دیگه چه مقداری قرار داره. مثلا یک سخت افزار بخواد یک رشته string رو ارائه کنه، بجای اینکه 20 تا پورت با شماره متوالی رو بکار ببره، فقط از دو پورت A و B استفاده کنه، بگه در پورت A اگر بنویسی 0 در پورت B طول رشته رو تحویل میدم و اگر اعداد بزرگتر 0 رو در پورت A بنویسی کاراکتر اون خانه از رشته رو در پورت B تحویل میدم.
    ممکنه برای خواندن دادن از یک پورت خاص حتما لازم باشه که اول فلان مقدار در پورت دیگری نوشته بشه تا flip flop مربوط به فلان بخش سخت افزار در وضعیت بهمان قرار بگیره، و نباید پیش از تکرار این عملیات مجددا از اون پورت داده خونده بشه. یعنی اگر در دو کد متوالی از اون پورت داده خونده بشه، تکراری نخواهند شد، دومی یک مقدار نامعتبر و متفاوت میشه.
    ممنون از وقتی که گذاشتین.
    سوال اخر هم اینکه با این حساب که ویندوز پورت هارو میبنده و باید با توابع خودش از ورودی و خروجی استفاده کرد،نمیشه ادرس سخت افزار رو با یه خونه خالی حافظه که میدونیم توی سیستم استفاده نمیشه یکسان قرار داد و با همون mov و وامثالهم توش نوشت یا ازش خوند؟البته میدونم که ویندوز خودش ادرس هارو وقتی برنامه رو لود میکنه قرار میده اما فرض کنیم این مشکل وجود نداشته باشه

  6. #6

    نقل قول: In و out

    نقل قول نوشته شده توسط MAHDI.D.H.F مشاهده تاپیک
    ممنون از وقتی که گذاشتین.
    سوال اخر هم اینکه با این حساب که ویندوز پورت هارو میبنده و باید با توابع خودش از ورودی و خروجی استفاده کرد،نمیشه ادرس سخت افزار رو با یه خونه خالی حافظه که میدونیم توی سیستم استفاده نمیشه یکسان قرار داد و با همون mov و وامثالهم توش نوشت یا ازش خوند؟البته میدونم که ویندوز خودش ادرس هارو وقتی برنامه رو لود میکنه قرار میده اما فرض کنیم این مشکل وجود نداشته باشه
    پردازنده های مدرن بصورت سخت افزاری امکاناتی دارند که لایه های مختلف از دسترسی برای کد تعریف بشه. سیستم عامل به کمک این امکانات بین دسترسی های کد عادی و کد سیستمی که فرضا در لایه هسته سیستم عامل اجرا میشه تفکیک قائل میشه و برای هر موردی سطح دسترسی تعریف می کنه.

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

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •