Виртуализуемость и многозадачность/многопользовательность

zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Flash-04 wrote:...кстати, раз уж разговор зашел, где можно посмотреть на спецификацию IBM процессора что стоит в этих мейнфреймах? на сайте IBM я не смог найти ничего вразумительного. про Интеловский Pentium сколько хочешь. Я хочу посмотреть в деталях что именно поддерживает IBM-ское железо, а то у нас беспредметный разговор получится.




IBM Systems > System z > Hardware

[url=http://researchweb.watson.ibm.com/journal/rd51-12.html]Journal of Research
and Development[/url]
User avatar
Tango
Уже с Приветом
Posts: 2099
Joined: 30 Jan 2004 07:55
Location: Orange County, CA

Post by Tango »

Хотите мое определение "виртуализуемости"?

Виртуализуемость OS ето способность выполнять эту OS в виде "задачи" внутри системы (например OS) более высокого уровня. Выполнять полностью - включая все ее аппликационные и привилегированные режимы (если те имеются).
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

zVlad, ну так что?
В последнем посте я писал что:

Добавив к системе команд IBM всего одну команду - GetCurrentProcessorMode(), мы разрушаем виртуализируемость, но не нарушаем МП/МЗ.

Либо опровергайте, либо соглашайтесь
Мячик на ваей стороне
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Dmitry67 wrote:zVlad, ну так что?
В последнем посте я писал что:

Добавив к системе команд IBM всего одну команду - GetCurrentProcessorMode(), мы разрушаем виртуализируемость, но не нарушаем МП/МЗ.

Либо опровергайте, либо соглашайтесь
Мячик на ваей стороне


Дмитрий, во-первых Вы забыли добавить что команда эта должна был непривилегированной. Во-вторых, объясните какое отношение к МЗ/МП/В имеет решение каким командам быть привилегированными а каким нет? Безусловно часть команд прямо становится привилегированными именно потому что мы хочем создавать МЗ/МП/В. В однозадачной среде нам может вообще не нужно ограничивать задачу, в многозадачной больше и т.д. Но вот что в творчестве Интел совсем не понятно так это команды, которые в разных режимах дают разный результат и не дают прерывания. Про такие команды на МФ я никогда не слыхал (см. ниже).

Узнать в каком состоянии выполняется код можно и без соответствующей команды. На МФ статус хранится в PSW - program status word и..... к моему удивлению команда extract PSW не привилегированная, что как известно не мешает МФ быть виртулизуемым 100%. Вот так, Дима, неожиданно для себя самого я Вам отвечаю. А начал я с того что статус можно узнать и без такой команды.
Кстати когда ОС на ВМ выполняет экстракт PSW команду то ей становится известно что она выполняется на ВМ. Опять же в современном МФ уже строго говоря нет классической реальной машины. Обязательно есть хотя бы одна партиция.

Заглянул в наш основополагающий документ:
z/Architecture Principles of Operation

и поразился как много изменилось с тех пор как я последний раз в серьез писал программы на Ассемблере. Оказывается уже есть и семи-привилегированные команды на МФ (см. выше).

Дима, а как насчет защиты памяти?
zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Flash-04 wrote:я уже не очень хорошо помню все детали, но что именно не нравится в команде POPF? они восстанавливает флаги из стека, за исключением специальных флагов, отражающих состояние 386-го в защищенном режиме. Насколько я помню, один из таких флагов - "работаю в виртуальном x86 режиме".


Не нравится то что эта команда не привилегированная. Не нравится не мне, а тем кто пытается виртуализовать Интел. Им приходится делать это методом ВТ.
zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Tango wrote:Хотите мое определение "виртуализуемости"?

Виртуализуемость OS ето способность выполнять эту OS в виде "задачи" внутри системы (например OS) более высокого уровня. Выполнять полностью - включая все ее аппликационные и привилегированные режимы (если те имеются).


Вы ошибаетесь - речь обычно идет о виртуализуемости машины, не ОС. С другой стороны Вы совершенно правы в том смысле что строго говоря такие виртуальные системы как VMware это системы виртуальных ОС, а не машин.
zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Dmitry67 wrote:zVlad, ну так что?
В последнем посте я писал что:

Добавив к системе команд IBM всего одну команду - GetCurrentProcessorMode(), мы разрушаем виртуализируемость, но не нарушаем МП/МЗ.

Либо опровергайте, либо соглашайтесь
Мячик на ваей стороне


С учетом сказаного мною выше Ваше утверждение не верно. Оно не верно даже не потому что МФ. В самом деле ну и что задача может узнать процессор моду? С другой стороны, как я намекал, это можно узнать и вовсе не обращаясь к такой команде.
Так что выкладываете аргументы (если они у Вас есть) Вашего утверждения, пока что Вы органичиваетесь голословными утверждениями.
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

zVlad, вы меня радуете. Вы написали "ну и что собственно что можно узнать моду процессора". Собственно, разработчики процессора Intel так и рассуждали. И Мотороллы. И заложили грабли для будущих поколений.

Итак, каким же образом эта команда разрушает виртуализируемость?

Приведу упрощенный пример. Я пишу ОС. Так как ядро ОС выполняется в режиме ядра, то попытка выполонения его в режиме пользователя говорит о фатальной ошибке. Поэтому я вставлю проверку в самом начале

Code: Select all

if (GetCurrentProcessorMode() == 1)
  die("Fatal error! Kernel can not be executed in user mode!");
остальной код ядра


Теперь запускаем мою ОС в виртуальной машине. Вот и грабли. Виртуальная машина должна имитировать настоящую, то есть в ней GetCurrentProcessorMode должно выдать 0. Но так как с точки зрения железа VM - лишь пользовательский процесс и выполняется в user mode, то выдаст 1, в результате чего моя OS благополучно выскочит на die
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Flash-04
Уже с Приветом
Posts: 63377
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Post by Flash-04 »

полностью согласен с Dmitry67. к примеру, когда OS (Win или Linux - не важно) стартует на x86, подготавливаются таблицы трансляций адресов, векторов прерываний (GDT, IDT) и процессор переводится в защищенный режим. Если процессор уже в защищенном режиме, то такая попытка вызовет исключение. С другой стороны, можно узнать, в каком режиме процессор и не пытаться переходить в защищенный режим, а вместо этого писать сообщение об ошибке и завершать приложение аварийно. Собственно что описал Dmitry67 выше.
zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Dmitry67 wrote:.....1. Собственно, разработчики процессора Intel так и рассуждали. И Мотороллы. И заложили грабли для будущих поколений.

Итак, каким же образом эта команда разрушает виртуализируемость?

2. Приведу упрощенный пример. Я пишу ОС. Так как ядро ОС выполняется в режиме ядра, то попытка выполонения его в режиме пользователя говорит о фатальной ошибке. Поэтому я вставлю проверку в самом начале

Code: Select all

if (GetCurrentProcessorMode() == 1)
  die("Fatal error! Kernel can not be executed in user mode!");
остальной код ядра


Теперь запускаем мою ОС в виртуальной машине. Вот и грабли. Виртуальная машина должна имитировать настоящую, то есть в ней GetCurrentProcessorMode должно выдать 0.

3. Но так как с точки зрения железа VM - лишь пользовательский процесс и выполняется в user mode, то выдаст 1, в результате чего моя OS благополучно выскочит на die


1. О чем думали разработчики Интел ни Вы ни я не знаем. Наверное хотели как лучше...

2. Дима, мы будем базировать нашу дискуссию на Ваших притянутых за уши примерах или на реальных ОС?
Реальной ОС не нужно узнавать свой статус - она его сама устанавливает и поэтому знает.

3. ВМ выполняется в проблемном режиме и поэтому привелигированные команды вызывают прерывание. Но монитор виртуальной машины однако умеет различать виртуальный режим "супервизора" и виртуальный режим "задача". Эта информация хранится в управляющих блоках монитора.
Если прерывание по привелигированной команде произошло в виртуальном режиме "супервизор", то монитор ВМ эмулирует такую привелигированную. Если в виртуальном режиме "задача", то монитор "отображает" прерывание на ОС ВМ и оставляет ей разбираться с нарушителем.
zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Flash-04 wrote:полностью согласен с Dmitry67. к примеру, когда OS (Win или Linux - не важно) стартует на x86, подготавливаются таблицы трансляций адресов, векторов прерываний (GDT, IDT) и процессор переводится в защищенный режим. Если процессор уже в защищенном режиме, то такая попытка вызовет исключение. С другой стороны, можно узнать, в каком режиме процессор и не пытаться переходить в защищенный режим, а вместо этого писать сообщение об ошибке и завершать приложение аварийно. Собственно что описал Dmitry67 выше.


Я вынужден Вас огорчить - причина Вашей солидарности с Димой проста - вы оба не знаете (я мог бы сказать не понимаете, но из того что вы оба говорите просто выпирает что вам не доводилось всерьез изучать ни одной виртуальной системы) как на самом деле работает виртуализация. Прерывание на ВМ - не фатальное событие, это лишь сигнал монитору ВМ (в VM называется CP - Control Program) для подключения к процессу и аккуратной эмуляции привелигированной команды. Для ОС ВМ это вообще остается не известным.
То что я сказал - это вовсе не наезд и не слабость моей аргументации, это просто более чем десятилетний опыт интенсивной работы с VM, включающий чтение лекций по VM, программирование на Ассемблере в VM, и сотрудничество с минским НИИЭВМ.
Но дискуссия продолжается, верно?
zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Flash-04 wrote:..... Такая аппаратная VM должна уметь эмулировать виртуальные процессоры в защищенном режиме, и вообще говоря - это сложно, т.к. для реализации такого нужен эмулятор - не меньше. У меня очень большое сомнение, что IBM это реализовала, слишком сложно. Скорее всего (хотя мне это и сложно проверить) z/OS - это именно "хорошая" система в плане того, что она пользуется API предоставляемый ядром системы и не пытается "администрировать" CPU сама.


Для этого не нужен эмулятор и ИБМ это реализовала еще в 1972 году.

z/OS имеет в своем составе ядро и предоставляет "API" приложениям. API в z/OS называются SVC программами (supervisor call), которыми пользуются приложения когда им нужен доступ к системным ресурсам: CPU, память, ввод-вывод. Пытаться делать это самим приложениям просто безполезно - ничего не получится ни при каких условиях и знаниях машины и системы. Для этого нужен статус "супервизор", который имеет только "ядро" системы. Поэтому и Supervisor Call - SVC. SVC -это машинная команда которая вызывает аппаратное прерывание (не переход, а именно прерывание) c кодом. Аппаратная же обработка этого прерывания вызывает аппаратное переключение статуса в "супервизор" и аппаратное переключение адреса выполнения на программу обработки SVC прерываний в ядре системы.

Строго говоря z/OS и VM (официальное название z/VM) - это очень разные системы. Образно можно показать эту разницу cказав что z/VM это система виртуальных машин на которых выполняются любые другие ОС МФ, в том числе z/OS, Linux, и z/VM. Да именно так, на ВМ в z/VM можно загружать и выполнять z/VM же и так пока не надоест.
ВМ в z/VM может вообще не иметь загруженной ОС, а использоваться как хранилище данных в памяти. Доступ к памяти такой машины осуществляется через специальный интерфейс. Можно на одну и туже машину загружать разные ОС без какой-либо пренастройки самой ВМ. Так часто и делают: сначала грузится CMS в ней запускается диалог для настройки загрузки z/OS и по окончании диалога загружается z/OS.
Для ускорения загрузки ОС на ВМ используются так называемые хранимые системы с разделяемыми сегментами памяти. Это когда на определенном этапе развертывания системы определенные участки памяти ВМ сохраняются на диске и затем, через загрузку хр. системы, быстро восстанавливаются в памяти. Участки памяти хр. системы которые могут использоваться одновременно многими ВМ (как правило это реентерабельный код) называются хранимыми сегментами и прадставлены в системе ВМ в точности одной копией. Что при наличии сотен и тысяч ВМ позволяет существенно экономить память процессора.
В z/OS использованы многие технологии виртуализации, правда на свой лад.
zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Flash-04 wrote:.... Такая аппаратная VM должна уметь эмулировать виртуальные процессоры в защищенном режиме, и вообще говоря - это сложно, т.к. для реализации такого нужен эмулятор - не меньше.....


Эмулируются только привелигированные команды. Все остальные команды выполняются реальным процессором "as is" все равно ка если бы это была обычная прикладная задача в многозадачной ОС. Эмуляция привелигированных команд "портит" производительность ОС ВМ.
Для улучшения производительности ВМ ИБМ ввело в архитектуру МФ ESA/390 interpretive-execution architecture, foundation for VM/ESA.

(кстати очень полезная статья в плане самообразования в области виртуализации).

Это было в 1991. Интел и AMD аннонсировали аналогичные архитектурные расширения в своих процессорах лишь недавно - в 2006, лишь пятьнадцать лет спустя (что вообщем-то не удивляет меня нисколько):

A comparison of software and hardware techniques for x86 virtualization

To help avoid the most frequent exits, x86 hardware assistance
includes ideas similar to the s/370 interpretive execution facility
discussed in Section 2.5.Where possible, privileged instructions affect state within the virtual CPU as represented within the VMCB,
rather than unconditionally trapping [24].
Consider again popf. A naive extension of x86 to support classical
virtualization would trigger exits on all guest mode executions
of popf to allow the VMM to update the virtual “interrupts
enabled” bit. However, guests may execute popf very frequently,
leading to an unacceptable exit rate. Instead, the VMCB includes a
hardware-maintained shadow of the guest %eflags register. When
running in guest mode, instructions operating on %eflags operate
on the shadow, removing the need for exits.
User avatar
Flash-04
Уже с Приветом
Posts: 63377
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Post by Flash-04 »

zVlad, все не так плохо как вы думаете ;)
Для этого не нужен эмулятор и ИБМ это реализовала еще в 1972 году.

