На днях в офисе Imagination Technologies в Санта-Клара, Калифорния ко мне подходит специалист по многоядерному Линуксу Леонид Егошин и говорит:
Егошин: Вот, написал самый маленький гипервайзер в мире.
Я: Да? А как называется?
Егошин: Еще не придумал. И маркетинг названия не спустил. Придумай название! Это все равно будет opensource-проект.
Я: Мне чего-то трудно такое придумать. Как говорится «как вы яхту назовете, так она и поплывет». Надо общественность спросить.
Егошин: И я еще в апреле в Долгопрудном буду, в МФТИ. Не был там с XX века. Есть ли там кто-нибудь, кого интересует MIPS-Linux/IoT/гипервизоры на MIPS?
Я: Ну об этом тоже можно спросить общественность.
Итого, я написал этот пост, чтобы спросить общественность. Но сначала я расскажу, кто такой Леонид Егошин и что такое гипервайзер.
***
Не вся молодежь знает, но в СССР был свой Unix. Не при Брежневе, но уже при Андропове.
И вот одним из первых советских юниксологов и был Егошин (он единственный на фотке на Красной Площади 1980-х, кто улыбается). Потом Егошин переехал в Silicon Valley и стал работать в MIPS Technologies, которая стала Imagination Technologies. На снимке справа Егошин уже в 2015 году, с первой привезенной в Америку из России платой с российским микропроцессором Байкал-Т — Егошин помогал отлаживать на ней Линукс:
А теперь что такое гипервайзер.
Гипервайзер — это такая программа, которая управляет работой двух или более операционных систем, которые выполняются на процессоре одновременно внутри виртуальных машин. Софтверу внутри виртуальной машины кажется, что ему принадлежит вся реальная машина, все ее порты ввода/вывода, память и прерывания.
Виртуализация — это следующий шаг после kernel / user mode (режима ядра / пользовательского режима). В kernel/user парадигме операционная система защищает себя от пользовательских программ и пользовательские программы друг от друга. Привилегированный режим ядра включается, когда во время выполнения пользовательской программы происходит прерывание. Тогда ОС смотрит, что произошло, и может переключится на выполнение другой пользовательской программы. В случае виртуализации поверх kernel/user включаются еще и режимы root/guest для защиты нескольких guest операционных систем друг от друга и разделения между ними ресурсов. Этим занимается гипервайзер в режиме root:
https://www.imgtec.com/mips/architectures/virtualization/
Виртуализацию не следует путать с виртуальной памятью. Виртуальная память может существовать и без виртуализации. В парадигме виртуальной памяти ОС/kernel управляет аппаратно-поддерживаемой таблицей трансляции виртуальных адресов, используемых пользовательскими программами, в физические адреса в памяти. Тем самым ОС создает иллюзию владения адресным пространством с одинаковыми виртуальными адресами у нескольких пользовательских программ, хотя физические адреса у них могут быть разные. В случае виртуализации у таблицы трансляции виртуальных адресов появляется следующий уровень, для создания иллюзий не только у пользовательских программ, но и у guest операционных систем.
Виртуализация бывает нескольких видов, в том числе пара-виртуализация, когда необходима модификация операционных систем, которыми управляет гиперайзер, и полная виртуализация, с аппаратной поддержкой, когда управляемые гипервайзером ОСы могут вообще не чувствовать присутствие гипервайзера.
Вообще виртуализация как технология появилась более 40 лет назад, она была уже у IBM-овских мейнфреймов IBM/370 (но не IBM/360). В СССР виртуализация использовалась на ЕС ЭВМ, которые были аналогичны соответствующим IBM/370. Виртуализация была даже отражена в американской поп-культуре — некий стартап в художественной книжке времен первого интернет-бума 1990-х «Первые 20 миллионов долларов самые трудные» занимался в частности виртуализацией Apple Mac на сверхдешевых $300-долларовых PC (тогда это считалось фантастикой). Кстати, фильм, снятый по роману, оказался оказался одним из самых больших провалов в истории Голливуда, заработав всего $5,491 (пять тысяч с чем-то долларов) при потраченных $17 миллионах (см.)
Но вернемся к Егошину. Гипервайзер Егошина работает на процессорном ядре MIPS M5150. Это экономичное ядро, которые используется для микроконтроллеров Microchip PIC32MZ и для чипов для интернета вещей.
«О зачем на микроконтроллере виртуализация?!» — может воскликнуть читатель. Для секьюрити. Даже на небольшом чипе для IoT могут одновременно работать скажем встроенный Линукс и скажем очень защищенный код для работы с финансовыми транзакциями. Теперь если пользователь установит взломанную операционную систему, она не сможет получить доступ к другой ОС, выполняющей критические операции, потому что между двумя ОС стоит гипервайзер. Это становится особенно важно в случае интернета вещей, когда подброшенный в домашнюю сеть утюг или тостер может теоретически обмениваться информацией с главным компьютером хозяина.
Егошинский гипервайзер может работать вот на такой плате Digilent chiKIT WI-FIRE:
А теперь предоставим слово Леониду:
Юра, основные сведения про hypervisor:
Память — 35Kilobyte code, 24KB data
Real-time values —
1. Basic hypervisor call (HYPCALL): 74 clock cycles
2. Force context switch to root and back: 336 clock cycles
3. Emulation of guest access to a guarded device register: 207 clock cycles
4. SW IRQ injection timing, no context switch: 173 clock cyclesОбщие устройства в совместном доступе, эмулируемые как собственные для каждого Guest:
- PIC32MZ Interrupt controller в EIC моде.
- Console UART.
- Read-only регистры типа clock etc. Минимальный размер регистрового блока — 16байт.
В настоящий момент поддержка только PIC32MZ(EF) модели, её Interrupt controller и устройства — плата, которую можно купить недорого.
Конфигурация статическая, при помощи десктоп Python скриптов, которые делают пересчеты адресов расположения Guest-ов и их IRQ в таблицы для TLB (PTE) и управления прерываниями. В конце конфигурации все превращается в один .srec файл, который можно засунуть в PIC32MZ при помощи программы pic32prog от Вакуленко.
UPD: Доплнительно, свежая ссылка на актуальность проблемы (вирус в банкоматах) — https://www.gazeta.ru/tech/2017/03/20/10584965/atm_virus.shtml#page2
В общем если у вас есть хорошее название для гипервайзера или желание пересечься в МФТИ во время визита Леонида Егошина в альма-матер в апреле, вы можете либо ему писать на Leonid.Yegoshin@imgtec.com, либо оставлять здесь комментарии.
***
Справка из Википедии про фото слева:
Скрытый текстhttp://ru.wikipedia.org/wiki/%D0%94%D0%95%D0%9C%D0%9E%D0%A1Примерно в 1982—1983 годах копии операционной системы UNIX (v6 и v7) были привезены в Москву. На их основе в Институте атомной энергии им. И. В. Курчатова, при участии ряда специалистов других организаций, проводилось приспособление системы к местным условиям — локализация на русский язык и адаптация к отечественной технике, прежде всего — к машинам СМ-4 и СМ-1420. В то же время локализация проводилась в Институте повышения квалификации Минавтопрома, там новая система называлась «МНОС» (Машинно-Независимая Операционная Система). Позже две команды объединились, а система была переименована в «ДЕМОС» (Диалоговая Единая Мобильная Операционная Система). В 1985 году была выпущена версия 2.0 ОС Демос (с использованием исходных текстов BSD4.2). Проект закрыт в начале 1990-х.
Разработчики ДЕМОС были награждены в 1988 году премией Совета министров СССР по науке и технике.
Авторы Валерий Бардин, Сергей Аншуков, Вадим Антонов, Алексей Руднев, Сергей Рыжков, Николай Саух, Дмитрий Володин, Сергей Вакуленко, Михаил Коротаев, Павел Ходаков, Андрей «ache» Чернов, Михаил Паремский, Сергей Усиков, Леонид Егошин, Михаил Давидов, Михаил Флёров и др.
Автор: YuriPanchul