# آلة من غير نظام تشغيل

الآلة من غير نظام تشغيل (بالإنجليزية: Bare machine، أو bare metal)‏ تشير إلى الحاسوب الذي ينفذ التعليمات مباشرةً على العتاد المنطقي «أي دوائر الحاسوب المنطقية» دون تدخل نظام التشغيل. تطورت أنظمة التشغيل الحديثة عبر مراحل مختلفة، من أولية إلى أنظمة معقدة وحساسة للغاية تتضمن العديد من الخدمات. بعد تطوير أجهزة الحاسوب القابلة للبرمجة (التي لم تتطلب تغييرات مادية -في العتاد- لتشغيل برامج مختلفة) ولكن قبل تطوير أنظمة التشغيل، كانت التعليمات المتسلسلة تنفذ على أجهزة الحاسوب مباشرة باستخدام لغة الآلة دون أي طبقة برمجيات (system software layer). يُطلق على هذا النهج اسم «الآلة من غير نظام تشغيل» تمهيدًا لأنظمة التشغيل الحديثة. اليوم يمكن تطبيقه في الغالب على الأنظمة المدمجة (المضمنة) embedded systems والبرامج الدائمة بشكلٍ عام مع متطلبات الانتظار الحرج للوقت، بينما تعمل البرامج التقليدية بواسطة نظام تنفيذ البرامج (runtime system) المتراكب على نظام التشغيل.

## المزايا

بالنسبة إلى تطبيق معين، في معظم الحالات، سيعمل تطبيق «الآلة من غير نظام تشغيل» سريعًا، بذاكرة أقل مساحة وبالتّالي يكون أكفأ في استخدام الطاقة. وذلك لأن أنظمة التشغيل، كأي برنامج، تحتاج إلى وقت قليل للتنفيذ ومساحة ذاكرة للتشغيل، ولم تعد هناك حاجة إلى هذه الأنظمة على «الآلة من غير نظام تشغيل». مثلًا، يمكن الوصول إلى أي من مزايا العتاد -(hardware feature)- التي تتضمن مدخلات ومخرجات مباشرةً على نظام «الآلة من غير نظام تشغيل»، بينما يجب أن تقوم نفس الميزة التي تستخدم نظام التشغيل بتوجيه الطلب (call) إلى روتين فرعي (subroutine)، مما يستهلك وقت التشغيل والذاكرة.

## سلبيات

بالنسبة لتطبيق معين، تتطلب برمجة «الآلة من غير نظام تشغيل» مزيدًا من الجهد للعمل بشكل صحيح وهي أعقد لأن الخدمات التي يوفرها نظام التشغيل ويستخدمها التطبيق يجب إعادة تنفيذها فيما يتعلق بالاحتياجات. يمكن أن تكون هذه الخدمات:
* تمهيد النظام (إلزاميّ) - «إقلاع تمهيديّ System boot».
* إدارة الذاكرة Memory management: تخزين موقع الكود (الشيفرة)والبيانات المتعلقة بموارد الأجهزة والأجهزة الطرفية (إلزاميّ).
* معالجة المقاطعات (إن وجدت) -"Interruptions handling"
* جدولة المهام "Task scheduling"، إذا كان بإمكان التطبيق تنفيذ أكثر من مهمة واحدة.
* إدارة الأجهزة الطرفية (إن وجدت)- "Peripherals management"
* إدارة الأخطاء "Error management"، إذا كان مطلوبًا أو ضروريًا
يُعَدُّ تنقيح برنامج ل «آلة من غير نظام تشغيل»أمرًا صعبًا نظرًا لما يلي:
* لا توجد إخطارات بأخطاء البرنامج ولا إدارة للأعطال، ما لم يتم تنفيذها والتحقق من صحتها.
* لا يوجد مخرجات قياسية، ما لم يتم تنفيذها والتحقق من صحتها.
* لا يمكن للجهاز الذي كتِب البرنامج أن يكون هو نفسه حيث يتم تنفيذ البرنامج، لذا فإن الجهاز الهدف -المستهدف التنفيذ عليه- هو إما محاكي (emulator أو simulator) أو جهاز خارجي. يؤدي ذلك لإعداد طريقة لتحميل برنامج «الآلة من غير نظام تشغيل»على الحاسوب الهدف (وميض)، وبدء تنفيذ البرنامج والوصول إلى الموارد المستهدفة.
تتم برمجة «الآلة من غير نظام تشغيل» عامةً باستخدام لغة قريبة من العتاد، مثل رست (Rust) أو سي++ (++C) أو سي (C) أو لغة التجميع أو حتى لمقدار صغير من التعليمات البرمجية أو مباشرةً لغة الآلة للمعالجات الجديدة جدًا. كل المشاكل السابقة تعني حتما أن «الآلة من غير نظام تشغيل» نادرًا جدًا ما تكون محمولة أو متنقلة portable.

## أمثلة
### الحواسيب القديمة (المبكرة أو البدائية)

