Пишем регистровую машину
Что-то давно я не писал в свой блог. Нужно исправлять данное недоразумение.
И сегодня в программе: регистровая виртуальную машину на языке Rust.
Введение
На написание собственной упрощенной версии меня вдохновили несколько статей с хабра, ссылки на них смотри в разделе Полезные ссылки.
Но для начала давайте определимся с терминалогией с помощью вики.
Виртуальная машина (VM, от англ. virtual machine) — программная и/или аппаратная система, эмулирующая аппаратное обеспечение некоторой платформы (target — целевая, или гостевая платформа) и исполняющая программы для target-платформы на host-платформе (host — хост-платформа, платформа-хозяин) или виртуализирующая некоторую платформу и создающая на ней среды, изолирующие друг от друга программы и даже операционные системы (см.: песочница); также спецификация некоторой вычислительной среды (например: «виртуальная машина языка программирования Си»).
В общем разработанная нами программа не является в полной мере виртуальной машиной, а скорее всего её стоит называть интерпретатором кода. Эти разбирательства в терминологии я оставляю на читателя.
Давайте теперь перейдём к определение стековой машины — в общем говоря их два вида: стековая и регистровая и исходя из названий можно понять, что стековая машина использует для расчёт стек, а регистровая регистры… Но это не совсем так, в основном стековая использует только стек, а вот регистровая может использовать регистры и стек. Но это опять же терминологические фишки.
Мы же в своей реализации будем использовать только регистровую модель.
Вроде определились со всеми важными аспектами и теперь можно перейти к примеру, на котором будем проводить тесты.
Тестовый пример
Наша задачка основана на Гипотезе Коллатца и звучит вот так:
В нашем же примере будем делать расчёт от единицы до миллиона и для интереса реализуем её на нескольких языках:
- для языка Python
- для языка Rust
- для нашей виртуальной машин, назовём её vm_asm
Также стоит уточнить, что реализацию будем делать наивную чтобы не мучится с оптимизацией, да и это не самоцель для данного поста.
Алгоритм нахождения длины цепочки
- start_value — начальное значение
- seq_length — длина последовательности
- установить значение start_value в 0
- цикл пока seq_length > 1
- если остаток от деления seq_length на 2 равен нулю, то:
- поделить с округлением вниз start_value на 2
- увеличить seq_length на 1
- иначе
- умножить start_value на 3 и прибавить единицу
- поделить с округлением вниз start_value на 2
- увеличить seq_length на 2
- если остаток от деления seq_length на 2 равен нулю, то:
Вы могли заметить, что в блоке с “иначе” мы делаем сразу два шага и вы будете правы. Это небольшая оптимизация, на которую я пошёл 🙂
Реализация на Python
На Python код будет выглядеть следующим образом:
Остаётся только перебрать все значения от 1 и до 1_000_000 включительно и выбрать максимально длинную цепочку, что можно сделать вот так:
Реализация на Rust
Реализация на языке Rust мало чем отличается от питоновского, лишь только синтаксис по другому выглядит и используется функция main .
Реализация на виртуальной машине
Приступим к самому интересному, а именно к коду для виртуальной машины.
Я буду полагаться на Intel-подобный синтаксис ассемблера, т.к. он намного привычнее выглядит чем от AT&T.
И да, программа будет на ассемблере, так как его опкоды с операндами намного легче парсить, чем любой императивный язык программирования.
Сначала произведём инициализацию регистров необходимыми значениями
Определим внешний цикл от for
И последующий за ней блок с “функцией”
Внутренний цикл while выглядит немного мудрено, но это по сути прямой перенос питоновского кода на ассемблер
Остаётся только выбрать максимальное значение цепочки и вывести на печать значение, если обход закончен
Реализация интерпретатора
Так как я не очень хочу реализовывать весь функционал какого-то процессора, то ограничимся небольшим набором команд, который нужен нам для решения задачки.
Исходя ранее написанного кода можно выделить следующий набор команд:
- mov #1, #2 — поместить значение из #2 в #1
- cmp #1, #1 — сравнить #1 и #2 и изменить регистровые флаги
- jg #1 — перейти к #1 если F1 равен 0
- jle #1 — перейти к #1 если F1 не равен 0
- jne # — переход к #1 если F2 равен 0
- jmp #1 — безусловный переход к метку #1
- inc #1 — увеличить #1 на единицу
- mod #1, #2 — деление модулю #1 на #2
- add #1, #2 — добавить #2 к #1
- mul #1, #2 — умножить #1 на #2
- shr #1, #2 — логический сдвиг вправо #1 на #2
- print #1 — вывести значение #1 в консоль
Здесь F1 и F2 два регистровых флага, о которых поговорим позднее.
Теперь давайте определимся с работой нашего интерпретатора, то есть с шагами которые он должен выполнить:
- Загрузить файл исходного кода
- Разобрать каждую строку на инструкцию
- Выполнить код
Давайте для начала определим сущность виртуальной машины
- указатель на выполняемую инструкцию ip , так называемый Instruction Pointer
- восемь 64-х байтовых регистра reg , так как много нам их и не надо
- вектор с опкодами приложения app , то есть наша программа
- хэшмап с метками label для реализации произвольного перехода к командам программы
- и два флага, так называемый Регистр Флагов, но в упрощенном виде
Для упрощения написания программы регистр флагов у нас представляется только двумя значениями, хотя всегда можно реализовать весь их набор.
Установку флагов F1 и F2 будем делать вот таким образом — при сравнении двух значений с помощью опкода cmp :
- если #1 больше #2, то F1 = 1 , иначе F1 = 0
- если #1 равен #2, то F2 = 1 , иначе F2 = 0
здесь #1 — первый операнд, #2 — второй операд.
Теперь можно определить перечисление с нашим набором команд
Теперь остаётся только описать скелет программы
Остаётся только реализовать два недостающих блока по парсингу и интерпретации кода.
Начнём с самой простой функции, а именно interp . Тут всё просто вытаскиваем инструкцию по ip из app и выполняем её, попутно увеличивая значение ip . После того как значение ip будет больше чем количества инструкций в app можно закончить выполнение.
В коде это выглядит вот так:
А теперь к коду инструкций, которые очень просты в реализации
Остаётся парсинг кода, который я разбил на несколько шагов:
- чтение всего файла
- парсинг меток для реализации переходов
- парсинг основного кода
Чтение файла и разбор на отдельные блоки реализуется в пару строк
Далее проходимся по списку инструкций и вычленяем из него метки
Осталось только преобразовать строковое представление инструкции в Opcode , но перед этим нужно определить пару вспомогательных функций
Ну и собственно парсинг инструкций
Вот и всё, наш интерпретатор готов, теперь можно перейти к тестам!
Тесты
На моей машине с процессором i5-8265U примеры выполняются за следующее время:
- rust: 176ms
- python: 9.83s
- vm_asm: 2.80s
В идеале нужно было произвести как минимум запусков по 10 для каждого примера и взять среднее, но это же не исследовательская работа!
Мы здесь чисто по фану собрались, а те кто хочет всегда смогут сами его провести.
Заключение
Вот так просто и незатейливо можно написать самую простой регистровый интерпретатор кода.
/dev/energy
Сайт о том, как стать программистом и как с этим жить потом
NGINX / PHP-FPM / Percona (MySQL) DB на виртуальной машине Ubuntu
Сегодняшняя статья будет посвящена подготовке рабочего места разработчика. А именно — установке и настройке LNMP-окружения на виртуальной машине в windows-среде. Всех заинтересовавшихся приглашаю под кат!
Сразу же возникает пара вопросов:
- Почему не взять готовый Denwer, XAMPP, Open Server?
- Зачем всё делать руками? Есть же Vagrant
Прежде, чем начать описание процесса, отвечу на эти вопросы по порядку.
1. В сети есть много готовых сборок веб-серверов, предназначенных для локальной разработки в windows-средах. Для начинающих разработчиков полезно использовать такие сборки, чтобы овладеть языком программирования и не заморачиваться с системным администрированием. Но очень скоро начинаются первые трудности:
- Большинство хостингов сейчас предлагают linux-среды для размещения сайтов. Соответственно, тут же начинаются проблемы с кодировкой, адресацией и прочим при переносе своего проекта из среды разработки на продакшн.
- Если первые проблемы устранены, то со временем возникает необходимость установки модулей PHP/Apache/NGINX для решения прикладных задач. При портировании с windows на *nix могут возникнуть проблемы с настройкой и поведением приложения.
- PHP 5.5 и выше не умеет работать с Windows XP и ниже
2. Автоматическая сборка сервера — это здорово, удобно, круто и даёт профит при указании в резюме Разумеется, гораздо легче собрать сервер при помощи того же Vagrant. Но проблема в том, что любая автоматизация без понимания всех стадий технического процесса очень быстро разваливается. Поэтому я расскажу о пошаговой сборке сервера руками, чтобы потом уже можно было говорить об автоматизации.
Шаг №0. Скачиваем дистрибутивы.
- VirtualBox для Windows [ скачать ] — выбирайте соответствующую разрядность для вашей операционной системы. Если Вы используете х64 систему и хотите установить x64 виртуальную машину, то необходимо проверить, что Ваш процессор имеет аппаратную поддержку виртуализации. Если это так, то в BIOS необходимо перейти к секции Processor и включить Intel Virtualization Technology (в некоторых системах может называться Virtualization Extensions) или AMD-V. После этого VirtualBox сможет работать с 64-разрядными виртуалками
- Дистрибутив Linux [ скачать ] — начнём с наиболее простого для изучения дистрибутива : Ubuntu Server 18.04 LTS. Вообще, я предпочитаю CentOS для работы, но его преимущества безопасности и строгости становятся его же минусами для изучения с нуля.
- Клиент для подключения через SSH — PuTTY
Шаг №1. Создаём виртуальную машину и устанавливаем ОС
После запуска программа VirtualBox встретит нас примерно таким окном:
В нём Вам нужно выбрать кнопку «Создать», по нажатию которой система выдаст диалоговое окно мастера создания виртуальных машин
Здесь нужно указать:
- Имя виртуалки (какое больше нравится)
- Выбрать тип ОС (нам нужна Linux)
- Выбрать тип серверного linux-дистрибутива (у наc Ubuntu Server)
- Указать объём доступной оперативной памяти. Тут нужно отталкиваться от требований проектов. Для скриптов при обучении с лихвой хватит 2 ГБ. Если на стадии обучения скрипты будут вылезать за лимит памяти, то что-то точно идёт не так. Можно указать и меньше, но для нашего проекта будет использоваться база данных MySQL, а она довольно прожорливая в плане RAM.
- Дать инструкцию на создание виртуального жёсткого диска. Нам вполне хватит 20 гигабайт для стартовых проектов.
По нажатию на кнопку «Создать», система выдаст ещё одно диалоговое окно — создания виртуального жёсткого диска

