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

User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

zVlad wrote: А хотите я Вам экскурсию проведу, покажу МФ изнутри? Позвоните мне на 416-689-7474 и мы все обсудим. А вообще говоря я недавно приводил ссылку, и вообще то удивлен что Вы не можете ничего найти. Постараюсь Вам помочь.

Уже ругались по этому поводу. Обычный процессор в MF, частота за гигагерц, много кеша, много защит от аппаратного сбоя, в случае сбоя в процессоре, этот сбой можно зафиксировать и состояние процессора перетащить на другой процессор. Есть аппаратное шифрование какие-то. В и все в общем.
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

zVlad wrote: В рамках zVM имеется по крайней мере две ОС написанные спеуиально для работы в ВМ. Это CMS - однопользовательская ОС для дилоговой работы, и GCS - Group Control System - система для выполнения приложений MVS под VM. Обе системы не могут работать работать на реальной машине поскольку в них многие привелигированные команды заменены на интерфейс к управляющей программе (CP) VM.
Что касается злонамеренности. А если это баг? Или вирус?
Мой поверхностный анализ проблемных команд Интел вообще говоря показывает мне что эти проблемные команды не могут быть использованны "злонамерено", с цель повлиять на работу ОС или других задач. Прболема с этими команды в том что когда на ВМ выполняется ОС в режиме юзера то эти команды не перехватываются и дают не верный (для ОС) результат. Поэтому необходима ВТ.

Под "злонамеренностью" я подразумевал вовсе не выполнение разрушительных действий по типу вирусов, а попытки определить работает ли ОС в ВМ или на "настоящем железе".
Под специально подготовленным кернелем подразумевал не устранения разделения колец выполнения и защиты памяти, а избегание/замену плохо/меделенно выполняющихся в режиме гостя команддля снятия проблем с производительностью.
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

KP580BE51 wrote:
zVlad wrote: почему команда popf в Интел процессоре не привелигированная?

http://pdos.csail.mit.edu/6.828/2005/re ... 6/POPF.htm
The I/O privilege level is altered only when executing at privilege level 0. The interrupt flag is altered only when executing at a level at least as privileged as the I/O privilege level. (Real-address mode is equivalent to privilege level 0.) If a POPF instruction is executed with insufficient privilege, an exception does not occur, but the privileged bits do not change.

Вот где проблема, как мне кажется.


I know. I just try to understand why it was designed like that? Why it is existing at all?
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

zVlad wrote: I know. I just try to understand why it was designed like that? Why it is existing at all?

Специальная команда, вместо просто какого-то порта отмапленного на ОЗУ? ИМХО потому что x86 изначально был идиотским.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Post by Flash-04 »

я уже не очень хорошо помню все детали, но что именно не нравится в команде POPF? они восстанавливает флаги из стека, за исключением специальных флагов, отражающих состояние 386-го в защищенном режиме. Насколько я помню, один из таких флагов - "работаю в виртуальном x86 режиме".
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

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: 28294
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: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

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

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

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


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

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

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

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

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

Post by zVlad »

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


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

Post by zVlad »

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

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


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

Post by zVlad »

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

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

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


С учетом сказаного мною выше Ваше утверждение не верно. Оно не верно даже не потому что МФ. В самом деле ну и что задача может узнать процессор моду? С другой стороны, как я намекал, это можно узнать и вовсе не обращаясь к такой команде.
Так что выкладываете аргументы (если они у Вас есть) Вашего утверждения, пока что Вы органичиваетесь голословными утверждениями.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
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: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Post by Flash-04 »

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

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. ВМ выполняется в проблемном режиме и поэтому привелигированные команды вызывают прерывание. Но монитор виртуальной машины однако умеет различать виртуальный режим "супервизора" и виртуальный режим "задача". Эта информация хранится в управляющих блоках монитора.
Если прерывание по привелигированной команде произошло в виртуальном режиме "супервизор", то монитор ВМ эмулирует такую привелигированную. Если в виртуальном режиме "задача", то монитор "отображает" прерывание на ОС ВМ и оставляет ей разбираться с нарушителем.

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