در این نوشته میخواهیم مفهوم مجازیسازی را در سیستمعامل بررسی کنیم. اول از همه باید با مفهوم انتزاع آشنا شویم. بعد بررسی میکنیم که چرا اصلا به مجازیسازی نیاز داریم. بعد از آن بررسی میکنیم که بهطور کلی در چه بخشهایی از سیستمعامل از مجازیسازی استفاده میشود.
انتزاع یا Abstraction
شاید انتزاع را بتوان یکی از مهمترین و قویترین مفاهیم در تمام کامپیوتر دانست. اما انتزاع چیست؟
هدف انتزاع راحتتر کردن کارها است. اما چطوری؟ فرض کنید من میخواهم ماشین جدیدی که به تازگی خریدهام را برای شما توصیف کنم در حالیکه خود ماشین در حال حاضر موجود نیست.
ماشین امکانات زیادی داره. موتورش قویه و توی شتابگیری حرف نداره! تازه فرمونش نرمه و ترمزهاش خیلی دقیق و سریع عمل میکنه
توی این چند جمله من سعی کردم ماشین را برای شما توصیف کنم، بدون اینکه خود واقعی ماشین را به شما نشان داده باشم. فقط گفتم امکانات زیادی دارد اما تک تک آپشنها را برای شما نام نبردم. فقط گفتم موتور قوی دارد، اما جزییات بیشتری از آن نگفتم، مثل اینکه چند اسب بخار است، چه گشتاوری دارد، چه ساختاری دارد و... . یا مثلا گفتم ترمزهاش دقیق است، ولی هیچ حرفی از مدل ترمزها، تکنولوژی به کار رفته در آنها و... نزدم.
اینجا من از یک سطح انتزاعی برای توصیف ماشینم استفاده کردم. یعنی مثلا به جای اینکه بگویم موتورش، یک موتور 4.5 لیتری و 8 سیلندر هستش که 380 اسب بخار قدرت دارد و گشتاوری حدود 450 نیوتون بر متر تولید میکند، فقط گفتم موتور قدرتمندی دارد!
انگار یک تصویرسازی انجام دادم و به جای کشیدن یک تصویر پیچیده از موتور ماشینم در ذهن شما، یک تصویر ساده و قابل فهم رسم کردم. تصویر یک موتور قدرتمند.
پس در نتیجه بهجای اینکه شما را با جزییترین خصوصیات موتور ماشین درگیر کنم، فقط به شما گفتم که موتور قدرتمندی است!
انتزاع در کامپیوتر
همین مسائل در کامپیوتر نیز هست. وقتی شما از کامپیوتر میخواهید برای شما عدد 2 را با عدد 3 جمع کند، دیگر کاری ندارید که سیستمعامل و CPU چطور به کمک یکدیگر این عملیات را انجام میدهند.
یا اگر یک بازی را برروی سیستم خود اجرا میکنید، دیگر کاری ندارید که کارت گرافیک و سیستمعامل چطور به کمک هم این کار را انجام میدهند. این همان مفهوم انتزاع است. جایی که شما فقط میدانید که کامپیوتر قرار است برای شما یک بازی را اجرا کند. اینکه کارت گرافیک، CPU، سیستمعامل و... چطور در کنار یکدیگر این کار را انجام میدهند، از دید شما پنهان میماند و شما تنها خروجی نهایی را میبینید. این باعث میشود که پیچیدگی کار با کامپیوتر برای شما کاهش یابد.
پس تا به اینجا با مفهوم انتزاع چه در دنیای واقعی و چه در کامپیوتر آشنا شدیم. حالا میخواهیم ببینیم اولا مجازیسازی چیست؟ و دوما چه جایگاهی توی سیستمعامل دارد؟
مجازیسازی چیست؟
اسم واضحی دارد! قرار است چیزی را مجازی کنیم. یعنی یک چیزی وجود واقعی دارد و ما میخواهیم آن را مجازی کنیم.
اجازه بدید با یک مفهوم آشنا مثل شبکه مجازی شروع کنیم:
در دنیای واقعی ما شبکه مردمی داریم. این شبکهها متشکل از گروهی از مردم هستند. مثلا افرادی که توی یک اداره کار میکنند، افرادی که توی سطح شهر با هم ارتباط دارند، یا افرادی که توی یک دانشگاه در کنار یکدیگر کار علمی میکنند و... . همه اینها یک سری شبکه واقعی از جوامع مردمی هستند.
اما یک مفهومی هم داریم به اسم شبکه مجازی. که باز هم توی آن گروهی از مردم با هم در ارتباط هستند. مثل یک گروه تلگرامی که افرادی توی یک گروه با هم در ارتباط هستند و به یکدیگر پیام میدهند. همه اینها یک سری شبکه مجازی از جوامع مردمی هستند.
یعنی بهجای اینکه گروهی از مردم هر روز بهصورت واقعی در یک مکان حضور پیدا کنند و با یکدیگر تبادل نظر کنند، در یک فضای مجازی (Virtual) این کار را انجام میدهند. این فضا اصطلاحا این توهم را ایجاد میکند که آنها در حال تعامل واقعی و مستقیم با یکدیگر هستند.
پس با سه اصطلاح انتزاع، مجازیسازی و توهم آشنا شدیم.
مجازیسازی در کامپیوتر
در کامپیوتر نیز پیچیدگیهای سختافزار بسیار زیاد است. اگر قرار باشد هر پراسس حواسش به تمام جزییات سختافزار باشد، یک عمل ساده در کامپیوتر بسیار زمانبر میشود. برای راحتی کارِ پراسسها از مجازیسازی استفاده میشود. اما چگونه؟
وقتی چندین پراسس بهصورت همزمان در کامپیوتر در حال فعالیت هستند، این نکته خیلی مهم هستش که حافظه و توان پردازشی به میزان مورد نیازشان موجود باشد.
سیستمعامل این وظیفه را دارد که برای هر پراسس درون حافظه RAM مقداری حافظه اختصاص دهد. همچنین شرایطی را بوجود بیاورد که پراسسهای مختلف بتوانند از CPU استفاده کنند.
اما چند مسئله مهم وجود دارد. این مسائل وقتی بوجود میآیند که چندین پراسس بهصورت همزمان در حال اجرا هستند. یکی از این مسائل مربوط به RAM است. اینکه هیچ پراسسی نباید بتواند محتویات آن تکه حافظه RAM مربوط به بقیه پراسسها را ببیند. البته باید حواسش باشد دیتایی اگه قرار توی حافظه بنویسد، روی اطلاعات بقیه پراسسها ننویسد و اطلاعات بقیه را نابود کند.
کاربرد مجازیسازی و انتزاع دقیقا همینجاست!
برای حل این مشکلات، سیستمعامل شرایطی را برای پراسس بوجود میآورد که نیاز نباشد درگیر این جزییات شود. مثلا برای مشکل حافظه: سیستمعامل مقداری از حافظه را تحت عنوان حافظهمجازی (Virtual Memory) به هر پراسس اختصاص میدهد. سپس به پراسس میگوید تمام کارهایت را در اینجا انجام بده. پراسس دیگر ازین به بعد نگران این نیست که دیتای خود را در کجا مینویسد. چون سیستمعامل این قسمت را بهصورت اختصاصی در اختیار آن پراسس قرار داده است. در اصل برای آن پراسس این توهم ایجاد شده است که تمام فضای RAM برای آن است و نیازی نیست که از بین رفتن و یا مشاهده اطلاعات دیگر پراسسها فکر کند.
همین توهم نیز در رابطه با CPU و I/O برای هر پراسس ایجاد میشود. یعنی این توهم برای هر پراسس ایجاد میشود که CPU و I/O همواره در اختیار او هستند.
- ۹۹/۰۷/۲۸