Программа "по сути" как Вы выражаетесь, реентерабельна. ENQ/DEQ как раз и позволяет ей оставаться реентерабельной, обеспечивая корректное (последовательное) выполнение критической секции кода.
Что такое тело цикла или тело процедуры, понятно. А что такое тело программы? :-)
Сообщение отредактировал Gregory - Вт, 11.08.2009, 18:34
так как я уже писал один раз формальная реентерабельность это флажок, устанавливаемый без проверки. Практически любая реентерабельная программа содержит код, выполняемый строго последовательно. Если программа получает память, это SVC, и некоторые команды его должны выполняться последовательно, что обеспечивается запретом прерываний (последовательно на всем z/OS!). Поэтому с "модификацией тела программы" я не соглашаюсь :-)
*) практически любая - это за исключением программ типа IEFBR14 :-)
Сообщение отредактировал Gregory - Вт, 11.08.2009, 18:49
и какая же это часть? динамическая область памяти это тоже часть тела программы? Мне не сам этот термин не нравится, а именно в контексте "модификация тела программы".
Сообщение отредактировал Gregory - Вт, 11.08.2009, 18:53
так как я уже писал один раз формальная реентерабельность это флажок, устанавливаемый без проверки. Практически любая реентерабельная программа содержит код, выполняемый строго последовательно. Если программа получает память, это SVC, и некоторые команды его должны выполняться последовательно, что обеспечивается запретом прерываний (последовательно на всем z/OS!). Поэтому с "модификацией тела программы" я не соглашаюсь :-)
IBM пишет то же самое, что и я. Флажок с модесетами - это уже хакерство, читерство и прочие последствия избытка знаний.
и какая же это часть? динамическая область памяти это тоже часть тела программы? Мне не сам этот термин не нравится, а именно в контексте "модификация тела программы".
Вот теперь поймал! Как насчет "модификация статического тела программы" ("ужос нах", сам не понял, что написал) Ваше определение в студию! Худая корова еще не газель!
Сообщение отредактировал XOpen - Вт, 11.08.2009, 18:58
если речь идет о прикладной программе, это так, а прикладной программе совершенно незачем модифицировать LPA! Какой вопрос, такой и ответ... А вот ENQ/DEQ это механизм, предоставляемый прикладной программе, чтобы эта программа могла реализовать критическую секцию. Если же программа модифицирует управляющие блоки, она должна делать это корректно, используя один из предусмотренных для этого механизмов, например, MODESET. При чем тут хакерство??
Quote
Флажок с модесетами - это уже хакерство, читерство и прочие последствия избытка знаний.
Извиняюсь конечно, но это совершенный абсурд... Указание атрибутов модуля это хакерство? Корректное программирование это читерство? Извините конечно, но цитированная фраза уж точно не от избытка знаний :-)
А по поводу тела программы я, пожалуй, соглашусь - пусть будет хоть тело, хоть тушка :-). "Скелет программы" используемое выражение? А раз есть скелет то и тело тоже есть :-) Только вот тезис
Quote
Реентерабельная программа - это программа которая НЕ МОДИФИЦИРУЕТ свое тело
все равно неверен по существу...
Сообщение отредактировал Gregory - Ср, 12.08.2009, 02:18
Извиняюсь конечно, но это совершенный абсурд... Указание атрибутов модуля это хакерство? Корректное программирование это читерство? Извините конечно, но цитированная фраза уж точно не от избытка знаний :-)
Дисскусия перерастает в пустопорожнее переливание. Есть официальное определение и методы ему следования. Все ваши действия - это неквалифицированное программирование. Нельзя править то, что не положено по дизайну. Если вы знаете команду модесет и у вас есть возможность положить ее в авторизованную библиотеку(80% программистов это недоступно) и вы применяете ее таким образом... вашему админу пора освежить знания по RACF, если он не хочет загадочных проишествий в своей системе.
Не понятны также все эти придирки по мелочам и не по существу. Я же тоже могу сказать: "В команде modeset нет параметров ENABLE/DISABLE и все написаное бред"
Дисскусия перерастает в пустопорожнее переливание.
Возможно...
Quote
Есть официальное определение и методы ему следования. Все ваши действия - это неквалифицированное программирование.
Вы по-видимому, не только никогда не писали системных программ, но и никогда их не видели. Посмотрите в SYS1.SAMPLIB, например, на IEEGSYS, там таких программ десятки. Официальное определение реентерабельности цитировано выше, а Ваше определение неверно, и если Вы этого не понимаете, то очень жаль.
Quote
Если вы знаете команду модесет и у вас есть возможность положить ее в авторизованную библиотеку(80% программистов это недоступно)
Еще раз повторяю - есть разные задачи и требуют они разных средств. Некоторые задачи не могут быть решены без использования авторизованных сервисов, и, естественно, такая программа должна иметь авторизацию. Между прочим, этот форум обсуждает ВСЕ вопросы z/OS, а не толоько прикладное программирование.
Quote
вашему админу пора освежить знания по RACF, если он не хочет загадочных проишествий в своей системе.
уровень привилегий пользователя в операционной системе должен соответствовать уровню решаемых им задач, не больше и не меньше. Если задачей является инсталляция продуктов, уровень доступа должен позволять это сделать. Если обязанности пользователя это проектирование и оптимизация БД, он должен иметь привилегии доступа к словарю БД (SYSIBM.*).
Quote
"В команде modeset нет параметров ENABLE/DISABLE и все написаное бред"
Операнд ENABLE там есть, см. SYS1.MACLIB. В z/OS MODESET ENABLE замененяется SYSLOCK. Я по памяти пишу, поэтому кончено, есть неточности. И я не претендую на безошибочность и признаю свои ошибки когда мне на них указывают, что и Вам советую...
Не SYSLOCK, а SETLOCK(который и потверждает, что ENABLE нет). Признаем? В официальном определении вообще нет ничего о флажках. Признаем? (так и не дождались вашего кстати. Критиковать каждый умеет.) IEEGSYS, не реентерабельная программа. Признаем?
Обсуждение вопросов не есть выпячивание своей индивидуальности. Не надо прятать свой недостаток знаний за мелкими придирками и все будет ок.
Согласен, очепятка :-). Да, MODESET с ENABLE в z/OS выдаст MNOTE "используй SETLOCK", тоже согласен. В более ранних системах это был штатный системный механизм, сейчас нет. Признаю.
Quote
В официальном определении вообще нет ничего о флажках.
?? На основании чего система определяет является ли загрузочный модуль реентерабельным? А как ставится этот атрибут? z/OS V1R10.0 MVS Program Management: User's Guide and Reference, 2.5. Там кстати написано вот что: Reenterable (reentrant). The module is designed for concurrent execution by multiple tasks. If a reenterable module modifies its own data areas or other shared resources in any way, appropriate serialization must be in place to prevent interference between using tasks. Ну что, может Вас хоть это убедит?
Добавлено (12.08.2009, 14:50) --------------------------------------------- кстати о MODESET ENABLE... Я полагаю, что соответствующий список параметров у SVC все же поддерживается и работать программа с ENABLE все же будет, потому что IBM с совместимостью почти всегда тип топ. Постараюсь проверить это на домашнем z/OS :-) Но вообще конечно, у меня есть такая проблема - полагаться на старые знания, верные для < OS/390 и не проверять как это выглядит в z/OS сегодня. Поэтому я полносью признаю Ваше замечание насчет MODESET
If a reenterable module modifies its own data areas or other shared resources in any way, appropriate serialization must be in place to prevent interference between using tasks. Ну что, может Вас хоть это убедит?
Убедил.
Такая фраза действительно есть, хотя в той же книжке: RENT The module is reenterable. It can be executed by more than one task at a time. A task can begin executing it before a previous task has completed execution. A reenterable module cannot modify its own code. (MVS protects your module's virtual storage so that your module cannot be modified.)
и тут же в глосарии reenterable. The reusability attribute that allows a program to be used concurrently by more than one task. A reenterable module can modify its own data or other shared resources, if appropriate serialization is in place to prevent interference between using tasks. See reusability.
настоящие программисты используют самомодифицирующийся код, особенно в тех случаях, когда это экономит 20 наносекунд в середине очень короткого цикла; ("Настоящие программисты не используют Паскаль") Это просто так, чтоб дискуссию подогреть
Экий ты змей... Заварил дискуссию, а теперь подогреваешь)).
Экий ты змей... Заварил дискуссию, а теперь подогреваешь)).
Дык На самом деле я не ожидал, что тема окажется столь горячей Похоже, народ просто соскучился по здоровому флейму Вот я ща подогрею еще...
Сам я писал конструкции вида
Code
BC 0,LABELX OI X'F0',*-4
, и утверждаю, что на моих машинах это было реентерабельно! Т.е. второй и последующий входы шли по другой ветке, но конструкция ДОПУСКАЛА повторый вход, что и есть по определению re-enterable . Ну, кто бросит в меня камень ?
Вот, честно скажу, не знаю - будет ли это корректно работать на современных машинах ?...