شما در حال مطالعه نسخه آفلاین یکی از مطالب «مجله فرادرس» هستید. لطفاً توجه داشته باشید، ممکن است برخی از قابلیتهای تعاملی مطالب، مانند امکان پاسخ به پرسشهای چهار گزینهای و مشاهده جواب صحیح آنها، نمایش نتیجه آزمونها، پاسخ تشریحی سوالات، پخش فایلهای صوتی و تصویری و غیره، در این نسخه در دسترس نباشند. برای دسترسی به نسخه آنلاین مطلب، استفاده از کلیه امکانات آن و داشتن تجربه کاربری بهتر اینجا کلیک کنید.
درس معماری کامپیوتر یکی از دروس اصلی و پایه در مقطع کارشناسی رشته علوم کامپیوتر و همه گرایشهای رشته مهندسی کامپیوتر شامل نرمافزار، سختافزار و فناوری اطلاعات (IT) است. همچنین، معماری کامپیوتر یکی از گرایشهای مقطع کارشناسی ارشدرشته مهندسی کامپیوتر محسوب میشود. معماری کامپیوتر به ساختار زیربنایی یک سیستم کامپیوتری اطلاق میشود. با توجه به این که نرمافزار وابستگی مستقیمی با سختافزار دارد، شناخت کافی و دقیق معماری سیستمهای کامپیوتری برای توسعهدهندگان نرمافزار و برنامهنویسان، به اندازه فعالان و متخصصین سختافزار دارای اهمیت است. در این مطلب، سعی شده است تمامی سرفصلها و مباحث مهم در درس معماری کامپیوتر به طور کامل و با بیان ساده شرح داده شود.
معماری کامپیوتر علم یا مجموعه قواعدی است که نحوه ارتباط و تعامل نرمافزار با سختافزار را تعیین میکند. گرچه اصطلاح معماری کامپیوتر ممکن است پیچیده به نظر برسد، اما به وضوح، تعریفش از آن چه تصور میشود، سادهتر است. معمولا اصطلاح معماری در ذهن به عنوان طراحی و ساخت یک خانه یا ساختمان تلقی میشود. با همین ذهنیت میتوان معماری کامپیوتر را نیز به عنوان ساخت یک کامپیوتر و سرهم کردن اجزای آن در محل مناسب در نظر گرفت.
معماری کامپیوتر شامل سه بخش اصلی است: طراحی سیستم (System Design)، مجموعه دستورالعمل (Instruction Set Architecture) و ریزمعماری (Microarchitecture). تمام این بخشها با ترتیب خاصی با هم در ارتباط هستند و باید در یک الگوی مشخص توسعه داده شوند تا عملکرد صحیحی داشته باشند. در ادامه به شرح مختصری از هر یک از این سه بخش پرداخته شده است.
طراحی سیستم: این بخش شامل تمام قطعات سختافزاری از جمله واحد پردازنده مرکزی (سیپییو | CPU)، پردازندههای داده (Data Processors)، چندپردازندهها (Multiprocessors)، کنترلگرهای حافظه (Memory Controllers) و دسترسی مستقیم حافظه (Direct Memory Access) است.
ریزمعماری: این بخش، شامل موارد ذخیرهسازی، مسیر ذخیره دادهها و چگونگی پیادهسازی آن در قالب مجموعه دستورالعملها است.
مثالی از معماری کامپیوتر
یک نمونه مناسب از معماری کامپیوتر، معماری فون نویمان (معماری وُن نویمان | Von Neumann Architecture) است که همچنان در بسیاری از انواع کامپیوترهای امروزی مورد استفاده قرار میگیرد. این معماری توسط جان ون نویمان در اوایل دهه ۱۳۲۰ شمسی ارائه شد.
او طراحی یک رایانه الکترونیکی را به همراه سیپییو معرفی کرد که این طراحی شامل واحد منطق ریاضی (Arithmetic Logic unit)، واحد کنترل، ثباتها، واحد حافظه برای دادهها و دستورالعملها، یک رابط ورودی/خروجی و قابلیتهای ذخیرهسازی خارجی است.
درس معماری کامپیوتر
همانطور که در ابتدا مطرح شد، درس معماری کامپیوتر یکی از دروس پایه و اصلی رشته کامپیوتر در مقطع کارشناسی و همچنین یکی از گرایشهای مهندسی کامپیوتر در مقطع کارشناسی ارشد است. در نتیجه این درس برای دانشجویانی که به این حوزه علاقهمند هستند و قصد ادامه تحصیل در مقطع فوق لیسانس در این گرایش را دارند، بسیار مهم و حیاتی است.
همچنین درس معماری کامپیوتر سطح دشواری بالایی را برای دانشجویان تازه وارد به این رشته دارد و بنابراین نیاز است توجه و تلاش ویژهای در مطالعه و یادگیری این درس لحاظ شود. این درس پیش نیاز درس معماری پیشرفته در مقطع کارشناسی ارشد گرایش معماری کامپیوتر و برخی گرایشهای دیگر نیز است و این خود اهمیت دوچندان درس معماری کامپیوتر را نشان میدهد. شایان ذکر است، این درس یکی از منابع کنکور کارشناسی ارشد رشته کامپیوتر نیز است که برای گرایش نرمافزار ضریب سه دارد.
چرا درس معماری کامپیوتر اهمیت دارد؟
دانش معماری و سازمان کامپیوتر به شناخت نحوه اجرای دستورالعملهای کامپیوتر در سطح خُرد کمک میکند. به واسطه معماری کامپیوتر میتوان شناخت لازم را نسبت به جریان داده (Data Flow)، سلسله مراتب حافظه (Memory Hierarchy)، مبادلات (Tradeoffs) و تحلیل زمانبندی به دست آورد. همچنین میتوان شناختی در خصوص مفاهیم سیستمهای توکار (سیستمهای تعبیه شده | سامانههای نهفته | Embedded Systems) و طراحی پردازنده (Processor Design) پیدا کرد.
معماری کامپیوتر به نوشتن کد اسمبلی، کدنویسی رایانش بیدرنگ (Real-time Code) یا کدنویسی سیستمی حساس به زمان (Time Critical System Coding) کمک میکند. مدل سلسله مراتب حافظه، حافظه تصادفی (رم | RAM)، حافظه فقط خواندنی (رام | ROM) و کاربرد خط لوله (Pipeline) نیز به وسیله معماری کامپیوتر قابل فهم است. ساختار کامپیوتر، درک اساسی و ابتدایی را در مورد نحوه عملکرد رایانه ارائه میکند.
بسیاری از مسائل از جمله تحلیل عملکرد، نرمافزارهای کاربردی، نرمافزارهای موازی، سیستمهای توکار، توسعه بازیهای کامپیوتری، پایگاه داده، محاسبات GPU همه منظوره (GPGPU)، بهینهسازی کامپایلر و بسیاری از دیگر موارد به سازمان کامپیوتر و معماری آن وابسته است. دانش معماری رایانه در نوشتن برنامههای سریعتر، کوتاهتر و با خطای کمتر به افراد یاری میرساند و همچنین به اشکال زدایی برنامهها کمک میکند. معماری کامپیوتر در مورد هزینه نسبی عملیات رایانشی و همینطور ارتباط نرمافزار با کاربران و کارکردهای میان آنها ایدههایی را در ذهن ایجاد میکند.
پیش نیازهای درس معماری کامپیوتر چه هستند؟
پیش نیاز درس معماری کامپیوتر، درس مدارهای منطقی است و پیشنیاز درس مدار منطقی نیز درس ریاضیات گسسته است.
در اکثر دانشگاههای ایران، از کتاب «معماری سیستمهای کامپیوتری» نوشته شده توسط موریس مانو به عنوان منبع اصلی استفاده میشود. کتاب «معماری کامپیوتر: رویکرد کمّی» (Computer Architecture: A Quantitative Approach) نوشته جان هنسی (John L. Hennessy) و دیوید پترسون (David A. Patterson) نیز یکی از منابع اصلی و با کیفیت در زمینه معماری کامپیوتر محسوب میشود.
با جستجو در سایر منابع انگلیسی، میتوان از کتابهایی هم چون «Inside The Machine» از جان استوکس (Jon Stokes) و «Structured Computer Organization» نوشته اندرو تاننبام (Andrew Tanenbaum) نیز در حوزه معماری و سازمان رایانه نام برد. در برخی منابع، توصیه شده است که ابتدا با کتاب موریس مانو آغاز شود و در صورت علاقمندی بیشتر، کتاب جان استوکس مطالعه شود. پس از آن اگر میزان علاقمندی چند برابر شد، در آخر کتاب هنسی خوانده شود.
سرفصل های درس معماری کامپیوتر چه هستند؟
از سرفصلهای مهم درس معماری کامپیوتر میتوان به انتقال ثباتها، واحد کنترل و سازمان ورودی-خروجی اشاره کرد. در این مطلب سعی شده است مهمترین سرفصلها و عناوین از منابع و کتابهای شاخص در حوزه معماری کامپیوتر گردآوری شده و هر یک به بیانی ساده و به اختصار شرح داده شوند. موضوعات اصلی که در مطلب درس معماری کامپیوتر به آنها پرداخته میشود، شامل موارد زیر است:
سازمان و سلسه مراتب حافظه (Memory Organization and Hierarchy)
چندپردازندهها (Multiprocessors)
معرفی فیلم آموزش درس معماری کامپیوتر
فیلم آموزش مدارهای منطقی (زمان: ۹ ساعت و ۳۸ دقیقه ، مدرس: مهندس سمیرا تیموری): برای دانشجویان رشته کامپیوتر که درصدد یادگیری مفاهیم مدارمنطقی از صفر تا صد هستند، مناسب است. برای مشاهده فیلم آموزش مدارهای منطقی + کلیک کنید.
فیلم آموزش مدار منطقی (زمان: ۱۴ ساعت و ۳۴ دقیقه، مدرس: منوچهر بابایی): با رویکرد حل مسئله است و برای دانشجویان رشته کامپیوتر که جهت آزمون درس مدار منطقی آماده میشوند و داوطلبین کنکور ارشد مناسب است. برای مشاهده فیلم آموزش مدار منطقی + کلیک کنید.
فیلم آموزش معماری کامپیوتر - مقدماتی (زمان: 20 ساعت و ۲۸ دقیقه، مدرس: مهندس منوچهر بابایی): با رویکرد حل مسئله است و برای دانشجویان مقطع کارشناسی که درس معماری کامپیوتر را میگذرانند مناسب است. برای مشاهده فیلم آموزش معماری کامپیوتر مقدماتی + کلیک کنید.
فیلم آموزش معماری کامپیوتر - پیشرفته (زمان: ۱۳ ساعت و ۴۳ دقیقه، مدرس: مهندس منوچهر بابایی): با رویکرد حل مسئله است و مباحث پیشرفته معماری کامپیوتر، برای دانشجویان در مقاطع کارشناسی و ارشد ارائه شده است. برای مشاهده فیلم آموزش معماری کامپیوتر پیشرفته + کلیک کنید.
فیلم آموزش مرور و حل تست های کنکور ارشد معماری کامپیوتر (زمان: ۱۶ ساعت و ۳۱ دقیقه): برای داوطلبین کنکور کارشناسی ارشد مناسب است و نمونه سؤالات کنکوری این درس در مقاطع ارشد و دکتری مرور میشوند. برای مشاهده فیلم آموزش مرور و حل تست های کنکور ارشد معماری کامپیوتر + کلیک کنید.
فیلم آموزش مرور تست کنکور ارشد مدار منطقی (زمان: ۱۵ ساعت و ۲۰ دقیقه): برای دانشجویان و داوطلبین کنکور ارشد کامپیوتر مناسب است و در این دوره، سؤالات سالهای مختلف مرور و حل میشوند. برای مشاهده فیلم آموزش مرور تست کنکور ارشد مدار منطقی + کلیک کنید.
در ادامه این مطلب، به تشریح و توصیف هر یک از این سرفصلها پرداخته شده است.
مدارهای منطقی چیست ؟
درس مدارهای منطقی پیشنیاز معماری کامپیوتر است و آشنایی و دانش کافی در برخی از موضوعات اساسی این درس برای فهم و درک درس معماری کامپیوتر لازم است. در این بخش از مطلب درس معماری کامپیوتر، به طور مختصر، به مباحث و موضوعات درس مدار منطقی پرداخته شده است.
در ادامه، برخی از این سرفصلها و مباحث به بیان ساده و به اختصار توضیح داده شده است.
کامپیوتر دیجیتال چیست ؟
کامپیوتر (رایانه)، محاسبات و عملیات منطقی را روی مقادیر کمّی انجام میدهد که به اصطلاح عدد (رقم | digit) خوانده میشوند. معمولا، این عملیات در سامانه (سیستم) دودویی (باینری | Binary) صورت میگیرد. یک کامپیوتر دیجیتال از چهار بخش اصلی تشکیل شده است. این اجزاء شامل موارد زیر است:
تجهیزات ورودی/خروجی
حافظه اصلی
واحد کنترل
واحد محاسبات-منطق (Arithmetic Logic Unit | ALU)
دستگاههای ورودی-خروجی برای وارد کردن اطلاعات، دستورات و دسترسی به نتایج محاسبات استفاده میشوند. صفحه کلید و انواع اسکنرها از جمله دستگاههای ورودی هستند و مانیتورها و پرینترها هم جزء تجهیزات خروجی به حساب میآیند. اطلاعاتی که توسط یک کامپیوتر از واحد ورودی دریافت شده، در حافظه اصلی ذخیره میشود. در صورتی که نیاز به استفاده از دادهها در همان لحظه وجود نداشته باشد، داده مربوطه در یک دستگاه ذخیرهسازی ثانویه نگهداری خواهد شد.
واحد کنترل، دستورات را با ترتیب (توالی | Sequence) متناسبی از حافظه انتخاب و فراخوانی میکند و دستورات لازم را به واحد مربوطه ارجاع میدهد. همچنین، واحد کنترل، سرعت عملیات مختلف در ورودی و خروجی را با واحد محاسبات-منطق هماهنگ میکند. این هماهنگسازی برای حصول اطمینان از جابهجایی صحیح دادهها در سراسر سامانه است. واحد محاسبات-منطق، الگوریتمهای محاسباتی و منطقی انتخاب شده را برای پردازش دادههای ورودی با سرعت بالا اجرا میکند.
سرعت پردازش در اکثر مواقع در حد نانوثانیه (یک میلیاردم ثانیه) است. در اکثر سیستمهای کامپیوتری، حافظه اصلی، واحد کنترل و ALU مجموعاً واحد پردازش مرکزی (CPU) را تشکیل میدهند. این درحالی است که دستگاههای ورودی-خروجی و واحدهای ذخیرهسازی ثانویه جزء تجهیزات جانبی هستند.
گیت های منطقی
گِیتهای منطقی (دروازه منطقی | Logical Gate) سنگ بنای هر سیستم دیجیتالی هستند. گیت منطقی یک مدار الکترونیک است که یک یا بیش از یک ورودی و تنها و فقط یک خروجی دارد. ارتباط میان ورودی و خروجی بر پایه یک منطق خاص (Certain Logic) بنا شده است.
بر این اساس، دروازههای منطقی، گیت AND، گیت OR، گیت NOT و سایر دروازهها هستند.
جبر بولی
جبر بولی (Boolean Algebra) شاخهای از ریاضیات است که به انجام عملیات روی مقادیر منطقی مربوط میشود و متغیرهای دودویی را در بر میگیرد. جبر بولی در کتابی توسط جورج بول (George Boole) ریاضیدان برجسته در اوایل دهه ۱۳۲۰ شمسی معرفی شد. ویژگی منحصربفرد جبر بولی این است که تنها با مطالعه متغیرهای باینری سر و کار دارد.
با توجه به موارد ذکر شده، متمم تابع F به صورت زیر است:
F′=(x′yz′+x′y′z)′=(x+y′+z).(x+y+z′)
ساده سازی توابع بولی
روش ساده سازی جدول کارنو (Karnaugh Map | K-map) یک عملیات آسان برای سادهسازی توابع بولی است. سادهسازی با نقشه، چینش تصویری است از جدول درستی (Truth Table). ساده سازی جدول کارنو، تفسیر سادهای برای انتخاب تعداد عبارات مورد نیاز برای بیان جبری تابع ارائه میکند. سادهسازی جدول کارنو همچنین با نام «ساده سازی با نقشه» (Map Simplification) نیز شناخته میشود.
مدار های ترکیبی (Combinatorial Circuits | CC) مدارهایی هستند که از گیتهای مختلف منطقی تشکیل میشوند. خروجی یک مدار ترکیبی به مقادیر ورودی در هر لحظه زمانی وابسته است. مدارهای ترکیبی از هیچ حافظه یا دستگاه ذخیرهسازی استفاده نمیکنند.
به عنوان مثال، جمعکننده یک مدار دیجیتال است که برای اجرای عملیات جمع مقادیر عددی استفاده میشود. مدار جمع کننده یکی از مدارهای اساسی و ابتدایی است و در واحدهای محاسبات منطقی کامپیوترها وجود دارد. دو نوع جمعکننده وجود دارد؛ نیم جمعکننده (Half Adder) و تمام جمعکننده (جمع کننده کامل | Full Adder). نیم جمعکنندهها اعداد تک رقمی را جمع میکنند و جمع کنندههای کامل قابلیت جمع کردن اعداد بزرگتر را دارند.
فلیپ فلاپ چیست ؟
فلیپ فلاپ (Flip Flop) یک مدار الکترونیکی است با دو وضعیت پایدار که میتواند جهت ذخیره دادههای باینری استفاده شود. داده ذخیره شده میتواند با اعمال ورودیهای مختلف تغییر کند. فلیپ فلاپ ها و لچها (Latch) سنگ بنای سیستمهای الکترونیکی دیجیتال هستند و در کامپیوترها، ارتباطات و بسیاری از سامانههای دیگر مورد استفاده قرار میگیرند. فلیپ فلاپ ها عنصر بنیادی ذخیرهسازی در مدارهای ترتیبی (منطق ترتیبی | Sequential Logic) هستند.
فلیپ فلاپ یک مدار همگام (Synchronous) است. چهار نوع فلیپ فلاپ وجود دارد که رایجترین آنها فلیپفلاپ SR است. فلیپ فلاپ SR، یک ورودی تنظیم (Set) دارد که با S نشان داده میشود و یک ورودی بازنشانی (ریست | تنظیم مجدد | Reset) که با R مشخص میشود. در این مدار، وقتی S در حالت فعال قرار داده شود، خروجی «Q» در حالت بالا و متمم Q یعنی Q′ در حالت پایین قرار خواهد گرفت. وقتی خروجیها مشخص شدند، تا وقتی که هر یک از S یا R در حالت بالا قرار بگیرند و یا تغذیه قطع شود، سیمبندی مدار تغییری نخواهد کرد. فلیپ فلاپ اس آر سادهترین نوع فلیپفلاپ است و نسبت به سایر فلیپفلاپها قابل فهمتر است. سه نوع دیگر فلیپ فلاپ، فلیپفلاپ JK، فلیپفلاپ D و فلیپفلاپ T هستند.
مدار های ترتیبی
بر خلاف مدارهای ترکیبی که وضعیت را بسته به اعمال سیگنالها بر ورودیهایشان در یک لحظه زمانی تغییر میدهند، مدار های ترتیبی (Sequential Logic) نوعی حافظه تعبیه شده درونی دارند. به معنی این که مدارهای منطقی ترتیبی میتوانند وضعیت ورودیهای قبلی خود را نیز علاوه بر ورودیهای کنونی به حساب بیاورند. در واقع، نوعی اثر قبل و بعدی (مقدم و مؤخر) در مدارهای ترتیبی دخیل است.
به بیان دیگر، وضعیت خروجی یک مدار منطقی ترتیبی تابعی از سه وضعیت «ورودی فعلی»، «ورودی قبلی» و یا «خروجی» است. مدارهای ترتیبی این وضعیتها را به خاطر میسپرند و در وضعیت فعلی خود ثابت باقی میمانند، تا وقتی که چرخه زمانی (کلاک | Clock Cycle) بعدی یکی از وضعیتها را تغییر بدهد؛ که این مسئله نشاندهنده حافظهدار بودن مدارهای ترتیبی است.
در ادامه به مفاهیم قطعات دیجیتال (اجزاء دیجیتال) پرداخته شده است. اجزاء الکترونیک دیجیتال، سیستمهای الکترونیکی هستند که از سیگنالهای دیجیتال استفاده میکنند. این اجزاء دیجیتال شامل گیتهای منطقی، شمارندهها، دیکدرها ( رمزگشا | Decoder) و فلیپفلاپها میشوند.
قطعات دیجیتال
در این قسمت از مطلب درس معماری کامپیوتر، مبانی کامپیوترهای دیجیتال شرح داده شده است. مباحثی از قبیل مدارهای مجتمع (Integrated Signals)، دیکدرها، مالتیپلکسرها، ثباتها، شمارندهها و واحدهای حافظه مورد بررسی قرار گرفتهاند.
مدار مجتمع (Integrated Circuit | IC)، که همچنین مدار میکرو الکترونیک (Microelectronic Circuit)، میکروچیپ (Microchip) یا چیپ (Chip) نیز نامیده میشود، یک سرهمبندی (اسمبلی) از قطعات و اجزاء الکترونیکی است که به صورت یک واحد مستقل تولید شده باشد. در چنین مداری، قطعات کوچک شده پویا (Active) مثل ترانزیستورها و دیودها و همچنین قطعات منفعل (Passive) مانند خازنها و مقاومتها و اتصالات داخلی آنها روی یک بُرد از جنس نیمهرسانا (معمولا سیلیکون) قرار میگیرند. در نتیجه، مدار به دست آمده یک چیپ یکپارچه کوچک است که میتواند در حد چند سانتیمتر مربع و یا حتی چند میلیمتر مربع باشد. به طور کلی، قطعات مداری به لحاظ اندازه میتوانند میکروسکپی باشند.
دیکودر چیست ؟
یک دیکدر (کدگشا) مداری است که یک کد را به مجموعهای از سیگنالها تبدیل میکند. به این دلیل به آن رمزگشایی گفته میشود که برعکس کار رمزگذاری را انجام میدهد. اما طراحی دیکدرها نسبت به انکدرها (رمزگذار | Encoder) بسیار سادهتر است و به همین دلیل معمولا در منابع آموزشی قبل از انکودرها، به شرح دیکدرها پرداخته میشود. یک نوع رایج دیکدر، دیکدر خطی (Line Decoder) است که یک عدد n-رقمی باینری را دریافت میکند و آن را به 2n خط داده تبدیل میکند. سادهترین دیکدر خطی، یک دیکدر یک به دو است.
مالتی پلکسر چیست ؟
عبارت مالتی پلکسر (تسهیم کننده | Multiplexer) که «MUX» یا «MPX» نیز خوانده میشود، به انتخاب یک خروجی از چندین ورودی موجود اشاره دارد. پروفسور «شانکر بالاچندران» (Shanker Balachandran) توضیح میدهد که عملیات تسهیم (Multiplexing)، روشی برای انتقال تعداد زیادی واحد اطلاعات از طریق تعداد اندکی کانال (خط | Line) است.
مالتی پلکسر (مولتی پلکسر) دیجیتال یک مدار منطقی ترکیبی است که اطلاعات دودویی را از میان تعداد زیادی از خطوط ورودی انتخاب میکند و آنها را تنها به یک خط (کانال) هدایت میکند. یک مالتی پلکسر با تعداد ورودی 2n، دارای n «خط انتخاب» (Select Line) است که به منظور انتخاب خط ورودی برای ارسال به خروجی استفاده میشوند.
ثبات چیست ؟
یک ثبات (رجیستر | Register) حاوی مجموعهای از فلیپ فلاپ ها است. یک فلیپفلاپ برای ذخیره دادههای تک بیتی استفاده میشود. به منظور ذخیره تعداد بیت بالاتر، ظرفیت ذخیرهسازی با افزایش فلیپفلاپها بیشتر میشود. برای ذخیره یک کلمه n-بیتی نیاز به استفاده از یک ثبات n-بیتی با n-عدد فلیپفلاپ است.
از رجیستر برای اجرای عملیات مختلفی استفاده میشود. CPU برای اجرای عملیات، از ثباتها استفاده میکند. سه نوع عملیات مختلف توسط ثباتها انجام میشود:
واکشی (Fetch): واکشی برای دریافت دستورات ارسال شده توسط کاربر و همچنین بیرون کشیدن دستورات ذخیره شده در حافظه اصلی استفاده میشود.
کدگشایی (Decode): عملیات کدگشایی برای تفسیر و تعبیر دستورات صورت میگیرد. در کدگشایی، عملیاتی که باید روی دستورات انجام شود، به وسیله CPU تعیین و مشخص میشود.
اجرا (Execute): عملیات اجرا در واقع ذخیره جواب تولید شده توسط CPU در حافظه است. پس از ذخیره شدن، نتایج در صفحه نمایش کاربر نشان داده میشوند.
شمارنده دودویی
شمارنده دودویی (شمارنده باینری | Binary Counter) مدار سختافزاری است که از یک سری فلیپفلاپ ساخته میشود. خروجی یک فلیپفلاپ به ورودی فلیپفلاپ بعدی ارسال میشود. یک شمارنده دودویی میتواند بسته به این که فلیپفلاپها چطور به هم متصل میشوند، سنکرون (همگام) یا آسنکرون (ناهمگام) باشد. فلیپفلاپها با هر پالس ساعت تغییر وضعیت میدهند که حاصل آن یک عدد دودویی است. این عدد دودویی میتواند برای ساعتهای دیجیتال یا زمانسنجها مورد استفاده قرار بگیرد.
شیفت رجیستر (Shift-Register | ثبات تغییر مکان) قابلیت جابهجایی اطلاعات دودویی را در یک یا دو جهت دارد. پیکربندی منطقی یک شیفت رجیستر شامل تعدادی فلیپفلاپ است که در آن خروجی یک فلیپفلاپ به ورودی فلیپفلاپ بعدی متصل میشود. پیکربندی بنیادی یک شیفت رجیستر شامل موارد زیر است:
معمولا به شیفت رجیسترهای جامع و رایج «شیفت رجیستر دوطرفه با بار موازی» (Bidirectional Shift Register with Parallel Load) گفته میشود.
یک ساعت مشترک به هر ثبات به صورت سری (ترتیبی) متصل میشود تا تمام عملیات همگامسازی شوند.
یک خط ورودی سری به سمت چپترین رجیستر متصل میشود. یک خط خروجی سری هم با سمت راستترین ثبات در ارتباط است.
یک وضعیت کنترل (Control State) وجود دارد که اطلاعات درون ثبات را با وجود این که پالسهای ساعت به طور مرتب اعمال میشوند، بدون تغییر نگه میدارد.
واحد حافظه چیست ؟
یک واحد حافظه مجموعهای است از سلولهای ذخیرهسازی به همراه مدارهای وابسته آنها که برای تبادل اطلاعات به داخل و خارج انباره مورد نیاز هستند. حافظه، اطلاعات دودویی (صفرها و یکها) را در گروههایی از بیتها به نام «کلمه» ذخیره میکند. یک گروه هشت بیتی را یک بایت مینامند. دو نوع واحد حافظه محوری در سامانههای رایانهای وجود دارد که در ادامه به توضیح مختصری از هر یک پرداخته شده است.
حافظه دسترسی تصادفی (Random Access Memory | RAM) یکی از دو حافظه محوری در سیستمهای کامپیوتری است. در RAM میتوان به سلولهای حافظه برای انتقال اطلاعات از هر موقعیت تصادفی خواسته شده دسترسی داشت. به این معنا که، روند موقعیتیابی یک کلمه در حافظه یکسان است و به مدت زمان برابری فارغ از محل ذخیرهسازی فیزیکی سلولها در حافظه نیاز دارد. RAM یک دستگاه همهمنظوره است و میتوان محتویات آن را در حین انجام روند محاسبات تغییر داد.
حافظه فقط خواندنی
دومین حافظه کلیدی در یک سیستم کامپیوتری حافظه فقط خواندنی (Read Only Memory | ROM) است. این حافظه همانطور که از نامش پیدا است، واحد حافظهای است که تنها عملیات خواندن را اجرا میکند و قابلیت نوشتن در آن وجود ندارد. یعنی اطلاعات دودویی ROM در هنگام تولید سختافزار این حافظه فقط خواندنی، به صورت دائمی ذخیره شده است و امکان تغییر این اطلاعات با عملیات نوشتن وجود ندارد.
یک ROM با ابعاد m×n، آرایهای است از سلولهای باینری. این آرایه در m کلمه که هر کدام n بیت دارد سازماندهی شده است. یک ROM دارای K خط ورودی آدرس برای انتخاب یکی از 2k=m کلمه از حافظه است. تعداد خطوط ورودی n تا است که در واقع برای هر بیت از کلمه یک عدد خواهد بود.
برای دیدن فیلم آموزش معماری کامپیوتر با رویکرد حل مساله + اینجا کلیک کنید.
نمایش داده ها
نمایش دادهها (Data Representation) شکل و فرمی است که داده با آن ذخیره، پردازش و تبادل میشود. دستگاههایی نظیر گوشی همراه و رایانهها دادهها را در اشکال و فرمتهای دیجیتالی ذخیره میکنند تا این دادهها توسط مدارات الکترونیکی قابل ساماندهی باشند.
انسانها از سیستمهای عددی دهدهی (دسیمال | مبنای ۱۰ | Decimal) برای شمارش و اندازهگیری استفاده میکنند. کامپیوترها از اعداد دودویی (مبنای ۲) استفاده میکنند؛ به این دلیل که رایانهها از اجزاء دیجیتال دودویی (ترانزیستور) ساخته شدهاند. ترانزیستورها در دو وضعیت روشن و خاموش عمل میکنند.
سیستم دودوی دارای دو نماد (نشانه) صفر و یک است که به آن بیت (Bit) گفته میشود. یک عدد دودویی با پسوند B نمایش داده میشود. پس یک عدد دودویی معادل یک بیت است و هر هشت بیت معادل یک بایت (Byte) است. سایر انواع داده شامل سیستم عددی مبنای ۸ (Octal | Base 8) و همچنین سیستم مبنای 16 (Hexadecimal | Base 16) است.
متمم
از متمم در رایانههای دیجیتال برای سادهسازی عملیات تفریق و دستکاری بیتهای منطقی استفاده میشود. دو نوع متمم برای هر سیستم مبنای r وجود دارد: متمم r و متمم (r−1). اگر یک عدد N در مبنای r دارای n رقم باشد، متمم (r−1) از عدد N به صورت (rn−1)−N تعریف میشود. یک متمم r از یک عدد n به نام N در مبنای r به صورت rn−N تعریف میشود.
نمایش ممیز ثابت
در محاسبات مدرن، دو رویکرد محوری در ذخیره اعداد حقیقی وجود دارد. اولی نمایش ممیز ثابت (Fixed Point Notation) و دومین روش، نشانهگذاری ممیز شناور (Floating Point Notation) است. نمایش ممیز ثابت تعداد بیت ثابتی برای بخش صحیح و بخش کسری دارد. در نمایش ممیز ثابت، عدد به عنوان یک عدد صحیح (Integer) در قالب متمم ۲ ذخیره میشود. مهمتر از آن، یک تقطیع نشانهگذاریشده برای تعیین موقعیت ممیز اعشار اعمال میشود. ممیز بعد از یک تعداد ثابت از بیتها در سمت راست کم ارزشترین بیت قرار میگیرد.
نمایش ممیز شناور
نشانهگذاری ممیز شناور جایگزینی برای ممیز ثابت و نمایشی است که اکثر کامپیوترهای مدرن برای ذخیره اعداد اعشاری در حافظه از آن استفاده میکنند. نشانهگذاری ممیز شناور راهی است برای نمایش اعداد بسیار بزرگ و یا اعداد بسیار کوچک که خصوصا برای نشانهگذاری علمی به صورت دودویی مورد استفاده قرار میگیرد.
با این کار، نمایش ممیز شناور میزان دقت قابل تغییری را فراهم میکند. این میزان دقت متغییر به مقیاس اعدادی که استفاده میشوند بستگی دارد. به عنوان مثال، سطح دقتی که برای بحث در خصوص فاصله بین اتمها نیاز است (10−10) نسبت به میزان دقت مورد نیاز برای بحث در درباره فاصله میان زمین و خورشید (1011) بسیار متفاوت است.
کدهای تشخیص و تصحیح خطا
خطا در وضعیتی اتفاق میافتد که اطلاعات خروجی با اطلاعات ورودی همخوانی نداشته باشند. حین تبادل داده، سیگنالهای دیجیتال در معرض نویز قرار میگیرند. این مسئله موجب بروز خطاهایی در بیتهای باینری میشود که از یک سیستم به سیستم دیگر در حال انتقال هستند. این بدین معناست که ممکن است یک بیت صفر به بیت یک تغییر کند و یا یک بیت با مقدار یک به صفر تبدیل شود.
برای جلوگیری از بروز خطا، از کدهای تشخیص خطا استفاده میشود. این کدها در واقع دادههای افزودهای هستند که به پیام دیجیتال مربوطه اضافه میشوند تا در صورت بروز خطا در حین انتقال پیامها، به شناسایی آنها کمک کنند. یک مثال ساده از کدهای تشخیص خطا، بررسی توازن (Parity Check) است.
علاوه بر کدهای تشخیص خطا، میتوان با انتقال دادههایی به پیام مخدوش شده، پیام اصلی را از داخل این پیام نویزدار واکشی کرد. این نوع کد را کد تصحیح خطا مینامند. کدهای تصحیح خطا نیز از همان رویکرد کدهای تشخیص خطا استفاده میکنند، اما علاوه بر آن، کدهای تصحیح محل دقیق بیت مخدوش شده را نیز پیدا میکنند.
انتقال ثباتها و ریزعملیات
یک سیستم دیجیتال را میتوان ساز و کار و ارتباط درونی واحدهای مستقل سختافزاری دیجیتال با یکدیگر تعریف کرد. این ارتباطات درونی منجر به انجام وظایف پردازش اطلاعات مورد نظر میشوند. سیستمهای دیجیتالی به لحاظ پیچیدگی و اندازه متفاوت هستند. سیستمهای دیجیتال ساده غالباً از نقطه نظر ثباتهایی که دارند و همچنین عملیاتی که انجام میدهند قابل شناسایی هستند.
عملیاتی که در ثباتها روی دادهها صورت میگیرد، «ریزعملیات» (Micro-Operation) نامیده میشوند. توابعی که در ثباتها به صورت پیشفرض گنجانده میشوند شامل جابهجایی (Shift)، بارگذاری (Load)، پاکسازی (Clear) و سایر عملیات مربوطه میشوند.
در مبحث جابهجایی ثباتها و ریزعملیات از مطلب «درس معماری کامپیوتر | به زبان ساده»، موضوعاتی از قبیل زبان جابهجایی ثبات، جابهجایی گذرگاه و حافظه، ریزعملیات محاسباتی، ریزعملیات منطقی، ریز عملیات جابهجایی و واحد حساب و منطق جابهجایی مورد بررسی قرار داده میشوند.
زبان انتقال ثبات
یک سیستم کامپیوتری دیجیتال نمایانگر ارتباط درونی واحدهای مستقل (ماژول | Module) مثل ثباتها، دیکدرها، اجزای محاسباتی و منطق کنترل است. این ماژولهای دیجیتال با مسیرهای دادهای و کنترلی مشترکی، برای تشکیل یک سیستم دیجیتال کامل به یکدیگر متصل هستند. زبان انتقال ثبات، نمایش نمادین نشانهگذاریهای به کار گرفته شده برای بیان سلسله مراتب ریزعملیات است.
در یک سیستم کامپیوتری، انتقال داده میان ثباتهای پردازنده و حافظه و همچنین بین ثباتهای پردازنده و سیستمهای ورودی-خروجی اتفاق میافتد. این جابهجایی دادهها را میتوان با نشانهگذاری استاندارد به صورت زیر ارائه کرد:
نشانههایی مثل R2، R1، R0 نمایانگر ثباتهای پردازنده هستند.
آدرس موقعیتهای حافظه به وسیله اسامی مانند MEM، PLACE، LOC و غیره نشان داده میشوند.
ثباتهای ورودی-خروجی با استفاده از اسامی مثل DATA OUT، DATA IN و غیره مشخص میشوند.
محتوای رجیستر یا محلی در حافظه به وسیله قرار دادن کروشه در دو طرف نام ثبات یا آن موقعیت حافظه نشان داده میشود.
انتقال گذرگاه و حافظه
یک سیستم دیجیتال از تعداد زیادی ثبات تشکیل شده است و بنابراین، باید مسیرهایی برای انتقال اطلاعات از یک ثبات به ثبات دیگر فراهم شود. در صورتی که خطوط ارتباطی مستقلی بین هر ثبات استفاده شود، تعداد مسیرها و سیمبندیهایی که بخواهد همه ثباتها را به هم متصل کنند بسیار زیاد خواهد شد.
بنابراین، یک ساختار گذرگاهی (Bus) برای انتقال اطلاعات بین رجیسترها کارایی بسیار بیشتری دارد. یک گذرگاه دارای خطوط مشترکی است. به ازای هر یک از بیتهای ثبات، یک خط در گذرگاه وجود دارد. از طریق این خطوط، اطلاعات دودویی به نوبت منتقل میشوند.
انتقال حافظه
اکثر نشانهگذاریهای استاندارد استفاده شده برای مشخص کردن عملیات انتقال حافظه به شرح زیر هستند:
انتقال اطلاعات از یک واحد حافظه به سمت کاربر را یک «عملیات خواندن» (Read) مینامند.
انتقال اطلاعات جدید برای ذخیره شدن در حافظه را «عملیات نوشتن» (Write) میگویند.
یک کلمه حافظه با حرف M نشان داده میشود.
هنگام نوشتن عملیات انتقال حافظه، باید آدرس کلمه حافظه مشخص باشد.
ثبات آدرس با AR و ثبات داده با DR نشان داده میشود.
ریز عمل های حسابی
به طور کلی ریز عمل های حسابی با عملیات انجام شده روی دادههای عددی ذخیره شده در ثباتها سر و کار دارند.
در جدول زیر نمایش نمادین ریزعملهای حسابی مختلف ارائه شده است:
ریز عمل های منطقی
ریز عمل های منطقی، عملیات باینری را در ثباتها روی رشتهای از بیتها انجام میدهند. ریزعملهای منطقی عملیات مبتنی بر بیت هستند، به این معنا که روی هر یک از بیتهای داده کار میکنند. ریزعملهای منطقی برای دستکاری بیتی روی دادههای باینری و همچنین برای تصمیمگیری منطقی براساس مقدار بیتها مناسب هستند.
اصولاً ۱۶ تابع منطقی مختلف وجود دارد که میتوانند روی دو متغیر ورودی تعریف شوند. اگر چه اکثر سیستمها تنها چهار تا از این توابع را پیادهسازی میکنند. این چهار تابع، () XOR ()، OR ()، AND و متمم یا NOT هستند. سایر توابع را میتوان با ترکیب این چهار تابع اصلی ایجاد کرد.
ریز عمل های شیفت
ریز عملهای شیفت آن دسته از ریز عملیاتی هستند که برای انتقال سری (ترتیبی) اطلاعات مورد استفاده قرار میگیرند. ریز عملهای شیفت نیز در ترکیب با ریز عملیات حسابی، ریزعملیات منطقی و سایر عملیات پردازشی روی دادهها استفاده میشوند. سه نوع ریز عمل شیفت وجود دارد؛ منطقی، حسابی و چرخشی.
واحد حساب منطق و شیفت
به جای این که ثباتها ریز عملیات را به صورت مستقیم انجام دهند، سیستمهای کامپیوتری تعدادی ثبات انباشتگر (Storage Register) را به کار میگیرند. این ثباتهای انباشتگر به یک واحد عملیاتی مشترک به نام واحد حساب و منطق (Arithmetic Logic Unit) متصل هستند که به اختصار به آن ALU گفته میشود.
برای اجرای یک ریز عملیات، محتویات ثباتهای تعیین شده در ورودی ALU مشترک قرار میگیرند. ALU یک عملیات را انجام میدهد و سپس نتایج حاصل شده از آن عملیات به یک ثبات مقصد منتقل میشوند. ALU یک مدار ترکیبی است بنابراین تمام عملیات انتقال از رجیستر مبدأ به ALU و بعد به ثبات مقصد میتواند در طول یک چرخه پالس ساعت انجام شود. ریز عملیات شیفت اغلب در یک واحد مجزا صورت میگیرد، اما گاهی هم واحد شیفت به عنوان بخشی از ALU ساخته میشود.
معماری و سازمان کامپیوتر پایه
سازمان کامپیوتر به وسیله ثباتهای داخلی، زمانبندی و ساختار کنترلی آن و مجموعه دستوراتی تعریف میشود که استفاده میکند. سازمان داخلی یک کامپیوتر توسط دنباله ریز عملیاتی تعریف میشود که روی دادههای ذخیره شده در رجیسترهایش اجرا میکند. میتوان کامپیوتر را در خصوص توالی عملیاتی که باید اجرا کند برنامهریزی کرد. کاربر این روند را به وسیله یک کامپیوتر هدایت میکند.
یک برنامه مجموعهای است از دستورالعملها که عملیات، عملوندها و ترتیبی که پردازهها بر اساس آن باید اجرا شوند را تعیین میکند. یک کد دستورالعمل، گروهی از بیتها است که کامپیوتر را ملزم به اجرای بخشی از یک عملیات مشخص میکند.
کد عملیات در یک دستورالعمل گروهی از بیتها است که عملیاتی مثل جمع، تفریق، ضرب، جابهجایی (شیفت | Shift) و متمم را تعریف میکند. تعداد بیتهای مورد نیاز برای کد عملیات، به تعداد کل عملیات قابل دسترسی در یک کامپیوتر بستگی دارد. در ازای 2n عملیات داده شده، کد عملیات باید حداقل حاوی n بیت باشد.
عملیات باید روی دادههای ذخیره شده در رجیسترها اجرا شود. بنابراین کدهای دستورالعمل نه تنها عملیات اجرایی را مشخص میکنند، بلکه همچنین باید ثباتهایی که عملوندها (دادهها) در آنها ذخیره میشوند و ثباتهایی که نتایج باید در آنها ذخیره شود را نیز تعیین کنند.
آدرس دهی غیر مستقیم در معماری کامپیوتر
سادهترین راه تعیین عملوند برای بخش آدرس یک دستورالعمل این است که به جای آدرس یا محل قرارگیری عملوند، این بخش حاوی خود عملوند باشد. چنین عملوندی، عملوند آنی (بدون واسطه | Immediate) نامیده میشود. آدرسدهی مستقیم رویهای است که در آن آدرس مشخص میکند که کدام کلمه حافظه یا ثبات حاوی عملوند است. اما در آدرسدهی غیر مستقیم، آدرس مشخص میکند که کدام کلمه حافظه یا ثبات حاوی آدرس عملوند است (نه خود عملوند). در آدرسدهی غیر مستقیم نیاز به دوبار دسترسی به حافظه وجود دارد.
ثبات های کامپیوتر
پس از اینکه دستورالعملها از حافظه خوانده میشوند، لازم است یک ثبات در واحد کنترل برای ذخیره این کدهای دستورالعمل فراهم شود. کامپیوتر برای دستکاری دادهها به یک ثبات پردازنده نیاز دارد و یک ثبات هم برای نگهداری یک آدرس حافظه لازم است.
ثبات داده (DR) حاوی عملوندی است که از حافظه خوانده شده است. ثبات انباشتگر (AC)، یک ثبات پردازنده همهمنظوره است. دستورالعملهای خوانده شده از حافظه در ثبات دستورالعمل (IR) قرار داده میشود. از ثبات موقت (TR) برای نگهداری دادههای موقت در طول عملیات پردازش استفاده میشود.
ثبات آدرس حافظه (AR) دارای ۱۲ بیت است، چرا که این مقدار در واقع اندازه یک آدرس حافظه است. شمارنده برنامه (PC) نیز ۱۲ بیت دارد و آدرس دستورالعمل بعدی که باید از حافظه خوانده شود را نگهداری میکند. دو ثبات هم برای ورودی و خروجی استفاده میشود. ثبات ورودی (INPR) یک کاراکتر هشت بیتی را از دستگاه ورودی دریافت میکند. ثبات خروجی (OUTR) یک کاراکتر هشت بیتی را برای یک دستگاه خروجی نگهداری میکند.
ثبات آدرس حافظه (Memory Address Register | MAR): این نوع خاص از رجیسترها حاوی آدرس حافظه و دستورات دادهها است. وظیفه اصلی MAR، دسترسی به دستورات و دادهها در حافظه در مرحله اجراست.
شمارنده برنامه (Program Counter | PC): با نام «ثبات آدرس دستورات» یا «اشارهگر دستورات» نیز شناخته میشود. پس از پایان اجرای دستورات فعلی، آدرس حافظه دستور بعدی که قرار است اجرا شود در شمارنده برنامه ذخیره میشود.
ثبات انباشتگر (Accumulator Register | AR): سیپییو اغلب از این ثبات استفاده میکند. ثبات انباشتگر برای ذخیره نتایج سیستم استفاده میشود. وقتی CPU پس از پردازش جوابها را تولید میکند، تمام این نتایج در ثبات انباشتگر ذخیره میشوند.
ثبات داده حافظه (Memory Data Register | MDR): این رجیستر بخشی از واحد کنترل رایانه است. MDR حاوی دادهای است که قصد ذخیرهسازی آن در انباشتگر وجود دارد و یا دادهای که از انباره کامپیوتر واکشی شده باشد.
ثبات شاخص (Index Register | IR): عنصر سختافزاری است که نگهداری داده در CPU را بر عهده دارد. ثبات شاخص عددی را نگهداری میکند که به آدرس دستورات کامپیوتر اضافه میشود تا یک آدرس مؤثر ایجاد شود.
ثبات بافر حافظه (Memory Buffer Register | MBR): ثبات MBR حاوی فراداده (دادههای جانبی | Metadata) مربوط به دادهها یا دستوراتی است که در حافظه ذخیره شده و یا از حافظه خوانده شدهاند.
ثبات داده (Data Register | DR): ثبات داده برای ذخیرهسازی موقت دادهها استفاده میشود.
دستورالعمل های کامپیوتر پایه
کامپیوتر پایه سه نوع قالب کد (Code Format) دارد. بخش کد عملیات (Operation Code | Opcode) دستورالعمل دارای سه بیت است و ۱۳ بیت باقیمانده به کد عملیات مربوطه بستگی دارد. سه نوع قالب کد وجود دارد:
دستورالعمل ارجاع حافظه: از ۱۲ بیت برای تعیین آدرس و ۱ بیت برای تعیین حالت آدرسدهی استفاده میکند.
دستورالعمل ارجاع رجیستر: این نوع دستورالعملها توسط کد عملیاتی 111 با یک صفر در سمت چپترین بیت دستورالعمل قابل شناسایی هستند. ۱۲ بیت دیگر، عملیاتی که باید انجام شود را مشخص میکنند.
دستورالعمل ورودی-خروجی: این نوع دستورالعملها با کد عملیاتی 111 با یک ۱ در سمت چپ با ارزشترین بیت دستورالعمل شناسایی میشوند. ۱۲ بیت باقیمانده برای عملیات ورودی-خروجی به کار میروند.
زمان بندی و کنترل
زمان بندی برای تمام رجیسترها در کامپیوتر پایه (به غیر از ثبات INPR)، به وسیله یک مولد ساعت اصلی مدیریت میشود. در هر پالس ساعت، واحد کنترل، سیگنالهای کنترلی را برای مدیریت ورودیهای گذرگاه (Bus)، ثباتها و ALU ارسال میکند.
معماری و پیادهسازی واحد کنترل را میتوان به دو روش زیر انجام داد:
یک واحد کنترل تعبیه شده به طور دائمی و غیر قابل تغییر که از ابتدا با استفاده از روشهای طراحی منطقی سنتی برای تولید یک مدار کمینه و بهینه طراحی میشود.
یک واحد کنترل ریزبرنامهنویسی شده (Microprogrammed) که از نوعی از ROM ساخته شده است. سیگنالهای به دلخواه کنترل شده به سادگی در یک ROM ذخیره و به ترتیب واکشی میشوند تا ریزبرنامههای مورد نیاز یک دستورالعمل خاص را مدیریت کنند.
چرخه دستورالعمل ها
یک برنامه مستقر در واحد حافظه کامپیوتر دارای یک سلسله دستورالعملها است. این دستورالعملها توسط پردازنده و به صورت یک چرخه برای هر دستورالعمل انجام میشوند.
در کامپیوتر پایه، هر چرخه، دستورالعمل فازهای زیر را شامل میشود:
واکشی دستورالعملها از حافظه
کدگشایی دستورالعملها
خواندن آدرس موُثر از حافظه
اجرای دستورالعملها
دستورالعملهای ارجاع به حافظه
هفت دستورالعمل ارجاع حافظه مختلف وجود دارد. اجرای کامل دستورات در سامانه گذرگاه نیازمند یک سلسله از ریزعملیات است؛ چرا که دادهها در حافظه قابل پردازش مستقیم نیستند. ریزعملیات برای خواندن دادهها از حافظه به یک ثبات استفاده میشوند تا عملیات لازم روی این دادهها در مدارهای منطقی انجام شود. دستورالعملهای ارجاع به حافظه شامل موارد زیر است:
عملیات AND با AC: عملیات منطقی AND را روی جفت بیتها در ثبات انباشتگر (AC) و کلمه حافظه تعیین شده با آدرس موُثر انجام میدهد.
عملیات ADD با AC: محتوای کلمه حافظه که به وسیله آدرس مؤثر تعیین میشود را به مقدار AC اضافه میکند.
بارگذاری در AC: به اختصار LDA نامیده میشود و کلمه حافظهای که توسط آدرس موُثر مشخص شده را به AC منتقل میکند.
ذخیره AC: محتوای ثبات AC را در کلمه حافظهای که به وسیله آدرس مؤثر تعیین شده ذخیره میکند.
انشعاب بدون شرط: شمارنده برنامه (PC) در زمان Ti افزایش مییابد تا برای آدرس دستورالعمل بعدی در دنباله برنامه آماده شود.
انشعاب و ذخیره آدرس بازگشت: به آن BSA گفته میشود و برای انشعاب تا قسمتی از برنامه مناسب است که به آن زیر روال (Subroutine) یا رویه (Procedure) گفته میشود.
افزایش و صرفنظر در صورت صفر بودن: به آن ISZ میگویند. کلمه تعیین شده توسط آدرس مؤثر را افزایش میدهد.
ورودی-خروجی و وقفه
زیرسیستم ورودی-خروجی (I/O) یک کامپیوتر یک نوع ارتباط مؤثر میان سیستم مرکزی و محیط خارجی ایجاد میکند. این زیر سیستم، تمامی عملیات ورودی-خروجی را در یک سیستم کامپیوتری بر عهده دارد. انتقال داده میان دستگاههای ورودی-خروجی و حافظه از طریق CPU انجام میشود. وقتی عملیات ورودی-خروجی در جریان است، CPU نمیتواند دستورالعمل دیگری را اجرا کند.
زمانی که یک بایت داده باید بین دستگاه I/O و حافظه منتقل شود، یک سرویس روال همکنشگر وقفه توسط CPU اجرا میشود که عملیات انتقال بایت داده را اجرا میکند. این دنباله عملیات تا زمانی که تمام بایتها منتقل شوند ادامه مییابد.
طراحی کامپیوتر پایه
کامپیوتر پایه دارای قطعات سختافزاری زیر است:
یک واحد حافظه با ۴۰۹۶ کلمه ۱۶ بیتی
نه ثبات: AR ،PC ،DR ،AC ،IR ،TR ،OUTR ،INPR و SC
هفت فلیپفلاپ: I ،S ،E ،R ،IEN ،FGI و FGO
دو دیکدر در واحد کنترل: دیکدر عملیات ۳ در ۸ و دیکدر زمانبندی ۴ در ۱۶
یک گذرگاه معمول ۱۶ بیتی
دروازههای منطق کنترل
مدارهای جمعکننده و منطقی که به ورودی ثبات AC متصل هستند.
طراحی ثبات انباشتگر
انباشتگر (Accumulator) یک ثبات برای ذخیره موقت دادههای حسابی و منطقی در CPU کامپیوتر است. در ارجاع به CPUهای امروزی، اصطلاح «انباره» به ندرت استفاده میشود و در هزاره جدید به آن «ثبات» گفته میشود. در کامپیوترهای مدرن، هر ثباتی میتواند به عنوان انباشتگر عمل کند.
ابتداییترین کاربرد یک انباشتگر جمع کردن دنبالهای از اعداد است. مقدار عددی داخل انباره با اضافه شدن هر عدد افزایش میيابد. از جمله مواردی که در طراحی ثبات انباشتگر دارای اهمیت است، واحد کنترل انباره و همچنین جمع کننده و مدار منطقی آن است.
برنامه نویسی کامپیوتر پایه
یک رایانه کامل هم سختافزار دارد و هم دارای نرمافزار است. سختافزار از قطعات فیزیکی و تمامی تجهیزات مربوط به آن تشکیل شده است. نرمافزار به برنامههایی مربوط میشود که برای کامپیوتر نوشته شدهاند. آن دسته از افرادی که با معماری کامپیوتر در ارتباط هستند، باید هم در مورد سختافزار و هم نرمافزار دانش و آگاهی کافی را داشته باشند.
دستورالعملهای داخل کامپیوتر یک الگوی باینری تشکیل میدهند که درک آن برای افراد اگر غیرممکن نباشد، میتوان گفت بسیار دشوار است. بنابراین، بهتر است نمادهای برنامهها شباهت بیشتری به مجموعه علائم حروف و اعداد داشته باشند. در نتیجه، نیاز به ترجمه برنامههای نوشته شده با نمادهای کاربر محور به برنامههای باینری است که برای سختافزار قابل تفسیر باشد. یک برنامه نوشته شده توسط کاربر ممکن است به کامپیوتر فیزیکی وابسته و یا مستقل از آن باشد.
بخش برنامهنویسی کامپیوتر پایه در درس معماری کامپیوتر، برخی از جنبهها و مفاهیم برنامهنویسی را معرفی میکند و همچنین، ارتباط این مفاهیم با نمایش سختافزاری و دستورالعملها را آشکار میکند. در بخش اول برنامهنویسی کامپیوتر پایه به عملیات و ساختار بنیادی یک برنامه که نمادهای کاربر را به برنامه دودویی متناظر آن ترجمه میکند پرداخت میشود.
سپس، کارایی دستورالعملهای مختلف ماشین به وسیله مثالهای متعدد بیان شدهاند. مجموعه دستورالعملهای کامپیوتر پایه که سازمان سختافزاری آن در بخش معماری و سازمان کامپیوتر پایه بررسی شد، برای بازتاب بسیاری از روشهای رایج استفاده شده در برنامهریزی یک کامپیوتر استفاده شده است. در ادامه مطلب درس معماری کامپیوتر، به توضیح سادهای از مباحث مربوط به برنامه نویسی کامپیوتر پایه پرداخته شده است.
زبان ماشین
یک برنامه، لیستی است از دستورالعملها یا عبارات که برای هدایت کامپیوتر جهت اجرای عملیات پردازش روی دادهها نوشته میشود. هر برنامهای، با هر زبانی که نوشته شده باشد، قبل از اینکه توسط کامپیوتر قابل اجرا باشد باید به نمایش دودویی دستورالعملها ترجمه شود.
برنامههای نوشته شده برای یک کامپیوتر در یکی از دستهبندیهای زیر قرار میگیرند:
کد باینری: نمایش عینی دستورالعملها وقتی در حافظه کامپیوتر ظاهر میشوند.
کد مبنای هشت یا مبنای ۱۶: در واقع معادل ترجمه شده کد باینری به مبنای هشت یا ۱۶ هستند.
کد نمادی (Symbolic Code): کاربر نمادهایی (حروف، اعداد یا کاراکترهای خاص) را برای بخش عملیات، بخش آدرس و سایر بخشها به کار میگیرد. ترجمه این نمادها به باینری به وسیله اسمبلر (Assembler) انجام میشود. بنابراین این نوع برنامه نمادگذاری شده را یک برنامه زبان اسمبلی مینامند.
زبان برنامه نویسی سطح بالا: این سطح شامل زبانهای مخصوصی است که به جای درگیری با رفتار سختافزار، برای بازتاب دستورالعملهایی به کار میروند که در راه حل یک مسئله استفاده میشوند.
زبان اسمبلی
یک زبان برنامهنویسی به وسیله مجموعهای از قوانین تعریف میشود. کاربران باید تمام قالب قوانین آن زبان را رعایت کنند تا برنامههای آنها به درستی ترجمه شوند. همانطور که در بخش زبان ماشین توضیح داده شد، زبان اسمبلی سومین سطح در برنامهنویسی زبانهای ماشین است.
واحد بنیادی یک برنامه به زبان اسمبلی، یک خط کد است. یک زبان خاص به وسیله مجموعه قوانینی مشخص میشود که نمادهای مورد استفاده و نحوه ترکیب آنها برای تشکیل یک خط کد را تعیین میکنند. از جمله مباحثی که در این بخش مطرح میشود، میتوان به قوانین زبان اسمبلی، آدرس نمادین (Symbolic Address)، شبهدستورالعمل (Pseudoinstruction)، ترجمه به دودویی و جدول نماد آدرس اشاره کرد.
اسمبلر
اسمبلر برنامهای است که یک زبان برنامهنویسی نمادین را دریافت و زبان ماشین متناظر دودویی آن را تولید میکند. زبان نمادین ورودی «برنامه منبع» (Source Program) نامیده میشود و به برنامه باینری حاصل شده نیز «برنامه هدف» (Object Program) گفته میشود. از جمله مطالبی که در خصوص اسمبلر اهمیت دارد نمایش برنامه نمادین در حافظه، گذر اول (First Pass)، شمارنده موقعیت (Location Counter | LC)، گذر دوم (Second Pass) و تشخیص خطا (Error Diagnostics) است.
برنامهنویسی عملیات ریاضی و منطقی
تعداد دستورالعملهای قابل دسترسی در یک کامپیوتر ممکن است در یک سیستم بزرگ به چندصدتا و در یک سیستم کوچک به چند دهتا برسد. برخی از کامپیوترها، یک عملیات داده شده را فقط با یک دستورالعمل ماشین اجرا میکنند؛ سایر کامپیوترها ممکن است به تعداد دستورالعملهای ماشین بیشتری برای اجرای همان عملیات نیاز داشته باشند. عملیاتی که در مجموعه دستورالعملهای ماشین وجود ندارند باید به وسیله یک برنامه پیادهسازی شوند.
در مبحث برنامهنویسی عملیات ریاضی و منطقی، پیادهسازی برخی عملیات محاسباتی و منطقی انجام میشود. برنامهها میتوانند برای هر نوع عملیات ریاضی توسعه داده شوند. این یعنی نه تنها برای دادههای ممیز ثابت دودویی، بلکه برای دادههای دهدهی و ممیز اعشاری هم میتوان برنامهنویسی کرد.
زیر روال چیست ؟
زیر روال (Subroutine | رویه) یک مجموعه از دستورالعملها است که به دفعات در یک برنامه مورد استفاده قرار میگیرد. تنها یک نسخه از دستورات زیر روال در حافظه ذخیره میشود. یک زیرروال را میتوان به تعداد مورد نیاز در طول اجرای یک برنامه خاص فراخوانی کرد. باید در زمان بازگرداندن یک زیر روال احتیاط شود؛ چرا که یک زیر روال میتواند از محل دیگری در حافظه فراخوانی شود.
محتویات کامپیوتر باید به وسیله دستورالعمل فراخوانی زیر روال ذخیره شود تا بازگشت به برنامهای که زیر روال را فراخوانی کرده به درستی انجام شود.
روش پیوند زیر روال شیوهای است که در آن کامپیوتر زیر روال را فراخوانی و بازگردانی میکند. سادهترین راه برای پیوند زیر روال، ذخیره آدرس بازگشت در محل مشخصی مثل یک ثبات است که میتواند به عنوان زیر روال فراخوانی ثبات پیوند فراخوانده شود.
برنامه نویسی ورودی-خروجی
بخش مهمی از زبان برنامهنویسی اسمبلی با ورود و خروج اطلاعات به/از دستگاههای جانبی سر و کار دارد. روشهای مختلف برنامهنویسی معرفی شده در اصل با جنبههای محاسباتی سر و کار دارند، اما این ابعاد بدون امکان ورود و خروج دادهها غیر قابل استفاده هستند. در بخش «برنامهنویسی ورودی-خروجی» برخی از تکنیکهای اساسی برای برنامهنویسی ورودی-خروجی معرفی میشوند.
مفاهیمی که در بخش برنامهنویسی ورودی-خروجی مورد بررسی قرار میگیرند، به طور کلی روی اکثر کامپیوترها قابل اجرا هستند. دستکاری کاراکترها (Character Manipulation) و وقفه برنامه (Program Interrupt) از جمله موضوعات مهم در خصوص برنامهنویسی ورودی-خروجی محسوب میشوند.
کنترل ریز برنامه نویسی شده
واحد کنترل، سیگنالهای زمانبندی و کنترلی را برای عملیات در کامپیوتر تولید میکند. واحد کنترل با ALU و حافظه اصلی ارتباط برقرار میکند. همچنین، واحد کنترل نقل و انتقال میان پردازنده، حافظه و دستگاههای ورودی-خروجی مختلف را مدیریت میکند. علاوه بر این، صدور دستوراتی به ALU برای تعیین عملیاتی که باید روی دادهها انجام شود نیز از جمله وظایف واحد کنترل است.
برای اجرای یک دستورالعمل، واحد کنترل پردازنده مرکزی باید سیگنال کنترلی لازم را در ترتیب صحیح تولید کند. دو رویکرد برای تولید سیگنالهای کنترلی وجود دارد. کنترل ریز برنامه نویسی شده در نقطه مقابل واحد کنترل سختافزاری قرار میگیرد.
سختافزار کنترل را میتوان به عنوان یک ماشین وضعیت تصور کرد که در هر چرخه ساعت، از یک وضعیت به وضعیت دیگری تغییر حالت میدهد. این تغییر وضعیت به محتویات ثبات دستورالعمل، کدهای وضعیت و ورودیها بستگی دارد. از جمله موضوعات مهم در مورد کنترل ریز برنامهنویسی شده میتوان به حافظه کنترل و ترتیبدهی آدرس اشاره کرد.
حافظه کنترل
یک واحد کنترل ریزبرنامهنویسی شده در کامپیوتر معمولا دارای دو حافظه مجزا است که به عنوان حافظه اصلی و حافظه کنترل شناخته میشوند. حافظه کنترل نوعی از حافظه دسترسی تصادفی (Random Access Memory | RAM) است.
حافظه کنترل شامل ثباتهای ذخیرهسازی قابل آدرسدهی میشود. دادهها در حافظه کنترل به صورت موقت ذخیره میشوند. سرعت دسترسی به حافظه کنترل نسبت به حافظه اصلی بیشتر است که این مسئله باعث افزایش سرعت پردازنده مرکزی میشود.
توالی آدرس
ریزدستورالعملها در حافظه کنترل به صورت گروهی ذخیره میشوند. هر گروه، مشخص کننده یک روال (Routine) است. هر دستورالعمل کامپیوتر، روال ریز برنامه مربوط به خودش را برای تولید ریزعملها دارد. سختافزاری که توالی آدرس (Address Sequencing | ترتیبدهی آدرس | دنبال کردن آدرس) را در حافظه کنترل مدیریت میکند، باید قابلیت توالی ریز عملیات را در یک روال داشته باشد و بتواند از یک روال به روال دیگر انشعاب انجام دهد. بنابراین، قابلیت انشعاب از یک روال به روال دیگر در حافظه را ترتیبدهی یا توالی آدرس مینامند. به طور خلاصه، قابلیتهای مورد نیاز برای توالی آدرس در یک حافظه کنترل به شرح زیر است:
افزایش ثبات آدرس کنترل
انشعاب غیرشرطی یا انشعاب شرطی بسته به شروط بیتهای وضعیت
یک پروسه نگاشت (Mapping) از بیتهای دستورالعمل به یک آدرس برای حافظه کنترل
امکانی برای فراخوانی و بازگرداندن زیر روال
از جمله موضوعاتی که در حیطه توالی آدرس در درس معماری کامپیوتر و مبحث کنترل ریز برنامهنویسی شده مطرح میشود، میتوان به انشعاب شرطی، نگاشت دستورالعمل و زیر روالها اشاره کرد.
معماری واحد کنترل
حافظه کنترل در هر زیر بخش (Subfield) باید کدگشایی (دیکد | Decode) شود تا ریز دستورالعملهای مجزا فراهم شوند. خروجی دیکدرها به ورودیهای متناظر در واحد پردازنده متصل هستند. تصویر زیر سه دیکدر و برخی از اتصالاتی که باید در خروجی این دیکدرها وجو داشته باشند را نشان میدهد.
بخشی از کامپیوتر که اکثر عملیات پردازش داده را انجام میدهد، واحد مرکزی پردازش (CPU) نامیده میشود. CPU از سه بخش اصلی تشکیل شده است که عبارتند از مجموعهای از ثباتها، واحد محاسبات و منطق و واحد کنترل. مجموعهای از ثباتها، دادههای لحظهای را در طول اجرای دستورالعملها ذخیره میکنند. واحد محاسبات و منطق (Arithmetic logic Unit | ALU) انجام ریزعملیات موردنیاز برای اجرای دستورالعملها را برعهده دارد.
واحد کنترل، انتقال اطلاعات میان رجیسترها را نظارت میکند و همچنین ALU را در مورد این که چه عملیاتی انجام دهد مدیریت میکند. CPU وظایف مختلفی را بسته به نوع دستورالعملهایی که در کامپیوتر گنجانده شده انجام میدهد.
در مبحث واحد مرکزی پردازش درس معماری کامپیوتر، سازمان و معماری CPU با تاکید بر زاویه دید کاربر از کامپیوتر معرفی میشود. نحوه ارتباط ثباتها با ALU از طریق گذرگاهها و عملیات پشته حافظه شرح داده میشود. همچنین، نوع قالبهای در دسترس برای دستورالعملها، حالتهای آدرسدهی استفاده شده برای واکشی دادهها از حافظه و دستورالعملهای معمول که به صورت رایج در کامپیوترها گنجانده میشوند، از جمله سایر مباحثی هستند که در بخش واحد مرکزی پردازش به آنها پرداخته شده است.
سازمان CPU مبتنی بر رجیستر همهجانبه
وقتی به جای یک ثبات انباشتگر از چندین رجیستر همهمنظوره (General Purpose Register) در ساختار CPU استفاده میشود، به آن سازمان CPU مبتنی بر ثبات همهجانبه (General Register Based CPU Organization) گفته میشود. در چنین سازمانی، کامپیوتر از دو یا سه فیلد آدرس در قالب دستورالعمل استفاده میکند.
هر فیلد آدرس ممکن است مشخص کننده یک رجیستر همهجانبه (عمومی) و یا یک کلمه حافظه باشد. اگر ثباتهای CPU زیادی برای متغیرهای پراستفاده و نتایج میانه در دسترس باشد میتوان در اکثر مواقع از ارجاع به حافظه خودداری کرد که به میزان زیادی باعث افزایش سرعت اجرای برنامه شده و اندازه برنامه را نیز کاهش میدهد.
سازمان پشته
پشته (Stack) ساختار انبارهای است که اطلاعات را به نحوی ذخیره میکند که آخرین مورد ذخیره شده اولین مورد فراخوانی شده باشد. سازمان پشته (Stack Organization) بر اساس اصل LIFO (آخرین ورودی، اولین خروجی | Last-In-First-Out) عمل میکند. پشته در کامپیوترهای دیجیتال به دستهای از موقعیتهای حافظه به همراه یک ثبات گفته میشود که آدرس بالاترین مؤلفه را نگهداری میکند. ثباتی که آدرس بالاترین مؤلفه پشته را نگهداری میکند، اشارهگر پشته (Stack Pointer) نامیده میشود. دو نوع عملیات در یک پشته انجام میشود:
درج (Push): یک مؤلفه را در بالای پشته درج میکند.
حذف (Pop): یک مؤلفه را از بالای پشته حذف میکند.
در کامپیوترهای دیجیتال، پشته میتواند به دو روش پیادهسازی شود:
یک پشته را میتوان به عنوان یک مجموعه از ثباتها که برای ذخیره اطلاعات موقت در طول اجرای یک برنامه استفاده میشوند سازماندهی کرد.
پشته حافظه
پشته را میتوان در یک حافظه دسترسی تصادفی (RAM) که به CPU متصل است پیادهسازی کرد. پیادهسازی یک پشته در CPU به وسیله تخصیص قسمتی از حافظه به عملیات پشته و استفاده از یک ثبات پردازنده به عنوان اشارهگر پشته انجام میشود. موقعیت آغازین پشته توسط ثبات پردازنده تعیین میشود که در نقش اشارهگر پشته عمل میکند.
قالب دستورالعمل
قالب دستورالعمل (Instruction Format) ساختار داخلی (طراحی چیدمان) بیتهای یک دستورالعمل را از منظر اجزای تشکیل دهنده آن بر عهده دارد. قالب دستورالعمل باید دارای یک کد عملیات و همچنین آدرس باشد. آدرس به میزان در دسترس بودن یک عملوند به خصوص وابسته است.
قالب میتواند ضمنی (غیر صریح | Implicit) یا صریح (واضح | Explicit) باشد که نوع آدرسدهی برای هر عملوند را تعیین میکند. طراحی قالب دستورالعمل بسیار پیچیده است. چالشهای بسیاری در طراحی دستورالعملی (Instructional Design) وجود دارد که برخی از آنها به شرح زیر است:
طول دستورالعمل: اساسیترین موضوع در طراحی قالب دستورالعمل است. هر چه طول دستورالعمل بیشتر باشد، نیاز به زمان بیشتری برای واکشی آن دستورالعمل وجود دارد.
اندازه حافظه: اگر آدرسدهی حافظه در محدوده بزرگتری انجام شود، آنگاه نیاز به بیتهای بیشتری در فیلد آدرس وجود خواهد داشت.
سازمان حافظه: اگر سیستم از حافظه مجازی پشتیبانی کند، محدوده حافظهای که باید به وسیله دستورالعمل آدرسدهی شود از حافظه فیزیکی بزرگتر است.
طول انتقال حافظه: طول دستورالعمل باید با طول گذرگاه دادهها برابر و یا ضریبی از آن باشد.
فرمتهای دستورالعمل به ۵ نوع دستهبندی میشوند:
دستورالعملهای سه آدرسه
دستورالعملهای دو آدرسه
دستورالعملهای تک آدرسه
دستورالعملهای صفر آدرسه
دستورالعملهای RISC
روش های آدرس دهی
فیلد عملیات در یک دستورالعمل، عملیاتی که باید انجام شود را مشخص میکند. این عملیات روی دادههایی که در ثباتهای کامپیوتر یا حافظه اصلی ذخیره شدهاند. نحوه انتخاب هر عملوندی که در طول اجرای برنامه انتخاب میشود، به روش آدرسدهی آن دستورالعمل بستگی دارد. دو هدف اصلی استفاده از روشهای آدرسدهی به شرح زیر است:
انعطاف و تنوع در برنامهنویسی برای کاربر وجود داشته باشد.
بتوان تعداد بیتها را در فیلد آدرس دستورالعمل کاهش داد.
انواع روش های آدرس دهی
در ادامه مطلب «درس معماری کامپیوتر | به زبان ساده» و بخش روشهای آدرسدهی، به انواع روش های آدرس دهی پرداخته شده است:
در این روش، خود عملوند در دستورالعمل بدون هیچ واسطهای ذکر شده است. یک دستورالعمل بلافصل (Immediate Mode Instruction) به جای فیلد آدرس دارای یک فیلد عملوند است.
روش ثبات
در روش ثبات برای آدرسدهی، عملوند در ثبات ذخیره میشود و این ثبات در CPU قرار دارد. دستورالعمل حاوی آدرس ثباتی است که عملوند در آن ذخیره شده است.
انتقال و دستکاری داده ها
دستورالعملهای انتقال، عامل انتقال دادهها از یک محل به محل دیگر بدون تغییر اطلاعات دودویی آنها هستند. رایجترین موارد انتقال به شرح زیر هستند:
انتقال بین ثباتهای حافظه و پردازنده
انتقال بین ثباتهای پردازنده و دستگاههای ورودی-خروجی
دستورالعمل های دستکاری روی دادهها عملیات انجام میدهند و قابلیتهای محاسباتی برای کامپیوتر فراهم میکنند. این دستورالعملها عملیات محاسباتی منطقی و شیفت را انجام میدهند.
دستورالعمل های کنترل برنامه
دستورالعمل های کنترل برنامه قابلیتهای تصمیمگیری را فراهم میکنند و مسیری را که در زمان اجرا توسط برنامه اشغال شده است تغییر میدهند. این دستورالعملها شرایطی را برای دستکاری محتویات شمارنده برنامه تعیین میکنند. به دنبال اجرای دستورالعملهای کنترل برنامه، تغییر در مقدار شمارنده برنامه باعث ایجاد وقفه در توالی اجرای دستورالعملها میشود. برخی از دستورالعملهای کنترل برنامه به شرح زیر هستند.
کامپیوتر کم دستور RISC
کامپیوتر کم دستور (کامپیوتر با مجموعه دستورات کاهش یافته | Reduced Instruction Set Computer) که به اختصار به آن کامپیوتر RISC گفته میشود، پردازش اطلاعات را با استفاده از خانوادهای از ریزپردازندهها انجام میدهد که برای اجرای وظایف محاسباتی با سادهترین دستورالعملها در کمترین زمان ممکن طراحی شدهاند. RISC مخالف CISC (مجموعه دستورات محسباتی پیچیده | Complex-Instruction-Set- Computing) است.
ریزپردازندهها یا چیپهای RISC، از این واقعیت بهره میبرند که اکثر دستورالعملها برای پردازشهای نسبتاً ساده هستند و کامپیوترها برای اجرای هرچه سریعتر آن دستورالعملهای ساده طراحی شدهاند. چیپهای RISC پردازش داده را با کاهش تعداد دستورالعملهای دائمی ذخیره شده در ریزپردازنده و با تکیه بیشتر بر دستورات غیر مقیم (Nonresident Instruction) تسهیل و تسریع میکنند. در ادامه مطلب درس معماری کامپیوتر، به یکی از مباحث مهم این درس یعنی پردازش خوط لولهای و برداری پرداخته شده است.
پردازش خط لوله ای و برداری
مباحثی که در بخش پردازش خط لولهای و برداری مطرح میشوند شامل پردازش موازی، عملیات خط لوله، خط لوله محاسباتی، خط لوله دستورالعمل، خط لوله RISC، پردازش برداری و پردازندههای آرایهای میشود. در ادامه مطلب «درس معماری کامپیوتر | به زبان ساده» به اختصار هر یک از این موارد شرح داده شدهاند.
به جای پردازش هر دستورالعمل به صورت ترتیبی، یک سیستم پردازش موازی امکان پردازش همزمان دادهها را برای کاهش زمان اجرا فراهم میسازد. در چنین سیستمی ممکن است دو یا چند ALU وجود داشته باشد و سیستم باید امکان اجرای دو یا چند دستورالعمل را به طور همزمان داشته باشد.
هدف از پردازش موازی این است که قدرت پردازش کامپیوتر را سرعت بخشیده و توان عملیاتی آن را افزایش داد. در اینجا مقصود از توان عملیاتی تعداد دستورالعملهایی است که امکان اجرا در یک واحد زمانی را داشته باشند. پردازش موازی میتواند در سطوح پیچیدگی مختلفی ظاهر میشود. در پایینترین سطح، میتوان به وسیله نوع ثباتهای به کار گرفته شده بین عملیات موازی و ترتیبی تمایز قائل شد. در سطوح پیچیدگی بالاتر، میتوان با استفاده از چندین واحد عملیاتی که تعداد عملیات همزمان زیادی را اجرا میکنند، به پردازش موازی دست یافت.
پردازش خط لوله
پردازش خط لولهای (Pipeline Processing) عملیاتی برای جمعآوری دستورات از پردازنده از طریق یک خط لوله است. این روش، امکان ذخیره و اجرای دستورات در یک فرآیند از پیش تعیین شده را فراهم میکند. همچنین به پردازش خط لولهای، خط لولهای کردن (Pipelining) نیز میگویند. پردازش خط لوله روشی است که در آن چندین دستورالعمل در طول اجرا همپوشانی پیدا میکنند.
خط لوله به سطوحی تقسیم میشود و این سطوح برای تشکیل یک سازه لوله مانند به یکدیگر متصل میشوند. دستورات از یک طرف وارد و از طرف دیگر خارج میشوند. خط لولهای کردن عملیات پردازش، موجب افزایش توان عملیاتی اجرای دستورالعملها میشود.
در سیستم خط لوله، هر بخش (سگمنت) شامل یک ثبات ورودی و به دنبال آن یک مدار ترکیبی است. از ثبات برای نگهداری داده استفاده میشود و مدار ترکیبی عملیات را روی آن انجام میدهد. خروجی مدار ترکیبی به ورودی ثبات در سگمنت بعدی اعمال میشود. انواع خط لوله به دو دسته تقسیم میشود؛ خط لوله محاسباتی (حسابی) و خط لوله دستورالعمل. در ادامه مطلب درس معماری کامپیوتر به معرفی این دو نوع خط لوله پرداخته شده است.
خط لوله حسابی
خط لوله حسابی یک مسئله محاسباتی را به چندین زیر مسئله تقسیم میکند تا هر یک از این زیر مسئلهها برای اجرا در سگمنتهای مختلف خط لوله استفاده شوند. خط لوله حسابی برای عملیات ممیز اعشاری، ضرب و سایر محاسبات استفاده میشود.
عملیات جمع ممیز شناور با استفاده از خط لوله حسابی
اول از همه، مرتبه هر یک از عملوندها با هم مقایسه میشود و عملوند با توان بزرگتر به عنوان مرتبه جواب انتخاب میشود. سپس اختلاف میان توانها تعیین میکند که چندبار باید مرتبه کوچکتر به سمت راست شیفت داده شود. بعد از شیفت دادن توانها، هر دو جزء اعشاری هم راستا میشوند. در نهایت، جمع هر دو عدد به دنبال نرمالسازی حاصل جواب، در بخش آخر به سرانجام میرسد.
در خط لوله دستورالعمل میتوان جریانی از دستورات را به وسیله همپوشانی فازهای واکشی، کدگشایی و اجرا در یک چرخه دستورالعمل اجرا کرد. روش خط لوله دستورالعمل برای افزایش توان عملیاتی یک سیستم کامپیوتری مورد استفاده قرار میگیرد. یک خط لوله دستورالعمل در حالی دستورات را از حافظه میخواند که دستورالعملهای قبلی در دیگر بخشهای خط لوله در حال اجرا هستند. بنابراین، میتوان چندین دستورالعمل را به صورت همزمان اجرا کرد. در صورتی که خط لوله به بخشهایی با طول مساوی تقسیم شود، خط لوله بازدهی بیشتری خواهد داشت.
خط لوله RISC
خط لولههای پردازنده RISC، اگر چه ممکن است مراحل متفاوتی داشته باشند، به طور کلی به شکل یکسانی عمل میکنند. همچنین ممکن است پردازندههای تولید شده توسط سازندگان مختلف تعداد مراحل متفاوتی داشته باشند.
اساساً این مراحل گونههای مختلفی از پنج مرحله زیر هستند که در پردازنده MIPS R3000 استفاده میشوند.
دریافت دستورات از حافظه
خواندن ثباتها و کدگشایی دستورالعملها
اجرای دستورالعمل و یا محاسبه یک آدرس
دسترسی به یک عملوند در حافظه دادهها
نوشتن نتیجه در داخل یک ثبات
پردازش برداری
پردازش برداری عملیات حسابی را روی آرایه بزرگی از اعداد صحیح یا ممیز اعشاری انجام میدهد. پردازش برداری روی تمام اعضای آرایه به صورت موازی انجام میشود؛ مشروط بر این که هر گذرگاه مستقل از دیگری باشد. پردازش برداری از هزینه سربار مکانیزم کنترل حلقه که در کامپیوترهای همهمنظوره استفاده میشود جلوگیری میکند. پردازش برداری تنها در یک عملیات، تمام محاسبات را روی یک آرایه انجام میدهد. «عملیات برداری»، «ضرب ماتریسی» و «برگی کردن حافظه» (Memory Interleaving) از جمله مباحثی هستند که در پردازش موازی در درس معماری کامپیوتر دارای اهمیت هستند.
پردازنده آرایه
«پردازنده آرایه» (Array Processor) همچنین با عنوان «چند پردازنده» یا «پردازنده برداری» نیز شناخته میشود. پردازنده برداری، محاسبات را روی آرایههای بزرگی از دادهها انجام میدهد. بنابراین، این نوع پردازندهها برای بهبود عملکرد کامپیوتر مورد استفاده قرار میگیرند.
اساساً دو نوع پردازنده آرایه وجود دارد؛ یکی پردازندههای آرایه الحاقی (Attached Array Processor) و دیگری پردازندههای آرایه SIMD هستند. یک پردازنده آرایه الحاقی پردازندهای است که به یک کامپیوتر همه منظوره ملحق شده و هدفش بهبود عملکرد آن کامپیوتر در وظایف محاسبات عددی است. SIMD یک کامپیوتر با سازمان مستقل است. یک پردازنده SIMD حاوی چندین پردازنده است که به صورت موازی عمل میکنند.
محاسبات در کامپیوتر
دستورالعملهای محاسباتی (Arithmetic Instructions) در کامپیوترهای دیجیتال جهت تولید نتایج لازم برای یافتن جواب مسائل محاسباتی، دادهها را دستکاری میکنند.
چهار عمل اصلی، عملیات حسابی جمع، تفریق، ضرب و تقسیم هستند. با استفاده از این چهار عمل بنیادی، امکان فرمولهسازی سایر توابع و عملیات ریاضی به وجود میآید.
یک پردازنده حسابی، بخشی از پردازنده است که عملیات محاسباتی را انجام میدهد. یک دستورالعمل حسابی میتواند شامل دادههای دودویی یا دهدهی شود که ممکن است دادهها در هر یک از این موارد، به صورت ممیز ثابت یا ممیز شناور باشند.
در بخش محاسبات کامپیوتر از درس معماری کامپیوتر، الگوریتمهای مختلف حسابی شرح داده میشوند و رویه پیادهسازی این الگوریتمها با سختافزار دیجیتال نشان داده میشود. عملیات جمع، تفریق، ضرب و تقسیم برای انواع داده زیر در نظر گرفته میشوند:
دادههای دودویی ممیز ثابت در نمایش مقدار علامتدار
دادههای دودویی ممیز ثابت در نمایش متمم دو
دادههای دودویی ممیز شناور
دادههای دهدهی کد شده به صورت دودویی
سرفصلهای بخش محاسبات کامپیوتری شامل جمع و تفریق، الگوریتمهای ضرب، الگوریتمهای تقسیم، عملیات حسابی ممیز شناور، واحد حساب دهدهی و عملیات حساب دهدهی میشوند. در ادامه مطلب درس معماری کامپیوتر به توضیح ساده و مختصر هر یک از این سرفصلهای ذکر شده پرداخته شده است.
جمع و تفریق
در بخش عملیات جمع و تفریق در درس معماری کامپیوتر، ابتدا به جمع و تفریق با مقادیر علامتدار پرداخته میشود. سپس، پیادهسازی سختافزاری جمع و تفریق انجام شده و الگوریتم سختافزاری آن معرفی میشوند. جمع و تفریق با دادههای متمم دو علامتدار نیز شرح داده شده است. وقتی اعداد علامتدار با هم جمع یا تفریق میشوند، بسته به علامت اعداد و عملیاتی که انجام میشود، هشت حالت مختلف وجود دارد که باید در نظر گرفته شوند.
الگوریتم جمع (تفریق)
وقتی علامت عملوندهای A و B یکسان (متفاوت) باشند، دو مقدار جمع و علامت A به عنوان علامت حاصل جمع در نظر گرفته میشود. اگر علامتها متفاوت (یکسان) باشند، مقادیر مقایسه میشوند و مقدار کوچکتر از مقدار بزرگتر کم میشوند. اگر A>B باشد، متمم علامت A و یا اگر A<B باشد، علامت حاصل جواب همعلامت با A انتخاب میشود. اگر مقادیر عملوندها برابر باشند، B از A کم میشود و علامت جواب مثبت قرار داده میشود.
در بخش الگوریتمهای ضرب نیز ضرب دو عدد باینری ممیز ثابت با مقادیر علامتدار به وسیله یک پروسه عملیات متوالی جابهجایی و جمع نمایش داده شدهاند. همچنین، پیادهسازی سختافزاری برای دادههای علامتدار شرح داده شده است. در پیادهسازی سختافزای تغییرات جزئی در منطق ضرب کلاسیک اعمال میشود.
الگوریتم سختافزاری عملیات ضرب نیز در این بخش با نمایش فلوچارت آن ارائه میشود. الگوریتم ضرب بوث (Booth Multiplication Algorithm) نیز برای ضرب اعداد صحیح دودویی با نمایش متمم دو علامتدار استفاده میشود.
الگوریتم های تقسیم
عملیات تقسیم دو عدد باینری با نمایش مقادیر علامتدار روی کاغذ به صورت یک پروسه از عملیات مقایسه، جابهجایی و تفریق انجام میشود. تقسیم باینری نسبت به تقسیم دهدهی سادهتر است. وقتی عملیات تقسیم در کامپیوتر دیجیتال پیادهسازی میشود، باز هم تغییراتی برای سازگاری بیشتر اعمال میشود. سختافزار لازم برای پیادهسازی عملیات تقسیم با آن چه برای عملیات ضرب استفاده میشود، تقریبا یکسان است.
عملیات تقسیم ممکن است به خارج قسمتی منجر شود که دارای سربار (Overflow) است. این مشکل در انجام عملیات روی کاغذ رخ نمیدهد اما حین انجام عملیات با سختافزار کامپیوتر، سربار تقسیم یک مسئله حیاتی محسوب میشود. چگونگی بروز سربار تقسیم و نحوه مدیریت آن یکی دیگر از مواردی است که در مبحث الگوریتمهای تقسیم از درس معماری کامپیوتر به آن پرداخته شده است. علاوه بر روش بازگشتی، دو روش دیگر برای تقسیم اعداد وجود دارد که روش مقایسهای و روش غیر بازگشتی نامیده میشوند.
عملیات حسابی ممیز شناور
بسیاری از زبانهای برنامهنویسی سطح بالا امکاناتی برای مشخص کردن اعداد ممیز شناور دارند. هر کامپیوتری که کامپایلری برای چنین زبانهای برنامهنویسی سطح بالا دارد، باید امکان مدیریت عملیات ممیز شناور را داشته باشد. یک عدد ممیز شناور در ثباتهای کامپیوتر دارای دو جزء است؛ جزء کسری و جزء توانی.
پیکربندی ثبات برای عملیات ممیز شناور تقریباً مشابه چیدمان عملیات ممیز ثابت است. به عنوان یک قاعده عمومی، جمعکننده و ثباتهای یکسانی برای پردازش بخش کسری استفاده میشود. تفاوت در نحوه مدیریت توانها نهفته است. نحوه انجام عملیات حسابی ممیز شناور برای جمع، تفریق، ضرب و تقسیم در این بخش از درس معماری کامپیوتر توضیح داده شده است.
واحد محاسبات دهدهی
کاربر کامپیوتر دادهها را با اعداد دهدهی آماده میکند و انتظار دارد نتایج را نیز به صورت دهدهی دریافت کند. اما یک CPU با یک واحد محاسبات و منطق، تنها میتواند ریز عملیات حسابی را روی دادههای دودویی انجام دهد. در نتیجه، برای انجام عملیات روی دادههای دهدهی نیاز است اعداد دهدهی وارد شده توسط کاربر به دودویی تبدیل شوند. سپس، عملیات لازم روی دادههای دودویی انجام شود و در آخر نتایج حاصل شده مجدداً به دهدهی تبدیل شوند.
این رویکرد ممکن است برای کاربردهایی که نیاز به میزان محاسبات بزرگی دارند و به نسبت، تعداد ورودی-خروجی کمتری دارند، مناسب و بهینه باشد. اما وقتی نیاز به تعداد ورودی-خروجی زیاد با مقادیر کوچکتری از محاسبات حسابی وجود داشته باشد، بهتر است محاسبات داخلی مستقیماً با اعداد دهدهی انجام شوند. کامپیوترهایی که توانایی انجام محاسبات دهدهی را دارند، باید دادههای دهدهی را با فرم کد شده دودویی ذخیره کنند.
یک واحد محاسبات دهدهی یک کارکرد دیجیتال برای انجام ریزعملیات دهدهی است. واحد محاسبات دهدهی میتواند اعداد دهدهی را جمع و تفریق کند. این واحد اعداد دهدهی کدگذاری دودویی را دریافت میکند و نتایج را به همان روش کدگذاری شده دودویی بازمیگرداند.
عملیات حسابی دهدهی
الگوریتم عملیات حسابی دهدهی مشابه الگوریتمهای متناظر با دادههای دودویی است. در واقع، تنها با اندکی تغییرات در الگوریتمهای ضرب و تقسیم، به شرطی که نمادهای ریزعملیات به درستی تفسیر شوند، میتوان فلوچارتهای یکسانی را برای هر دو نوع داده به کار برد. در این بخش از مبحث محاسبات در کامپیوتر، مشابه قسمتهای قبلی، عملیات اصلی جمع، تفریق، ضرب و تقسیم، اما این بار برای دادههای دهدهی ارائه میشود. در ادامه مطلب درس معماری کامپیوتر به سازمان ورودی-خروجی در معماری کامپیوتر پرداخته شده است.
سازمان ورودی-خروجی
زیرسیستم ورودی-خروجی در یک کامپیوتر، روش ارتباطی بهینه و کاربردی میان سیستم مرکزی و محیط بیرونی را به وجود میآورد. سازمان ورودی-خروجی، تمامی عملیات ورودی-خروجی را در یک سیستم کامپیوتری بر عهده دارد.
از جمله عناوین اصلی که در حیطه سازمان ورودی-خروجی مورد بحث هستند، میتوان به دستگاههای جانبی (Peripheral Devices)، رابط ورودی-خروجی (Input-Output Interface)، انتقال داده ناهمگام (Asynchronous Data Transfer)، روشهای انتقال (Modes of Transfer)، وقفه با اولویت (Priority Interrupt)، دسترسی مستقیم حافظه (Direct Memory Access | DMA)، پردازنده ورودی-خروجی (Input-Output Processor) و ارتباط ترتیبی (Serial Communication) اشاره کرد. در ادامه مطلب درس معماری کامپیوتر، به ارائه توضیحاتی در مورد هر یک از موارد ذکر شده در زمینه سازمان ورودی- خروجی پرداخته شده است.
دستگاه های جانبی کامپیوتر
دستگاههای جانبی به هر نوع دستگاهی (شامل سنسورها) گفته میشود که برای وارد کردن اطلاعات و دستورالعملها در کامپیوتر (ذخیره سازی یا پردازش) استفاده میشوند و یا برای تحویل دادههای پردازش شده به یک کاربر به کار میروند. معمولا کاربر یک انسان است اما در برخی مواقع، کاربر میتواند یک ماشین باشد که توسط کامپیوتر کنترل میشود. چنین دستگاههایی تجهیزات جانبی سیستمهای کامپیوتری مدرن را تشکیل میدهند.
دستگاههای جانبی به طور معمول به سه دسته تقسیم میشوند: دستگاههای ورودی، دستگاههای خروجی و دستگاههای ذخیرهسازی. دستگاههای ذخیرهسازی ویژگیهای مشترکی را از هر دو دستگاههای ورودی و دستگاههای خروجی دارند. یک دستگاه ورودی، دادهها و دستورات ورودی را به الگویی از سیگنالهای الکتریکی دودویی تبدیل میکند. این سیگنالهای تولید شده توسط دستگاه ورودی، برای یک کامپیوتر دیجیتال تفسیرپذیر هستند. یک دستگاه خروجی برعکس کار دستگاه ورودی را انجام میدهد و در واقع سیگنالهای دیجیتال را بسته به نوع دستگاه خروجی مربوطه، به دادههای قابل فهم برای کاربر تبدیل میکند.
رابط ورودی-خروجی
رابط (Interface)، به مرز مشترک میان دو جزء مستقل در یک سیستم کامپیوتری گفته میشود که میتوان از آن برای اتصال دو یا چند جزء به سیستم به منظور برقراری ارتباط استفاده کرد. دو نوع رابط در سیستمهای کامپیوتری وجود دارد؛ یکی رابط CPU و دیگری رابط ورودی-خروجی (Input-Output Interface | I/O Interface) هستند.
دستگاههای جانبی که به یک کامپیوتر متصل هستند، نیاز به پیوند ارتباطی ویژهای برای اتصال به CPU دارند. در یک سیستم کامپیوتری، قطعات سختافزاری مخصوصی بین CPU و دستگاههای جانبی وجود دارد. این قطعات برای کنترل و مدیریت تبادل ورودی-خروجی استفاده میشوند. قطعات مذکور را واحدهای رابط ورودی-خروجی مینامند، به این دلیل که پیوند ارتباطی را میان گذرگاه CPU و دستگاههای جانبی برقرار میکنند.
انتقال داده ناهمگام
عملیات داخلی در یک سیستم دیجیتال به وسیله پالسهای ساعت تولید شده با یک مولد پالس مشترک (Common Pulse Generator) همگامسازی میشوند. پالسهای ساعت به تمامی ثباتهای موجود در یک واحد اعمال میشوند و در طول وقوع یک پالس ساعت، کل انتقال داده میان ثباتها به صورت همزمان انجام میشود.
دو واحد CPU و رابط I/O، مستقل از یکدیگر طراحی شدهاند. اگر ثباتهای یک رابط، ساعت مشترکی با ثباتهای CPU داشته باشند، انتقال میان دو واحد همگام خوانده میشود. در اکثر موارد، زمانبندی داخلی هر واحد مستقل از دیگری است چرا که هر کدام از این واحدها از ساعت خصوصی برای ثباتهای داخلی خود استفاده میکنند.
در چنین حالتی، گفته میشود که دو واحد مربوطه با یکدیگر ناهمگام هستند. این رویکرد در اکثر سیستمهای کامپیوتری به صورت گستردهای مورد استفاده قرار میگیرد. برای انتقال داده ناهمگام میان دو واحد مستقل، نیاز است سیگنالهای کنترلی بین دو واحدی که در حال برقراری ارتباط هستند ارسال و دریافت شوند تا زمان دقیق تبادل داده مشخص شود.
روشهای انتقال
اطلاعات دودویی که از یک دستگاه دریافت میشوند معمولاً در یک واحد حافظه ذخیره میشوند. واحد حافظه منبع اطلاعاتی است که از CPU به یک دستگاه خارجی منتقل میشود. CPU صرفاً اطلاعات را پردازش میکند اما، منبع و هدف همیشه واحد حافظه است.
انتقال داده میان CPU و دستگاههای I/O ممکن است به شیوههای مختلفی انجام شود. انتقال داده به و یا از یک دستگاه جانبی، ممکن است با یکی از سه روش زیر انجام شود:
ورودی-خروجی برنامهریزی شده (Programmed I/O)
ورودی-خروجی با وقفه آغازین (Interrupt- initiated I/O)
دسترسی مستقیم حافظه (DMA)
وقفه با اولویت
وقتی دستگاههای ورودی-خروجی برای انتقال I/O آماده هستند، یک سیگنال درخواست وقفه به کامپیوتر ارسال میکنند. CPU این سیگنال را دریافت میکند، دستورات فعلی که در حال اجرا هستند را به تعویق میاندازد و بعد نسبت به سرویسدهی به آن درخواست انتقال اقدام میکند. اما ممکن است چند دستگاه به صورت همزمان تولید وقفه کنند. در این صورت، باید روشی برای تصمیمگیری وجود داشته باشد تا بتوان تشخیص داد که ابتدا باید به کدام وقفه پاسخ داده شود.
به بیان دیگر، باید اولویتبندی لازم بین همه دستگاهها برای سرویسدهی وقفه به شکلی نظاممند انجام شود. بنابراین، راهکار تعریف یک اولویتبندی میان دستگاهها برای تشخیص این که کدام دستگاه در صورت دریافت درخواستهای همزمان باید زودتر سرویسدهی شود، سامانه اولویتدهی وقفه نامیده میشود.
دسترسی مستقیم حافظه
علاوه بر دو روش ورودی-خروجی برنامهریزی شده و ورودی-خروجی با وقفه، سومین روش انتقال داده دسترسی مستقیم حافظه (DMA) است که انتقال بلوک داده میان حافظه و دستگاههای جانبی سیستم را بدون دخالت پردازنده انجام میدهد. واحدی که مستقیماً فعالیت دسترسی به حافظه را کنترل میکند، کنترلگر DMA نامیده میشود.
پردازنده برای چند چرخه ساعت، گذرگاه سیستم را رها میکند تا کنترلگر DMA بتواند وظیفه انتقال داده را از طریق گذرگاه سیستم انجام دهد. کنترلگر دیامای به سه روش حالت پیوسته (Burst Mode)، حالت سرقت چرخه (Cycle Stealing Mode) و حالت شفاف (Transparent Mode) دادهها را انتقال میدهد.
پردازنده ورودی-خروجی
یک پردازنده ورودی-خروجی (Input-Output Processor | IOP) پردازندهای با قابلیت دسترسی مستقیم حافظه است. در پردازنده ورودی-خروجی، سیستم کامپیوتری به یک واحد حافظه و چند پردازنده تقسیم میشود. هر IOP وظایف ورودی-خروجی را کنترل و مدیریت میکند. IOP مشابه CPU است با این تفاوت که تنها کنترل جزئیات پردازشهای مربوط به ورودی-خروجی را در اختیار دارد. در واقع، دستورات پردازنده ورودی-خروجی تنها برای مدیریت انتقال I/O طراحی شدهاند.
انتقال ترتیبی چیست؟
تبادل داده ترتیبی (Serial Communication) که در ترجمه کتاب مانو به آن «تبادل اطلاعات سری» گفته شده است، یک روش ارتباطی است که در آن تبادل دادهها به صورت ترتیبی و یک بیت در هر لحظه انجام میشود. این انتقال به صورت یک ترتیب پیدرپی روی گذرگاه کامپیوتر رخ میدهد.
انتقال سری، روشی است که به طور گستردهای برای انتقال اطلاعات میان دستگاههای جانبی و تجهیزات پردازش داده مورد استفاده قرار میگیرد. انتقال دادهها به صورت سریالی در نقطه مقابل روش انتقال داده موازی قرار میگیرد. پروتکلهای مختلفی برای هر دو روش وجود دارند. پروتکل انتقال داده سری مبتنی بر کاراکتر (Character-Oriented Protocol) و همچنین پروتکل مبتنی بر بیت (Bit-Oriented Protocol) از جمله پروتکلهای اساسی در انتقال دادهها به صورت سری محسوب میشوند.
سازمان حافظه
یک واحد حافظه، مجموعهای از واحدها یا دستگاههای ذخیرهسازی (انباره) است. واحد حافظه، اطلاعات دودویی را به صورت بیت ذخیره میکند.
به طور کلی، حافظه/انباره به دو دسته طبقهبندی میشوند:
حافظه موقت (Volatile Memory): این نوع حافظه با خاموش شدن منبع تغذیه، دادههای ذخیره شده خود را از دست میدهد.
حافظه غیرموقت (Non-Volatile Memory): این حافظه دائمی است و با قطع شدن منبع تغذیه هیچ دادهای را از دست نمیدهد.
سلسله مراتب حافظه
ظرفیت کلی یک کامپیوتر را میتوان به وسیله سلسله مراتب اجزاء ذخیرهسازی آن تصور کرد. سیستم سلسلهمراتبی حافظه از همه دستگاههای ذخیرهسازی موجود در یک سیستم کامپیوتری، از حافظه کندی هم چون حافظه کمکی (Auxillary Memory) گرفته تا حافظه سریعی مثل حافظه اصلی و همچنین حافظههای با اندازه کوچکتری مانند حافظه پنهان (Cache Memory) تشکیل شده است.
حافظه اصلی
واحد حافظهای که مستقیماً در درون CPU، حافظه کمکی و حافظه پنهان ارتباط برقرار میکند، به عنوان حافظه اصلی شناخته میشود. حافظه اصلی، واحد مرکزی ذخیرهسازی در کامپیوتر است. این حافظه بزرگ و سریع برای ذخیرهسازی دادهها در طول عملیات کامپیوتری طراحی شده است.
حافظه اصلی از RAM و ROM تشکیل شده است که در آن تراشههای مدار مجتمع RAM دارای سهم عمده هستند. حافظه دسترسی موقت (RAM)، سه نوع مختلف دارد. یکی رم پویا (Dynamic RAM | DRAM) است که از خازنها و ترانزیستورها تشکیل میشود. رم ایستا (Static RAM | SRAM) نوع دیگری از RAM است که دارای شش مدار ترانزیستور در هر سلول است و داده را تا زمان خاموش شدن حفظ میکند. رم غیر فرار (Non-Volatile RAM | NVRAM) نیز سومین نوع رم است که حتی در صورت خاموش شدن، اطلاعات را حفظ میکند (مثل Flash Memory).
حافظه کمکی چیست؟
دستگاههایی که انباره پشتیبان فراهم میکنند، حافظه کمکی نامیده میشوند. به عنوان مثال، دیسکها و نوارهای مغناطیسی نمونههایی از دستگاههای حافظه کمکی رایج هستند. حافظه کمکی به عنوان انباره دائمی دادهها مورد استفاده قرار میگیرد. دادهها و دستورالعملها توسط حافظه کمکی به حافظه اصلی خوراک (Feed) داده میشوند. از حافظه کمکی برای ذخیره برنامههای سیستمی، فایلهای بزرگی از دادهها و سایر اطلاعات پشتیبانگیری شده استفاده میشود.
حافظه تداعی گر
حافظه تداعیگر (Associative Memory) را میتوان به عنوان واحد حافظهای در نظر گرفت که در آن به جای دسترسی یافتن به دادههای ذخیره شده از طریق یک آدرس یا موقعیت در حافظه، با استفاده از محتویات خود دادهها قابل شناسایی و دسترسی است. حافظه تداعیگر معمولاً با نام «حافظه با محتوای قابل آدرسدهی» (Content Addressable Memory | CAM) شناخته میشود.
وقتی یک عملیات نوشتن در حافظه تداعیگر اجرا میشود، هیچ آدرس یا موقعیت حافظهای به آن کلمه داده نمیشود. خود حافظه توانایی پیدا کردن یک محل خالی و استفاده نشده را برای ذخیره کلمه مربوطه دارد. از طرف دیگر، وقتی باید کلمهای از حافظه خوانده شود، محتویات کلمه مشخص شده است. کلماتی که با محتوای مشخص شده همخوانی داشته باشند توسط حافظه موقعیتیابی شده و برای خواندن علامتگذاری میشوند.
حافظه پنهان
حافظه پنهان (حافظه کش | Cache Memory) در سازمان کامپیوتر یک حافظه بسیار پرسرعت است. از این حافظه برای سرعت بخشیدن و همگام سازی با پردازندههای پرسرعت استفاده میشود. حافظه کش نسبت به حافظه اصلی یا حافظه دیسکی قیمت بالاتری دارد اما نسبت به ثباتهای CPU اقتصادیتر است. حافظه پنهان آن چنان فوق سریع است که به عنوان یک بافر (حائل | واسطه | Buffer) بین RAM و CPU عمل میکند.
در واقع حافظه پنهان، دادهها و دستورات درخواست شده به دفعات زیاد را نگهداری میکند تا در صورت نیاز، این دادهها و دستورات بلافاصله برای CPU در دسترس باشند. حافظه پنهان برای کاهش زمان میانگین دسترسی به دادهها از حافظه اصلی به کار گرفته میشود. حافظه کش کوچکتر و سریعتر است تا بتواند رونوشتهایی از دادهها را در محلهای پراستفاده حافظه اصلی در خود ذخیره کند.
حافظه مجازی
یک کامپیوتر میتواند حافظه بیشتری را نسبت به آنچه به صورت فیزیکی روی سیستم نصب شده آدرسدهی کند. در واقع، این حافظه اضافی را حافظه مجازی (Virtual Memory) مینامند. حافظه مجازی قسمتی از هارد دیسک است که برای شبیهسازی RAM کامپیوتر کنار گذاشته شده است.
برتری اصلی این روش این است که برنامهها میتوانند بزرگتر از حافظه اصلی باشند. حافظه مجازی دو هدف اصلی دارد. اول اینکه امکان تعمیم حافظه فیزیکی را به وسیله استفاده از دیسک فراهم میکند. دومین هدف فراهم سازی امکان حفاظت از حافظه است؛ چرا که هر آدرس مجازی به یک آدرس فیزیکی ترجمه میشود.
سخت افزار مدیریت حافظه
در یک محیط چندبرنامهای که برنامههای متعددی در حافظه وجود دارند، لازم است محل برنامهها و دادهها در حافظه تغییر کند. این کار برای تغییر دادن میزان حافظه اشغال شده توسط یک برنامه خاص و همچنین جلوگیری از تغییر سایر برنامهها به وسیله یک برنامه خاص انجام میشود.
تقاضا برای حافظه کامپیوتر که حاصل ماهیت چندبرنامهای کامپیوترها است، نیاز به یک سیستم مدیریت حافظه را به وجود آورده است. یک سیستم مدیریت حافظه مجموعهای است از عملیات سختافزاری و نرمافزاری برای مدیریت برنامههای مختلفی که در حافظه قرار دارند. سیستم مدیریت حافظه نرمافزاری بخشی از یک سیستم عامل جامع محسوب میشود که در اکثر کامپیوترها در دسترس است. در بخش سخت افزار مدیریت حافظه، دغدغه اصلی، واحد سختافزای مربوط به یک سیستم مدیریت حافظه است. اجزاء بنیادی یک واحد مدیریت حافظه شامل موارد زیر میشوند:
قابلیتی برای تغییر محل ذخیرهسازی به صورت پویا که ارجاعهای منطقی حافظه را به آدرسهای فیزیکی حافظه نگاشت کند.
تمهیداتی برای به اشتراکگذاری برنامههای رایج ذخیره شده در حافظه توسط کاربران مختلف
حفاظت اطلاعات در برابر دسترسی غیر مجاز میان کاربران و جلوگیری از تغییر سیستم عامل توسط کاربر
در ادامه مطلب درس معماری کامپیوتر معرفی و شرحی اجمالی از مبحث چندپردازندهها انجام شده است.
چند پردازنده ها
یک چند پردازنده، سیستم کامپیوتری است با دو یا بیش از دو واحد پردازش مرکزی (CPU) که دسترسی به یک RAM را با هم به اشتراک میگذارند. هدف اصلی استفاده از یک چندپردازنده افزایش سرعت اجرای سیستم است. از دیگر اهداف یک چندپردازنده میتوان به تحمل خطا (Fault Tolerance) و تطبیق کاربرد (Application Matching) اشاره کرد.
دو نوع چندپردازنده وجود دارد؛ یکی چندپردازنده با حافظه اشتراکی (Shared Memory Multiprocessor) و دیگری چند پردازنده با حافظه توزیع شده (Distributed Memory Multiprocessor) است.
از جمله موضوعاتی که در خصوص چندپردازندهها در درس معماری کامپیوتر اهمیت دارد میتوان به خصوصیات چندپردازندهها، ساختارهای اتصال داخلی، واسطهگری میان پردازندهای (Interprocessor Arbitration)، ارتباط و همگامسازی میان پردازندهای و در نهایت به پیوستگی و انسجام حافظه پنهان (Cache Coherence) اشاره کرد. در ادامه مطلب درس معماری کامپیوتر به مباحث مهم ذکر شده در حیطه چندپردازندهها پرداخته شده است.
خصوصیات چندپردازنده ها
در این بخش از مطلب درس معماری کامپیوتر، برخی از خصوصیات مهم چندپردازنده ها به صورت موردی آورده شده است:
اصطلاح پردازنده در چندپردازندهها میتواند یا به معنی یک پردازنده مرکزی (CPU) و یا یک پردازنده ورودی-خروجی (IOP) باشد.
چندپردازندهها به عنوان سیستمهای جریان چند دستوری با جریان داده چندگانه (MIMD) طبقهبندی میشوند.
قابلیت چندپردازندگی اعتبار سیستم را افزایش میدهد.
مزیت حاصل شده از یک سازمان چندپردازنده همان عملکرد بهبود یافته آن سیستم است؛ چرا که، چندین کار مستقل را میتوان به صورت موازی انجام داد و همچنین، یک کار تکی را میتوان به چندین وظیفه موازی تقسیم کرد.
در چند پردازندگی میتوان عملکرد و کارایی را به وسیله تجزیه یک برنامه به وظایف موازی قابل اجرا بهبود بخشید.
ساختارهای اتصالات درونی
یک کامپیوتر از مجموعهای از قطعات یا واحدهای مستقل (ماژول) تشکیل شده است. ماژول یک واحد نرمافزاری و سختافزاری مجزا است. اطلاعات میان این واحدهای مستقل تبادل میشوند. اصولاً سه نوع ماژول وجود دارد؛ ماژول پردازنده، ماژول حافظه و ماژول ورودی-خروجی (I/O).
این ماژولها از طریق مجموعه مسیرهای اتصال دهنده مختلف با یکدیگر ارتباط برقرار میکنند. این مسیرها با عنوان ساختارهای اتصالات درونی (فیمابین) شناخته میشوند. انواع نقل و انتقالها بسته به دستگاههایی که باید به صورت درونی متصل شوند و همچنین بسته به اینکه اطلاعات به صورت تک بیتی حمل میشوند یا با تعداد بیت زیاد، متفاوت است. ساختارهای اتصالات درونی باید از انواع نقل و انتقالهای اطلاعات پشتیبانی کنند. این موارد در ادامه لیست شدهاند.
حافظه به پردازنده
پردازنده به حافظه
ورودی-خروجی به پردازنده
پردازنده به ورودی-خروجی
ورودی-خروجی به OR
از جمله موضوعاتی که در مورد ساختارهای اتصالات درونی مطرح میشوند میتوان به گذرگاه مشترک با تسهیم زمانی، حافظه با چند درگاه و سایر موارد اشاره کرد.
واسطه گر میان پردازنده ای
منطق واسطهگری (داوری) از بروز تعارض در گذرگاه جلوگیری میکند. واسطهگر میان پردازندهای بخشی از کنترلگر گذرگاه سیستم است. واسطهگری میان پردازنده دو نوع مختلف دارد:
رویههای واسطهگری به تمامی درخواستهای پردازنده بر پایه اولویتهای تعیین شده خدمترسانی میکنند.
ارتباط میان پردازنده ای و همگام سازی
ارتباط میان پردازنده ای ساز و کاری است که توسط سیستم عامل فراهم شده است. ارتباط بین پردازنده به پردازشها اجازه میدهد تا با یکدیگر ارتباط برقرار کنند. این برقراری ارتباط میتواند شامل اطلاع رسانی یک پردازش به پردازش دیگر در مورد رخداد یک اتفاق باشد و یا میتواند انتقال یک پردازش به پردازش دیگر باشد.
همگام سازی در ارتباط میان پردازنده ای
همگام سازی بخش مهمی در ارتباط میان پردازنده ای است. همگامسازی یا به وسیله ساز و کار کنترل میان پردازندهای فراهم میشود و یا توسط پردازشهای ارتباطی مدیریت میشود. روشهای مختلفی برای اجرای همگامسازی وجود دارد. برخی از این روشها شامل، مخابره (Semaphore)، انحصار متقابل (Mutual Exclusion)، مانع (Barrier) و چرخه قفل (Spinlock) هستند. رویکردهای متفاوتی در ارتباط میان پردازندهای وجود دارد که روش لولهای، سوکتی، سیگنالی، فایلی و حافظه اشتراکی از جمله این رویکردها هستند.
در یک سیستم چندپردازندهای ممکن است تناقض دادهای در میان سطوح مجاور و یا در درون یک سطح از سلسله مراتب حافظه رخ دهد. در یک چندپردازنده حافظه اشتراکی با یک حافظه پنهان مجزا برای هر پردازنده، ممکن است نسخههای متعددی از هر یک از عملوندهای دستورالعملی وجود داشته باشد. به این صورت که ممکن است یک نسخه در حافظه اصلی باشد و یک نسخه هم در هر یک از حافظههای پنهان پردازندهها وجود داشته باشد. وقتی یکی از نسخههای عملوند تغییر کند، سایر نسخههای آن عملوند نیز باید تغییر کنند.
چون پردازندهها به صورت موازی کار میکنند و ممکن است چندین حافظه پنهان نسخههای متفاوتی از یک بلوک حافظه خاص را در اختیار داشته باشند، مشکل عدم انسجام حافظه پنهان اتفاق میافتد. بنابراین، انسجام حافظه پنهان شامل مقرراتی است که با هدف حصول اطمینان از اطلاعرسانی تغییرات متغیرهای اشتراکی در سراسر سامانه و در سریعترین زمان ممکن وضع میشوند.
در مطلب «درس معماری کامپیوتر | به زبان ساده» تمامی مباحث مهم مربوط به درس معماری کامپیوتر به طور کامل پوشش داده شده است. در این مطلب، ابتدا در مورد چیستی معماری کامپیوتر توضیحاتی ارائه شد، سپس در مورد اهمیت درس معماری کامپیوتر و لزوم توجه ویژه به این درس صحبت شد. پس از آن، معماری کامپیوتر فون نویمان به عنوان مثالی از یک کامپیوتر بنیادین معرفی شد. همچنین، منابع مهم و رایج برای درس معماری کامپیوتر معرفی شدند.
در ادامه به عناوین و سرفصلهای مهم در درس معماری کامپیوتر پرداخته شد و مباحث مهمی از جمله مدارهای منطقی، اجزا و قطعات دیجیتال، نمایش دادهها، طراحی و ساختار کامپیوتر پایه، واحد پردازنده مرکزی، سازمان ورودی-خروجی و سایر مباحث مطرح در زمینه درس معماری کامپیوتر پرداخته شد و در پایان نیز دورهها و فیلمهای آموزشی مرتبط با معماری کامپیوتر، مدارهای منطقی و سیستمهای دیجیتال در سایت فرادرس معرفی شدند.
بابک خوشنویس دانشآموخته کارشناسی ارشد رشته علوم کامپیوتر گرایش علوم تصمیم و مهندسی دانش است. او به حوزههای هوش مصنوعی، لینوکس و برنامه نویسی علاقه دارد و به عنوان دبیر تحریریه علوم کامپیوتر مجله فرادرس فعالیت داشته است.
شما در حال مطالعه نسخه آفلاین یکی از مطالب «مجله فرادرس» هستید. لطفاً توجه داشته باشید، ممکن است برخی از قابلیتهای تعاملی مطالب، مانند امکان پاسخ به پرسشهای چهار گزینهای و مشاهده جواب صحیح آنها، نمایش نتیجه آزمونها، پاسخ تشریحی سوالات، پخش فایلهای صوتی و تصویری و غیره، در این نسخه در دسترس نباشند. برای دسترسی به نسخه آنلاین مطلب، استفاده از کلیه امکانات آن و داشتن تجربه کاربری بهتر اینجا کلیک کنید.
سلام ممنون از مطالب خوبتون با ذکر نام استفاده می کنم.