واحد پردازش مرکزی یا CPU که اجرای تمام دستورالعملها را مدیریت میکند و اغلب از آن بهعنوان مغز کامپیوتر یاد میشود چطور کار میکند و چه اجزایی دارد؟
واحد پردازش مرکزی (CPU) عنصری حیاتی در هر کامپیوتر محسوب میشود و تمامی محاسبات و دستوراتی را که به سایر اجزای کامپیوتر و تجهیزات جانبی آن منتقل میشود، مدیریت میکند. تقریباً تمام وسایل الکترونیکی و گجتهاییها که استفاده میکنید؛ از دسکتاپ و لپتاپ و گوشی گرفته تا کنسولهای گیمینگ و ساعتهای هوشمند، همه و همه به واحدی برای پردازش مرکزی مجهز هستند؛ در واقع این واحد، پایه و اساسی برای کامپیوترها به حساب میآید که بدون آن، سیستم روشن نمیشود، چه برسد به اینکه قابل استفاده باشد. سرعت بالای واحد پردازش مرکزی تابعی از دستور ورودی است و اجزای کامپیوترها تنها در صورتی که به این واحد متصل باشند، قدرت اجرایی پیدا میکنند.
ازآنجاکه واحدهای پردازش مرکزی، دادههای تمام قسمتهای کامپیوتر را بهطور همزمان مدیریت میکنند، ممکن است با افزایش حجم محاسبات و پردازشها، کُند عمل کند یا حتی با بالا رفتن حجم کاری، از کار بیفتد یا به اصطلاح کِرَش کند. امروزه رایجترین واحدهای پردازش مرکزی موجود در بازار از قطعات نیمههادی در مدارهای مجتمع تشکیل شدهاند که در انواع مختلفی به فروش میرسند و تولیدکنندگان پیشرو در این صنعت نیز، AMD و Intel هستند که از ۵۰ سال پیش تا به امروز در این حوزه با هم رقابت میکنند.
پردازنده چیست؟
برای آشنایی با واحد پردازش مرکزی (CPU)، ابتدا بخشی از کامپیوتر به نام SoC را خیلی مختصر معرفی میکنیم. SoC یا سیستم روی یک تراشه، بخشی از سیستم است که تمام اجزای مورد نیاز کامپیوتر را برای پردازش در تراشهای سیلیکونی ادغام میکند. SoC ماژولهای مختلفی دارد که واحد پردازش مرکزی (به اختصار پردازنده) جزئی اصلی از آن و پردازندهی گرافیکی، حافظه، کنترلر USB، مدارهای مدیریت انرژی و رادیوهای بیسیم (WiFi، 3G، 4G LTE، و غیره) اجزایی متفرقه هستند که ممکن است لزوماً روی SoC وجود نداشته باشند. واحد پردازندهی مرکزی که از این به بعد و در این مقاله آن را به اختصار پردازنده خطاب میکنیم، نمیتواند مستقل از تراشههای دیگر، دستورالعملها را پردازش کند؛ اما ساخت کامپیوتری کامل تنها با SoC امکانپذیر است.
SoC از پردازنده کمی بزرگتر است و در عین حال عملکردهای بسیار بیشتری نیز ارائه میدهد. در واقع با وجود تأکید زیادی که روی فناوری و عملکرد پردازنده میشود، این بخش از کامپیوتر، به خودی خود کامپیوتر نیست و میتوان آن را در نهایت، ماشینحسابی بسیار سریع معرفی کرد که جزئی از سیستم روی تراشه یا SoC است؛ دادهها را از حافظه فراخوانی میکند و سپس نوعی عملیات حسابی (جمع، ضرب) یا منطقی (و، یا، نه) روی آنها انجام میدهد.
عملکرد پردازنده ها
فراخوانی یا واکشی دستورالعملها از حافظه (Fetch): پردازنده ابتدا به منظور آگاهی از نحوهی مدیریت ورودی و دانستن دستورالعملهای مرتبط با آن، این دستورها را از حافظه دریافت میکند. این ورودی ممکن است یک یا بینهایت دستور باشد که باید در محلهای جداگانه آدرسدهی شوند. به این منظور واحدی به نام PC (مخفف Program Counter) یا شمارندهی برنامه، وجود دارد که ترتیب دستورهای ارسالشده را حفظ میکند؛ پردازنده نیز در تعاملی مشترک برای یافتن آدرس دستورالعمل دائماً با رم در ارتباط است (خواندن از حافظه).
رمزگشایی یا ترجمهی دستورالعملها (Decode): دستورالعملها به فرمی که برای پردازنده قابل درک باشند (زبان ماشین یا باینری) ترجمه میشوند. پردازنده پس از دریافت دستورها، برای درک آنها نیاز دارد تا این کدها به زبان ماشین (یا باینری) ترجمه شوند. نوشتن برنامهها به زبان باینری، از همان ابتدای امر، کار دشواری است و به همین دلیل کدها به زبانهای برنامهنویسی سادهتری نوشته میشوند و سپس واحدی به نام Assembler، این دستورها را به کدهای اجرایی و آماده برای پردازش پردازنده تبدیل میکند.
پردازش یا اجرای دستورهای ترجمهشده (Execute): مهمترین مرحله در عملکرد پردازنده، پردازش و اجرای دستورها است. در این مرحله دستورالعملهای رمزگشاییشده و باینری برای اجرا به کمک واحد ALU (مخفف Arithmetic & Logic Unit) یا واحد محاسبه و منطق، در آدرسی مخصوص پردازش میشوند.
ذخیرهی نتایج اجرا (Store): نتایج و خروجی دستورها به کمک واحد ثبات (Register) در حافظهی جانبی پردازنده ذخیره میشوند تا در دستورالعملهای آتی برای بالا بردن سرعت به آنها رجوع شود (نوشتن در حافظه).
واحدهای عملیاتی پردازنده ها
هر پردازنده از سه واحد عملیاتی تشکیل شده است که در فرایند پردازش دستورها نقش دارند:
واحد محاسبه و عملیات منطقی (ALU یا همان Arithmetic & Logic Unit): این واحد مدار دیجیتالی پیچیدهای است که عملیات ریاضی و مقایسهای را انجام میدهد؛ در برخی پردازندهها، ALU به دو بخش AU (برای انجام عملیات حسابی) و LU (برای انجام عملیات منطقی) تقسیم میشود.
واحد کنترل حافظه (CU یا همان Program Counter): این واحد مداری است که عملیات را درون پردازنده هدایت و مدیریت میکند و چگونگی پاسخ دادن به دستورالعملها را به واحد محاسبه و منطق و دستگاههای ورودی و خروجی، دیکته میکند. کارکرد واحد کنترل در هر پردازنده بسته به معماری طراحی آن، میتواند متفاوت باشد.
واحد ثبات (Register): واحد ثبات، واحدی در پردازنده است که وظیفهی نگهداری موقت دادههای پردازششده، دستورالعملها، آدرسها، توالی بیتها و خروجی را بر عهده دارد و باید برای نگهداری این دادهها ظرفیت کافی داشته باشد. پردازندههایی با معماری ۶۴ بیتی، Registerهایی با ظرفیت ۶۴ بیتی دارند و پردازندههایی با معماری ۳۲ بیتی نیز دارای واحد ثباتی ۳۲ بیتی هستند.
معماری پردازنده ها
ارتباط میان دستورالعملها و طراحی سختافزار پردازنده، معماری پردازنده را شکل میدهد؛ اما معماری ۶۴ یا ۳۲ بیتی چیست؟ این دو معماری چه تفاوتهایی با یکدیگر دارند؟ برای پاسخ به این سؤال ابتدا باید با مجموعه دستورالعملها و نحوهی انجام محاسبات آنها آشنا شویم:
مجموعه دستورالعملها
مجموعه دستورالعملها (Instruction Set)، مجموعه عملیاتی است که هر پردازنده میتواند بهطور طبیعی اجرا کند. این عملیات از چندین هزار دستورالعمل ساده و ابتدایی (مانند جمع، ضرب، جابهجایی و…) تشکیل شده که اجرای آن از پیش برای پردازنده تعریف شده است و اگر عملیاتی در خارج از محدودهی این مجموعه دستورالعمل باشد، پردازنده نمیتواند آن را اجرا کند.
همانطورکه اشاره شد، پردازنده وظیفهی اجرای برنامهها را بر عهده دارد. این برنامهها مجموعهای از دستورالعملهای نوشتهشده به زبان برنامهنویسی هستند که باید با ترتیبی منطقی و دقیقاً مرحلهبهمرحله اجرا دنبال شوند.
در واقع هر پردازنده را میتوان مجموعهای از مدارهای الکتریکی دانست که مجموعهی دستورالعملها را دراختیار پردازنده قرار میدهند و سپس مدارهای مربوط به آن عملیات به وسیلهی سیگنالی الکتریکی فعال شده و پردازنده آن را اجرا میکند.
دستورالعملها از تعداد معینی بیت تشکیل شدهاند. برای مثال، در دستورالعملی ۸ بیتی؛ ۴ بیت اول آن به کد عملیات و ۴ بیت بعدی به دادههایی که باید استفاده شوند اشاره دارد. طول یک مجموعه دستورالعمل میتواند از چند بیت تا چند صد بیت متغیر بوده و در برخی از معماریها نیز طولهای متفاوتی داشته باشد.
بهطور کلی مجموعه دستورالعملها به دو دستهبندی اصلی زیر تقسیم میشوند:
محاسبات کامپیوتری با مجموعه دستورالعملهای کاهشیافته (Reduced instruction set computer): برای پردازندهی مبتنی بر RISC (بخوانید ریسک)، مجموعه عملیات تعریف شده، ساده و اساسی هستند. این دست از محاسبات پردازشها را سریعتر و کارآمدتر انجام میدهند و برای کاهش زمان اجرا بهینهسازی شدهاند؛ RISC نیازی به داشتن مدارهای پیچیده ندارد و هزینهی طراحی آن پایین است. پردازندههای مبتنی بر RISC، هر دستور را در چرخهای واحد به اتمام میرسانند و تنها روی دادههای ذخیرهشده در رجیسترها، عملیات انجام میدهند؛ پس دستورالعملهای سادهای هستند، فرکانس بالاتری دارند، ساختار مسیرسازی اطلاعات در آنها بهینهتر است و عملیاتها را روی رجیسترها بارگذاری و ذخیره میکنند.
محاسبات کامپیوتری با مجموعه دستورالعملهای پیچیده (Complex instruction set computer): پردازندههای CISC (بخوانید سیسک) یک لایه میکروکد یا ریزبرنامهریزی اضافی دارند که در آن دستورالعملهای پیچیده را به دستورهای ساده (مانند جمع یا ضرب) تبدیل میکنند. دستورالعملهای قابلبرنامهریزی در حافظهی سریع ذخیره میشوند و قابل بهروزرسانی هستند. در این نوع از مجموعه دستورالعملها، تعداد بیشتری از دستورالعملها را نسبت به RICS میتوان گنجاند و فرمت آنها میتوانند طول متغیر داشته باشند. در واقع CISC تقریباً نقطه مقابل RISC است. دستورالعملهای CISC میتوانند چندین چرخهی پردازنده را طی کنند و مسیرسازی اطلاعات در آنها به اندازه پردازندههای RISC کارآمد نیست. بهطور کلی پردازندههای مبتنی بر CISC میتوانند چندین عملیات را در طی یک دستور پیچیده اجرا کنند، اما در طول مسیر چندین چرخه را طی میکنند.

