Диаграмма переходов

В течение всей жизни процесс переходит из одного состояния в другое. Как показано на рис. 1.8, переход из одного состояния в другое может осуществляться только по дугам событий. Если из состояния выходит две дуги, то переход может быть осуществлен только по одной из них в зависимости от произошедшего события. Полный набор состояний процесса наиболее подробно описан в книге М. Баха[1] и содержит следующие состояния:

  • 1) выполнение процесса в режиме задачи;
  • 2) выполнение процесса в режиме ядра;
  • 3) процесс готов к запуску в режим ядра;
  • 4) процесс «спит», но не выгружен из оперативной памяти;
  • 5) процесс готов к запуску, но сначала он должен быть загружен в оперативную память прежде, чем он будет запущен в результате диспетчеризации;
  • 6) процесс «спит» и выгружен из оперативной памяти для освобождения места для работы других процессов;
  • 7) процесс переведен из режима ядра в режим задачи, для того чтобы ядро могло переключить контекст процесса на другой процесс;
  • 8) начальное состояние процесса, когда он уже создан, но не готов к выполнению, хотя и не приостановлен. Это состояние является начальным состоянием всех процессов, кроме нулевого;
  • 9) последнее состояние процесса — системный вызов ехИ() и прекращение работы. Однако он оставляет код выхода для родительского процесса.

Рассмотрим типичное поведение процесса на основе модели переходов (см. рис. 1.8). Процесс создается родительским процессом с помощью системной функции/ог&(); согласно диаграмме, из этого состояния (8) процесс должен перейти в состояние готовности к запуску, загружен при наличии ресурсов (3) или выгружен при отсутствии необходимых процессу ресурсов (5). Пусть процесс перешел в состояние (3). В этом состоянии процесс ожидает запуска в очереди процессов на исполнение. При выборе процесса планировщиком он переходит в состояние выполнения в режиме ядра (2). В этом состоянии он получит все необходимые ему ресурсы для выполнения, после чего переходит в состояние «выполнение в режиме задачи» (1). Из этого состояния он может перейти только в состояние (2) по системному вызову или прерыванию, а затем в результате процесса диспетчеризации он переходит в состояние ожидания работы (7), т.е. попадает в очередь планировщика. Если же в течение времени ожидания происходят некоторые системные события, а процесс не может перейти в состояние (1), т.е. в состояние «выполнение в режиме задачи», то процесс переходит в состояние (3) и ожидает кванта времени на выполнение уже в «режиме ядра».

В случае с операциями, требующими полномочий «ядра» и выполняющимися длительное время, например операциями ввода-вывода, процесс из состояния (2) переходит в состояние (4) — ожидание завершения операции в оперативной памяти. По окончании такой операции процесс возвращается в очередь на выполнение (3). Если же время выполнения операции затягивается, а системе требуются ресурсы, занимаемые процессом, то процесс выгружается из оперативной памяти на диск процессом свопинга или пейджинга (6). При завершении долговременных операций процесс получает статус готовности к работе (5) и ожидает освобождения ресурсов для загрузки и постановку в очередь планировщика на выполнение (3).

При ограниченных ресурсах в системе или когда система выполняет множество процессов, которые одновременно никак не могут поместиться в оперативной памяти, процессы могут из состояния (3) — готовности к выполнению, переходить в состояние (5), т.е. выгружаться на диск и ожидать необходимых процессу ресурсов.

Возникновение прерываний в системе не влияет на очередность выполнения задач в системе и восстанавливает выполнение прерванной задачи с точки прерывания.

При завершении процесса он исполняет системную функцию ехИ()} последовательно переходя в состояние «выполнения в режиме ядра» и, наконец, в состояние «прекращения существования». Однако внешние события могут потребовать завершения процесса без явного обращения к функции ехИ().

Если процесс, находясь в состоянии (1) «выполнения в режиме задачи» создает другой процесс, используя функцию/огк()у вновь созданный процесс проходит состояние (8), а затем в зависимости от наличия ресурсов в системе попадает либо в состояние (3), либо (5). Родительскому процессу эти переходы уже неподконтрольны.

Если процесс в состоянии (1) вызывает некоторые функции ядра, то он должен перейти из состояния (1) в состояние (2), а вот обратный переход уже не зависит от процесса, а контролируется планировщиком.

Диаграмма переходов процесса в режиме ядра, то они могут испортить глобальные информационные структуры, принадлежащие ядру

Рис. 1.8. Диаграмма переходов процесса в режиме ядра, то они могут испортить глобальные информационные структуры, принадлежащие ядру. Запрещая произвольное переключение контекстов и управляя возникновением событий, ядро защищает свою целостность. Ядро разрешает переключение контекста только тогда, когда процесс переходит из состояния «запуск в режиме ядра» в состояние «сон в памяти» (приостановка).

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

Для защиты своих внутренних структур иКЧХ-подобные системы запрещают переключение контекстов на время выполнения процесса в режиме ядра. Если процесс переходит в состояние «сна», система делает допустимым переключение контекста.

Алгоритмы функционирования ядра проверяют состояния процесса перед переключением контекста, тем самым обеспечивая защиту целостности информационных структур системы. Тем не менее остается одна проблема, которая может привести к нарушению целостности информации ядра. Это обработка прерываний, во время которой ядро не может запретить процессу обработки прерывания вносить изменения в информацию о состоянии ядра.

  • [1] Бах М.Дж. Архитектура операционной системы 1Ж1Х.
 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >