ماشین بدون واسطه

در علوم رایانه، **ماشین بدون واسطه** ( به انگلیسی : Bare Machine ) رایانه‌ای است که دستور‌العمل‌ ها را مستقیماً روی سخت‌افزار منطقی و بدون دخالت هرگونه سیستم‌عاملی اجرا میکند. از سیستم‌عامل های ابتدایی گرفته تا سیستم‌عامل های پیچیده و بسیار حساس امروزی که خدمات بسیاری را در خود جای داده اند، همه آنها طی مراحل زیادی تکامل یافته اند. پس از توسعه رایانه های با قابلیت برنامه‌ریزی ( که نیاز به تغییرات فیزیکی برای اجرا کردن برنامه های مختلف نداشتند ) و قبل از توسعه سیستم های عامل، دستور های ترتیبی به کمک زبان Machine Language و بدون هیچ لایه نرم افزاری، مستقیماً روی سخت‌افزار رایانه اجرا می شدند. این رویکرد "ماشین بدون واسطه" نام دارد و مربوط به قبل از سیستم‌عامل های امروزی است. امروزه کاربرد این رایانه ها بیشتر برای سیستم های تعبیه‌ شده و سفت‌افزار هایی مورد توجه است که پیش‌نیاز های تاخیر زمانی بالایی دارند، در حالی که برنامه های معمولی توسط یک سیستم زمان اجرا که یک لایه سیستم‌عامل هم روی آن است اجرا می‌شوند.

## مزایا
در اکثر مواقع برنامه ای که با ماشین بدون واسطه پیاده‌سازی می شود، در عین استفاده از حافظه کمتر و مصرف انرژی بهینه‌تر، سریع‌تر اجرا می شود. این امر به این دلیل است که سیستم‌عامل ها نیز مانند هر برنامه دیگری نیاز به زمان و حافظه برای اجرا شدن دارند، مشکلی که در ماشین های بدون واسطه وجود ندارد. برای مثال، هر ویژگی سخت‌افزاری که شامل ورودی یا خروجی است در ماشین بدون واسطه به صورت مستقیم به آن دسترسی داریم، این در حالی است که همین ویژگی در یک ماشین دارای سیستم‌عامل باید یک زیر‌ برنامه را مسیریابی و سپس اجرا کند، که زمان و حافظه مصرف می کند.

## معایب
برای یک برنامه ماشین بدون واسطه، باید برنامه‌نویسی بیشتری انجام شود تا به درستی کار کند و این برنامه پیچیده‌تر است زیرا خدمات و امکاناتی که سیستم‌عامل ارائه می کند و توسط برنامه استفاده می شوند، باید مطابق نیاز مجدداً پیاده سازی شوند. این خدمات می توانند شامل موارد زیر باشند :

* راه‌اندازی سیستم (اجباری)
* مدیریت حافظه : مرتب سازی آدرس کد و داده مربوط به منابع سخت‌افزاری و لوازم جانبی (اجباری)
* رسیدگی به وقفه ها (اگر رخ دهند)
* زمان بندی دستور ها، اگر برنامه توانایی اجرای بیش از یک دستور را داشته باشد
* مدیریت لوازم جانبی (اگر به کامپیوتر متصل باشند)
* مدیریت خطا (اگر نیاز بود)

اشکال‌زدایی یا دیباگ کردن یک برنامه بدون واسطه کار سختی است زیرا :

* اخطاری برای خطاهای نرم‌افزاری و مدیریت خطاها وجود ندارد، مگر اینکه پیاده‌سازی و تایید شده باشند.
* خروجی استاندارد وجود ندارد، مگر اینکه پیاده‌سازی و تایید شده باشد.
* ماشینی که برنامه در آن نوشته شده است نمی تواند همانی باشد که برنامه در آن اجرا می شود، در نتیجه سخت‌افزار هدف یا برابر‌ساز / شبیه‌ساز است و یا دستگاه خارجی. این مسئله ما را وادار می کند که یک راه برای بار کردن برنامه بدون واسطه روی ماشین هدف (ثابت‌افزار) راه اندازی کنیم، سپس اجرای برنامه را شروع کنیم و به منابع ماشین هدف دسترسی داشته باشیم.

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

