Ещё одна священная война: mainframes vs x86 servers

zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

Я предлагаю на реентерабельности и разделения памяти не зацикливаться и обсудить, например, механизмы переключения задач. Что вызываетостанов выплнения одной задачи и передачу управления другой? Настолько такое переключение "трудоемко? Что делается чтобы исключить монополизацию CPU со стороны "плохой" задачи?

В системах МФ задачи могут потерять управление по одну из прерываний:
- машинная ошибка (сбой оборудования),
- обращение к супервизору (команда SVC)
- программное прерывание,
- внешнее прерывание
- прерывание ввода-вывода (окончание операции)
- рестарт

Перечисленно - это все шесть классов прерываний МФ. Богатство различных ситуаций и условий прерываний выражается через коды прерывания. Механизм обработки прерывания железом можно рассмотреть на примере программного прерывания (все остальные классы прерываний отрабатывабтся железом в принципе точно также):


Program interruptions are used to report exceptions and events which occur during execution of the program.

A program interruption causes the old PSW to be stored at real locations 336-351 and a new PSW to be fetched from real locations 464-479.

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

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

Для анализа причины используется код прерывания:

The cause of the interruption is identified by the interruption code. The interruption code is placed at real locations 142-143, the instruction-length code is placed in bit positions 5 and 6 of the byte at real location 141 with the rest of the bits set to zeros, and zeros are stored at real location 140. For some causes, additional information identifying the reason for the interruption is stored at real locations 144-183.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Эх, на VAX было интересней. Там (MISC) были длинные команды (типа переслать область памяти с места на место), и при прерывании процессор мог остановить их в середине, а по выходу из прерывания продолжить с нужного места
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

Dmitry67 wrote:Эх, на VAX было интересней. Там (MISC) были длинные команды (типа переслать область памяти с места на место), и при прерывании процессор мог остановить их в середине, а по выходу из прерывания продолжить с нужного места

Строго говоря повторяющуюся команду на x86 тоже можно остановить и потом продолжить.
Но в общем нафиг такую интересность, если так нужно переслать память, то для этого есть DMA. И вообще если нужно часто память пересылать, то значит что система плохо спроектирована.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

на VAX даже была команда 'вычислить многочлен'
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

KP580BE51 wrote:
zVlad wrote: Ну а где же странное, ИБМ-ское?

Я с википедивским согласен - просто и лаконично.


С легкой руки db13 мы вроде как сравниваем просто и лаконичное википедивское с странным ИБМ-ским. Но где оно - ИБМ-ское то?
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

Dmitry67 wrote:на VAX даже была команда 'вычислить многочлен'


Об умершем или хорошо или никак. Давайте лучше о живых поговорим.
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

Dmitry67 wrote:на VAX даже была команда 'вычислить многочлен'
А на 387 есть вычисление синуса с косинусом. под 200 тактов работало.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

zVlad wrote:
Dmitry67 wrote:на VAX даже была команда 'вычислить многочлен'


Об умершем или хорошо или никак.


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

Post by KP580BE51 »

zVlad wrote:Об умершем или хорошо или никак. Давайте лучше о живых поговорим.

А об умирающих можно говорить?
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Post by Flash-04 »

zVlad wrote: В системах МФ задачи могут потерять управление по одну из прерываний:
- машинная ошибка (сбой оборудования),
- обращение к супервизору (команда SVC)
- программное прерывание,
- внешнее прерывание
- прерывание ввода-вывода (окончание операции)
- рестарт

в x86 все то же самое, за исключением "обращения к супервизору". Такой команды нет, но ее можно организовать с помощью jmp или call, если адрес по которому передается управление вызовет переключение контекста задач. Тут я уже плохо помню, в книге по 386 подробно разжевывался этот механизм, и он еще был применим к обработке прерываний, кажется три варианта были:
1. прерывание в контексте той же задачи, переключение колец защиты не происходит
2. прерывание в контексте той же задачи, происходит переключение колец защиты
3. самый дорогой вариант - переключение контекста задач, если обработчик в IDT указывает на код расположенный в другой задаче.
но хоть расстреливайте, подробности я уже не помню.
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

Flash-04 wrote:
zVlad wrote: В системах МФ задачи могут потерять управление по одну из прерываний:
- машинная ошибка (сбой оборудования),
- обращение к супервизору (команда SVC)
- программное прерывание,
- внешнее прерывание
- прерывание ввода-вывода (окончание операции)
- рестарт

в x86 все то же самое, за исключением "обращения к супервизору". Такой команды нет, но ее можно организовать с помощью jmp или call, если адрес по которому передается управление вызовет переключение контекста задач. Тут я уже плохо помню, в книге по 386 подробно разжевывался этот механизм, и он еще был применим к обработке прерываний, кажется три варианта были:
1. прерывание в контексте той же задачи, переключение колец защиты не происходит
2. прерывание в контексте той же задачи, происходит переключение колец защиты
3. самый дорогой вариант - переключение контекста задач, если обработчик в IDT указывает на код расположенный в другой задаче.
но хоть расстреливайте, подробности я уже не помню.