Указываем расположение, размер, тип (VDI) по умолчанию. Формату хранения я бы уделил больше внимания.
- Динамический жёсткий диск изначально занимает мало места на физическом носителе, но растёт по мере добавления файлов на виртуальную машину. Растёт он ровно до указанного при создании лимита.
- Фиксированный жёсткий диск на физическом носителе сразу занимает примерно тот же объём памяти, который выделяется ему при установке.
В чём же разница? В целях обеспечения стабильности работы системы лучше использовать виртуальные жёсткие диски фиксированного размера, т.к.
- Быстродействие ввода-вывода будет максимальным для виртуальных жестких дисков фиксированного размера, поскольку для файла не используется динамическое расширение.
- При расширении динамического жёсткого диска на физическом носителе может закончится пространство для хранения данных, что приведёт к сбою записи.
- Данные в файле не будут повреждены вследствие нехватки пространства на диске или прекращения подачи питания.

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

- Переходим в меню «Сеть» и выбираем тип подключения «Сетевой мост». При необходимости нужно указать сетевую карту, если у Вас их несколько. В данном варианте соединения адаптер выступает в роли моста между виртуальной и физической сетями. Со стороны внешней сети имеется возможность напрямую соединяться с гостевой операционной системой — это очень удобная опция.
- Переходим в меню «Носители -> Атрибуты -> Оптический привод» и кликаем на иконку компакт диска, чтобы выбрать наш скачанный образ на 0-вом шаге.
Вот теперь можно нажимать «ОК» и запускать виртуальную машину. При первом запуске начнётся установка ОС Ubuntu. Выбираем язык English, а на следующем шаге — Install Ubuntu Server.
Далее Вам будет предложено

