Jump to content

Асинхронная системная ловушка

Асинхронная системная ловушка ( AST ) — это механизм, используемый в нескольких компьютерных операционных системах, разработанный бывшей корпорацией Digital Equipment Corporation (DEC) из Мейнарда , штат Массачусетс .

Механизм

[ редактировать ]

Различные события в этих системах могут опционально передаваться обратно пользовательским процессам через механизм AST. Эти AST действуют как вызовы подпрограмм, но они доставляются асинхронно , то есть без какого-либо учета контекста основного потока. В связи с этим необходимо соблюдать осторожность:

  • чтобы гарантировать, что любой код, который совместно используется основным потоком и AST, должен быть спроектирован с возможностью повторного входа , и
  • любые передаваемые данные должны быть защищены от повреждения, если они в любое время будут изменены AST. В противном случае данные должны быть защищены путем блокировки AST во время критических секций .

AST чаще всего встречаются в результате выполнения QIO вызовов ядру . Завершение ввода-вывода может быть сигнализировано выдачей AST вызывающему процессу/задаче. Определенные ошибки во время выполнения также могут сигнализироваться с помощью механизма AST. В OpenVMS специальные AST режима ядра используются в качестве стандартного механизма для получения относительно удобного доступа к контексту процесса (включая выгрузку процесса в физическую память по мере необходимости). Эти типы AST выполняются с максимально возможным приоритетом для каждого процесса в следующий раз, когда планировщик сделает этот процесс текущим, и используются, среди прочего, для получения информации на уровне процесса (в ответ на команду $GETJPI "getjob/process information"). вызов) и для выполнения удаления процесса.

Следующие операционные системы реализуют AST:

AST примерно аналогичны Unix сигналам . Важными различиями являются:

  • AST не назначаются «сигнальные коды»: вместо назначения обработчика сигнальному коду и вызова этого кода AST указывается непосредственно по его адресу. Это позволяет одновременно ожидать любое количество AST (с учетом квот на обработку).
  • AST никогда не прерывают текущий системный вызов . Фактически, процесс может перейти в состояние «гибернации» (с помощью системного вызова $HIBER) или дождаться флага события, вызвав, например, $WAITFR, после чего он ничего не делает, а только ждет, пока будут установлены AST. доставленный. При доставке AST (инициируемой завершением ввода-вывода, таймером или другим событием) процесс временно выводится из режима ожидания для выполнения AST. После завершения процедуры AST вызов, переводящий процесс в спящий режим или ожидание флага события, выполняется снова; по сути, переоценивается причина ожидания. Единственный способ выйти из этого цикла (кроме удаления процесса) — выполнить системный вызов $WAKE или $SETEF, чтобы удовлетворить ожидание. Это можно сделать самим процессом, вызвав $WAKE или $SETEF в AST или (если используется глобальный флаг события) $SETEF в другом процессе.

В VAX/VMS V4 и более поздних версиях реализована интересная оптимизация проблемы синхронизации между кодом уровня AST и кодом, не относящимся к уровню AST. Системную службу с именем $SETAST можно использовать для отключения или включения доставки AST для текущего и всех менее привилегированных режимов доступа (термин OpenVMS для функций безопасности на основе кольца ). Однако если критическая секция, нуждающаяся в защите от AST, имеет длину всего несколько инструкций, то накладные расходы на выполнение вызовов $SETAST могут значительно перевесить время на выполнение этих инструкций.

Таким образом, только для пользовательского режима (кольцо с наименьшими привилегиями, обычно используемое обычными пользовательскими программами) пара битовых флагов была предоставлена ​​в заранее определенной области памяти, доступной для записи пользователем (в пространстве «P1» для каждого процесса). Значения этих двух флагов можно истолковать как «не доставлять AST» и «AST отключены». Вместо обычной пары вызовов $SETAST код пользовательского режима будет устанавливать первый флаг перед выполнением последовательности инструкций, во время которых необходимо блокировать AST, и очищать его после последовательности. Затем (обратите внимание на порядок здесь, чтобы избежать условий гонки ) он проверит второй флаг, чтобы увидеть, был ли он установлен за это время: если да, то AST действительно стали отключенными, и следует вызвать $SETAST, чтобы снова включить их. . В наиболее распространенном случае за это время ни один AST не станет ожидающим, поэтому вообще не будет необходимости вызывать $SETAST.

Код доставки AST ядра, со своей стороны, проверит первый флаг перед попыткой доставки AST пользовательского режима; если бы он был установлен, то он напрямую установил бы бит отключения AST в блоке управления процессом (тот же бит, который будет установлен явным вызовом $SETAST из пользовательского режима), а также установил бы второй флаг перед возвратом и выходом. АСТ не доставлен.

Механизм асинхронного вызова процедур в операционных системах семейства Windows NT представляет собой аналогичный механизм.

Дальнейшее чтение

[ редактировать ]
  • Внутреннее устройство и структуры данных OpenVMS Alpha: планирование и управление процессами: версия 7.0, Рут Голденберг, Саро Сараванан, Дениз Дюма, ISBN   1-55558-156-0
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c44e1575dc4e1ad56e5192e3539a5b1d__1678469580
URL1:https://arc.ask3.ru/arc/aa/c4/1d/c44e1575dc4e1ad56e5192e3539a5b1d.html
Заголовок, (Title) документа по адресу, URL1:
Asynchronous System Trap - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)