یادگیری امروزم از معماری کامپیوتر موریس مانو (۳)

توی این پست راجع به تعاریف اولیه پردازش موازی (Parallel Processing) می‌نویسم.

پردازش موازی یعنی انجام چند کار همزمان به منظور افزایش سرعت اجرای برنامه. در حالت عادی، دستورات به صورت مرتب پشت سر هم اجرا می‌شدند اما در پردازش موازی، چند task به شکل همزمان انجام می‌شوند.

پردازش موازی سطوح مختلفی از پیچیدگی داره که ساده ترینش همون parallel load در رجیستر هاست. بخش های پیچیده تر شامل تعداد زیادی از واحد های عملیاتی (functional unit) میشه که هرکدومشون ممکنه یه کار خاصی رو انجام بدن. اطلاعاتی که قراره پردازش بشه بین این واحد ها پخش میشه و هرکدومشون به صورت همزمان روی اطلاعات پردازش انجام میدن.

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

پردازش موازی به چندین طریق طبقه بندی میشه. یکی از طبقه بندی ها، طبقه بندی Flynn هست که بر اساس تعداد دستورات و دیتا هایی که به صورت همزمان پردازش میشن هست. به مجموعه‌ی دستور ها که از حافظه خونده میشن instruction stream گفته میشه و به پردازشی که بر روی دیتا ها انجام میشه data stream گفته میشه. پردازش موازی ممکنه روی یکی و یا هر دوی این موارد انجام بشه. بنابراین بر اساس این گفته ها، ۴ گروه اصلی بوجود میاد:

  • Single Instruction stream, Single Data stream (SISD)
  • Single Instruction stream, Multiple Data stream (SIMD)
  • Multiple Instruction stream, Single Data stream (MISD)
  • Multiple Instruction stream, Multiple Data stream (MIMD)

SISD

توی این کامپیوتر ها یک واحد پردازش،‌ یک حافظه و یک واحد کنترل وجود داره. ممکنه این کامپیوتر ها اصلا به طور درونی قابلیت پردازش موازی رو نداشته باشن. اما بهرحال پردازش موازی از طریق multiple functional unit ها و یا پردازش لوله ای (pipeline processing) خواهد بود.

SIMD

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

MISD

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

MIMD

این نوع از کامپیوتر ها قابلیت اینو دارن که چندین برنامه رو به صورت همزمان اجرا کنند. درواقع بیشتر کامپیوتر های امروزی که میبینیم از این نوع هستن.

توی پست بعدی درباره‌ی pipleline processing صحبت می‌کنم و نکته‌ش اینه که این روش توی مدل فلین جا نمیگیره 🙂

یادگیری امروزم از کتاب معماری کامپیوتر موریس مانو(۱)

امروز درباره‌ی اینتراپت(وقفه) ها در معماری کامپیوتر خوندم. امیدوارم مطالبی که فهمیدم درست باشن 🙂

متاسفانه توی مطالعه معماری خیلی کًند پیش میرم 🙁

اینتراپت با ساب‌روتین ها سه تا تفاوت مهم داره:

  • اینتراپت معمولا بجای اینکه از طریق اجرای یک instruction اجرا بشه، با انتشار یک سیگنال درونی/بیرونی اجرا میشه
  • آدرس سرویسِ اینتراپت برخلاف instruction ها معمولا توسط سخت افزار مشخص میشه نه توسط address field
  • در فرآیند اینتراپت برای مشخص کردن CPU state مقدار بیشتری اطلاعات(مثل رجیستر ها، شمارنده‌ی برنامه، و یه سری status condition ها) ذخیره میشه درحالی که در ساب‌روتین ها شمارنده‌ی برنامه ذخیره میشه.

کِی اینتراپت اتفاق میوفته؟

اینتراپت فقط اتفاق میوفته که دستور قبلی به صورت کامل انجام شده باشه و اگر CPU در حین انجام یک دستور باشه، به اینتراپت جواب نمیده. وقتی یک دستور تموم میشه، سی پی یو چک میکنه که آیا اینتراپتی در حالت pending هست یا نه. اگر بود، CPU وارد hardware interrupt cycle میشه. توی این سیکل محتویات PC و PSW(Program Status Word) توی استک قرار میگیره و آدرس برنچ سرویسی که قراره اجرا بشه بجای PC قرار میگیره. همچنین PSW جدید هم توی جای خودش قرار میگیره و اجرای دستورات آغاز میشه.

آخرین دستور اینتراپت، interrupt return cycle هست که طی اون سی پی یو به حالت قبل از وقوع وقفه برمیگرده و روتین خودش رو ادامه میده.

چند نوع اینتراپت داریم؟

سه نوع وقفه داریم که به صورت زیر هستن:

  • External Interrupt
  • Internal Interrupt
  • Software Interrupt

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

اینتراپت های نرم افزاری یک سری فراخوانی دستورات هستند که بیشتر بجای اینکه شبیه ساب‌روتین باشن، شبیه اینتراپت هستن. درواقع برنامه نویس با این وقفه ها میتونه CPU رو به حالت supervisor ببره و از دستورات اون بخش استفاده کنه. به عنوان مثال، استفاده از دستورات I/O نیازمند مد supervisor هست. برنامه در حالت یوزر مود هست و هنگامی که بخواد از انتقال I/O استفاده کنه از طریق supervisor call instruction موجب میشه که سی پی یو به حالت سوپروایزر بره.

بخش بعدی

بخش بعدی ای که قراره بخونم(فردا) درباره‌ی معماری RISC هست.