z/OS имеет в своем составе ядро и предоставляет "API" приложениям. API в z/OS называются SVC программами (supervisor call), которыми пользуются приложения когда им нужен доступ к системным ресурсам: CPU, память, ввод-вывод. Пытаться делать это самим приложениям просто безполезно - ничего не получится ни при каких условиях и знаниях машины и системы. Для этого нужен статус "супервизор", который имеет только "ядро" системы. Поэтому и Supervisor Call - SVC. SVC -это машинная команда которая вызывает аппаратное прерывание (не переход, а именно прерывание) c кодом. Аппаратная же обработка этого прерывания вызывает аппаратное переключение статуса в "супервизор" и аппаратное переключение адреса выполнения на программу обработки SVC прерываний в ядре системы.

я вас удивлю, но 386 и выше работают точно так же :pain1:
то что вы описали постом выше - это описание "послушной" ОС, которая знает что все привелигированные команды - выделение страниц виртуальной памяти, изменение страниц дескрипторов и т.д. и т.п. делает не она, а стоящий в иерархии выше - т.н. виртуальный монитор. Так вот, полная виртуализация должна позволять выполняться и "непослушной" ОС, которая сама хочет быть виртуальным монитором и распоряжаться полностью ресурсами процессора, как Windows к примеру. Кстати, я не знаю, так ли все в ней плохо на самом деле, но скорее всего скорее плохо чем хорошо. То что вы описали - это режим виртуальной ОС, которая может выполнять виртуальный машины только с той же самой ОС, которая знает про виртуальный монитор и умеет им пользоваться. До полной виртуализации - это как до Луны. Но учитывая что нам не важен сам принцип добится полной виртуализации любой ценой, а нужно просто устойчивая работа многих экземпляров самой ОС без побочных конфликтов и падения производительности, то этот вариант - самый лучший.
Самое интересное, zVlad, что последние ваши посты окончательно меня уверили что "железо" IBM работает точно так же как Intel-овское.
User avatar
Flash-04
Уже с Приветом
Posts: 63377
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Post by Flash-04 »

