- •2. Операционная система как расширенная машина
- •3. Операционная система как менеджер ресурсов
- •4. Обзор современных ос Операционные системы мэйнфреймов
- •Серверные операционные системы
- •Операционные системы для персональных компьютеров
- •Операционные системы реального времени
- •Встроенные операционные системы
- •Операционные системы для смарт-карт
- •5. Аппаратный состав персонального компьютера
- •6. Процессоры
- •7. Память
- •8. Устройства ввода-вывода
- •9. Шины
- •10. Понятия операционной системы
- •11. Процессы
- •12. Взаимоболокировка
- •13. Управление памятью.
- •14. Ввод-вывод данных
- •15. Файлы
- •16 Безопасность
- •17 . Оболочка.
- •18. Системный вызов
- •19. Windows Win32 api
- •20. Структура операционной системы
- •21 Монолитные системы
- •22 Многоуровневые системы
- •23. Виртуальные машины.
- •24. Экзоядро.
- •25. Модель клиент-сервис.
- •26. Модель процесса.
- •27 Создание процесса
- •28 Завершение процесса
- •29. Иерархия процессов
- •30. Состояние процессов
- •31. Реализация процессов
- •32. Потоки
- •33. Модель потока.
- •34. Использование потоков.
- •35. Реализация потоков в пространстве пользователя.
- •36. Реализация потоков в пространстве ядра.
- •37 Смешанная реализация
- •38 Активация планировщика
- •39 Всплывающие потоки
- •40 Состояние состязания
- •41. Критические области
- •42. Взаимное исключение с активным ожиданием
- •43. Примитивы межпроцессного взаимодействия
- •Проблема производителя и потребителя
- •44. Семафоры
- •45 Мьютексы
- •46 Монитор
- •47 .Передача сообщений
- •48. Барьеры
- •49. Сокеты
- •50. Планирование
- •52. Планирование в интерактивных системах
- •53. Планирование в системах реального времени
- •54.Политика и мезанизм.
- •57 Условие взаимоблокировки
- •58 Моделирование взаимоблокировок
- •59. Страусовский алгоритм
- •60. Обнаружение и устранение взаимоблокировок и обнаружение взаимоблокировки при наличии одного ресурса каждого типа
- •61. Обнаружение взаимоблокировок при наличии нескольких ресурсов каждого типа
- •1)Восстановление при помощи принудительной выгрузки ресурса
- •2) Восстановление путем уничтожения процессов
- •63. Избежание взаимоблокировок
- •64 Алгоритм банкира
- •65 Алгоритм банкира для несколько видов ресурсов
- •66. Предотвращение взаимоблокировок
- •67 Двухфазовое блокирование, тупики без ресурсов и голодание
- •68 Программный ввод-вывод
- •69: Управляемый прерываниями ввод-вывод
- •70: Ввод-вывод с использованием dma(Direct Memory Access).
- •71. Программные уровни ввода-вывода
- •72. Обработчики прерываний
- •73. Драйверы устройств
- •74. Аппаратная часть таймеров
- •75 Программное обеспечение таймеров
- •76 Мягкие таймеры
- •77. Транслятор
- •78. Компилятор
- •79 Понятие прохода. Многопроходный и однопроходные компиляторы
- •80 Интерпретаторы. Особенности построения интерпретаторов
- •81. Трансляторы с языка ассемблера („ассемблеры“ )
- •82.Макроопределения и макрокоманды
- •83. Отладчики
- •84. Компоновщик. Его назначение и функции
38 Активация планировщика
Многие исследователи старались совместить преимущества реализации потоков на уровне ядра (простота реализации) и реализации потоков на уровне пользователя (высокая производительность).
Целью активации планировщика является имитация функциональности потоков ядра, но с большей производительностью и гибкостью, свойственной потокам уровня пользователя. В частности, пользовательские потоки не должны выполнять специальные системные запросы без блокировки или заранее должны проверять, не вызовет ли запрос блокировку. Тем не менее, когда поток блокируется системным запросом или ошибкой из-за отсутствия страницы, должна оставаться возможность запустить другой поток из того же (если такой есть и находится в состоянии готовности).
Увеличение эффективности достигается за счет уменьшения количества ненужных переходов между пространством пользователя и ядром. Например, если поток блокирован в ожидании действий другого потока, совершенно не обязательно обращаться к ядру, что позволяет избежать накладных расходов, по переходу «пользователь—ядро». Система поддержки исполнения программ, работающая в пространстве пользователя, может блокировать синхронизирующий поток и самостоятельно выбрать другой.
При использовании активации планировщика ядро назначает каждому процессу некоторое количество виртуальных процессоров и позволяет системе поддержки исполнения программ (в пространстве пользователя) распределять потоки по процессорам. Этот метод можно использовать и в мультипроцессорной системе, заменяя виртуальные процессоры реальными. Исходное число виртуальных процессоров, соответствующих одному процессу, равно единице, но процесс может запросить больше процессоров и позже вернуть их. Ядро также может забрать виртуальный процессор у одного процесса и отдать другому, более нуждающемуся в нем в данный момент.
В основе механизма работы этой схемы лежит следующее утверждение. Если ядро знает, что поток блокирован (например, если он выполнил блокирующий системный запрос или вызвал ошибку из-за отсутствия страницы), ядро оповещает об этом систему поддержки исполнения программ процесса, пересылая через стек в качестве параметров номер потока в запросе и описание случившегося. Оповещение происходит при помощи активации ядром в определенном начальном адресе системы поддержки исполнения программ, что приблизительно аналогично сигналу в UNIX. Этот метод называется upcall («вызов вверх», также иногда именуемый обратным вызовом — callback — в противоположность обычным вызовам, производящимся из верхних уровней в нижние).
Активизированная таким образом система поддержки исполнения программ перепланирует свои потоки, обычно помечая текущий поток как блокированный, выбирая следующий поток из списка, устанавливая значения его регистров и запуская его. Позже, когда ядро получает информацию о том, что поток снова готов к работе (например, канал, из которого он пытался считывать данные, теперь их содержит, или недостающая страница считана с диска), оно выполняет еще один обратный вызов, информируя об этом систему поддержки исполнения программ. Система поддержки исполнения программ по своему усмотрению запускает блокированный поток тут же или помещает его в список готовых процессов, чтобы запустить позже.
При возникновении аппаратного прерывания во время работы потока пользователя процессор переключается в режим ядра. Если прерывание вызвано событием, не имеющим отношения к прерванному процессу, например завершением операции ввода-вывода другого процесса, по завершении работы обработчика прерываний прерванный поток возвращается в состояние, в котором он находился до прерывания. Если же процесс заинтересован в прерывании (например, вызванном поступлением страницы, которую ждал один из потоков процесса), прерванный поток не запускается вновь. Вместо этого прерванный поток приостанавливается, и на этом виртуальном процессоре запускается система поддержки исполнения программ с состоянием прерванного потока на стеке. Дальнейшее зависит от системы поддержки исполнения программ, решающей, запустить ли на этом процессоре прерванный поток, другой, находящийся в состоянии готовности, или какой-либо третий.
Недостатком метода активации планировщика является существенная зависимость от обратных вызовов, концепция, нарушающая свойственную любой многоуровневой системе структуру. Обычно уровень n+1 может вызывать процедуры уровня n, но не наоборот. Обратные вызовы противоречат этому фундаментальному принципу.