প্রসেসের মধ্যে মেমরি বরাদ্দ

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

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

মেমরির প্রকারভেদ

অ্যান্ড্রয়েড ডিভাইসে তিনটি ভিন্ন ধরনের মেমরি থাকে: RAM, zRAM এবং স্টোরেজ। মনে রাখবেন যে CPU এবং GPU উভয়ই একই RAM অ্যাক্সেস করে।

মেমরির প্রকারভেদ

চিত্র 1. মেমরির প্রকারগুলি - RAM, zRAM, এবং স্টোরেজ

  • RAM হল দ্রুততম ধরনের মেমরি, কিন্তু সাধারণত আকারে সীমিত। হাই-এন্ড ডিভাইসে সাধারণত সর্বাধিক পরিমাণে RAM থাকে।

  • zRAM হল RAM এর একটি পার্টিশন যা সোয়াপ স্পেসের জন্য ব্যবহৃত হয়। zRAM-এ রাখা হলে সবকিছু সংকুচিত হয় এবং তারপর zRAM-এর বাইরে কপি করা হলে ডিকম্প্রেস করা হয়। র‍্যামের এই অংশটি আকারে বাড়ে বা সঙ্কুচিত হয় কারণ পেজগুলিকে zRAM-এ স্থানান্তরিত করা হয় বা বের করা হয়। ডিভাইস নির্মাতারা সর্বোচ্চ আকার সেট করতে পারেন।

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

স্মৃতির পাতা

RAM কে পৃষ্ঠাগুলিতে বিভক্ত করা হয়। সাধারণত প্রতিটি পৃষ্ঠা মেমরি 4KB হয়।

পৃষ্ঠাগুলি বিনামূল্যে বা ব্যবহৃত হয় বলে বিবেচিত হয়। বিনামূল্যের পৃষ্ঠাগুলি অব্যবহৃত RAM। ব্যবহৃত পৃষ্ঠাগুলি হল RAM যা সিস্টেম সক্রিয়ভাবে ব্যবহার করছে, এবং নিম্নলিখিত বিভাগগুলিতে গোষ্ঠীভুক্ত করা হয়েছে:

  • ক্যাশে: স্টোরেজের একটি ফাইল দ্বারা ব্যাক করা মেমরি (উদাহরণস্বরূপ, কোড বা মেমরি-ম্যাপ করা ফাইল)। ক্যাশে মেমরি দুই ধরনের আছে:
    • ব্যক্তিগত: একটি প্রক্রিয়ার মালিকানাধীন এবং ভাগ করা হয়নি
      • পরিষ্কার: স্টোরেজে থাকা একটি ফাইলের অপরিবর্তিত অনুলিপি, বিনামূল্যে মেমরি বাড়ানোর জন্য kswapd দ্বারা মুছে ফেলা যেতে পারে
      • নোংরা: সঞ্চয়স্থানে ফাইলের পরিবর্তিত অনুলিপি; বিনামূল্যে মেমরি বাড়ানোর জন্য kswapd দ্বারা zRAM-এ সরানো বা সংকুচিত করা যেতে পারে
    • ভাগ করা: একাধিক প্রক্রিয়া দ্বারা ব্যবহৃত
      • ক্লিন: স্টোরেজে থাকা ফাইলের অপরিবর্তিত কপি, ফ্রি মেমরি বাড়ানোর জন্য kswapd দ্বারা মুছে ফেলা যেতে পারে
      • নোংরা: সঞ্চয়স্থানে ফাইলের পরিবর্তিত অনুলিপি; kswapd , অথবা স্পষ্টভাবে msync() বা munmap() ব্যবহার করে ফ্রি মেমরি বাড়ানোর জন্য স্টোরেজে থাকা ফাইলে পরিবর্তনগুলি লেখার অনুমতি দেয়
  • বেনামী: স্টোরেজের একটি ফাইল দ্বারা মেমরি ব্যাক নয় (উদাহরণস্বরূপ, MAP_ANONYMOUS পতাকা সেট সহ mmap() দ্বারা বরাদ্দ করা হয়েছে)
    • নোংরা: বিনামূল্যে মেমরি বাড়ানোর জন্য kswapd দ্বারা zRAM-এ সরানো/সংকুচিত করা যেতে পারে

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

কম মেমরি ব্যবস্থাপনা

কম মেমরির পরিস্থিতি মোকাবেলা করার জন্য অ্যান্ড্রয়েডের দুটি প্রধান পদ্ধতি রয়েছে: কার্নেল সোয়াপ ডেমন এবং লো-মেমরি কিলার।

কার্নেল অদলবদল ডেমন