- Выбрать язык ОС и временную зону.
Россия находится в Other -> Europe -> Russian Federation.
На шаге configure locales выбираем United States — en_US.UTF-8.
Раскладку клавиатуры (Keyboard layout) можно определить автоматически. - Указать сетевое имя (Hostname) — поставим UbuntuDev.
- Создать вторичного (после root — администратора) пользователя. Создадим пользователя developer с удобным паролем.
- Зашифровать пользовательский раздел — мы пока этого делать не будем
- Подтвердить временную зону сервера
- Разбить диск на разделы. О том, как Linux работает с диском можно прочитать здесь. А мы подробнее рассмотрим процесс разбиения на диски.

Сначала нам нужно выбрать ручное разбиение дисков — Manual
На скриншоте ниже система предлагает выбрать диск, на котором будет создана таблица разделов. Выбираем SCSI3 и на следующем шаге подтверждаем создание новой таблицы разделов.

![]()
В следующем диалоге выбираем пункт FREE SPACE
и создаём загрузочный раздел:
- Выбираем Create a new partition

- Указываем new partition size (например, 512 MB)

- Задаём type Primary

- Задаём location Beginning

- Выбираем опцию Mount point и нажимаем Enter -> Указываем mount point /boot


- Устанавливаем bootable flag в on
- Выбираем Done setting up the partition
Теперь создадим логические разделы для данных и файл подкачки (swap). Я рекомендую создать следующие логические разделы:
- /data — здесь у нас будут лежать скрипты и база данных. В больших системах стоит разделять эти вещи.
- /tmp — здесь будут накапливаться временные файлы
- /var/log — для больших систем стоит отделить раздел логов, чтобы он не мешал основной системе, но для нас это некритично.
Выбираем снова FREE SPACE -> Create a new partition. Укажем для раздела данных размер в 8 GB
Тип указываем Logical, location — beginning, Mount point -> Enter manually -> /data . В остальном всё по умолчанию. Заканчиваем создание, выбрав Done setting up the partition.
Точно также создаём раздел /tmp на 512 MB, указав в конце mount point /tmp.
Ещё 10 гигабайт выделим под корневой раздел ( «/» ) — там у нас будут храниться файлы БД.

У нас осталось около немного места. Выделим его под раздел подкачки. Для того, чтобы сделать это, на последнем шаге в пункте Use as выбираем значение swap area

В итоге должна получиться примерно следующая картинка
Разметка завершена, выбираем Finish partitioning and write changes to disk
Далее установщик предложит Вам указать настройки прокси-соединения. Если Вы не используете прокси, то просто пропустите этот шаг (Continue). Если же прокси есть, то заполните поля согласно настройкам Вашего прокси-соединения.

