خط لوله (نرم‌افزار)

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
Translation arrow fa.svg این نوشتار یک ترجمه از ویکی‌پدیاهای دیگر است. پيوند به سایر زبان‌ها را در سمت راست-پايين اين صفحه ببينيد.

در مهندسی نرم‌افزار، خط لوله متشکل از زنجیره‌ای از پردازش عناصر (فرایندها، رسیمان‌ها، و غیره..)، مرتب شده است به طوری که خروجی هر عنصر ورودی عنصر بعدی می‌باشد. معمولاً مقداری از بافر بین عناصر متوالی مقرر شده است. اطلاعاتی که در جریان این خط لوله است اغلب به صورت بایت یا بیت است. این مفهوم لوله‌ها و فیلتر الگوی طراحی نیز نامیده می‌شود. که به خاطر شباهت به خط لوله فیزیکی، این چنین نامگذاری شد.

خط لوله چند پردازنده‌ای[ویرایش]

خط لوله اغلب در یک سیستم عامل چند وظیفه‌ای، توسط همه عناصری که زمان یکسانی برای پردازش می‌خواهند اجرا و راه‌اندازی شده و به طور خودکار به درخواست داده‌های خوانده شده توسط هر فرایند و داده‌های نوشته شده توسط فرایند بالادست سرویس دهی می‌شود. در این روش پردازنده اصلی به طور طبیعی میان فرایندها توسط زمانبند تعویض می‌شود تا بتوان زمان بیکاری را به حداقل رساند. در مدل‌های رایج دیگر، عناصر به صورت ریسمان‌های بسیار کم وزن و یا به عنوان coroutinesها به منظور کاهش سربار سیستم عامل اغلب با فرایندها درگیر می‌شوند. بسته به سیستم عامل، ریسمان‌ها ممکن است به طور مستقیم توسط سیستم عامل و یا توسط مدیریت ریسمان زمانبندی شوند. Coroutinesها همواره توسط مدیر نوعی از اشکال coroutine زمانبندی می‌شوند. معمولاً، درخواست‌های خواندن و نوشتن عملیات را مسدود می‌کنند. به این معنی که توقیف منبع در دست فرایند معلق است تا زمانی که همه اطلاعات بتوانند در فرایند مقصد نوشته شوند و همچینین اجرای فرایند مقصد پس از خواندن به تعلیق افتاده تا حداقل برخی از داده‌های درخواست شده بتواند منبع فرایند را به دست‌آورد. بدیهی است، این مسئله نمی‌تواند باعث ایجاد بن‌بست شود که در آن هر دو فرایندا به طور نامحدود در انتظار پاسخ یکدیگر بمانند از این رو حداقل یکی از دو فرایند بزودی درخواست سرویس خود را توسط سیستم عامل اعلام می‌کند و اجرا را ادامه می‌دهد. برای اجرا، بیشتر سیستم عامل‌ها برای اجرای لوله از لوله‌های بافر استفاده می‌کنند که اجازه می‌دهد منابع فرایند اطلاعات بیشتری را فراهم کند تا فرایند مقصد به طور متداول بتواند داده را دریافت کند یا اینکه مایل به دریافت باشد. تحت بیشتر Unices یا سیستم عامل‌های شبه لینوکس دستورها ویژه‌ای در دسترس است که لوله یک بافر را اجرا می‌کنند که پیاده‌سازی یک بافر لوله به طور بالقوه بسیار بزرگتر و با قابلیت تنظیم اندازه است که به طور معمول " بافر " نامیده می‌شود. این دستور می‌تواند مفید باشد اگر فرایند مقصد به طور قابل توجهی کندتر از منبع فرایند باشد، اما به هر حال مد نظر است که این منبع فرایند بتواند تاحد امکان وظیفه خود را در اسرع وقت تکمیل کند. به عنوان مثال، اگر منبع فرایند شامل یک فرمان باشد که آهنگ صوتی را از روی یک سی دی را بخواند، فرایند مقصد شامل یک فرمان داده است که شکل موج‌های صوتی را به فرمت MP3 فشرده سازی می‌کند. در این نمونه عمل میانگیری یا بافرینگ در تمام سرعت‌ها در بافر لوله به سی دی درایو اجازه می‌دهد که سریعتر بچرخد و کاربر بتواند سی دی را از درایو پاک کند قبل از آنکه رمز گذاری فرایند به پایان رسد. چنین فرمان بافر را می‌تواند با استفاده از پیاده‌سازی اولیه سیستم عامل که موجود است برای خواندن و نوشتن اطلاعات به کار رود. انتظار بیهوده می‌تواند بوسیله استفاده از امکاناتی مانند نظرسنجی یا انتخاب و یا چند ریسمانه موقوف شود.

