यदि एक रनिंग प्रोसेस i / o पर ब्लॉक हो जाता है
आपकी प्रक्रिया को निलंबित करने के लिए IO पर ब्लॉक करना बहुत अधिक समान है। लिनक्स कर्नेल के संदर्भ में, कुछ IO सिस्टम कॉल को निष्पादित करता है जैसे कि या उस हैंडओवर को देखने के लिए ट्रिगर करने के लिए read()
एक sysenter
या बाधा हैंडलर का कारण होगा , do_sys_read()
अंततः कॉलिंग । यहां, यदि वर्तमान अनुरोध तुरंत संतुष्ट नहीं हो सकता है, तो फ़ंक्शन कॉल करता है sched()
जो फिर किसी अन्य प्रक्रिया को निष्पादित कर सकता है।
एक सहकारी प्रणाली के संदर्भ में, मैं अपेक्षा करता हूं कि जब आप किसी IO कारण के लिए एक सिस्टम कॉल करते हैं, यदि अनुरोध को संतुष्ट नहीं किया जा सकता है तो कर्नेल एक अन्य कार्य को चुनता है और उस पर अमल करता है। यह दस्तावेज़ कुछ पृष्ठभूमि प्रदान करता है - मूल रूप से, यदि आप IO पर प्रतीक्षा करते हैं, तो आपको उस IO की प्रतीक्षा में हमेशा के लिए लटका दिया जा सकता है। को-ऑपरेटिव शेड्यूलिंग का विचार है कि आप sched()
सीपीयू-गहन कार्यों को करते हैं, तो आप अक्सर कॉल करते हैं या समतुल्य relinquish-a-cpu विधि करते हैं।
कर्नेल-मोड विचार अधिक रोचक हैं। आर्किटेक्चर पर, जहां वे कुछ एम्बेडेड प्लेटफार्मों जैसे उपलब्ध हैं , इंटरप्टर्स हैंडलर अभी भी हार्डवेयर या सॉफ्टवेयर इंटरप्ट के जवाब में लगाए जाएंगे। यह आमतौर पर संभव है, कार्यान्वयन-वार, से बाधित हैंडलिंग अक्षम लिए , लेकिन इसमें भी कमियां हैं।