क्या यूनिक्स प्रक्रिया अनुसूचक स्वयं एक प्रक्रिया है, या क्या यह अन्य प्रक्रियाओं पर उसी तरह से लागू होता है जैसे सिस्टम कॉल करता है (कर्नेल बिट सेट के साथ उपयोगकर्ता प्रक्रिया में कर्नेल कोड)?
क्या यूनिक्स प्रक्रिया अनुसूचक स्वयं एक प्रक्रिया है, या क्या यह अन्य प्रक्रियाओं पर उसी तरह से लागू होता है जैसे सिस्टम कॉल करता है (कर्नेल बिट सेट के साथ उपयोगकर्ता प्रक्रिया में कर्नेल कोड)?
जवाबों:
एक यूनिक्स प्रक्रिया अनुसूचक वास्तव में एक सिस्टम कॉल पर "गुल्लक वापस" नहीं करता है। शेड्यूलर को निष्पादित करना किसी भी सिस्टम कॉल के बारे में है।
एक read()
सिस्टम कॉल या एक exit()
सिस्टम कॉल बिल्कुल शेड्यूलर को निष्पादित करने का कारण बनता है। read()
डिस्क एक्सेस के मामले में बहुत लंबा समय लग सकता है। जब तक आप चाहते हैं कि सब कुछ बहुत धीमा हो जाए, तो आपको यह देखने के लिए शेड्यूलर को चलाने की आवश्यकता है कि डेटा के साथ वापस आने के लिए पहली प्रक्रिया का इंतजार करते समय क्या प्रक्रिया चलनी चाहिए। एक read()
एक सॉकेट पर हो सकता है - समय डेटा वापस आने के लिए के लिए कुछ दूरस्थ सर्वर अनिश्चित है लेता है। कर्नेल को कुछ अन्य प्रक्रिया में फेरबदल करना चाहिए। A के मामले में exit()
, सिस्टम कॉल करने की प्रक्रिया किसी भी अधिक मौजूद नहीं है, इसलिए कुछ अन्य प्रक्रिया निर्धारित होनी चाहिए। एक pause()
या एक के लिए alarm()
, प्रक्रिया भविष्य में कुछ समय निष्पादित करना चाहती है। फिर, शेड्यूलर को चलाने के लिए एक और प्रक्रिया चुननी होगी।
मेरा मानना है कि अधिकांश, लेकिन सभी नहीं, सिस्टम कॉल यूनिक्स / लिनक्स / * बीएसडी अनुसूचक को निष्पादित करने का कारण बनते हैं। कभी-कभी gettimeofday()
शेड्यूलर को चलाने का कारण नहीं बनता है - सोलारिस उस तरह से काम करता था। लेकिन सामान्य तौर पर, आप काम करने के रूप में एक सिस्टम कॉल के बारे में सोच सकते हैं (एनआईसी पर डेटा भेजना, डिस्क रीड या राइट के लिए सेट अप करना, प्रक्रिया से बाहर निकलने का काम करना, फोर्किंग, जो भी हो), शेड्यूलर चलाना, और फिर जो भी निष्पादित हो। प्रक्रिया को अगले चलाने के लिए माना जाता है। कभी-कभी यही प्रक्रिया सिस्टम कॉल को बना देती है, लेकिन बहुत समय, यह नहीं है।