Введение в технологии виртуализации

Технология и методы программирования Введение в технологии виртуализации

Помечено: 

  • В этой теме 0 ответов, 1 участник, последнее обновление 2 месяца, 4 недели назад сделано Васильев Владимир Сергеевич.
Просмотр 0 веток ответов
  • Автор
    Сообщения
    • #6625
      @admin
      StudLance.ru

      Понятие виртуализации

      Термин «виртуализация» сильно перегружен, например, на момент написания этого текста наиболее популярные научные статьи по теме посвящены виртуализации общества и экономики. Очевидно, понятие виртуализации, используемое в тех статьях плохо подойдет для виртуальных машин, о которых мы будем говорить дальше, значит нам нужно свое определение:

      Виртуализация — это реализация на существующем программном и аппаратном обеспечении стандартизированного, внешне параметризуемого контекста исполнения, предоставляющее исполняемому приложению ожидаемое окружение и скрывающее сложности управления ресурсами, таким образом позволяя приложению сфокусироваться на решении задач характерных для предметной области моделируемого окружения.

      Эта картинка прекрасно поясняет определение, но чуть позже мы вернемся к нему еще раз, на примере конкретной программы. Мы — программисты, пишем программы, которые работают только в определенном окружении и использовать ресурсы. Ресурсы — это память (оперативная), процессор, файлы, сетевые соединения, базы данных, и т.п. Приложения на С++, Pascal и других компилируемых языках работают с ресурсами не напрямую, а через операционную систему. Например, операционная система дает вашему процессу набор страниц памяти — блок виртуальной памяти и делает так, что ваш процесс может смотреть на эту память как на цельный кусок. Подробнее про это можно узнать из доклада.

      Историческая справка

      Ниже приведены некоторые значимые моменты в развитии систем виртуализации, из которых ясно, что значение термина (и отношение к нему) менялось со временем. В частности, любую современную операционную систему можно назвать виртуальной машиной.

      • 1960-1970-е:
        • Супервизор применялся в Atlas (1960-е), выполнял разделение ресурсов компьютера между несколькими пользовательскими программами.
        • Концепция «виртуальной машины» от IBM (1960-1970-е) — «компьютер множественного доступа». Итог — многопользовательская ОС.
      • 2000-е:
        • VMware ESX Server — запуск виртуальной машины внутри «хостовой ОС»;
        • VMware GSX Server — запуск виртуальных машин, не требующий наличия хостовой ОС;
          Аналоги: Microsoft Virtual Server, Xen, Virtual PC.

      Виртуальная машина

      Виртуальная машина — это:

      1. программная среда, исполняющая некоторый код;
      2. полностью изолированный программный контейнер, способный выполнять собственную ОС и приложения как физический компьютер;
      3. программа, запускаемая в вашей ОС, эмулирующая работу реальной машины.

      Из этого понятно, что виртуальная машина должна исполнять программы, причем, эти программы не должны почувствовать что их исполняет не реальное железо. Значит, виртуальная машина должна эмулировать среду исполнения программы, т.е. создать контекст ее исполнения.

      Существует также понятие аппаратной виртуализации (аппаратной поддержка виртуализации) — это название разработок, направленных на улучшение производительности процессора для задач виртуализации. Режим поддержки виртуализации использует супервизор (прослойка между гостевыми ОС и оборудованием) — Intel VT-X, VT-D, AMDV.

      Виртуальная машина не должна эмулировать работу всего компьютера, а должна лишь создать контекст, достаточный для исполнения программы. Любая программа создается в ожидании определённого контекста. Например, рассмотрим простейшую программу, выводящую «hello world» на экран:

      #include <iostream>
      int main(int argc, char* argv[]) {
        std::cout << "Hello, world! \n";
        std::cin.get();
        return 0;
      }

      Что нужно чтобы исполнить эту программу (стоит промотать статью вверх и посмотреть еще раз на рисунок, где между приложением и окружением находится виртуальная машина и ресурсы):

      • устройсва ввода и вывода, причем устройство ввода должно уметь «получить символ», а устройство вывода — принимать (отображать) текст;
      • программа ожидает получить от исполняющей среды два аргумента — argv и argc, определенного типа;
      • программа возвращает исполняющей среде код ошибки (в данном случае — ноль), этот код должен быть интерпретирован определенным образом.

      Это далеко не полный список того, что входит в контекст исполнения этой программы, который обычно создает операционная система. Пример, как и некоторые другие идеи статьи взяты из этого курса.

      Важно понять, что контекст есть всегда. Если он есть в hello world, то в более крупных программах — тем более. Если программист пишет программу для персонального компьютера — то от malloc он ожидает получить «ноль» при ошибке выделения памяти, но когда он пишет под микроконтроллер — скорее всего он вообще не использует malloc, а если использует — но «ноль» может задавать вполне корректный адрес выделенного блока памяти.

      Цели и возможности виртуализации

      В результате чтения этой заметки должны сформироваться ответы на вопросы «Что можно считать виртуальной машиной?», «Что можно считать контекстом исполнения», «Зачем может применяться виртуализация?». Вот зачем:

      1. Повышение уровня доступности ресурсов: (1) на предметах типа «мобильное программирование» студенты могут работать в эмуляторах, значит нам не нужно покупать реальные устройства; (2) на предметах про сети — можно создавать виртуальные сети, т.е. запустить две/три гостевых машины в Virtual Box и настроить сеть между ними (сеть стала более доступной — как иначе дать ее индивидуально каждому студенту?); Можно придумать множество других примеров.
      2. Повышение безопасности:
        1. Изоляция гостевых ОС — студент пришел на занятие и запустил что-то в виртуальной машине (например, в Virtual Box). Можно не бояться что что-то сломается в основной (хостовой) системе.
        2. Улучшение системы восстановления — студент уходит с занятия, даже если он сломал что-то в гостевой системе — достаточно заменить файл образа виртуальной машины чтобы вернуть все в рабочее состояние.
        3. Не наносится ущерб реальному оборудованию: эмулятор Android — это только дешевле, чем реальное устройство, но его и сломать/украсть нельзя.
      3. Упрощает разработку (например, для массивно параллельных систем) — для программирования кластеров есть множество языков программирования — это не только малоизвестные Chapel или X10, но и вполне себе используемый в промышленной разработке Erlang. Виртуальные машины этих языков создают для программ определенный контекст исполнения. С плеч программиста сваливается гора проблем. Это касается не только языков параллельного программирования, а вообще всех интерпретируемых — Java, Python, JS, … — ведь Java-программисту не нужно думать, например, об освобождении памяти, а это уже некоторое соглашение (контекст).
      4. Возможность точно повторить среду выполнения программы. Это важно по двум причинам: (1) допустим, тестировщик тестировал программу, нашел ошибку (и может ее повторить), описал в баг-трекере. Однако, у программиста эта ошибка не повторяется. Проблема может быть в среде исполнения — например, программист использует Windows, а тестировщик — Linux, или они оба используют Linux, но разные дистрибутивы или … они используют разные версии Python (что угодно может отличаться). Программист исправит проблему если сможет ее повторить на своем компьютере — простейшее решение — использовать какой-нибудь Virtual Box и передать программисту образ тестировщика. (2) Если мы может точно повторить среду исполнения, значит мы можем использовать это для поставки приложений. Поставив приложение конечному пользователю внутри виртуальной машины мы гарантируем, что у него все запустится и будет работать также как у нас. Такая виртуализация называется контейнерной, самое распространенное решение — docker.
      StudLance.ru

Просмотр 0 веток ответов
  • Для ответа в этой теме необходимо авторизоваться.
×