استدعاء مقاطعة BIOS

توفر أنظمة الإدخال والإخراج الأساسية (BIOS) مقاطعات يمكن لأنظمة التشغيل وبرامج التطبيقات استدعاؤها للاستفادة من إمكانيات البرامج الثابتة على أجهزة الكمبيوتر المتوافقة مع IBM PC . تقليديًا ، تُستخدم استدعاءات BIOS بشكل أساسي من قِبل برامج DOS وبعض البرامج الأخرى مثل برامج الإقلاع (بما في ذلك، تاريخيًا، برامج التطبيقات البسيطة نسبيًا التي تُقلع مباشرةً وتعمل بدون نظام تشغيل - وخاصةً برامج الألعاب). يعمل BIOS في وضع العنوان الحقيقي (الوضع الحقيقي) لوحدة المعالجة المركزية x86، لذا يجب على البرامج التي تستدعي BIOS إما أن تعمل أيضًا في الوضع الحقيقي أو أن تنتقل من الوضع المحمي إلى الوضع الحقيقي قبل استدعاء BIOS ثم العودة إليه مرة أخرى. لهذا السبب، لا تستخدم أنظمة التشغيل الحديثة التي تستخدم وحدة المعالجة المركزية في الوضع المحمي أو الوضع الطويل عادةً استدعاءات مقاطعة BIOS لدعم وظائف النظام، على الرغم من أنها تستخدم استدعاءات مقاطعة BIOS لفحص وتهيئة الأجهزة أثناء الإقلاع . [ 1 ] يقتصر الوضع الحقيقي على ذاكرة بسعة 1 ميجابايت، بينما تستخدم برامج الإقلاع الحديثة (مثل GRUB2 ، و Windows Boot Manager ) الوضع غير الحقيقي أو الوضع المحمي (وتنفذ استدعاءات مقاطعة BIOS في وضع Virtual 8086 ، ولكن فقط لإقلاع نظام التشغيل) للوصول إلى ذاكرة تصل إلى 4 جيجابايت. [ 2 ]

في جميع أجهزة الحاسوب، تتحكم تعليمات البرمجيات في المكونات المادية (الشاشة، القرص، لوحة المفاتيح، إلخ) منذ لحظة تشغيل الجهاز. في الحاسوب الشخصي، يتولى نظام الإدخال والإخراج الأساسي (BIOS)، المُحمّل مسبقًا في ذاكرة القراءة فقط (ROM) على اللوحة الأم، زمام الأمور فور إعادة ضبط وحدة المعالجة المركزية، بما في ذلك أثناء التشغيل، أو عند الضغط على زر إعادة الضبط، أو عند حدوث عطل برمجي حرج ( عطل ثلاثي ) يتسبب في قيام دوائر اللوحة الأم بتفعيل إعادة الضبط تلقائيًا. يقوم نظام الإدخال والإخراج الأساسي باختبار المكونات المادية وتهيئة حالتها؛ ثم يعثر على برنامج الإقلاع ويُحمّله ويُشغّله (عادةً ما يكون مُحمّل إقلاع نظام التشغيل، ولغة BASIC القديمة المُخزّنة في ذاكرة القراءة فقط)؛ كما يوفر تحكمًا أساسيًا في المكونات المادية للبرامج التي تعمل على الجهاز، والتي عادةً ما تكون نظام تشغيل (مع برامج تطبيقية)، ولكن قد تكون تطبيقًا برمجيًا واحدًا يُقلع مباشرةً.

من جانبها، وفرت شركة IBM جميع المعلومات اللازمة لاستخدام نظام BIOS الخاص بها بشكل كامل، أو لاستخدام المكونات المادية مباشرةً وتجنب استخدام BIOS تمامًا، عند برمجة نماذج IBM PC الأولى (قبل PS/2). منذ البداية، كان للمبرمجين خيار استخدام BIOS أو عدم استخدامه، وذلك على أساس كل جهاز طرفي. شجعت IBM بشدة على كتابة برامج "مُحسّنة" تصل إلى المكونات المادية فقط من خلال استدعاءات INT الخاصة بنظام BIOS (واستدعاءات خدمة DOS)، لدعم توافق البرامج مع نماذج PC الحالية والمستقبلية ذات المكونات المادية الطرفية المختلفة، لكن IBM أدركت أن بعض مطوري البرامج وعملاء الأجهزة كانوا بحاجة إلى قدرة برامج المستخدم على التحكم المباشر في المكونات المادية. ويرجع ذلك جزئيًا إلى أن مجموعة كبيرة من ميزات ووظائف المكونات المادية لم تكن متاحة عبر خدمات BIOS. على سبيل المثال (من بين أمثلة كثيرة)، فإن محولات MDA وCGA قادرة على التمرير المادي، ومحول التسلسل الخاص بالكمبيوتر الشخصي قادر على نقل البيانات المدفوع بالمقاطعات، لكن نظام BIOS الخاص بشركة IBM لا يدعم أيًا من هاتين الميزتين التقنيتين المفيدتين.

