Технологii вiртуалiзацii: вчора, сьогоднi, завтра

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

якомусь ii мiii одне-СФдине звернення в память спровокувало таку довгу i складну процедуру свопу даних у фiзичнiй памятi i на жорсткому диску.

РЖншi популярнi застосування P-прапора вiртуальноi памятi дозволяють реалiзовувати, примiром технiку меппiнга файлiв на память. Меппiнга - це коли програма за технологiСФю, аналогiчноi технiки свопiнгу, вiдображаСФ за запитом програми той або iнший файл у простiр вiртуальних адрес програми. Тобто можна домогтися того, щоб читання з елементу памятi # 13323658 виливалася б у автоматичне читання якого-небудь файлу program.data з позицii 3446. Це, по-перше, дуже зручно (файл не потрiбно читати або писати - вiн вже доступний програмi у виглядi звичайного масиву або набору масивiв), по-друге, дуже швидко (виробляСФться лише мiнiмально необхiдний набiр дiй по завантаженню або записи даних), а по-третСФ, дуже ефективно (файл автоматично кешуСФться в оперативнiй памятi, невживанi сторiнки з цього кеша автоматично ж прибираються, звiльняючи фiзичну память, при збереженнi зберiгаються тiльки дiйсно змiнилися фрагменти файлу, а не все пiдряд, i т. п.). Хоча з-за обмежень порiвняно вузького доступного програмi, яка працюСФ пiд управлiнням 32-бiтних версiй Microsoft Windows, вiртуального простору в 2-3 Гбайт, i дуже громiздкою i незручною реалiзацii даноi технiки засобами Win32 API, використовуСФться вона досить рiдко.

Бiльш складний приклад, вповнi вiртуальну память: реалiзацiя систем з нiбито загальною памяттю в системах, де ця память спочатку роздiльно. Наприклад, у рiзних компютерах, зСФднаних за допомогою локальноi мережi (у загальному випадку - у кластерах). РЖдея подiбних систем полягаСФ в тому, щоб при зверненнi програми з вiртуального адресою, вiдповiдного чужий памятi, викликати оброблювач, який згенеруСФ звернення по мережi до чужоi машинi, отримавши яке, ця машина виконаСФ потрiбну операцiю з памяттю i поверне первiсноi машинi вiдповiдь, який вiдобразиться в програмi. У результатi можна добитися такого ефекту, що у декiлькох фiзично абсолютно рiзних компютерiв для програм вiртуальна память буде перетинатися, або взагалi повнiстю збiгатися.

Це i СФ суть вiртуальноi памятi - користувальницька програма нiколи не може з упевненiстю стверджувати, що ховаСФться за абстрактним вiртуальним адресою. Ми можемо як завгодно дурити ii, здiйснюючи за ii спиною пiдтасування з реальними адресами, i домагатися з цiСФю допомогою найрiзноманiтнiших ефектiв. Втiм, про це ми поговоримо в наступному роздiлi. А поки - перерахуСФмо основнi i бiльш затребуванi переваги вiртуальноi памятi:

  • Вiртуальна память маСФ всi переваги сегментованоi.
  • Але при цьому розмiри вiртуальноi памятi, видiленоi програмi, можуть як завгодно гнучко змiнюватися.
  • Вiртуальна память може фiзично розмiщуватися не тiльки в оперативнiй памятi, але i на жорсткому диску i навiть у Мережi.
  • Вiртуальна память не зобовязана бути безперервноi - ii можна нарiзати взагалi як завгодно, лише б це нам було зручно.
  • Можна задавати довiльне число пересiчних областей вiртуальноi памятi для рiзних програм, аж до того, що однi й тi ж данi будуть багаторазово вiдображенi в адресний простiр програми за рiзними адресами.
  • Вiртуальна память забезпечуСФ дуже гнучку багаторiвневий захист оперативноi памятi, що дозволяСФ вiдловлювати будь-якi помилковi дii програми.
  • РЖ не тiльки помилковi: в задачах налагодження додаткiв вiртуальна память дозволяСФ, наприклад, вiдстежити в будь-який момент таке налагоджувальноi подiя, як просте читання програмою того чи iншого адреси в памятi.

Мiнусiв у вiртуальнiй памятi всього два. По-перше, вона iстотно уповiльнюСФ роботу компютера (навiть проста трансляцiя вiртуальних адрес, якi не потрапили в TLB - дуже неквапливий заняття; обробка ж подii # PF - i зовсiм здатна зайняти сотнi тисяч тактiв процесора), а по-друге, - складна i абсолютно непрозора для рядового програмiста.

а) Паравiртуалiзацiя i бiнарна трансляцiя

Отже, як ми вже сказали, всi користувальницькi програми сьогоднi, фактично, працюють на вiртуальних компютерах - iм надаСФться якась узагальнено-стандартна середовище виконання з вiртуальною оперативною памяттю, i з цим вiртуальним компютером вони вiльно працюють, не замислюючись про те, якi реальнi фiзичнi ресурси за цiСФю вiртуальнiстю стоять. Центральна завдання операцiйноi системи - це пiдтримка цiСФi вiртуальноi реальностi та своСФчасне розподiл мiж цими вiртуальностi реальних апаратних ресурсiв. Сама операцiйна система теж живе на одному з вiртуальних компютерiв, але, на вiдмiну вiд всiх iнших мешканцiв компютера, володiСФ можливiстю свою (i чужi) реальностi змiнювати i спiввiдносити з фiзичними ресурсами компютера.

РЖ вже сама по собi подiбна можливiсть дозволяСФ, насправдi, реалiзовувати практично все, що завгодно, з користувацькими додатками. Примiром, потенцiйно можна взяти, зберегти стан програми на флешку, скопiювати на iнший компютер i продовжити виконання програми вже на iншому компютерi. Можна (потенцiйно) запускати в однiй i тiй же операцiйнiй системi як Windows, так i POSIX-додатки (Linux, Unix-системи) - достатньо вмiти створювати два типу вiртуальних компютерiв, щоб кожен додаток отримувало рiвно те середовище виконання, в якiй во