फ़ाइल सिस्टम फ्रेगमेंटेशन

कम्प्यूटिंग में, फाइल सिस्टम विखंडन, जिसे कभी-कभी फाइल सिस्टम एजिंग कहा जाता है, एक फाइल सिस्टम की प्रवृत्ति है जो कम्प्यूटर फाइल की सामग्री को गैर-निरंतर रूप से उनकी सामग्री के इन-प्लेस संशोधन की अनुमति देता है। यह विखंडन (कंप्यूटर)#डेटा विखंडन का एक विशेष स्थितिा है। फ़ाइल सिस्टम फ़्रेग्मेंटेशन नकारात्मक रूप से स्टोरेज मीडिया को घूमने में लगने वाले समय को प्रभावित करता है, जिसे थ्रूपुट (डिस्क ड्राइव) में बाधा डालने के लिए जाना जाता है। विखंडन को फाइलों को फिर से व्यवस्थित करके और मुक्त स्थान को सन्निहित क्षेत्रों में वापस लाया जा सकता है, एक प्रक्रिया जिसे defragmentation कहा जाता है।

ठोस राज्य ड्राइव | सॉलिड-स्टेट ड्राइव भौतिक रूप से तलाश नहीं करते हैं, इसलिए उनकी गैर-अनुक्रमिक डेटा पहुंच मूविंग ड्राइव्स की तुलना में सैकड़ों गुना तेज है, जिससे विखंडन एक गैर-मुद्दा बन जाता है। सॉलिड-स्टेट स्टोरेज को डीफ़्रेग्मेंट न करने की सलाह दी जाती है, क्योंकि यह समय से पहले अनावश्यक राइट-इरेज़ ऑपरेशंस के माध्यम से ड्राइव को खराब कर सकता है।

कारण
डिस्क विभाजन पर डिस्क स्वरूपण करते समय, इसमें मात्र कुछ छोटी आंतरिक संरचनाएं होती हैं और अन्यथा खाली स्थान का एक सन्निहित ब्लॉक होता है। इसका अर्थ है कि फ़ाइल सिस्टम नई बनाई गई फ़ाइलों को पार्टीशन पर कहीं भी रखने में सक्षम है। निर्माण के बाद कुछ समय के लिए, फाइलों को लगभग इष्टतम विधि से रखा जा सकता है। जब ऑपरेटिंग सिस्टम और अनुप्रयोग प्रक्रिया सामग्री इंस्टॉल किए जाते हैं या संग्रह (कंप्यूटिंग) को अनपैक किया जाता है, तो अलग-अलग फाइलें क्रमिक रूप से समाप्त हो जाती हैं, इसलिए संबंधित फाइलें एक-दूसरे के करीब स्थित होती हैं।

जैसे ही उपस्थिता फ़ाइलें हटा दी जाती हैं या काट दी जाती हैं, मुक्त स्थान के नए क्षेत्र बन जाते हैं। जब उपस्थिता फाइलों को जोड़ा जाता है, तो लेखन को फिर से शुरू करना अधिकांशतः असंभव होता है, जहां फ़ाइल समाप्त होती थी, क्योंकि दूसरी फाइल पहले से ही वहां आवंटित की जा सकती है; इस प्रकार, एक नया टुकड़ा आवंटित किया जाना है। जैसे-जैसे समय बीतता है, और वही कारक लगातार उपस्थित होते हैं, मुक्त स्थान के साथ-साथ अधिकांशतः संलग्न फाइलें अधिक खंडित होती हैं। मुक्त स्थान के छोटे क्षेत्रों का अर्थ यह भी है कि फ़ाइल सिस्टम अब नई फ़ाइलों को लगातार आवंटित करने में सक्षम नहीं है, और उन्हें टुकड़ों में तोड़ना पड़ता है। यह विशेष रूप से सच है जब फ़ाइल सिस्टम पूर्ण हो जाता है और मुक्त स्थान के बड़े सन्निहित क्षेत्र अनुपलब्ध होते हैं।

