كيو آي أو
QIO ( Queue I/O ) هو مصطلح يستخدم في العديد من أنظمة تشغيل الكمبيوتر التي صممتها شركة Digital Equipment Corporation ( DEC ) السابقة في ماينارد، ماساتشوستس .
تبدأ عمليات الإدخال/الإخراج في هذه الأنظمة عن طريق إرسال استدعاء QIO إلى النواة . يوجد نوعان من QIO: إدخال/إخراج قائمة الانتظار وإدخال/إخراج قائمة الانتظار مع الانتظار.
بالنسبة لطلبات QIO بدون انتظار، يتم إنهاء العملية فورًا. إذا تمت إضافة الطلب إلى قائمة الانتظار بنجاح، تتم العملية الفعلية بشكل غير متزامن. عند اكتمال العملية، يتم إرجاع الحالة في متغير QIO status ذي الكلمة المزدوجة. قد يُحدد طلب QIO أيضًا أن اكتمال العملية سيؤدي إلى تعيين علامة حدث أو إصدار تنبيه نظام غير متزامن ( AST ).
يمكن أيضًا إصدار الاستدعاء كـ QIOW (إدخال/إخراج قائمة الانتظار وانتظار الاكتمال)، مما يسمح بالإدخال/الإخراج المتزامن. في هذه الحالة، يتم دمج عملية انتظار علامة الحدث بحيث لا يعود الاستدعاء حتى تكتمل عملية الإدخال/الإخراج أو تفشل.
تُطبّق أنظمة التشغيل التالية تقنية QIO(W):
- RSX-15
- RSX-11 (بما في ذلك جميع المتغيرات)
- RSTS/E (متزامن فقط، تتم محاكاته بواسطة نظام وقت تشغيل RSX )
- OpenVMS [ 1 ]
حجج QIO في VMS
في إطار نظام إدارة الفيديو (VMS)، تكون حجج استدعاء QIO هي:
- علامة الحدث التي يتم تعيينها عند اكتمال العملية. لا يمكن عدم تحديد علامة حدث؛ العلامة 0 صالحة. من المسموح تمامًا وجود عمليات متعددة متزامنة تُعيّن نفس علامة الحدث عند اكتمالها. عندئذٍ، يقع على عاتق التطبيق معالجة أي لبس قد ينجم عن ذلك، أو تجاهل علامة الحدث هذه ببساطة.
- القناة ، وهي عدد صحيح صغير مرتبط مسبقًا بالجهاز. على هذا المستوى، تتم جميع العمليات على ملفات القرص والمجلدات (تحليل أسماء الملفات، والبحث في المجلدات، وفتح/إغلاق الملفات) من خلال طلبات QIO المناسبة.
- رمز الوظيفة المراد تنفيذها. يتم تخصيص 6 بتات للرمز الأساسي (مثل القراءة والكتابة)، مع 10 بتات إضافية لـ "المعدلات" التي يعتمد معناها على الرمز الأساسي.
- كتلة حالة الإدخال/الإخراج الاختيارية (IOSB) ، التي يتم مسحها بواسطة استدعاء QIO، وتُملأ عند اكتمال عملية الإدخال/الإخراج. يحتوي أول بايتين على حالة الاكتمال (نجاح، الوصول إلى نهاية الملف، انتهاء المهلة، خطأ في الإدخال/الإخراج، إلخ)، بينما يُعيد البايتان التاليان عادةً عدد البايتات المقروءة أو المكتوبة في العملية. أما معنى البايتات الأربعة الأخيرة، إن وُجد، فيعتمد على العملية.
- روتين AST الاختياري الذي يتم استدعاؤه عند اكتمال العملية.
- معلمة إضافية (يعتمد معناها على المتصل) يتم تمريرها إلى روتين AST.
- قائمة شبه موحدة تضم ما يصل إلى ستة معلمات تُعرف من P1 إلى P6 . تُحدد المعلمتان الأوليان عادةً عنوان بداية مخزن الإدخال/الإخراج (P1)، وعدد بايتات الإدخال/الإخراج (P2). أما المعلمات المتبقية فتختلف باختلاف العملية والجهاز. على سبيل المثال، بالنسبة لطرفية حاسوب ، قد تكون P3 هي الوقت اللازم لإتمام عملية القراءة، بينما بالنسبة لمحرك أقراص ، قد تكون رقم كتلة البداية لعملية النقل.
إتمام QIG
هناك ثلاث طرق مختلفة لاستشعار اكتمال عملية الإدخال/الإخراج الموجودة في قائمة الانتظار:
- عندما يتم تعيين علامة الحدث.
- عندما يصبح أول بايتين من IOSB غير صفريين.
- عند تنفيذ روتين AST.
عمليات إدخال/إخراج غير عادية تتطلب معالجة معقدة
تُعالج عمليات الإدخال/الإخراج البسيطة، مثل طلبات القراءة أو الكتابة، إما بواسطة النواة نفسها أو بواسطة برامج تشغيل الأجهزة. أما بعض الطلبات الأكثر تعقيدًا، وتحديدًا تلك التي تتضمن محركات الأشرطة وعمليات على مستوى الملفات، فقد كانت تُنفذ في الأصل بواسطة معالج تحكم مساعد (ACP) (مهمة خاصة ذات تعيين عناوين خاص بها).
تم تنفيذ نظام الملفات Files -11 ODS-1 على RSX-11 بواسطة مكتبة روتينية فرعية تتواصل مع مهمة تسمى F11ACP باستخدام مجموعة خاصة من QIOs تسمى "ACP QIOs". تم توفير الوظائف المكافئة للتحكم في أجهزة الشريط المغناطيسي بواسطة مهمة تسمى MTAACP.
في الأصل، تم توفير نظام الملفات Files-11 ODS-2 بواسطة F11BACP على VMS ، ولكن تم دمج وظائف F11BACP لاحقًا في نواة VMS لتوفير الحمل الزائد لتبديل سياق العملية، ويطلق عليه الآن اسم XQP (معالج Qio الموسع).
IO$_READPROMPT
ربما يكون طلب QIO الفردي الأكثر تعقيدًا هو استدعاء IO$_READPROMPT الخاص ببرنامج تشغيل محطة VMS مع مُعدِّل IO$M_TIMED ؛ يتطلب طلب QIO هذا جميع المعلمات الست الإضافية:
- P1
- عنوان المخزن المؤقت الذي يتم فيه استقبال الأحرف المدخلة
- P2
- يحدد طول المخزن المؤقت الحد الأقصى لعدد الأحرف المراد قراءتها. إذا امتلأ المخزن المؤقت، ستكتمل عملية القراءة بنجاح، حتى لو لم يكتب المستخدم حرف إنهاء السطر. يُسمح بقيمة صفر، وفي هذه الحالة ستنتهي عملية القراءة بنجاح دون قراءة أي أحرف.
- P3
- الحد الأقصى لعدد الثواني للانتظار قبل إدخال المزيد من البيانات. يُستخدم هذا الخيار فقط في حال وجود مُعدِّل IO$M_TIMED ، وقيمة الصفر تعني صفر ثانية: ستنتهي عملية القراءة فورًا، وبالتالي ستكون البيانات المُدخلة الوحيدة الممكنة هي ما كتبه المستخدم مسبقًا.
- الصفحة 4
- عنوان "قناع الإنهاء" الاختياري، الذي يحدد أحرف ASCII التي تُنهي عملية القراءة. في حال عدم تحديده، يُستخدم افتراضيًا فواصل الأسطر المعتادة في نظام VMS، بما في ذلك حرف إرجاع المؤشر (ولكن ليس حرف تغذية السطر). من الممكن تحديد قناع بدون فواصل أسطر، وفي هذه الحالة لن تكتمل القراءة إلا عند امتلاء المخزن المؤقت أو انقضاء المهلة الزمنية.
- P5
- عنوان سلسلة نصية تُعرض للمستخدم قبل قبول الإدخال. وتكمن ميزة توفير هذه السلسلة النصية، بدلاً من عرضها كعملية كتابة سابقة، في إعادة عرضها تلقائيًا في أي حالة تتطلب تحديث سطر الإدخال أثناء عملية القراءة (مثلًا بعد بث رسالة من المشغل إلى الجهاز، أو عندما يضغط المستخدم على CTRL/R لإعادة عرض السطر).
- الصفحة 6
- طول سلسلة التعليمات.
من خلال الاختيارات المناسبة للمعلمات المذكورة أعلاه، من الممكن القيام بكل من إدخال وإخراج البيانات الطرفية من خلال استدعاء واحد، فلا حاجة لاستخدام استدعاء IO$_WRITEVBLK العادي لإخراج البيانات الطرفية على الإطلاق.
مراجع
- أوبن في إم إس
