ভার্চুয়ালাইজেশন সার্ভিস

VirtualizationService একাধিক গেস্ট ভিএম পরিচালনা করে, সুরক্ষিত বা অন্যথায়, একটি অ্যান্ড্রয়েড সিস্টেমে চলমান, প্রাথমিকভাবে ক্রসভিএম-এর দৃষ্টান্তগুলি পরিচালনা করে। VirtualizationService একটি AIDL API প্রকাশ করে, যেটি সিস্টেম পরিষেবা বা অ্যাপগুলি VM শুরু করতে, নিরীক্ষণ করতে এবং বন্ধ করতে ব্যবহার করতে পারে। VirtualizationService ব্যবহার করার জন্য, virtmgr সরাসরি চালান বা javalib বা rustlib ইম্পোর্ট করুন যা virtmgr চাইল্ড প্রক্রিয়া হিসাবে চালায়।

ভিএম জীবনচক্র

একটি VM-এ অ্যাক্সেস IVirtualMachine অবজেক্ট দ্বারা ট্র্যাক করা হয়। যতক্ষণ না IVirtualMachine অবজেক্টের অন্তত একটি রেফারেন্স থাকে ততক্ষণ VM চলতে থাকে (যদি না এটি ক্র্যাশ না হয় বা নিজের ইচ্ছায় বন্ধ না হয়)। যদি VM বন্ধ হওয়ার আগে IVirtualMachine অবজেক্টের সমস্ত রেফারেন্স বাদ দেওয়া হয়, তাহলে VirtualizationService স্বয়ংক্রিয়ভাবে VM বন্ধ করে দেয়। এই প্রক্রিয়াটি বোঝায় যে যে ক্লায়েন্টটি VM শুরু করেছে যদি কম মেমরি কিলার দ্বারা বন্ধ করা হয়, তাহলে VMও বন্ধ হয়ে যায়, এইভাবে সম্পদ ফাঁস প্রতিরোধ করা হয়।

প্রতিটি ভিএম ক্রসভিএম এর নিজস্ব উদাহরণ দ্বারা পরিচালিত হয়, যা VirtualizationService ক্লায়েন্টের পক্ষে পরিচালনা করে। virtmgrVirtualizationService virtualizationservice VirtualizationServiceInternal দ্বারা প্রদত্ত CID সহ বরাদ্দকৃত বৈশ্বিক সংস্থানগুলির সাথে প্রয়োজন অনুসারে এই crosvm চাইল্ড প্রক্রিয়াগুলি শুরু করে এবং VM-এর প্রয়োজনীয় চিত্রগুলির জন্য ফাইল বর্ণনাকারীগুলিকে পাস করে৷ VirtualizationService তারপরে সন্তানের প্রক্রিয়াটি নিরীক্ষণ করে যখন তারা মারা যায়, তাই এটি সেই অনুযায়ী অবশিষ্ট ক্লায়েন্টদের অবহিত করতে পারে।

ভিএম প্যাকেজিং

crosvm VM বুট করার দুটি ভিন্ন উপায় সমর্থন করে: হয় একটি কার্নেল এবং initrd প্রদান করা হয় অথবা একটি বুটলোডার প্রদান করা হয়। উভয় ক্ষেত্রেই, একটি নির্বিচারে সংখ্যক ডিস্ক চিত্র প্রদান করা যেতে পারে, যা হয় একটি কাঁচা চিত্র বা বিভিন্ন পার্টিশনের সংমিশ্রণ হতে পারে। বিভিন্ন চিত্র ক্লায়েন্ট দ্বারা ফাইল বর্ণনাকারী হিসাবে প্রদান করা হয়.

VirtualizationService চাহিদা অনুযায়ী কম্পোজিট ডিস্ক ইমেজ তৈরি করে। এই প্রক্রিয়াটি প্রয়োজনীয় কারণ কম্পোজিট ডিস্ক ফাইলটি অভ্যন্তরীণভাবে ডিস্কের বিভিন্ন পার্টিশন ইমেজ ফাইলকে নির্দেশ করে, যা ক্লায়েন্ট দ্বারা পাস করা হয় এবং crosvm দ্বারা সরাসরি অ্যাক্সেসযোগ্য নাও হতে পারে। এই সমস্যাটি সমাধান করার জন্য, VirtualizationService নিশ্চিত করে যে crosvm দ্বারা উত্তরাধিকারসূত্রে প্রাপ্ত ফাইল বর্ণনাকারী নম্বরগুলি ফাইল বর্ণনাকারী নম্বরগুলির মতোই যা VirtualizationService যৌগিক চিত্র তৈরিতে ব্যবহার করে। কম্পোজিট ডিস্ক ইমেজ প্রতিটি পার্টিশন ফাইলের প্রতিনিধিত্ব করতে /proc/self/fd/N ফর্মে ফাইলের নাম ব্যবহার করে।

Microdroid pVM-এর জন্য, AVF-এ একটি বুটলোডার রয়েছে, যা স্ট্যান্ডার্ড অ্যান্ড্রয়েড ভেরিফাইড বুট ফ্লো অনুসরণ করে একটি কম্পোজিট ডিস্ক ইমেজের পার্টিশন থেকে কার্নেল লোড করে।

VM সকেট (vsock)

pVM-এর মধ্যে যোগাযোগের জন্য প্রাথমিক ইন্টারফেস হল vsock, একটি আদর্শ ভার্টিও সকেট ইন্টারফেস। প্রতিটি VM একটি 32-বিট কনটেক্সট আইডেন্টিফায়ার (CID) দ্বারা চিহ্নিত করা হয়, যা একটি IP ঠিকানার সাথে সাদৃশ্যপূর্ণ, যা VirtualizationServiceInternal VM-কে বরাদ্দ করে যখন VirtualizationService VM তৈরি করে, এবং VM যে পোর্ট নম্বর বেছে নেয় তাতে পরিষেবাগুলি প্রকাশ করতে পারে। VM চলার সময় CID অনন্য, কিন্তু VM বন্ধ হয়ে গেলে এবং VM-এ সমস্ত IVirtualMachine বাইন্ডার হ্যান্ডেলগুলি বাদ দেওয়া হলে CID মান পুনর্ব্যবহার করা যেতে পারে।

ডিবাগ ইন্টারফেস

vm কমান্ড ডিবাগ উদ্দেশ্যে প্রদান করা হয়। এই কমান্ডটি একজন বিকাশকারীকে শেল থেকে একটি VM শুরু করতে, এর লগগুলি দেখতে এবং VM বন্ধ করতে দেয়। AVF দ্বারা প্রদত্ত vm কমান্ড বা অন্যান্য ইন্টারফেসের সাহায্যে, একটি VM ডিবাগেবল (সম্পূর্ণ) বা নন-ডিবাগেবল (কোনও) মোডে শুরু হতে পারে। ডিবাগেবল VM-এর মাধ্যমে, আপনি OS লেভেলের লগ দেখতে পারেন, ADB শেল অ্যাক্সেস করতে পারেন এবং ক্র্যাশ-ডাম্প বা অ্যাপ পেলোড ক্যাপচার করতে পারেন। উৎপাদনে একটি নন-ডিবাগেবল VM ব্যবহার করার পরামর্শ দেওয়া হয়। কমান্ড লাইন টুল এবং AVF প্রদান করে এমন অন্যান্য ডিবাগ ইন্টারফেস সম্পর্কে আরও জানতে, debug/README.md দেখুন।