Я честно говоря и не ожидал услышать что-нибудь кроме "то же самое". С другой стороны даже из сказаного Вами мне видится большая разница. Если хотите можем покопать.
На Мф только один класс прерываний ассоциируется с командой и это ровно одна команда - SVC (Supervisor Call). Все прерывания остальных пяти классов активируются железом и только железом. Ни программы системы, ни прикладные программы не могут вызвать ни одного из этих прерываний.
Механизм переключения для всех шести классов один и тот же. PSW (называется старое) сохранятся по совершенно определенному и неизменному реальному адресу памяти - у каждого класса этот адрес свой - из другого, опять же совершенно определенного реального адреса, берется другое PSW (называется новое) - снова у каждого класса этот адрес свой - и это новое PSW становится текущим, и, поскольку PSW имеет адрес текущей команды для выполнения, происходит переключение управления процессором на совершенно другую программу, а именно на системный обработчик того или иного класса прерываний.
С момента идентификации прерывания и до загрузки нового PSW все выполнятся исклбчительно на аппаратном уровне. Только после загрузки нового PSW управление переключается на супервизор (систему).

Области старых и новых PSW подконтрольны исключительно системе и инициализируются системой во время загрузки так что все новые PSW имеют в своей адресной части адрес соответствующей точки входа в супервизор (если хотите - ядро). Кроме адреса в PSW также имеются бит состояния супервизор/задача, и ключ защиты памяти. Так что в момент загрузки нового PSW меняется не только адрес следующей выполняемой команды, но и состояние и ключ защиты памяти.
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

Flash-04 wrote:...
в x86 все то же самое, ...


Мне особенно нравится это Ваше "то же самое" :wink: с учетом дискусии в соседнем топике "Проясните по железу..." (или как там).
Что толкуговорить о вот хотя бы такой стандартной, на поверхности лежащей опции оператора DELETE:

ERASE|NOERASE
specifies whether the components of a cluster or alternate index to be deleted are to be erased (overwritten with binary zeros). This parameter overrides whatever was coded when the cluster or alternate index was defined or last altered. Specify this parameter only when a cluster or an alternate index entry is to be deleted.

If you use ERASE, one of the following conditions must be true:

* The entry is in the master catalog.
* The qualifiers in the entry's qualified name are the catalog's name or alias.

ERASE
specifies that the components are to be overwritten with binary zeros when the cluster or alternate index is deleted. If ERASE is specified, the volume that contains the data component must be mounted.

If the cluster is protected by a RACF generic or discrete profile and the cluster is cataloged in a catalog, use RACF commands to specify an ERASE attribute as part of this profile so that the data component is automatically erased upon deletion.

When you erase a data set, serialization is maintained using a RESERVE. For performance or access reasons, you might not want to use ERASE; another option is to convert the RESERVE to a systems enqueue. For more information about RESERVE contention, see z/OS DFSMS Managing Catalogs.

Abbreviation: ERAS
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Post by Flash-04 »

Я честно говоря и не ожидал услышать что-нибудь кроме "то же самое". С другой стороны даже из сказаного Вами мне видится большая разница. Если хотите можем покопать.

буду ругаться. матом. :angry:
аппаратные прерывания на x86 именно так и выполнятся - на аппаратном уровне, при этом будет сделано все что я написал в своем посте ниже (переключение контекста задач и т.п.)
другое дело что в x86 есть инструкция INT xNN, которая передает управление на процедуру с определенным номером (это еще с 8086 идет), но в защищенном режиме будет использована таблица IDT и взависимости от того что там лежит, может происходить переключение контекста задач.
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

Flash-04 wrote:
Я честно говоря и не ожидал услышать что-нибудь кроме "то же самое". С другой стороны даже из сказаного Вами мне видится большая разница. Если хотите можем покопать.

буду ругаться. матом. :angry:
аппаратные прерывания на x86 именно так и выполнятся - на аппаратном уровне, при этом будет сделано все что я написал в своем посте ниже (переключение контекста задач и т.п.)
другое дело что в x86 есть инструкция INT xNN, которая передает управление на процедуру с определенным номером (это еще с 8086 идет), но в защищенном режиме будет использована таблица IDT и взависимости от того что там лежит, может происходить переключение контекста задач.


Оставим пока инструкцию INT в стороне. Мне хочется узнать детали обработки прерываний, как работает механизм переключения в процессе прерывания? Вы можете дать мне ссылку, если не помните или долго описывать, но простая константация факта что это есть и это тоже самое меня извините не устраивает. Я привел детальное и практически полное описание переключения задач прерыванием на МФ. Неужели не возможно сделать тоже для x86?
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Post by Flash-04 »

zVlad wrote:Оставим пока инструкцию INT в стороне. Мне хочется узнать детали обработки прерываний, как работает механизм переключения в процессе прерывания? Вы можете дать мне ссылку, если не помните или долго описывать, но простая константация факта что это есть и это тоже самое меня извините не устраивает. Я привел детальное и практически полное описание переключения задач прерыванием на МФ. Неужели не возможно сделать тоже для x86?

дам, как найду.

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