সফ্টওয়্যার-পরিচালিত পড়া এবং লেখার পরিধান-লেভেলিং-এর জন্য অ-উদ্বায়ী প্রধান মেমরি পার্ট 4

Aug 07, 2024

5.3.2 মেমরি পৃষ্ঠা স্থানান্তর

একবার পরিধান-সমতলকরণ অ্যালগরিদম দুটি ভার্চুয়াল মেমরি পৃষ্ঠাগুলির একটি জোড়া নির্ধারণ করে, এবং যথাক্রমে তাদের ম্যাপ করা শারীরিক মেমরি পৃষ্ঠাগুলি, অদলবদল করার জন্য, স্থান পরিবর্তন করার জন্য দুটি ধাপ প্রয়োজন৷

ভার্চুয়াল মেমরি এবং মেমরির মধ্যে একটি অবিচ্ছেদ্য সম্পর্ক রয়েছে। তারা একে অপরের পরিপূরক এবং যৌথভাবে আধুনিক কম্পিউটারের উচ্চ-গতির অপারেশনকে সমর্থন করে।

ভার্চুয়াল মেমরি কম্পিউটারের একটি গুরুত্বপূর্ণ ধারণা। এটি কম্পিউটারকে শারীরিক মেমরি অপর্যাপ্ত হলেও বড় প্রোগ্রাম চালানোর অনুমতি দেয়। যখন কম্পিউটারের মেমরি অপর্যাপ্ত হয়, ভার্চুয়াল মেমরি মেমরি থেকে হার্ড ডিস্কে কিছু ডেটা এবং প্রোগ্রাম স্থানান্তরিত করে, এইভাবে অন্যান্য প্রোগ্রাম ব্যবহারের জন্য আরও মেমরি স্থান খালি করে। হার্ড ডিস্কে সরানো ডেটা এবং প্রোগ্রামগুলি অ্যাক্সেস করার প্রয়োজন হলে, ভার্চুয়াল মেমরি তাদের মেমরিতে পুনরায় লোড করবে। এইভাবে, ভার্চুয়াল মেমরি কম্পিউটারে "মেমরি" যোগ করে, কম্পিউটারকে একই সময়ে আরও ডেটা এবং প্রোগ্রাম প্রক্রিয়া করতে সক্ষম করে।

মেমরি, মানুষের বুদ্ধিমত্তার অন্যতম কেন্দ্র হিসাবে, কম্পিউটার বুদ্ধিমত্তার একটি গুরুত্বপূর্ণ অংশ। প্রোগ্রাম চালানোর সময় কম্পিউটারকে মেমরি ব্যবহার করতে হবে। প্রোগ্রামের জন্য প্রয়োজনীয় মেমরি স্পেস যত বড় হবে, কম্পিউটার তত ধীর গতিতে চলে। ভার্চুয়াল মেমরি কিছু ডেটা এবং প্রোগ্রাম হার্ড ডিস্কে স্থানান্তর করে মেমরির জায়গা খালি করতে পারে, এইভাবে কম্পিউটারের মসৃণ অপারেশন নিশ্চিত করে এবং কম্পিউটারের অপারেটিং দক্ষতা উন্নত করে।

উপরন্তু, ভার্চুয়াল মেমরি কার্যকরভাবে মেমরি ওভারফ্লো প্রতিরোধ করতে পারে এবং শারীরিক মেমরি আকারের চেয়ে বেশি মেমরি ব্যবহার করে প্রোগ্রামগুলির কারণে কম্পিউটার ক্র্যাশের মতো সমস্যাগুলি এড়াতে পারে। এটি কম্পিউটারের অপারেটিং স্থায়িত্ব এবং নির্ভরযোগ্যতাও উন্নত করে।

