معماری کامپیوتر دقیقاً چه چیزی را بررسی میکند
وقتی افراد اصطلاح Computer Architecture را میشنوند، معمولاً فقط اجزای فیزیکی یک ماشین را تصور میکنند. در واقعیت، این حوزه دو لایه بههمپیوسته را پوشش میدهد: Instruction Set Architecture (ISA) که واژگانی که یک پردازنده میفهمد را تعریف میکند، و Hardware Organization که پیادهسازی فیزیکی اجراکننده آن دستورات است.
درک این تفاوت اهمیت دارد چون یک مجموعه دستور واحد میتواند به شیوههای بسیار متفاوتی پیادهسازی شود. یک تراشه کممصرف برای دستگاههای embedded و یک پردازنده سرور با کارایی بالا میتوانند هر دو از یک مجموعه دستور پشتیبانی کنند در حالی که سازمان داخلی، سرعت و هزینهشان کاملاً متفاوت است.
هشت ایده بنیادین پشت پردازندههای امروزی
دههها طراحی سختافزار به مجموعه کوچکی از اصول تکرارشونده رسیده است. این ایدهها بارها و بارها در نسلها و سازندگان مختلف پردازنده دیده میشوند.
طراحی بر اساس قانون مور
Moore's Law بیان میکند که تعداد ترانزیستورهای روی یک تراشه تقریباً هر دو سال یکبار دو برابر میشود. طراحان سیستمها را با این پیشبینی طراحی میکنند که سختافزار آینده منابع بیشتری خواهد داشت، بنابراین تصمیمات طراحی امروز با در نظر گرفتن ظرفیت فردا گرفته میشود.
استفاده از انتزاع برای سادهسازی طراحی
Abstraction جزئیات پیادهسازی را پشت یک رابط سادهتر پنهان میکند. برنامهنویسی که با یک زبان سطح بالا کار میکند نیازی ندارد بداند پردازنده داخلاً دستورات را چگونه اجرا میکند، و طراح سختافزاری که یک مدار میسازد نیازی ندارد بداند چه برنامههایی روی آن اجرا خواهد شد.
سریع کردن حالت رایج
همه عملیاتها به یک اندازه تکرار نمیشوند. بهینهسازی عملیاتی که بیشترین تکرار را دارند، حتی به قیمت کاهش کارایی عملیات نادرتر، در نهایت بهبود کارایی بیشتری نسبت به تلاش برای بهینهسازی یکسان همه چیز به همراه دارد.
بهبود کارایی از طریق موازیسازی
Parallelism یعنی انجام همزمان چند عملیات بهجای اجرای پشتسرهم آنها. این ایده در همه سطوح دیده میشود، از اجرای همزمان چند دستور درون یک هسته تا اجرای همزمان چند هسته یا چند ماشین در کنار هم.
بهبود کارایی از طریق پایپلاینینگ
Pipelining مراحل اجرای چند دستور را همپوشانی میکند، شبیه به یک خط تولید. در حالی که یک دستور در حال decode شدن است، دستور دیگری میتواند از قبل fetch شود و دستور سومی در حال اجرا باشد.
افزایش کارایی از طریق پیشبینی
بهجای انتظار برای دانستن نتیجه دقیق یک عملیات، سختافزار میتواند نتیجه محتمل را حدس بزند و بر اساس آن فرض شروع به کار کند. اگر حدس درست باشد، زمان صرفهجویی میشود؛ اگر نه، کار انجامشده کنار گذاشته و دوباره انجام میشود.
سلسلهمراتب حافظه
حافظه سریع گران و کوچک است؛ حافظه کند ارزان و بزرگ است. سیستمها چندین سطح را ترکیب میکنند، از کشهای سریع و کوچک تا فضای ذخیرهسازی بزرگ و کند، تا دادههای پراستفاده نزدیک به پردازنده نگه داشته شوند.
قابلیت اطمینان از طریق افزونگی
اجزا ممکن است دچار خرابی شوند. افزودن اجزای افزونه یا مکانیزمهای بررسی خطا به سیستم اجازه میدهد حتی وقتی بخشی از آن خراب میشود، همچنان درست کار کند یا حداقل خطا را تشخیص دهد.
از کد منبع تا برنامه در حال اجرا
یک برنامه به همان صورت متنی که توسعهدهنده تایپ میکند اجرا نمیشود. پیش از آنکه سختافزار بتواند آن را اجرا کند، چندین لایه تبدیل را طی میکند.
- توسعهدهنده کد را با یک
High-Level Languageمانند C یا Java مینویسد، که به زبان انسان نزدیک و از جزئیات سختافزار دور است. - یک
Compilerاین کد سطح بالا را بهAssembly Languageترجمه میکند، که نمایشی نمادین از دستوراتی است که یک خانواده خاص از پردازنده میفهمد. - یک
Assembler، زبان اسمبلی را بهMachine Languageتبدیل میکند، که شکل باینریای است که سختافزار واقعاً میخواند. Operating Systemبارگذاری این کد ماشین در حافظه را مدیریت کرده و اجرای آن را در کنار سایر برنامههای در حال اجرا هماهنگ میکند.
مثالی از یک ایده واحد بیانشده در دو سطح متفاوت:
عبارت سطح بالا:
total = price + tax
دستور سادهشده مشابه اسمبلی:
ADD total, price, taxهر لایه در این زنجیره وجود دارد تا افرادی که در یک سطح کار میکنند نیازی به فهم کامل پیچیدگی لایههای پایینتر یا بالاتر نداشته باشند. نویسنده کامپایلر نیازی ندارد خواص الکتریکی ترانزیستورها را بداند، و طراح مدار نیازی ندارد نحو یک زبان برنامهنویسی را بداند.
چرا این ایدهها برای سیستمهای امروزی اهمیت دارند
این هشت اصل کنجکاویهای تاریخی نیستند. آنها مستقیماً توضیح میدهند چرا گوشیها، لپتاپها و سرورهای امروزی اینگونه رفتار میکنند: چرا تراشهای که امسال منتشر میشود از تراشه دو سال پیش سریعتر است، چرا نرمافزار میتواند بدون تغییر روی سختافزارهای بسیار متفاوت اجرا شود، و چرا سیستمها میتوانند بدون کرش کردن، خطاهای گاهبهگاه سختافزاری را تحمل کنند.