выдалось таки время спокойно поискать, и вот что сразу нашлось:
http://en.wikipedia.org/wiki/Popek_and_ ... quirements
там же ссылка на "Analysis of the Intel Pentium's Ability to Support a Secure Virtual Machine Monitor"

там читаем:
Goldberg [12] identified the key architectural features
of third generation hardware pertinent to virtual machines:
* two processor modes of operation,
* a method for non-privileged programs to call privileged
system routines,
* a memory relocation or protection mechanism such
as segmentation or paging, and
*asynchronous interrupts to allow the I/O system to
communicate with the CPU.


All of these still apply to the Intel Pentium architecture.
It has four modes of operation, known as rings, or current
privilege level (CPL), 0 through 3. Ring 0, the most
privileged, is occupied by operating systems. Application
programs execute in Ring 3, the least privileged.
The Pentium also has a method to control transfer of
program execution between privilege levels so that nonprivileged
tasks can call privileged system routines: the
call gate. The Pentium also uses both paging and segmentation
to implement its protection mechanisms. Finally,
the Pentium uses both interrupts and exceptions to
allow the I/O system to communicate with the CPU. The
architecture has 16 predefined interrupts and exceptions
and 224 user-defined, or maskable, interrupts.
Despite these features, the ability of the Pentium architecture
to support virtualization is likely to be serendipitous
as the processor was not explicitly designed to support
virtualization.


