سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

۲ مطلب با موضوع «مجازی سازی» ثبت شده است

متاسفانه به دلیل تحریم های آمریکا، دسترسی به فایل های ایمیج docker هم مثل jdk، android sdk، محصولات jboss و چندین چیز دیگه برای ایران محدوده. و از اون بدتر اینکه مدعیات تکنولوژی که دارن بلاگ مینویسن، فقط به انتقاد میپردازن و کاری انجام ندادن. تو این شرایط برای راه افتادن کار افرادی که ازه میخوان کار رو شروع بکنن، تصمیم گرفتم که کم کم ایمیجهایی رو برای استفاده آپلود کنم.

برای استفاده از این ایمیج ها، بعد از دانلود با دستور زیر بارگذاریشون بکنین

$docker load -i <path to image file>

لیست ایمیج ها (اگر به ایمیج خاصی نیاز داشتین، کامنت بزارین)

ubuntu 16.04
۱ موافقین ۰ مخالفین ۰ ۲۸ ارديبهشت ۹۵ ، ۱۴:۵۷
حامد شیخلو

در راستای یک پروژه، قصد داشتم روی یک سخت افزار تعداد زیادی ماشین مجازی داشته باشم. به همین دلیل روی روشهای مختلف مجازی سازی بررسی کلی انجام دادم و در نهایت تونستم کاری که میخواستم رو انجام بدم. تو وبلاگ قصد دارم اطلاعات کلی که به دست اوردم و همچنین روش انجام کار رو بنویسم تا افراد دیگه هم استفاده کنن.

اولین مرحله برای انجام یک کار، انتخاب روش کار مناسب از بین روشهای متفاوت هست. برای هر کاری که میخواین انجام بدین، اولش باید نیازمندی های خودتون رو مشخص بکنین. نیازمندی های مساله من موارد زیر هست:

  1. بار کاری بسیار کم سیستم عامل مهمان
  2. میزان حافظه رم مورد نیاز برای ماشین ها کم باشه
  3. سیستم عامل مهمان تفاوتی نمیکنه چی باشه
  4. رابط های شبکه به صورت کامل در کنترل ماشین مجازی باشه
  5. امکان باشه که با رابط دستوری ماشین های مجازی رو کنترل کرد
من بر اساس نیازمندی خودم باید یک روش مجازی سازی استفاده میکردم. پس فاز اول تحقیقات هست. تو این پست اطلاعات کلی از مجازی سازی و روشهای اون رو بررسی میکنیم.

مجازی سازی

یه سوال، مجازی سازی همون تجرید (abstraction) هست؟ چه فرقهایی با همدیگه دارن؟
تجرید به صورت کلی اگر تعریف کنیم، یه ساده سازی از رابط برای سیستم هست. تو طراحی سیستم (همون طور که قبلا گفته بودم) از تجرید برای ساده سازی طراحی خیلی استفاده میشه. برای مثال یک فایل، تجریدی از محل خاصی از فضای ذخیره سازی است.
مجازی سازی در عوض، یک رابط جداگانه برای سیستم عرضه میکند. رابط عرضه شده توسط مجازی سازی الزاما ساده تر نیست. این رابط جدید هم برای cpu و دیسک و یا شبکه میتونه عرضه بشه. پس میتونیم بگیم که مجازی سازی برای مجموعه منابع مشخصی از سیستم، میتونه یک عده رابط های جدید تعریف بکنه و با استفاده از اون رابط ها وظایف خاصی برای سیستم مشخص کرد. مثلا برای پردازنده x86 یک رابط جدید تعریف میکنین که بتونه دستورات powerPC رو هم اجرا بکنه.

انواع متفاوت مجازی سازی

به صورت کلی میتونیم مجازی سازی رو تو سه نوع تعریف کنیم. 
  • مجازی سازی سطح سیستم -system-level virtualization
تو این روش مجازی سازی رفتار یک سیستم کامپیوتری مثل یه سیستم حقیقی تقلید(Emulate) میشه. برای مثال رفتار یه پردازنده powerPC و یا یه دونه PLC به صورت کامل تقلید میشه. تو این شرایط سیستم عاملی که تو سیستم مجازی سازی شده اجرا میشه یه سیستم عامل کامل و بدون تغییر هست. این نوع مجازی سازی خودش به دو زیر دسته تقسیم میشه:
    • Full Virtualization: در این روش مجازی سازی، سیستم مهمان اطلاعی از اینکه بر روی بستر مجازی اجرا میشود نداره.
    • Paravirtulization: در این حالت مجازی سازی، سیستم عاملی که به صورت مهمان بر روی سیستم هست، از اینکه بر روی یک بستر مجازی اجرا میشود اطلاع دارد. در این سیستم ها فرمان های ابزارهای سیستم مجازی به سیستم میزبان ارسال میشه.
    • Hardware assisted virtualization: این روش یه نوع full virtualization هست، که پردازنده اصلی دستورات خاصی برای مجازی سازی سخت افزار رو تو خودش داره. برای مثال تو پردازنده های اینتل فناوری vtx وجود داره تا بشه با استفاده از اون مجای سازی کارایی بهتری پیدا بکنه. روش این کار هم مثل همون بیت وضعیت هسته و کاربر هست. یه وضعیت اضافه میشه به اسم vritual. تو این وضعیت فرمان ارسالی مشخص میشه که از سمت سیستم مجازی داره ارسال میشه. با این روش میشه بدون کاهش سرعت سیستم جدیدی بوجود آورد.
    • Hybrid virtualization: یه روش ترکیبی بین paravirtualizatio و full virtualization هست.
برای این نوع سیستم ها میشه VMware،Xen و KVM رو مثال زد.
  • مجازی سازی سطح پردازش- Process-level virtualization
تو این شرایط ماشین مجازی یک کاربرد (پردازش) رو اجرا میکنه. کاربرد باید برای اون ماشین مجازی نوشته بشه و این ماشین مجازی روی سیستم عامل اجرا میشه. برای مثال ماشین مجازی java از این نوع مجازی سازی هست. این روش خوبی هایی هم داره، مثلا اینکه باعث میشه برنامه نوشته شده بتونه راحت روی چندین سیستم اجرا بشه. 
  • مجازی سازی سطح سیستم عامل-OS  virtualization
توی این روش، عملا ماشین مجازی خودش میشه یه پردازش لایه کاربر. به این معنی که در عوض شبیه سازی سخت افزار، لایه هسته برای چند برنامه سطح کاربر مثل یه هسته جداگانه سرویس میده. تو این روش بین چند سیستم عامل مهمان یک هسته مشترک وجود داره و برنامه های اون سیستم عامل مهمان مستقیما روی اون هسته اجرا میشه. برای این روش از OpenVZ و jails میشه استفاده کرد.
تو بخش بعدی در مورد انواع روشهای مجازی سازی سطح سیستم صحبت میکنیم.
۰ موافقین ۰ مخالفین ۰ ۲۳ اسفند ۹۳ ، ۱۵:۱۷
حامد شیخلو