प्रतीक्षा चैनल कर्नेल में वह स्थान है जहाँ वर्तमान में कार्य प्रतीक्षा कर रहा है। एक कार्य के लिए एक संसाधन की प्रतीक्षा करनी होती है, जो डेटा या प्रसंस्करण समय हो सकता है। इन दोनों में नेटवर्क सॉकेट्स, हार्डवेयर, फाइल्स आदि शामिल हैं; चूंकि उनमें से ज्यादातर यूनिक्स जैसी प्रणालियों में सिर्फ फाइलें हैं।
0
: प्रक्रिया प्रतीक्षा नहीं कर रही है
poll_schedule_timeout
poll()
I / O को संभालने के लिए उपयोग किया जाने वाला एक सिस्टम कॉल 1 है। के समान है select()
। 2
गैर-अवरोधक I / O का उपयोग करने वाले अनुप्रयोग इन कॉल्स का उपयोग यह देखने के लिए करते हैं कि वे फ़ाइल से पढ़ सकते हैं या लिख सकते हैं, इसे ब्लॉक करने के लिए। वे अक्सर इनपुट / आउटपुट स्ट्रीम के लिए उपयोग किए जाते हैं, जिसे अवरुद्ध नहीं किया जा सकता है (अन्यथा, शायद आपका माउस चलना बंद कर देगा)।
प्रतीक्षा चैनल poll_schedule_timeout
इंगित करता है कि एक कार्य I / O की प्रतीक्षा कर रहा है, या तो कीबोर्ड और चूहों, ध्वनि उपकरणों या यहां तक कि नेटवर्क सॉकेट्स जैसे हार्डवेयर।
- कर्नेल में एक फ़ंक्शन
- वे में परिभाषित हैं
<linux/poll.h>
। poll
पहले सिस्टम V में देखा गया एक कार्यान्वयन था, select
BSD UNIX के बराबर है।
futex_wait_queue_me
:
इसे समझाने के लिए, हमें ताले को देखना होगा। लॉक सिस्टम में एक सहेजी गई स्थिति है जो इंगित करता है कि एक कार्य एक संसाधन के साथ काम करता है। उदाहरण के लिए, केवल एक ही कार्य हो सकता है जो एक फ़ाइल पढ़ता है। यह कार्य फ़ाइल को लॉक कर देगा, कोई भी अन्य कार्य 1 जो फ़ाइल को पढ़ने की कोशिश करता है, यह जानता होगा कि यह लॉक है, और लॉक के चले जाने की प्रतीक्षा करें, इससे पहले कि वह इसे एक्सेस कर सके। प्रोसेसर समय के लिए एक ही बात होती है।
लिनक्स का आधुनिक संस्करण (अधिकांश आर्किटेक्चर पर) कर्नेल में एक फ्यूटेक्स (फास्ट यूजरस्पेस म्यूटेक्स) लॉक का उपयोग करता है। म्यूटेक्स, पारस्परिक बहिष्करण, इस विचार को संदर्भित करता है कि एक सामान्य संसाधन किसी भी समय केवल एक कार्य द्वारा पहुँचा जा सकता है। इसके लिए, सिस्टम में झंडे लगाए जाते हैं।
यदि एक प्रक्रिया एक बंद संसाधन के लिए इंतजार कर रही है, तो इसे व्यस्त प्रतीक्षा
या "स्पिनिंग" कहा जाता है, इस तथ्य का संदर्भ देते हुए कि यह इसे तब तक और अधिक तक पहुंचने की कोशिश करता है, जब तक कि यह नहीं हो सकता। जब यह घूमता है तो किसी कार्य को अवरुद्ध होने के लिए कहा जाता है ।
फ़ुटेक्स लॉक को यूज़र्सस्पेस में एक संख्या के रूप में माना जा सकता है, जिसे किसी कार्य द्वारा बढ़ा या घटाया जा सकता है (उन मामलों में जहां संसाधन कई कार्यों द्वारा पहुँचा जा सकता है, यह संख्या एक से अधिक हो सकती है)। यह चित्र 4 में दिखाया गया नंबर है ।
ये कार्य प्रतीक्षा कतार में खुद को समाहित करते हैं , कार्यों की एक सरल कतार जो कुछ कार्य करने की आवश्यकता होती है, एक बार प्रसंस्करण समय उपलब्ध होने के बाद, कार्य अपना कार्य करते हैं और कतार से हटा दिए जाते हैं।
futex_wait_queue_me
एक कार्य करता है। यह तब सिग्नल, टाइम आउट या वेकअप का इंतजार करता है। टास्क जो इस वेटिंग चैनल में हैं वे वेटिंग क्यू पर इंतजार नहीं कर रहे हैं, वे इंतजार कर रहे हैं।
- एक कार्य या तो प्रक्रिया 3 या थ्रेड 2 हो सकता है
- थ्रेड प्रक्रिया का एक उप-भाग है। कई धागे समानांतर चल सकते हैं
- एक प्रक्रिया एक पूर्ण विकसित कार्यक्रम है, इसमें एक या अधिक धागे होते हैं, हालांकि एक कार्यक्रम में कई प्रक्रियाएं भी शामिल हो सकती हैं।
- याद रखें, यह अभी भी चीजों का एक उच्च स्तरीय दृश्य है, यह कार्यान्वयन विवरणों पर विचार नहीं कर रहा है
__skb_recv_datagram
एक बंद नेटवर्क सॉकेट पर कुछ डेटा के लिए प्रतीक्षा करें।
sk_wait_data
नेटवर्क सॉकेट पर कुछ डेटा के लिए प्रतीक्षा करें।
do_exit
किसी प्रक्रिया को छोड़ने का यह अंतिम भाग है। किसी अन्य प्रक्रिया को शेड्यूल करने के do_exit()
लिए schedule()
अगला कॉल करता है। जब do_exit()
कहा जाता है, तो प्रक्रिया एक है ZOMBIE
।
do_wait
शेड्यूलर्स प्रतीक्षा कतार में एक प्रक्रिया जोड़ी जाती है।
pipe_wait
, unix_stream_data_wait
एक प्रक्रिया एक उपप्रकार से डेटा की प्रतीक्षा कर रही है। यह तब होता है, उदाहरण के लिए, जब आप इस प्रकार का कोड चलाते हैं:
echo | sleep 10 && echo hallo # pipe
या
cat < hello.c # unix data stream
hrtimer_nanosleep
प्रक्रिया का उपयोग करके, नींद सो रही है hrtimer_nanosleep()
। इस विधि का उपयोग समय के विशिष्ट अंतराल के लिए सोने के लिए एक प्रोग्राम के लिए किया जा सकता है, नैनोसेकंड सटीकता के साथ।
ये सब नहीं हैं, लेकिन मैंने किसी अन्य को नहीं देखा। एक टिप्पणी पोस्ट करें अगर मैंने कुछ भी याद किया है।