لا يزال نظام الإدخال والإخراج الأساسي (BIOS) في أجهزة الكمبيوتر الحديثة يدعم معظم، إن لم يكن كل، وظائف مقاطعة BIOS التي حددتها شركة IBM لجهاز IBM AT (الذي طُرح عام 1984)، بالإضافة إلى العديد من الوظائف الأحدث، فضلاً عن امتدادات لبعض الوظائف الأصلية (مثل نطاقات المعلمات الموسعة) التي نشرتها منظمات أخرى ومجموعات صناعية تعاونية. هذا، إلى جانب درجة مماثلة من توافق الأجهزة، يعني أن معظم البرامج المصممة لجهاز IBM AT لا تزال تعمل بشكل صحيح على أجهزة الكمبيوتر الحديثة، بشرط أن تكون سرعة التنفيذ الأعلى مقبولة (وهي كذلك عادةً في جميع الحالات باستثناء الألعاب التي تستخدم توقيتًا يعتمد على وحدة المعالجة المركزية). على الرغم من القيود الكبيرة للخدمات التي يتم الوصول إليها عبر مقاطعات BIOS، فقد أثبتت فائدتها الكبيرة وقدرتها على الصمود أمام التغيرات التكنولوجية.

الغرض من استدعاءات BIOS

تُنفّذ استدعاءات مقاطعة BIOS وظائف التحكم في الأجهزة أو عمليات الإدخال/الإخراج التي يطلبها البرنامج، أو تُعيد معلومات النظام إلى البرنامج، أو كليهما. يُعدّ تجريد " الصندوق الأسود " عنصرًا أساسيًا في وظيفة استدعاءات BIOS، حيث تُنفّذ هذه الاستدعاءات وظائف مُحدّدة بشكل عام، بينما تُغلّف BIOS التفاصيل الدقيقة لكيفية تنفيذ هذه الوظائف على أجهزة النظام وتُخفى عن البرنامج. على سبيل المثال، لا يحتاج البرنامج الذي يرغب في القراءة من قرص صلب إلى معرفة ما إذا كان القرص من نوع ATA أو SCSI أو SATA (أو في السابق، من نوع ESDI أو MFM أو RLL ، ربما مع وحدة تحكم Seagate ST-506 ، أو أحد أنواع وحدات تحكم Western Digital ، أو مع وحدة تحكم خاصة من علامة تجارية أخرى). كل ما يحتاجه البرنامج هو تحديد رقم القرص الذي يرغب في الوصول إليه، وعنوان القطاع الذي يحتاج إلى قراءته أو كتابته، وسيتولى BIOS ترجمة هذا الطلب العام إلى سلسلة العمليات الأساسية اللازمة لإتمام المهمة من خلال وحدة تحكم القرص المتصلة بذلك القرص. يُعفى البرنامج من الحاجة إلى معرفة كيفية التحكم على مستوى منخفض في كل نوع من أنواع الأقراص الصلبة (أو محولات العرض، أو واجهات المنافذ، أو أجهزة الساعة الطرفية) التي قد يحتاج إلى الوصول إليها. هذا يُسهّل برمجة أنظمة التشغيل والتطبيقات، ويُصغّر حجم البرامج، مما يقلل من تكرار التعليمات البرمجية، حيث لا يلزم تضمين الوظائف الموجودة في نظام الإدخال والإخراج الأساسي (BIOS) في كل برنامج يحتاجها؛ بل تُضمّن استدعاءات قصيرة نسبيًا لنظام الإدخال والإخراج الأساسي في البرامج. (في أنظمة التشغيل التي لا يُستخدم فيها نظام الإدخال والإخراج الأساسي، تؤدي استدعاءات الخدمة التي يوفرها نظام التشغيل نفسه عادةً نفس الوظيفة والغرض).

يُتيح نظام الإدخال والإخراج الأساسي (BIOS) لمصممي أجهزة الكمبيوتر (بقدر ما تُكتب البرامج لاستخدام BIOS حصريًا) حريةً أكبر من الالتزام بالتوافق التام مع الأجهزة القديمة عند تصميم أنظمة جديدة، وذلك للحفاظ على التوافق مع البرامج الحالية. على سبيل المثال، يختلف عمل لوحة المفاتيح في جهاز IBM PCjr اختلافًا كبيرًا عن لوحة المفاتيح في طرازات IBM PC السابقة، ولكن بالنسبة للبرامج التي تستخدم لوحة المفاتيح عبر BIOS فقط، يكاد يكون هذا الاختلاف غير ملحوظ. (كمثال جيد على الجانب الآخر من هذه المسألة، لم تكن نسبة كبيرة من برامج الكمبيوتر الشخصي المستخدمة عند طرح PCjr تستخدم لوحة المفاتيح عبر BIOS حصريًا، لذا أضافت IBM أيضًا ميزات في PCjr لمحاكاة طريقة عمل لوحة مفاتيح IBM PC و IBM PC XT الأصلية. لا تُعدّ محاكاة الأجهزة دقيقة تمامًا، لذا لن تعمل جميع البرامج التي تحاول استخدام لوحة المفاتيح مباشرةً بشكل صحيح على PCjr، ولكن ستعمل جميع البرامج التي تستخدم خدمات لوحة مفاتيح BIOS فقط).

