سؤال

أعرف القليل عن التجميع ، وأن هناك 4 أو 8 سجلات للأغراض العامة. كيف تعمل جميع البرامج الموجودة على الكمبيوتر مع هذا الكمية من السجلات ، خاصة مع MultiThreading وكل شيء؟

هل كانت مفيدة؟

المحلول

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

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

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

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

           alt text

جانبا: حلمي هو أن أكتب كتابًا كهذا يغطيه يومًا ما كل شىء, ، من مستوى كوارك إلى emacs :-)

نصائح أخرى

عادةً ما يتم تخزين المتغيرات الأخرى وأدوات الخيوط في مساحة الذاكرة المحمية ، حيث يمكن استدعاؤها في السجلات عند الحاجة.

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

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


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

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

بعض أجهزة الكمبيوتر لديها تعليمات تعمل على الذاكرة ؛ بعضها يعتمد على المكدس. يعتمد ذلك على المصممين والقيود التي يتم وضعها على الأجهزة.

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

من المثير للاهتمام في الواقع كيفية قدرة الكمبيوتر على استخدام عدد قليل جدًا من السجلات لإنجاز كل ما يفعله.

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

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

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

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

هذا هو أحد الأشياء التي يتم استخدام تخزين الكمبيوتر الآخر ، وخاصة ذاكرة الوصول العشوائي ، من أجل: لتوفير واستعادة أجزاء من البيانات داخل وخارج السجلات.

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

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

هذا سؤال متورط للغاية ويعتمد الإجابة على بنية وحدة المعالجة المركزية.

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

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top