কার্নেল সোয়াপ ডেমন ( kswapd ) হল লিনাক্স কার্নেলের অংশ, এবং ব্যবহৃত মেমরিকে ফ্রি মেমরিতে রূপান্তর করে। ডিভাইসে ফ্রি মেমরি কম হলে ডেমন সক্রিয় হয়। লিনাক্স কার্নেল কম এবং উচ্চ ফ্রি মেমরি থ্রেশহোল্ড বজায় রাখে। যখন ফ্রি মেমরি কম থ্রেশহোল্ডের নিচে নেমে আসে, kswapd মেমরি পুনরুদ্ধার করতে শুরু করে। একবার বিনামূল্যে মেমরি উচ্চ থ্রেশহোল্ডে পৌঁছে গেলে, kswapd মেমরি পুনরুদ্ধার করা বন্ধ করে দেয়।

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

সঞ্চয়স্থান দ্বারা ব্যাক করা পরিষ্কার পাতা মুছে ফেলা হয়েছে

চিত্র 2. পরিষ্কার পৃষ্ঠা, স্টোরেজ দ্বারা সমর্থিত, মুছে ফেলা হয়েছে

kswapd ক্যাশ করা ব্যক্তিগত নোংরা পৃষ্ঠা এবং বেনামী নোংরা পৃষ্ঠাগুলিকে zRAM-এ সরাতে পারে, যেখানে সেগুলি সংকুচিত হয়। এটি করার ফলে RAM এ উপলব্ধ মেমরি মুক্ত হয় (ফ্রি পেজ)। যদি একটি প্রক্রিয়া zRAM-এ একটি নোংরা পৃষ্ঠা স্পর্শ করার চেষ্টা করে, তাহলে পৃষ্ঠাটি সংকুচিত করা হয় এবং RAM-এ ফিরিয়ে দেওয়া হয়। যদি একটি সংকুচিত পৃষ্ঠার সাথে যুক্ত প্রক্রিয়াটি মেরে ফেলা হয়, তাহলে পৃষ্ঠাটি zRAM থেকে মুছে ফেলা হয়।

যদি বিনামূল্যের মেমরির পরিমাণ একটি নির্দিষ্ট থ্রেশহোল্ডের নিচে নেমে যায়, তাহলে সিস্টেমটি হত্যা প্রক্রিয়া শুরু করে।

নোংরা পৃষ্ঠাটি zRAM এ সরানো হয়েছে এবং সংকুচিত হয়েছে

চিত্র 3. নোংরা পৃষ্ঠাটি zRAM এ সরানো হয়েছে এবং সংকুচিত হয়েছে৷

কম মেমরি হত্যাকারী

অনেক সময়, kswapd সিস্টেমের জন্য যথেষ্ট মেমরি মুক্ত করতে পারে না। এই ক্ষেত্রে, সিস্টেমটি একটি অ্যাপকে অবহিত করতে onTrimMemory() ব্যবহার করে যে মেমরি কম চলছে এবং এটির বরাদ্দ হ্রাস করা উচিত। যদি এটি পর্যাপ্ত না হয়, কার্নেল মেমরি মুক্ত করার জন্য প্রক্রিয়াগুলিকে হত্যা করা শুরু করে। এটি করতে কম-মেমরি কিলার (LMK) ব্যবহার করে।

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

অ্যান্ড্রয়েড প্রসেস, শীর্ষে উচ্চ স্কোর

চিত্র 4. Android প্রসেস, শীর্ষে উচ্চ স্কোর এবং নীচে নিম্ন স্কোর সহ

