मैं एक डिवाइस ड्राइवर लिख रहा हूं कि, अन्य चीजों के साथ, स्मृति के ब्लॉक को kmalloc
के साथ आवंटित करता है। जब उपयोगकर्ता प्रोग्राम फ़ाइल बंद करता है तो यह स्मृति मुक्त हो जाती है। मेरे प्रयोगों में से एक में, उपयोगकर्ता प्रोग्राम फ़ाइल को बंद किए बिना क्रैश हो गया।kmalloc() द्वारा आवंटित स्मृति को स्वचालित रूप से कभी भी मुक्त किया जाता है?
क्या इस स्मृति को कुछ भी मुक्त कर देगा?
एक अन्य प्रयोग में, मैंने close()
फ़ंक्शन module_exit()
फ़ंक्शन पर स्थानांतरित कर दिया। जब मैं लगातार दो बार उपयोगकर्ता प्रोग्राम चलाता हूं, तो मैंने पहले ही बिना किसी पॉइंटर के पहले kmalloc
को उसी पॉइंटर के साथ बुलाया था। इस प्रकार, मैंने उस स्मृति में एक सूचक खो दिया, और इसे मुक्त नहीं कर सकता।
क्या यह स्मृति सिस्टम को तब तक खो गई जब तक कि मैं रीबूट नहीं करता, या जब मैं ड्राइवर को उतारता हूं तो इसे मुक्त किया जाएगा?
यह शायद रीबूट लेगा। मुझे लगता है कि कर्नेल जादुई रूप से खोए हुए मेमोरी को मुक्त नहीं करेगा। ऐसा करने का सही तरीका प्रोग्राम से बाहर निकलने और मुक्त संसाधनों को हुक करना होगा। यह वही समय है जब एक प्रोग्राम की फाइल डिस्क्रिप्टर साफ हो जाते हैं। – Wug