معماری و سازماندهی کامپیوتر
ثباتها و واحد ALU
قلب محاسباتی پردازنده
پردازنده برای انجام هر کاری، از اجرای یک بازی گرفته تا باز کردن یک صفحه وب، به دو قابلیت اساسی نیاز دارد: مکانی برای نگهداری موقت دادهها و ابزاری برای انجام عملیات روی آن دادهها. این دو بخش کلیدی، فایل ثبات (Register File) و واحد حساب و منطق (ALU) هستند. اینها بلوکهای ساختمانی اساسی هستند که با استفاده از همان گیتهای منطقی و مدارهای ترتیبی که قبلاً دیدهاید، ساخته میشوند، اما در مقیاسی بزرگتر و سازمانیافتهتر.
فایل ثبات: حافظه فوق سریع
ثباتها (Registers) واحدهای حافظه بسیار کوچک و سریعی هستند که مستقیماً درون پردازنده قرار دارند. هر ثبات میتواند مقدار مشخصی داده، مثلاً ۳۲ یا ۶۴ بیت، را در خود نگه دارد. اینها از مجموعهای از ساخته شدهاند که هر کدام یک بیت را ذخیره میکنند.
اما یک پردازنده به دهها ثبات نیاز دارد. مجموعهی این ثباتها در یک واحد به نام «فایل ثبات» (Register File) سازماندهی میشوند. فایل ثبات مانند یک کتابخانه کوچک و بسیار کارآمد است که پردازنده میتواند فوراً به هر یک از کتابهایش (ثباتها) دسترسی پیدا کند.
برای کار با فایل ثبات، به چند ورودی و خروجی نیاز داریم:
- آدرس خواندن (Read Addresses): برای انتخاب اینکه کدام ثباتها خوانده شوند. معمولاً پردازندهها میتوانند همزمان دو ثبات را بخوانند (مثلاً برای جمع کردن دو عدد).
- آدرس نوشتن (Write Address): برای انتخاب ثباتی که نتیجه یک عملیات باید در آن نوشته شود.
- داده ورودی (Write Data): مقداری که قرار است در ثبات مقصد نوشته شود.
- سیگنال فعالساز نوشتن (Write Enable): یک سیگنال کنترلی ۱ بیتی که مشخص میکند آیا عملیات نوشتن باید انجام شود یا خیر.
- داده خروجی (Read Data): مقادیر خوانده شده از ثباتهای انتخاب شده.
واحد حساب و منطق (ALU)
واحد حساب و منطق یا ALU، ماشین حساب قدرتمند پردازنده است. این یک مدار ترکیبی بزرگ است که دو ورودی (معمولاً از فایل ثبات) دریافت میکند و بر اساس یک سیگنال کنترلی، عملیات مشخصی را روی آنها انجام میدهد. این عملیات میتواند حسابی (مانند جمع و تفریق) یا منطقی (مانند AND, OR, NOT) باشد.
یک ALU از چندین واحد کوچکتر تشکیل شده است که هر کدام یک عملیات خاص را انجام میدهند. یک مالتیپلکسر (MUX) بزرگ در خروجی قرار دارد و بر اساس سیگنال کنترلی (که گاهی Opcode نامیده میشود)، نتیجهی یکی از این واحدها را به عنوان خروجی نهایی ALU انتخاب میکند.
یک ALU واقعی، نسخهای بزرگ شده از این طرح است. به جای ورودیهای تکبیتی، ورودیهای ۳۲ یا ۶۴ بیتی دارد و مدارات داخلی (مانند جمعکنندهها) نیز به همین اندازه بزرگ هستند. به این طراحی، «برش بیتی» (Bit-slicing) میگویند، زیرا یک ALU کامل بیتی، از نسخه از این مدار تکبیتی ساخته میشود که به هم متصل شدهاند.
واحدهای شیفت و پرچمهای وضعیت
علاوه بر عملیات پایه، ALUها کارهای دیگری نیز انجام میدهند. یکی از مهمترین آنها، «شیفت دادن» (Shifting) بیتهاست. یک شیفتدهنده (Shifter) میتواند تمام بیتهای یک عدد را به چپ یا راست منتقل کند. این عملیات برای ضرب و تقسیم سریع بر توانهای ۲ بسیار مفید است. برای مثال، شیفت دادن یک عدد باینری به چپ به اندازه یک بیت، معادل ضرب کردن آن در ۲ است.
پس از انجام هر عملیات، ALU معمولاً اطلاعاتی درباره نتیجه را در ثباتهای خاصی به نام «پرچمهای وضعیت» (Status Flags) ذخیره میکند. این پرچمها بیتهای تکی هستند که وضعیتهای مهم را نشان میدهند:
- پرچم صفر (Zero Flag): اگر نتیجه عملیات صفر باشد، این پرچم ۱ میشود.
- پرچم منفی (Negative Flag): اگر نتیجه منفی باشد (یعنی پرارزشترین بیت آن ۱ باشد)، این پرچم فعال میشود.
- پرچم سرریز (Overflow Flag): اگر نتیجه یک عملیات جمع یا تفریق از محدوده قابل نمایش اعداد علامتدار خارج شود، این پرچم ۱ میشود. این اتفاق زمانی میافتد که جمع دو عدد مثبت نتیجهای منفی بدهد یا برعکس.
- پرچم نقلی (Carry Flag): اگر یک عملیات جمع باعث ایجاد رقم نقلی از پرارزشترین بیت شود، این پرچم فعال میشود. این پرچم در محاسبات چندکلمهای کاربرد دارد.
این پرچمها برای تصمیمگیریهای بعدی در برنامه، مانند دستورات شرطی (if-else)، حیاتی هستند. برنامه میتواند این پرچمها را بررسی کرده و بر اساس وضعیت آنها، مسیر اجرای خود را تغییر دهد.
حال که با اجزای اصلی محاسباتی پردازنده آشنا شدید، بیایید دانش خود را بیازماییم.
وظیفه اصلی «فایل ثبات» (Register File) در یک پردازنده چیست؟
کدام «پرچم وضعیت» (Status Flag) در ALU مشخص میکند که نتیجه یک عملیات حسابی، از محدوده قابل نمایش برای اعداد علامتدار بزرگتر یا کوچکتر شده است؟
فایل ثبات و واحد حساب و منطق با همکاری یکدیگر، هسته اجرایی هر پردازندهای را تشکیل میدهند. دادهها از حافظه اصلی به ثباتها منتقل میشوند، ALU عملیات لازم را روی آنها انجام میدهد و نتایج دوباره در ثباتها یا حافظه ذخیره میشوند. این چرخه، اساس تمام محاسبات کامپیوتری است.