With respect to the VMM hardware requirements listed
above, Intel meets all three of the main requirements for
virtualization.
Requirement 1: The method of executing nonprivileged
instructions must be roughly equivalent in
both privileged and user mode. Intel meets this requirement
because the method for executing privileged
and non-privileged instructions is the same. The only
difference between the two types of instructions in the
Intel architecture is that privileged instructions cause a
general protection exception if the CPL is not equal to 0.
Requirement 2:There must be a method such as a protection
system or an address translation system to protect
the real system and any other VMs from the active
VM. Intel uses both segmentation and paging to implement
its protection mechanism. Segmentation provides
a mechanism to divide the linear address space into individually
protected address spaces (segments). Segmentshave a descriptor privilege level (DPL) ranging from
0 to 3 that specifies the privilege level of the segment.
The DPL is used to control access to the segment. Using
DPLs, the processor can enforce boundaries between
segments to control whether one program can read from
or write into another program’s segments.
Requirement 3:There must be a way to automatically
signal the VMM when a VM attempts to execute a sensitive
instruction. It must also be possible for the VMM
to simulate the effect of the instruction. The Intel architecture
uses interrupts and traps to redirect program
execution and allow interrupt and exception handlers to
execute when a privileged instruction is executed by an
unprivileged task. However, the Pentium instruction set
contains sensitive, unprivileged instructions.
The processor
will execute unprivileged, sensitive instructions
without generating an interrupt or exception. Thus, a
VMM will never have the opportunity to simulate the
effect of the instruction.
After examining each member of the Pentium instruction
set, it was found that seventeen instructions violate
Requirement 3.
All seventeen instructions violate either
part B or part C of Requirement 3 and make the Intel
processor non-virtualizable. To construct a truly virtualizable
Pentium chip one must focus on these instructions.
They are discussed in more detail below.