إضافةً إلى توفير إمكانية الوصول إلى إمكانيات الأجهزة، يوفر نظام الإدخال والإخراج الأساسي (BIOS) إمكانيات إضافية مُدمجة في برمجياته. على سبيل المثال، يحتفظ نظام BIOS بمواضع مؤشر منفصلة لما يصل إلى ثماني صفحات عرض نصية، ويوفر إخراجًا مشابهًا لـ TTY مع التفاف تلقائي للأسطر وتفسير أحرف التحكم الأساسية مثل إرجاع السطر وتغذية السطر، بينما لا تحتوي أجهزة عرض النصوص المتوافقة مع CGA إلا على مؤشر عرض عام واحد، ولا يمكنها تحريك المؤشر تلقائيًا، أو استخدام موضع المؤشر للوصول إلى ذاكرة العرض (لتحديد خلية الأحرف التي سيتم تغييرها أو فحصها)، أو تفسير أحرف التحكم. على سبيل المثال، تقوم واجهة لوحة مفاتيح BIOS بتفسير العديد من ضغطات المفاتيح ومجموعات المفاتيح لتتبع حالات التحويل المختلفة ( Shift الأيسر والأيمن ، وCtrl ، و Alt )، ولاستدعاء خدمة طباعة الشاشة عند الضغط على Shift + PrtScrn ، ولإعادة تشغيل النظام عند الضغط على Ctrl + Alt + Del ، ولتتبع حالات القفل (Caps Lock، وNum Lock، وScroll Lock)، وفي أجهزة فئة AT، التحكم في أضواء مؤشر حالة القفل المقابلة على لوحة المفاتيح، ولتنفيذ وظائف تفسيرية وإدارية أخرى مماثلة للوحة المفاتيح. في المقابل، تقتصر القدرات العادية لأجهزة لوحة المفاتيح القياسية PC و PC-AT على إبلاغ النظام بكل حدث بدائي لضغط مفتاح فردي أو تحريره (أي الانتقال من حالة "التحرير" إلى حالة "الضغط" أو العكس)، وإجراء إعادة ضبط واختبار ذاتي لوحدة لوحة المفاتيح، وبالنسبة للوحات المفاتيح من فئة AT، تنفيذ أمر من النظام المضيف لضبط الحالات المطلقة لمؤشرات حالة القفل (LEDs).

استدعاء نظام الإدخال والإخراج الأساسي (BIOS): مقاطعات برمجية لنظام الإدخال والإخراج الأساسي (BIOS)

تتواصل أنظمة التشغيل والبرامج الأخرى مع برنامج BIOS للتحكم في الأجهزة المثبتة، وذلك عبر المقاطعات البرمجية. المقاطعة البرمجية هي نوع محدد من مفهوم المقاطعة العام. المقاطعة هي آلية يمكن من خلالها توجيه وحدة المعالجة المركزية (CPU) للتوقف عن تنفيذ البرنامج الرئيسي وتنفيذ برنامج خاص يُسمى روتين خدمة المقاطعة (ISR) بدلاً منه. بمجرد انتهاء روتين خدمة المقاطعة، تستأنف وحدة المعالجة المركزية تنفيذ البرنامج الرئيسي. في معالجات x86، عند حدوث مقاطعة، يتم العثور على روتين خدمة المقاطعة المطلوب استدعاؤه بالبحث عنه في جدول عناوين نقاط بدء روتين خدمة المقاطعة (يُسمى "متجهات المقاطعة") في الذاكرة: جدول متجهات المقاطعة (IVT). يتم استدعاء المقاطعة بواسطة رقم نوعها، من 0 إلى 255، ويُستخدم رقم النوع كمؤشر في جدول متجهات المقاطعة، وعند هذا المؤشر في الجدول يوجد عنوان روتين خدمة المقاطعة الذي سيتم تشغيله استجابةً للمقاطعة. المقاطعة البرمجية هي ببساطة مقاطعة يتم تشغيلها بواسطة أمر برمجي. لذا، تعمل المقاطعات البرمجية كإجراءات فرعية، مع اختلاف رئيسي يتمثل في أن البرنامج الذي يستدعي المقاطعة البرمجية لا يحتاج إلى معرفة عنوان روتين خدمة المقاطعة (ISR)، بل يكفيه معرفة رقم المقاطعة. وهذا يوفر مزايا في قابلية التعديل، والتوافق، ومرونة تكوين النظام.