ماشین مجازی / سیستم مدیریت محتوا و MVS[ویرایش]

خطوط لوله CMS درگاه ورودی ایده خط لوله به ماشین مجازی / سیستم مدیریت محتوا و سیستم‌های MVS است. که ساختارهای خط لوله پیچیده بیشتری از بدنه ساختار یونیکس را با گرفتن چندین جریان ورودی و تولید چندین جریان خروجی پشتیبانی می‌کند. (چنین قابلیت‌هایی توسط هسته یونیکس پشتیبانی می‌شوند اما برنامه‌های کمی از آن استفاده می‌کنند تا از آن برای ترکیبات نحوی پیچیده و حالات مسدود آماده سازد اگر چه بدنه برخی از ساختارها از طریق تخصیص فایل توصیف‌گر به طور اختیاری آنرا پشتیبانی می‌کنند). با توجه به ماهیت متفاوت سیستم عامل‌های رایانه‌های بزرگ IBM، مراحل بسیاری را در داخل خط لوله‌های CMS انجام می‌دهند، که در یونیکس برنامه‌های خارجی جدا از هم هستند اما می‌توانند به طور جداگانه برنامه‌های خارجی را برای عملکردشان صدا بزنند. ، به دلیل ماهیت فایل‌های ضبط گرا در رایانه‌های بزرگ IBM، خط لوله در ضبط گرا سریعتر از شیوه جریان گرا فعالیت می‌کند. شبه خط لوله در سیستم عامل‌ها تک وظیفه‌ای فرایندهای خط لوله باید یک به یک به طور سری اجرا شوند، بنابراین خروجی هر فرایند باید در یک فایل موقت ذخیره شود که پس از آن توسط فرایند بعدی خوانده شود. از آنجا که هیچ گونه موازی سازی یا تعویض پردازنده وجود ندارد این نسخه " شبه خط " لوله نامیده می‌شود. به عنوان مثال، دستور مترجم خط از سیستم عامل داس ('COMMAND.COM') شبه خط لوله را با یک ترکیب ظاهری شبیه به خط لوله یونیکس فراهم می‌کند. فرمان "دیر | مرتب کردن | بیشتر" باید در آینده شبیه این اجرا شود (ولو پیچیده تر از نام فایل‌های موقت)

  • ایجاد فایل موقت 1.tmp
  • اجرای فرمان "دیر"، تغییر مسیر خروجی خود به 1.tmp
  • ایجاد فایل موقت 2.tmp
  • اجرای فرمان "مرتب کردن"، تغییر مسیر ورودی به 1.tmp و خروجی به 2.tmp
  • اجرای فرمان "بیشتر"، تغییر مسیر ورودی به 2.tmp، و ارائه خروجی به کاربر
  • حذف 1.tmp و 2.tmp، که دیگر مورد نیاز نیستند
  • بازگشت به خط فرمان

به این ترتیب، شبه لوله مانند لوله‌های واقعی با بافر لوله را در اندازه نامحدود عمل می‌کند. (با وجود فضای محدود دیسک) با این محدودیت مهم که یک فرایند دریافت می‌کند نمی‌تواند هیچ داده‌ای را از روی بافر لوله تا زمانی که فرایند به طور کامل فرستاده نشده بخواند. علاوه بر ایجاد ترافیک دیسک اگر حافظه پنهان یک دیسک سخت مانند SMARTDRV نصب نشود می‌تواند تحت سیستم‌های چند وظیفه‌ای غیر ضروری باشد. این اجرا همچنین لوله‌هایی می‌سازد که برای کاربردهایی که به پاسخ بلادرنگ نیاز دارند متناسب نیستند، برای مثال اهداف تعاملی ساخته شده (که در آن کاربر دستورهای را وارد می‌کند که فرایند اولین بار از طریق خط لوله ورودی آنها را دریافت، وفرایند آخرین بار در خط لوله خروجی خود را از طریق خروجی به کاربر ارائه می‌کند)

همچنین دستورهای که بی‌نهایت دستور دارند، همانند دستور yes، نمی‌توانند در یک شبه لوله استفاده شوند. از آن-جائیکه آن‌ها تا زمان اتمام ظرفیت دیسک اجرا می‌شوند، فرایندهای دنباله رو در خط لوله نمی‌توانند اجرا گردند.

خط لوله‌های شی ء گرا[ویرایش]