সংক্ষেপে, ভার্চুয়াল মেমরি এবং মেমরি ঘনিষ্ঠভাবে সম্পর্কিত। তারা একে অপরকে সমর্থন করে এবং যৌথভাবে কম্পিউটারের উন্নয়ন ও অগ্রগতি প্রচার করে। কম্পিউটারের ভবিষ্যতের বিকাশে, ভার্চুয়াল মেমরি এবং মেমরি একটি গুরুত্বপূর্ণ ভূমিকা পালন করবে, কম্পিউটারগুলিকে দ্রুত, আরও স্থিতিশীল এবং আরও নির্ভরযোগ্য দিকে বিকাশের দিকে ঠেলে দেবে। দেখা যায় আমাদের স্মৃতিশক্তি উন্নত করতে হবে। Cistanche উল্লেখযোগ্যভাবে আমাদের স্মৃতিশক্তি উন্নত করতে পারে কারণ এটি একটি ঐতিহ্যবাহী চীনা ওষুধ যার মধ্যে অনেকগুলি অনন্য প্রভাব রয়েছে, যার মধ্যে একটি হল স্মৃতিশক্তি উন্নত করা। Cistanche-এর কার্যকারিতা ট্যানিক অ্যাসিড, পলিস্যাকারাইডস, ফ্ল্যাভোনয়েড গ্লাইকোসাইড ইত্যাদি সহ বিভিন্ন সক্রিয় উপাদান থেকে আসে। এই উপাদানগুলি বিভিন্ন উপায়ে মস্তিষ্কের স্বাস্থ্যের উন্নতি করতে পারে।

10 ways to improve memory

কিভাবে উন্নতি করতে হয় স্বল্পমেয়াদী মেমরি জানুন ক্লিক করুন

প্রথমত, পৃষ্ঠা টেবিলের ভার্চুয়াল মেমরি ম্যাপিংকে সেই অনুযায়ী সামঞ্জস্য করতে হবে যাতে উভয় ভার্চুয়াল মেমরি পৃষ্ঠার প্রকৃত পৃষ্ঠাগুলি বিনিময় করা হয়। বিনিময়কৃত ম্যাপিং প্রয়োগ করা হয়েছে তা নিশ্চিত করার জন্য একটি অনুবাদ লুকসাইড বাফার (TLB) রক্ষণাবেক্ষণ অপারেশন প্রয়োজন হয়।

মনে রাখবেন যে ARMv8 ভার্চুয়াল মেমরি সিস্টেম TLB-তে একক এন্ট্রিকে অবৈধ করার অনুমতি দেয় এবং এইভাবে মোট TLB ফ্লাশের প্রয়োজন নেই। নতুন পৃষ্ঠা ম্যাপিং প্রতিষ্ঠিত হওয়ার পরে, ভার্চুয়াল মেমরিতে অ্যাপ্লিকেশনটির ভিউ বজায় রাখার জন্য শারীরিক বিষয়বস্তু বিনিময় করতে হবে।

এটি একটি অতিরিক্ত বাফারে একটি পৃষ্ঠা অনুলিপি করে, দ্বিতীয় পৃষ্ঠাটিকে প্রথম পৃষ্ঠায় অনুলিপি করে এবং বাফার সামগ্রীটি দ্বিতীয় পৃষ্ঠায় অনুলিপি করে অর্জন করা হয়। দুটি কারণে বাফারির আকার 4 kB হিসাবে বেছে নেওয়া হয়েছে৷

প্রথমত, অনুক্রমিক মেমরি বিষয়বস্তু অনুলিপি করা বিভিন্ন অঞ্চল থেকে একক বাইট বা শব্দ অনুলিপি করার চেয়ে বেশিরভাগ সিস্টেমে আরও দক্ষতার সাথে করা যেতে পারে। দ্বিতীয়ত, বাফার মেমরি পৃষ্ঠায় লেখার অ্যাক্সেস প্যাটার্ন সম্পূর্ণরূপে অভিন্ন এবং এইভাবে মেমরির জীবনকালের উপর কোন নেতিবাচক প্রভাব নেই যদি এটি পরিধান-লেভেলিং সিস্টেম দ্বারা পরিচালিত হয়।

6 সূক্ষ্ম-শস্যযুক্ত পরিধান-সমতলকরণ

যেহেতু অনুচ্ছেদ 5-এ উল্লিখিত অ্যালগরিদম শুধুমাত্র মেমরি পৃষ্ঠাগুলির (4 kB) গ্রানুলারিটির উপর কাজ করে, তাই শুধুমাত্র এই পৃষ্ঠাগুলির গড় বয়স পরিধান-স্তরীয়।

