next up previous contents
Next: Примеры Up: Проблемы реализации Previous: Независимость базисных процедур времени   Contents

Взаимодействие с сигналами в POSIX

MPI не описывает ни взаимодействия процессов с сигналами в среде UNIX, ни с другими событиями, которые не относятся к обменам MPI. Это означает, что сигналы не существенны с точки зрения MPI, и разработчикам следует попытаться реализовать MPI так, чтобы сигналы были прозрачными: вызов MPI, приостановленный сигналом, следует возобновить и завершить после обработки сигнала. Вообще, состояние вычислений, которое существенно с точки зрения MPI, должно зависеть только от MPI вызовов.

Стремление MPI обеспечить безопасное выполнение потоков и обработку сигналов имеет ряд тонких эффектов. Нпример, на системах Unix принимаемые сигналы, такие как SIGALRM (сигнал тревоги) не должен вызывать поведение процедур, отличное от поведения в отсутствии сигнала. Конечно, если обработчик сигнала возбуждает вызов MPI или изменяет среду, в которой работают MPI процедуры (например, потребляя всю доступную память), процедура MPI должна вести себя как положено в этой ситуации (в частности, в этом случае поведение должно быть таким же, как для многопоточной реализации).

Второй эффект состоит в том, что обработчик сигнала, который выполняет вызовы MPI, обязан не взаимодействовать с операцией MPI. Например, операция прием любого типа в MPI, которая имеет место внутри обработчика сигнала, не должна вызывать ненормального поведения реализации MPI. Заметим, что реализация может запрещать использование вызовов MPI от сигнального обработчика и не требуется детектировать такое использование.

Крайне желательно, чтобы MPI не использовал SIGALRM, SIGFPE или SIGIO. Реализация обязана ясно документировать все сигналы, которые она использует; хорошим местом для такой информации является Unix `man' page на MPI.



Alex Otwagin 2002-12-10