На следующем шаге Вам предложат выбрать автоматическую установку обновлений безопасности. Рекомендую оставить этот пункт в значении «No automatic updates», если Вы не уверены, что обновления не будут мешать Вам жить. Ведь каждое обновление потенциально приносит несовместимость с текущей системой.
Теперь установщик попросит указать пакеты, которые потребуется установить. Выбираем только OpenSSH Server (с помощью пробела). Остальное установим сами в нужных версиях.
Перед завершением установки Ubuntu попросит добавить системный загрузчик GRUB в главную загрузочную запись. Выбираем Yes и продолжаем.

На этом установка закончена. Система предупредит о том, что нужно вынуть (для нас — размонтировать) установочный диск. Это можно сделать из меню VitrualBox -> Настройки -> Носители -> Атрибуты -> Оптический привод.
Нажимаем Continue.
После перезагрузки в том самом окне GRUB выбираем Ubuntu для загрузки.

Система запросит логин и пароль. Входим под пользователем developer, которого мы создали в процессе установки. Мы внутри!
Шаг №2. Оптимизируем взаимодействие с ОС и устанавливаем пакеты.
Посмотрим, какой IP нам был присвоен с помощью команды

В моём случае это 172.20.4.14
Запустим ssh (если он не запускался) и добавим его к автозапуску

Теперь можно запустить скачанную на шаге №0 утилиту PuTTy и использовать её для соединения с сервером. Её интерфейс гораздо удобнее работы через VirtualBox.
PuTTy выглядит следующим образом:
Вводим полученный IP в поле Host Name (or IP address). Используем порт 22 — это порт для соединений SSH по умолчанию. Нажимаем Open.
Логинимся под пользователем developer. Теперь можно заниматься установкой нужных нам пакетов.
- NGINX — веб-сервер для обработки пользовательских запросов
- PHP-FPM. Для установленной мной версии Ubuntu 18.04 LTS актуальной версией PHP является 7.2.3
- Percona DB — форк движка MySQL. Более стабильный и производительный
Устанавливаем NGINX
В Ubuntu 18.04 LTS по умолчанию доступен NGINX версии 1.14 (на момент написания статьи), что вполне себе нормально по функционалу, поэтому можно ставить сразу из репозитория.
После установки можем проверить версию
Должно получиться что-то вроде
nginx version: nginx/1.14.0
Устанавливаем Percona DB
Мы будем устанавливать Percona версии 5.7, где InnoDB, как известно, уже умеет делать FullText индексы, а MyISAM уже и не нужен.
Скачиваем пакет репозиториев Percona
И устанавливаем его
Обновляем список репозиториев. Не забываем, что находимся под root-ом!
Теперь можно поставить пакет БД
В процессе установки система запросит пароль root-пользователя для БД
Устанавливаем PHP-FPM
Тут всё достаточно просто
Должно получиться
PHP 7.2.3-1ubuntu4.18 (cli) (built: Oct 28 2015 01:34:46)
Copyright (c) 1997-2018 The PHP Group
Заодно добавим PHP-FPM в автозагрузку командой
Обратите внимание на то, что в новых пакетах php-fpm может называться, например, php7.2-fpm.
Шаг №3. Настраиваем пакеты и их взаимодействие
Теперь мы можем приступить непосредственно к настройке установленных пакетов для того, чтобы начать работу.
Настраиваем NGINX
Веб-сервер NGINX многопоточен. Согласно документации NGINX количество дочерних процессов веб-сервера должно быть равно количеству ядер процессора в системе.
Давайте узнаем, сколько ядер процессоров есть у нас
На моей виртуальной машине доступно 1 ядро. Я отредактирую файл nginx.conf
И выставлю значение
В конец файла добавим ссылку на подключение директории виртуальных хостов
Сохраняем файл через Ctrl + O.
Если проект должен быть доступен через браузер, то нужно создать виртуальный хост, который будет обслуживать наш проект.
Создадим директорию проекта в разделе /data
Обратите внимание на то, какой пользователь выполняет процесс nginx. Это может быть и www-data (посмотреть можно в nginx.conf). Поэтому в командах выше можно заменить nginx на актуального пользователя.
Теперь создаём настройку для нашего виртуального хоста
Ниже я привожу код конфигурации виртуального хоста.
* \.(jpeg|ico|jpg|gif|png|css|js|pdf|txt|tar|gz|wof|csv|zip|xml|yml) <
access_log off;
try_files $uri @statics;
expires 14d;
add_header Access-Control-Allow-Origin *;
add_header Cache-Control public;
root /data/myproject.com/docs;
>
location @statics <
rewrite ^/(\w+)/(.*)$ /$2 break;
access_log off;
rewrite_log off;
expires 14d;
add_header Cache-Control public;
add_header Access-Control-Allow-Origin *;
root /data/myproject.com/docs;
>
# правила обработки PHP-скриптов
location
\.php$ <
root /data/myproject.com/docs;
proxy_read_timeout 120;
fastcgi_read_timeout 120;
try_files $uri $uri/ =404;
# внимательно смотрите на то, какое имя задано у сокета
# это можно узнать в настройках php-fpm
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
>
>
Активируем виртуальный хост
Если пользователь nginx существует, добавим пользователя nginx в группу www-data, чтобы NGINX мог получить доступ к сокету PHP
Настраиваем Percona
Любой MySQL движок использует файл /etc/my.cnf , но у Percona его по умолчанию нет.
Создадим его
Сохраним файл. Для того, чтобы применить более тонкие настройки, можно воспользоваться утилитой mysqltuner.
Зайдём на сервер MySQL. Пароль рута был задан при установке.
Посмотрим, что за пользователи созданы по умолчанию