يمكن اعتبار استدعاءات مقاطعة BIOS آليةً لتمرير الرسائل بين BIOS وبرامج عميل BIOS، مثل نظام التشغيل. تطلب هذه الرسائل بيانات أو إجراءات من BIOS، وتعيد البيانات المطلوبة، ومعلومات الحالة، و/أو ناتج الإجراء المطلوب إلى المُستدعي. تُقسّم الرسائل إلى فئات، لكل منها رقم مقاطعة خاص بها، وتحتوي معظم الفئات على فئات فرعية تُسمى "وظائف" ويتم تحديدها بواسطة "أرقام الوظائف". يمرر عميل BIOS معظم المعلومات إلى BIOS في سجلات وحدة المعالجة المركزية، ويستقبل معظم المعلومات بنفس الطريقة، ولكن البيانات الكبيرة جدًا بحيث لا تتسع في السجلات، مثل جداول معلمات التحكم أو بيانات قطاعات القرص لعمليات نقل البيانات، يتم تمريرها عن طريق تخصيص مخزن مؤقت (أي مساحة) في الذاكرة وتمرير عنوان المخزن المؤقت في السجلات. (في بعض الأحيان، قد يتم تمرير عناوين متعددة لعناصر البيانات في الذاكرة في بنية بيانات في الذاكرة، مع تمرير عنوان تلك البنية إلى BIOS في السجلات). يتم تحديد رقم المقاطعة كمعامل لتعليمات مقاطعة البرنامج (في لغة التجميع من Intel، تعليمة "INT")، ويتم تحديد رقم الوظيفة في سجل AH. أي أن المُستدعي يُعيّن سجل AH إلى رقم الوظيفة المطلوبة. عمومًا، تعمل خدمات BIOS المُقابلة لكل رقم مقاطعة بشكل مستقل عن بعضها البعض، ولكن الوظائف ضمن خدمة مقاطعة واحدة تُعالج بواسطة برنامج BIOS نفسه، وبالتالي فهي ليست مستقلة. (هذه النقطة الأخيرة مُرتبطة بإمكانية إعادة الدخول ).

عادةً ما يُعيد برنامج BIOS إلى المُستدعي رمز خطأ في حال عدم نجاح العملية، أو رمز حالة و/أو البيانات المطلوبة في حال نجاحها. قد تتراوح البيانات بين بت واحد و65,536 بايت من قطاعات القرص الخام (الحد الأقصى الذي يتسع له جزء واحد من ذاكرة الوضع الحقيقي). وقد خضع BIOS للتطوير والتحسين مرات عديدة على مر السنين من قِبل العديد من الشركات، وللأسف، نتيجةً لهذا التطور، لا تتبع جميع وظائف BIOS التي يمكن استدعاؤها معايير متسقة لتنسيق البيانات ونقلها أو لعرض النتائج. فبعض وظائف BIOS تُبلغ عن معلومات حالة مفصلة، ​​بينما قد لا تُبلغ وظائف أخرى عن النجاح أو الفشل، بل تُعيد البيانات دون أي تنبيه، تاركةً للمُستدعي افتراض النجاح (أو اختبار النتيجة بطريقة أخرى). وفي بعض الأحيان، قد يصعب تحديد ما إذا كان BIOS يدعم استدعاء وظيفة معينة على جهاز كمبيوتر معين، أو ما هي حدود معلمات الاستدعاء على ذلك الجهاز. (بالنسبة لبعض أرقام الوظائف غير الصالحة، أو أرقام الوظائف الصالحة ذات القيم غير الصالحة للمعلمات الرئيسية - خاصةً مع إصدارات BIOS القديمة من IBM - قد لا يقوم BIOS بأي إجراء ولا يُرجع أي رمز خطأ؛ عندها تقع على عاتق المُستدعي مسؤولية [غير المريحة ولكن الحتمية] إما تجنب هذه الحالة بعدم إجراء مثل هذه الاستدعاءات، أو اختبار التأثير المتوقع للاستدعاء بدلاً من افتراض فعاليته. ونظرًا لتطور BIOS بشكل كبير على مر تاريخه، فإن الوظيفة الصالحة في إصدار BIOS معين من مُصنِّع مُحدد قد لا تكون صالحة في إصدار BIOS سابق أو مختلف من نفس المُصنِّع، أو في إصدار BIOS - مهما كان عمره - من مُصنِّع آخر.)

