Время — это средство, с помощью которого Природа не дает всему происходить сразу. В компьютерах таким средством служат процессы. Процесс — это исполняющаяся программа. Он состоит из исполняемой программы, данных программы и некоторой информации состояния (определяется ниже), необходимой для ее выполнения. Любая ОС имеет средства поддержки процессов. Ранее мы говорили, что процесс можно считать единицей работы системы. Это положение попрежнему остается в силе.
Вероятно, наиболее четкое интуитивное представление о процессе можно получить,
если представить себе систему с разделением времени. Разделение времени, как
отмечалось в лекции 8, означает одновременное совместное использование
процессора и памяти несколькими пользователями. Разделение времени создает у пользователя
иллюзию собственного компьютера. Если в компьютере всего один процессор,
то в каждый конкретный момент времени программу может исполнять только один
Периодически ОС принимает решение прекратить один процесс и начать другой,
например, если первый использовал весь выделенный ему интервал времени процессора.
Если по этой причине процесс временно приостанавливается, то позднее он
будет продолжен, начиная в точности с того места, где прекратился. Следовательно,
вся информация о процессе, называемая информацией состояния, должна быть на
время
Компонент распределения работ OS/400 имеет те же самые функции, но на более высоком уровне. Возможность эффективно распределять работы в системе, важна для производительности широкого класса приложений. Мы начнем с основ управления процессами, а затем обсудим взаимосвязи между управлением процессами и распределением работ.
Конкурентоспособность вычислительной системы часто достигается лишь благодаря нескольким базовым идеям. Идеи, принесшие заслуженную славу AS/400 — это независимость от технологии, обеспечиваемая MI, и высокая производительность, поддерживаемая одноуровневой памятью. Но есть столь же важные, хотя намного менее известные находки разработчиков. Одна из них — структура задач AS/400, которая пока еще так широко не обсуждалась.
IBM, в соответствии с общепринятыми правилами бизнеса, всегда стремилась
запатентовать важные идеологические новшества в своей продукции.
Наиболее важным был Патент США № 4 177 513, защищавший структуру задач
System/38 и
Структура задач — основа построения ОС AS/400. На ней базируются компонент
управления процессами
Микроядро — одна из наиболее горячо обсуждаемых сегодня тем в информатике. Сторонники микроядра утверждают, что эта небольшая центральная часть ОС — основа для модульных, переносимых ОС. Оппоненты же говорят, что микроядро ограничивает возможности многопользовательской ОС. Чуть ли не каждый специалист имеет свою собственную точку зрения на то, как сервисы ОС должны быть распределены относительно микроядра. И все же по одному из положений критики, кажется, договорились — это используемая микроядром схема взаимодействия на основе передачи сообщений. Большинство экспертов считает, что это направление — будущее всех ОС, независимо от того, используют они микроядро или нет.
Чтобы лучше понять схему взаимодействия на основе передачи сообщений, рассмотрим кратко, как традиционно осуществлялось взаимодействие в ОС. Отличным примером может служить ОС Unix.
И первоначальная версия Unix, и большинство современных ее вариантов используют
слоеную архитектуру. Группы функций ОС, такие как файловая подсистема, подсистема
управления процессами и
Однако такое решение усложняет введение новых или изменение существующих элементов структуры — мешает монолитность конструкции. Иерархия слоев объединяет систему в единое целое. Нелегко вынуть один слой и заменить его новым, так как интерфейсов между слоями много, и они разные. Так что изменения требуют глубокого знания ОС и массы времени. Кроме того, многие API между слоями не документированы, что ставит под вопрос корректность работы кода после внесения изменений. То есть добавить новые функции или перенести их с одного уровня на другой становится настоящей проблемой.
Микроядро заменяет описанную вертикальную иерархию взаимосвязей горизонтальной. Все компоненты ОС выше микроядра взаимодействуют друг с другом напрямую, используя проходящие через микроядро сообщения. Микроядро проверяет сообщения, обеспечивает их передачу от одного компонента к другому, контролирует доступ к аппаратным ресурсам. ОС на основе микроядра имеет очень большие возможности расширения. Такая модульная архитектура дает возможность легко подключать новые компоненты, о которых даже и не думали разработчики ОС. При этом работа остальных частей системы не будет нарушена.
Однако все имеет свою цену. В ОС на основе микроядра даже тщательно оптимизированная передача сообщений выполняется не столь быстро, как вызов функции в типичной системе Unix. Но производительность системы все равно может быть выше, если удастся избежать прохода через лишние уровни.
Все, что было сказано о характере взаимодействий в архитектуре микроядра, применимо
и к AS/400. Структура задач как System/38, так и AS/400 использует сообщения,
точно так же, как и микроядро. Сообщения хорошо знакомы пользователям OS/400:
с их помощью взаимодействуют приложения и компоненты системы, в результате
этих взаимодействий осуществляется все распределение работ. Подобно микроядру,
структура задач AS/400 реализована на самом нижнем уровне системы. В
System/38 и ранних моделях AS/400 управление задачами было реализовано в HLIC,
а на RISC-системах AS/400 для достижения оптимальной производительности — в
История микроядра началась в середине 80х в Университете Карнеги-Меллон с
разработки микроядра
Важно отметить, что микроядро — это гораздо больше, чем просто основанный на передаче сообщений механизм взаимодействия и диспетчеризации. Чтобы лучше это понять, мы начнем изучать управление процессами в AS/400 с нижних уровней системы.
Ранее мы определили процесс как единицу работы в системе. То же самое можно сказать
и о задаче. Но по сравнению с задачей, процесс в
Термины "задача" и "процесс" появились в двух разных
В начале разработки System/38 мы пытались определить механизм, с помощью которого ОС смогла бы выполнять свою основную обязанность — распределять работы и ресурсы внутри системы. Мы хотели быть уверены, что все делаем правильно. Тогда, в начале 70-х, идея процесса как единицы работы в системе толькотолько начала использоваться. Но мы полагали, что она подойдет нашей ОС.
Развитие процессоров в течение 60-х годов шло довольно бурно. И все же в те дни процессоры ничего не "знали" о процессах, а "понимали" только прерывания. Прерывание — это изменение нормальной последовательности исполнения команд, вызванное либо ошибкой команды, либо чемто за пределами исполняющейся программы, обычно вводом-выводом. Процессор запускал операцию ввода-вывода, которая затем выполнялась без его участия. Когда вводвывод завершался, нужно было как-то сообщить эту информацию процессору, и в качестве такого механизма использовались прерывания.
Прерывание останавливает исполняющуюся программу и передает управление обработчику прерываний, который предпринимает нужные действия. После этого управление возвращается прерванной программе. Обработчик прерываний обязан возобновить исполнение прерванной программы в точности с того же момента, на котором оно было прервано. Это означает возвращение всех внутренних регистров в состояние, предшествовавшее прерыванию. Некоторые процессоры имеют несколько наборов регистров, и при возникновении прерывания обработчик использует другой набор. Возвращение управления прерванной программе подразумевает переключение обратно на старый набор регистров.
Большинство схем обработки прерываний используют идею приоритета. Приоритет располагает прерывания в порядке их важности, от наиболее к наименее важным. При возникновении прерывания процессор переключается на другую программу только в том случае, если эта программа приоритетней той, что исполняется в данный момент. Большинство процессоров поддерживают ограниченное число приоритетов прерываний. Для поддержки процессов ПО ОС использует механизм прерываний и надстраивает над ним процессы.
В 70-х годах, работая над новым микропрограммируемым процессором для System/38, мы надеялись, что, построив структуру процессов непосредственно над аппаратурой и устранив некоторые накладные расходы прерываний, сможем достичь высокой эффективности системы. Такая структура процессов могла бы использовать ся даже вводомвыводом без отдельного механизма прерываний. Это также сократило бы число схем процессора — цель, близкая и дорогая сердцу каждого разработчика. Фактически, нужно было создать структуру процессов системы и написать для ее поддержки микрокод.
Я очень хорошо помню одну такую дискуссию с техническим менеджером Реем Клотцем и его подчиненными. Я объяснял, что благодаря новой структуре мы не будем ограничены лишь несколькими уровнями прерываний. Мы сможем поддерживать сотни процессов, каждый из которых будет иметь свой уровень приоритета. При желании, даже каждое устройство ввода-вывода может иметь свой собственный приоритет, так как наша система будет поддерживать множественные процессы.
Рэй прервал меня вопросом:
— Вы хотите сказать, что разрабатываете
— Нет, — ответил я, — мы строим систему для поддержки множественных процессов, а не множественных процессоров.
— В чем же разница?
— Процесс — это то же самое, что и задача, — сказал я, а затем повторил, — Мы строим систему для поддержки множественных задач, а не множественных аппаратных процессоров.
После краткого молчания Рэй поинтересовался:
— Но тогда, почему вы не называете их просто задачами?
С этого дня мы так и стали их называть.С каждой задачей AS/400 связан блок управления в памяти, который называется элементом диспетчеризации задач TDE (task dispatching element).

