چگونه CPU ها طراحی و ساخته می شوند، همه ما از CPU به عنوان “مغز” یک رایانه یاد می کنیم، اما در واقع این به چه معنی است؟ با میلیاردها ترانزیستور چه کار می کنید تا رایانه شما کار کند؟ در این مجموعه چهار قسمتی کوچک ما به طراحی سخت افزار رایانه خواهیم پرداخت و هم از بیرون و هم از داخل مواردی را که باعث می شود یک کامپیوتر کار کند، پوشش می دهیم. این مجموعه شامل معماری رایانه، طراحی مدار پردازنده، VLSI (ادغام در مقیاس بسیار بزرگ) ساخت تراشه و روندهای آینده محاسبات است. اگر همیشه به جزئیات چگونگی کار پردازنده ها علاقه مند بوده اید، به ما بپیوندید زیرا این همان چیزی است که که برای شروع کار می خواهید بدانید.
- قسمت اول: مبانی معماری رایانه
- قسمت دوم: فرآیند طراحی پردازنده
- قسمت سوم: تخلیه و ساخت فیزیکی تراشه
- قسمت چهارم: روندهای فعلی و موضوعات داغ آینده در معماری رایانه
ما در سطح بسیار بالایی از آنچه پردازنده انجام می دهد و چگونه بلوک های ساختمانی در یک طراحی عملکردی جمع می شوند شروع خواهیم کرد. این شامل هسته های پردازنده، سلسله مراتب حافظه، پیش بینی شاخه ها و موارد دیگر می باشد. نخست، ما به تعریف اساسی از آنچه CPU انجام می دهد نیاز داریم. ساده ترین توضیح این است که یک CPU مجموعه ای از دستورالعمل ها را برای انجام برخی کارها روی مجموعه ای از ورودی ها دنبال می کند. به عنوان مثال، این می تواند یک مقدار از حافظه را بخواند، سپس آن را به یک مقدار دیگر اضافه کند و در آخر نتیجه را به حافظه در یک مکان دیگر ذخیره کند. همچنین اگر نتیجه محاسبه قبلی بیشتر از صفر باشد، می تواند چیزی پیچیده تر مثل تقسیم دو عدد باشد.
دستورالعمل برای اجرای CPU
وقتی می خواهید برنامه ای مانند سیستم عامل یا بازی را اجرا کنید، خود این برنامه یک سری دستورالعمل برای اجرای CPU است. این دستورالعمل ها از حافظه بارگیری می شوند و بر روی یک پردازنده ساده، یک به یک تا زمانی که برنامه به پایان برسد، اجرا می شوند. برای مثال، در حالی که توسعه دهندگان نرم افزاری برنامه های خود را به زبان های سطح بالا مانند C++ یا Python می نویسند، پردازنده نمی تواند آن را درک کند. فقط 1 و 0 را درک می کند بنابراین به روشی برای نمایش کد در این قالب نیاز داریم. برنامه ها به مجموعه ای از دستورالعمل های سطح پایین به نام زبان مونتاژ به عنوان بخشی از معماری مجموعه دستورالعمل (ISA) وارد می شوند.
این مجموعه دستورالعمل هایی است که CPU برای درک و اجرای آن ساخته شده است. برخی از متداول ترین ISA ها x86 ،MIPS ،ARM ،RISC-V و PowerPC هستند. درست مانند نحو برای نوشتن یک عملکرد در C++ با عملکردی که در پایتون کار مشابهی را انجام می دهد متفاوت است، هر ISA نحو متفاوتی دارد. مطابق با متد برای نوشتن یک عملکرد در C++ با عملکردی که در پایتون کار مشابهی را انجام می دهد متفاوت است، هر ISA نحو متفاوتی دارد.
ISA ها را می توان به دو دسته اصلی تقسیم کرد:
طول ثابت و طول متغیر. RISC-V ISA از دستورالعمل هایی با طول ثابت استفاده می کند که به معنی تعداد مشخصی از بیت پیش تعریف شده در هر دستورالعمل تعیین می کند که چه نوع دستورالعمل است. این متفاوت از x86 است که از دستورالعمل های طول متغیر استفاده می کند. در x86 می توان دستورالعمل ها را به روش های مختلف و با تعداد بیت های مختلف برای قسمت های مختلف رمزگذاری کرد. به دلیل همین پیچیدگی، رمزگشای دستورالعمل در CPU های x86 به طور معمول پیچیده ترین قسمت کل طراحی است.
دستورالعمل های طول ثابت به دلیل ساختار منظم
امکان رمزگشایی آسان تر را فراهم می کنند، اما تعداد کل دستورالعمل هایی را که ISA می تواند پشتیبانی کند، محدود می کند. در حالی که نسخه های معماری RISC-V حدود 100 دستورالعمل دارند و منبع باز هستند، x86 اختصاصی است و هیچ کس واقعاً نمی داند چه تعداد دستورالعمل وجود دارد. معمولاً برخی معتقدند که چند هزار دستورالعمل x86 وجود دارد اما تعداد دقیق آن مشخص نیست. با وجود اختلافات بین ISA، همه آنها اساساً عملکرد اصلی یکسانی دارند.
چگونه CPU ها طراحی و ساخته می شوند
اکنون ما آماده هستیم تا رایانه خود را روشن کنیم و شروع به کار کنیم. اجرای یک دستورالعمل در واقع چندین قسمت اساسی دارد که در طی بسیاری از مراحل پردازنده شکسته می شوند. اولین قدم برای بدست آوردن دستورالعمل از حافظه به CPU است. در مرحله دوم، دستورالعمل رمزگشایی می شود تا CPU بتواند بفهمد چه نوع دستورالعمل است. انواع بسیاری از جمله دستورالعمل های حساب، دستورالعمل های شاخه ای و دستورالعمل های حافظه وجود دارد.
هنگامی که CPU می داند چه نوع دستورالعمل را اجرا می کند، عملوندهای مربوط به دستورالعمل از حافظه یا رجیسترهای داخلی در CPU جمع آوری می شوند. اگر می خواهید شماره A را به عدد B اضافه کنید، تا زمانی که واقعاً مقادیر A و B را نمی دانید می توانید این کار را انجام ندهید. اکثر پردازنده های مدرن 64 بیتی هستند و این بدان معنی است که اندازه هر مقدار داده 64 بیت است.
CPU های 64 بیت
اکثر پردازنده های مدرن 64 بیتی هستند و این بدان معنی است که اندازه هر مقدار داده 64 بیت است. این می تواند اضافه کردن اعداد، انجام یک عملکرد منطقی بر روی اعداد یا عبور دادن اعداد بدون تغییر در آنها باشد. پس از محاسبه نتیجه، ممکن است به حافظه دسترسی داشته باشید تا نتیجه را ذخیره کنید یا CPU فقط می تواند مقداری را در یکی از ثبت های داخلی خود نگه دارد. پس از ذخیره شدن نتیجه، CPU وضعیت عناصر مختلف را به روز می کند و به دستورالعمل بعدی حرکت می کند.
البته این توضیحات یک ساده سازی عظیم است و بیشتر پردازنده های مدرن این مراحل را برای بهبود بهره وری تا 20 یا چند مرحله کوچکتر تقسیم می کنند. این بدان معناست که اگرچه پردازنده در هر چرخه چندین دستورالعمل را شروع و به پایان می رساند، ممکن است برای هر یک از چرخه دستورالعمل ها 20 یا بیشتر طول بکشد. این مدل به طور معمول خط لوله نامیده می شود زیرا برای پر کردن خط لوله و عبور کامل مایعات از آن مدتی طول می کشد، اما پس از پر شدن، شما یک خروجی ثابت می گیرید.
کل چرخه ای که یک دستورالعمل طی می شود
یک روند بسیار دقیق مهیج است، اما همه دستورالعمل ها ممکن است در همان زمان به پایان نرسند. به عنوان مثال، اضافه کردن بسیار سریع است در حالی که تقسیم یا بارگیری از حافظه ممکن است صدها چرخه طول بکشد. به جای اینکه کل پردازنده در حالی که یک دستورالعمل کُند به پایان رسیده متوقف شود، اکثر پردازنده های مدرن خارج از سفارش کار می کنند. این بدان معناست که آنها تعیین خواهند کرد که کدام دستورالعمل برای اجرا در یک زمان معین مفیدترین هستند و سایر دستورالعمل هایی که آماده نیستند، در بافر باشند. اگر دستورالعمل فعلی هنوز آماده نشده باشد، پردازنده به سمت کدی دیگر پرش می کند تا ببیند آیا چیز دیگری آماده است یا خیر.
علاوه بر اجرای خارج از سفارش، پردازنده های معمولی مدرن از آنچه معماری superscalar نامیده می شود استفاده می کنند. این بدان معنی است که در هر زمان، پردازنده در هر مسیر، دستورالعمل های زیادی را به طور همزمان اجرا می کند. همچنین ممکن است صدها دستور دیگر نیز منتظر باشند تا انجام آنها آغاز شود. برای اینکه بتوانید دستورالعمل های زیادی را به طور هم زمان اجرا کنید، پردازنده ها چندین نسخه از مسیر را در داخل خود دارند.
چگونه CPU ها طراحی و ساخته می شوند
اگر یک پردازنده ببیند که دو دستورالعمل آماده اجرا هستند و هیچ وابستگی بین آنها وجود ندارد، به جای اینکه منتظر بماند که آنها به طور جداگانه به پایان برسند، هر دو آنها را همزمان اجرا می کند. یکی از کاربردهای رایج این کار Simultaneous Multithreading SMT است که به Hyper-Threading نیز معروف است. پردازنده های Intel و AMD در حال حاضر از SMT دو طرفه پشتیبانی می کنند در حالی که IBM تراشه هایی را توسعه داده است که از SMT هشت طرفه پشتیبانی می کند.
حافظه نهان یا کش Cash
برای انجام این اجرای دقیق، یک پردازنده علاوه بر هسته اصلی دارای عناصر اضافی دیگری نیز هست. صدها ماژول جداگانه در یک پردازنده وجود دارد که هر یک از آنها هدف خاصی را ارائه می دهند، اما فقط به اصول اولیه خواهیم پرداخت. دو تا از بزرگترین و سودمندترین آنها انبارها و پیش بینی کننده شاخه ها هستند. ساختارهای دیگری که ما آنها را پوشش نخواهیم داد شامل مواردی مانند بافر تنظیم مجدد، جداول نام مستعار و ایستگاه های رزرواسیون هستند.
هدف حافظه نهانگاه ها یا کش اغلب گیج کننده است زیرا آنها داده هایی را مانند RAM یا SSD ذخیره می کنند. آنچه که حافظه کش را از بقیه جدا می کند، تأخیر و سرعت دسترسی آنهاست. حتی اگر RAM بسیار سریع باشد، دستورات بزرگ برای CPU بسیار کند است. ممکن است RAM صدها چرخه با داده ها پاسخ دهد و پردازنده با هیچ کاری گیر نیفتد. اگر داده در حافظه رم نباشد، دسترسی به ده ها هزار چرخه داده های SSD طول می کشد. بدون حافظه پنهان، پردازنده های ما بسیار کُند و حتی متوقف می شوند.
پردازنده ها به طور معمول دارای سه سطح حافظه نهان هستند که چیزی را که به عنوان سلسله مراتب حافظه شناخته می شود، تشکیل می دهند. حافظه نهان L1 کوچکترین و سریعترین، L2 در وسط و L3 بزرگترین و کُندترین حافظه انبارک ها است. در بالای انبارک های موجود در سلسله مراتب، رجیسترهای كوچكی وجود دارند كه یك مقدار داده واحد را در حین محاسبه ذخیره می كنند. این رجیسترها به دستور بزرگی سریعترین دستگاه های ذخیره سازی سیستم شما هستند. هنگامی که یک کامپایلر برنامه سطح بالا را به زبان مونتاژ تبدیل می کند، بهترین روش استفاده از این رجیسترها را تعیین می کند.
سطح های حافظه نهان
هنگامی که CPU داده ها را از حافظه درخواست می کند، ابتدا بررسی می کند که آیا این داده ها در حافظه نهان L1 ذخیره شده اند یا خیر. اگر چنین باشد، فقط در چند چرخه به داده ها می توان به سرعت دسترسی داشت. اگر موجود نباشد، CPU L2 را بررسی کرده و متعاقباً حافظه نهان L3 را جستجو می کند. انبارک ها به گونه ای اجرا می شوند که به طور کلی فرانمای هسته هستند.
هسته فقط می خواهد برخی از داده ها را در یک آدرس حافظه مشخص و هر سطح سلسله مراتبی که در آن وجود دارد، پاسخ دهد. هرچه به مراحل بعدی در سلسله مراتب حافظه می رویم، به طور معمول اندازه و زمان تاخیر با سفارشات زیاد می شوند. در پایان، اگر CPU نتواند داده های مورد نظر خود را در هر یک از انبارک ها پیدا کند، فقط در این صورت به حافظه اصلی (RAM) می رود.
انبارک های حافظه در CPU
در پردازنده معمولی، هر هسته دارای دو انبار L1 است: یکی برای داده ها و دیگری برای دستورالعمل ها. انبارک های L1 به طور معمول حدود 100 کیلوبایت هستند و اندازه آن بسته به تراشه و نسل ممکن است متفاوت باشد. همچنین معمولاً یک حافظه نهان L2 برای هر هسته وجود دارد اگرچه ممکن است در بعضی از معماری بین دو هسته مشترک باشد. انبارک های L2 معمولاً چند صد کیلوبایت هستند. سرانجام، یک حافظه پنهان L3 منفرد وجود دارد که بین تمام هسته ها به اشتراک گذاشته می شود و به سفارش ده ها مگابایت است.
هنگامی که یک پردازنده کد را اجرا می کند، دستورالعمل ها و مقادیر داده ای که بیشتر از آن استفاده می کند، ذخیره می شوند. این امر بطور قابل توجهی سرعت عمل را افزایش می دهد زیرا پردازنده برای داده های مورد نیاز خود مجبور نیست دائماً به حافظه اصلی برود. ما در مورد نحوه اجرای این سیستم های حافظه در مرحله دوم و سوم این سری بیشتر صحبت خواهیم کرد.
علاوه بر انبارک ها
یکی دیگر از بلوک های مهم ساختاری یک پردازنده مدرن یک پیش بینی کننده دقیق شاخه است. دستورالعمل های شعبه مشابه با گفته های “if” برای یک پردازنده است. اگر شرط صحیح باشد، یک مجموعه دستورالعمل اجرا خواهد شد و اگر شرط نادرست باشد، دیگری اجرا خواهد کرد. به عنوان مثال، شما ممکن است بخواهید دو عدد را با هم مقایسه کنید و اگر برابر باشند، یک تابع را اجرا کنید و اگر با هم متفاوت هستند، عملکرد دیگری را اجرا کنید. دستورالعمل های شاخه بسیار رایج است و تقریباً 20٪ از کل دستورالعمل های یک برنامه را تشکیل می دهد.
چگونه CPU ها طراحی و ساخته می شوند
CPU ها چگونه کار می کنند
روی سطح، این دستورالعمل های شاخه ممکن است مسئله ای به نظر نرسد، اما در واقع آنها می توانند یک پردازنده را به چالش کشند. از آنجا که در هر زمان ممکن است CPU در حال اجرای ده یا بیست دستورالعمل به طور همزمان باشد، بسیار مهم است که بدانید کدام دستورالعمل ها را اجرا کند. ممکن است 5 چرخه طول بکشد تا تعیین کند که دستورالعمل فعلی شاخه ای است و 10 چرخه دیگر برای تعیین اینکه آیا این شرایط صحیح است یا خیر. در این زمان، ممکن است پردازنده شروع به اجرای ده ها دستورالعمل اضافی را بدون دانستن اینکه کدام یک برای اجرا صحیح است انجام دهد.
برای حل این مسئله، همه پردازنده های مدرن با کارایی بالا از تکنیکی به نام حدس و گمان استفاده می کنند. این بدان معنی است که پردازنده دستورالعمل های شاخه را پیگیری می کند و حدس می زند که آیا شاخه را برداشته یا نه. اگر پیش بینی صحیح باشد، پردازنده قبلاً اجرای دستورالعمل های بعدی را آغاز کرده است، بنابراین این یک افزایش عملکرد محسوب می شود. اگر پیش بینی نادرست باشد، پردازنده متوقف می شود، تمام دستورالعمل های نادرستی را که شروع به اجرای آن کرده است حذف می کند و مجدداً از نقطه درست شروع می کند.
پیش بینی کننده های شاخه ها
برخی از اولین شکل های یادگیری ماشین هستند زیرا پیش بینی کننده، رفتار شاخه ها را همانطور که هست می آموزد. در صورت پیش بینی نادرست، شروع به یادگیری رفتار صحیح خواهد کرد. ده ها سال تحقیق در تکنیک های پیش بینی شاخه منجر به دقت بیشتر از 90٪ در پردازنده های مدرن شده است. در حالی که حدس و گمان عملکرد عالی را ارائه می دهد پردازنده می تواند دستورالعمل هایی را که بجای انتظار در صف کارهای مشغول انتظار قرار دارند، اجرا کند و آسیب پذیری های امنیتی را نیز در معرض دید شما قرار دهد.
معماری مورد استفاده در پردازنده های مدرن طی چند دهه گذشته بسیار پیچیده شده است. نوآوری و طراحی هوشمندانه منجر به عملکرد بیشتر و استفاده بهتر از سخت افزارهای اصولی شده است. سازندگان CPU در مورد فن آوری های موجود در پردازنده های خود بسیار پنهانکاری می کنند، بنابراین نمی توان دقیقاً فهمید که در داخل آن چه اتفاق می افتد. با این گفته، مبانی نحوه کار رایانه ها در تمام پردازنده ها بصورت استاندارد تنظیم شده است. اینتل ممکن است سس مخصوص خود را برای نرخ حافظه پنهان اضافه کند یا AMD ممکن است یک شاخه پیشرفته اضافه کند، اما هر دو آنها یک کار مشابه را انجام می دهند.
منبع: techspot