نظرًا لأن استدعاءات مقاطعة BIOS تعتمد على تمرير المعاملات عبر سجلات وحدة المعالجة المركزية، فإن هذه الاستدعاءات مصممة للتنفيذ من لغة التجميع، ولا يمكن تنفيذها مباشرةً من معظم لغات البرمجة عالية المستوى . مع ذلك، قد توفر لغة برمجة عالية المستوى مكتبة من إجراءات التغليف التي تُترجم المعاملات من الصيغة (التي تعتمد عادةً على المكدس) المستخدمة في لغة البرمجة عالية المستوى إلى الصيغة القائمة على السجلات التي يتطلبها BIOS، ثم تُعيدها إلى اصطلاح استدعاء لغة البرمجة عالية المستوى بعد انتهاء BIOS من عمله. في بعض إصدارات لغة C، يمكن استدعاء BIOS باستخدام لغة التجميع المضمنة داخل وحدة C. (لا يُعد دعم لغة التجميع المضمنة جزءًا من معيار ANSI C، بل هو امتداد للغة؛ لذا، فإن وحدات C التي تستخدم لغة التجميع المضمنة أقل قابليةً للنقل من وحدات C المتوافقة تمامًا مع معيار ANSI).

استدعاء مقاطعة

يمكن استدعاء المقاطعة باستخدام تعليمة لغة التجميع INT x86 . على سبيل المثال، لطباعة حرف على الشاشة باستخدام مقاطعة BIOS رقم 0x10، يمكن تنفيذ تعليمات لغة التجميع x86 التالية:

mov ah , 0x0e ; رقم الدالة = 0Eh: عرض الحرف mov al , '!' ; AL = رمز الحرف المراد عرضه int 0x10 ; استدعاء INT 10h، خدمة فيديو BIOS

جدول المقاطعات

تجدون أدناه قائمة بفئات المقاطعات الشائعة في نظام الإدخال والإخراج الأساسي (BIOS). بعض أنظمة BIOS (خاصةً القديمة منها) لا تدعم جميع فئات المقاطعات هذه.

يستخدم نظام الإدخال والإخراج الأساسي (BIOS) أيضًا بعض المقاطعات لإعادة توجيه مقاطعات أحداث الأجهزة إلى البرامج التي تختار استقبالها أو لتوجيه الرسائل لاستخدامها الخاص.

