किसी प्रक्रिया का "वेटिंग चैनल" क्या है?


36

गनोम सिस्टम मॉनिटर के प्रोसेस टैब में "वेटिंग चैनल" कॉलम है। अब तक मैं यहां देखे जाने वाले सबसे सामान्य मूल्यों में poll_schedule_timeout है , लेकिन मुझे अन्य मान भी दिखाई देते हैं: 0 , do_exit , do_wait , futex_wait_queue_me , pip_wait , __skb_recv_datagram और unix_stream_data_wait

तो यह "वेटिंग चैनल" कॉलम का क्या मतलब है? और शायद उन मूल्यों में से कुछ का क्या मतलब है?

स्क्रीनशॉट

जवाबों:


42

प्रतीक्षा चैनल कर्नेल में वह स्थान है जहाँ वर्तमान में कार्य प्रतीक्षा कर रहा है। एक कार्य के लिए एक संसाधन की प्रतीक्षा करनी होती है, जो डेटा या प्रसंस्करण समय हो सकता है। इन दोनों में नेटवर्क सॉकेट्स, हार्डवेयर, फाइल्स आदि शामिल हैं; चूंकि उनमें से ज्यादातर यूनिक्स जैसी प्रणालियों में सिर्फ फाइलें हैं।

  • 0: प्रक्रिया प्रतीक्षा नहीं कर रही है

  • poll_schedule_timeout

    poll()I / O को संभालने के लिए उपयोग किया जाने वाला एक सिस्टम कॉल 1 है। के समान है select()2

    गैर-अवरोधक I / O का उपयोग करने वाले अनुप्रयोग इन कॉल्स का उपयोग यह देखने के लिए करते हैं कि वे फ़ाइल से पढ़ सकते हैं या लिख ​​सकते हैं, इसे ब्लॉक करने के लिए। वे अक्सर इनपुट / आउटपुट स्ट्रीम के लिए उपयोग किए जाते हैं, जिसे अवरुद्ध नहीं किया जा सकता है (अन्यथा, शायद आपका माउस चलना बंद कर देगा)।

    प्रतीक्षा चैनल poll_schedule_timeoutइंगित करता है कि एक कार्य I / O की प्रतीक्षा कर रहा है, या तो कीबोर्ड और चूहों, ध्वनि उपकरणों या यहां तक ​​कि नेटवर्क सॉकेट्स जैसे हार्डवेयर।

    1. कर्नेल में एक फ़ंक्शन
    2. वे में परिभाषित हैं <linux/poll.h>pollपहले सिस्टम V में देखा गया एक कार्यान्वयन था, selectBSD UNIX के बराबर है।
  • futex_wait_queue_me:

    इसे समझाने के लिए, हमें ताले को देखना होगा। लॉक सिस्टम में एक सहेजी गई स्थिति है जो इंगित करता है कि एक कार्य एक संसाधन के साथ काम करता है। उदाहरण के लिए, केवल एक ही कार्य हो सकता है जो एक फ़ाइल पढ़ता है। यह कार्य फ़ाइल को लॉक कर देगा, कोई भी अन्य कार्य 1 जो फ़ाइल को पढ़ने की कोशिश करता है, यह जानता होगा कि यह लॉक है, और लॉक के चले जाने की प्रतीक्षा करें, इससे पहले कि वह इसे एक्सेस कर सके। प्रोसेसर समय के लिए एक ही बात होती है।

    लिनक्स का आधुनिक संस्करण (अधिकांश आर्किटेक्चर पर) कर्नेल में एक फ्यूटेक्स (फास्ट यूजरस्पेस म्यूटेक्स) लॉक का उपयोग करता है। म्यूटेक्स, पारस्परिक बहिष्करण, इस विचार को संदर्भित करता है कि एक सामान्य संसाधन किसी भी समय केवल एक कार्य द्वारा पहुँचा जा सकता है। इसके लिए, सिस्टम में झंडे लगाए जाते हैं।

    यदि एक प्रक्रिया एक बंद संसाधन के लिए इंतजार कर रही है, तो इसे व्यस्त प्रतीक्षा या "स्पिनिंग" कहा जाता है, इस तथ्य का संदर्भ देते हुए कि यह इसे तब तक और अधिक तक पहुंचने की कोशिश करता है, जब तक कि यह नहीं हो सकता। जब यह घूमता है तो किसी कार्य को अवरुद्ध होने के लिए कहा जाता है ।

    यदि आप इसे पढ़ सकते हैं, तो आप इस उत्तर में कम से कम एक गलती को सुधारने के लिए बाध्य हैं: पी

    फ़ुटेक्स लॉक को यूज़र्सस्पेस में एक संख्या के रूप में माना जा सकता है, जिसे किसी कार्य द्वारा बढ़ा या घटाया जा सकता है (उन मामलों में जहां संसाधन कई कार्यों द्वारा पहुँचा जा सकता है, यह संख्या एक से अधिक हो सकती है)। यह चित्र 4 में दिखाया गया नंबर है ।

    ये कार्य प्रतीक्षा कतार में खुद को समाहित करते हैं , कार्यों की एक सरल कतार जो कुछ कार्य करने की आवश्यकता होती है, एक बार प्रसंस्करण समय उपलब्ध होने के बाद, कार्य अपना कार्य करते हैं और कतार से हटा दिए जाते हैं।

    futex_wait_queue_meएक कार्य करता है। यह तब सिग्नल, टाइम आउट या वेकअप का इंतजार करता है। टास्क जो इस वेटिंग चैनल में हैं वे वेटिंग क्यू पर इंतजार नहीं कर रहे हैं, वे इंतजार कर रहे हैं।


    1. एक कार्य या तो प्रक्रिया 3 या थ्रेड 2 हो सकता है
    2. थ्रेड प्रक्रिया का एक उप-भाग है। कई धागे समानांतर चल सकते हैं
    3. एक प्रक्रिया एक पूर्ण विकसित कार्यक्रम है, इसमें एक या अधिक धागे होते हैं, हालांकि एक कार्यक्रम में कई प्रक्रियाएं भी शामिल हो सकती हैं।
    4. याद रखें, यह अभी भी चीजों का एक उच्च स्तरीय दृश्य है, यह कार्यान्वयन विवरणों पर विचार नहीं कर रहा है
  • __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()। इस विधि का उपयोग समय के विशिष्ट अंतराल के लिए सोने के लिए एक प्रोग्राम के लिए किया जा सकता है, नैनोसेकंड सटीकता के साथ।