вот это то, о чем мы с Dmitry67 толдычим уже много-много страниц подряд, что по большому счету Intel Pentium позволяет построить VMM, но с огрехами, т.к. некоторые инструкции - выполняются немного по разному в разных модах процессора, но исключение не генерят. Хотя я подозреваю, что эти авторы тоже для вас не авторитет :roll:
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Вот вот. Самое поразительное, что это было разжевано в той статье, которую сам же zVlad мне и подсовывал :pain1:

Согласен полностью с предыдущим оратором, такая "cooperative" виртуализация - вещь вполне хорошая, но мы говорим о полной, когда основная ОС заранее не знает, что под ней будет выполняться

Собственно, мой план доказательства был таков. Раз zVlad считает, что виртуализируемость = МЗ/МП, то докажем от противного, Intel он считает изначально ущербной архитектурой, чтоже, возьмем z и "испортим" ее, добавив всего одну "плохую" инструкцию.

Я преджил такую инструкцию G -- (GetCurrentProcessorMode()) и спросил zVlad - согласен ли он, что она не нарушает МЗ/МП, что было им безусловно подтверждено. Таким образом, z+G удовлетворяет МЗ/МП

Далее остался всего один шаг - доказать что z+G не удовлетворяет требованиям к виртуализации, что я и продемострировал, написав абстрактную ОС с if (getCurrnetProcessorMode == ... ну итд

Как известно, всего один отрицательный пример отпровергает утверждение. Всего один контрпример архитектуры процессора МЗ/МП но невиртуализируемый в лоб (даже абстрактный) опровергает утверждение о том что МЗ/МП=В. Это и было проделано

Поэтому

мы будем базировать нашу дискуссию на Ваших притянутых за уши примерах или на реальных ОС?


я рассматриваю как слив
Либо атакуйте шаги рассуждений, либо соглашайтесь
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

Dmitry67 wrote:я рассматриваю как слив
Либо атакуйте шаги рассуждений, либо соглашайтесь

Гостевую ось можно исполнять в режиме полной интерпретации. В этом случае можно гонять виртуализированную ОС, вообще на процессоре без защиты памяти.
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

KP580BE51 wrote:
Dmitry67 wrote:я рассматриваю как слив
Либо атакуйте шаги рассуждений, либо соглашайтесь

Гостевую ось можно исполнять в режиме полной интерпретации. В этом случае можно гонять виртуализированную ОС, вообще на процессоре без защиты памяти.


Безусловно вы правы, но мы самого начала исключили полную интерпретацию из рассмотрения. Очевидно, в режиме полной интерпретации можно сделать все - если только есть достаточно ресурсов. Просто будет очень долго
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

дел.
Last edited by KP580BE51 on 13 Jun 2007 10:18, edited 1 time in total.
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

Dmitry67 wrote:Безусловно вы правы, но мы самого начала исключили полную интерпретацию из рассмотрения. Очевидно, в режиме полной интерпретации можно сделать все - если только есть достаточно ресурсов. Просто будет очень долго

Ну тогда можно все страницы, которые гостевая ось собирается исполнять, просматривать на наличие команд типа "получить текущий статус" и заменять их другими, которые генерят исключение. Проверять там кажись просто (смутно помню), можно предварительно на страницу не ставить флаг что она исполняемая, потом (при генерации исключения) просматривать ее,ставить флаг что она исполнимая, и уже запускать. Вроде примерно так Трансмета работает - на лету преобразует из х86 в свой код. И вроде как Бабаян грозился что его Эльбрус тоже так работать будет.
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

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


Ну да, в общем, VMware именно такого рода труками и занимается
Чтобы было еще интереснее, рассмотрите вариант самомодифицирующегося кода :)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

