2010-01-25 8 views
15

क्या विंडोज़ लिनक्स के रीडहेड सिस्कल के बराबर है?विंडोज़ लिनक्स के रीडहेड सिस्कल के समतुल्य विंडोज़?

संपादित करें:

मैं, यदि संभव हो तो एक पूर्ण समारोह हस्ताक्षर चाहते हैं दिखा बराबर ऑफसेट/गिनती मानकों (या कम/ऊपरी)।

उदाहरण के लिए: लिनक्स समारोह हस्ताक्षर है:

ssize_t readahead(int fd, off64_t *offset, size_t count); 

और यह का एक उदाहरण फायदा नहीं है

readahead(file, 100, 500); 

कहाँ "फाइल" पहले mmap की तरह एक समारोह द्वारा निर्धारित एक फ़ाइल की जानकारी देता है है। इस कॉल सूचकांक 100

संपादित 2 से कम 500 बाइट्स पढ़ रही है: कृपया इस पढ़ यदि आप अनिश्चित क्या Readahead करता हैं: http://linux.die.net/man/2/readahead

उत्तर

11

हां। यह FileSystemControl FSCTL_FILE_PREFETCH है।

इसका उपयोग विंडोज विस्टा और उपरोक्त दोनों में प्रीफेटिंग के लिए किया जाता है जब कोई एप्लिकेशन प्रारंभ होता है और बूट समय पर होता है।

यह सुपरफ़ेच तकनीक द्वारा भी उपयोग किया जाता है जो आमतौर पर उन दिनों के दौरान एप्लिकेशन लोड करने के लिए हेरिस्टिक का उपयोग करता है, जिनका आप आमतौर पर उनका उपयोग करते हैं।

FSCTL_FILE_PREFETCH ही MSDN पर दर्ज नहीं किया है, लेकिन यह एप्लिकेशन स्टार्टअप पर किए गए DeviceIoControl कॉल का परीक्षण करके पैरामीटर प्रारूप यह पता लगाने के लिए आसान है: बस डिबगर पहले से ही c:\Windows\Prefetch निर्देशिका में .pf फ़ाइल है कि में एक आवेदन शुरू और DeviceIoControl पर ब्रेक करें (या यदि आप कर्नेल डीबगर का उपयोग कर रहे हैं, तो NTFS ड्राइवर को अपना पहला FSCTL_FILE_PREFETCH प्राप्त होने पर तोड़ दें)। पास किए गए बफर की जांच करें और इसकी तुलना .pf फ़ाइल और वास्तव में बाद में उपयोग की जाने वाली सीमा से करें। मैंने जिज्ञासा से एक बार ऐसा किया लेकिन विवरण रिकॉर्ड नहीं किया। IRP स्तर IRP_MJ_FILESYSTEM_CONTROL

  • DeviceIoControl, जो आह्वान करने के लिए FileSystemControl IRPs
  • संरचना प्रयोग किया जाता है पर

    • FileSystemControl:

      मामले में आप DeviceIoControl और IRP_MJ_FILESYSTEM_CONTROL के साथ अपरिचित हैं, यहाँ कुछ लिंक को देखने के लिए कर रहे हैं IO Control Codes

  • +0

    यह एक अच्छा जवाब है, लेकिन मैं थोड़ा उलझन में हूं। लिनक्स सिस्कल में हस्ताक्षर है: readahead (int fd, off64_t * ऑफसेट, size_t गिनती); उदाहरण: रीडाहेड (फ़ाइल, 100, 500); जो मुझे लगता है कि फाइल डिस्क्रिप्टर "फ़ाइल" के साथ फ़ाइल के ऑफ़सेट 100 पर 500 बाइट्स पढ़ेगा। विंडोज में कुछ समतुल्य क्या होगा? – joemoe

    +7

    उन लोगों के लिए एक लिंक मिला है जहां उन्हें दस्तावेज किया गया है, या उनका प्रदर्शन किस प्रकार किया जाता है? अभी मुझे नहीं पता कि इस जवाब की व्याख्या कैसे करें। –

    +1

    अभी भी यकीन नहीं है कि मैं समझता हूं। जो मैं खोज रहा हूं वह एक फ़ंक्शन हस्ताक्षर है और इसका उदाहरण इसका उपयोग करने का एक उदाहरण है। उदाहरण के लिए मेरा संपादित प्रश्न देखें। – joemoe

    0

    मुझे यकीन नहीं है कि मैं कोर को समझता हूं ectly, आपने जो कहा है 'जहां "फ़ाइल" एक फाइल डिस्क्रिप्टर है जिसे पहले एमएमएपी जैसे फ़ंक्शन द्वारा सेट किया गया था। यह कॉल इंडेक्स 100 पर 500 बाइट्स पढ़ रही है। 'यह ऑफसेट की तलाश करने और 500 बाइट्स पढ़ने की तरह संदिग्ध लगता है ... लेकिन आप इसे आगे पूर्व-प्राप्त करना चाहते हैं ...

    सी कोड में, यह होगा कुछ इस तरह दिखाई:

     
    fseek(fp, 100, SEEK_CUR); 
    fread(&data, 500, 1, fp); 
    

    लेकिन यह प्रीफ़ेचिंग, मुझे लगता है, आप waithandles का उपयोग कर की घटनाओं के कुछ प्रकार के ऊपर हुक करना चाहेंगे, और जब घटना उठाया जाता है, डेटा एक बफर में कहीं संग्रहीत हो जाता है ...

    ईमानदार होने के लिए, मैं ऐसी चीज में नहीं आया हूं जो डेटा को पूर्व-प्राप्त कर रहा है ... लेकिन रे के जवाब ने मुझे आश्चर्यचकित कर दिया, लेकिन फिर यह केवल Vista के लिए है, अगर आप संगतता बनाए रखना चाहते हैं ... है कि कुछ को ध्यान में रखना वहाँ एक blog इस, एक पुस्तकालय डेल्फी में लिखा चर्चा कर रहा था, स्रोत कोड here है, कोड here ब्राउज़ कर है ... लेकिन नीचे दिए गए लिंक मदद की हो सकती है ...

    ठीक है,, ठीक है, यह हो सकता है कि आप जो चाहते हैं वह हो लेकिन यह आपको दिशा में इंगित करने में मदद कर सकता है ... क्षमा करें अगर आप इसके लिए क्या खोज रहे हैं ...

    उम्मीद है कि यह मदद करता है, सर्वश्रेष्ठ संबंध, टॉम।

    +0

    नहीं, यह वह नहीं है जिसे मैं ढूंढ रहा हूं। मैं एक ऐसे फ़ंक्शन की तलाश में हूं जो लिनक्स में "रीडहेड" के बराबर है। – joemoe

    0

    विंडोज 8 के अनुसार, madvise(MADV_WILLNEED) के बराबर कम या अधिक प्रत्यक्ष मौजूद है, जो प्रभावी रूप से एक ही चीज़ है (विंडोज़ में एक एकीकृत वीएम/कैश सिस्टम है)।

    मान लें कि आपके पास फ़ाइल को मेमोरी-मैप किया गया है, तो आप इसे PrefetchVirtualMemory का उपयोग करके प्रीफ़ेच कर सकते हैं।

    यह अभी भी आपकी इच्छा से थोड़ा अधिक जटिल है, लेकिन DeviceIoControl के रूप में लगभग कठोर नहीं है। यह भी ध्यान रखें कि आप आसानी से कई स्वतंत्र, असंतुलित श्रेणियों को पूर्व निर्धारित कर सकते हैं।