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

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

Post by zVlad »

Дискуссия тихо превратилась в базар. Ну да ладно, я поехал в Kawartha Lаkes. Продолжим в понедельник.
Last edited by zVlad on 23 Jun 2007 12:49, edited 1 time in total.
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

Brazen wrote:.....
zVlad wrote:Но эта Ваша правда лишь говорит о том что есть как минимум два решения для любой задачи. В одном случае решение - это стэк, в другом - ре-ентерабельность.

Означает ли это, что Ваша правда лучше? Если нет, то MF говно, ацтой и вообще прошлый век. Если да, то Вы просто фанбой.
....


Я кроме участия в форуме еще немножко работаю системщиком z/OS. Как раз в эти дни у нас идет судорожная имплементация нового приложения, web приложения на Java, на МФ, в WebSphere. Казалось бы на МФ, но в Unix environment + как я уже сказал в Java. Не вдаваясь в детали хочу сказать: вот это отстой, нет, ОТСТОЙ. Что-то работает, другое не работает, никто ничего понять не может, меня десять раз на дню просят поменять овнер каких-то файла, системная мониторная фацилити MVS пишет миллионы записей, когда идет инсталяция в UNIX-e, уровень страничного обмена превысил десятилетнюю норму в два раза. А это "приложение" всего лишь новый интерфэйс на Java к CICS приложению и DB2 на МФ. Вот вам и весь сказ, как говорится приплыли.
Zombie416
Уже с Приветом
Posts: 8881
Joined: 17 Jun 2003 04:41

Post by Zombie416 »

zVlad wrote: Возвращаясь к теме, а что такое есть sharable? и при чем здесь copy-on-write? Не исключает ли одно другое?

Отдельная страница физической памяти видимая в адресном пространстве двух процессов. Может быть как read-only, когда запись в нее завершается аварийно. Может быть copy-on-write, когда страница изначально разделяется, но при записи разделение прекращается.

http://pdos.csail.mit.edu/6.828/2006/re ... 86/c05.htm
http://pdos.csail.mit.edu/6.828/2006/re ... 86/c06.htm
FomaKinyaev
Уже с Приветом
Posts: 2215
Joined: 02 Aug 2006 12:26

Post by FomaKinyaev »

zVlad wrote:
FomaKinyaev wrote:......
Запросто. Реентерабельность - это чисто айбиэмовский термин для программ, код которых может разделяться между процессами. Основная причина необходимости в этом термине - отстутствие стека в архтектуре IBM. Все локальные переменные по умолчанию храняться по фиксированным адресам памяти. Отсюда возникает невозвможность ипользования кода одновременно несколькими процессами без специальных усилий. Тогда как в нормальной архитектуре локальные переменные хранятся в стеке, которой легко переключается между процессами.


Я вынужден Вас огорчить. Локальные переменные в ИБМ-ской архитектуре не "храняться по фиксированным адресам памяти". наоборот, они хранятся в динамически выделяемой памяти, если хотите в стэке. Стэк в данном контесте лишь частный случай ре-ентерабельности. Хотите доказать обратное? Go ahead!


Мне ничего не надо доказывать. У меня большой практический опыт написания программ на айбиемовском ассемблере.
Никакого аппаратно поддерживаемого стека в на мейнфреймах нет. Что заставляет разработчика предпринимать дополнительные усилия для обеспечения реентерабельности.
Тогда как в машинах со стековой архитекторой реентерабельность получается автоматически.
Palych
Уже с Приветом
Posts: 13733
Joined: 16 Jan 2001 10:01

Post by Palych »

dB13 wrote:
Palych wrote:Проблема x86 (точнее OSей) здесь мне видется в том, что такой шаринг делается самим приложением, а не системой.
VMWare эту проблему вроде решает, но запускать отдельную OS под каждую JVM как-то слишком...


:umnik1:
А вот BEA так не думает и запускает свою JVM поверх виртуального железа вообще без OS. :mrgreen:
http://www.bea.com/intel/partners/documents/BEA_Virtualization_Intel_VMWare.pdf

Интересно!
Получается мы с тов. BEA думаем одинаковою 8)
Они согласны что "но запускать отдельную OS под каждую JVM как-то слишком.." и убрали ОСь из уравнения.
Надо будет почитать про ESX Server - похоже забавная идея.
А пока - "я зам вам... нет, не денег - совет" добавить к нему Open API, замутить пару проектов типа BEAвского, только Open Source. Например прикрутить к нему Apache, MySQL, etc...
Получится революция в OS, Linux/Windows/Unix killer...
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

