आरक्षित मेमोरी मेमोरी को एक ब्लॉक डिवाइस के रूप में निर्धारित किया गया है (दिए गए भौतिक पते के साथ)


11

RAM डिस्क के बारे में बहुत सारे प्रश्न हैं और मुझे ramfs और tmpfs के बारे में पता है जो राम को ब्लॉक डिवाइस के रूप में उपयोग करने की अनुमति देते हैं। हालांकि मेरी रुचि एक ब्लॉक डिवाइस के रूप में एक निश्चित मेमोरी एड्रेस रेंज का उपयोग करने में है।

यह मेरे सिस्टम में उपलब्ध गैर-वाष्पशील रैम का उपयोग करने की आवश्यकता से उत्पन्न होता है। मेरे पास 6GB रैम उपलब्ध है, और 8GB की गैर-वाष्पशील रैम मौजूद है। / Proc / iomem का आउटपुट मुझे निम्नलिखित देता है

100000000-17fffffff: सिस्टम रैम

180000000-37ffffff: आरक्षित

यहां 6GB से 14GB तक का क्षेत्र गैर-वाष्पशील रैम क्षेत्र से मेल खाता है जिसे E820 BIOS मेमोरी मैप द्वारा आरक्षित के रूप में चिह्नित किया गया है। मेरा मुख्य इरादा इस एनवीआरएएम को लिनक्स में एक ब्लॉक डिवाइस के रूप में उपयोग करना है। यह एनवीआरएएम सिस्टम के परीक्षण के लिए उपयोगी है। क्या पहले से कोई लिनक्स कमांड मौजूद है जो मुझे इस क्षेत्र को एक ब्लॉक डिवाइस के रूप में उपयोग करने की अनुमति देगा, या क्या मुझे उसी की सुविधा के लिए अपना स्वयं का कर्नेल डिवाइस ड्राइवर लिखना होगा?


2
बस जिज्ञासु, आप ऐसा क्यों करना चाहेंगे?
mtak 13

यह लिनक्स पर गैर-वाष्पशील रैम के लिए डिज़ाइन किए गए फाइल सिस्टम का परीक्षण करने का एक आसान तरीका प्रदान करता है।
१५:१४

जवाबों:


2

मैं डिवाइस ड्राइवरों का विशेषज्ञ नहीं हूं, हालांकि यहां आपके आरएंडडी के लिए कुछ संकेत हैं:

  1. यदि मेमोरी को "आरक्षित" के रूप में चिह्नित किया गया है, तो ओएस इसे छू नहीं सकता है; आपको या तो BIOS को ओएस के लिए उपलब्ध के रूप में चिह्नित करने का एक तरीका खोजना होगा, या इसे नियंत्रित करने के लिए प्रत्यक्ष निम्न-स्तरीय ioctl s का उपयोग करना होगा।
  2. यदि लिनक्स मेमोरी देख सकता है , तो आपके पास लिनक्स को रैम के किसी अन्य ब्लॉक के रूप में उपयोग करने से रोकने का आसान तरीका नहीं होगा; इस तरह की रैम को "खराब" के रूप में चिह्नित करने का प्रयास किया जा सकता है और फिर कर्नेल को संशोधित करने के लिए अभी भी इसका एक विशेष उपयोग किया जा सकता है (कृपया इस बारे में कर्नेल प्रलेखन की जांच करें, यह पिछली बार जब मैंने इसे हैक किया था तब से यह बहुत बदल गया है और यह विकसित हो रहा है। बड़ी गति से)
  3. उपर्युक्त प्रारंभिक (और गैर-निश्चित और न ही थकाऊ) व्यवहार्यता अध्ययन के रूप में ऊपर विचार करते हुए, मैं कहूंगा कि आपका रैमडिस्क ब्लॉकदेविस ड्राइवर लिखना आपके मामले में सबसे समझदार विकल्प है, और शायद आपको इसे लिनक्स कर्नेल और / या टीम के साथ वापस करना चाहिए लोग पहले से ही यह कोशिश कर रहे हैं (शायद इस सवाल का एक बेहतर स्थान लिनक्स कर्नेल मेलिंग सूची है , अगर आपने अभी तक वहां पोस्ट नहीं किया है)

कुछ अन्य प्रासंगिक स्रोत:


1

tmpfs/ की शुरूआत से पहले छवियों को लोड करने के लिए इस्तेमाल किया initramfsगया था , एक पूर्व-निर्धारित निश्चित आकार के ब्लॉक डिवाइस, मुझे लगता है कि कम से कम, पहले के कार्यान्वयन पर।ramdiskinitrd

ब्लॉक चालक के पास केवल मेमोरी पते के लिए पैरामीटर नहीं हैं, केवल आकार है, लेकिन कर्नेल एक पूर्व-निर्धारित पते (in config) पर initrd चित्र लोड करने के लिए उपयोग किया जाता है, इसलिए मुख्य / init कर्नेल कोड में एक झलक मदद कर सकती है (मैं कर सकता था) आश्चर्य है कि अगर रैमडिस्क अब initrd के लिए समर्थित नहीं है, लेकिन चूंकि initramfs आसपास है, अब बहुत साल हो गए हैं, कभी भी ramdisk का उपयोग नहीं किया गया है )।

ड्राइवर स्रोत ड्राइवर / ब्लॉक / rd.c था , अगर मैं सही ढंग से देखता हूं कि अब ड्राइवर / ब्लॉक / brd.c है

और, रमदिस्क की तलाश में मुझे एक कार्यान्वयन मिला जो दिलचस्प लग रहा है:

RAM पर डिस्क - ब्लॉक ड्राइवर्स के साथ खेलना

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