उदाहरण
निम्नलिखित उदाहरण एक अन्यथा जटिल विषय का सरलीकरण है। निम्नलिखित परिदृश्य पर विचार करें: एक नई डिस्क में ए, बी, सी, डी और ई नाम की पांच फाइलें हैं, जो उस क्रम में लगातार और क्रमिक रूप से सहेजी गई हैं। प्रत्येक फ़ाइल अंतरिक्ष के 10 ब्लॉकों का उपयोग कर रही है। (यहाँ, ब्लॉक आकार महत्वहीन है।) डिस्क स्थान का शेष एक मुक्त ब्लॉक है। इस प्रकार, फ़ाइल ई के बाद अतिरिक्त फाइलें बनाई और सहेजी जा सकती हैं।

यदि फ़ाइल बी हटा दी जाती है, तो मुक्त स्थान के दस ब्लॉकों का दूसरा क्षेत्र बनाया जाता है, और डिस्क खंडित हो जाती है। खाली जगह को बस वहीं छोड़ दिया जाता है, के रूप में चिह्नित किया जाता है और बाद में उपयोग के लिए उपलब्ध होता है, फिर आवश्यकतानुसार उपयोग किया जाता है। फ़ाइल सिस्टम हटाए जाने के तुरंत बाद डिस्क को डीफ़्रेग्मेंट कर सकता है, परंतु ऐसा करने से अप्रत्याशित समय पर गंभीर प्रदर्शन जुर्माना लगेगा।

अब, F नामक एक नई फ़ाइल, जिसमें स्थान के सात ब्लॉकों की आवश्यकता होती है, को फ़ाइल B को धारण करने वाले नए मुक्त स्थान के पहले सात ब्लॉकों में रखा जा सकता है, और इसके बाद के तीन ब्लॉक उपलब्ध रहेंगे। यदि एक और नई फाइल जिसे जी कहा जाता है, जिसे मात्र तीन ब्लॉक की जरूरत है, जोड़ा जाता है, तो यह एफ के बाद और सी से पहले स्थान पर कब्जा कर सकता है।

यदि बाद में F को विस्तारित करने की आवश्यकता है, चूंकि इसके तुरंत बाद का स्थान भरा हुआ है, फ़ाइल सिस्टम के लिए तीन विकल्प हैं:


 * 1) कहीं और एक नया ब्लॉक जोड़ना और यह इंगित करना कि F का दूसरा विस्तार (फाइल सिस्टम) है
 * 2) फ़ाइलों को विस्तार के रास्ते में कहीं और ले जाना, F को सन्निहित रहने की अनुमति देना
 * 3) फ़ाइल F को स्थानांतरित करना ताकि यह नए, बड़े आकार की एक सन्निहित फ़ाइल हो सके

दूसरा विकल्प संभवतः प्रदर्शन कारणों से अव्यावहारिक है, जैसा कि तीसरा है जब फ़ाइल बहुत बड़ी है। तीसरा विकल्प असंभव है जब नई फ़ाइल को रखने के लिए एक भी सन्निहित मुक्त स्थान पर्याप्त बड़ा न हो। इस प्रकार सामान्य अभ्यास बस कहीं और एक हद बनाने के लिए और पुराने पर नई सीमा को जंजीर बनाने के लिए है।

फ़ाइल एफ के अंत में जोड़ी गई सामग्री उसी सीमा का हिस्सा होगी। परंतु अगर सामग्री इतनी अधिक है कि अंतिम सीमा के बाद कोई जगह नहीं मिलती है, तो एक और हद बनानी होगी, और इसी तरह। आखिरकार फ़ाइल सिस्टम में कई जगहों पर मुक्त खंड होते हैं और कुछ फाइलें कई विस्तारों में फैली हो सकती हैं। उन फ़ाइलों (या सभी फ़ाइलों के लिए) का एक्सेस समय अत्यधिक लंबा हो सकता है।