А MS наверное тогда сделает Standalone .Net
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
alex_127
Уже с Приветом
Posts: 7723
Joined: 29 Mar 2000 10:01
Location: Kirkland,WA

Post by alex_127 »

Dmitry67 wrote:А MS наверное тогда сделает Standalone .Net
http://research.microsoft.com/os/singularity/
Palych
Уже с Приветом
Posts: 13733
Joined: 16 Jan 2001 10:01

Post by Palych »

dB13 wrote:А вот BEA так не думает и запускает свою JVM поверх виртуального железа вообще без OS. :mrgreen:
http://www.bea.com/intel/partners/documents/BEA_Virtualization_Intel_VMWare.pdf

"Вызывает антирес ваш технический прогресс"(c)
На каком уровне указанной иерархии (Hardware -- ESX Server -- JVM --...) реализованы функции файловой системы?
А так же - как насчёт GUIёв? есть ли там что-то что умеет работать с video, X, etc. ?
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

FomaKinyaev wrote:.......
Мне ничего не надо доказывать. У меня большой практический опыт написания программ на айбиемовском ассемблере.
Никакого аппаратно поддерживаемого стека в на мейнфреймах нет. Что заставляет разработчика предпринимать дополнительные усилия для обеспечения реентерабельности.
Тогда как в машинах со стековой архитекторой реентерабельность получается автоматически.


Я тоже писал на Ассемблере МФ, да и сейчас время от времени. Те усилия, о которых Вы намекаете, не боле усилия чем снимать штаны в некоторых жизненых обстоятельствах.
В машинах со стековой архитектурой реентерабельность не получается автоматически. Доказательство: если программа не использует стэк для своих локальных данных, то она не является реентерабельной.
Для реентерабельности не важно какой механизм используется - динамически ли выделяемая, локальная память процесса (вот об этом хотелось бы поговорить подробнее), или аппаратный стэк. Реентерабельность - это не более чем принцип согласно которому и одна и таже копия кода может использоваться разными процессами. Реализуется этот принцип разделением кода и данных. Как это разделение осуществляется для самого принципа более чем не важно. Наоболее естественным тем не менее выглядит возможность динамического выделения памяти памяти и размещения локальных данных в этой памяти. Стэк, являясь механизмом последовательного доступа к данным накладывает существенные ограничения на прямой доступ к данным.
Вы знаете что? Раздумывая над Вашим отождествлением реентерабельности и стэка я честно говоря вообще перестал понимать как стэк может решить проблему реентерабельности. Не могли Вы в нескольких фразах описать как это Вы себе представляете?
Ме на данный момент вообще видится что стэк и реентерабельность ортогональны. Помогите разобраться.
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

Zombie416 wrote:
zVlad wrote: Возвращаясь к теме, а что такое есть sharable? и при чем здесь copy-on-write? Не исключает ли одно другое?

Отдельная страница физической памяти видимая в адресном пространстве двух процессов. Может быть как read-only, когда запись в нее завершается аварийно. Может быть copy-on-write, когда страница изначально разделяется, но при записи разделение прекращается.

http://pdos.csail.mit.edu/6.828/2006/re ... 86/c05.htm
http://pdos.csail.mit.edu/6.828/2006/re ... 86/c06.htm


Да я уже понял разделяемость памяти в Windows. Я имел в виду что предположим что мы наши DLL написали нереентерабельными. Фрмально с механизмом copy-on-write мы вроде бы можем их разделять но стоит начать такие программы использовать как они начнут сами себя модифицировать (по определению нерентерабельности, в этом вроде бы как-то помогает стэк, но как пока не было озвучено - только заявленно) следовательно каждая вновь использованная программа DLL становится для процесса ее использующего неразделяемой.
Зазделяемый код в понимание z/OS - это ре-ентерабельный код, он по определению не модифицирует себя. Почуствуйте разницу.
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

Zombie416 wrote:
zVlad wrote:Следовательно, если у нас в системе выполняется много экземпляров чего-нибудь одного, а на МФ это очень и очень обычное явление, и эти экземпляры имею хорошо составленный набор таких программ, то экономия реальной памяти просто несомнена.