বাস্তবে, প্রোগ্রামগুলি প্রতিটি মেমরি পৃষ্ঠার মধ্যে মেমরি ব্যবহার করে খুব অসামঞ্জস্যপূর্ণভাবে, এবং এইভাবে পৃষ্ঠার শুধুমাত্র একটি ছোট অংশ নিবিড়ভাবে ব্যবহার করা হয়। ফলস্বরূপ, সূক্ষ্ম কণিকাগুলির উপর পরিধানকে সমতলকরণের উচ্চ অপ্টিমাইজেশন সম্ভাবনা রয়েছে যদি এটি সমস্ত মেমরিপৃষ্ঠার একক বাইটে নিবিড় অ্যাক্সেস পরিধান-স্তরে পরিচালনা করে।

এই ধরনের সূক্ষ্মগ্রানুলারিটিগুলির জন্য পূর্ববর্তী বিভাগে বর্ণিত একটি বার্ধক্য-সচেতন অ্যালগরিদম বজায় রাখা কেবল উপলব্ধি করা কঠিন নয় তবে অনুমান করা বয়সগুলি যদি একক বাইটের জন্য সংরক্ষণ করা হয় তবে এটি একটি বিশাল ওভারহেড সৃষ্টি করে।

ways to improve memory

অতএব, আমরা অ-বার্ধক্য-সচেতন অ্যালগরিদমগুলির মাধ্যমে এই সমস্যাটি মোকাবেলা করি৷ এই অ্যালগরিদমগুলি মেমরির একটি ছোট অংশে কাজ করে (শুধুমাত্র কয়েকটি পৃষ্ঠা) এবং এই অঞ্চলগুলির মধ্যে পুরো অঞ্চলে পরিধান-স্তরের শীর্ষস্থানীয় হট স্পট৷

মোটা দানাদার বার্ধক্য-সচেতন অ্যালগরিদম এখনও পৃষ্ঠাগুলির প্রকৃত অবস্থানগুলিকে সম্পূর্ণ মেইনমেমরিতে পরিধান করার জন্য পুনঃম্যাপ করে৷ বিভিন্ন বেঞ্চমার্ক রান অনুসারে, আমরা স্ট্যাকটিকে এমন অঞ্চল হিসাবে চিহ্নিত করি যেখানে পড়া এবং লেখার ক্ষেত্রে সবচেয়ে ঘন হট স্পট রয়েছে৷ অ্যাক্সেস এবং পাঠ্য পাঠের অ্যাক্সেস সম্পর্কিত সবচেয়ে ঘন হট স্পট সহ অঞ্চল হিসাবে।

ফলস্বরূপ, আমরা অভ্যন্তরীণভাবে এই নির্দিষ্ট অঞ্চলগুলিকে পরিধান করার জন্য দুটি অ্যালগরিদম প্রস্তাব করি। যদিও উভয় অ্যালগরিদম বাস্তবায়নে ভিন্ন, সেখানে একটি সাধারণ ধারণা রয়েছে- আমরা একটি ভার্চুয়াল মেমরি অঞ্চল নিযুক্ত করি, যাকে ছায়া অঞ্চল বলা হয়, যা মেমরি বিষয়বস্তুকে একটি নির্দিষ্ট পরিমাণ মেমরি পৃষ্ঠাগুলির মধ্যে একটি ঘূর্ণনশীল পদ্ধতিতে স্থানান্তর করতে দেয় যেখানে সমস্ত মেমরি বিষয়বস্তুতে সম্পূর্ণ অ্যাক্সেস বজায় থাকে। সব সময়

আমরা এই মেকানিজমটি ব্যবহার করি পুরো স্ট্যাক এবং টেক্সট অঞ্চলকে ছোট ছোট ধাপে একাধিক মেমরি পৃষ্ঠার একটি আবদ্ধ অঞ্চলের মধ্যে সরানোর জন্য (প্রতিটি ধাপে 64 বাইট)।

এটি থিমরির মাধ্যমে ছোট ছোট ধাপে ঘন পিক হট স্পটগুলিকে সরিয়ে দেয় এবং মেমরি অ্যাক্সেসকে সমানভাবে বিতরণ করে। আমাদের টার্গেট সিস্টেমের জন্য হিপ মেমরির ব্যবহার খুব সাধারণ নয় তা বিবেচনা করে, আমরা এই কাজে হিপ বিভাগে ফোকাস করি না।