Состояние характеризует способность задачи выполняться процессором. Любая
задача в системе может находиться в одном из четырех состояний. Обратите внимание,
что каждое состояние может обозначаться несколькими терминами. В данном разделе
мы используем имена состояний
Итак, четыре состояния задачи — это:
Четыре состояния задачи и возможные переходы между ними показаны на рисунке 9.1.
(рис 9.1) Состояния задачиВсего возможно 12 переходов из одного состояния в другое, но в AS/400 разрешены только шесть, а именно:
Некоторые из этих переходов знакомы тем, кто работал с командой "WRKSYSSTS".
Она показывает частоту выполнения следующих переходов: "исполнение — ожидание",
"исполнение — готовность" и "ожидание — готовность". Данные значения используются
при настройке уровня активности в
Текущее состояние задачи определяется местом связанного с ней

Находящийся в
Причин тому может быть несколько. Исполняющаяся задача может запустить операцию, которая заставит ее отдать управление, например ожидание завершения ввода-вывода. Отдать управление также приходится, когда задача полностью использует выделенное ей время процессора. Кроме того, может случиться, что исполняющаяся задача будет вытеснена другой, более важной (приоритетной).
Всякий раз, когда исполняющаяся задача отдает управление, оно передается задаче,
следующей по важности в TDQ, которая и становится новой исполняющейся
задачей. Таким образом, любой
(рис 9.2) Очередь диспетчеризации задач

