- •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. Структура ос: множественные прикладные среды
19. Системы управляемые событиями
В начале 70-х годов появилась новая архитектура многозадачных систем,довольно резко отличающаяся от вышеописанной модели последовательных процессов. Речь идет о так называемых системах, управляемых событиями (event-driven systems).
В этих системах впервые была реализована многооконная графика, когда пользователь одновременно видит на экране графический вывод нескольких программ и может активизировать любую из них, указав на соответствующее окно при помощи манипулятора.
При каждом движении мыши, нажатии на ее кнопки или клавиши на клавиатуре генерируется событие. События могут также генерироваться системным таймером или пользовательскими программами или быть визуальными — связанными с перерисовкой окон.
Каждое событие представляет собой структуру данных, которая содержит код, обозначающий тип события, а также поля, различные для различных типов событий: для «мышиных» событий это текущие координаты мыши и битовая маска, обозначающая состояние кнопок (нажата/отпущена). Для клавиатурных событий это код нажатой клавиши и битовая маска, обозначающая состояние различных модификаторов, таких как SHIFT, CNTRL, ALT и т.д.; для визуальных событий это координаты прямоугольника, который нужно перерисовать, и так далее.
Все события помещаются в очередь в порядке их возникновения.
В системе существует обработчик событий — структура данных, с которой связано несколько программных модулей - методов. Один из методов вызывается при поступлении события и называется callback — «системный вызов, идущий в обратном направлении», реакция системы на событие.
Менеджер событий, непрерывно просматривает очередь и передает поступающие события обработчикам. События, связанные с экранными координатами, передаются обработчику, ассоциированному с соответствующим окном. Клавиатурные события передаются фокусу клавиатуры - текущему активному обработчику.
Менеджер и обработчики событий органично вписываются в традиционную многозадачную ОС. События становятся дополнительным средством синхронизациии передачи данных, удобным для организации пользовательского интерфейса. В других ситуациях программист может пользоваться другими средствами. Так устроены Windows NT и оконная подсистема OS/2 - Presentation Manager. В X Window передача событий реализована на основе стандартных средств межпроцессного взаимодействия: труб или разделяемой памяти при работе в пределах одной машины и сокетов при взаимодействии с удаленной машиной.
В Windows 3.1 и старых версиях MacOS реализована кооперативная многозадачность, с помощью которых создается иллюзия многопроцессности: callback'и вызываются синхронно, в рамках одного callback происходит многократный вызов getNextEvent, а программы работают как единый процесс. В результате, работа программы чувствительна к количеству вызовов getNextEvent, а ресурсоемкие программы должны и вовсе выполняться с привилегиями ядра.
20. Многопроцессность на однопроцессных компьютерах
Кооперативная многопроцессность
Данная схема планирования процессов, называемая также планированием без вытеснения, основана на том, что переключение процессов происходит по инициативе активного процесса.
Для реализации в составе ОС должен иметься системный переключатель процессов, который каждая выполняемая в системе программа обязана периодически вызывать. Такая функция обычно называется диспетчером процессов или планировщиком (scheduler) и ведет себя следующим образом:
1.Она передает управление на следующий активный процесс.
2.Текущий процесс остается активным, и через некоторое время снова получит управление.
3.При этом он получит управление так, как будто планировщик представлял собой обычную функцию и возвратил управление в точку, из которой он был вызван.
При этом планировщик переставляет текущий процесс в конец списка, а текущим делает следующий за ним в списке. Все вновь активизируемые процессы также ставятся в конец списка. Часто в литературе такой список называют очередью процессов (process queue).
Вытесняющая многопроцессность
Планировщик вызывается не из пользовательской программы, а по прерыванию от системного таймера:
1.Каждому процессу выделяется квант времени.
2.Если процесс не освободил процессор в течение этого кванта, то его снимают и переставляют в конец очереди. При этом все готовые к исполнению процессы более или менее равномерно получают управление.
Этот механизм, называемый time slicing или разделение времени, реализован практически во всех современных ОС. Общим названием для всех методов переключения задач по инициативе системы является термин вытесняющая многопроцессность. Таким образом, вытесняющая многопроцессность противопоставляется кооперативной, где переключение происходит только по инициативе самой задачи. Разделение времени является частным случаем вытесняющей многопроцессности, но используется чаще всего.
Планировщики с приоритетами
При данном подходе главной является расстановка приоритетов между процессами:
1.Многоочередные дисциплины обслуживания.
Процесс реального времени исполняется всегда, когда готов к исполнению, и в системе нет более приоритетных процессов. В этом смысле ОС и процессы разделенного времени вынуждены полагаться на его порядочность - процесс РВ должен освободить процессор в разумное время. В свою очередь, процессы разделенного времени периодически переключаются между собой.
2.Динамическое распределение приоритетов.
Предпочтительными для системы будут те программы, которые захватывают процессор на короткое время и быстро отдают его, переходя в состояние ожидания внешнего или внутреннего события. Поэтому таким процессам система стремится присвоить более высокий приоритет. Система динамически повышает приоритет тем заданиям, которые освободили процессор в результате запроса на ввод-вывод или ожидания события и, наоборот, снижает тем заданиям, которые были сняты с процессора по истечению кванта времени. Приоритет не может превысить определенного значения - стартового приоритета задачи.
Монолитные системы и системы с микроядром
Все модули ОС собираются в конгломерат, называемый ядром (kernel). Ядро можно назвать привилегированной задачей, но оно не является процессом в полном смысле этого слова, потому что планировщик не может отобрать у ядра процессор. В ядре собраны все нереентерабельные модули системы, а часто и многие реентерабельные. Сам планировщик также является частью ядра.
Исполняя системный вызов, пользовательская программа передает управление ядру. При входе в ядро планирование процессов прекращается. Ядро или исполняет запрос, или ставит его в очередь на исполнение и передает управление планировщику. Планировщик переставляет текущий процесс в конец очереди (если он остался активным), программирует таймер, задавая в качестве интервала квант времени, и передает управление следующему активному процессу.
Микроядро - это минимальная функционально полная часть операционной системы, которая обычно состоит из планировщика и базовых средств передачи данных между процессами и синхронизации.
Модули системы, не включенные в микроядро, являются отдельными процессами, взаимодействующими с ядром и друг с другом. Если пользовательскому процессу нужно открыть файл, он посылает запрос соответствующему системному процессу и ждет ответа.