आवश्यकता
कुछ शुरुआती फाइल सिस्टम फाइलों को खंडित करने में असमर्थ थे। ऐसा ही एक उदाहरण बीबीसी माइक्रो पर प्रयोग किया जाने वाला शाहबलूतिक कंप्यूटर डिस्क फाइलिंग सिस्टम फाइल सिस्टम था। फ़्रैगमेंट फ़ाइल में इसकी असमर्थता के कारण, कभी-कभी त्रुटि संदेश एक्सटेंड नहीं हो सकता दिखाई देता है, और डिस्क के लिए पर्याप्त स्थान होने पर भी उपयोगकर्ता अधिकांशतः फ़ाइल को सहेजने में असमर्थ होता है।

डीएफएस ने एक बहुत ही सरल डिस्क संरचना का उपयोग किया और हार्ड डिस्क पर कंप्यूटर फाइल मात्र उनकी लंबाई और प्रारंभिक क्षेत्र द्वारा स्थित थी। इसका मतलब यह था कि सभी फाइलों को सेक्टरों के एक सतत ब्लॉक के रूप में उपस्थित रहना था और विखंडन संभव नहीं था। ऊपर दी गई तालिका में उदाहरण का उपयोग करते हुए, चरण पाँच में फ़ाइल F को विस्तारित करने का प्रयास ऐसे सिस्टम पर विफल हो गया होगा जिसमें त्रुटि संदेश का विस्तार नहीं किया जा सकता है। डिस्क पर कुल कितनी खाली जगह रह सकती है, इसके बावजूद डेटा फ़ाइल का विस्तार करने के लिए यह उपलब्ध नहीं था।

उस समय त्रुटि से निपटने के मानक आदिम थे और किसी भी स्थितिे में बीबीसी माइक्रो की सीमित स्मृति में निचोड़ा हुआ कार्यक्रम प्रायः ही कभी त्रुटियों को संभालने के प्रयास में जगह बर्बाद करने का जोखिम उठा सकता था। इसके अतिरिक्त, उपयोगकर्ता खुद को कमांड प्रॉम्प्ट पर वापस नहीं भेज सकता संदेश के साथ वापस फेंक दिया जाएगा और सभी डेटा जो अभी तक फ़ाइल में जोड़ा जाना था, खो जाएगा। डिस्क पर पहले से ही खाली स्थान की जाँच करके समस्या को हल नहीं किया जा सकता है। जबकि डिस्क पर खाली स्थान उपस्थित हो सकता है, डिस्क कैटलॉग द्वारा प्रस्तुत संख्याओं का विश्लेषण किए बिना खाली स्थान के सबसे बड़े सन्निहित ब्लॉक का आकार तुरंत स्पष्ट नहीं था और इसलिए उपयोगकर्ता के नोटिस से बच जाएगा। इसके अतिरिक्त, लगभग सभी डीएफएस उपयोगकर्ताओं ने पहले डेटा कैसेट का प्रयोग किया था, जो इस त्रुटि से ग्रस्त नहीं है। फ्लॉपी डिस्क सिस्टम में अपग्रेड करना एक महँगा अपग्रेड था, और यह एक झटका था कि बिना किसी चेतावनी के अपग्रेड करने से डेटा हानि हो सकती है।

प्रकार
फाइल सिस्टम विखंडन कई स्तरों पर हो सकता है:


 * व्यक्तिगत कंप्यूटर फ़ाइलों के भीतर विखंडन
 * मुक्त स्थान विखंडन
 * अलग, परंतु संबंधित फाइलों के बीच संदर्भ की स्थानीयता में कमी
 * फ़ाइल सिस्टम के लिए आरक्षित डेटा संरचनाओं या विशेष फ़ाइलों के भीतर विखंडन

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

मुक्त स्थान विखंडन
नि: शुल्क (अनआवंटित) स्थान विखंडन तब होता है जब फ़ाइल सिस्टम के कई अप्रयुक्त क्षेत्र होते हैं जहाँ नई फ़ाइलें या मेटाडेटा लिखा जा सकता है। अवांछित मुक्त स्थान विखंडन सामान्यतः फाइलों के विलोपन या ट्रंकेशन के कारण होता है, परंतु फाइल सिस्टम जानबूझकर खाली स्थान के टुकड़े (बुलबुले) भी सम्मिलित कर सकते हैं ताकि आस-पास की फाइलों को विस्तारित करने में मदद मिल सके (नीचे विखंडन को रोकना देखें)।

