ذاكرة غير قابلة للتدمير ، عمليات غير قابلة للتدمير


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

تأثيرات الإشعاع


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

كيف يمكن للمرء ألا يتذكر خنزير صغير معه: "من الصعب أن تكون شجاعًا عندما تكون مجرد كائن صغير جدًا."

يمكن أن تكون عواقب دخول الإشعاع الكوني إلى أشباه الموصلات مختلفة. هذا هو تأين الذرات وانتهاك الشبكة البلورية والتفاعلات النووية. هنا ، يتم وصف المنشطات السليكونية بالنيوترونات الحرارية في مفاعل ذري ، عندما يتحول Si (30) إلى P (31) ، ويتم تحقيق خصائص أشباه الموصلات المطلوبة. لا يستحق إعادة سرد المقالات الرائعة المذكورة ، سنلاحظ فقط ما يلي -

  1. بعض الآثار لها تأثير قصير المدى وليس لها آثار طويلة المدى. يمكن أن تؤدي إلى أخطاء يمكن إصلاحها إما الأجهزة أو البرامج. في أسوأ الحالات ، يساعد إعادة التشغيل.
  2. , . - .
  3. .

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

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

وبالتالي ، هناك عاملان

  • في أي وقت ، قد يحدث فشل ، والذي يتم معالجته بإعادة التشغيل
  • سيتدهور النظام تدريجيًا (تسلسل الفشل) ، وسيحدث معظم العمل في ظروف التدهور الجزئي

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

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

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

إنها حالة متناقضة عندما يكون النظام الذي يتم تنزيله في المستوى الأعلى أقل موثوقية مقارنة بجهاز كمبيوتر واحد يمكنه التكيف مع التدهور التدريجي.

من الجدير بالذكر النهج المسمى Lock-step ، عندما يقوم نواتان بنفس المهمة مع تحول لدورة ساعة أو دورتين ، وبعد ذلك تتم مقارنة النتائج. إذا لم تكن متساوية ، يتم إعادة تنفيذ جزء من التعليمات البرمجية. لا يعمل هذا إذا كان هناك خطأ في الذاكرة أو ذاكرة التخزين المؤقت العامة ، ومع ذلك ، فإن لها حماية خاصة بها.

هناك أيضا نهج حيث يكرر المترجم تنفيذ جزء من الأوامر ويقارن النتائج. هذه نسخة إلكترونية من Lock-step.

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

كيفية تعليم الأجهزة ونظام التشغيل للتكيف مع التدهور التدريجي هو موضوع نقاش آخر.

ماذا إذا


إن فكرة الذاكرة الثابتة / الثابتة ليست جديدة في حد ذاتها ، لذا فإن ديمتري زافاليشين المحترم (dzavalishin) اقترح مفهومه للذاكرة المستمرة . في يديه ، أدى هذا إلى ظهور نظام تشغيل Phantom ثابت بالكامل ، في الواقع آلة افتراضية مع النفقات العامة المقابلة.

ربما ، بمرور الوقت ، ستنضج تقنيات MRAM أو FRAM ... بينما هي خام.

هناك أيضًا أسطورة حول الكمبيوتر الموجود على متن صاروخ R-36M (15L579؟) ، والذي كان قادرًا على إطلاقه من خلال سحابة مشعة بعد انفجار نووي قريب. الذاكرة التطبيقية على النوى الفريتية محصنة ضد الإشعاع. تكون دورة التسجيل لمثل هذه الذاكرة بترتيب وحدات من الميكروثانيةلذلك ، خلال الوقت الذي طار فيه الصاروخ بضعة ديسيمترات ، كانت هناك فرصة مادية للحفاظ على سياق المعالج - محتويات السجلات والأعلام. استيقظ المعالج في بيئة آمنة ، واستمر في العمل.
تبدو قابلة للتصديق.

هناك بعض الاستثناءات:

  1. السبات في شكله الحالي غير مناسب. يستغرق بعض الجهد والوقت. نحن نحاول حماية أنفسنا من فشل مفاجئ. ليس من الواضح أنه بعد هذا الفشل يكون المعالج قادرًا على القيام بشيء على الأقل. وبالمثل ، في 15L579 ، يتلقى النظام تحذيرًا قبل أن تبدأ المشاكل ولديه وقت للحماية منها.
  2. “” — , , — . , () , .
  3. , , . — -.

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

أولاً ، كيف يجب أن تبدو من جانب مبرمج التطبيق.

نظرة من خارج نواة نظام التشغيل


نظرًا لأن التعافي من الفشل يشبه التعافي من طرح استثناء ، فقد يبدو العمل معه متشابهًا. على سبيل المثال ، في C ++ ، نرث فئة std :: tremendous_error من std :: استثناء ، ونلتقطها في كتلة محاولة / التقاط عادية وننظم المعالجة.

ومع ذلك ، يحب المؤلف دلالات setjmp / longjmp (SJLJ) أكثر لأن:

  • هذا موجز ، ما عليك سوى استدعاء setjmp التناظرية (& buf) واستئناف العمل من نفس المكان
  • حتى لا يلزم "& buf" ، فقط استدعاء دالة النظام التي تخزن الحالة الحالية
  • إلى جانب لغة C ++ ، هناك لغات رائعة أخرى ، ليس في كل مكان توجد معالجة استثنائية ، ولكن في كل مكان توجد دعوة لوظائف النظام
  • وليس هناك حاجة لتعديل اللغة ، لأننا كنا سنتصرف في الأصل قدر الإمكان

