2011-04-22 10 views
6

हर किसी को मैं लिनक्स में कार्यों के बारे में कुछ सवाल है, मुझे पता है कि सभी कार्य जो राज्य TASK_RUNNING पर वर्तमान में कर रहे हैं डेटा संरचना में हैं runqueue, लेकिन क्या कार्यों के लिए जो कुछ घटना के लिए इंतजार कर रहे हैं (राज्यों जो TASK_RUNNING नहीं कर रहे हैं के बारे में कहा जाता है, के लिए उदाहरण वाला एक जो कुंजीपटल से इनपुट की प्रतीक्षा कर रहा है)। क्या मेरे पास ऐसे कार्यों या केवल सामान्य list of tasks के लिए कुछ अन्य डेटा संरचना है? किसी भी स्पष्टीकरण के लिए अग्रिम धन्यवादकर्नेल स्टोर प्रक्रियाओं को कहां चलाता है जो चल रहे नहीं हैं?

उत्तर

2

TASK_INTERRUPTIBLE या TASK_UNINTERRUPTIBLE में प्रक्रियाओं को अलग-अलग वर्गों में आगे विभाजित किया जाता है, जिनमें से प्रत्येक एक विशिष्ट घटना से मेल खाता है। इस स्थिति में, प्रक्रिया राज्य जल्दी से प्रक्रिया वर्णनकर्ता को पुनः प्राप्त करने के लिए पर्याप्त जानकारी प्रदान नहीं करता, इसलिए प्रक्रियाओं wait_queue कहा जाता है की एक और सूची किया जाता है। Wait_queue उपकरण घटनाओं पर सशर्त इंतजार कर रहा है। एक विशिष्ट घटना के लिए प्रतीक्षा की जाने वाली प्रक्रिया उचित प्रतीक्षा कतार में रखी जाती है।

प्रतीक्षा कतारों चक्रीय सूचियों जिसका तत्वों संकेत शामिल वर्णनकर्ता कार्रवाई करने के लिए के रूप में लागू कर रहे हैं। एक प्रतीक्षा कतार सूची के प्रत्येक तत्व प्रकार wait_queue की है:

struct wait_queue { 
    struct task_struct * task; 
    struct wait_queue * next; 
}; 
0

इंतजार कतारों एक विशेष घटना होने की प्रतीक्षा करने के लिए प्रक्रियाओं को सक्षम करने के लिए इस्तेमाल कर रहे हैं - इस तरह के एक कुंजीपटल से इनपुट के लिए इंतज़ार कर के रूप में।

संबंधित मुद्दे