سمحت الحواسيب القديمة، مثل الحاسوب "PDP-11"، للمبرمجين بتحميل برنامجٍ مكتوبٍ بلغةِ الآلةِ، إلى ذاكرة الوصول العشوائي. يمكن مراقبة العملية الناتجة للبرنامج عن طريق الأضواء (Blinkenlights)، والإخراج المشتقّ من الشريط المغناطيسيّ أو أجهزة الطباعة أو التخزين.

### الأنظمة المضمنة

تظل برمجة «الآلة من غير نظام تشغيل» ممارسةً شائعةً في الأنظمة المضمنة، حيث غالبًا ما يتم تشغيل المتحكمات الدقيقة أو المعالجات الدقيقة مباشرةً في برامج أحادية الغرض monolithic, single-purpose software، دون تحميل نظام تشغيل منفصل. يمكن أن تختلف مثل هذه البرامج المضمنة في البنية، ولكن أبسط أشكالها قد تتكون من حلقة رئيسية لانهائية، تستدعي -هي- الروتينات الفرعية (الدَّوال) المسؤولة عن التحقق من المدخلات، وتنفيذ الإجراءات performing actions، وكتابة المخرجات.
* checking for inputs
* performing actions
* writing outputs

## تطوير

إنَّ نهجَ استخدام «الآلات من غير نظام تشغيل» مهّد الطريق لأفكارٍ جديدةٍ أدت إلى التّطور السريع لنظام التشغيل.
أبرزَ هذا النهج الحاجةَ إلى ما يلي:
* وحدات الإدخال والإخراج (I/O) لإدخال كل من التعليمات البرمجية والبيانات بشكل ملائم:
** أنشئت أجهزة الإدخال، مثل لوحات المفاتيح. كانت هذه ضرورية، حيث أنّ الحواسيب السابقة غالبًا ما كانت تحتوي على أجهزة إدخال فريدة ومنفصلة ومعقدة.
على سبيل المثال، تُحمَّل البرامج في الحاسوب الصغير "PDP-11" يدويًا، باستخدام سلسلة من مفاتيح التبديل "toggle switches" على اللوحة الأمامية للجهاز. تعد لوحات المفاتيح أفضل بكثير من أجهزة الإدخال القديمة تلك، حيث أنَّ كتابة التعليمات البرمجية أو البيانات لإدخالها في الجهاز تكون أسرع بكثير من استخدام مفاتيح التبديل. أصبحت لوحات المفاتيح في وقت لاحق معيارًا في جميع الحواسيب تقريبًا، بغض النظر عن العلامة التجارية أو السعر.
** ستُستَخدَم أجهزة الإخراج مثل شاشات الحاسوب على نطاقٍ واسعٍ لاحقًا، ولا تزال حتى يومِنا هذا. لقد أثبتَتْ نفسها بتوفيرها قدرًا كبيرًا من السهولة والملائمة عن أجهزة الإخراج السابقة، مثل مصفوفة الأضواء على ألتير 8800 "Altair 8800"، والتي من شأنها أن تشير إلى حالة الحاسوب.
يمكن لشاشات الحاسوب أيضًا عرض خرج برنامج ما بسهولةٍ بطريقةٍ سهلةٍ الاستخدام. على سبيل المثال، يجب أن يكون المرء على درايةٍ وثيقةٍ بحاسوب قديم معين ونظام العرض الخاص به، والذي يتكون من مصفوفة أضواء، حتى يبدأ في فهم حالة عتاد الحاسوب. في المقابل، يجب أن يكون أي شخص يستطيع القراءة قادرًا على فهم واجهة مستخدم جيدة التصميم على نظام حديث، دون الحاجة إلى معرفة أي شيء عن عتاد الحاسوب الذي حيث تعمل البرنامج عليه.
* تُستخدم أجهزة التخزين الثانوية الأسرع والأرخص والأوسع انتشارًا لتخزين البرامج على ذاكرة مستدامة. كان هذا ضروريًا، حيث كان من الصعب كتابة التعليمات البرمجية يدويًا من أجل استخدام الحاسوب بطريقة مفيدة، والتي تُفقَدُ عند كل إعادة تشغيل (إقلاع) بسبب قيام النظام بحفظه في ذاكرة متبخرة.
* شرط وجود لغة عالية المستوى ملائمة ومترجم لهذه اللغة إلى لغة الآلة المقابلة.
* الرابط لربط وحدات المكتبة سويًا، والتي قد يكون قد كتبها المستخدم أو أنّها متاحةٌ بالفعل على النظام.
* المحمل لتحميل الملفات التنفيذية في ذاكرة الوصول العشوائي من التخزين الثانوي.
* وحدات الإدخال والإخراج المناسبة، مثل الطابعات لإنتاج نسخة مطبوعة من المخرجات التي أنشأتها البرامجُ.

## أنظر أيضًا

* حاسوب أساسي
* برنامج مستقل

## المصادر

* Silberschatz، A.؛ Galvin، Peter؛ Gagne، Greg (2003). Operating System Concepts. ISBN:9780471250609.