В основе метода синхронизации выполнения задач, а также и для связи между задачами
лежит
Семафор имеет счетчик и список ожидания. Определены две операции (команды). Синхронизация задач осуществляется следующим образом. Оператор V увеличивает значение счетчика на 1. Оператор P проверяет значение счетчика; если оно больше 0, то уменьшает значение на 1 и дает возможность выполняться следующей команде в потоке. Если значение счетчика не больше 0, то оператор Р ждет пока значение увеличится и станет больше 0, прежде чем операция завершится и следующая команда сможет выполняться. То есть ситуация, когда при выполнении оператора Р счетчик не больше 0, означает ожидание. В этом случае, задача, выполнившая оператор Р, ждет до тех пор, пока какаялибо другая задача не увеличит счетчик с помощью оператора V.
Во многих случаях, при синхронизации желательно обменяться некоторой информацией или сообщением. Для поддержки синхронизации и передачи сообщений AS/400 определяет очередь приема-передачи SRQ (send/receive queue). SRQ — это структура данных в памяти, используемая как "почтовый ящик" для передачи сообщений от одной задачи к другой.
Когда исполняющаяся задача выполняет операцию "Отправить сообщение", в очередь
SRQ, связанную с некоторой другой задачей, добавляется структура данных, называемая сообщением приема-передачи SRM (send/receive message).
Некоторое время спустя другая исполняющаяся задача выполняет для данной SRQ
операцию "Отправить сообщение". Если
Любая задача, чей
(рис 9.3) Перемещения элемента диспетчеризации задачНа рисунке не показаны другие структуры данных, которые могут находиться в
очередях
Некоторые читатели, знакомые с командами "SNDPGMMSG" (Send Program Message)
и "RCVMSG" (Receive Message) в OS/400 могут спросить: имеют ли эти команды отношение
к операциям, используемым структурой задач
В предшествующем разделе описывались ситуации, подразумевающие наличие только
одного процессора, и, следовательно, только одной исполняющейся задачи. На многопроцессорной
же системе потенциально может быть несколько исполняющихся
задач.
Ранее мы видели, что система симметричного мультипроцессирования (SMP) дает возможность ОС обрабатывать задачи на любом свободном процессоре или на всех процессорах сразу, при этом память остается общей для всех процессоров. Именно так устроена nканальная (nway) обработка на AS/400. Любой компонент ОС, включая диспетчер задач, может выполняться на любом или на всех процессорах системы.
Диспетчер задач в nканальной системе автоматически обеспечивает баланс нагрузки между процессорами, не требуя изменения программ, написанных для однопроцессорной архитектуры. Так как память для всех процессоров общая, диспетчер задач, независимо от процессора, на котором он выполняется, имеет доступ ко всем очередям, включая TDQ. Однако, диспетчер задач не ограничен тем процессором, на котором он выполняется, — он может вызвать переключение задач и на другом процессоре.
В многопроцессорной системе одновременно исполняется несколько задач — по
одной на процессор. Упрощенно, следует лишь направить на выполнение верхние n
Предположим, что у нас есть две задачи, А и В, исполняющиеся на процессорах 1
и 2 в двухпроцессорной системе. Предположим далее, что задача С, приоритет которой
выше чем у А, но ниже чем у В, выходит из состояния ожидания. Ее
В зависимости от того, насколько давно задача А была вытеснена, мы можем захотеть, а можем и не захотеть начать ее выполнение на процессоре 2. Если задача вытеснена недавно, то в кэше процессора 1 попрежнему находятся команды и данные задачи А. Направление задачи на процессор 2 означало бы, что кэш процессора 2 должен быть перезагружен в результате промахов, что снизит производительность, как данной задачи, так и системы. В данном случае, лучшим выходом было бы начать выполнение на процессоре 2 какойлибо следующей задачи и подождать, пока для задачи А освободится процессор 1.
Мы только что описали понятие сродства кэша (cache affinity). Говорят, что данная задача имеет сродство с некоторым процессором на основании содержимого его кэша. Диспетчеризация задач на многопроцессорной версии AS/400 использует комбинацию приоритета, сродства кэша и еще одной характеристики, под названием приемлемость (eligibility). Приемлемость используют, чтобы ограничить возможный набор процессоров для исполнения данной задачи. Приемлемость никогда не изменяется диспетчером задач. Если все процессоры, для которых приемлемо исполнение данной задачи, заняты задачами более высокого приоритета, то данная задача не направляется на выполнение.
Итак, задача отправляется на выполнение только в том случае, если доступен процессор,
для которого она имеет сродство кэша. Исключение из этого правила делается
тогда, когда его соблюдение может привести к простою процессора или если пропускается
значительное число задач высокого приоритета в TDQ. Пороговое значение
пропуска зависит от числа процессоров и устанавливается
Для диспетчеризации задачи на мультипроцессорной системе используются три
поля
Помимо только что описанной поддержки многопроцессорных систем, AS/400 может иметь множественные TDQ. Данный механизм был включен в оригинальную System/38, чтобы обеспечить диспетчеризацию нескольких очередей, но не использовался там для этой цели. Если число процессоров возрастет настолько, что одиночная TDQ станет тормозить работу системы, то диспетчеризацию можно будет осуществлять с помощью нескольких TDQ.
Современные nканальные процессоры используют модель SMP с разделяемой памятью, в которой все процессоры работают с одной и той же памятью. В лекции 12 мы рассмотрим другие модели SMP, которые найдут применение в будущих системах AS/400. Все они поддерживаются существующей структурой задач.
Давайте, хотя бы кратко, затронем системы асимметричного мультипроцессирования
(
В лекции 10 мы рассмотрим структуру вводавывода AS/400, которая существенно изменилась по сравнению с System/38. AS/400 использует множество процессоров для исполнения разных функций вводавывода. Большая система может иметь сотни таких процессоров. Мы увидим, что каждый из этих процессоров имеет собственную ОС. Хотя большинство из таких ОС разработаны специально для поддержки функций ввода-вывода, некоторые из них все же более универсальны. Такая архитектура позволяет другим ОС и написанным для них приложениям исполняться "под крышей" AS/400. Таким образом, к AS/400 возможно подключать множество таких машин-приложений в дополнение к основным процессорам.
В предыдущих разделах мы рассмотрели более понятную, но упрощенную модель диспетчеризации задач в AS/400. Со времен первой System/38 в структуру задач было внесено множество изменений для удовлетворения требований различных приложений и структур системы. Например, мы предполагали, что когданибудь системе понадобится динамически настраивать приоритет задачи во время исполнения. Предположим, что задача не получает достаточного для ее решения процессорного времени, или заблокировала некоторый системный ресурс, которого ожидает задача с большим приоритетом. Если бы система могла временно повышать и понижать приоритеты подобных задач, то можно было бы найти выход из только что описанных ситуаций. Такая возможность была добавлена в System/38 и ранние AS/400.
С появлением
Теперь, когда мы закончили рассмотрение самого низкого уровня диспетчеризации задач AS/400, можно перейти к рассмотрению этой функции на более высоких уровнях.
Процесс в MI — это
Прежде чем займемся собственно структурой процесса, необходимо разобраться
с типами памяти, задействованными исполняющейся программой. На исполнение
программы сильно влияют компилятор и
Чтобы понять, какие варианты размещения переменных должен поддерживать
процесс, необходимо рассмотреть три отдельные области, используемые для размещения
данных современными
Обратите внимание, что описанные выше области — это области памяти (в общем смысле), а не оперативной памяти. Конкретная система может для реализации этих областей использовать любую комбинацию регистров, оперативной памяти и дисков, поэтому мы и говорим о "просто памяти".

Подобно исходной
Процесс реализован как
Исходная модель процессов очень хорошо работала для приложений, написанных для System/38 и ранних моделей AS/400. Однако переход на блочно-структурированные языки и необходимость поддержки приложений, написанных в соответствии со стандартами POSIX, привели к разработке модели процессов ILE.

Модель процессов ILE впервые появилась на AS/400 в версии V2R3 вместе с одноименной
Давайте рассмотрим модель процессов ILE более подробно. Но прежде остановимся на изменениях, внесенных в AS/400 для поддержки программной модели ILE. В MI для этого используются активизации программ, группы активизации, вызовы процедур и новый процедурный указатель.
В лекции 4 мы говорили о компиляторах и программной модели ILE. Мы
рассмотрели, как ILE изменила способ создания программ, а также концепцию модуля. Вспомним,
что модуль — это результат работы компилятора ILE. Модуль содержит одну или
несколько процедур. Средство связывания (
Программа — это
Программа состоит из одной или нескольких процедур. Одна из процедур определяется при создании программы как точка входа, и именно ей командой "CALLPGM" передается управление. Операция передачи управления процедуре называется вызовом процедуры.
Для вызова всех остальных процедур программы применяется команда "CALLBP". Для идентификации вызываемой процедуры в этой команде используется процедурный указатель. Вызываемая процедура может находиться либо в самой программе (если связана через копию), либо в служебной программе (если связана через ссылку). Обратите внимание, что MI контролирует последовательность вызовов на уровне процедур, а не программ.
Когда приложение впервые переносится на RISCпроцессор, программа исходной модели конвертируется в программу ILE, состоящую из одной процедуры. Таким образом, преобразованная программа исходной модели, как и любая программа с единственной процедурой, всегда вызывается с помощью "CALLPGM". Если программа, созданная компилятором ILE, состоит из нескольких процедур, то первая процедура вызывается с помощью "CALLPGM", а последующие — с помощью "CALLBP".
В лекции 4 мы также затронули группы активизации. Они предоставляют рабочие области для активизации одной или нескольких программ. Каждая группа активизации имеет собственную область статической памяти, область стека и область кучи. Так как с появлением RISC-процессоров осталась только модель ILE, данная рабочая область поддерживает также все процессы оригинальной модели и заменяет собой старые области памяти PASA/PSSA.
Группа активизации — это не
Группа активизации служит не только для разделения на части памяти, используемой процессом. У каждой группы активизации — собственная управляющая информация, что позволяет поддерживать разные режимы защиты, использования файлов и управления транзакциями. Это обеспечивает заданиям поверх MI большую гибкость.
Все группы активизации поименованы либо явно пользователем, либо неявно системой. В определении объектапрограммы для обычных и служебных программ может быть явно задано, в какой поименованной группе активизации они должны выполняться, что вызывает неявное создание данной группы при вызове объекта-программы.
В этом разделе мы заглянем внутрь процесса ILE. Структура процесса ILE сложна, и, подобно многим другим затронутым нами темам, ее описание насыщено таким количеством имен, сокращений и терминов, что может загнать в угол любого специалиста по компьютерам. И хотя знакомство с ней не обязательно для понимания работы процессов AS/400, я включил этот раздел в книгу ради полноты изложения. Итак, мазохисты, если Вам нужна еще одна порция аббревиатур, читайте.

Сначала разберемся с компонентами процесса ILE и сокращениями, их обозначающими:
На рисунке 9.4 показано расположение перечисленных компонентов в
структуре процессов ILE. Обратите внимание, что в PAWA содержится список всех групп активизации
(PAGP) и сами эти группы. На рисунке показаны четыре группы активизации,
хотя как уже упоминалось, их может быть минимум две. По умолчанию всегда
первая ACTGRP — это
(рис 9.4) Структура процесса ILEА теперь заглянем внутрь группы активизации.

Группа активизации содержит целиком или только ссылки на некоторые компоненты со странными, на первый взгляд, именами и аббревиатурами. Давайте сначала разберемся, что это за компоненты.
На рисунке 9.5 показано расположение перечисленных компонентов в группе активизации.
(рис 9.5) Группа активизации ILEИтак, подведем итоги. Каждый процесс AS/400 содержит PAWA. Внутри PAWA находятся PAGP, а также две или более ACTGRP. В каждой ACTGRP — PACB, содержащий несколько MBV, каталог группы активизации, PRT, список кучи, одну или несколько областей кучи, сегменты автоматической и статической памяти. Надеюсь, теперь Вам все понятно?
Если нечто не соответствует общему правилу, то его обычно называют исключением из правила. В вычислительных системах также имеются исключения из общих правил обработки. В этом разделе мы рассмотрим обработку исключений, событий и прерываний на AS/400.
На аппаратном уровне обычно говорят о прерываниях. Как упоминалось выше в
этой лекции, прерывание — это событие, отличное от
Программы и процессы MI ничего не "знают" о прерываниях на аппаратном уровне.
Однако, о прерывании, возникшем в результате исполнения программы MI, должно
быть сообщено MI. За обнаружение, обработку и сообщение MI о прерываниях
отвечает
В MI различаются исключения и события. Исключение — это либо ошибка, обнаруженная машиной при исполнении команды, либо определенное состояние, обнаруженное пользовательской программой. Событие — это происшествие, возникающее в процессе работы машины и, напротив, представляющее интерес для ее пользователей. Исключения синхронны, то есть вызываются исполнением некоторой команды. События асинхронны, то есть их причина — за пределами исполняющейся в данной момент команды. Часто исключения и события очень легко перепутать.
Рассмотрим несколько примеров. Предположим, что программа пытается разделить число на 0 — очевидная ошибка. Когда эта ошибка обнаружится, о ней будет сообщено с помощью исключения. Исключение синхронно, так как, если данные всегда одинаковы, та же самая ошибка будет происходить в том же самом месте при каждом выполнении программы.
Теперь представим себе, что параллельно с программой исполняется операция ввода-вывода, например, чтение записи с диска. В некоторый момент времени операция ввода-вывода завершается, и об этом факте необходимо сообщить. Механизм сообщения о завершении ввода-вывода — это событие, так как его причина — действие, не связанное с выполняемой в данный момент командой. Оно асинхронно, то есть оно не связано с исполнением программы и может произойти в любой момент.
Подобно подразделению исключений MI на два типа: ошибки и пользовательские состояния,
— есть и два
С появлением
С появлением ILE мониторинг и обработка исключений стали явно управляться пользователем MI. Мониторы исключений используются для отслеживания исключений. Существуют команды MI для включения и отключения мониторов исключений. Одновременно может быть включено несколько мониторов. У каждого из них свой приоритет, в соответствии с которым осуществляется поиск и обработка прерываний в том случае, если включено несколько мониторов. С каждым монитором всегда связана внешняя процедура ILE, обрабатывающая исключения.

Управление исключениями в
Прерывания классифицируются по тому, вызваны ли они исполнением конкретной
команды или какимто другим событием в системе. В архитектуре
Некоторые прерывания генерируются в результате выполнения команд. Перечислим их.
Для обработки прерываний в
Если исключение вызвано командой и не было обработано, то FLEH передает управление
обработчику исключений второго уровня SLEH (Second Level Exception
Handler). SLEH обрабатывает менее частые исключения, такие как исключение блокировки
Если же необработанное исключение произошло при исполнении команды
Сначала TLEH вызывает обработчики исключений компонентов CSEH (Component
Specific Exception Handlers), которые были установлены различными компонентами
Затем TLEH определяет, как быть с данным исключением. Если исключение произошло
в задаче
Генератор исключений MI подготавливает данные для сообщения процессу, выполняет некоторые операции очистки и отправляет сообщение в пространство очередей соответствующего процесса.

Так как только что описанным процедурам обработки исключений может потребоваться
доступ к привилегированным командам
В дополнение к простому переключению, механизм прерываний должен выполнять синхронизацию контекста. Синхронизация означает, что аппаратура процессора обязана гарантировать завершение выполнения всех команд, запущенных до прерывания, в том же контексте, в котором они были запущены. Команды, следующие после этой операции, должны выбираться и исполняться в новом контексте.
В лекции 8 мы рассматривали
Если при вызове процедуры
При возникновении прерывания аппаратура процессора
После сохранения текущего состояния машины, аппаратура прерываний изменяет
некоторые биты
В результате только что описанной аппаратной обработки прерывания управление
передается первой команде одного из обработчиков прерываний
В конце процедуры обработки прерываний выполняется еще одна специальная команда
Две только что описанные команды
В AS/400 мы хотели иметь аналогичный механизм, позволяющий одной процедуре
Команда "scv" похожа на команду "
Другая отличительная черта "scv" в том, что эта команда не изменяет значения
битов
Кроме того, команда "scv" не использует регистры
Команда "rfscv", как это и следует из ее названия, выполняет возврат после "scv".
Прочитав предшествующие разделы, Вы увидели, как развита современная структура процессов. Наряду с огромными возможностями, она отличается и огромной сложностью в управлении, которое едва ли под силу рядовому пользователю. В соответствии с философией технологической независимости и интегрированности, AS/400 берет и эту обязанность на себя посредством компонента управления заданиями OS/400. Пользователь имеет дело с определением задания, которое точнее соответствует прикладной программе. Все остальное делает OS/400 и нижележащие компоненты.
Построение всей структуры заданий поверх модели процессов имеет один недостаток:
намного меньшую гибкость, чем при настройке характеристик процесса в соответствии
с характеристиками конкретного приложения. Подобная настройка позволяет
повысить производительность приложения, которому не нужны все возможности,
предоставляемые структурой задач. Фундаментальным строительным блоком многих
новых ОС становится облегченный процесс или
Важно отметить, что структура задач AS/400 на аппаратном уровне — одна из наиболее
эффективных. В коммерческом приложении значительная часть (до 80–90
процентов) обработки, выполняется ОС, а не самим приложением. Приложение запрашивает
обработку у ОС, вместо того чтобы выполнять ее самостоятельно. Непосредственно
выполнением такой обработки занимается, в основном,
Давайте рассмотрим, как в AS/400 поддерживаются потоки, и как это позволяет переносить приложения, написанные для других ОС.
Управление заданиями, переданными пользователем AS/400, выполняется компонентом управления заданиями OS/400. Задание — это единица работы, переданной на выполнение. Как Вы помните, управление заданиями различает несколько типов заданий, включая традиционные интерактивные и пакетные.
В предшествующих разделах обсуждался процесс, как единица работы, переданной
управлением заданиями нижележащим компонентам. Объектупроцессу MI нет
аналогов в OS/400. Задание — это не объект OS/400. Не являются таковыми и маршрутизация
или подсистемы, которые мы скоро будем рассматривать. Управление заданиями
имеет дело непосредственно с процессами. Задание может выполняться в
рамках одного или нескольких процессов, запуск которых осуществляется одним или
несколькими
Управление заданиями рассматривает систему как иерархию доменов, показан ную на рисунке 9.6. Шаг — самый низкий уровень этой иерархии. Следующий уровень — задание, которое обрабатывается одним или несколькими последовательными шагами. Задания находятся в подсистемах, каждая из которых содержит задания сходного типа, например, все интерактивные задания. Как мы скоро увидим, подсистемы управляют некоторыми системными ресурсами. Наконец, самый верхний уровень иерархии — собственно система, где повсеместно используются некоторые системные параметры и сетевые атрибуты. Пример — имя компьютера в вычислительной сети.
(рис 9.6) Концепции управления работой
Подсистема AS/400 — это одна из предопределенных
Описание задания — это объект OS/400, задающий атрибуты и ресурсы, связанные с заданием. Он определяет:
Класс представляет собой объект OS/400, содержащий параметры, которые задают среду выполнения. Некоторые из них относятся к выделенным заданию ресурсам процессора. Например, может быть ограничено число процессов класса, выполняющихся одновременно. Это позволяет управлять объемом взаимного влияния процессов, конкурирующих за один и тот же системный ресурс. Данный предел, обычно называемый уровнем активности, связан с пулом памяти.
Пул памяти, (не путать с пулом вспомогательной памяти!) — это средство резервирования
для подсистемы некоторого объема основной (оперативной) памяти. В основной
памяти может быть размещено до 16
Размеры, число и уровни активности
С появлением модели процессов ILE, описанной ранее, изменилась и структура задания в AS/400. Как именно — можно понять, сравнив ресурсы приложений, доступные в старой и новой структурах заданий, а также особенности их использования. Как правило, ресурсы приложений для задания включают в себя разделяемые файлы, управление транзакциями и память.
| Старая структура задания | Новая структура задания на основе модели процессов ILE |
| Разделяемые файлы видимы всем прикладным программам задания | Разделяемые файлы видимы всем прикладным программам задания, либо каждое приложение определяет собственное использование файлов |
| Внешние имена — общие на уровне задания, а не на уровне приложений | Область видимости внешних имен - одиночное приложение, то есть каждое приложение задания имеет свое собственное пространство имен для |
| Управление транзакциями осуществляется для всего задания | Управление транзакциями осуществляется как на уровне задания, так и на уровне приложений |
| Допускается только одна активизация программы в задании | Допускаются множественные активизации одной и той же программы. Каждая активизация имеет собственные ( |
| Выделяется только одна область статической и автоматической (стек) памяти и одна область динамической памяти для каждого языка программирования | У каждой программы своя собственная защищенная статическая, автоматическая (стек) и динамическая (куча) память |
Как уже упоминалось, первоначально в AS/400 было определено три уровня работы.
Самый низкий уровень, под MI, — задача. Процесс "живет" на уровне MI и построен
на структуре задач
Полнофункциональное задание обеспечивает лучшие возможности разделения ресурсов и защиты, чем процессы в других ОС; однако, для создания такого задания нужно больше времени. Задание AS/400 можно называть "полновесным".
Приложения, написанные специально для AS/400, обычно соответствуют структуре полнофункционального задания, то есть, исполняются внутри одного задания. Динамическое создание множества заданий для одного приложения не рекомендуется, из-за больших накладных расходов.
Конечно, для некоторых других ОС приложения пишутся не так. Например, Unix и Windows NT определяют структуру, в которой процессы могут быстро создаваться, существовать и затем разрушаться. Приложения, написанные для таких ОС, часто используют множество процессов. Для достижения достаточной производительности приложениям такого типа нужен очень "легковесный" процесс.
Данная тенденция привела к новому пониманию процесса. Например, в модели POSIX процессы разделены на два отдельных компонента. Первый содержит все ресурсы для группы взаимодействующих единиц. Эти ресурсы включают в себя виртуальную память, коммуникационные порты и файлы, выделенные процессу. Некоторые ОС даже называют эту часть процесса задачей.
Вторая часть процесса — активная среда выполнения, обычно называемая потоком.
В процессе может исполняться один или несколько параллельных потоков. Исходное
определение процесса было ограничено только одной исполняющейся единицей. Новое
определение допускает несколько единиц исполнения — потоков. Поток — это
Достоинство потоков в том, что они позволяют разным частям одного приложения исполняться параллельно. Особенно важны потоки в распределенной среде, они обязательны для стандарта, известного как DCE (Distributed Computing Environment). DCE использует модель процессов POSIX.
Поскольку мы хотели реализовать в AS/400 интерфейсы DCE и POSIX, нам нужно
было найти некоторый способ поддержки потоков POSIX. Мы рассмотрели две модели.
Первая — встроенные потоки, где в процессе принимают участие множество
Вторая модель потоков основывалась на концепции разделяемой группы активизации.
Несколько заданий OS/400 могут разделять одну группу активизации. Таким
образом, поток — задание OS/400, использующее разделяемую группу активизации.
Процесс POSIX может быть представлен как совокупность всех заданий OS/400, совместно
использующих группу активизации. Все потоки процесса POSIX совместно
используют общие
Такое использование задания OS/400 в качестве потока, успешно работает, но имеет один существенный недостаток: для создания полнофункционального задания требуется больше времени, по сравнению с другими системами, где применяются "легковесные" потоки. Для повышения производительности AS/400 мы предусмотрели пул заранее созданных заданий. Когда нужно быстро создать поток, используется одно из заданий пула. При разрушении потока задание возвращается в пул.
Данная модель потоков была представлена как часть CPA (Common Programming)
API в V3R1. Начальная цель была достигнута, но мы знали, что это паллиатив. Хотелось
перенести на AS/400 несколько других приложений, например, Lotus Domino.
Мы рассмотрим Domino в его связи с AS/400 в лекции 11, сейчас же нам следует признать,
что Domino написан для
На рисунке 9.7 показано соотношение двух потоковых моделей системы и средств поддержки приложений (application enabler). Последние включают в себя библиотеки времени исполнения для языков, типа С, С++ и Java, интегрированную файловую систему и библиотеки классов объектов. В лекции 11 мы рассмотрим Java и его объектную модель, а также модели IBM SOM (System Object Model) и DSOM (Distributed System Object Model).
(рис 9.7) Средства поддержки приложений для потоковМы полагаем, что с течением времени все больше и больше приложений будет со
здаваться для
В разных ОС процессы реализованы поразному. Каждая система определяет мощность процесса, его структуру, а также то, как он должен быть защищен. Модель процессов AS/400 доказала свою высокую эффективность и способность поддержки важнейших приложений. Современнейшая структура задач, на основе которой работают все остальные функции системы, позволяет моделям процессов и заданий эволюционировать для нужд будущих сред приложений.
В следующей лекции мы рассмотрим подсистему ввода-вывода и направления ее развития для поддержки будущих приложений AS/400. Структура задач играет важную роль в системе ввода-вывода. Это верно и теперь, и в будущем.
Время — это средство, с помощью которого Природа не дает всему происходить сразу. В компьютерах таким средством служат процессы. Процесс — это исполняющаяся программа. Он состоит из исполняемой программы, данных программы и некоторой информации состояния (определяется ниже), необходимой для ее выполнения. Любая ОС имеет средства поддержки процессов. Ранее мы говорили, что процесс можно считать единицей работы системы. Это положение попрежнему остается в силе.
Вероятно, наиболее четкое интуитивное представление о процессе можно получить,
если представить себе систему с разделением времени. Разделение времени, как
отмечалось в лекции 8, означает одновременное совместное использование
процессора и памяти несколькими пользователями. Разделение времени создает у пользователя
иллюзию собственного компьютера. Если в компьютере всего один процессор,
то в каждый конкретный момент времени программу может исполнять только один
Периодически ОС принимает решение прекратить один процесс и начать другой,
например, если первый использовал весь выделенный ему интервал времени процессора.
Если по этой причине процесс временно приостанавливается, то позднее он
будет продолжен, начиная в точности с того места, где прекратился. Следовательно,
вся информация о процессе, называемая информацией состояния, должна быть на
время
Компонент распределения работ OS/400 имеет те же самые функции, но на более высоком уровне. Возможность эффективно распределять работы в системе, важна для производительности широкого класса приложений. Мы начнем с основ управления процессами, а затем обсудим взаимосвязи между управлением процессами и распределением работ.
Конкурентоспособность вычислительной системы часто достигается лишь благодаря нескольким базовым идеям. Идеи, принесшие заслуженную славу AS/400 — это независимость от технологии, обеспечиваемая MI, и высокая производительность, поддерживаемая одноуровневой памятью. Но есть столь же важные, хотя намного менее известные находки разработчиков. Одна из них — структура задач AS/400, которая пока еще так широко не обсуждалась.
IBM, в соответствии с общепринятыми правилами бизнеса, всегда стремилась
запатентовать важные идеологические новшества в своей продукции.
Наиболее важным был Патент США № 4 177 513, защищавший структуру задач
System/38 и
Структура задач — основа построения ОС AS/400. На ней базируются компонент
управления процессами
Микроядро — одна из наиболее горячо обсуждаемых сегодня тем в информатике. Сторонники микроядра утверждают, что эта небольшая центральная часть ОС — основа для модульных, переносимых ОС. Оппоненты же говорят, что микроядро ограничивает возможности многопользовательской ОС. Чуть ли не каждый специалист имеет свою собственную точку зрения на то, как сервисы ОС должны быть распределены относительно микроядра. И все же по одному из положений критики, кажется, договорились — это используемая микроядром схема взаимодействия на основе передачи сообщений. Большинство экспертов считает, что это направление — будущее всех ОС, независимо от того, используют они микроядро или нет.
Чтобы лучше понять схему взаимодействия на основе передачи сообщений, рассмотрим кратко, как традиционно осуществлялось взаимодействие в ОС. Отличным примером может служить ОС Unix.
И первоначальная версия Unix, и большинство современных ее вариантов используют
слоеную архитектуру. Группы функций ОС, такие как файловая подсистема, подсистема
управления процессами и
Однако такое решение усложняет введение новых или изменение существующих элементов структуры — мешает монолитность конструкции. Иерархия слоев объединяет систему в единое целое. Нелегко вынуть один слой и заменить его новым, так как интерфейсов между слоями много, и они разные. Так что изменения требуют глубокого знания ОС и массы времени. Кроме того, многие API между слоями не документированы, что ставит под вопрос корректность работы кода после внесения изменений. То есть добавить новые функции или перенести их с одного уровня на другой становится настоящей проблемой.
Микроядро заменяет описанную вертикальную иерархию взаимосвязей горизонтальной. Все компоненты ОС выше микроядра взаимодействуют друг с другом напрямую, используя проходящие через микроядро сообщения. Микроядро проверяет сообщения, обеспечивает их передачу от одного компонента к другому, контролирует доступ к аппаратным ресурсам. ОС на основе микроядра имеет очень большие возможности расширения. Такая модульная архитектура дает возможность легко подключать новые компоненты, о которых даже и не думали разработчики ОС. При этом работа остальных частей системы не будет нарушена.
Однако все имеет свою цену. В ОС на основе микроядра даже тщательно оптимизированная передача сообщений выполняется не столь быстро, как вызов функции в типичной системе Unix. Но производительность системы все равно может быть выше, если удастся избежать прохода через лишние уровни.
Все, что было сказано о характере взаимодействий в архитектуре микроядра, применимо
и к AS/400. Структура задач как System/38, так и AS/400 использует сообщения,
точно так же, как и микроядро. Сообщения хорошо знакомы пользователям OS/400:
с их помощью взаимодействуют приложения и компоненты системы, в результате
этих взаимодействий осуществляется все распределение работ. Подобно микроядру,
структура задач AS/400 реализована на самом нижнем уровне системы. В
System/38 и ранних моделях AS/400 управление задачами было реализовано в HLIC,
а на RISC-системах AS/400 для достижения оптимальной производительности — в
История микроядра началась в середине 80х в Университете Карнеги-Меллон с
разработки микроядра
Важно отметить, что микроядро — это гораздо больше, чем просто основанный на передаче сообщений механизм взаимодействия и диспетчеризации. Чтобы лучше это понять, мы начнем изучать управление процессами в AS/400 с нижних уровней системы.
Ранее мы определили процесс как единицу работы в системе. То же самое можно сказать
и о задаче. Но по сравнению с задачей, процесс в
Термины "задача" и "процесс" появились в двух разных
В начале разработки System/38 мы пытались определить механизм, с помощью которого ОС смогла бы выполнять свою основную обязанность — распределять работы и ресурсы внутри системы. Мы хотели быть уверены, что все делаем правильно. Тогда, в начале 70-х, идея процесса как единицы работы в системе толькотолько начала использоваться. Но мы полагали, что она подойдет нашей ОС.
Развитие процессоров в течение 60-х годов шло довольно бурно. И все же в те дни процессоры ничего не "знали" о процессах, а "понимали" только прерывания. Прерывание — это изменение нормальной последовательности исполнения команд, вызванное либо ошибкой команды, либо чемто за пределами исполняющейся программы, обычно вводом-выводом. Процессор запускал операцию ввода-вывода, которая затем выполнялась без его участия. Когда вводвывод завершался, нужно было как-то сообщить эту информацию процессору, и в качестве такого механизма использовались прерывания.
Прерывание останавливает исполняющуюся программу и передает управление обработчику прерываний, который предпринимает нужные действия. После этого управление возвращается прерванной программе. Обработчик прерываний обязан возобновить исполнение прерванной программы в точности с того же момента, на котором оно было прервано. Это означает возвращение всех внутренних регистров в состояние, предшествовавшее прерыванию. Некоторые процессоры имеют несколько наборов регистров, и при возникновении прерывания обработчик использует другой набор. Возвращение управления прерванной программе подразумевает переключение обратно на старый набор регистров.
Большинство схем обработки прерываний используют идею приоритета. Приоритет располагает прерывания в порядке их важности, от наиболее к наименее важным. При возникновении прерывания процессор переключается на другую программу только в том случае, если эта программа приоритетней той, что исполняется в данный момент. Большинство процессоров поддерживают ограниченное число приоритетов прерываний. Для поддержки процессов ПО ОС использует механизм прерываний и надстраивает над ним процессы.
В 70-х годах, работая над новым микропрограммируемым процессором для System/38, мы надеялись, что, построив структуру процессов непосредственно над аппаратурой и устранив некоторые накладные расходы прерываний, сможем достичь высокой эффективности системы. Такая структура процессов могла бы использовать ся даже вводомвыводом без отдельного механизма прерываний. Это также сократило бы число схем процессора — цель, близкая и дорогая сердцу каждого разработчика. Фактически, нужно было создать структуру процессов системы и написать для ее поддержки микрокод.
Я очень хорошо помню одну такую дискуссию с техническим менеджером Реем Клотцем и его подчиненными. Я объяснял, что благодаря новой структуре мы не будем ограничены лишь несколькими уровнями прерываний. Мы сможем поддерживать сотни процессов, каждый из которых будет иметь свой уровень приоритета. При желании, даже каждое устройство ввода-вывода может иметь свой собственный приоритет, так как наша система будет поддерживать множественные процессы.
Рэй прервал меня вопросом:
— Вы хотите сказать, что разрабатываете
— Нет, — ответил я, — мы строим систему для поддержки множественных процессов, а не множественных процессоров.
— В чем же разница?
— Процесс — это то же самое, что и задача, — сказал я, а затем повторил, — Мы строим систему для поддержки множественных задач, а не множественных аппаратных процессоров.
После краткого молчания Рэй поинтересовался:
— Но тогда, почему вы не называете их просто задачами?
С этого дня мы так и стали их называть.С каждой задачей AS/400 связан блок управления в памяти, который называется элементом диспетчеризации задач TDE (task dispatching element).

Состояние характеризует способность задачи выполняться процессором. Любая
задача в системе может находиться в одном из четырех состояний. Обратите внимание,
что каждое состояние может обозначаться несколькими терминами. В данном разделе
мы используем имена состояний
Итак, четыре состояния задачи — это:
Четыре состояния задачи и возможные переходы между ними показаны на рисунке 9.1.
(рис 9.1) Состояния задачиВсего возможно 12 переходов из одного состояния в другое, но в AS/400 разрешены только шесть, а именно:
Некоторые из этих переходов знакомы тем, кто работал с командой "WRKSYSSTS".
Она показывает частоту выполнения следующих переходов: "исполнение — ожидание",
"исполнение — готовность" и "ожидание — готовность". Данные значения используются
при настройке уровня активности в
Текущее состояние задачи определяется местом связанного с ней

Находящийся в
Причин тому может быть несколько. Исполняющаяся задача может запустить операцию, которая заставит ее отдать управление, например ожидание завершения ввода-вывода. Отдать управление также приходится, когда задача полностью использует выделенное ей время процессора. Кроме того, может случиться, что исполняющаяся задача будет вытеснена другой, более важной (приоритетной).
Всякий раз, когда исполняющаяся задача отдает управление, оно передается задаче,
следующей по важности в TDQ, которая и становится новой исполняющейся
задачей. Таким образом, любой
(рис 9.2) Очередь диспетчеризации задач

В основе метода синхронизации выполнения задач, а также и для связи между задачами
лежит
Семафор имеет счетчик и список ожидания. Определены две операции (команды). Синхронизация задач осуществляется следующим образом. Оператор V увеличивает значение счетчика на 1. Оператор P проверяет значение счетчика; если оно больше 0, то уменьшает значение на 1 и дает возможность выполняться следующей команде в потоке. Если значение счетчика не больше 0, то оператор Р ждет пока значение увеличится и станет больше 0, прежде чем операция завершится и следующая команда сможет выполняться. То есть ситуация, когда при выполнении оператора Р счетчик не больше 0, означает ожидание. В этом случае, задача, выполнившая оператор Р, ждет до тех пор, пока какаялибо другая задача не увеличит счетчик с помощью оператора V.
Во многих случаях, при синхронизации желательно обменяться некоторой информацией или сообщением. Для поддержки синхронизации и передачи сообщений AS/400 определяет очередь приема-передачи SRQ (send/receive queue). SRQ — это структура данных в памяти, используемая как "почтовый ящик" для передачи сообщений от одной задачи к другой.
Когда исполняющаяся задача выполняет операцию "Отправить сообщение", в очередь
SRQ, связанную с некоторой другой задачей, добавляется структура данных, называемая сообщением приема-передачи SRM (send/receive message).
Некоторое время спустя другая исполняющаяся задача выполняет для данной SRQ
операцию "Отправить сообщение". Если
Любая задача, чей
(рис 9.3) Перемещения элемента диспетчеризации задачНа рисунке не показаны другие структуры данных, которые могут находиться в
очередях
Некоторые читатели, знакомые с командами "SNDPGMMSG" (Send Program Message)
и "RCVMSG" (Receive Message) в OS/400 могут спросить: имеют ли эти команды отношение
к операциям, используемым структурой задач
В предшествующем разделе описывались ситуации, подразумевающие наличие только
одного процессора, и, следовательно, только одной исполняющейся задачи. На многопроцессорной
же системе потенциально может быть несколько исполняющихся
задач.
Ранее мы видели, что система симметричного мультипроцессирования (SMP) дает возможность ОС обрабатывать задачи на любом свободном процессоре или на всех процессорах сразу, при этом память остается общей для всех процессоров. Именно так устроена nканальная (nway) обработка на AS/400. Любой компонент ОС, включая диспетчер задач, может выполняться на любом или на всех процессорах системы.
Диспетчер задач в nканальной системе автоматически обеспечивает баланс нагрузки между процессорами, не требуя изменения программ, написанных для однопроцессорной архитектуры. Так как память для всех процессоров общая, диспетчер задач, независимо от процессора, на котором он выполняется, имеет доступ ко всем очередям, включая TDQ. Однако, диспетчер задач не ограничен тем процессором, на котором он выполняется, — он может вызвать переключение задач и на другом процессоре.
В многопроцессорной системе одновременно исполняется несколько задач — по
одной на процессор. Упрощенно, следует лишь направить на выполнение верхние n
Предположим, что у нас есть две задачи, А и В, исполняющиеся на процессорах 1
и 2 в двухпроцессорной системе. Предположим далее, что задача С, приоритет которой
выше чем у А, но ниже чем у В, выходит из состояния ожидания. Ее
В зависимости от того, насколько давно задача А была вытеснена, мы можем захотеть, а можем и не захотеть начать ее выполнение на процессоре 2. Если задача вытеснена недавно, то в кэше процессора 1 попрежнему находятся команды и данные задачи А. Направление задачи на процессор 2 означало бы, что кэш процессора 2 должен быть перезагружен в результате промахов, что снизит производительность, как данной задачи, так и системы. В данном случае, лучшим выходом было бы начать выполнение на процессоре 2 какойлибо следующей задачи и подождать, пока для задачи А освободится процессор 1.
Мы только что описали понятие сродства кэша (cache affinity). Говорят, что данная задача имеет сродство с некоторым процессором на основании содержимого его кэша. Диспетчеризация задач на многопроцессорной версии AS/400 использует комбинацию приоритета, сродства кэша и еще одной характеристики, под названием приемлемость (eligibility). Приемлемость используют, чтобы ограничить возможный набор процессоров для исполнения данной задачи. Приемлемость никогда не изменяется диспетчером задач. Если все процессоры, для которых приемлемо исполнение данной задачи, заняты задачами более высокого приоритета, то данная задача не направляется на выполнение.
Итак, задача отправляется на выполнение только в том случае, если доступен процессор,
для которого она имеет сродство кэша. Исключение из этого правила делается
тогда, когда его соблюдение может привести к простою процессора или если пропускается
значительное число задач высокого приоритета в TDQ. Пороговое значение
пропуска зависит от числа процессоров и устанавливается
Для диспетчеризации задачи на мультипроцессорной системе используются три
поля
Помимо только что описанной поддержки многопроцессорных систем, AS/400 может иметь множественные TDQ. Данный механизм был включен в оригинальную System/38, чтобы обеспечить диспетчеризацию нескольких очередей, но не использовался там для этой цели. Если число процессоров возрастет настолько, что одиночная TDQ станет тормозить работу системы, то диспетчеризацию можно будет осуществлять с помощью нескольких TDQ.
Современные nканальные процессоры используют модель SMP с разделяемой памятью, в которой все процессоры работают с одной и той же памятью. В лекции 12 мы рассмотрим другие модели SMP, которые найдут применение в будущих системах AS/400. Все они поддерживаются существующей структурой задач.
Давайте, хотя бы кратко, затронем системы асимметричного мультипроцессирования
(
В лекции 10 мы рассмотрим структуру вводавывода AS/400, которая существенно изменилась по сравнению с System/38. AS/400 использует множество процессоров для исполнения разных функций вводавывода. Большая система может иметь сотни таких процессоров. Мы увидим, что каждый из этих процессоров имеет собственную ОС. Хотя большинство из таких ОС разработаны специально для поддержки функций ввода-вывода, некоторые из них все же более универсальны. Такая архитектура позволяет другим ОС и написанным для них приложениям исполняться "под крышей" AS/400. Таким образом, к AS/400 возможно подключать множество таких машин-приложений в дополнение к основным процессорам.
В предыдущих разделах мы рассмотрели более понятную, но упрощенную модель диспетчеризации задач в AS/400. Со времен первой System/38 в структуру задач было внесено множество изменений для удовлетворения требований различных приложений и структур системы. Например, мы предполагали, что когданибудь системе понадобится динамически настраивать приоритет задачи во время исполнения. Предположим, что задача не получает достаточного для ее решения процессорного времени, или заблокировала некоторый системный ресурс, которого ожидает задача с большим приоритетом. Если бы система могла временно повышать и понижать приоритеты подобных задач, то можно было бы найти выход из только что описанных ситуаций. Такая возможность была добавлена в System/38 и ранние AS/400.
С появлением
Теперь, когда мы закончили рассмотрение самого низкого уровня диспетчеризации задач AS/400, можно перейти к рассмотрению этой функции на более высоких уровнях.
Процесс в MI — это
Прежде чем займемся собственно структурой процесса, необходимо разобраться
с типами памяти, задействованными исполняющейся программой. На исполнение
программы сильно влияют компилятор и
Чтобы понять, какие варианты размещения переменных должен поддерживать
процесс, необходимо рассмотреть три отдельные области, используемые для размещения
данных современными
Обратите внимание, что описанные выше области — это области памяти (в общем смысле), а не оперативной памяти. Конкретная система может для реализации этих областей использовать любую комбинацию регистров, оперативной памяти и дисков, поэтому мы и говорим о "просто памяти".

Подобно исходной
Процесс реализован как
Исходная модель процессов очень хорошо работала для приложений, написанных для System/38 и ранних моделей AS/400. Однако переход на блочно-структурированные языки и необходимость поддержки приложений, написанных в соответствии со стандартами POSIX, привели к разработке модели процессов ILE.

Модель процессов ILE впервые появилась на AS/400 в версии V2R3 вместе с одноименной
Давайте рассмотрим модель процессов ILE более подробно. Но прежде остановимся на изменениях, внесенных в AS/400 для поддержки программной модели ILE. В MI для этого используются активизации программ, группы активизации, вызовы процедур и новый процедурный указатель.
В лекции 4 мы говорили о компиляторах и программной модели ILE. Мы
рассмотрели, как ILE изменила способ создания программ, а также концепцию модуля. Вспомним,
что модуль — это результат работы компилятора ILE. Модуль содержит одну или
несколько процедур. Средство связывания (
Программа — это
Программа состоит из одной или нескольких процедур. Одна из процедур определяется при создании программы как точка входа, и именно ей командой "CALLPGM" передается управление. Операция передачи управления процедуре называется вызовом процедуры.
Для вызова всех остальных процедур программы применяется команда "CALLBP". Для идентификации вызываемой процедуры в этой команде используется процедурный указатель. Вызываемая процедура может находиться либо в самой программе (если связана через копию), либо в служебной программе (если связана через ссылку). Обратите внимание, что MI контролирует последовательность вызовов на уровне процедур, а не программ.
Когда приложение впервые переносится на RISCпроцессор, программа исходной модели конвертируется в программу ILE, состоящую из одной процедуры. Таким образом, преобразованная программа исходной модели, как и любая программа с единственной процедурой, всегда вызывается с помощью "CALLPGM". Если программа, созданная компилятором ILE, состоит из нескольких процедур, то первая процедура вызывается с помощью "CALLPGM", а последующие — с помощью "CALLBP".
В лекции 4 мы также затронули группы активизации. Они предоставляют рабочие области для активизации одной или нескольких программ. Каждая группа активизации имеет собственную область статической памяти, область стека и область кучи. Так как с появлением RISC-процессоров осталась только модель ILE, данная рабочая область поддерживает также все процессы оригинальной модели и заменяет собой старые области памяти PASA/PSSA.
Группа активизации — это не
Группа активизации служит не только для разделения на части памяти, используемой процессом. У каждой группы активизации — собственная управляющая информация, что позволяет поддерживать разные режимы защиты, использования файлов и управления транзакциями. Это обеспечивает заданиям поверх MI большую гибкость.
Все группы активизации поименованы либо явно пользователем, либо неявно системой. В определении объектапрограммы для обычных и служебных программ может быть явно задано, в какой поименованной группе активизации они должны выполняться, что вызывает неявное создание данной группы при вызове объекта-программы.
В этом разделе мы заглянем внутрь процесса ILE. Структура процесса ILE сложна, и, подобно многим другим затронутым нами темам, ее описание насыщено таким количеством имен, сокращений и терминов, что может загнать в угол любого специалиста по компьютерам. И хотя знакомство с ней не обязательно для понимания работы процессов AS/400, я включил этот раздел в книгу ради полноты изложения. Итак, мазохисты, если Вам нужна еще одна порция аббревиатур, читайте.

Сначала разберемся с компонентами процесса ILE и сокращениями, их обозначающими:
На рисунке 9.4 показано расположение перечисленных компонентов в
структуре процессов ILE. Обратите внимание, что в PAWA содержится список всех групп активизации
(PAGP) и сами эти группы. На рисунке показаны четыре группы активизации,
хотя как уже упоминалось, их может быть минимум две. По умолчанию всегда
первая ACTGRP — это
(рис 9.4) Структура процесса ILEА теперь заглянем внутрь группы активизации.

Группа активизации содержит целиком или только ссылки на некоторые компоненты со странными, на первый взгляд, именами и аббревиатурами. Давайте сначала разберемся, что это за компоненты.
На рисунке 9.5 показано расположение перечисленных компонентов в группе активизации.
(рис 9.5) Группа активизации ILEИтак, подведем итоги. Каждый процесс AS/400 содержит PAWA. Внутри PAWA находятся PAGP, а также две или более ACTGRP. В каждой ACTGRP — PACB, содержащий несколько MBV, каталог группы активизации, PRT, список кучи, одну или несколько областей кучи, сегменты автоматической и статической памяти. Надеюсь, теперь Вам все понятно?
Если нечто не соответствует общему правилу, то его обычно называют исключением из правила. В вычислительных системах также имеются исключения из общих правил обработки. В этом разделе мы рассмотрим обработку исключений, событий и прерываний на AS/400.
На аппаратном уровне обычно говорят о прерываниях. Как упоминалось выше в
этой лекции, прерывание — это событие, отличное от
Программы и процессы MI ничего не "знают" о прерываниях на аппаратном уровне.
Однако, о прерывании, возникшем в результате исполнения программы MI, должно
быть сообщено MI. За обнаружение, обработку и сообщение MI о прерываниях
отвечает
В MI различаются исключения и события. Исключение — это либо ошибка, обнаруженная машиной при исполнении команды, либо определенное состояние, обнаруженное пользовательской программой. Событие — это происшествие, возникающее в процессе работы машины и, напротив, представляющее интерес для ее пользователей. Исключения синхронны, то есть вызываются исполнением некоторой команды. События асинхронны, то есть их причина — за пределами исполняющейся в данной момент команды. Часто исключения и события очень легко перепутать.
Рассмотрим несколько примеров. Предположим, что программа пытается разделить число на 0 — очевидная ошибка. Когда эта ошибка обнаружится, о ней будет сообщено с помощью исключения. Исключение синхронно, так как, если данные всегда одинаковы, та же самая ошибка будет происходить в том же самом месте при каждом выполнении программы.
Теперь представим себе, что параллельно с программой исполняется операция ввода-вывода, например, чтение записи с диска. В некоторый момент времени операция ввода-вывода завершается, и об этом факте необходимо сообщить. Механизм сообщения о завершении ввода-вывода — это событие, так как его причина — действие, не связанное с выполняемой в данный момент командой. Оно асинхронно, то есть оно не связано с исполнением программы и может произойти в любой момент.
Подобно подразделению исключений MI на два типа: ошибки и пользовательские состояния,
— есть и два
С появлением
С появлением ILE мониторинг и обработка исключений стали явно управляться пользователем MI. Мониторы исключений используются для отслеживания исключений. Существуют команды MI для включения и отключения мониторов исключений. Одновременно может быть включено несколько мониторов. У каждого из них свой приоритет, в соответствии с которым осуществляется поиск и обработка прерываний в том случае, если включено несколько мониторов. С каждым монитором всегда связана внешняя процедура ILE, обрабатывающая исключения.

Управление исключениями в
Прерывания классифицируются по тому, вызваны ли они исполнением конкретной
команды или какимто другим событием в системе. В архитектуре
Некоторые прерывания генерируются в результате выполнения команд. Перечислим их.
Для обработки прерываний в
Если исключение вызвано командой и не было обработано, то FLEH передает управление
обработчику исключений второго уровня SLEH (Second Level Exception
Handler). SLEH обрабатывает менее частые исключения, такие как исключение блокировки
Если же необработанное исключение произошло при исполнении команды
Сначала TLEH вызывает обработчики исключений компонентов CSEH (Component
Specific Exception Handlers), которые были установлены различными компонентами
Затем TLEH определяет, как быть с данным исключением. Если исключение произошло
в задаче
Генератор исключений MI подготавливает данные для сообщения процессу, выполняет некоторые операции очистки и отправляет сообщение в пространство очередей соответствующего процесса.

Так как только что описанным процедурам обработки исключений может потребоваться
доступ к привилегированным командам
В дополнение к простому переключению, механизм прерываний должен выполнять синхронизацию контекста. Синхронизация означает, что аппаратура процессора обязана гарантировать завершение выполнения всех команд, запущенных до прерывания, в том же контексте, в котором они были запущены. Команды, следующие после этой операции, должны выбираться и исполняться в новом контексте.
В лекции 8 мы рассматривали
Если при вызове процедуры
При возникновении прерывания аппаратура процессора
После сохранения текущего состояния машины, аппаратура прерываний изменяет
некоторые биты
В результате только что описанной аппаратной обработки прерывания управление
передается первой команде одного из обработчиков прерываний
В конце процедуры обработки прерываний выполняется еще одна специальная команда
Две только что описанные команды
В AS/400 мы хотели иметь аналогичный механизм, позволяющий одной процедуре
Команда "scv" похожа на команду "
Другая отличительная черта "scv" в том, что эта команда не изменяет значения
битов
Кроме того, команда "scv" не использует регистры
Команда "rfscv", как это и следует из ее названия, выполняет возврат после "scv".
Прочитав предшествующие разделы, Вы увидели, как развита современная структура процессов. Наряду с огромными возможностями, она отличается и огромной сложностью в управлении, которое едва ли под силу рядовому пользователю. В соответствии с философией технологической независимости и интегрированности, AS/400 берет и эту обязанность на себя посредством компонента управления заданиями OS/400. Пользователь имеет дело с определением задания, которое точнее соответствует прикладной программе. Все остальное делает OS/400 и нижележащие компоненты.
Построение всей структуры заданий поверх модели процессов имеет один недостаток:
намного меньшую гибкость, чем при настройке характеристик процесса в соответствии
с характеристиками конкретного приложения. Подобная настройка позволяет
повысить производительность приложения, которому не нужны все возможности,
предоставляемые структурой задач. Фундаментальным строительным блоком многих
новых ОС становится облегченный процесс или
Важно отметить, что структура задач AS/400 на аппаратном уровне — одна из наиболее
эффективных. В коммерческом приложении значительная часть (до 80–90
процентов) обработки, выполняется ОС, а не самим приложением. Приложение запрашивает
обработку у ОС, вместо того чтобы выполнять ее самостоятельно. Непосредственно
выполнением такой обработки занимается, в основном,
Давайте рассмотрим, как в AS/400 поддерживаются потоки, и как это позволяет переносить приложения, написанные для других ОС.
Управление заданиями, переданными пользователем AS/400, выполняется компонентом управления заданиями OS/400. Задание — это единица работы, переданной на выполнение. Как Вы помните, управление заданиями различает несколько типов заданий, включая традиционные интерактивные и пакетные.
В предшествующих разделах обсуждался процесс, как единица работы, переданной
управлением заданиями нижележащим компонентам. Объектупроцессу MI нет
аналогов в OS/400. Задание — это не объект OS/400. Не являются таковыми и маршрутизация
или подсистемы, которые мы скоро будем рассматривать. Управление заданиями
имеет дело непосредственно с процессами. Задание может выполняться в
рамках одного или нескольких процессов, запуск которых осуществляется одним или
несколькими
Управление заданиями рассматривает систему как иерархию доменов, показан ную на рисунке 9.6. Шаг — самый низкий уровень этой иерархии. Следующий уровень — задание, которое обрабатывается одним или несколькими последовательными шагами. Задания находятся в подсистемах, каждая из которых содержит задания сходного типа, например, все интерактивные задания. Как мы скоро увидим, подсистемы управляют некоторыми системными ресурсами. Наконец, самый верхний уровень иерархии — собственно система, где повсеместно используются некоторые системные параметры и сетевые атрибуты. Пример — имя компьютера в вычислительной сети.
(рис 9.6) Концепции управления работой
Подсистема AS/400 — это одна из предопределенных
Описание задания — это объект OS/400, задающий атрибуты и ресурсы, связанные с заданием. Он определяет:
Класс представляет собой объект OS/400, содержащий параметры, которые задают среду выполнения. Некоторые из них относятся к выделенным заданию ресурсам процессора. Например, может быть ограничено число процессов класса, выполняющихся одновременно. Это позволяет управлять объемом взаимного влияния процессов, конкурирующих за один и тот же системный ресурс. Данный предел, обычно называемый уровнем активности, связан с пулом памяти.
Пул памяти, (не путать с пулом вспомогательной памяти!) — это средство резервирования
для подсистемы некоторого объема основной (оперативной) памяти. В основной
памяти может быть размещено до 16
Размеры, число и уровни активности
С появлением модели процессов ILE, описанной ранее, изменилась и структура задания в AS/400. Как именно — можно понять, сравнив ресурсы приложений, доступные в старой и новой структурах заданий, а также особенности их использования. Как правило, ресурсы приложений для задания включают в себя разделяемые файлы, управление транзакциями и память.
| Старая структура задания | Новая структура задания на основе модели процессов ILE |
| Разделяемые файлы видимы всем прикладным программам задания | Разделяемые файлы видимы всем прикладным программам задания, либо каждое приложение определяет собственное использование файлов |
| Внешние имена — общие на уровне задания, а не на уровне приложений | Область видимости внешних имен - одиночное приложение, то есть каждое приложение задания имеет свое собственное пространство имен для |
| Управление транзакциями осуществляется для всего задания | Управление транзакциями осуществляется как на уровне задания, так и на уровне приложений |
| Допускается только одна активизация программы в задании | Допускаются множественные активизации одной и той же программы. Каждая активизация имеет собственные ( |
| Выделяется только одна область статической и автоматической (стек) памяти и одна область динамической памяти для каждого языка программирования | У каждой программы своя собственная защищенная статическая, автоматическая (стек) и динамическая (куча) память |
Как уже упоминалось, первоначально в AS/400 было определено три уровня работы.
Самый низкий уровень, под MI, — задача. Процесс "живет" на уровне MI и построен
на структуре задач
Полнофункциональное задание обеспечивает лучшие возможности разделения ресурсов и защиты, чем процессы в других ОС; однако, для создания такого задания нужно больше времени. Задание AS/400 можно называть "полновесным".
Приложения, написанные специально для AS/400, обычно соответствуют структуре полнофункционального задания, то есть, исполняются внутри одного задания. Динамическое создание множества заданий для одного приложения не рекомендуется, из-за больших накладных расходов.
Конечно, для некоторых других ОС приложения пишутся не так. Например, Unix и Windows NT определяют структуру, в которой процессы могут быстро создаваться, существовать и затем разрушаться. Приложения, написанные для таких ОС, часто используют множество процессов. Для достижения достаточной производительности приложениям такого типа нужен очень "легковесный" процесс.
Данная тенденция привела к новому пониманию процесса. Например, в модели POSIX процессы разделены на два отдельных компонента. Первый содержит все ресурсы для группы взаимодействующих единиц. Эти ресурсы включают в себя виртуальную память, коммуникационные порты и файлы, выделенные процессу. Некоторые ОС даже называют эту часть процесса задачей.
Вторая часть процесса — активная среда выполнения, обычно называемая потоком.
В процессе может исполняться один или несколько параллельных потоков. Исходное
определение процесса было ограничено только одной исполняющейся единицей. Новое
определение допускает несколько единиц исполнения — потоков. Поток — это
Достоинство потоков в том, что они позволяют разным частям одного приложения исполняться параллельно. Особенно важны потоки в распределенной среде, они обязательны для стандарта, известного как DCE (Distributed Computing Environment). DCE использует модель процессов POSIX.
Поскольку мы хотели реализовать в AS/400 интерфейсы DCE и POSIX, нам нужно
было найти некоторый способ поддержки потоков POSIX. Мы рассмотрели две модели.
Первая — встроенные потоки, где в процессе принимают участие множество
Вторая модель потоков основывалась на концепции разделяемой группы активизации.
Несколько заданий OS/400 могут разделять одну группу активизации. Таким
образом, поток — задание OS/400, использующее разделяемую группу активизации.
Процесс POSIX может быть представлен как совокупность всех заданий OS/400, совместно
использующих группу активизации. Все потоки процесса POSIX совместно
используют общие
Такое использование задания OS/400 в качестве потока, успешно работает, но имеет один существенный недостаток: для создания полнофункционального задания требуется больше времени, по сравнению с другими системами, где применяются "легковесные" потоки. Для повышения производительности AS/400 мы предусмотрели пул заранее созданных заданий. Когда нужно быстро создать поток, используется одно из заданий пула. При разрушении потока задание возвращается в пул.
Данная модель потоков была представлена как часть CPA (Common Programming)
API в V3R1. Начальная цель была достигнута, но мы знали, что это паллиатив. Хотелось
перенести на AS/400 несколько других приложений, например, Lotus Domino.
Мы рассмотрим Domino в его связи с AS/400 в лекции 11, сейчас же нам следует признать,
что Domino написан для
На рисунке 9.7 показано соотношение двух потоковых моделей системы и средств поддержки приложений (application enabler). Последние включают в себя библиотеки времени исполнения для языков, типа С, С++ и Java, интегрированную файловую систему и библиотеки классов объектов. В лекции 11 мы рассмотрим Java и его объектную модель, а также модели IBM SOM (System Object Model) и DSOM (Distributed System Object Model).
(рис 9.7) Средства поддержки приложений для потоковМы полагаем, что с течением времени все больше и больше приложений будет со
здаваться для
В разных ОС процессы реализованы поразному. Каждая система определяет мощность процесса, его структуру, а также то, как он должен быть защищен. Модель процессов AS/400 доказала свою высокую эффективность и способность поддержки важнейших приложений. Современнейшая структура задач, на основе которой работают все остальные функции системы, позволяет моделям процессов и заданий эволюционировать для нужд будущих сред приложений.
В следующей лекции мы рассмотрим подсистему ввода-вывода и направления ее развития для поддержки будущих приложений AS/400. Структура задач играет важную роль в системе ввода-вывода. Это верно и теперь, и в будущем.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.