Лекция 24 Основные свойства задач . Диспетчеризация задач и приоритеты
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

Основные свойства задач

Как правило, вся важная с точки зрения ОС информация о задаче (имя и номер задачи, верхняя и нижняя границы стека, ссылка на очередь сообщений, статус задачи, приоритет и т.п.) хранится в унифицированной структуре данных - управляющем блоке (Task Control Block - TCB).

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

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

Состояние (статус) задачи - режим использования задачи: активная задача - задача, выполняемая системой в данный момент времени; готовая задача - задача, готовая к выполнению и ожидающая у планировщика своей очереди; блокированная задача - задача, выполнение которой приостановлено до наступления определенных событий (освобождение ресурса, поступление ожидаемого сообщения, завершение интервала ожидания и т.п.).

Пустая задача - задача, запускаемая самой ОС, когда в системе нет готовых для выполнения задач. Пустая задача запускается с самым низким приоритетом и, как правило, представляет собой бесконечный цикл «ничего не делать». Наличие пустой задачи представляет ОС удобный механизм отработки ситуаций, когда нет ни одной готовой к выполнению задач.

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

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

Предположим, что у нас есть функция, реализующая запись на диск, и пусть она использует глобальную переменную WRITE_SECTOR, которая устанавливается в соответствии с параметром, передаваемым этой функции при вызове. Предположим, что задача А вызывает эту функцию с параметром 3, т.е. хочет записать данные в сектор 3. Допустим, что когда переменная WRITE_SECTOR уже равна 3, но сама запись еще не произведена, выполнение задачи А прерывается и начинает выполняться задача В, которая вызывает ту же функцию, но с аргументом 10. После того, как запись в сектор 10 будет произведена, управление рано или поздно вернется к задаче А, которая продолжит работу с прерванного места. Однако теперь переменная WRITE_SECTOR равна 10, и все данные задачи А будут записаны в сектор 10. Из приведенного примера видно, что ошибки, связанные с нереентерабельностью, трудно обнаружить, а последствия они могут вызвать самые катастрофические.

 

Дата: 2019-04-23, просмотров: 219.