متجه المقاطعةوصف
05hيتم تنفيذه عند الضغط على مفتاح Shift- Print screen ، وكذلك عندما BOUNDيكتشف البرنامج خطأً مرتبطًا.
08hهذا هو مقاطعة ساعة الوقت الحقيقي. يتم تشغيلها 18.2 مرة في الثانية. يقوم نظام الإدخال والإخراج الأساسي (BIOS) بزيادة عداد الوقت خلال هذه المقاطعة.
09hهذا هو مقاطعة لوحة المفاتيح. يتم تشغيلها عادةً عند الضغط على مفتاح في لوحة المفاتيح.
10hخدمات الفيديو
AHوصف
00hضبط وضع الفيديو
01hضبط شكل المؤشر
02hتحديد موضع المؤشر
03hالحصول على موضع وشكل المؤشر
04hاحصل على وضعية قلم الإضاءة
05hتعيين صفحة العرض
06hمسح/تمرير الشاشة لأعلى
07hمسح/تمرير الشاشة للأسفل
08hاقرأ الشخصية والصفة عند المؤشر
09hاكتب الحرف والصفة عند المؤشر
0Ahاكتب الحرف عند المؤشر
0Bhتحديد لون الحدود
0Chكتابة رسومات بكسل
0Dhاقرأ رسومات البكسل
0Ehكتابة حرف في وضع TTY
0Fhتفعيل وضع الفيديو
10hتعيين سجلات اللوحة (EGA، VGA، SVGA)
11hمولد الأحرف (EGA، VGA، SVGA)
12hوظائف التحديد البديلة (EGA، VGA، SVGA)
13hكتابة سلسلة نصية
1Ahالحصول على رمز عرض التركيبة أو تعيينه (VGA، SVGA)
1Bhالحصول على معلومات الوظائف (VGA، SVGA)
1Chحفظ أو استعادة حالة الفيديو (VGA، SVGA)
4Fhوظائف توسيع VESA BIOS (SVGA)
11hقائمة المعدات المُعادة
12hإرجاع حجم الذاكرة التقليدي
13hخدمات القرص منخفضة المستوى
AHوصف
00hإعادة ضبط محركات الأقراص
01hتحقق من حالة القيادة
02hقطاعات القراءة
03hكتابة القطاعات
04hالتحقق من القطاعات
05hمسار التنسيق
08hالحصول على معلمات محرك الأقراص
09hتهيئة معلمات محرك الأقراص الثابتة
0Chابحث عن المسار المحدد
0Dhوحدة تحكم القرص الثابت لإعادة التشغيل
15hاحصل على نوع محرك الأقراص
16hالحصول على حالة تغيير وسائط محرك الأقراص المرنة
17hتحديد نوع القرص
18hتحديد نوع وسائط محرك الأقراص المرنة
41hفحص تثبيت محرك الأقراص الموسع (EDD)
42hقطاعات القراءة الموسعة
43hقطاعات الكتابة الموسعة
44hقطاعات التحقق الموسعة
45hقفل/فتح محرك الأقراص
46hإجكت ميديا
47hالبحث الممتد
48hمعلمات محرك الأقراص الموسعة
49hحالة تغيير الوسائط الموسعة
4Ehتكوين الأجهزة لمجموعة موسعة
14hخدمات المنفذ التسلسلي
AHوصف
00hتهيئة المنفذ التسلسلي
01hإرسال الحرف
02hاستلام الشخصية
03hحالة
15hخدمات النظام المتنوعة
AHALوصف
00hقم بتشغيل محرك محرك الكاسيت (لأجهزة IBM PC/PCjr فقط)
01hقم بإيقاف تشغيل محرك الكاسيت (لأجهزة IBM PC/PCjr فقط)
02hقراءة كتل البيانات من شريط الكاسيت (لأجهزة IBM PC/PCjr فقط)
03hكتابة كتل البيانات إلى شريط كاسيت (خاص بأجهزة IBM PC/PCjr فقط)
4Fhمدخل لوحة المفاتيح
83hانتظر الأحداث
84hاقرأ عصا التحكم (أنظمة BIOS من عام 1986 فصاعدًا)
85hاستدعاء مفتاح Sysreq
86hانتظر
87hكتلة متحركة
88hاحصل على حجم ذاكرة موسع
89hالتبديل إلى الوضع المحمي
C0hالحصول على معلمات النظام
C1hاحصل على قسم بيانات BIOS الموسع
C2hوظائف جهاز التأشير
C3hوظائف مؤقت المراقبة - لأنظمة PS/2 فقط
C4hتحديد الخيارات القابلة للبرمجة - لأنظمة PS/2 فقط عبر ناقل MCA
D8hوظائف نظام EISA - أنظمة ناقل EISA فقط
E8h01hالحصول على حجم الذاكرة الموسع (وظيفة أحدث، منذ عام 1994). يعرض نتائج لأحجام الذاكرة التي تزيد عن 64 ميجابايت.
E8h20hاستعلام عن خريطة عناوين النظام. المعلومات المُعادة من E820 تحل محل المعلومات المُعادة من AX=E801hالواجهات القديمة AH=88h.
16hخدمات لوحة المفاتيح
AHوصف
00hاقرأ الشخصية
01hقراءة حالة الإدخال
02hقراءة حالة مفتاح Shift في لوحة المفاتيح
05hتخزين ضغطات المفاتيح في مخزن لوحة المفاتيح المؤقت
10hاقرأ الشخصية الموسعة
11hحالة قراءة الإدخال الموسعة
12hقراءة حالة مفتاح Shift الممتد
17hخدمات الطباعة
AHوصف
00hطباعة الأحرف على الطابعة
01hتهيئة الطابعة
02hتحقق من حالة الطابعة
18hتنفيذ لغة Cassette BASIC : في أجهزة IBM حتى أوائل سلسلة PS/2، كان هذا المقاطعة يُشغّل لغة Cassette BASIC المخزنة في ذاكرة القراءة فقط (ROM). لم تكن هذه الميزة متوفرة في الأجهزة المُقلّدة، وكانت الأجهزة/أنظمة BIOS المختلفة تُنفّذ إجراءات مُختلفة عند تنفيذ المقاطعة 18h، وأكثرها شيوعًا رسالة خطأ تُفيد بعدم وجود قرص قابل للتشغيل. تُحاول الأجهزة الحديثة الإقلاع من الشبكة عبر هذه المقاطعة. في الأجهزة الحديثة، يُعامل نظام BIOS هذه المقاطعة كإشارة من مُحمّل الإقلاع تُفيد بفشله في إكمال مهمته. عندها، يُمكن لنظام BIOS اتخاذ الخطوات التالية المُناسبة. [ 3 ]
19hبعد اختبار التشغيل الذاتي (POST)، يستخدم نظام الإدخال والإخراج الأساسي (BIOS) هذا المقاطعة لتحميل نظام التشغيل. يمكن للبرنامج استدعاء هذه المقاطعة لإعادة تشغيل الكمبيوتر (ولكن يجب التأكد من أن مقاطعات الأجهزة أو عمليات الوصول المباشر إلى الذاكرة (DMA) لن تتسبب في توقف النظام أو تعطلّه أثناء إعادة تهيئة النظام بواسطة نظام الإدخال والإخراج الأساسي أو أثناء عملية بدء التشغيل).
1Ahخدمات الساعة في الوقت الحقيقي (RTC)
AHوصف
00hاقرأ RTC
01hاضبط ساعة الوقت الحقيقي
02hاقرأ وقت الساعة الحقيقية
03hضبط وقت الساعة الحقيقية
04hاقرأ تاريخ RTC
05hضبط تاريخ الساعة الحقيقية
06hاضبط منبه الساعة الحقيقية
07hإعادة ضبط منبه الساعة الحقيقية
1Ahخدمات PCI - يتم تنفيذها بواسطة أنظمة BIOS التي تدعم PCI 2.0 أو أحدث
AXوصف
B101hفحص تثبيت PCI
B102hالبحث عن جهاز PCI
B103hابحث عن رمز فئة PCI
B106hعمليات خاصة بناقل PCI
B108hقراءة بايت التكوين
B109hاقرأ كلمة التكوين
B10Ahقراءة قيمة Dword الخاصة بالتكوين
B10Bhكتابة بايت التكوين
B10Chاكتب كلمة التكوين
B10Dhكتابة كلمة Dword الخاصة بالتكوين
B10Ehالحصول على معلومات روتينية عن طلبات مقاطعة الإيرادات الداخلية
B10Fhضبط مقاطعة PCI
1Bhمعالج Ctrl-Break - يتم استدعاؤه عند الضغط على INT 09Ctrl- Break
1Chمعالج نبضات المؤقت - يتم استدعاؤه بواسطةINT 08
1Dhلا يُراد استدعاؤه؛ إنه مجرد مؤشر إلى جدول معلمات الفيديو (VPT)، الذي يحتوي على بيانات حول أوضاع الفيديو.
1Ehلا يُطلق عليه اسم؛ إنه مجرد مؤشر إلى جدول معلمات القرص المرن (DPT)، الذي يحتوي على مجموعة متنوعة من المعلومات المتعلقة بمحركات الأقراص المرنة.
1Fhلا يُراد تسميته؛ إنه مجرد مؤشر إلى جدول أحرف رسومات الفيديو (VGCT)، الذي يحتوي على بيانات أحرف ASCII 80hإلىFFh
41hمؤشر العنوان: FDPT = جدول معلمات القرص الثابت (القرص الصلب الأول)
46hمؤشر العنوان: FDPT = جدول معلمات القرص الثابت (القرص الصلب الثاني)
4Ahيتم استدعاؤه بواسطة ساعة الوقت الحقيقي للتنبيه