Dmitry67 wrote:Ну да, в общем, VMware именно такого рода труками и занимается

Я про это не слышал.
Чтобы было еще интереснее, рассмотрите вариант самомодифицирующегося кода :)

Это все ясно. Но если все операции со страницами обрабатываются через прерывания, то можно что-то попробовать придумать.
Как общий случай, VM может просто замерить скорость операций с привелегероваными командами.

Или сделать еще более просто: напихать привелегерованных команд в самые критичные части своей операционки. Я слышал что во FreeBSD сделали так, что память не физически копируется из памяти ядра, (TCP стек) а просто с атрибутами страницы химичат и страница оказывается в user space. Так можно сделать и для дисков и вообще для всего. Производительность в виртуальной машине при этом упадет ниже плинтуса.
zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Flash-04 wrote:......

0. я вас удивлю, но 386 и выше работают точно так же :pain1:

1. то что вы описали постом выше - это описание
"послушной" ОС, которая знает что все привелигированные команды - выделение страниц виртуальной памяти, изменение страниц дескрипторов и т.д. и т.п. делает не она, а стоящий в иерархии выше - т.н. виртуальный монитор
.

2. Так вот, полная виртуализация должна позволять выполняться и "непослушной" ОС, которая сама хочет быть виртуальным монитором и распоряжаться полностью ресурсами процессора, как Windows к примеру. Кстати, я не знаю, так ли все в ней плохо на самом деле, но скорее всего скорее плохо чем хорошо.

3. То что вы описали - это режим виртуальной ОС, которая может выполнять виртуальный машины только с той же самой ОС, которая знает про виртуальный монитор и умеет им пользоваться. До полной виртуализации - это как до Луны. Но учитывая что нам не важен сам принцип добится полной виртуализации любой ценой, а нужно просто устойчивая работа многих экземпляров самой ОС без побочных конфликтов и падения производительности, то этот вариант - самый лучший.

4. Самое интересное, zVlad, что последние ваши посты окончательно меня уверили что "железо" IBM работает точно так же как Intel-овское.


0, 4 То что я могу сообщить в формате форума - это может быть лишь ничтожно малая часть того что такое есть МФ. Я приводил ссылки для более глубого изучения МФ. Почему то Вы делаете выводы о МФ не на основе тех ссылок, а на моих более чем скромных попытках сообщить что-нибудь в форумском формате.

1,2,3 А вот с этими пунктами я несогласен даже с точки зрения того что удалось сообщить самому. Я же совершенно четко говорил что на ВМ могут исполняться:
- z/OS - это система написанная для реальной машины, которая именно сама занимается управлением и распределением всех ресурсов - CPU, память, ввод-вывод - реальной машины. На ВМ машине, под z/VM, она делает тоже самое, только в конфигурации ВМ, даже не подозревая что это не реальная, а виртуальная машина. Еще раз механизмы управления ресурсами в z/OS одинаковы в обоих случаях: на реальной машине и на ВМ.

- z/VM - в отличии от VMware эта система выполняется на "голом" железе. Ничто ей не предоставляет услуг "сверху", только команды процессора. Так вот и эта система прекрасно выполняется, без каких либо переделок и хитростей на ВМ, образованной той же самой z/VM. Когда я был системщиком, и делал инсталяции z/VM (тогда эта система еще называлась VM/SP) для разных машин, разных клиентов, то я сидя в системе одного клиента инсталирован VM для другого клиента на виртуальной машине. Загружал эту новую систему, тестировал, затем сбрасывал на ленточки, ехал к тому клиенту, который заказ инсталяцию, восстанавливал сделаную на ВМ систему с ленты и загружал ее на реальной машине. Разве это похоже на:

..."послушной" ОС, которая знает что все привелигированные команды - выделение страниц виртуальной памяти, изменение страниц дескрипторов и т.д. и т.п. делает не она, а стоящий в иерархии выше - т.н. виртуальный монитор


Еще раз. На МФ, в z/VM, реализована самая что ни на есть полная виртуализация, на сегодняшний известная лишь именно на МФ.
Goldberg, которого так любят цитировать здесь на форуме, написал свою обобщающую работу в 1974, два года спустя после того как ИБМ аннонсировал систему VM в 1972, систему которая уже тогда была полноценным монитором ВМ.
В том же году ИБМ аннонсировал S/370 - архитектуру МФ которая представляла все элементы необходимые для полной виртуализации. Все последующие изменения в архитектуре МФ касались главным образом улучшения производительности и распространения идей виртуализации на все, аппаратные и программные компоненты МФ.
zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Flash-04 wrote:zVlad, все не так плохо как вы думаете ;)
Для этого не нужен эмулятор и ИБМ это реализовала еще в 1972 году.