Точно также как если в Windows исполняется много процессов использующих, например, ole32.dll (а у меня, к примеру, сейчас бежит на обычной workstation 80+ процессов ее использующих), то все они используют одну ее физическую копию в памяти. Что дает экономию около 1350кб*80 ~= 100MB. И таких DLL много.

.....


Процессы в Windows сами загружают нужные им DLL. DLL имеют свои предпочтительные базовые адреса памяти. В зависимости от состава DLL, загружаемых процессом и их базовых адресов может оказаться и так что в Вашем примере ни один экземпляр ole32.dll не будет разделяем.
В z/OS LPA строится системой на основании списка имен библиотек созданого системщиком. Все они загружаются в память каждая в свои адреса (предпочтительных базовых адресов здесь нет вообще). Процессы не требуют загрузки этих библиотек, они лишь вызывают нужные программы по именам. Почуствуйте разницу.
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

zVlad wrote:Вы знаете что? Раздумывая над Вашим отождествлением реентерабельности и стэка я честно говоря вообще перестал понимать как стэк может решить проблему реентерабельности. Не могли Вы в нескольких фразах описать как это Вы себе представляете?
Ме на данный момент вообще видится что стэк и реентерабельность ортогональны. Помогите разобраться.


Что здесь такого?
Ну к примеру

Реентерабтельно

Code: Select all

float eq(float a,b,c)
{
    return a*sqrt(b*c);
}

Реентерабельно.

Code: Select all

float eq(float a,b,c)
{
    float t = b*c;
    return a*sqrt(t);
}

Не реентерабелельно.

Code: Select all

float eq(float a,b,c)
{
    static float t = b*c;
    return a*sqrt(t);
}

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

Code: Select all

float eq(float a,b,c)
{
    static float t = b*c;
         /* вычислили t, но sqrt не успели. Произошло прерывание (или другая thread) */
         /* снова вошли в функцию, посчитали, но старое t затерли. */
   
    return a*sqrt(t);
}

Результат - не правильное вычисление a*sqrt(t); потому что t будет от того процесса, который прервал текущий процесс.
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

KP580BE51 wrote:.....
Реентерабельность к защите памяти и стеку значения не имеет. Это возможность начать выполнять какую-то функцию, потом в любом месте этой функции остановится, а начать выполнять эту функцию снова. Потом веруться и начать продолжить выполнение. К примеру

Code: Select all

float eq(float a,b,c)
{
    static float t = b*c;
         /* вычислили t, но sqrt не успели. Произошло прерывание (или другая thread) */
         /* снова вошли в функцию, посчитали, но старое t затерли. */
   
    return a*sqrt(t);
}

Результат - не правильное вычисление a*sqrt(t); потому что t будет от того процесса, который прервал текущий процесс.


4.5 Chapter 24. Reentrancy in z/OS XL C/C++

.....
This chapter describes the concept of reentrancy. It tells you how to use reentrancy in C programs to help make your programs more efficient, and how C++ achieves constructed reentrancy.

......

C and C++ achieve reentrancy by splitting your program into two parts, which are maintained in separate areas of memory until the program terminates:


The first part, which consists of executable code and constant data, does not change during program execution.

The second part contains persistent data that can be altered. This part includes the dynamic storage area (DSA) and a piece of storage known as the writable static area.
For XPLINK, the writable static area is further logically subdivided into areas called environments. Environments are optional, and each function can have its own environment.

.....

If the program is installed in the Link Pack Area (LPA) or Extended Link Pack Area (ELPA) of your operating system, only a single copy of the first (constant or reentrant) part exists within a single address space. This occurs regardless of the number of users that are running the program simultaneously. This reentrant part may be shared across address spaces or across sessions. In this case, the executable module is loaded only once. Separate concurrent invocations of the program share or reenter the same copy of the write-protected executable module. If the program is not installed in the LPA or ELPA area, each invocation receives a private copy of the code part, but this copy may not be write-protected.
The modifiable writable static part of the program contains:


-- All program variables with the static storage class

-- All program variables receiving the extern storage class

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

Post by KP580BE51 »


Ну? А я что написал?
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

KP580BE51 wrote:

Ну? А я что написал?



You wrote:

KP580BE51 wrote:Не реентерабелельно.
Код:
float eq(float a,b,c)
{
static float t = b*c;
return a*sqrt(t);
}



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