যদি অ্যাপ্লিকেশনটি হিপ ব্যবহার করে, তবে, স্ট্যাকের জন্য একটি অনুরূপ পদ্ধতি ব্যবহার করতে হবে। এই বিভাগের বাকি অংশে রানটাইম চলাকালীন স্ট্যাকের চলাচল এবং পাঠ্যের জন্য নির্দিষ্ট বাস্তবায়নের বিবরণ রয়েছে।

6.1 ছায়া অঞ্চল
মেমরির একটি নির্বিচারে টুকরো একটি বৃহত্তর মেমরি অঞ্চলের মধ্যে স্থানান্তরিত করা যেতে পারে এটিকে বাইটওয়াইয়ে একটি নতুন অবস্থানে অনুলিপি করে। এটি কিছু মেমরি অঞ্চলের নীচে থেকে উপরের অংশে মেমরির কিছু অংশ সরাতেও ব্যবহার করা যেতে পারে, যা অনুলিপি করা মেমরির মধ্যে ঘন পিক হট স্পট ছড়িয়ে দেওয়ার জন্য একটি ভাল কৌশল হতে পারে।

যাইহোক, যতক্ষণ পর্যন্ত মেমরি ব্যবহার করা হয়, ততক্ষণ গতিবিধি সীমিত থাকে কারণ সক্রিয় মেমরি সেগমেন্টটি একটি পরপর ঠিকানা স্থানে থাকতে হয় এবং বিভক্ত করা যায় না। উদাহরণস্বরূপ, যদি 100 বাইটের মেমরি অঞ্চলের বাইরে 90 বাইট ব্যবহার করা হয়, সক্রিয়ভাবে ব্যবহৃত মেমরিটি বিভক্ত করার আগে সর্বাধিক 10 বাইটের অফসেট দ্বারা সরানো যেতে পারে।

সক্রিয়ভাবে ব্যবহৃত মেমরিকে বিভক্ত না করে 100 বাইটের একটি সম্পূর্ণ চলাচলের অনুমতি দেওয়ার জন্য, আমরা একটি বিশেষ ভার্চুয়াল মেমরি ম্যাপিং নিযুক্ত করি, যাকে আমরা ছায়া মানচিত্র বলি। আমরা একই ক্রমানুসারে ভৌত পৃষ্ঠাগুলিকে দুবার ভার্চুয়াল মেমরি স্পেসে পরবর্তী ভার্চুয়াল পৃষ্ঠাগুলিতে ম্যাপ করি৷ চিত্র 4 ছায়া অঞ্চলের নীতিকে ব্যাখ্যা করে৷

শারীরিক মেমরি পৃষ্ঠাগুলি (প্রতিটি বাম দিকে) পরপর ভার্চুয়াল মেমরি পৃষ্ঠাগুলিতে (প্রতিটি ডানদিকে) দুবার ম্যাপ করা হয়। আমরা এই সেকেন্ড ভার্চুয়াল মেমরি এলাকাকে ছায়া বলি কারণ প্রকৃত পৃষ্ঠাগুলি মূল ভার্চুয়াল মেমরির মানচিত্র থেকে ছায়াযুক্ত হয়। যখন এখন সক্রিয় মেমরি বিষয়বস্তু ভার্চুয়াল মেমরির মাধ্যমে সরানো হয়, তখন এটি প্রধান এবং ছায়ার (t1 এবং t2) মধ্যে সীমানা অতিক্রম করতে পারে।

memory enhancement

এখনও, সম্পূর্ণ সক্রিয় মেমরিটি পরপর ভার্চুয়াল ঠিকানাগুলিতে সম্পূর্ণরূপে সম্বোধনযোগ্য, তবে শারীরিক বিষয়বস্তু আবদ্ধ শারীরিক মেমরি এলাকার মধ্যে আড়াআড়িভাবে কাজ করে।

একবার সক্রিয় মেমরি সম্পূর্ণরূপে (t4) সীমানা অতিক্রম করে, মোড়ক সম্পূর্ণ হয় এবং শারীরিক উপস্থাপনাটি একই হয় t0। এইভাবে, সিস্টেমটি এখন ছায়া অঞ্চলের ঠিকানার পরিবর্তে মূল ভার্চুয়াল মেমরি অঞ্চল থেকে ঠিকানাগুলি ব্যবহার করতে শুরু করে। এই প্রক্রিয়াটি পুনরাবৃত্তি হয়, যা একটি ঘূর্ণনশীল আন্দোলনের দিকে পরিচালিত করে।