## مثال ها
**رایانه های های اولیه**

رایانه های اولیه مانند PDP-11، به برنامه‌نویسان این اجازه را داد که برنامه ای که با کد ماشین نوشته شده است را در رَم بار کنند. به کمک چراغ هایی بر نتیجه عملیات برنامه ها نظارت می شد. خروجی به دست آمده از نوار مغناطیسی، چاپگر و یا حافظه نیز برای نظارت استفاده می شدند.

**سیستم های تعبیه شده**

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

## توسعه
رویکرد استفاده از ماشین های بدون واسطه مسیر را برای ایده های جدید هموار کرد که به تکامل توسعه سیستم‌عامل ها شتاب بخشید.

این رویکرد نیاز به موارد زیر را برجسته کرد :

* دستگاه های ورودی/خروجی (I/O) که هم کد و هم داده را به راحتی وارد کنند.
* دستگاه های ورودی، مانند صفحه‌کلید ها ساخته شدند. این ها ضروری بودند، زیرا رایانه های اولیه دارای دستگاه های ورودی منحصر‌به‌فرد، کند و پیچیده ای بودند.

برای مثال، برنامه ها در PDP-11 به طور دستی و با استفاده از مجموعه ای از کلید ها روی پنل جلویی دستگاه بار می شدند. صفحه‌کلید ها با اختلاف بهتر از این دستگاه های ورودی قدیمی هستند، زیرا که تایپ کردن کد یا داده بسیار سریع‌تر از خاموش و روشن کردن کلید ها برای وارد کردن آنها به ماشین است. بعداً صفحه‌کلید ها تقریباً در تمامی رایانه ها فارغ از برند و قیمت تبدیل به استاندارد شدند.

* دستگاه های خروجی مانند نمایشگر کامپیوتر ها بعداً به طور گسترده ای مورد استفاده قرار گرفتند و هنوز هم تا به امروز هستند. آنها ثابت کردند که نسبت به دستگاه های خروجی پیش از خود مانند آرایه چراغ ها بر روی رایانه التیر ۸۸۰۰ (به انگلیسی : Altair 8800) که وضعیت کامپیوتر را نشان می دادند، بسیار راحت تر هستند.

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

* دستگاه های ذخیره‌سازی ثانویه سریع‌تر، ارزان‌تر و در دسترس‌تر برای ذخیره برنامه ها در حافظه غیر‌فرّار. این مورد نیاز بود زیرا تایپ کردن کد با دست برای استفاده مفید از رایانه دشوار بود، کدی که با هر راه‌اندازی سیستم به دلیل ذخیره سازی آن در حافظه فرّار از بین می رفت.
* نیاز به یک زبان سطح بالای مناسب و یک مترجم برای چنین زبان سطح بالایی به کد ماشین مربوطه.
* پیوند‌دهنده ها برای پیوند دادن ماژول های کتابخانه، که ممکن است توسط کاربر نوشته شده باشند یا اینکه از قبل در سیستم موجود باشند.
* بار‌کننده ها برای بار کردن برنامه های اجرا‌پذیر از حافظه ثانویه به رَم. 
* دستگاه های ورودی/خروجی مناسب، مانند چاپگر ها برای تولید کردن یک نسخه چاپی از خروجی تولید شده توسط برنامه ها.

## جستار های وابسته

* رایانش ماشین بدون پوشش
* کامپیوتر Barebone
* برنامه مستقل

## منابع
۱. گوردون، هابیل؛ آمیت، نداو؛ حرال، نداو; بن یهودا، مولی؛ لاندو، الکس؛ شوستر، عساف؛ تسافریر، دن (2012). "ELI". 

۲. "راهنمای کاربردی برای فلز بدون واسطه ++C". دریافت شده در 16 دسامبر 2022.

۳. سیلبرشاتز، آ؛ گالوین، پیتر؛ گاگن، گرگ (2003). . ISBN 9780471250609.
رده:تاریخچه سخت‌افزار رایانه
رده:تاریخچه نرم‌افزار
رده:سیستم‌عامل‌ها