Ещё одна священная война: mainframes vs x86 servers
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
Brazen wrote:.....zVlad wrote:Но эта Ваша правда лишь говорит о том что есть как минимум два решения для любой задачи. В одном случае решение - это стэк, в другом - ре-ентерабельность.
Означает ли это, что Ваша правда лучше? Если нет, то MF говно, ацтой и вообще прошлый век. Если да, то Вы просто фанбой.
....
Я кроме участия в форуме еще немножко работаю системщиком z/OS. Как раз в эти дни у нас идет судорожная имплементация нового приложения, web приложения на Java, на МФ, в WebSphere. Казалось бы на МФ, но в Unix environment + как я уже сказал в Java. Не вдаваясь в детали хочу сказать: вот это отстой, нет, ОТСТОЙ. Что-то работает, другое не работает, никто ничего понять не может, меня десять раз на дню просят поменять овнер каких-то файла, системная мониторная фацилити MVS пишет миллионы записей, когда идет инсталяция в UNIX-e, уровень страничного обмена превысил десятилетнюю норму в два раза. А это "приложение" всего лишь новый интерфэйс на Java к CICS приложению и DB2 на МФ. Вот вам и весь сказ, как говорится приплыли.
-
- Уже с Приветом
- Posts: 8881
- Joined: 17 Jun 2003 04:41
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
-
- Уже с Приветом
- Posts: 2215
- Joined: 02 Aug 2006 12:26
zVlad wrote:FomaKinyaev wrote:......
Запросто. Реентерабельность - это чисто айбиэмовский термин для программ, код которых может разделяться между процессами. Основная причина необходимости в этом термине - отстутствие стека в архтектуре IBM. Все локальные переменные по умолчанию храняться по фиксированным адресам памяти. Отсюда возникает невозвможность ипользования кода одновременно несколькими процессами без специальных усилий. Тогда как в нормальной архитектуре локальные переменные хранятся в стеке, которой легко переключается между процессами.
Я вынужден Вас огорчить. Локальные переменные в ИБМ-ской архитектуре не "храняться по фиксированным адресам памяти". наоборот, они хранятся в динамически выделяемой памяти, если хотите в стэке. Стэк в данном контесте лишь частный случай ре-ентерабельности. Хотите доказать обратное? Go ahead!
Мне ничего не надо доказывать. У меня большой практический опыт написания программ на айбиемовском ассемблере.
Никакого аппаратно поддерживаемого стека в на мейнфреймах нет. Что заставляет разработчика предпринимать дополнительные усилия для обеспечения реентерабельности.
Тогда как в машинах со стековой архитекторой реентерабельность получается автоматически.
-
- Уже с Приветом
- Posts: 13733
- Joined: 16 Jan 2001 10:01
dB13 wrote:Palych wrote:Проблема x86 (точнее OSей) здесь мне видется в том, что такой шаринг делается самим приложением, а не системой.
VMWare эту проблему вроде решает, но запускать отдельную OS под каждую JVM как-то слишком...
![]()
А вот BEA так не думает и запускает свою JVM поверх виртуального железа вообще без OS.![]()
http://www.bea.com/intel/partners/documents/BEA_Virtualization_Intel_VMWare.pdf
Интересно!
Получается мы с тов. BEA думаем одинаковою

