VirtualizationService
সার্ভিস সমস্ত গেস্ট ভিএম পরিচালনা করে, সুরক্ষিত বা অন্যথায়, একটি অ্যান্ড্রয়েড সিস্টেমে চলমান, প্রাথমিকভাবে ক্রসভিএম-এর দৃষ্টান্তগুলি পরিচালনা করে। VirtualizationService
সার্ভিস একটি AIDL API প্রকাশ করে, যেটি সিস্টেম পরিষেবা বা অ্যাপগুলি VM শুরু করতে, নিরীক্ষণ করতে এবং বন্ধ করতে ব্যবহার করতে পারে।
AIDL API
VirtualizationService
একটি AIDL API প্রকাশ করে যা ক্লায়েন্টরা ছবি প্রদান করতে এবং একটি VM শুরু করতে ব্যবহার করতে পারে। এই বিবরণটি হয় বুটলোডার বা কার্নেলের জন্য ফাইল বর্ণনাকারীর সাথে একটি কাঁচা VM কনফিগারেশন হতে পারে এবং VM-এ অন্তর্ভুক্ত করার জন্য বিভিন্ন ডিস্ক চিত্র, অথবা একটি Microdroid কনফিগারেশন যেখানে ক্লায়েন্ট শুধু পেলোড প্রদান করে এবং VM একটি আদর্শ Microdroid কার্নেল এবং পরিকাঠামো দিয়ে শুরু করা হয়। . VirtualizationService
তারপর একটি IVirtualMachine
Binder অবজেক্ট ফেরত দেয় যা VM প্রতিনিধিত্ব করে। যে ক্লায়েন্ট VM শুরু করেছে সে সাধারণ বাইন্ডার মেকানিজম ব্যবহার করে অন্যান্য প্রক্রিয়ার সাথে বাইন্ডার অবজেক্ট শেয়ার করতে পারে।
IVirtualMachine
এ VM সম্পর্কে তথ্য পাওয়ার জন্য AIDL পদ্ধতি রয়েছে, যেমন CID, যা vsock এর মাধ্যমে এটির সাথে যোগাযোগ করতে ব্যবহার করা যেতে পারে এবং VM বন্ধ হয়ে গেলে কল করার জন্য একটি কলব্যাক নিবন্ধিত করার অনুমতি দেয়। Microdroid VM-এর ক্ষেত্রে IVirtualMachine
অবজেক্টটি VM-এ বাইন্ডার সংযোগ স্থাপন করতেও ব্যবহার করা যেতে পারে।
ভিএম জীবনচক্র
একটি VM-এ অ্যাক্সেস IVirtualMachine
অবজেক্ট দ্বারা ট্র্যাক করা হয়। যতক্ষণ না IVirtualMachine
অবজেক্টের অন্তত একটি রেফারেন্স থাকে ততক্ষণ VM চলতে থাকে (যদি না এটি ক্র্যাশ না হয় বা নিজের ইচ্ছায় বন্ধ না হয়)। যদি VM বন্ধ হওয়ার আগে IVirtualMachine
অবজেক্টের সমস্ত রেফারেন্স বাদ দেওয়া হয়, তাহলে VirtualizationService
স্বয়ংক্রিয়ভাবে VM বন্ধ করে দেয়। এই প্রক্রিয়াটি বোঝায় যে যে ক্লায়েন্টটি VM শুরু করেছে যদি কম মেমরি কিলার দ্বারা বন্ধ করা হয়, তাহলে VMও বন্ধ হয়ে যায়, এইভাবে সম্পদ ফাঁস প্রতিরোধ করা হয়।
প্রতিটি ভিএম ক্রসভিএম এর নিজস্ব উদাহরণ দ্বারা পরিচালিত হয়, যা VirtualizationService
সার্ভিস ক্লায়েন্টের পক্ষে পরিচালনা করে। VirtualizationService
এই ক্রসভিএম চাইল্ড প্রসেসগুলিকে প্রয়োজন অনুসারে শুরু করে এবং 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 ঠিকানার সাথে সাদৃশ্যপূর্ণ, যা VM তৈরি করার সময় VirtualizationService
VM-কে বরাদ্দ করে এবং VM যে পোর্ট নম্বরগুলি বেছে নেয় তাতে পরিষেবাগুলি প্রকাশ করতে পারে। VM চলার সময় CID অনন্য, কিন্তু VM বন্ধ হয়ে গেলে এবং VM-এ সমস্ত IVirtualMachine
Binder হ্যান্ডেলগুলি বাদ দেওয়া হলে CID মান পুনর্ব্যবহার করা যেতে পারে।
ডিবাগ ইন্টারফেস
vm
কমান্ড ডিবাগ উদ্দেশ্যে প্রদান করা হয়। এই কমান্ডটি একজন বিকাশকারীকে শেল থেকে একটি VM শুরু করতে, এর লগগুলি দেখতে এবং VM বন্ধ করতে দেয়। vm
কমান্ডের মধ্যে বর্তমানে চলমান VM গুলিকে তালিকাভুক্ত করার একটি বিকল্প রয়েছে, তাদের স্থিতি এবং সংশ্লিষ্ট প্রক্রিয়াগুলি সহ। এই বিকল্পটি VirtualizationService
AIDL API-তে একটি অতিরিক্ত পদ্ধতি হিসাবে প্রয়োগ করা হয়েছে যা অপব্যবহার এড়াতে, শুধুমাত্র শেল ব্যবহারকারী দ্বারা কল করা যেতে পারে।
গেস্ট ভিএম-এ adb
অ্যাক্সেস প্রদান করতে, vsock-এর মাধ্যমে একটি adb
সংযোগ ফরোয়ার্ড করার জন্য AVF-তে সমর্থনও অন্তর্ভুক্ত রয়েছে। উদাহরণস্বরূপ, পোর্ট 5555-এ CID 10 চলমান adbd
সহ একটি Microdroid VM-এর জন্য, বিকাশকারী তাদের ওয়ার্কস্টেশন থেকে নিম্নলিখিত কমান্ডগুলির সাহায্যে Microdroid VM-এ একটি শেল পেতে পারেন:
$ adb forward tcp:8000 vsock:10:5555
$ adb connect localhost:8000
$ adb -s localhost:8000 shell
vsock এর মাধ্যমে একটি adb
সংযোগ ফরোয়ার্ড করা শুধুমাত্র ডিবাগ মোডে চলমান VM-এর জন্য উপলব্ধ।