फाइल स्कैटरिंग
फ़ाइल विभाजन, जिसे संबंधित-फ़ाइल विखंडन या एप्लिकेशन-स्तर (फ़ाइल) विखंडन भी कहा जाता है, संबंधित फ़ाइलों के बीच संदर्भ की स्थानीयता (भंडारण माध्यम के भीतर) की कमी को संदर्भित करता है (अधिक विवरण के लिए फ़ाइल अनुक्रम देखें)। पिछले दो प्रकार के विखंडन के विपरीत, फ़ाइल स्कैटरिंग एक अधिक अस्पष्ट अवधारणा है, क्योंकि यह विशिष्ट अनुप्रयोगों के एक्सेस पैटर्न पर बहुत अधिक निर्भर करता है। यह निष्पक्ष रूप से मापना या इसका अनुमान लगाना भी बहुत कठिन बना देता है। हालाँकि, यकीनन, यह विखंडन का सबसे महत्वपूर्ण प्रकार है, जैसा कि अध्ययनों में पाया गया है कि सबसे अधिक बार एक्सेस की जाने वाली फाइलें प्रति सेकंड उपलब्ध डिस्क थ्रूपुट की तुलना में छोटी होती हैं। संबंधित फ़ाइल विखंडन से बचने के लिए और संदर्भ की स्थानीयता में सुधार करने के लिए (इस स्थितिे में फ़ाइल सामीप्य कहा जाता है), अनुप्रयोगों के संचालन के बारे में धारणाएं या सक्रिय अवलोकन किए जाने चाहिए। एक बहुत ही बार-बार की गई धारणा यह है कि छोटी फ़ाइलों को एक साथ एक फ़ाइल निर्देशिका में रखना और उन्हें प्राकृतिक फ़ाइल सिस्टम क्रम में रखना सार्थक है। चूंकि यह अधिकांशतः एक उचित धारणा होती है, यह हमेशा पकड़ में नहीं आती है। उदाहरण के लिए, एक एप्लिकेशन कई अलग-अलग फाइलों को पढ़ सकता है, प्रायः अलग-अलग निर्देशिकाओं में, ठीक उसी क्रम में जिसमें वे लिखे गए थे। इस प्रकार, एक फाइल सिस्टम जो सभी को क्रमिक रूप से लिखने का आदेश देता है, दिए गए एप्लिकेशन के लिए तेजी से काम कर सकता है।

डेटा संरचना विखंडन
फ़ाइल सिस्टम द्वारा उपयोग किए जाने वाले कैटलॉग या इंडेक्स भी समय के साथ खंडित हो सकते हैं, क्योंकि उनमें उपस्थित प्रविष्टियाँ बनाई जाती हैं, बदली जाती हैं या हटा दी जाती हैं। यह एक चिंता का विषय है जब वॉल्यूम में बहुत छोटी फाइलें होती हैं, जब वॉल्यूम कम बड़ी फाइलों से भर जाता है। विशेष फ़ाइल सिस्टम डिज़ाइन के आधार पर, उन फ़ाइलों या क्षेत्रों के भीतर बनाए गए वास्तविक डेटा रिकॉर्ड के किसी भी विखंडन की परवाह किए बिना, उस डेटा वाली फ़ाइलें या क्षेत्र भी खंडित हो सकते हैं (जैसा कि 'नियमित' फ़ाइलों के लिए ऊपर वर्णित है)। कुछ फ़ाइल सिस्टम के लिए (जैसे NTFS और श्रेणीबद्ध फाइल सिस्टम/एचएफएस प्लस ), फ़ाइल सिस्टम उपयोग में होने पर इस डेटा को अनुकूलित करने के लिए आवश्यक Collation/Sorting/Data_compaction आसानी से नहीं हो सकता है।