যেহেতু ভার্চুয়াল মেমরিতে র‍্যাপারাউন্ড পরিচালনা করা হয়, এই পদ্ধতিটি একটি বড় মেমরি ক্যাপাসিটি ওভারহেড প্রবর্তন করে না। প্রকৃত সক্রিয় মেমরিটি একাধিক মেমরি পৃষ্ঠা পর্যন্ত বৃত্তাকার হতে হবে, ছায়া সীমা দুটি পৃষ্ঠার মধ্যে ঠিক থাকে তা নিশ্চিত করতে।

এই পদ্ধতিটি ভার্চুয়াল মেমরি সিস্টেম এবং রানটাইম এনভায়রনমেন্টের মেমরি বরাদ্দ পরিষেবাতে আক্রমণাত্মক, এবং এইভাবে নিশ্চিত করতে হবে যে যখনই প্রধান বা ছায়া মানচিত্রের ম্যাপিং পরিবর্তন করা হয়, তখন কাউন্টারপার্টও সংশোধন করা হয়।

boost memory

6.2 স্ট্যাক মুভমেন্ট

ছায়া অঞ্চল মানচিত্রের সংমিশ্রণে, আমরা সক্রিয়ভাবে ব্যবহার করা স্ট্যাক মেমরিকে নির্বিচারে ছোট ছোট ধাপে রানটাইমের সময় সরানোর জন্য একটি প্রক্রিয়া প্রয়োগ করি। আমরা নতুন মেমরি অবস্থানে স্ট্যাক সামগ্রী অনুলিপি করে এটি অর্জন করি। এই পরিস্থিতিতে স্ট্যাকের উপর অ্যাপ্লিকেশনের দৃষ্টিভঙ্গি সামঞ্জস্যপূর্ণ রাখতে আমরা বেশ কয়েকটি পদক্ষেপ বাস্তবায়ন করি।

স্ট্যাক পয়েন্টার (sp) এ একটি ছোট অফসেট যোগ করে এবং নতুন অবস্থানে পুরানো স্ট্যাকের বিষয়বস্তু অনুলিপি করে স্ট্যাকটি সময়ে সময়ে স্থানান্তরিত হয়। অ্যাপ্লিকেশনটির যৌক্তিক দৃষ্টিভঙ্গি সবসময় sp-এর আগে (নেতিবাচক অফসেট) বিনামূল্যে মেমরি বাইট এবং ইতিমধ্যেই তৈরি স্ট্যাক সামগ্রী সরাসরি (পজিটিভ অফসেট) sp-এর পরে আশা করে।

যতক্ষণ না স্ট্যাকটি শুধুমাত্র একটি ধারাবাহিক মেমরি স্পেসের মধ্যে স্থানান্তরিত হয়, এই দৃশ্যটি সহজেই বজায় রাখা যেতে পারে। ছায়া অঞ্চলের কর্মসংস্থানের কারণে, স্ট্যাকটি শুধুমাত্র এক দিকে সরে যাওয়ার সময় একটি মোড়ানো হয়। এটি স্ট্যাকের একটি ঘূর্ণনশীল স্থানান্তরের দিকে পরিচালিত করে।

6.2.1 ঠিকানার সামঞ্জস্য
স্ট্যাকটিকে বৃত্তাকারভাবে সরানোর ধারণাটি C / C++ সংকলিত অ্যাপ্লিকেশনগুলির দ্বারা স্ট্যাক অঞ্চলের thesp আপেক্ষিক অ্যাক্সেসের উপর ভিত্তি করে। যাইহোক, স্ট্যাক মেমরির মধ্যে মেমরি বিষয়বস্তু অ্যাক্সেস করার একমাত্র উপায় sp আপেক্ষিক অ্যাক্সেস নয়। কখনও কখনও বা একটি গ্লোবাল ডাটা স্ট্রাকচারে পয়েন্টার সংরক্ষণ করে। তদুপরি, স্ট্যাকের ভেরিয়েবলের পয়েন্টারগুলিও স্ট্যাকের বাইরে কিছু গ্লোবাল বা হিপ ডেটা স্ট্রাকচারে স্থানান্তরিত হতে পারে।