INT 18h: تنفيذ BASIC

INT 18hتقليديًا، كان يتم الانتقال إلى تطبيق لغة Cassette BASIC (المقدمة من مايكروسوفت) والمخزنة في ذاكرة Option ROM . ويتم استدعاء هذا الإجراء عادةً إذا لم يتمكن نظام BIOS من تحديد أي وحدات تخزين قابلة للتشغيل عند بدء التشغيل.

عندما طُرح جهاز IBM PC الأصلي (طراز IBM 5150) عام 1981، كانت لغة BASIC المُخزّنة في ذاكرة القراءة فقط (ROM) ميزةً أساسية. كما احتوت أجهزة الكمبيوتر الشخصية الشائعة آنذاك، مثل Commodore 64 وسلسلة Apple II، على Microsoft Cassette BASIC مُخزّنة في ذاكرة القراءة فقط (مع أن Commodore أعادت تسمية نسختها المرخصة إلى Commodore BASIC)، لذا كان جهاز IBM PC بحاجة إلى BASIC للمنافسة في شريحة كبيرة من السوق المستهدفة. وكما هو الحال في تلك الأنظمة الأخرى، عملت BASIC المُخزّنة في ذاكرة القراءة فقط لجهاز IBM PC كنظام تشغيل بدائي بدون قرص، مما يسمح للمستخدم بتحميل البرامج وحفظها وتشغيلها، بالإضافة إلى كتابتها وتحسينها. كان جهاز IBM PC الأصلي هو طراز الكمبيوتر الشخصي الوحيد من IBM الذي، مثل منافسيه المذكورين سابقًا، يتضمن واجهة تشغيل أشرطة الكاسيت. يحتوي طراز IBM PC الأساسي على 16 كيلوبايت فقط من ذاكرة الوصول العشوائي (RAM) ولا يحتوي على أي نوع من محركات الأقراص، لذا كانت واجهة تشغيل أشرطة الكاسيت ولغة BASIC المخزنة في ذاكرة القراءة فقط (ROM) ضرورية لجعل الطراز الأساسي قابلاً للاستخدام. لا يستطيع جهاز IBM PC الذي يحتوي على أقل من 32 كيلوبايت من ذاكرة الوصول العشوائي (RAM) الإقلاع من القرص. من بين رقائق ذاكرة القراءة فقط (ROM) الخمس سعة 8 كيلوبايت في جهاز IBM PC الأصلي، والتي يبلغ مجموعها 40 كيلوبايت، تحتوي أربع منها على لغة BASIC وواحدة فقط تحتوي على نظام الإدخال والإخراج الأساسي (BIOS)؛ عند تثبيت 16 كيلوبايت فقط من ذاكرة الوصول العشوائي (RAM)، فإن لغة BASIC المخزنة في ذاكرة القراءة فقط (ROM) تمثل 4/7 من إجمالي ذاكرة النظام.