नकारात्मक परिणाम
फ़ाइल सिस्टम विखंडन उपभोक्ता-ग्रेड हार्ड डिस्क ड्राइव के साथ अधिक समस्याग्रस्त है क्योंकि अनुक्रमिक पहुंच गति और घूर्णी विलंबता (और कुछ हद तक खोज समय) के बीच बढ़ती असमानता के कारण फ़ाइल सिस्टम आमतौर पर रखा जाता है। इस प्रकार, फाइल सिस्टम अनुसंधान और डिजाइन में विखंडन एक महत्वपूर्ण समस्या है। विखंडन की रोकथाम न मात्र फाइल सिस्टम के ऑन-डिस्क प्रारूप पर निर्भर करती है, बल्कि इसके कार्यान्वयन पर भी बहुत अधिक निर्भर करती है। फ़ाइल सिस्टम फ़्रेग्मेंटेशन का सॉलिड-स्टेट ड्राइव पर कम प्रदर्शन प्रभाव पड़ता है, क्योंकि इसमें कोई मैकेनिकल सीक टाइम सम्मलित नहीं है। हालाँकि, फ़ाइल सिस्टम को फ़ाइल के प्रत्येक गैर-सन्निहित भाग के लिए अतिरिक्त मेटाडेटा संग्रहीत करने की आवश्यकता होती है। मेटाडेटा का प्रत्येक भाग स्वयं स्थान घेरता है और इसके लिए संसाधन शक्ति और प्रोसेसर समय की आवश्यकता होती है। यदि अधिकतम विखंडन सीमा तक पहुँच जाता है, तो लेखन अनुरोध विफल हो जाता है।

सरल फाइल सिस्टम बेंचमार्क (कंप्यूटिंग) में, विखंडन कारक को अधिकांशतः छोड़ दिया जाता है, क्योंकि यथार्थवादी उम्र बढ़ने और विखंडन को मॉडल करना मुश्किल होता है। बल्कि, तुलना की सरलता के लिए, फाइल सिस्टम बेंचमार्क अधिकांशतः खाली फाइल सिस्टम पर चलते हैं। इस प्रकार, परिणाम वास्तविक जीवन पहुंच पैटर्न से काफी भिन्न हो सकते हैं।

शमन
विखंडन से लड़ने के लिए कई तकनीकों का विकास किया गया है। उन्हें आमतौर पर दो श्रेणियों में वर्गीकृत किया जा सकता है: प्रीमेप्टिव और रेट्रोएक्टिव। एक्सेस पैटर्न की भविष्यवाणी करने में कठिनाई के कारण ये तकनीक प्रकृति में अधिकांशतः अनुमानी (कंप्यूटर विज्ञान) हैं और अप्रत्याशित वर्कलोड के अनुसार प्रदर्शन को कम कर सकते हैं।

विखंडन को रोकना
प्रीमेप्टिव तकनीक डिस्क पर डेटा लिखे जाने के समय कम से कम विखंडन रखने का प्रयास करती है। सबसे आसान तरीका यह है कि जहाँ संभव हो, उपस्थिता फ़्रैगमेंट में डेटा जोड़ा जाए, बजाय इसके कि नए फ़्रैगमेंट को नए ब्लॉक आवंटित किए जाएँ।

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

यदि संशोधन के अधीन फ़ाइल का अंतिम आकार ज्ञात है, तो संपूर्ण फ़ाइल के लिए संग्रहण को पूर्व-आबंटित किया जा सकता है। उदाहरण के लिए, Microsoft Windows फ़ाइल की अदला - बदली करें (पृष्ठ फ़ाइल) को सामान्य ऑपरेशन के अनुसार गतिशील रूप से आकार दिया जा सकता है, और इसलिए अत्यधिक खंडित हो सकता है। एक समान न्यूनतम और अधिकतम आकार वाली पृष्ठ फ़ाइल निर्दिष्ट करके इसे रोका जा सकता है, पूरी फ़ाइल को प्रभावी रूप से पूर्व-आवंटित करते हुए।