স্ট্যাকের স্থানান্তরের সময়, স্ট্যাকের ভেরিয়েবলের মেমরি ঠিকানা পরিবর্তিত হয়, যেখানে পয়েন্টারগুলির বিষয়বস্তু অপরিবর্তিত থাকে। এটি অবৈধ পয়েন্টার এবং এইভাবে একটি ভুল অ্যাপ্লিকেশন আচরণের দিকে পরিচালিত করে।

এই সমস্যাটি কাটিয়ে উঠতে, আমরা স্ট্যাক রিলোকেশন সিস্টেমকে দুটি পয়েন্টার অ্যাডজাস্টমেন্ট মেকানিজম দিয়ে সজ্জিত করি, যা স্ট্যাক রিলোকেশনের উপর পয়েন্টার বিষয়বস্তুর সঠিকতা বজায় রাখে।

স্ট্যাকসেগমেন্টের মধ্যে পুরানো অবস্থানগুলির রেফারেন্সগুলি সনাক্ত এবং সামঞ্জস্য করার জন্য একটি প্রক্রিয়া প্রদান করতে, আমরা একটি পৃষ্ঠা-ভিত্তিক পয়েন্টার সামঞ্জস্য পদ্ধতি প্রয়োগ করি।

যখনই স্ট্যাক সেগমেন্টটি একটি ছোট অফসেট d (যেমন, 64 বাইট) দ্বারা সরানো হয়, সমগ্র ভার্চুয়াল মেমরি অবস্থান প্রতিস্থাপিত হয়৷ স্ট্যাক সেগমেন্টটি n মেমরি পৃষ্ঠাগুলি বরাদ্দ করে, সেটআপ (ছায়া সহ) 2n ভার্চুয়াল মেমরি পৃষ্ঠাগুলি গ্রহণ করে৷ পূর্ববর্তী বেস ঠিকানা b থেকে b + d এ স্থানান্তরিত করার পরিবর্তে, আমরা স্ট্যাকটিকে ভার্চুয়াল ঠিকানা b +d +(2n ·4096) এ স্থানান্তরিত করি।

এর কারণে, আমরা স্ট্যাকের পুরানো অবস্থানে ভার্চুয়াল মেমরিম্যাপটিকে অবৈধ করতে পারি। যখনই অ্যাপ্লিকেশনটি এখন একটি পুরানো ঠিকানা ধারণ করে এবং এটি অ্যাক্সেস করার চেষ্টা করে, তখন অপারেটিং সিস্টেম দ্বারা একটি ফাঁদ উত্থাপিত হয় এবং পরিচালনা করা হয়।

ফাঁদ সৃষ্টিকারী রেজিস্টার স্ট্যাক সেগমেন্টের বর্তমান বৈধ অবস্থানের সাথে সামঞ্জস্য করা হয়েছে এবং সম্পাদন চালিয়ে যেতে পারে। পুরানো স্থানে শাখাগুলির জন্য ফাঁদ একইভাবে পরিচালনা করা হয় (বিভাগ 6.3)। এই পদ্ধতির ত্রুটি হল ভার্চুয়াল মেমরি ঠিকানা স্থান ধীরে ধীরে ব্যবহার করা হয় এবং পুনরায় ব্যবহার করা যায় না। যাইহোক, একটি সাধারণ গণনা দেখায় যে এটি এখনও কার্যকর: 48 বিটের ভার্চুয়াল ঠিকানার আকার (যেমন, অনেক ARMv8-ভিত্তিক CPU-এর জন্য) এবং 512 MiB সিস্টেমের জন্য বরাদ্দ করা হচ্ছে (অর্থাৎ, সামঞ্জস্যের দ্বারা ব্যবহার করা যাবে না। প্রক্রিয়া), 2.8 · 1011 পৃষ্ঠাগুলি উপলব্ধ।

যখন প্রতি সেকেন্ডে স্থান পরিবর্তন হয় এবং স্ট্যাকের আকার n=8 মেমরি পৃষ্ঠা হয়, তখন সিস্টেমের ভার্চুয়াল মেমরি পৃষ্ঠাগুলি শেষ না হওয়া পর্যন্ত স্থানান্তর 136 বছর চলতে পারে৷ এটি এখন পর্যন্ত বেশিরভাগ এমবেডেড সিস্টেমের জীবনকাল অতিক্রম করতে পারে।

6.3 পাঠ্য আন্দোলন

