Чем отличается виртуальный тракт от физического
Перейти к содержимому

Чем отличается виртуальный тракт от физического

  • автор:

Адреса памяти: физические, виртуальные, логические, линейные, эффективные, гостевые

Мне периодически приходится объяснять разным людям некоторые аспекты архитектуры Intel® IA-32, в том числе замысловатость системы адресации данных в памяти, которая, похоже, реализовала почти все когда-то придуманные идеи. Я решил оформить развёрнутый ответ в этой статье. Надеюсь, что он будет полезен ещё кому-нибудь.
При исполнении машинных инструкций считываются и записываются данные, которые могут находиться в нескольких местах: в регистрах самого процессора, в виде констант, закодированных в инструкции, а также в оперативной памяти. Если данные находятся в памяти, то их положение определяется некоторым числом — адресом. По ряду причин, которые, я надеюсь, станут понятными в процессе чтения этой статьи, исходный адрес, закодированный в инструкции, проходит через несколько преобразований.

На рисунке — сегментация и страничное преобразование адреса, как они выглядели 27 лет назад. Иллюстрация из Intel 80386 Programmers’s Reference Manual 1986 года. Забавно, что в описании рисунка есть аж две опечатки: «80306 Addressing Machanism». В наше время адрес подвергается более сложным преобразованиям, а иллюстрации больше не делают в псевдографике.

Начнём немного с конца — с цели всей цепочки преобразований.

Физический адрес

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

Конечный результат?!

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

Эффективный адрес

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

Например, для инструкции (ассемблер в AT&T-нотации)

addl %eax, 0x11(%ebp, %edx, 8)

эффективный адрес операнда-назначения будет вычислен по формуле:

eff_addr = EBP + EDX * 8 + 0x11

Логический адрес

Без знания номера и параметров сегмента, в котором указан эффективный адрес, последний бесполезен. Сам сегмент выбирается ещё одним числом, именуемым селектором. Пара чисел, записываемая как selector:offset , получила имя логический адрес. Так как активные селекторы хранятся в группе специальных регистров, чаще всего вместо первого числа в паре записывается имя регистра, например, ds:0x11223344.

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

Линейный адрес

Эффективный адрес — это смещение от начала сегмента — его базы. Если сложить базу и эффективный адрес, то получим число, называемое линейным адресом:

lin_addr = segment.base + eff_addr

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

Реальный режим

Описанное выше верно при включенной сегментации. В 16-битном реальном режиме смысл селекторов другой, они хранят только базу, а преобразование не осуществляет сегментных проверок. Фактически, обозначения CS, DS, FS, GS, ES, SS имеют совершенно разный смысл в этих двух режимах, что добавляет путаницы.

Сегментация была модной на некотором этапе развития вычислительной техники. В настоящее она почти всюду была заменена другими механизмами, и используется только для специфических задач. Так, в режиме IA-32e (64-битном) только два сегмента могут иметь ненулевую базу. Для остальных четырёх в этом режиме всегда линейный адрес == эффективный.

Что такое виртуальный адрес?

В литературе и в документации других архитектур встречается ещё один термин — виртуальный адрес. Он не используется в документации Intel на IA-32, однако встречается, например, в описании Intel® Itanium, в котором сегментация не используется. Можно смело считать, что для IA-32 виртуальный == линейный.
В советской литературе по вычислительной технике этот вид адресов также именовался математическим.

Страничное преобразование

Следующее после сегментации преобразование адресов: линейный → физический — имеет множество вариаций в своём алгоритме, в зависимости от того, в каком режиме (32-битном, PAE или 64-битном) находится процессор.

Что влияет на paging

Примечательно, сколько различных бит из разных системных регистров процессора влияют на процесс страничного преобразования в настоящее время. Я просмотрел свежую сентябрьскую редакцию Intel SDM [1], и вот полный список: CR0.WP, CR0.PG, CR4.PSE, CR4.PAE, CR4.PGE, CR4.PCIDE, CR4.SMEP, CR4.SMAP, IA32_EFER.LME, IA32_EFER.NXE, EFLAGS.AC.

Однако общая идея всегда одна и та же: линейный адрес разбивается на несколько частей, каждая из которых служит индексом в одной из системных таблиц, хранящихся в памяти. Записи в таблицах — это адреса начала таблицы следующего уровня или, для последнего уровня — искомая информация о физическом адресе страницы в памяти и её свойствах. Самые младшие биты не преобразуются, а используются для адресации внутри найденной страницы. Например, для режима PAE с размером страниц 4 кбайт преобразование выглядит так:

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

Гостевой физический

До введения возможностей аппаратной виртуализации в процессорах Intel страничное преобразование было последним в цепочке. Когда же на одной системе работают несколько виртуальных машин, то физические адреса, получаемые в каждой из них, приходится транслировать ещё один раз. Это можно делать программным образом, или же аппаратно, если процессор поддерживает функциональность EPT (англ. Extended Page Table). Адрес, раньше называвшийся физическим, был переименован в гостевой физический для того, чтобы отличать его от настоящего физического. Они связаны с помощью EPT-преобразования. Алгоритм последнего схож с ранее описанным страничным преобразованием: набор связанных таблиц с общим корнем, последний уровень которых определяет, существует ли физическая страница для указанной гостевой физической.