در کنار خط لوله‌های بر پایهٔ جریان بایت، خط لوله‌های شی ء گرا وجود دارند. در یک خط لولهٔ شی ء گرا، فرایندهای مورد نظر خروجی، به جای متون وجود دارند. بنابراین جابه جایی و حذف دستورها تجزیهٔ رشته‌ای در پوسته اسکریپت‌های unix، رایج هستند. ویندوز powershell از این طرح‌ها استفاده کرده و شیء‌های .net را انتقال می‌دهد. کانال‌ها در زبان برنامه نویسی Limbo پیدا می‌شوند و توسعه و گسترش IPython مثال‌های دیگری از این کار می‌باشند.

خط لوله‌ها در GUIها[ویرایش]

محیط‌های گرافیکی همچون سیستم عامل RISC و صفحه ROX هم از خط لوله استفاده می‌کنند. بیشتر از اینکه یک جعبه مکالمهٔ امن را که در برگیرندهٔ مدیریت فایل‌ها می‌باشد_ که به کاربر اجازهٔ مشخص کردن مکان نوشتن داده‌ها و اطلاعات برنامه را می‌دهد_ را فراهم آورد یک جعبه مکالمه امن که یک آیکن را به همراه رشته‌ای برای نام آن، فراهم می‌کند. مقصد آن از طریق یک آیکن کششی مشخص می‌شود. کاربر می‌تواند آیکن را در هر جایی که فایل حاضر موجود است و دارای آیکن‌های دیگر برنامه هاست، رها کند. گر آیکن روی آیکن برنامه انداخته شود، برنامه بارگیری شده و محتوای آن که قبلاً ذخیره شده بود، به رشته ورودی استاندارد برنامه جدید وارد می‌شود. برای مثال، یک کاربر که در حال جستجوی تارنمای جهانی می‌باشد، ممکن است با شکل فشردهٔ .gz روبرو شود و قصد ویراستاری و یا دوباره بارگذاری آن را داشته باشد، او می‌تواند لینک مربوطه را به آرشیو برنامه خود بیاورد و آیکنی که نمایش دهندهٔ محتوای داخلی فایل فشرده می‌باشد را به ویراستار شکل خود وارد کند. با ویرایش آن، یک جعبهٔ ذخیره‌سازی را باز کرده و آیکن آن را به نرم‌افزار بارگیری بیاورد. از نظر ادراکی، روش می‌تواند به همراه یک جعبه مکالمهٔ ذخیره‌ای مرسوم استفاده شود، اما نیازمند برنامهٔ کاربران برای داشتن محل مشخص و قابل دسترس در فایل‌های سیستمی می‌باشد. در عمل این حالت استفاده نمی‌شود، بنابراین خط لوله‌های GUI به ندرت به کار گرفته می‌شوند.

ملاحظات دیگر[ویرایش]

اسم خط لوله از یک تشابه ناهمگون با لوله کشی فیزیکی در یک خط لولهٔ رایج گرفته شده است که اجازهٔ ورود اطلاعات را در همان جهت خط لوله به کاربر می‌دهد. لوله‌ها و فیلترها می‌توانند به عنوان یک برنامهٔ عملکردی دیده شوند که از جریان بایتی برای داده‌های خود استفاده می‌کنند. آن‌ها همچنین می‌توانند به شکل خاصی از یک واحد برای ورودی- خروجی دیده شوند. مفهوم خط لوله همچنین مرکز توسعه چارچوب تارنما یا پیاده‌سازی هر Xproc ای می‌باشد. که در آنجا اجازهٔ اصلاح را به جریان منبع قبل از نمایش، داده می‌شود. این الگو استفاده از رشته‌های متنی به عنوان ورودی و خروجی برنامه‌ها را افزایش می‌دهد. تکیه داشتن بر متون در زمانیکه پوسته‌های گرافیکی در برنامه‌های متنی ایجاد می‌شوند، بسیار رایج است.

تاریخچه[ویرایش]

خط لوله‌های فرایند توسط Douglas Mcllory ابداع شد. او یکی از اولین طراحان سیستم unix بود، و آن را به عنوان یکی از محبوبترین سیستم‌های عامل مطرح کرد. همچنین این سیستم می‌تواند به عنوان اولین نمونهٔ مهم ترکیبات نرم‌افزاری در نظر گرفته شود. همچنین ایدهٔ آن به طور اتفاقی به سیستم‌های دیگری همچون DOS,OS/2,Windows NT, BeOs, AmigaOS, MorphOS, Mac OS X به کار گرفته شد.

منابع[ویرایش]

  • ویکی‌پدیای انگلیسی. //en.wikipedia.org/wiki/pipeline(software)