Как видим, полно всего ненужного.
Удаляем пользователей, оставляя только root@localhost
Теперь создадим базу данных и пользователя для нашего PHP-приложения. Разумеется, пароль задаём свой.
Пользователь создан, права обновлены. Теперь можно будет спокойно соединяться с базой и работать с данными.
Настраиваем PHP
Зачастую нужно использовать PHP не только для генерации страниц, но и для выполнения команд из консоли.
При этом используются разные модули PHP и, как следствие, разные конфигурационные файлы. Для удобства сделаем один файл конфигурации и ссылки на него из модулей. Выполним поочерёдно команды
В файле /etc/php/fpm/php.ini находим параметры и вносим изменения
Шаг №4. Взлетит?
Теперь попробуем написать что-нибудь на PHP и проверить работоспособность результата нашей долгой работы.
Перейдём в директорию проекта
Создадим там простенький файл index.php с содержимым
Теперь пропишем привязку хоста к доменному имени. Если Вы работаете под Windows, то с правами администратора откройте файл
C:\Windows\System32\drivers\etc\hosts
и добавьте туда строчку
Разумеется, нужно заменить 172.20.4.14 на IP, выданный Вам сетью.
Сохраняем файл, открываем браузер и набираем myproject.com.

Если всё сделано правильно, то результатом будет вот такая картинка
Шаг №5. Работа с файлами
А какой прок от виртуалки, если нет возможности удобно работать с файлами на ней?
Можно подключить общий диск или смонтировать USB устройство. Но гораздо удобнее использовать Samba для коннекта между win и *nix.
Теперь нужно произвести настройки в файле /etc/samba/smb.conf . Добавляем в конец файла строки
Теперь нужно создать пользователя samba командой
указав при этом отдельный пароль для него.
Перезагружаем процессы samba

Теперь уже в windows в адресной строке проводника можно вбить наш IP
В результате мы увидим вот такую сетевую директорию 
Кликнув по ней правой клавишей, мы сможем подключить её как сетевой диск и работать напрямую через любимый редактор файлов или IDE.
Создание и настройка виртуальной машины в Oracle VM VirtualBox
С рассматриваемым инструментом вы сможете устанавливать и использовать различные операционные системы без их «чистой» установки на ваш компьютер. Основная платформа вашего ПК остается прежней, остальные вы сможете включать или отключать по необходимости.
Как скачать VirtualBox для Windows, macOS и Linux
Загрузите и установите программное обеспечение виртуализации Oracle VM VirtualBox. Инструмент доступен для операционных систем Windows, Linux, macOS и Solaris. Им поддерживаются процессоры x86 и AMD64/Intel64. С помощью VirtualBox вы сможете создавать в рамках своей текущей ОС виртуальные машины под управлением Windows (NT 4.0, 2000, XP, Server 2003, Vista, Windows 7, Windows 8, Windows 10), DOS/Windows 3.x, Linux (2.4, 2.6, 3.x and 4.x), Solaris и OpenSolaris, OS/2 и OpenBSD.

Создание виртуальной машины в VirtualBox

Для создания виртуальной машины нажмите кнопку «Создать», расположенную на панели инструментов программы под строкой меню. Я рассмотрю создание и настройку виртуальной машины на примере подготовки к установке 64-битной версии Ubuntu 19.04. В большинстве случаев этот процесс для других платформ отличается лишь незначительными деталями. Ранее я уже показывал, как установить Linux Mint в VirtualBox.

Укажите произвольное имя машины; тип операционной системы (Linux) и версию (Ubuntu 64-bit). Здесь и в дальнейшем в ходе работы мастера для перехода к следующему окну нажимайте кнопку «Далее».

Укажите объем выделяемой виртуальной машине оперативной памяти в мегабайтах. Предлагаемый ПО объем составляет всего 1024 МБ.

Для комфортной работы я бы порекомендовал выделить виртуальной машине как минимум 2048 МБ (2 ГБ) ОЗУ, а если позволяют ресурсы, то 4096 МБ (4 ГБ).

Создание виртуального жесткого диска в VirtualBox
Виртуальной машине необходимо выделить также и пространство жесткого диска. Из предлагаемых данным окном пунктов выберите «Создать новый виртуальный жесткий диск». Нажмите кнопку «Создать».

Если вы не планируете использовать создаваемый виртуальный накопитель с другими инструментами программной виртуализации, оставьте предлагаемый по умолчанию тип жесткого диска «VDI (VirtualBox Disk Image)».