Полная картина

Я попытался собрать все преобразования адреса в одну иллюстрацию. В ней преобразования обозначены стрелками, типы адресов обведены в рамки.

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

Заключение

Эволюция, что в природе, что в технике — странная вещь. Она порождает неожиданные структуры, необъяснимые с точки зрения рационального проектирования. Её творения полны атавизмов, правила их поведения иногда почти полностью состоят из исключений. Для того, чтобы понять работу такой системы, часто требуется прокрутить её эволюцию с самого начала, и под нагромождениями всех слоёв найти истину в виде принципа: «ничего не выбрасывать». Я склонен считать архитектуру IA-32 замечательным примером эволюционного развития.

P.S. Всё как у всех

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

  1. Virtual: Translated by dynamic address translation (DAT) to real addresses
  2. Real: Translated to absolute addresses using the prefix register
  3. Absolute: After applying the prefix register
  4. Logical: The address seen by the program (this can either be a virtual or a real address)
  5. Physical: translated to absolute addresses by the Config Array

Как можно заметить, их тоже пять.

Спасибо за внимание!

Литература

  1. Intel Corporation. Intel® 64 and IA-32 Architectures Software Developer’s Manual. Volumes 1–3, 2014. www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

Что такое виртуальный путь и чем он отличается от физического

Author24 — интернет-сервис помощи студентам

Что такое облако и чем отличается от VPS?
Стоит ли заказать: ОБлако https://www.constant.com/cloud/dedicated_cloud/ или VPS.

Что такое кэш второго уровня? на что он влияет? чем отличается DDR2 и DDR3? какой процессор лучше.
Помогите разобраться в ноутбуках. Ноутбук мне нужен для работы в основном в Adobe Photoshop CS5.

Что такое .pasp файл и чем он отличается от обычного .asp?
Добрый день, Что такое .pasp файл и чем он отличается от обычного .asp? Насколько я понимаю, здесь.

Что такое визуальное программирование и чем оно отличается от обычного?
Что такое визуальное программирование и чем оно отличается от обычного?

320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058

Объясняю на двух пальцах: Например возьмем ваш солюшен. В корне создаем папку Hello. В эту папку добавляем картинку World.jpg . Виртуальный путь к этой картинке : ~/Hello/World.jpg. Но картинка же должна где-то лежать, правильно? А лежит она в проекте. Например так : C:\Users\mka\Documents\Visual Studio 2010\Projects\NameProject\NameProject\Hello\World.jpg. Так вот это физический путь. Думаю объяснил нормально.

Заблокирован

ну виртуальным часто называют компьютерный, возможно это графический, на мониторе путешествие Магеллана в пикселях несколько короче физического в милях, хотя не уверен

Заблокирован

ЦитатаСообщение от titans2011 Посмотреть сообщение

Объясняю на двух пальцах: Например возьмем ваш солюшен. В корне создаем папку Hello. В эту папку добавляем картинку World.jpg . Виртуальный путь к этой картинке : ~/Hello/World.jpg. Но картинка же должна где-то лежать, правильно? А лежит она в проекте. Например так : C:\Users\mka\Documents\Visual Studio 2010\Projects\NameProject\NameProject\Hello\World.jpg. Так вот это физический путь. Думаю объяснил нормально.

Titans2011 как я понял виртуальный-это всегда относительный или нет?путь https://www.cyberforum.ru/newr. &p=5543825 это тоже виртуальный?

320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058

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

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Чем отличается цветовой тон от цвета, и что такое контраст
Нигде нет четкого определения, да и все какие то физические определения, если можно простым языком.

Что такое виртуальный и относительный виртуальный адрес?
Прив. Хочу разобрать одну программку, дизассемблировал ее и начал разбиратся. При помощи API.

Чем физический путь отличается от виртуального?
Чем физический путь отличается от виртуального? У меня возникло исключение:

Что такое виртуальный хостинг
ПАРАЛЕЛЬНЫЙ ВОПРОСб Что такое виртуальный хостинг и как его создавать, для чего он нужен:help:

Что такое абстрактный, виртуальный методы и интерфейсы
Что такое абстрактный, виртуальный методы и интерфейсы ? Вообще ничего не понял по этой теме

Виртуальный экран: установка разрешения экрана выше физического
Я не знаю, каким правильным термином называется сия фича, а потому назвал "виртуальный экран". .

Или воспользуйтесь поиском по форуму:

Что такое виртуальный хостинг
и как его правильно выбрать

На самом деле, виртуальный хостинг уже с гордостью может носить надстройку – классический виртуальный хостинг. Дело в том, что это одна из первых, а потому – самых бюджетных, простых и распространенных технологий для поддержки веб-проектов .

Что такое виртуальный хостинг

Что такое виртуальный хостинг