ये सब नहीं हैं, लेकिन मैंने किसी अन्य को नहीं देखा। एक टिप्पणी पोस्ट करें अगर मैंने कुछ भी याद किया है।


मुझे नींद_नहीं आई है?
श्री एक्सिलस

Sleep_on_page_killable का सबसे संभावित कारण यह है कि यह प्रक्रिया एक ऐसे पृष्ठ को लोड करने की कोशिश कर रही है जो स्मृति में नहीं है, इसलिए यह पृष्ठ दोष का कारण बनता है, और प्रक्रिया को पृष्ठ लोड होने तक सोने के लिए रखना पड़ता है। यदि I / O सबसिस्टम अतिभारित है (हो सकता है कि क्योंकि आप बहुत अधिक I / O कर रहे हैं) तो यह अक्सर दिखाई दे सकता है।
tsuna

किस बारे में signal? मैं उसमें चला गया हूं। क्या प्रक्रिया मृत है? ज़ोंबी? और क्या? इस प्रक्रिया का क्या होगा?
नॉटिनामेनेनेम

11

प्रतीक्षा चैनल मान कर्नेल फ़ंक्शन का नाम है जिसमें वर्तमान में प्रक्रिया अवरुद्ध है।

नाम आमतौर पर एक सिस्टम कॉल से संबंधित है, जिसमें एक मैनुअल पेज होगा।

  • futex_wait_queue_me से संबंधित है futex । यह एक प्रकार के म्यूटेक्स लॉक (फास्ट यूजरस्पेस म्यूचुअल एक्सक्लूजन) को संदर्भित करता है जिसका उपयोग एक प्रोसेसर पर कई प्रक्रियाओं को शेड्यूल करने के लिए किया जाता है। राज्य इंगित करता है कि लॉक प्राप्त करने के लिए आपकी प्रक्रिया को लागू किया गया है। 2
  • do_wait प्रतीक्षा से संबंधित है ।
  • आदि।

यदि आप वास्तव में अधिक विस्तृत जानकारी चाहते हैं तो आप कर्नेल स्रोत की जांच कर सकते हैं ।

यदि आप cat /proc/some_pid/stackएक टर्मिनल में टाइप करते हैं तो आपको कुछ आउटपुट मिलेंगे जैसे:

[<c0227f4e>] poll_schedule_timeout+0x3e/0x60
[<c022879f>] do_select+0x55f/0x670
[<c0228f40>] core_sys_select+0x140/0x240
[<c0229241>] sys_select+0x31/0xc0
[<c05c9cc4>] syscall_call+0x7/0xb
[<ffffffff>] 0xffffffff

और पहली पंक्ति पर आपको सिस्टम मॉनीटर पर प्रदर्शित होने वाली चीज़ मिलती है। जहाँ तक मुझे पता है, poll_schedule_timeout इंगित करता है कि आपकी प्रक्रिया किसी चीज़ का इंतज़ार कर रही है।

यह अतुल्यकालिक I / O और मतदान से संबंधित है

स्रोत (ओं): 1. प्रक्रिया प्रतीक्षा चैनल (WCHAN) और अलार्म? - 2. AskUbuntu जवाब



लगता है कि आपने देखा कि मैंने आपके उत्तर को सुधारने के लिए पुन: उपयोग किया है;;
मैक्सिमे आर।

2
आपकी टिप्पणी मुझे खुश रखने के लिए पर्याप्त से अधिक है :) यदि आप यह जानना चाहते हैं कि अटेंशन कैसे काम करता है, तो इस विषय पर एक अच्छा SO ब्लॉग पोस्ट है । हालांकि इसके बारे में बहुत ज्यादा चिंता न करें, मैं चाहता हूं कि लोग मेरे काम का यथासंभव उपयोग करें।
Stefano Palazzo

1
खैर, मैं सिर्फ मेटा पर इस विषय पर एक प्रश्न लिख रहा था। (पहले ही ब्लॉग पोस्ट पढ़ चुके थे)
मैक्सिमे आर।

यह यहाँ है । और मुझे यकीन है कि आपका जवाब किसी बिंदु पर मेरा खत्म हो जाएगा ^ ^
मैक्सिम आर।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.