Лекция №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. зарезервирован.
Дата добавления: 2016-12-27; просмотров: 2265;