Виртуальный (shared) хостинг представляет собой физический сервер, ресурсы которого делятся между пользователями хостинга для поддержки их проектов. Нужно отметить, что принцип такого «деления» нередко зависит от того, какой объем ресурсов предлагает конкретный тариф виртуального хостинга от конкретного провайдера.

Например, masterhost предлагает профессиональные тарифные планы «Сервер на троих», гарантирующий вам 1/3 всех ресурсов физического сервера и «Сервер для себя», где все ресурсы физического сервера находятся в распоряжении одного клиента и его проектов.
Эти варианты не отличаются бюджетностью, зато порадуют мощностью и обеспечат высокую производительность.

Стоит ли выбирать бесплатный хостинг

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

В свою очередь, мы предлагаем, как мы смеем надеяться, хороший виртуальный хостинг на SSD стоимостью всего от 130 рублей в месяц, чтобы он был доступен каждому. Узнать обо всех наших предложениях больше Вы можете здесь:

Отличия VPS от виртуального хостинга

Многие начинающие пользователи задаются вопросом – что такое хостинг сайта на виртуальном выделенном сервере, чем он отличается от услуги виртуальный хостинг. Итак, давайте разберемся, чем отличаются виртуальный хостинг и виртуальный сервер.

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

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

Отличия VPS от виртуального хостинга

Еще одним преимуществом VPS мощно смело назвать гибкость настройки и масштабируемость : Вы можете регулировать предоставляемый Вам объем ресурсов, оперативно увеличивая или уменьшая его в зависимости от своих потребностей.

Получите больше информации о наших современных и надежных VPS-решениях .

Вывод

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

Если же речь идет о более требовательных проектах или даже IT-инфраструктурах , для их поддержки логичнее и эффективнее использовать VPS, чтобы быть уверенным в надежности и гибко масштабировать ресурсы.

Команда masterhost рада предложить Вам и мощные VPS-решения , и широкий выбор тарифов виртуального хостинга. Если возникнут проблемы с выбором – наша поддержка всегда может помочь по телефону 8-800-200-97-20 и электронной почте info@masterhost.ru.

Что такое виртуализация и для чего она нужна

У пользователей Linux или Mac иногда возникает потребность в запуске программ, работающих только в Windows, а у Windows-пользователей, особенно программистов, потребность в запуске Linux или другой версии Windows. Классический пример — игры или Photoshop.

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

Виртуализация

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

Виртуализация позволяет запускать операционную систему как обычную программу на вашем компьютере!

ОС, внутри которой стартует другая ОС, называется хост-системой, (host) а ОС, которая работает в виртуальном окружении — гостевой (guest).

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

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

Аппаратная виртуализация

Как ясно из названия, аппаратная виртуализация работает благодаря поддержке со стороны железа — процессора. В отличие от программной виртуализации, гостевые операционные системы управляются гипервизором напрямую без участия хостовой ОС.

Аппаратная виртуализация гораздо эффективнее программной, так как гипервизор, в отличие от хостовой ОС, создает очень небольшой оверхед (overhead, накладные расходы). Программная виртуализация, в свою очередь, делится на несколько подтипов, о которых подробнее можно прочитать в Википедии.

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

Особняком стоит так называемая контейнерная виртуализация. В отличие от предыдущих видов, она не связана с запуском ОС в изолированном окружении. При контейнерной виртуализации изоляция происходит на уровне процесса операционной системы.

На текущий момент такой вид виртуализации существует только в Linux и доступен благодаря двум возможностям ядра: cgroups и namespaces. Они позволяют запускать всего лишь один процесс так, как будто он выполняется в своем собственном мире, со своей сетью, своим диском, своей файловой системой и так далее. При таком виде виртуализации происходит запуск процесса в той же операционной системе и на том же ядре, а значит вы не можете с помощью нее в Linux запустить Windows. Эту виртуализацию применяют на уровне сервисов, составляющих части программного продукта. Наиболее известные проекты: OpenVZ, Docker, LXC.

Хостинг

Каждая виртуальная машина получит столько ресурсов, сколько вы укажете. Этим фактом особенно пользуются хостеры (компании, предоставляющие услуги веб-хостинга). Фактически на каждого пользователя создается своя собственная виртуальная машина с квотами, соответствующими выбранному тарифу (ограничения по памяти, процессору и так далее).

Кроме того, виртуализация изолирует машины друг от друга, а значит вам не придется переживать, если пользователи попытаются навредить системе или соседним пользователям. Подобная услуга обычно называется VPS (virtual private server) и в базовой комплектации стоит дешево.

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

Частые вопросы

Что делать если процессор не поддерживает виртуализацию?

Это крайне маловероятно, но даже в таком случае можно запустить виртуальную машину. Правда производительность будет очень низкой, так как по факту будет работать программная виртуализация вместо аппаратной. Лучше всё же обновить железо на более современное.

Другие гайды по теме

  1. Что такое Vagrant. Vagrant позволяет создавать и конфигурировать легковесные, повторяемые и переносимые окружения для разработки в виртуальных машинах.
  2. Как работать с Linux используя Windows. Инструкция по установке Ubuntu Linux внутри Windows с использованием различных технологий виртуализации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *