شمارنده برنامه

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
قاب جلوی یک رایانه ی IBM 701 که در سال 1952 به بازار عرضه شد. چراغ های میانی نشان دهنده ی ثبات های متفاوت است. شمارنده ی دستورات در پایین سمت چپ قرار دارد.

شمارنده برنامه (به انگلیسی: program counter = PC)، که معمولاً در اینتل اکس۸۶ و ریزپردازنده ی ایتانیوم نشانگر دستور (به انگلیسی: instruction pointer = IP) و گاهی اوقات نیز دستور آدرس ثبات (به انگلیسی: instruction address register = IAR) نامیده می شود، شمارنده دستور یا بخشی از دستور سنجش توالی در ثبات است که نشان می دهد رایانه در چه قسمتی از توالی برنامه قرار دارد. ) در اکثر فرایندها، PC پس از دریافت مجموعه دستورالعمل توسعه میابد و آدرس حافظه ی (نقاط مختلف) دستور بعدی را که باید اجرا شود در خود نگه می دارد. (در فرایندهای فراخوانی با اولویت، PC به دستوری که دقیقاً در حال اجرا است اشاره می کند)

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

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

پیاده سازی سخت افزاری[ویرایش]

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

مانند دیگر ثبات های فرایند، PC نیز ممکن است بانکی از قفل های باینری باشد، که هر کدام مسئول یک بیت از ارزش PC هستند. تعداد بیت ها(طول PC) به معماری فرایند وابسته است. برای مثال، یک پردازنده ی ۳۲بیتی ممکن است برای آدرس دهی به 2³² واحد از حافظه از کل ۳۲بیت خود استفاده کند.

برای تشخیص دستورات کنونی، ممکن است PC با دیگر ثبات ها برای تشخیص قطعه‌بندی و صفحه ادغام شود.

نتایج در معماری ماشین[ویرایش]

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

همچنین این تحقیقات در مسیر ایجاد قراردادهایی بر مبنای PC و افزایش سرعت پردازنده پیش می روند که شامل موارد زیر هستند:

  • خط لوله، که سخت افزارهای متفاوت در پردازنده مرحله های متفاوت از یک دستور را به طور همزمان اجرا می کنند.
  • معماری کلمه دستورالعمل بسیار طولانی، که در آن یک دستور می تواند به چندین اثر دست یابد.
  • تکنیکی برای پیشگویی اجرای خارج از دستور (به انگلیسی: Out-of-order execution) و آماده سازی دستورات ثانویه برای اجرا در خارج از ترتیب مقرر.

نتایج در برنامه نویسی سطح بالا[ویرایش]

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

  • زمانی که یک برنامه ی چندریسمانی نوشته می شود، ممکن است برنامه نویس هر رشته را به عنوان ترتیبی از دستورات بنویسد؛ بدون توجه به آنکه زمان اجرای هر دستور به اجرای دستور ریسه دیگر وابسته است.
  • دربرنامه‌نویسی رویدادمحور، ممکن است برنامه نویس ترتیبی از دستورات را برای پاسخگویی به رویدادها بدون مشخص کردن ترتیب کلی برنامه بنویسد.
  • در برنامه نویسی جریان داده (به انگلیسی: dataflow programming)، ممکن است برنامه نویس هر بخش از محاسبات خط لوله را بدون مشخص کردن ارتباط زمانی آن با دیگر بخش ها بنویسد.

منابع[ویرایش]

  • مشارکت‌کنندگان ویکی‌پدیا، «Program counter»، ویکی‌پدیای انگلیسی، دانشنامهٔ آزاد.