OS "Sivelkiriya": مثال لبناء برنامج

مرحبا يا هابر.

يواصل هذا المنشور دورة المنشورات حول مشروع Sivelkiriya OS. قدم المقال الأول من الدورة وصفًا عامًا للمفهوم ، وشرح الثاني سبب الحاجة إليه وفي أي شكل يمكن أن يرى المنتج الضوء ، والثالث الحلول المعمارية الموصوفة ، والرابع أجاب على سؤال كيفية تنسيق إجراءات مطوري أنظمة التشغيل و البرنامج في هذا النموذج. ستعرض هذه المقالة مثالًا لتقسيم برنامج بسيط إلى وحدات من أجل ملاءمته مع حقائق نظام التشغيل الجديد.

ضع في اعتبارك مثالًا كلاسيكيًا: برنامج يسمح لك بفتح ملف يحتوي على صورة نقطية وعرضه على الشاشة. يمكن تحجيم الصورة ، وإذا تجاوز حجمها بالمقياس الحالي حجم الشاشة ، فقم بالتمرير.

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

من أجل فهم كيفية حل هذه المهمة في إطار نظام التشغيل Sivelkiriya ، يجب عليك أولاً البحث "تحت غطاء" هذا البرنامج وفهم ما يقوم به وما المفاهيم التي يعمل بها. فيما يلي الكيانات التي تنشأ أثناء تشغيل البرنامج.

  1. موقع الصورة.في الحالة الكلاسيكية ، يتم وصفه من خلال المسار إلى الملف الموجود على القرص. مع مراعاة أوسع قليلاً ، تقع العناوين في الشبكة المحلية أو على الإنترنت أيضًا في هذه الفئة. ومع ذلك ، لا يستنفد كل الاحتمالات: يمكن وضع الصورة في ذاكرة الوصول العشوائي ، عند إخراج بعض البرامج (على سبيل المثال ، معالج الصور أو عارض الرسومات) ، على صفحة ويب ، في محادثة أو رسالة بريد إلكتروني ، داخل أرشيف أو وثيقة مكتب. على الرغم من حقيقة أن كل هذه الخيارات مختلفة من الناحية الفنية عن بعضها البعض وتتطلب معالجة مختلفة ، من وجهة نظر المستخدم ، فإنها تخدم غرضًا واحدًا: فهي تشير إلى مكان وجود الصورة التي يريد عرضها. يعد إنشاء واجهة تسمح لك بالاختيار من بين العديد من الخيارات مهمة غير تافهة ، ولكن من الناحية النظرية لا توجد عوائق لهذا النهج.علاوة على ذلك: لا يوجد سبب يمنع المستخدم من عرض الصورة الموجودة في أي من المواقع المذكورة أعلاه.
  2. تسلسل بايت يمثل الصورة المخزنة. سيتم تحديد طريقة الوصول إلى هذا التسلسل من خلال طريقة التخزين ، ومع ذلك ، من وجهة نظر الخوارزميات التي تقرأ هذه البايت من أجل عرض الصورة على الشاشة ، فإن الفرق لا يكاد يذكر.
  3. تنسيق ملف الصورة. التنسيقات الشائعة ، على سبيل المثال ، jpeg و gif. يتم تحديد التنسيق النهائي من خلال محتويات الملف: إذا تم حفظ ملف jpeg عن طريق الخطأ مع الامتداد .gif ، فإن محاولة تفسيره على أنه gif أو الرفض الكامل لمعالجته ستكون قصيرة النظر. في الوقت نفسه ، يمكن الحصول على تلميحات حول التنسيق المقصود ، على سبيل المثال ، من خلال تحليل امتداد الملف أو الرؤوس التي يرسلها خادم الويب.
  4. , ( ) .
  5. . , tiff, . — , gif — .
  6. .
  7. : , , , .
  8. .
  9. ( ) , .
  10. ( ), .

داخل نظام التشغيل Sivelkiriya ، يتم وصف كل من الكيانات المذكورة أعلاه من خلال واجهة بيانات معينة. يسمح هذا التمثيل باستخدامها في سياقات عديدة خارج النموذج الأصلي (الذي سيتم مناقشته لاحقًا).

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

قد يبدو هيكل الوحدات المشاركة في عمل هذا البرنامج كما يلي:

  1. تحدد الوحدة الأولى سلوك كائن يقوم بتنفيذ واجهة "موقع الكائن" (الصورة هي حالة خاصة لكائن). على وجه الخصوص ، يحدد كيفية الوصول إلى وحدات البايت من موقع معين. ومع ذلك ، يمكنه استخدام الوحدات التي توفر الوصول المباشر إلى دعم القرص أو الشبكة ، اعتمادًا على الموقع الفعلي للكائن.
  2. توفر الوحدة الثانية وصولاً مباشراً إلى بايت الصورة. بالإضافة إلى ذلك ، يوفر تلميحات حول النوع المحتمل للمحتوى بناءً على طريقة التخزين (امتداد الملف ، ورؤوس خادم الويب ، وما إلى ذلك).
  3. الوحدة الثالثة ، باستخدام تلميحات حول نوع المحتوى والوصول إلى تمثيل البايت ، تحدد النوع الفعلي للمحتوى (تنسيق ملف الصورة).
  4. , ( , , ) ( ) . , : , . — : jpeg .
  5. , , , , . — — , , .
  6. , . , . — , , , , , , , .

بالطبع ، بالإضافة إلى الوحدات الموصوفة ، يمكن للبرنامج المشاركة في الوحدات التي توفر ميزات إضافية: التسجيل ، وعرض مكونات النافذة ، وردود الفعل الصوتية ، وما إلى ذلك.

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

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

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

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

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

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

هذا الوصف هو مجرد عرض للإمكانية الأساسية لتنفيذ مخطط التفاعل هذا ولا يمكن اعتباره بمثابة تعليمات كاملة لكتابة عارض صور و / أو نظام تشغيل و / أو وحدات له.

المقالات السابقة في السلسلة متاحة هنا: واحد ، اثنان ، ثلاثة ، أربعة. النص الكامل ، كما كان من قبل ، متاح على موقع المشروع .

All Articles