Они согласны что "но запускать отдельную OS под каждую JVM как-то слишком.." и убрали ОСь из уравнения.
Надо будет почитать про ESX Server - похоже забавная идея.
А пока - "я зам вам... нет, не денег - совет" добавить к нему Open API, замутить пару проектов типа BEAвского, только Open Source. Например прикрутить к нему Apache, MySQL, etc...
Получится революция в OS, Linux/Windows/Unix killer...
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 7723
- Joined: 29 Mar 2000 10:01
- Location: Kirkland,WA
-
- Уже с Приветом
- Posts: 13733
- Joined: 16 Jan 2001 10:01
dB13 wrote:А вот BEA так не думает и запускает свою JVM поверх виртуального железа вообще без OS.![]()
http://www.bea.com/intel/partners/documents/BEA_Virtualization_Intel_VMWare.pdf
"Вызывает антирес ваш технический прогресс"(c)
На каком уровне указанной иерархии (Hardware -- ESX Server -- JVM --...) реализованы функции файловой системы?
А так же - как насчёт GUIёв? есть ли там что-то что умеет работать с video, X, etc. ?
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
FomaKinyaev wrote:.......
Мне ничего не надо доказывать. У меня большой практический опыт написания программ на айбиемовском ассемблере.
Никакого аппаратно поддерживаемого стека в на мейнфреймах нет. Что заставляет разработчика предпринимать дополнительные усилия для обеспечения реентерабельности.
Тогда как в машинах со стековой архитекторой реентерабельность получается автоматически.
Я тоже писал на Ассемблере МФ, да и сейчас время от времени. Те усилия, о которых Вы намекаете, не боле усилия чем снимать штаны в некоторых жизненых обстоятельствах.
В машинах со стековой архитектурой реентерабельность не получается автоматически. Доказательство: если программа не использует стэк для своих локальных данных, то она не является реентерабельной.
Для реентерабельности не важно какой механизм используется - динамически ли выделяемая, локальная память процесса (вот об этом хотелось бы поговорить подробнее), или аппаратный стэк. Реентерабельность - это не более чем принцип согласно которому и одна и таже копия кода может использоваться разными процессами. Реализуется этот принцип разделением кода и данных. Как это разделение осуществляется для самого принципа более чем не важно. Наоболее естественным тем не менее выглядит возможность динамического выделения памяти памяти и размещения локальных данных в этой памяти. Стэк, являясь механизмом последовательного доступа к данным накладывает существенные ограничения на прямой доступ к данным.
Вы знаете что? Раздумывая над Вашим отождествлением реентерабельности и стэка я честно говоря вообще перестал понимать как стэк может решить проблему реентерабельности. Не могли Вы в нескольких фразах описать как это Вы себе представляете?
Ме на данный момент вообще видится что стэк и реентерабельность ортогональны. Помогите разобраться.
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
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 - это ре-ентерабельный код, он по определению не модифицирует себя. Почуствуйте разницу.
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
Zombie416 wrote:zVlad wrote:Следовательно, если у нас в системе выполняется много экземпляров чего-нибудь одного, а на МФ это очень и очень обычное явление, и эти экземпляры имею хорошо составленный набор таких программ, то экономия реальной памяти просто несомнена.
Точно также как если в Windows исполняется много процессов использующих, например, ole32.dll (а у меня, к примеру, сейчас бежит на обычной workstation 80+ процессов ее использующих), то все они используют одну ее физическую копию в памяти. Что дает экономию около 1350кб*80 ~= 100MB. И таких DLL много.
.....
Процессы в Windows сами загружают нужные им DLL. DLL имеют свои предпочтительные базовые адреса памяти. В зависимости от состава DLL, загружаемых процессом и их базовых адресов может оказаться и так что в Вашем примере ни один экземпляр ole32.dll не будет разделяем.
В z/OS LPA строится системой на основании списка имен библиотек созданого системщиком. Все они загружаются в память каждая в свои адреса (предпочтительных базовых адресов здесь нет вообще). Процессы не требуют загрузки этих библиотек, они лишь вызывают нужные программы по именам. Почуствуйте разницу.
-
- Уже с Приветом
- Posts: 15007
- Joined: 14 Jun 2005 11:50
- Location: Ukraine
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 будет от того процесса, который прервал текущий процесс.
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
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
...........................
-
- Уже с Приветом
- Posts: 15007
- Joined: 14 Jun 2005 11:50
- Location: Ukraine
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
KP580BE51 wrote:zVlad wrote:4.5 Chapter 24. Reentrancy in z/OS XL C/C++
Ну? А я что написал?
You wrote:
KP580BE51 wrote:Не реентерабелельно.
Код:
float eq(float a,b,c)
{
static float t = b*c;
return a*sqrt(t);
}