<aside> ❗
ворнинг: вполне возможно, что на данный момент какие-то аспекты затрагиваются недостаточно. например, на паре практически никакой инфы не было об инструментах, про которые я тут рассказываю. не думаю, что на зачете понадобится что-то кроме названия и понимания сути, но если вам кажется, что какой-то информации мало — жду фидбек
также везде понакидала ссылочек, если хочется прям погрузиться
</aside>
Много теории по этому билету есть в ОП:
Я опишу концепты, которых тут ⬆️ нет или их описание отличается от КК, а также конкретные инструменты, которые упоминались на паре
<aside> 🧿
Гипервизор
— программа, обеспечивающая работоспособность виртуальной машины (КК)
— is a type of computer software or hardware that creates and runs virtual machines (Wiki)
1 тип (native / bare-metal): работают непосредственно с аппаратными ресурсами без поддержки от host ОС
Примеры: Xen :)), HyperV, VMWare
2 тип (hosted): работают внутри host OS, являются для нее обычной программой.
Примеры: VirtualBox, QEMU, Parallels, KVM, VMWare, HyperV
</aside>
<aside> ⚙️
Bare-metal (голый металл 🥵) — характеристика ПО, указывающая, что оно работает поверх аппаратного обеспечения в обход ОС
</aside>
<aside> 🐇
Эмуляция / симуляция (на паре на этот вопрос, если я правильно помню, ответили не сразу, поэтому пусть будет)
Симуляция — процесс воссоздания отдельных функций, отличительных особенностей определенного объекта, необходимых в конкретных обстоятельствах
Эмуляция — полное воссоздание функциональности определенного объекта. В идеале объекты, взаимодействующие с эмулятором, не должны отличать его от эмулируемого объекта
ЯА как-то говорил, что эмулятор — это очень хороший симулятор
</aside>
<aside> 🪬
Полная виртуализация
— тип виртуализации аппаратного обеспечения, при котором виртуальный объект имеет все свойства реального, в частности: доступ ко всем необходимым живым ресурсам, набор внутренних команд, прерывания и т.д.
— Almost complete virtualization of the actual hardware to allow software environments, including a guest operating system and its apps, to run unmodified (Wiki)
Характеристики:
Обеспечение полной абстракции
Нет специфических требований к guest системе/программам — так как виртуализируемый объект эмулируется очень точно, все программы, умеющие взаимодействовать с реальным объектом, без проблем свяжутся и с виртуальным, их реализацию менять не нужно
Дорого <=> медленно — виртуальному объекту необходимо предоставить доступ ко всем ресурсам, обрабатывать его прерывания, в целом уделять ему много внимания. Получается серьезный трейд-офф приближенности к реальному объекту на время
Необходимо интерпретировать машинный код — на это тоже тратится время (особенно в случае прерываний)
Пример работы Qemu в режиме full:
┌─────┐
│ x86 ├───────────────┐
└─────┘ ┌───────▼───────┐ ┌─────────┐
┌─────┐ │ tiny code │ │ native │
│RISCV├───────► generator ├────►│ code │
└─────┘ │ │ │ │
┌─────┐ └───────▲───────┘ └─────────┘
│ ARM ├───────────────┘
└─────┘
<aside> 🌀
Паравиртуализация
— тип виртуализации аппаратного обеспечения, при котором виртуальный объект не взаимодействует с живыми ресурсами. Вместо этого обращение к ним происходит через специальный API гипервизора
— a type of virtualization where software instructions from the guest operating system running inside a virtual machine can use “hypercalls” that communicate directly with the hypervisor
Характеристики:
<aside> 📥
Контейнеры
— способ изоляции процессов на уровне ОС, то есть создание для каждого приложения отдельного юзерспейса. Приложения, таким образом, не могут взаимодействовать ни друг с другом, ни с приложениями host ОС
— a type of virtualization in which all the components of an application are bundled into a single container image and can be run in isolated user space on the same shared operating system
Можно таким образом запускать guest ОС, но только если они имеют то же ядро, что и host
</aside>
<aside> 🎻
Оркестранты (orchestrators) — ПО для управления виртуальными машинами и контейнерами. Умеют их запускать, изменять их мощность, следить за состоянием, при отказе — перезагружать
Примеры: Lima, VirtualManager, UTM, Vagrant, Multipass
</aside>
<aside> 🫀
Heartbeat
— сервис, ожидающий от guest системы регулярных ответов, подтверждающих, что она жива (КК)
— The heartbeat service allows the parent partition to detect when a virtual machine has locked up, crashed or otherwise ceased to function. The parent partition sends heartbeat messages to the guest operating system at regular intervals
</aside>
<aside> 🐕
Watchdog
— как и heartbeat, следит за жизнедеятельностью guest системы, но в случае смерти умеет убрать труп a.k.a. перезагрузить ВМ
</aside>
<aside> 💎
gem5 — симулятор архитектур компьютерных систем. Как правило, используется для изучения поведения процессоров и архитектур, можно исполнить что-то небольшое, вроде hello world, просимулировать поведение процессора на определенном наборе команд. Не ставит перед собой задачу контейнеризовать программу или исполнить программу для одной архитектуры на другой
</aside>
<aside> 📦
bochs (произносится “box”) — мощный эмулятор, поддерживающий функциональность процессора (а точнее, широкий ряд процессоров x86 архитектуры), BIOS, оперативной памяти, дисков, сети и другой периферии
Основная задача: создать достаточно точную виртуальную среду, чтобы приложению невозможно было определить, что его запускают виртуально
Используется для моделирования реальных систем. В частности, удобен для отладки ОС, так как ошибка может положить только guest ОС внутри bochs, а не вашу host систему целиком
</aside>
<aside> 📺
VT-x (virtualization technology) — технология виртуализации от Intel для платформы x86. Обеспечивает поддержку аппаратной виртуализации (оно же гипервизор 1го типа). По сравнению с программной виртуализацией, увеличивает скорость работы ВМ
</aside>
<aside> 🌳
Chroot — “контейнеризация для бедных”. Системный вызов, позволяющий создать директорию, похожую на root, и изменить корневую директорию процесса на нее. Таким образом, процесс не будет иметь доступа к файлам извне
Плюсы:
Минусы: таким образом получится контейнеризовать только файловую систему
</aside>