z/OS имеет в своем составе ядро и предоставляет "API" приложениям. API в z/OS называются SVC программами (supervisor call), которыми пользуются приложения когда им нужен доступ к системным ресурсам: CPU, память, ввод-вывод. Пытаться делать это самим приложениям просто безполезно - ничего не получится ни при каких условиях и знаниях машины и системы. Для этого нужен статус "супервизор", который имеет только "ядро" системы. Поэтому и Supervisor Call - SVC. SVC -это машинная команда которая вызывает аппаратное прерывание (не переход, а именно прерывание) c кодом. Аппаратная же обработка этого прерывания вызывает аппаратное переключение статуса в "супервизор" и аппаратное переключение адреса выполнения на программу обработки SVC прерываний в ядре системы.

я вас удивлю, но 386 и выше работают точно так же :pain1:
то что вы описали постом выше - это описание "послушной" ОС......


То что я описал в приведенной Вами цитате - это не описание "послушной" ОС, наоборот это описание механизма получения системных сервисов задачами, выполняющимися в рамках многозадачной и многополизовательской ОС z/OS. К виртуальным машинам это не имеет никакого отношения. ОС ВМ никогда не выдаст команду SVC потому что она не знает и знать не может о наличии ВМ и монитора ВМ. Кроме того, поскольку ОС ВМ выполняется сама в режиме "супервизор", то спрашивается какого еще супервизора звать?
Тем не менее звать на помощь монитор ВМ (CP) таки можно, это делается посредством привелигированной команды DIAG (diagnose). На реальной машине в состоянии "супервизор" эта команда выполняется железом и предоставляет диагностику. На ВМ машине эта команда просто вызывает прерывание и переключение на СР. Если эта команда была выдана в виртуальном состоянии "супервизор" то СР, на основании кода имеющегося в команде DIAG, выполняет тот или иной сервис для ВМ (cм. ниже). Этим интерфейсом пользуются ОС специально написанные для ВМ: СMS и GCS. Я о них уже писал выше.

