- •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. Компоновщик. Его назначение и функции
36. Реализация потоков в пространстве ядра.
В этом случае ядро знает о существовании потоков и управляет ими. В этом случае система поддержки исполнения программ не нужна, как показано на рис. Нет необходимости и в наличии таблицы потоков в каждом процессе, вместо этого есть единая таблица потоков, отслеживающая все потоки системы. Если потоку необходимо создать новый поток или завершить имеющийся, он выполняет запрос ядра, который создает или завершает поток, внося изменения в таблицу потоков.
Таблица потоков, находящаяся в ядре, содержит регистры, состояние и другую информацию о каждом потоке. Информация та же, что и в случае управления потоками на уровне пользователя, только теперь она располагается не в пространстве пользователя (внутри системы поддержки исполнения программ), а в ядре. Эта информация является подмножеством информации, которую традиционное ядро хранит о каждом из своих однопоточных процессов (то есть подмножеством состояния процесса). Дополнительно ядро содержит обычную таблицу процессов, отслеживающую все процессы системы.
Все запросы, которые могут блокировать поток, реализуются как системные запросы, что требует значительно больших временных затрат, чем вызов процедуры системы поддержки исполнения программ. Когда поток блокируется, ядро по желанию запускает другой поток из этого же процесса (если есть поток в состоянии готовности) либо поток из другого процесса. При управлении потоками на уровне пользователя система поддержки исполнения программ запускает потоки из одного процесса, пока ядро не передает процессор другому процессу (или пока не кончаются потоки, находящиеся в состоянии готовности).
Поскольку создание и завершение потоков в ядре требует относительно больших расходов, некоторые системы используют повторное использование потоков. После завершения поток помечается как нефункционирующий, но в остальном его структура данных, хранящаяся в ядре, не затрагивается. Позже, когда нужно создать новый поток, реактивируется отключенный поток, что позволяет сэкономить на некоторых накладных расходах. При управлении потоками на уровне пользователя повторное использование потоков тоже возможно, но поскольку накладных расходов, связанных с управлением потоками, в этом случае существенно меньше, то и смысла в этом меньше.
Управление потоками в ядре не требует новых не блокирующих системных запросов. Более того, если один поток вызвал ошибку из-за отсутствия страницы, ядро легко может проверить, есть ли в этом процессе потоки в состоянии готовности, и запустить один из них, пока требуемая страница считывается с диска. Основным недостатком управления потоками в ядре является существенная цена системных запросов, поэтому постоянные операции с потоками (создание, завершение и т. п.) приведут к увеличению накладных расходов.
37 Смешанная реализация
С целью совмещения преимуществ реализации потоков на уровне ядра и на уровне пользователя были опробованы многие способы смешанной реализации. Один из методов заключается в использовании управления ядром и последующем мультиплексировании потоков на уровне пользователя, как показано на рисунке 37.1
Мультиплексирование потоков пользователя из потока ядра
Рисунок 37.1 - Мультиплексирование потоков пользователя в потоках ядра
В такой модели ядро знает только о потоках своего уровня и управляет ими. Некоторые из этих потоков могут содержать по нескольку потоков пользовательского уровня, мультиплексированных поверх них. Потоки пользовательского уровня создаются, завершаются и управляются так же, как потоки уровня пользователя в процессе, запущенном в не поддерживающей много поточность системе. Предполагается, что у каждого потока ядра есть набор потоков на уровне пользователя, которые используют его по очереди.