Выберите «Фиксированный виртуальный жесткий диск», поскольку в большинстве случаев он работает быстрее.

По умолчанию вам предлагается создать виртуальный жесткий диск емкостью 10 ГБ.

Не рекомендую указывать объем менее 15 ГБ, поскольку современные операционные системы и программное обеспечение для них занимают достаточно много места. Нажмите «Создать».

Если виртуальная машина создана, на экране отобразятся ее основные параметры.

Настройка виртуальной машины в VirtualBox
Щелкните правой кнопкой мыши по значку виртуальной машины и выберите пункт «Настроить». Для включения некоторых настроек необходимо, чтобы был установлен пакет расширений Oracle VM VirtualBox Extension Pack.

В разделе «Общие», на вкладке «Disk Encryption» вы можете настроить шифрование диска и защитить его паролем. Для этого необходимо ввести новый пароль и подтвердить его во втором поле. Созданный пароль нужно запомнить, чтобы сохранить доступ. Здесь и в дальнейшем подтверждение изменений настроек виртуальной машины производится нажатием экранной кнопки «OK».

В разделе «Система» на вкладке «Материнская плата» вы можете поменять объем оперативной памяти и определить порядок загрузки.

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

На вкладке «Процессор» вы можете определить число ядер центрального процессора вашего компьютера, которые могут использоваться виртуальной машиной, а также предельную допустимую нагрузку на процессор. Рекомендую выделять не менее двух ядер. Решение о том, позволять ли виртуальной машине загружать процессор на 100% вы принимаете исходя из его производительности. На слабых и старых машинах лучше оставить предлагаемую по умолчанию настройку.

На вкладке «Ускорение» оставьте предлагаемые по умолчанию параметры. Их изменение необходимо вам лишь при полной уверенности, что они нужны для корректной работы устанавливаемой вами системы.

В разделе «Дисплей» на вкладке «Экран» вам предстоит указать объем выделяемой виртуальной машине видеопамяти. Для более качественного экранного изображения рекомендую выделять не менее 64 МБ. Здесь же настраиваются количество используемых мониторов и масштабирование. Есть возможность включить 3D-ускорение и 2D-ускорение видео.

На вкладке «Удаленный доступ» производится настройка сервера удаленного доступа. Возможно включение многопользовательского режима.

Для записи видео работы виртуальной машины необходимо включить соответствующую опцию на вкладке «Захват видео».

В разделе «Носители» оставьте все параметры без изменений. Они наилучшим образом автоматически определены VirtualBox.

В разделе «Аудио» вы можете выбрать используемые драйвер и контроллер звука. Как правило, вам достаточно просто убедиться, что программный инструмент правильно определил эти компоненты. При желании или необходимости вы можете отключить поддержку звука виртуальной машиной.

Раздел «Сеть» предназначен для установки параметров используемых в вашей системе сетевых адаптеров.

Включить поддержку виртуальной последовательных COM-портов компьютера вы можете в разделе «COM-порты».

Выбрать стандарт контроллера USB вы сможете в соответствующем разделе. Для этого вам необходимо знать, какие USB-разъемы предусмотрены в вашем компьютере (USB 1.1; 2.0; 3.0).

Вкладка «Общие папки» важна для вас, поскольку здесь вы можете определить те каталоги, которые станут использоваться виртуальной машиной совместно с основной системой вашего компьютера. Для добавления новой общей папки предусмотрена кнопка со стилизованным значком папки и знаком «+». Нажмите на нее.

В поле «Путь» вам будет предложено указать место на жестком диске, где располагается каталог.

Выбранные вами общие папки станут отображаться в списке.

Раздел «Интерфейс пользователя» позволяет вам определить, какие пункты станут отображаться в меню.

Используете ли вы VirtualBox или предпочитаете другие инструменты виртуализации?
Создание и настройка виртуальной машины в VirtualBox
С помощью бесплатной программы VirtualBox вы можете создать на своем компьютере виртуальную машину с другой гостевой операционной системой. Программа виртуализации VirtualBox создает виртуальные машины, в которые можно будет установить разные операционные системы: Windows, Linux, Mac OS X и т. д.
В Виртуал Бокс на ваш компьютер будет установлен как бы виртуальный компьютер с другой (или другими) операционной системой, которая никак не будет затрагивать основную ОС, установленную на вашем компьютере. При помощи данной программы, вы можете одновременно работать в двух разных операционную системах, например, в Windows и Linux Mint, или в Windows 10 и Windows 8.1.
В такой виртуальной операционной системе можно будет выполнять разные действия: учиться работать в новой ОС, тестировать новые версии Windows, пробовать в работе незнакомые программы, запускать устаревшие приложения, которые уже не работают в вашей системе и т. д. Вы можете делать с виртуальной (гостевой) операционной системой все, что угодно, без всякого риска для основной системы.
Для этого не нужно будет создавать новые разделы на жестком диске, и устанавливать туда другую ОС. Все, что необходимо для создания виртуальной машины, сделает программа VirtualBox.
Подробнее об установке программы VirtualBox и пакета дополнений можно будет прочитать здесь. Далее мы рассмотрим процесс создания виртуальной машины и ее настройку. Программа VirtualBox полностью русифицирована.
Создание виртуальной машины в VirtualBox
Для запуска процесса создания виртуальной машины, в главном окне программы VirtualBox, нажмите на кнопку «Создать».

