Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорная измерительная техника.docx
Скачиваний:
8
Добавлен:
01.03.2025
Размер:
3.84 Mб
Скачать

Лекция №4. Последовательность выполнения команд микропроцессором. Режимы адресации.

Прежде чем вести речь о последовательности выполнения команд рассмотрим диаграммы состояний и переходов процесса.

Процесс – целенаправленная последовательность вычислительных действий, которая характеризуется:

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

  2. содержимым соответствующей ему памяти, а также тем множеством данных, которым он может манипулировать, дескриптором процесса и совокупностью численных и текстовых сведений, определяющих состояние ресурсов, предоставленных процессу.

Процессы

Примитивы

Процессы помещаются в очередь диспетчера, следовательно, их выполнение может быть прервано и продолжено.

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

Процессам всегда приписываются некоторые численные полномочия, отличные от полномочий задачи. Они определяют порядок перемещений процессов в очереди диспетчера.

Полностью отсутствуют какие-либо численные характеристики для примитивов.

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

Примитив в процессе выполнения может выполнять только одну функцию.

Таблица 4.1. Характерные отличия процессов и примитивов.

Нить (поток) – некоторая совокупность кодов внутри процесса, получаемая процессорное время для выполнения.

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

Каждый поток имеет:

  • уникальный идентификатор потока;

  • содержимое набора регистров процесса, определяющих его состояние;

  • два стека, первый используется потоком при выполнении в режиме ядра, другой в режиме задачи;

  • закрытую область памяти, называемую локальной памятью потока.

Теперь рассмотрим диаграммы.

Рис. 4.1. Диаграмма состояний процесса.

Стрелки соответствуют следующим переходам:

  1. диспетчеризация (запуск процесса);

  2. вызов системных служб;

  3. прерывание;

  4. запрос к системе;

  5. завершение ожидания;

  6. остановка работы задачи (если недоступен ресурс);

  7. активация задачи;

  8. контроль задачи;

  9. запрос к системным службам;

  10. прерывание и возврат из прерывания.

Но могут появиться и новые стрелки:

  • создание процесса – переход из состояния рождения в состояние готовности;

  • уничтожение процесса – переход из состояния выполнения в состояние смерти;

  • восстановление процесса – переход из состояния готовности в состояние выполнения;

  • изменение приоритета процесса – переход из состояния выполнения в состояние готовности;

  • блокировка процесса – переход из состояния выполнения в состояние ожидания;

  • пробуждение процесса – переход из состояния ожидания в состояние готовности;

  • запуск (выбор) процесса – переход из состояния готовности в состояние выполнения.

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

Рис. 4.2. Диаграмма переходов процесса.

Состояния:

  1. процесс выполняется в режиме задачи;

  2. процесс выполняется в режиме ядра;

  3. процесс не выполняется, но готов к запуску под управлением ядра;

  4. процесс приостановлен и находится в оперативной памяти;

  5. процесс готов к запуску, но программа подкачки должна еще загрузить процесс в оперативную память, прежде чем он будет запущен под управлением ядра;

  6. процесс приостановлен, программа подкачки выгрузила его во внешнюю память, чтобы в оперативной памяти освободилось место для других процессов;

  7. процесс возвращен из режима ядра в режим задачи; ядро резервирует его и переключает контекст на другой процесс;

  8. процесс вновь создан и находится в переходном состоянии; он существует, но не готов к выполнению и не приостановлен;

  9. процесс вызывает системную функцию exit() и прекращает существование, однако после него осталась запись, содержащая код выхода и некоторая хронометрическая статистика, собираемая родительским процессом.

Всё начинается с системного вызова int pid=fork() – рождение процесса, по которому создаётся процесс.

Стрелки:

  1. достаточно памяти;

  2. запуск процесс;

  3. возврат из прерывания;

  4. прерывание (или функция прерывания);

  5. прерывание и возврат из прерывания;

  6. приостановка;

  7. возобновление;

  8. выгрузка;

  9. возобновление;

  10. загрузка;

  11. выгрузка;

  12. нехватка памяти;

  13. конец работы;

  14. резервирование;

  15. возврат;

  16. зарезервирован.