في وقت ما ، خسر SJLJ بسبب تقنية DWARF (بالمعنى الدقيق للكلمة ، القزم هو مجرد تنسيق لتسجيل المعلومات) في معالجة الاستثناء بسبب الأداء الضعيف ، الأداء ليس مهمًا هنا. على أي حال ، فإن الحفاظ على الدولة لن يكون رخيصًا ؛ يجب على المرء أن يتعامل معها بمسؤولية.

نظرة من داخل نواة نظام التشغيل


ما الذي يجب حفظه ، مما يتكون سياق تنفيذ العملية؟

  1. لكل سلسلة رسائل في وضع المستخدم - "jmp_buf" الحالي مع السجلات اللازمة ، هذا يعني أن نظام التشغيل يجب أن يوقف جميع سلاسل عمليات الاتصال قبل حفظ البيانات
  2. , — . (: ), (ex: ).
  3. . (ex: ), (ex: TCP ). .
  4. , . ,
  5. . , . , — . .. .

    , , . .
  6. , .

المعلومات غير مطلوبة لتحويل الشفرة من الذاكرة الافتراضية إلى الذاكرة الفعلية والعكس صحيح ؛ عند إعادة التشغيل ، سيتم إعادة إنشاء هذه المعلومات من تلقاء نفسها ، ربما بطريقة مختلفة.

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

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

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

وبناءً على ذلك ، سنتعامل في المستقبل مع محتويات الذاكرة.

حفظ محتويات الذاكرة


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

ولكن ، بما أن مصطلح " ذاكرة المعاملات " مشغول ، فسنعرض مصطلحًا آخر - "ذاكرة غير قابلة للتدمير".

في الخارج ، يمكنك رؤية طريقتين يمكن من خلالهما تنفيذ هذه الذاكرة غير القابلة للتدمير.

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

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

ومع ذلك ، في هذا الوضع ، من المستحيل ، على سبيل المثال ، تخصيص صفيف callocth أكبر من الذاكرة المتاحة ( malloc- ، بالمناسبة ، ممكن). ومع ذلك ، لن يكون هذا على أي حال فكرة جيدة جدًا.

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

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

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

الخيار الثاني ، "الظل"
للعمل كمدير للمعاملات ، يجب أن تكون مدير معاملات.

دعنا نحدد الكيانات:

  1. يحتوي ملف الصفحة على صفحات بيانات ، لذا فإن الحجم مضاعف لحجم الصفحة. نقول الملف ، نعني القسم بالأحرى ، لأنه حجم ثابت يحسن استقرار النظام.
  2. مخصص صفحة ملف الترحيل . من الضروري تحديد صفحة ليس فقط لبيانات المستخدم ، ولكن أيضًا ، على سبيل المثال ، لتسجيل حالة المُخصص نفسه. وكذلك كل ما ذكر أعلاه.
  3. . , . , ,
    (= , ).
  4. . —
    • ID
    • ( )
    • ID .

    - TLB, .. .

    ( ) . . , ex: (Buddy Allocator) .

    , . .
  5. . COW (copy on write) . , . COW, - , . .

    — - , “dirty”. .
  6. (). .

    : , .

    . , . . , , . . , ? , .

    , .

    (= , , , ).


    (=, ). .

    . , . , , , .

    , . , . .

    — . , , , , .
    , , .

    .
  7. . , , — . , ?

    — . , . , . , .. .

    — , SSD ! , SSD ( “” ) .

    , .

    — . , . , . ( ).

    , , , . , , . , , , . , — . .
  8. Checkpoint.

    , , , , . — . , . checkpoint. .

    . . - checkpoint- . .

    , . - .

    checkpoint-. , / .

    -, - /, . , ( ...). .

    . . . , . — , checkpoint.


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

ومع ذلك ، يجب أن تكون قادرًا على كتابة هذه البيانات وقراءتها بشكل موثوق.

المرشح الواضح هو ذاكرة فلاش. لم يكن الفلاش موثوقًا به في البداية نظرًا لانخفاض عدد دورات الكتابة الصالحة ، لذلك تم تطوير طرق خاصة للعمل معه .

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

مجموع


حسنًا ، الآن لدينا بين أيدينا جميع الأحرف الأربعة لكلمة ACID .

أ- الذرية ،
ج ـ تحقيق الاتساق
ـ أنا ـ العزل واضح ، يتحقق بشكل طبيعي. إذا كنت لا تنظر في حالة الذاكرة المشتركة. وفي الوقت الحالي نحن لا نفكر في ذلك.

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

ملاحظة. مجرد ملاحظة سريعة. ليس لدينا آلية لمعاملات التراجع ، يمكن أن يكون التراجع خطأ فادحًا فقط. من الناحية الفنية (يبدو) أنه من السهل تنفيذ برنامج التراجع عن المعاملات كنظير لـ longjmp. لكن هذه نسخة أكثر تقدمًا من longjmp منذ ذلك الحين يستعيد تماما الحالة الداخلية للعملية في وقت "setjmp" ، وتجنب تسرب الذاكرة ، يسمح بالانتقال ليس فقط من أسفل المكدس ...

PPS . ربما ، يمكن اعتبار خادم OpenLink Virtouso DBMS ، المتاح أيضًا كبرنامج مجاني ، النموذج الأولي لمدير المعاملات .

PPPS . بفضل فاليري شونكوف (علم amartology) وأنطون بونداريف (abondarev) لإجراء مناقشة مفيدة ومفيدة للغاية.

PPPPS . رسم آنا روساكوفا .

All Articles