बिटटोरेंट (प्रोटोकॉल) और अन्य पीयर टू पीयर फ़ाइल साझा करना एप्लिकेशन डाउनलोड शुरू करते समय फ़ाइल के लिए आवश्यक पूर्ण स्थान का पूर्व-आवंटन करके विखंडन को सीमित करते हैं। एक अपेक्षाकृत हालिया तकनीक XFS, HFS+ में विलंबित आवंटन है और ZFS; उसी तकनीक को reiser4 और ext4 में एलोकेट-ऑन-फ्लश भी कहा जाता है। जब फाइल सिस्टम को लिखा जा रहा है, फाइल सिस्टम ब्लॉक आरक्षित हैं, परंतु विशिष्ट फाइलों के स्थान अभी तक निर्धारित नहीं किए गए हैं। बाद में, जब फाइल सिस्टम को मेमोरी प्रेशर या ट्रांजेक्शन कमिट के परिणामस्वरूप परिवर्तनों को फ्लश करने के लिए मजबूर किया जाता है, तो एलोकेटर को फाइलों की विशेषताओं का बेहतर ज्ञान होगा। इस दृष्टिकोण के साथ अधिकांश फ़ाइल सिस्टम फ़ाइलों को एक ही निर्देशिका में सन्निहित रूप से फ़्लश करने का प्रयास करते हैं। यह मानते हुए कि एक ही निर्देशिका से कई बार पढ़ना आम है, संदर्भ की स्थानीयता में सुधार हुआ है। Reiser4 डायरेक्टरी हैश टेबल के अनुसार फाइलों के लेआउट का भी आदेश देता है, ताकि जब फाइल को प्राकृतिक फाइल सिस्टम ऑर्डर में एक्सेस किया जा रहा हो (जैसा कि रीडडिर द्वारा तय किया गया हो), तो वे हमेशा क्रमिक रूप से पढ़े जाते हैं।

डीफ़्रेग्मेंटेशन
पूर्वव्यापी तकनीक विखंडन, या विखंडन के नकारात्मक प्रभावों को घटित होने के बाद कम करने का प्रयास करती है। कई फाइल सिस्टम डीफ्रैग्मेंटेशन उपकरण प्रदान करते हैं, जो फाइलों के टुकड़ों को फिर से व्यवस्थित करने का प्रयास करते हैं, और कभी-कभी फ़ाइल निर्देशिका, या निर्देशिका पेड़, या यहां तक ​​कि फ़ाइल अनुक्रमों में छोटी फाइलों को रखकर उनके बिखरने को कम करते हैं (अर्थात उनकी निकटता, या संदर्भ के इलाके में सुधार)। डिस्क पर एक दूसरे के लिए।

एचएफएस प्लस फाइल सिस्टम उन फाइलों को पारदर्शी रूप से डिफ्रैग्मेंट करता है जो आकार में 20 एमबी से कम हैं और फाइल को खोले जाने पर 8 या अधिक टुकड़ों में टूट जाती हैं। अब अप्रचलित कमोडोर अमिगा स्मार्ट फाइल सिस्टम (एसएफएस) ने खुद को डिफ्रैगमेंट किया, जबकि फाइल सिस्टम प्रयोग में था। डीफ़्रेग्मेंटेशन प्रक्रिया लगभग पूरी तरह से स्टेटलेस है (इसके अतिरिक्त जिस स्थान पर यह काम कर रहा है), ताकि इसे रोका जा सके और तुरंत शुरू किया जा सके। डीफ़्रेग्मेंटेशन के दौरान मेटाडेटा और सामान्य डेटा दोनों के लिए डेटा अखंडता सुनिश्चित की जाती है।

यह भी देखें

 * डीफ़्रेग्मेंटेशन सॉफ़्टवेयर की सूची
 * एफएटी फ़ाइल विखंडन
 * डिस्क संपीड़न

इस पेज में लापता आंतरिक लिंक की सूची

 * समय की तलाश
 * हद (फाइल सिस्टम)
 * त्रुटि प्रबंधन
 * संदर्भ का इलाका
 * पदानुक्रमित फाइल सिस्टम
 * readdir
 * एमआईबी
 * FAT फ़ाइल विखंडन