- •1. Понятие ос
- •2. Функции ос
- •3. Классификация ос
- •4. Загрузка программ
- •5. Управление оперативной памятью
- •6. Открытая память
- •7. Алгоритмы динамического управления памятью
- •8. Системы с базовой виртуальной адресацией
- •9. Сегментная и страничная виртуальная память
- •10. Страничный обмен
- •11. Параллельное и псевдопараллельное исполнение (планировщик)
- •12. Методы синхронизации при параллельной работе
- •13. Прерывания, сигналы и семафоры
- •14. Блокировка участков файлов
- •15. Гармонически взаимодействующие последовательные процессы
- •16. Межзадачное взаимодействие
- •17. Средства для гармонического межпроцессного взаимодействия
- •18. Трубы. Линки
- •19. Системы управляемые событиями
- •20. Многопроцессность на однопроцессных компьютерах
- •21. Кооперативная многопроцессность и вытесняющая многопроцессность
- •22. Планировщики с приоритетом
- •23. Монолитные системы и системы с микроядром
- •24. Драйверы внешних устройств и функции драйверов
- •25. Синхронный ввод/вывод в однозадачных и многозадачных системах
- •26. Асинхронный ввод/вывод
- •27. Дисковый кэш и спулинг
- •28. Файловые системы
- •29. Структуры файловых систем
- •30. Устойчивость фс к сбоям
- •31. Безопасность. Идентификация пользователя. Права доступа
- •32. Защита оперативной памяти. Кольца защиты
- •33. Взаимно недоверяющие подсистемы
- •34. Пользовательский интерфейс
- •35. Определение операционной системы
- •37. Структура сетевой ос (одноранговые, с выделенными серверами, для рабочих групп и ос для сетей масштаба предприятия)
- •38. Управление процессами (состояние, контекст и дескриптор процесса)
- •39. Алгоритмы планирования процессов (вытесняющие и невытесняющие)
- •40. Средства синхронизации и взаимодействия процессов. Нити исполнения
- •41. Управление памятью. Типы адресов
- •42. Методы распределения памяти без использования дискового пространства (разделы фиксированные, переменной величины и перемещаемые)
- •43. Методы распределения памяти с использованием дискового пространства (виртуальная память, страничное, сегметное, странично-сегментное распределение)
- •44. Иерархия запоминающих устройств (может быть исключён). Принцип кэширования данных
- •45. Аппаратная поддержка управления памятью и многозадачной среды
- •46. Средства поддержки сегментации памяти
- •47. Управление вводом-выводом. Физическая организация устройств ввода-вывода
- •48. Обработка прерываний. Драйверы устройств
- •49. Управление вводом-выводом. Независимый от устройств слой операционной системы
- •50. Пользовательский слой программного обеспечения
- •51. Фс. Имена файлов. Типы файлов.
- •52. Фс. Логическая и физическая организация файлов
- •53. Современные архитектуры фс (Олифер)
- •54. Фс. Отображаемые в память файлы
- •55. Управление распределёнными ресурсами. Способы адресации
- •56. Базовые примитивы передачи сообщений в распределённых системах
- •57. Синхронизация в распределённых системах. Логические часы. Взаимные исключения. Неделимые транзакции
- •58. Процессы и нити в распределённых системах. Понятие нити. Вопросы реализации нитей.
- •59. Распределённые фс. Интерфейсы файлового сервиса и сервиса каталогов
- •60. Распределённые фс. Семантика разделения файлов. Вопросы разработки структуры фс.
- •61. Распределённые фс. Кэширование. Репликация
- •1. Сквозная запись.
- •62. Основные подходы к реализации взаимодействия в гетерогенных сетях
- •63. Шлюзы. Мультиплексирование стеков протоколов в гетерогенных сетях
- •66. Расширяемость, переносимость, совместимость и безопасность современных ос
- •67. Структура ос: монолитные системы, многоуровневые системы
- •68. Структура ос: модели клиент-сервер и микроядра
- •69. Структура ос: объектно-ориентированный подход
- •70. Структура ос: множественные прикладные среды
21. Кооперативная многопроцессность и вытесняющая многопроцессность
Кооперативная многопроцессность
Данная схема планирования процессов основана на том, что переключение процессов происходит по инициативе активного процесса.
Для реализации кооперативной многопроцессности в составе ОС должна иметься специальная системная функция, осуществляющая переключение процессов, которую каждая выполняемая в системе программа обязана периодически вызывать — планировщик (scheduler). Планировщик ведет себя следующим образом:
1.Он передает управление на следующий активный процесс.
2.Текущий процесс остается активным, и через некоторое время снова получит управление.
3.При этом он получит управление так, как будто планировщик представлял собой обычную функцию и возвратил управление в точку, из которой он был вызван.
Для того, чтобы планировщик смог произвести указанные действия, очевидно, ему
необходимо располагать информацией о планируемых процессах, то есть с каждым процессом должен быть связан его описатель. В простейшем случае, если переключение осуществляется простой передачей управления на новый процесс, например командой безусловной передачи управления по указателю, весь описатель процесса будет состоять только из адреса, на который надо передать управление. Однако, в действительности, каждый из процессов, вообще говоря, исполняет программу, состоящую из вложенных вызовов процедур. Для того, чтобы процесс нормально продолжил исполнение, нам нужно не только восстановить адрес текущей команды, но и структуру данных, которая содержит информацию обо всех этих вложенных вызовах: стек вызовов.
Кроме стека процесса, описатель должен содержать еще некоторые поля. Как минимум, он должен содержать указатель на следующий активный процесс. Система должна хранить указатели на текущий процесс и на конец списка. При этом планировщик переставляет текущий процесс в конец списка, а текущим делает следующий за ним в списке. Все вновь активизируемые процессы также ставятся в конец списка. Часто в литературе такой список называют очередью процессов (process queue).
Плюсы:
1.простота отладки;
2.высокая эффективность (скорость работы) планировщика;
3.снимаются все коллизии, связанные с критическими секциями - процесс может просто не отдавать никому управления, пока не будет готов к этому.
Минусы:
1.необходимость включать в программу вызовы планировщика усложняет программирование вообще и перенос программ из однопроцессных или иначе организованных многопроцессных систем в частности;
2.злонамеренный процесс может захватить управление и никому не отдавать его (не вызывать планировщик);
3.такая схема непригодна для систем реального времени — нет гарантированного времени реакции на внешнее событие.
Вытесняющая многозадачость
Все вышесказанное подводит нас к идее вызывать планировщик не из пользовательской программы, а каким-то иным способом. Например, повесить вызов такой функции на прерывание от системного таймера. Тогда мы получим следующую схему:
1.Каждому процессу выделяется квант времени.
2.Если процесс не освободил процессор в течение этого кванта, то его снимают и переставляют в конец очереди. При этом все готовые к исполнению процессы более или менее равномерно получают управление.
Этот механизм, называемый time slicing или разделение времени, реализован практически во всех современных ОС. Вытесняющая многопроцессность противопоставляется кооперативной, где переключение происходит только по инициативе самой задачи.
Одной из проблем, возникающих при реализации вытесняющей многопроцессности является выбор величины кванта времени. Из психологии восприятия известно, что человек начинает ощущать задержку ответа при величине этой задержки около 100 мс. Поэтому в системах разделенного времени, рассчитанных на интерактивную работу, квант обычно выбирают равным десяткам миллисекунд.
Вытесняющая многопроцессность имеет много преимуществ, но если просто вызывать планировщик процессов по прерываниям от таймера или другого внешнего источника, то такое переключение будет непоправимо нарушать работу прерываемых процессов. Для сохранения работоспособности после возврата к нему, необходимо перед переключением сохранить определенную информацию о процессе. Полный набор регистров, которые нужно сохранить, чтобы процесс не заметил переключения, называется контекстом процесса. Такими регистрами, как минимум, являются все регистры общего назначения, указатель стека, счетчик команд и слово состояния процессора. Если система использует виртуальную память, то в контекст процесса входят также регистры диспетчера памяти, управляющие трансляцией виртуального адреса.
Чаще всего оказывается неудобным сохранять контекст именно в стеке, его сохраняют чаще всего в дескрипторе процесса. Многие процессоры имеют специальные команды сохранения и загрузки контекста.