Лекция
Привет, мой друг, тебе интересно узнать все про эмуляторы операционных систем, тогда с вдохновением прочти до конца. Для того чтобы лучше понимать что такое эмуляторы операционных систем, эмулятор операционной системы, виртуальная машина, виртуальные машины, виртуализация, контейнеризация, эмуляция, симуляция, эмулятор, симулятор, docker, wsl, паравиртуализация , wine , настоятельно рекомендую прочитать все из категории Операционные системы и системное программировние.
эмулятор операционной системы (computer Science) - функционирующее в некоторой целевой операционной системе и аппаратной платформе программное и/или аппаратное средство, предназначенное для исполнения программ, изготовленных в другой операционной системе или работающих на отличном от целевого аппаратном обеспечении, но позволяющее осуществлять те же самые операции в целевой среде, что и в имитируемой системе.
У процессов эмуляции и виртуализации очень много общего, но также присутствуют и заметные эксплуатационные различия.
Если клиенту необходимо работать с более старой операционной системой внутри современной технической архитектуры, он выберет исключительно вариант с эмуляцией.
В тоже время, все виртуализованные системы функционируют в независимости от используемого базового оснащения.
Суть эмуляции заключается в том, что одна система технически может имитировать другую.
Пример – если структура ПО работает в системе А, но не в системе В, мы создаем внутри системы В эмуляцию работы системы А. Вследствие этого, ПО спокойно работает на эмуляцию системы А.
Данный пример можно перенести и на виртуализацию, которая, помимо системы А. разделена еще на 2 выделенных сервера (В и С).
Оба сервера являются независимыми техническими контейнерами, обладающими персонализированным доступом к программным ресурсам – ОЗУ, ЦП и хранилищам памяти – их можно свободно перезагрузить независимо друг от друга. Их «поведение» всецело идентично поведению настоящего программного оборудования.
Каждая технология имеет свои преимущества и недостатки.
На рисунке ниже представлено визуальное представление архитектурного различия между виртуальными машинами и контейнерами:
Рисунок 1. В виртуализации компьютеров гипервизор или монитор виртуальных машин (VMM) обеспечивают изоляцию между каждой гостевой ОС. В контейнерах операционная система хоста обеспечивает изоляцию между каждым контейнером.
Разница в архитектуре предлагает следующие ключевые предложения для ИТ-персонала и предприятий:
Для организаций, ориентированных на DevOps, которые сосредоточены на более быстрых и непрерывных циклах выпуска распределенных функций приложений на основе микросервисов, контейнеризация будет по-прежнему привлекать инвестиции, особенно в тех областях, где не удалось обеспечить виртуализацию.
Применительно к вышеописанному примеру, эмуляция выступает особым «заполнителем» для аппаратного обеспечения – создание особой технической среды, которая функционирует в аппаратном порядке.
Эмуляция может иметь особый эффект при таких пользовательских сценариях:
Также процессы эмуляции полезны при создании некоторого ПО для нескольких систем одновременно. Процесс написания программного кода может выполняться на одной машине, а процесс эмуляции на нескольких операционных системах (все функционирует одновременно и без явных сбоев).
Виртуализация — предоставление набора вычислительных ресурсов или их логического объединения, абстрагированное от аппаратной реализации, и обеспечивающее при этом логическую изоляцию друг от друга вычислительных процессов, выполняемых на одном физическом ресурсе.
Примером использования виртуализации является возможность запуска нескольких операционных систем на одном компьютере: при том каждый из экземпляров таких гостевых операционных систем работает со своим набором логических ресурсов (процессорных, оперативной памяти, устройств хранения), предоставлением которых из общего пула, доступного на уровне оборудования, управляет хостовая операционная система — гипервизор. Также могут быть подвергнуты виртуализации сети передачи данных, сети хранения данных, платформенное и прикладное программное обеспечение (эмуляция).
Паравиртуализация (англ. Paravirtualization) — техника виртуализации, при которой гостевые операционные системы подготавливаются для исполнения в виртуализированной среде, для чего их ядро незначительно модифицируется. Операционная система взаимодействует с программой гипервизора, который предоставляет ей гостевой API, вместо использования напрямую таких ресурсов, как таблица страниц памяти. Код, касающийся виртуализации, локализуется непосредственно в операционную систему. Паравиртуализация таким образом требует, чтобы гостевая операционная система была изменена для гипервизора, и это является недостатком метода, так как подобное изменение возможно лишь в случае, если гостевые ОС имеют открытые исходные коды, которые можно модифицировать согласно лицензии. Но зато паравиртуализация предлагает производительность почти как у реальной не виртуализированной системы. Как и при полной виртуализации, одновременно могут поддерживаться многочисленные различные операционные системы. Метод паравиртуализации позволяет добиться более высокой производительности, чем метод динамической трансляции.
В компьютерных науках полная виртуализация — это технология, используемая для предоставления определенной виртуальной среды, которая обеспечивает полное симулирование базового оборудования. Любое программное обеспечение, которое может работать на базовом оборудовании может быть запущено в виртуальной среде, как правило любая операционная система должна выполняться без проблем в виртуальной среде, при условии, что она работает на базовом оборудовании. Другие типы платформенной виртуализации позволяют выполняться в виртуальной среде только некоторому или модифицированному программному обеспечению.
Пример полной виртуализации реализован в управляющей программе IBM CP/CMS ОС. Она впервые продемонстрирована в исследовательской системе IBM CP-40 в 1967-м году, затем она предоставлялась с открытым исходным кодом в CP/CMS 1967—1972 гг и была внедрена в линейку VM с 1972 до настоящего времени. Каждому пользователю CP/CMS была предоставлена имитация автономного компьютера. Каждая такая виртуальная машина имела все возможности базовой машины, и для своих пользователей виртуальная машина была ничем неотличима от реальной. Эта имитация была полной и основывалась на принципе оперативных инструкций к оборудованию. Таким образом она включает такие элементы как: набор инструкций, оперативную память, прерывания, исключения и устройства доступа. В результате получили систему, которая могла мультиплексировать много пользователей.
Полная виртуализация возможна исключительно при условии правильной комбинации оборудования и программного обеспечения. Например, она была невозможной ни в серии IBM System/360, за исключением IBM System/360-67, ни в ранних IBM System/370, пока IBM не добавила оборудование виртуальной памяти в своих System/370 в 1972 г.
Аналогичная ситуация и с платформой х86: полная виртуализация была возможна не в полной мере, до добавления технологий AMD-V и Intel VT(эти технологии ниже будут рассмотрены более подробно в пункте «Аппаратная виртуализация»). Много продуктов виртуализации для платформы x86 подошли вплотную и заявляли о полной виртуализации еще до реализации AMD-V и Intel-VT. Примеры включают такие решения как: ADEOS, Mac-на-Linux, Parallels Desktop для Mac, Parallels Workstation, VMware Workstation, VMware Server (бывший GSX Server), VirtualBox, Win4BSD и Win4Lin Pro.
VMware, например, использует технологию, называемую «бинарной трансляцией», для автоматического изменения ПО для x86 «на лету», для замены инструкций безопасными для виртуальной машины последовательностями инструкций. Эта технология предоставляет видимость полной виртуализации.
Ключевой задачей полной виртуализации является перехват и симуляция привилегированных операций, таких как инструкции ввода-вывода. Эффект выполнения каждого процесса, запущенного в определенной виртуальной машине, должен быть сохранен только в пределах этой виртуальной машины — нельзя допустить, чтобы виртуальные процессы изменяли состояние других виртуальных машин, управляющей программы или оборудования. Некоторые машинные команды могут быть выполнены непосредственно на оборудовании, поскольку их результаты целиком содержатся в элементах, управляемых управляющей программой, таких как память и арифметические регистры. Но другие инструкции, нельзя разрешать выполнять напрямую, — они должны быть перехвачены и симулированы. Это инструкции к доступу или изменению статической информации, которая находится за пределами виртуальной машины.
Полная виртуализация была успешно опробована для:
Цель изменения интерфейса заключается в сокращении доли времени выполнения гостя, отведенного на выполнение операций, которые являются существенно более трудными для запуска в виртуальной среде по сравнению с не-виртуальной средой. Паравиртуализация предоставляет специально установленные обработчики прерываний, чтобы позволить гостю (гостям) и хосту принимать и опознавать эти задачи, которые иначе были бы выполнены в виртуальном домене (где производительность меньше). Таким образом, успешная паравиртуализированная платформа может позволить монитору виртуальных машин (VMM) быть проще (путем перевода выполнения критически важных задач, с виртуального домена к хосту домена) и/или уменьшить общие потери производительности машинного выполнения внутри виртуального гостя.
Впервые термин виртуализациявозник в проекте Denali, а после того, как это слово применили исследователи из компьютерной лаборатории Кембриджского университета в проекте Xen, оно окончательно утвердилось в терминологии. Приставка «пара-» в слове термине ничего не обозначает, просто авторам данной идеи понадобился новый термин.
Самое главное преимущество виртуализации заключается в том, что она напрямую взаимодействует с аппаратным оборудованием.
К наиболее явным преимуществам такого способа взаимодействия с программными компонентами можно отнести:
К слову, между эмуляцией и виртуализацией спокойно можно поставить знак равенства, так как эти процессы помогают досконально проанализировать работу любого программного обеспечения.
Виртуализация серверов
Обычно под виртуализацией подразумевается размещение нескольких виртуальных серверов в рамках одного физического
Виртуализация ресурсов
Ресурсы — это оперативная память, жесткие диски, процессоры. Они также могут быть нарезаны и розданы по частям разным пользователям.
Виртуализация приложений
Виртуализация приложений — это то, что мы уже знаем как PaaS и SaaS
Основные методы виртуализации — это полная виртуализация и паравиртуализация. Схема обоих методов очень похожа. Есть гипервизор и виртуальные машины с гостевыми OS. При полной виртуализации в гостевую OS не вносятся никакие изменения. При паравиртуализации устанавливаются оптимизированные образы для определенного гипервизора. Это позволяет максимально использовать аппаратные ресурсы и не требует никаких изменений от приложений. Примером системы, реализующей полную виртуализацию, является VMware, пример паравиртуализации — Xen и KVM.
Еще выделяют несколько способов виртуализации:
Виртуализация уровня операционной системы
Особенностью является, что гостевая OS может быть только одна. Примером виртуализации на уровне OS является Linux-VServer:
При этом способе виртуализации VM полностью эмулирует работу определенного оборудования. С одной стороны, это дает возможность, например, на одном процессоре эмулировать другой тип процессора. С другой стороны, понятно, что при этом будет замедление работы в десятки раз. Пример эмулятора — это Bochs.
И для полноты картины добавлю эмуляцию библиотек. Это способ, при котором эмулируется не вся OS, а только часть. Например, Wine в Linux — эмуляция библиотек для Windows-приложений.
Получается, что мы можем виртуализировать разные системы разными методами. Т.е. видим, что существующими способами и типами виртуализации можно решить множество задач. Возникает логичный вопрос, когда же имеет смысл разворачивать облачную платформу?
Облачные платформы располагаются над набором виртуальных машин, полностью изолируют приложение как от железа, так и от структуры виртуальной среды. Облачные платформы используются для автоматичеcкого и ручного scale in / scale out, запуска / остановки / конфигурирования VM и приложений. Когда имеет смысл оставаться в виртуализации, а когда оставаться в облаке? Концепция следующая: когда всего много — облако, мало — виртуализация:
Далее мы и поговорим о виртуальных машинах и операционных эмуляторах, которые могут сослужить хорошую службу при выполнении тестирования, а также остановимся на их базовых преимуществах и недостатках.
VMWare Workstation – очень популярная и удобная в использовании виртуальная машина, использующаяся на профессиональной основе.
Преимущества продукта:
Недостатки:
Весьма распространенная виртуальная машина с приличным набором полезного технического функционала.
Преимущества:
Недостатки:
Данный продукт изначально позиционировался как прямая замена компонентам Microsoft Visual PC.
Преимущества:
Недостатки:
Специализированный продукт исключительно для компьютеров Mac, с помощью которой можно выполнить установку Windows.
Преимущество:
Недостатки:
Особая виртуальная машина, которая применяется на компьютерах Mac для взаимодействия с операционными компонентами Windows.
Преимущества:
Недостатки:
Специализированный эмулятор под операционную систему Android.
Преимущества продукта:
Недостатки:
Современный эмулятор операционный системы Андроид.
Преимущества:
Недостатки:
Интернет-эмулятор под операционные системы Android и iOS.
Преимущества:
Недостатки:
Специализированный эмулятор для операционной системы Андроид.
Преимущества:
Недостатки:
Конечно, этот список не можно считать завершенными. Выше были перечисленные исключительно наиболее ходовые продукты и их базовые характеристики, из которых при желании можно выбрать что-то стоящее.
В последнее время все больше используются системы контейнеризации, такие как Docker или Kubernetes. Они позволяют автоматически разворачивать подготовленные образы OS в основном для целей автоматического тестирования и для систем CI. Контейнеры очень похожи на виртуальные машины, но для них не требуется гипервизор, а только соответствующий движок:
Контейнеризация (виртуализация на уровне операционной системы, контейнерная виртуализация, зонная виртуализация) — метод виртуализации, при котором ядро операционной системы поддерживает несколько изолированных экземпляров пространства пользователя вместо одного. Эти экземпляры (обычно называемые контейнерами или зонами) с точки зрения пользователя полностью идентичны отдельному экземпляру операционной системы. Для систем на базе Unix эта технология похожа на улучшенную реализацию механизма chroot. Ядро обеспечивает полную изолированность контейнеров, поэтому программы из разных контейнеров не могут воздействовать друг на друга.
В отличие от аппаратной виртуализации, при которой эмулируется аппаратное окружение и может быть запущен широкий спектр гостевых операционных систем, в контейнере может быть запущен экземпляр операционной системы только с тем же ядром, что и у хостовой операционной системы (все контейнеры узла используют общее ядро). При этом при контейнеризации отсутствуют дополнительные ресурсные накладные расходы на эмуляцию виртуального оборудования и запуск полноценного экземпляра операционной системы, характерные при аппаратной виртуализации.
Существуют реализации, ориентированные на создание практически полноценных экземпляров операционных систем (Solaris Containers, контейнеры Virtuozzo, OpenVZ), так и варианты, фокусирующиеся на изоляции отдельных сервисов с минимальным операционным окружением (jail, Docker).
Таблица 1 Сравнение реализаций контениризации
Все равно, у виртуальных машин и эмуляторов есть свои сильные и слабые стороны, что не позволяет поставить знак равенства между ними и традиционными способами тестирования функциональности и работоспособности разрабатываемого программного обеспечения.
Для изоляции процессов, запущенных на одном хосте, запуска приложений, предназначенных для разных платформ, можно использовать виртуальные машины. Виртуальные машины делят между собой физические ресурсы хоста:
На каждой ВМ устанавливаем нужную ОС и запускаем приложения. Недостатком такого подхода является то, что значительная часть ресурсов хоста расходуется не на полезную нагрузку(работа приложений), а на работу нескольких ОС.
Альтернативным подходом к изоляции приложений являются контейнеры. Само понятие контейнеров не ново и давно известно в Linux. Идея состоит в том, чтобы в рамках одной ОС выделить изолированную область и запускать в ней приложение. В этом случае говорим о виртуализации на уровне ОС. В отличие от ВМ контейнеры изолированно используют свой кусочек ОС:
Т.о. приложение, запущенное в контейнере думает, что оно одно во всей ОС. Изоляция достигается за счет использования таких Linux-механизмов, как namespaces и control groups. Если говорить просто, то namespaces обеспечивают изоляцию в рамках ОС, а control groups устанавливают лимиты на потребление контейнером ресурсов хоста, чтобы сбалансировать распределение ресурсов между запущенными контейнерами.
Т.о. контейнеры сами по себе не являются чем-то новым, просто проект Docker, во-первых, скрыл сложные механизмы namespaces, control groups, а во-вторых, он окружен экосистемой, обеспечивающей удобное использование контейнеров на всех стадиях разработки ПО.
Образ в первом приближении можно рассматривать как набор файлов. В состав образа входит все необходимое для запуска и работы приложения на голой машине с докером: ОС, среда выполнения и приложение, готовое к развертыванию.
Но при таком рассмотрении возникает вопрос: если мы хотим использовать несколько образов на одном хосте, то будет нерационально как с точки зрения загрузки, так и с точки зрения хранения, чтобы каждый образ тащил все необходимое для своей работы, ведь большинство файлов будут повторяться, а различаться — только запускаемое приложение и, возможно, среда выполнения. Избежать дублирования файлов позволяет структура образа.
Образ состоит из слоев, каждый из которых представляет собой неизменяемую файловую систему, а по-простому набор файлов и директорий. Образ в целом представляет собой объединенную файловую систему (Union File System), которую можно рассматривать как результат слияния файловых систем слоев. Объединенная файловая система умеет обрабатывать конфликты, например, когда в разных слоях присутствуют файлы и директории с одинаковыми именами. Каждый следующий слой добавляет или удаляет какие то файлы из предыдущих слоев. В данном контексте «удаляет» можно рассматривать как «затеняет», т.е. файл в нижележащем слое остается, но его не будет видно в объединенной файловой системе.
Можно провести аналогию с Git: слои — это как отдельные коммиты, а образ в целом — результат выполнения операции squash. Как мы увидим дальше, на этом параллели с Git не заканчиваются. Существуют различные реализации объединенной файловой системы, одна из них — AUFS.
Для примера рассмотрим образ произвольного .NET приложения MyApplication: первым слоем является ядро Linux, далее следуют слои ОС, среды исполнения и уже самого приложения.
Слои являются read only и, если в слое MyApplication нужно изменить файл, находящийся в слое dotnet, то файл сначала копируется в нужный слой, а потом в нем изменяется, оставаясь в исходном слое в первозданном виде.
Неизменяемость слоев позволяет использовать их всеми образами на хосте. Допустим MyApplication — это веб-приложение, которое использует БД и взаимодействует также с NodeJS сервером.
Совместное использование проявляется также и при скачивании образа. Первым загружается манифест,
продолжение следует...
Часть 1 Эмуляторы операционных систем. Виртуализация, эмуляция, Контейнеризация ,симуляция
Часть 2 5.3 LXC (англ. Linux Containers) - Эмуляторы операционных систем. Виртуализация,
Часть 3 Недостатки Wine - Эмуляторы операционных систем. Виртуализация, эмуляция, Контейнеризация ,симуляция
Программное обеспечение для эмуляции и виртуализации
|
|||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Уровень приложений |
|
||||||||||||||
Уровень ОС (Контейнеры) |
|
||||||||||||||
Аппаратный уровень |
|
||||||||||||||
Виртуализация сетей |
|
Я хотел бы услышать твое мнение про эмуляторы операционных систем Надеюсь, что теперь ты понял что такое эмуляторы операционных систем, эмулятор операционной системы, виртуальная машина, виртуальные машины, виртуализация, контейнеризация, эмуляция, симуляция, эмулятор, симулятор, docker, wsl, паравиртуализация , wine и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Операционные системы и системное программировние
В чем разница между эмуляцией и симуляцией?
Вы хотите дублировать поведение старого калькулятора HP, есть два варианта:
Вы пишете новую программу, которая рисует дисплей и клавиши калькулятора, и когда пользователь нажимает на клавиши, ваши программы делают то же, что и старый калькулятор. Это симулятор
Вы получаете дамп прошивки калькулятора, затем пишете программу, которая загружает прошивку и интерпретирует ее так же, как микропроцессор в калькуляторе. Это эмулятор
Simulator пытается дублировать поведение устройства. Эмулятор пытается дублировать внутреннюю работу устройства.
Комментарии
Оставить комментарий
Операционные системы и системное программировние
Термины: Операционные системы и системное программировние