В окне «Укажите имя и тип ОС», вам нужно будет ввести имя новой виртуальной машины, далее выбрать тип и версию операционной системы. Созданная виртуальная машина будет идентифицироваться по этому имени, поэтому я рекомендую делать понятные имена.
В данном случае, на моем реальном компьютере установлена Windows 10, а я хочу установить на виртуальную машину Windows 7. Для того, чтобы избежать путаницы между версиями (можно будет установить несколько одинаковых систем разных выпусков), я дал гостевой системе подробное понятное имя.

Можно будет установить виртуальную машину в экспертном режиме (все настройки будут сгруппированы в нескольких окнах), или в подробном режиме, который мы сейчас рассмотрим.
Программа VirtualBox рекомендует минимальный объем оперативной памяти для данной виртуальной машины. Вы можете выбрать самостоятельно необходимый объем памяти. Здесь следует придерживаться такой рекомендации: нельзя превышать размер выделенной памяти, который отмечен на шкале зеленым цветом, чтобы в итоге, не иметь проблем, с работой создаваемой виртуальной машины.
Виртуальная память — это часть физической памяти вашего компьютера, которая будет использоваться в виртуальной машине. Виртуальная память выделяется из распоряжения основной (хостовой) операционной системы для работы гостевой операционной системы на виртуальной машине. Выделенная оперативная память будет использоваться только при работе данной виртуальной машины.
На моем компьютере находится 8 ГБ оперативной памяти, поэтому я могу выделить виртуальной машине половину объема — 4 ГБ. Вы можете выбрать свой размер объема оперативной памяти, передвигая курсор по шкале, или ввести размер памяти в цифровом значении в МБ. В дальнейшем, при необходимости, вы можете изменить объем выделяемой оперативной памяти в настройках этой виртуальной машины.

На следующем этапе необходимо будет создать виртуальный жесткий диск, так как виртуальная машина не сможет работать без такого жесткого диска. Виртуальный жесткий диск — это файл специального типа, который хранится в файловой системе ОС вашего компьютера.
В данном окне на выбор предлагаются три варианта действий:
- Не подключать виртуальный жесткий диск — вы можете подключить виртуальный жесткий диск после создания виртуальной машины.
- Создать новый жесткий диск — будет создан новый виртуальный жесткий диск.
- Использовать существующий виртуальный жесткий диск — к виртуальной машине будет подключен ранее созданный виртуальный жесткий диск.
Программа VirtualBox сама рекомендует объем жесткого диска для конкретной операционной системы.
Для создания нового виртуального диска, нажмите на кнопку «Создать».

В следующем окне необходимо будет выбрать тип виртуального жесткого диска. Вы можете выбрать следующие форматы дисков (виртуальных контейнеров):
- VDI (VirtualBox Disk Image) — формат диска VirtualBox.
- VMDK (Virtual Machine Disk) — формат диска VMware.
- VHD (Virtual Hard Disk) — формат диска Microsoft.
- HDD (Parallels Hard Disk) — формат диска Parallels.
- QED (QEMU enhanced disk) — формат для QEMU/KVM.
- QCOW (QEMU Copy-On-Write) — формат для QEMU (qcow2).
Если для создания и запуска виртуальных машин вы будете использовать только программу VirtualBox, то тогда можно оставить выбор по умолчанию: формат VDI. Диски этого формата будут открываться в программе Виртуал Бокс.
Формат VMDK подойдет в том случае, если вы будете использовать виртуальную машину VMware Player, или VMware Workstation. Создав виртуальную машину в VirtualBox, выбрав тип виртуального диска VMDK, вы сможете в дальнейшем запустить эту виртуальную машину с установленной операционной системой, не только в VirtualBox, но и в другой программе производства VMware.
После выбора типа диска, нажмите на кнопку «Next».

Далее нужно будет выбрать формат хранения: динамический или фиксированный.
Файл динамического жесткого диска будет занимать небольшое место на физическом жестком диске вашего компьютера. По мере заполнения данными он будет увеличиваться в размере до предельного объема.
Файл фиксированного жесткого диска сразу займет весь объем виртуального жесткого диска.