مع مرور الوقت وتوقف شحن BASIC على جميع أجهزة الكمبيوتر الشخصية، كان هذا المقاطعة يعرض ببساطة رسالة خطأ تشير إلى عدم العثور على وحدة تخزين قابلة للتشغيل (مثل "لا يوجد ROM BASIC"، أو رسائل توضيحية أكثر في إصدارات BIOS اللاحقة)؛ في إصدارات BIOS الأخرى، كان يطلب من المستخدم إدخال وحدة تخزين قابلة للتشغيل والضغط على مفتاح، وبعد أن يضغط المستخدم على مفتاح، كان يعود إلى محمل التمهيد (INT 19h) لمحاولة التمهيد مرة أخرى.

كان جهاز Rainbow 100 B من شركة Digital INT 18hيستدعي نظام BIOS الخاص به، والذي كان غير متوافق مع نظام BIOS الخاص بشركة IBM. وقد أعادت برامج Turbo Pascal و Turbo C و Turbo C++ استخدام INT 18 لتخصيص الذاكرة وتقسيمها إلى صفحات. كما أعادت برامج أخرى استخدام هذا المتجه لأغراضها الخاصة.

خطافات BIOS

دوس

في أنظمة DOS، يقوم IO.SYS أو IBMBIO.COM بربط INT 13 لاكتشاف تغيير القرص المرن، وتتبع استدعاءات التنسيق، وتصحيح أخطاء حدود DMA، والتغلب على المشاكل في ROM BIOS الخاص بشركة IBM "01/10/84" مع رمز النموذج 0xFC قبل الاستدعاء الأول.

بتجاوز BIOS

لا تستخدم العديد من أنظمة التشغيل الحديثة (مثل لينكس وويندوز ) أي استدعاءات لمقاطعات نظام الإدخال والإخراج الأساسي (BIOS ) بعد بدء التشغيل، بل تختار التفاعل المباشر مع المكونات المادية. وللقيام بذلك، تعتمد هذه الأنظمة على برامج تشغيل إما أنها جزء من نواة نظام التشغيل نفسه، أو تأتي مع نظام التشغيل، أو يوفرها مصنّعو المكونات المادية.

هناك عدة أسباب لهذه الممارسة. أهمها أن أنظمة التشغيل الحديثة تعمل مع المعالج في الوضع المحمي (أو الوضع الطويل )، بينما لا يُنفذ كود BIOS إلا في الوضع الحقيقي . هذا يعني أنه إذا أراد نظام تشغيل يعمل في الوضع المحمي استدعاء BIOS، فسيتعين عليه أولاً الانتقال إلى الوضع الحقيقي، ثم تنفيذ الاستدعاء وانتظار النتيجة، ثم العودة إلى الوضع المحمي. وهذا بطيء للغاية وغير فعال. يقتصر الكود الذي يعمل في الوضع الحقيقي (بما في ذلك BIOS) على الوصول إلى ما يزيد قليلاً عن 1 ميجابايت من الذاكرة، وذلك بسبب استخدام عنونة الذاكرة المجزأة 16 بت . إضافةً إلى ذلك، لا يُعد BIOS عمومًا أسرع طريقة لتنفيذ أي مهمة. في الواقع، جعلت قيود سرعة BIOS من الشائع حتى في عصر DOS أن تتجاوز البرامج قيوده لتجنب قيود الأداء، خاصةً لعرض الرسومات المرئية والاتصال التسلسلي السريع.

إضافةً إلى العوامل المذكورة أعلاه، تشمل مشاكل وظائف نظام الإدخال والإخراج الأساسي (BIOS) محدودية نطاق الوظائف المُعرّفة، وعدم اتساق مجموعات الوظائف الفرعية المدعومة على أجهزة الكمبيوتر المختلفة، وتفاوت جودة أنظمة BIOS (أي أن بعضها كامل وموثوق، بينما البعض الآخر مختصر ومليء بالأخطاء). وباتخاذهم زمام المبادرة وتجنب الاعتماد على نظام BIOS، يستطيع مطورو أنظمة التشغيل التخلص من بعض المخاطر والتعقيدات التي يواجهونها في كتابة برامج النظام ودعمها. في المقابل، يصبح هؤلاء المطورون مسؤولين عن توفير برامج تشغيل "مباشرة" لكل نظام أو جهاز طرفي مختلف يرغبون في أن يعمل معه نظام التشغيل (أو عن حثّ مُصنّعي الأجهزة على توفير هذه البرامج).

وبالتالي ينبغي أن يكون واضحاً أن أنظمة التشغيل المدمجة التي تم تطويرها بميزانيات صغيرة تميل إلى استخدام BIOS بشكل كبير، في حين أن أنظمة التشغيل الكبيرة التي تم بناؤها بواسطة مجموعات ضخمة من مهندسي البرمجيات بميزانيات كبيرة غالباً ما تختار كتابة برامج التشغيل الخاصة بها بدلاً من استخدام BIOS - أي حتى بدون مراعاة مشاكل التوافق بين BIOS والوضع المحمي.

انظر أيضاً

ملحوظات

  1. ليست كل أجهزة الكمبيوتر المزودة بنظام BIOS متوافقة مع أجهزة IBM PC

مراجع