Code: Select all

    *   1.2.1 DIAGNOSE Code X'00' - Store Extended-Identification Code
    * 1.2.2 DIAGNOSE Code X'04' - Examine Host Storage
    * 1.2.3 DIAGNOSE Code X'08' - Virtual Console Function
    * 1.2.4 DIAGNOSE Code X'0C' - Pseudo Timer
    * 1.2.5 DIAGNOSE Code X'10' - Release Pages
    * 1.2.6 DIAGNOSE Code X'14' - Input Spool File Manipulation
    * 1.2.7 DIAGNOSE Code X'18' - Standard DASD I/O
    * 1.2.8 DIAGNOSE Code X'20' - 370 Synchronous I/O for DIAGNOSE Support
    * 1.2.9 DIAGNOSE Code X'24' - Device Type and Features
    * 1.2.10 DIAGNOSE Code X'28' - Dynamic Channel Program Modification
    * 1.2.11 DIAGNOSE Code X'34' - Read System Dump Spool File
    * 1.2.12 DIAGNOSE Code X'3C' - Activate z/VM CP Directory
    * 1.2.13 DIAGNOSE Code X'44' - Voluntary Time Slice End
    * 1.2.14 DIAGNOSE Code X'48' - Second Level SVC 76
    * 1.2.15 DIAGNOSE Code X'4C' - Generate Accounting Records
    * 1.2.16 DIAGNOSE Code X'54' - Control the Function of the PA2 Key
    * 1.2.17 DIAGNOSE Code X'58' - 3270 Virtual Console Interface
    * 1.2.18 DIAGNOSE Code X'5C' - Error Message Editing
    * 1.2.19 DIAGNOSE Code X'60' - Determine Virtual Machine Storage Size
    * 1.2.20 DIAGNOSE Code X'64' - Named Saved Segment Manipulation
    * 1.2.21 DIAGNOSE Code X'70' - Time-of-Day Clock Accounting Interface
    * 1.2.22 DIAGNOSE Code X'74' - Saving and Loading an Image Library File
    * 1.2.23 DIAGNOSE Code X'7C' - Logical Device Support Facility
    * 1.2.24 DIAGNOSE Code X'84' - Directory Update-in-Place
    * 1.2.25 DIAGNOSE Code X'88' - Validate User Authorization/Link Minidisk
    * 1.2.26 DIAGNOSE Code X'8C' - Access 3270 Display Device Information
    * 1.2.27 DIAGNOSE Code X'90' - Read Symbol Table
    * 1.2.28 DIAGNOSE Code X'94' - VMDUMP and Symptom Record Service
    * 1.2.29 DIAGNOSE Code X'98' - Real I/O
    * 1.2.30 DIAGNOSE Code X'9C' - Voluntary Time Slice Yield
    * 1.2.31 DIAGNOSE Code X'A0' - Obtain ACI Groupname
    * 1.2.32 DIAGNOSE Code X'A4' - Synchronous I/O (Standard CMS Blocksize)
    * 1.2.33 DIAGNOSE Code X'A8' - Synchronous I/O (for All Devices)
    * 1.2.34 DIAGNOSE Code X'B0' - Access Re-IPL Data
    * 1.2.35 DIAGNOSE Code X'B4' - Read/Write/Erase the Virtual Printer XAB
    * 1.2.36 DIAGNOSE Code X'B8' - Spool File XAB Manipulation
    * 1.2.37 DIAGNOSE Code X'BC' - Open and Query Spool File Characteristics
    * 1.2.38 DIAGNOSE Code X'C8' - Set Language
    * 1.2.39 DIAGNOSE Code X'CC' - Save Message Repository
    * 1.2.40 DIAGNOSE Code X'D0' - Volume Serial Support
    * 1.2.41 DIAGNOSE Code X'D4' - Set Alternate User ID
    * 1.2.42 DIAGNOSE Code X'D8' - Read Spool File Blocks on System Queues
    * 1.2.43 DIAGNOSE Code X'DC' - Control Application Monitor Record Collection
    * 1.2.44 DIAGNOSE Code X'E0' - System Trace File Interface
    * 1.2.45 DIAGNOSE Code X'E4' - Return Minidisk Information/Define Full-Pack Overlay
    * 1.2.46 DIAGNOSE Code X'EC' - Query GUEST Trace Status
    * 1.2.47 DIAGNOSE Code X'F8' - Spool File Origin Information
    * 1.2.48 DIAGNOSE Code X'FC' - Channel Path Reconfiguration Interface
    * 1.2.49 DIAGNOSE Code X'210' - Retrieve Device Information
    * 1.2.50 DIAGNOSE Code X'218' - Retrieve Real CPU Identification
    * 1.2.51 DIAGNOSE Code X'238' - Time-Based Unique Identifiers
    * 1.2.52 DIAGNOSE Code X'248' - Copy-To-Primary Service
    * 1.2.53 DIAGNOSE Code X'250' - Block I/O (Standard Blocksize)
    * 1.2.54 DIAGNOSE Code X'258' - Page-Reference Services
    * 1.2.55 DIAGNOSE Code X'260' - Access Certain Virtual Machine Information
    * 1.2.56 DIAGNOSE Code X'268' - 370 Accommodation Services
    * 1.2.57 DIAGNOSE Code X'26C' - Access Certain System Information
    * 1.2.58 DIAGNOSE Code X'270' - Pseudo Timer Extended
    * 1.2.59 DIAGNOSE Code X'274' - Set Timezone Interrupt Flag
    * 1.2.60 DIAGNOSE Code X'27C' -Product Enablement Verification
    * 1.2.61 DIAGNOSE Code X'288' - Control Virtual Machine Time Bomb
    * 1.2.62 DIAGNOSE Code X'290' - Perform Privileged Spool Functions
zVlad
Уже с Приветом
Posts: 15310
Joined: 30 Apr 2003 16:43

Post by zVlad »

Dmitry67 wrote:....

Собственно, мой план доказательства был таков. Раз zVlad считает, что виртуализируемость = МЗ/МП, то докажем от противного, Intel он считает изначально ущербной архитектурой, чтоже, возьмем z и "испортим" ее, добавив всего одну "плохую" инструкцию.

Я преджил такую инструкцию G -- (GetCurrentProcessorMode()) и спросил zVlad - согласен ли он, что она не нарушает МЗ/МП, что было им безусловно подтверждено. Таким образом, z+G удовлетворяет МЗ/МП

....


Уж не знаю что Вы поняли из монго ответа, а что не поняли, но я в свою очередь показал что МФ имеет инструкцию G и это не портит z и не нарушает виртуализуемость (полную) z. Так что утверждение В = МЗ/МП пока ни кем здесь не опровергнуто.
Неоспоримым также остается фактом что используемые ОС работают иначе чем придуманная Димой "ОС". Дима лишь показал что он большой выдумщик.

Return to “Вопросы и новости IT”