سؤال

ومجرد لافتة. كيف يمكن في الواقع وظيفة النوم) عمل ((أعلن في WINDOWS.H)؟ ربما ليس فقط أن التنفيذ، ولكن أي شخص. مع ذلك يعني - كيف يتم تنفيذها؟ كيف يمكن أن يجعل الرمز "وقف" لوقت محدد؟ الغريب أيضا حول كيفية CIN >> وتلك في الواقع <م> العمل . ما يفعلون بالضبط؟

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

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

المحلول

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

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

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

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

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

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

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

نصائح أخرى

ونظام جداول التشغيل كيف عمليات تشغيل (والذي العمليات مؤهلة للتشغيل، ما هو ترتيب، ...). Sleep() ربما يصدر استدعاء نظام الذي يروي نواة "لا تدع لي استخدام المعالج ل<م> س ميلي ثانية".

وباختصار، النوم () يحكي OS تجاهل عملية / موضوع لفترة من الوقت.

و"CIN" يستخدم طن من مشغلي فوق طاقتها. و'>>'، التي عادة ما تكون من اليمين تحول بعض الشيء، وطاقتها الى حد كبير كل نوع من المعامل اليمنى في C ++. يتم توفير وظيفة منفصلة لكل واحد، وهو يقرأ من وحدة التحكم وتحويل المدخلات إلى أيهما نوع متغير قدمتموه. على سبيل المثال:

std::cin::operator>> (int &rhs);

وهذا ليس حقيقيا C ++ - أنا لم تعمل مع تيارات والحمولة الزائدة في حين، لذلك أنا لا أتذكر نوع الإرجاع أو الترتيب الدقيق من الحجج. ومع ذلك، يتم استدعاء هذه الدالة عند تشغيل CIN >> متغير عدد صحيح.

وتنفيذ الأساسي المحدد يعتمد على نظام التشغيل.

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

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

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

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

وأما بالنسبة للتيارات C ++، و "CIN" يخفي التعامل مع الملف الفعلي (ستدين والمعياري هي في الواقع هذه المقابض) كنت الوصول، و ">>" المشغل لأنه يخفي المكالمات الأساسية للقراءة والكتابة. منذ ان واجهة تطبيق يمكن أن يكون نظام التشغيل محددة، ولكن من الناحية النظرية أنها لا تزال تفعل أشياء مثل printf وscanf تحت غطاء محرك السيارة.

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