Лекция №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. зарезервирован.
|