В новом окне необходимо будет указать имя и размер файла виртуального жесткого диска.
В поле для имени нужно будет написать имя виртуального жесткого диска. Я всегда указываю понятные названия для виртуальных машин для того, чтобы у меня была возможность без труда отличить файлы виртуальных контейнеров друг от друга.
По умолчанию, все файлы виртуальной машины будут сохранены в профиле пользователя на диске «С» вашего реального компьютера. Я рекомендую поступить по-другому: создать в другом (не системном) разделе диска вашего компьютера специальную папку (у меня она называется Virtual Machines), в которой можно будет хранить файлы виртуальных машин.
Если файлы виртуальной машины будут храниться в профиле пользователя на системном диске, то в случае, переустановки операционной системы, созданные ранее виртуальные машины, будут потеряны. Вам необходимо будет заново создавать виртуальную машину, а затем устанавливать туда операционную систему.
Файлы, сохраненные на другом разделе жесткого диска, или на другом жестком диске, в случае переустановки системы будут сохранены. После установки на компьютер программы виртуализации (VirtualBox или VMware), нужно будет только подключить и запустить ранее созданные виртуальные машины с операционными системами.
Для выбора папки хранения виртуальных машин используйте иконку с кнопкой папки. В окне Проводника выберите диск и папку для хранения данных виртуальной машины.
Затем на шкале укажите объем виртуального жесткого диска в мегабайтах. Для этого перетащите ползунок на нужное место, соответствующее вашим потребностям. После выбора настроек, нажмите на кнопку «Создать».

Виртуальная машина создана. После этого откроется главное окно «Oracle VM VirtualBox Менеджер» с вновь созданной виртуальной машиной. В правой части окна вы можете ознакомиться с некоторыми параметрами виртуальной машины.

Теперь необходимо будет сделать дополнительные настройки перед установкой операционной системы на виртуальную машину.
Настройки виртуальной машины в VirtualBox
В главном окне VirtualBox выделите виртуальную машину (если их несколько), а затем нажмите на кнопку «Настроить» для входа в настройки этой конкретной виртуальной машины.
В разделе «Общие», во вкладке «Дополнительно» вам нужно будет выбрать папку хранения для снимков системы (очень полезная функция). По умолчанию снимки системы будут сохраняться в папке «Snapshost» в профиле пользователя на системном диске «С». Вы можете создать папку с таким именем в том месте, где вы храните файлы этой виртуальной машины, для того, чтобы не потерять снимки при переустановке системы.
Необходимо также будет выбрать общий буфер обмена для того, чтобы обмениваться данными между основной реальной операционной системой, и гостевой виртуальной ОС. На выбор предлагается несколько вариантов:
- Выключен — настройка по умолчанию.
- Из основной в гостевую ОС — вы можете перемещать информацию из основной системы в виртуальную ОС.
- Из гостевой в основную ОС — вы можете перемещать данные из виртуальной ОС в основную систему.
- Двунаправленный — данными можно будет обмениваться в обоих направлениях.
Есть смысл выбрать двунаправленный общий буфер обмена для наибольшего удобства при работе.
Далее включите функцию Drag’n’Drop для того, чтобы включить возможность перетаскивания данных из окна одной системы, в окно другой при помощи мыши. Здесь также будет лучше выбрать двунаправленный вариант.

В разделе «Система», во вкладке «Материнская плата» можно будет настроить порядок загрузки виртуальной машины. С помощью кнопочек со стрелками вверх и вниз, выберите последовательность загрузки виртуальной машины. Имеет смысл сделать первым загрузочным устройством оптический диск, с гибкого диска можно будет вообще снять галочку из-за неактуальности такого способа.
При выборе первым загрузочным устройством оптического диска, загрузка системы может произойти, как с реального дисковода вашего компьютера, куда будет вставлен загрузочный диск DVD с операционной системой, так и с образа диска, например, в формате ISO, который физически находится где-нибудь на диске вашего компьютера.
После применения новых настроек, не забывайте нажимать на кнопку «ОК».

Во вкладке «Процессор» вы можете включить дополнительные ядра, в том случае, если процессор вашего компьютера многоядерный.
В разделе «Дисплей», во вкладке «Экран» вы можете выбрать объем видеопамяти, которую будет использовать виртуальная машина. Здесь вы можете включить 2D (необходимо) и 3D (необязательно) ускорение.

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

Нажмите на «Пусто», в правой части окна напротив пункта «Оптический привод» нажмите на кнопку с изображением диска, а затем в контекстном меню выберите пункт «Выбрать образ оптического диска…». С помощью Проводника найдите на своем компьютере нужный образ операционной системы.

В разделах «Аудио», «Сеть», «COM-порты», «USB» можно оставить настройки по умолчанию, во многом эти настройки зависят от аппаратной части вашего компьютера.
В разделе «Общие папки» пока ничего нет, так как гостевая система еще не была установлена. Для функционирования общих папок понадобиться установка Дополнений для гостевой ОС (VirtualBox Guest Additions). Подробнее об установке системы в виртуальную машину, и об установке дополнений можно будет прочитать здесь.
В случае необходимости, вы можете изменить настройки для конкретной виртуальной машины на другие. Для каждой виртуальной машины все настройки индивидуальны.
Далее можно будет приступить к установке операционной системе на виртуальную машину VirtualBox.
Удаление виртуальной машины в VirtualBox
Для удаления виртуальной машины, в главном окне Виртуал Бокс нужно будет войти в меню «Машина», а потом выбрать пункт контекстного меню «Удалить».
Далее откроется окно с вопросом. Вы можете удалить все файлы виртуальной машины, или убрать виртуальную машину из списка виртуальных машин в VirtualBox.

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