এগুলি উপরের টেবিলের বিভিন্ন বিভাগের জন্য বর্ণনা:

  • ব্যাকগ্রাউন্ড অ্যাপস: যে অ্যাপগুলি আগে চালানো হয়েছিল এবং বর্তমানে সক্রিয় নেই৷ LMK প্রথমে সর্বোচ্চ oom_adj_score সহ ব্যাকগ্রাউন্ড অ্যাপগুলিকে মেরে ফেলবে।

  • পূর্ববর্তী অ্যাপ: অতি সম্প্রতি ব্যবহৃত ব্যাকগ্রাউন্ড অ্যাপ। ব্যাকগ্রাউন্ড অ্যাপের তুলনায় আগের অ্যাপটির অগ্রাধিকার বেশি (একটি কম স্কোর) কারণ এটি ব্যবহারকারীর ব্যাকগ্রাউন্ড অ্যাপগুলির একটির চেয়ে এটিতে স্যুইচ করার সম্ভাবনা বেশি।

  • হোম অ্যাপ: এটি লঞ্চার অ্যাপ। এটিকে হত্যা করলে ওয়ালপেপারটি অদৃশ্য হয়ে যাবে।

  • পরিষেবাগুলি: পরিষেবাগুলি অ্যাপ্লিকেশন দ্বারা শুরু হয় এবং এতে ক্লাউডে সিঙ্ক বা আপলোড অন্তর্ভুক্ত থাকতে পারে৷

  • উপলব্ধিযোগ্য অ্যাপ: নন-ফোরগ্রাউন্ড অ্যাপ যা ব্যবহারকারীর কাছে কোনোভাবে উপলব্ধি করা যায়, যেমন একটি অনুসন্ধান প্রক্রিয়া চালানো যা একটি ছোট UI প্রদর্শন করে বা সঙ্গীত শোনা।

  • ফোরগ্রাউন্ড অ্যাপ: বর্তমানে ব্যবহৃত অ্যাপ। ফোরগ্রাউন্ড অ্যাপটিকে হত্যা করা একটি অ্যাপ্লিকেশন ক্র্যাশের মতো দেখাচ্ছে যা ব্যবহারকারীকে নির্দেশ করতে পারে যে ডিভাইসে কিছু ভুল হচ্ছে।

  • ক্রমাগত (পরিষেবাগুলি): এইগুলি ডিভাইসের জন্য মূল পরিষেবা, যেমন টেলিফোনি এবং ওয়াইফাই৷

  • সিস্টেম: সিস্টেম প্রসেস। এই প্রক্রিয়াগুলি বন্ধ হয়ে যাওয়ায়, ফোনটি রিবুট হতে পারে।

  • নেটিভ: সিস্টেম দ্বারা ব্যবহৃত খুব নিম্ন-স্তরের প্রক্রিয়া (উদাহরণস্বরূপ, kswapd )।

ডিভাইস নির্মাতারা LMK এর আচরণ পরিবর্তন করতে পারে।

মেমরি পদচিহ্ন গণনা

কার্নেল সিস্টেমের সমস্ত মেমরি পৃষ্ঠাগুলি ট্র্যাক করে।

বিভিন্ন প্রক্রিয়া দ্বারা ব্যবহৃত পৃষ্ঠাগুলি

চিত্র 5. বিভিন্ন প্রক্রিয়া দ্বারা ব্যবহৃত পৃষ্ঠাগুলি

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

দুটি অ্যাপ দ্বারা শেয়ার করা পৃষ্ঠাগুলি৷

চিত্র 6. দুটি অ্যাপ দ্বারা ভাগ করা পৃষ্ঠাগুলি (মাঝখানে)

একটি অ্যাপ্লিকেশনের জন্য মেমরি পদচিহ্ন নির্ধারণ করতে, নিম্নলিখিত মেট্রিক্স ব্যবহার করা যেতে পারে:

  • রেসিডেন্ট সেট সাইজ (RSS): অ্যাপ দ্বারা ব্যবহৃত শেয়ার করা এবং অ-শেয়ার করা পৃষ্ঠার সংখ্যা
  • আনুপাতিক সেট আকার (PSS): অ্যাপ দ্বারা ব্যবহৃত অ-ভাগ করা পৃষ্ঠাগুলির সংখ্যা এবং ভাগ করা পৃষ্ঠাগুলির একটি সমান বিতরণ (উদাহরণস্বরূপ, যদি তিনটি প্রক্রিয়া 3MB ভাগ করে, প্রতিটি প্রক্রিয়া PSS-এ 1MB পায়)
  • ইউনিক সেট সাইজ (USS): অ্যাপ দ্বারা ব্যবহৃত অ-ভাগ করা পৃষ্ঠাগুলির সংখ্যা (ভাগ করা পৃষ্ঠাগুলি অন্তর্ভুক্ত নয়)

PSS অপারেটিং সিস্টেমের জন্য দরকারী যখন এটি জানতে চায় যে সমস্ত প্রক্রিয়ার দ্বারা কতটা মেমরি ব্যবহার করা হয়েছে কারণ পৃষ্ঠাগুলি একাধিকবার গণনা করা হয় না। PSS গণনা করতে অনেক সময় নেয় কারণ সিস্টেমকে নির্ধারণ করতে হবে কোন পৃষ্ঠাগুলি ভাগ করা হয়েছে এবং কতগুলি প্রক্রিয়া দ্বারা। RSS ভাগ করা এবং অ-ভাগ করা পৃষ্ঠাগুলির মধ্যে পার্থক্য করে না (এটি গণনা করা দ্রুততর করে) এবং মেমরি বরাদ্দকরণের পরিবর্তনগুলি ট্র্যাক করার জন্য আরও ভাল।

অতিরিক্ত সম্পদ

{% শব্দার্থে %} {% endverbatim %} {% শব্দার্থে %} {% endverbatim %}