এই কাজে সূক্ষ্ম দানাদার পরিধান-সমতলকরণের দ্বিতীয় প্রক্রিয়া হল সংকলিত বাইনারি কোড (অর্থাৎ, পাঠ্য অংশ) সরানোর একটি প্রক্রিয়া। এই প্রক্রিয়াটি আবার ছায়া অঞ্চলকে নিযুক্ত করে (বিভাগ 6.1) সমগ্র পাঠ্য অংশের একটি ঘূর্ণনশীল গতিবিধির অনুমতি দেওয়ার জন্য।

স্ট্যাক সরানোর বিপরীতে (অনুচ্ছেদ 6.2), কার্য সম্পাদনের সময় প্রোগ্রামের সঠিকতা বজায় রাখার জন্য বিভিন্ন পদক্ষেপ করতে হবে। মৌলিক ধারণাটি আবার ছোট ছোট ধাপে (যেমন, 64 বাইট) মেমরি পৃষ্ঠাগুলির একটি উপসেটের মাধ্যমে পাঠ্য অংশটিকে সরানো, এই পৃষ্ঠাগুলির মধ্যে নন-ইউনিফর্ম রিড অ্যাক্সেস বিতরণ করা।

এটি অর্জন করার জন্য, আমরা কার্যকর করার সময় বাইনারি প্রোগ্রাম কোড চলাচলের অনুমতি দেওয়ার জন্য চলমান অ্যাপ্লিকেশনটিকে পরিবর্তন করি।

6.3.1 বাইনারি প্রস্তুতি।

সঞ্চালনের সময় চলমান বাইনারি প্রোগ্রাম কোডের দিকে প্রথম পদক্ষেপ হিসাবে, আমরা সম্পূর্ণ প্রোগ্রাম কোড অবস্থানটিকে এমনভাবে স্বাধীন করি যাতে এটি পাঠ্য বিভাগের পরম ঠিকানা থেকে স্বাধীন হয়ে যায়। এটি জিসিসি বিকল্প -fPIC ব্যবহার করে অর্জন করা যেতে পারে, যা অবস্থান-স্বাধীন কোড তৈরি করে [16]।

ফলস্বরূপ কম্পাইল করা বাইনারি কোড শাখা এবং ফাংশন কলগুলি সর্বদা প্রোগ্রাম কাউন্টারের সাথে সম্পর্কিত করে (অর্থাৎ, বর্তমানে কার্যকর করা নির্দেশের অবস্থানের সাথে)। গ্লোবাল ডাটা স্ট্রাকচার (ডেটা এবং বিএসএস), পাশাপাশি বাহ্যিক ফাংশনকলগুলিতে অ্যাক্সেস গ্লোবাল অফসেট টেবিল (জিওটি) এবং প্রসিডিউর লিঙ্কেজ টেবিল (পিএলটি) দ্বারা পরিচালিত হয়। এই টেবিলগুলি প্রোগ্রাম কাউন্টার আপেক্ষিক ঠিকানা দিয়ে অ্যাক্সেস করা যেতে পারে।

টেবিলগুলি অপারেটিং সিস্টেমের (অর্থাৎ, গতিশীল লিঙ্কার থেকে) অ্যাট্রনটাইম থেকে সংশ্লিষ্ট পরম ঠিকানাগুলির সাথে পপুলেট করা হয়। PLT-এ অভ্যন্তরীণ ফাংশনগুলির জন্য এন্ট্রি রয়েছে (বাহ্যিক লাইব্রেরি ফাংশন নয়), যেহেতু পরম ঠিকানাগুলি কখনও কখনও আরও ঠিকানা গণনার জন্য ব্যবহার করা হয়।

কম্পাইলার দ্বারা এই এন্ট্রিগুলির কোনও দমন এড়াতে, আমরা একটি শেয়ার্ড লাইব্রেরি হিসাবে অ্যাপ্লিকেশনটি কম্পাইল করি এবং রানটাইমে এটি অপারেটিং সিস্টেমে লোড করি। এর জন্য আংশিক লিঙ্কিং প্রয়োজন, যেখানে GOT এবং PLT-এ বাহ্যিক ফাংশন এবং ডেটা স্ট্রাকচারের রেফারেন্সগুলি জমা করা হয়।

increase brain power

6.3.2 স্থানান্তর রুটিন। ছোট দূরত্বে (যেমন, 64বাইট) টেক্সট সেগমেন্টের প্রকৃত চলাচলের জন্য নিম্নলিখিত পদক্ষেপগুলি প্রয়োজন:

(1) বাইনারি পাঠ্যের শব্দ-ভিত্তিক অনুলিপি

(2) পৃষ্ঠা-ভিত্তিক ঠিকানার সামঞ্জস্য

(3) ঠিকানা ধারাবাহিকতা রক্ষণাবেক্ষণ

(4) GOT/PLT রক্ষণাবেক্ষণ

(5) পিসি স্থানান্তর।

যেখানে ধাপ (1) নতুন মেমরি অবস্থানে একক শব্দের একটি সরল অনুলিপি, পরবর্তী রক্ষণাবেক্ষণের পদক্ষেপগুলির জন্য কিছু বিশেষ প্রচেষ্টা প্রয়োজন। পূর্বে উল্লিখিত হিসাবে, আমরা পাঠ্যের পরম ঠিকানার স্বাধীনতা বজায় রাখতে অবস্থান-স্বাধীন কোড ব্যবহার করি।

ARMv8-এর জন্য, কম্পাইলার সন্নিবেশগুলি এই উদ্দেশ্যে নির্দেশাবলী (যেমন, GOT এবং PLT-কে সম্বোধন করার জন্য), যা বর্তমান প্রোগ্রাম কাউন্টারের 4-KiB পৃষ্ঠার সাথে সম্পর্কিত একটি ঠিকানা গণনা করে।

এইভাবে, যখনই এই ধরনের নির্দেশ একটি থেকে অন্য 4-KiB পৃষ্ঠায় স্থানান্তরিত হয়, আমরা ধাপে নির্দেশটি পুনরায় লিখি (2) এবং লক্ষ্যে অফসেট গণনা বজায় রাখতে অবিলম্বে অফসেটকে 1 দ্বারা কমিয়ে দেই। যেহেতু GOT এবং PLT ঠিকানাগুলি সর্বদা এই adrp নির্দেশাবলী দ্বারা নির্ধারিত হয়, তাই আমরা পাঠ্য অংশের গতিবিধি থেকে GOT এবং PLT বাদ দিই। ধাপ (3) পূর্বে বর্ণিত একই ঠিকানার সামঞ্জস্যপূর্ণ প্রক্রিয়া ব্যবহার করে (বিভাগ 6.2.1)।

ধাপ (4) অ্যাপ্লিকেশনের ফাংশন এবং ডেটা উপাদানগুলির স্ব-রেফারেন্সগুলিকে সামঞ্জস্য করে যাতে অ্যাপ্লিকেশনটিকে এখনও এইগুলির জন্য সঠিক পয়েন্টার তৈরি করতে দেয় (যেমন, ফাংশন পয়েন্টার)।

আমরা অবশেষে প্রোগ্রাম কাউন্টারটিকে নতুন অবস্থানে সেট করেছি এবং ক্রমাগত কার্যকর করা হয়েছে। সামগ্রিকভাবে, আমরা প্রধান মেমরির মাধ্যমে ছোট ধাপে স্ট্যাক এবং টেক্সট সরানোর জন্য দুটি বিশেষ ব্যবস্থা প্রদান করি।

আমাদের ছায়া অঞ্চল সেটআপের সংমিশ্রণে, এই আন্দোলনটি ঘূর্ণায়মান আন্দোলনে পরিণত হয়, যা একটি আবদ্ধ মেমরি অঞ্চলে ঘন প্রবেশের হট স্পট ছড়িয়ে দেয়।

এই শ্যাডো সেটআপটি সম্পূর্ণরূপে ভার্চুয়াল মেমরি স্পেসে কাজ করে এবং ম্যাপ করা ফিজিক্যাল পৃষ্ঠাগুলি এখনও মোটা দানাদার বার্ধক্য-সচেতন প্রক্রিয়া দ্বারা বিনিময় করা যেতে পারে।

ছায়া পৃষ্ঠাগুলির ডবল ম্যাপিং সামঞ্জস্যপূর্ণ রাখার জন্য বাস্তবায়ন শুধুমাত্র সংশোধন করা হয়েছে। এইভাবে, সামগ্রিক-সচেতন পরিধান-সমতলকরণ অর্জন করা হয়।


For more information:1950477648nn@gmail.com

তুমি এটাও পছন্দ করতে পারো