মেমরি ম্যাপযুক্ত ফাইলগুলি পড়ার / লেখার অ্যাক্সেস প্রতিস্থাপন করতে বা একসাথে ভাগ করে নেওয়া সমর্থন করতে ব্যবহৃত হতে পারে। আপনি যখন এগুলি একটি ব্যবস্থার জন্য ব্যবহার করেন, আপনি অন্যটিকেও পাবেন।
কোনও ফাইলের চারপাশে দেখার এবং লেখার পরিবর্তে, আপনি এটিকে মেমরির মধ্যে ম্যাপ করে এবং কেবল বিটগুলি যেখানে আপনি প্রত্যাশা করেন তা অ্যাক্সেস করুন।
এটি খুব সহজ হতে পারে, এবং ভার্চুয়াল মেমরি ইন্টারফেসের উপর নির্ভর করে কর্মক্ষমতা উন্নত করতে পারে। পারফরম্যান্স উন্নতি ঘটতে পারে কারণ অপারেটিং সিস্টেমটি এখন আপনার সমস্ত অন্যান্য প্রোগ্রাম্যাটিক মেমরি অ্যাক্সেসের সাথে এই প্রাক্তন "ফাইল I / O" পরিচালনা করতে পারে এবং পেজিং অ্যালগরিদমগুলি (তত্ত্ব অনুসারে) লাভ করতে পারে এবং এটি ইতিমধ্যে সমর্থন করার জন্য ব্যবহার করছে আপনার বাকি প্রোগ্রামের জন্য ভার্চুয়াল মেমরি । এটি আপনার অন্তর্নিহিত ভার্চুয়াল মেমরি সিস্টেমের মানের উপর নির্ভর করে। উপাখ্যানগুলি আমি শুনেছি যে সোলারিস এবং * বিএসডি ভার্চুয়াল মেমরি সিস্টেমগুলি লিনাক্সের ভিএম সিস্টেমের চেয়ে আরও ভাল পারফরম্যান্সের উন্নতি দেখাতে পারে - তবে এটিকে ব্যাক করার জন্য আমার কাছে কোনও অভিজ্ঞতামূলক তথ্য নেই। ওয়াইএমএমভি
যখন আপনি ম্যাপড মেমোরির মাধ্যমে একই "ফাইল" ব্যবহার করে একাধিক প্রক্রিয়া করার সম্ভাবনা বিবেচনা করেন তখন কনকুরেন্সি ছবিতে আসে। পঠন / লেখার মডেলটিতে, দুটি প্রক্রিয়া যদি ফাইলের একই অঞ্চলে লিখিত হয় তবে আপনি নিশ্চিতভাবে নিশ্চিত হতে পারেন যে প্রক্রিয়ার একটি ডেটা অন্য প্রসেসের ডেটা ওভাররাইট করে ফাইলে উপস্থিত হবে। আপনি একটি বা অন্যটি পেতে চাইবেন - তবে কিছু অদ্ভুতভাবে মিলিত হবে না। আমাকে স্বীকার করতে হবে যে এটি কোনও মানদণ্ড দ্বারা বাধ্যতামূলক আচরণ কিনা তা আমি নিশ্চিত নই, তবে এটি এমন কিছু যা আপনি নির্ভর করতে পারেন। (এটি আসলে অগুড ফলোআপ প্রশ্ন!)
ম্যাপ করা বিশ্বে, বিপরীতে, দুটি লেখার "লেখার" প্রক্রিয়াটি কল্পনা করুন। তারা "মেমোরি স্টোরগুলি" করে এটি করে, যার ফলস্বরূপ O / S ডেটা ডিস্কের বাইরে বেরিয়ে যায় - অবশেষে। তবে এর মধ্যেই, ওভারল্যাপিং রাইটস ঘটবে বলে আশা করা যায়।
এখানে একটি উদাহরণ। বলুন আমার দুটি প্রসেস আছে 1024 অফসেটে 8 বাইট লেখা। যদি তারা ফাইল I / O ব্যবহার করে, তবে আপনি কল্পনা করতে পারেন, O / S এর গভীরে, সেখানে 1s পূর্ণ বাফার এবং 2s পূর্ণ একটি বাফার রয়েছে, উভয়ই ডিস্কে একই জায়গায় চলে গেছে। তাদের একজন প্রথমে সেখানে যাচ্ছেন, এবং অন্যটি দ্বিতীয়টি। এই ক্ষেত্রে, দ্বিতীয়টি জিতেছে। তবে , আমি যদি মেমরি-ম্যাপযুক্ত ফাইল পদ্ধতির ব্যবহার করছি, প্রক্রিয়া 1 4 বাইটের একটি মেমরি স্টোর যাবে, তার পরে 4 বাইটের আরেকটি মেমরি স্টোর থাকবে (আসুন ধরে নেওয়া যাক সর্বাধিক মেমরি স্টোরের আকার নয়)। প্রক্রিয়া 2 একই জিনিস করা হবে। প্রক্রিয়াগুলি কখন চলবে তার উপর ভিত্তি করে, আপনি নিম্নলিখিতগুলির কোনওটি দেখতে আশা করতে পারেন:
11111111
22222222
11112222
22221111
এর সমাধান হ'ল সুস্পষ্ট পারস্পরিক বর্জন use যা কোনও ইভেন্টে সম্ভবত একটি ভাল ধারণা use আপনি যেভাবেই পড়ুন / লেখার ফাইলটিতে "সঠিক জিনিস" করতে O / S এর উপর নির্ভরশীল ছিলেন।
শ্রেণিবদ্ধ পারস্পরিক বর্জন আদিম হ'ল মিটেক্স। মেমোরি ম্যাপযুক্ত ফাইলগুলির জন্য, আমি আপনাকে মেমরি-ম্যাপযুক্ত মুটেেক্সটি দেখার পরামর্শ দিচ্ছি, (যেমন) pthread_mutex_init () ব্যবহার করে উপলভ্য।
একটি গোচা দিয়ে সম্পাদনা করুন: আপনি ম্যাপযুক্ত ফাইলগুলি ব্যবহার করার সময়, ফাইলটিতেই ডেটাতে পয়েন্টার এম্বেড করার প্রলোভন থাকে ফাইলটিতে (ম্যাপ করা ফাইলটিতে লিঙ্কযুক্ত তালিকা ভাবেন)। আপনি এটি করতে চান না কারণ ফাইলটি বিভিন্ন সময়ে বিভিন্ন পরম ঠিকানায় বা বিভিন্ন প্রক্রিয়াতে ম্যাপ করা যেতে পারে। পরিবর্তে, ম্যাপ করা ফাইলের মধ্যে অফসেট ব্যবহার করুন।