موضوع مقاله: خط لوله (رایانه) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # خط لوله (رایانه) | مقدمه: برای اجرای دستورالعمل‌ها در پردازنده ابتدا فرض را بر این می‌گیریم که هر دستور در یک سیکل انجام می‌شود. | ## بخش 1: خط لوله (رایانه) | پس ابتدا لباس‌ها را در لباسشویی قرار داده تا شسته شوند، سپس آن‌ها را از لباسشویی خارج کرده و در خشک کن قرار می‌دهید و پس از خشک شدن، از خشک کن خارج کرده و در مرحلهٔ بعد، در محلشان قرار می‌دهید؛ و باز به سراغ سری بعدی لباس‌ها رفته و برای آن‌ها نیز این مراحل را تکرار می‌کنید. روش دیگر برای شستن تعداد زیاد لباس این است که در ابتدا تعدادی لباس را در لباسشویی قرار داده و پس از شسته شدن، آن‌ها را از لباسشویی خارج کرده و در خشک کن قرار می‌دهیم، منتهی از سوی دیگر، تعدادی لباس دیگر را وارد لباسشویی (که فعلاً بیکار است) می‌کنیم. روش اول، معادل آن است که هر دستور، تنها در یک سیکل انجام شود و از آنجا که در یک سیکل، داده‌ها از عناصر موجود در مسیر داده تنها یک بار می‌گذرند پس در قسمتی از سیکل، بعضی عناصر داده بی‌مصرف می‌مانند. استفاده از روش دوم معادل آن است که در هر سیکل، علاوه بر آنکه یک دستور، اجرا شده و در طول سیکل، از مسیر داده عبور می‌کند، به دنبال آن بقیه دستورها وارد مسیر داده شوند که در اینصورت، در یک سیکل، تعداد بیشتری از عناصر داده شده استفاده می‌شوند و در نتیجه، سرعت و کارایی بهبود می‌یابند. پس pipeline، مجموعه‌ای از عناصر (مراحل) پردازش داده است که به صورت سری به یکدیگر متصلند و ورودی هر عنصر، خروجی عنصر قبلی است. در مثال فوق، مراحل ما سه‌گانه بودند (شستن، خشک کردن، تا کردن و در محل قرار دادن) اما در پردازنده‌های مختلف، تعداد مراحل، متفاوت است. | ## بخش 2: خط لوله (رایانه) | گاهی در پردازش به صورت خط لوله اتفاقاتی رخ می‌دهد که باعث می‌شود دستور بعدی برای پردازش آماده نباشد. مخاطرات خط لوله با توجه به اتفاقاتی که برای دستور بعدی (که می‌خواهد وارد خط لوله شود) می‌افتد، مخاطرات به سه دسته تقسیم می‌شوند: مخاطرات ساختاری مخاطرات داده ای مخاطرات کنترلی مخاطرات ساختاری فرض کنید دو مرحله از خط لولهٔ ما فقط قابل استفاده در یک مرحله بود. در اینصورت در این مرحله فقط یک دستور می‌تواند به یکی از این دو دسترسی داشته باشد و این باعث به وجود آمدن تأخیر در خط لوله می‌شود، چرا که به جای آنکه دو دستور در یک پالس ساعت یک گام جلو روند باید صبر کنیم تا یکی جلو رود و در پالس ساعت بعدی دیگری وارد این مرحله شود. مثالی از این نوع مخاطره وجود یک حافظه برای دستورالعمل و داده به جای دو حافظه برای این دو است. وقتی یک حافظه داشته باشیم نمی‌توان در یک پالس ساعت هم از حافظه واکشی دستور داشته باشیم وهم داده از آن بگیریم در نتیجه مرحله یک و چهار به صورت هم‌زمان نمی‌توانند اجرا شوند. در صورت بروز این نوع مخاطره، برای رفع مشکل از روش تعلیق (حباب انداختن) استفاده می‌کنیم که در مباحث آتی به آن خواهیم پرداخت. | ## بخش 3: خط لوله (رایانه) | مخاطرات داده‌ای این مخاطره در صورتی رخ می‌دهد که دادهٔ مورد نیاز، که در دستور یا دستورها قبلی تهیه می‌شده، آماده نباشد. در صورت بروز این نوع مخاطره، بسته به نوع ایجاد آن به چند روش می‌توان مشکل را رفع کرد: تعلیق پیش فرستادن تغییر ترتیب کد اسمبلی برنامه که در مباحث آتی به شرح این روش‌ها خواهیم پرداخت. مخاطرات کنترلی هنگامی که یک دستور پرش شرطی وارد خط لوله می‌شود، دو حالت پیش می‌آید:یا پرش انجام می‌شود یا انجام نمی‌شود. اما اگر پرش انجام شود، این بدین معنی است که دستورها بین دستور پرش و دستور مقصد پرش نباید اجرا شوند، یعنی نباید وارد خط لوله شوند در حالی که تا آدرس مقصد پرش محاسبه شود یک سری دستور وارد خط لوله شده‌اند و این باعث بروز مخاطره می‌شود. در این قسمت، شیوه‌هایی برای رفع مخاطره بسته به نوع آن ارائه می‌دهیم: رفع مخاطرهٔ ساختاری تنها راه آن تعلیق (قرار دادن دستور تهی در خط لوله) است. | ## جمع‌بندی | یعنی وقتی دستور اول از منبع مشترک استفاده می‌کند، دستور دوم منتظر بماند تا بتواند در پالس ساعت بعدی از منبع، استفاده کند.