Лекция №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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.011 сек.