- •1. Определение и функции ос. Классификация многозадачных ос. Принципиальные отличия требований к системам реального времени и к обычными системами разделения времени.
- •1 Вопрос. Определение и функции ос.
- •2 Вопрос. Три подхода к определению ос:
- •3 Вопрос. Классификация многозадачных ос
- •2. Ядро ос. Подходы к определению ядра ос (классический и по Василенко). Причины неоднозначности. Режим ядра и режим пользователя. Системный вызов и его реализация (на примере любой ос/архитектуры).
- •4 Вопрос. Подходы к определению ядра ос
- •7 Вопрос. Понятие процесса. Адресное пространство процесса
- •8 Вопрос. Контекст процесса. Регистровый контекст
- •9 Вопрос. Системный контекст
- •10 Вопрос. Контекст процесса.
- •Создание и завершение процесса
- •11 Вопрос. Создание и завершение процесса
- •12 Вопрос. Граф состояний процесса. Причины перехода между состояниями.
- •Все возможные причины блокировки процесса
- •4. Вытесняющая многозадачность. Цели алгоритма планирования и их противоречивость. Основные алгоритмы планирования и их модификации.
- •13 Вопрос. Вытесняющая многозадачность
- •14 Вопрос. Задачи алгоритмов планирования
- •15 Вопрос. Планирование в системах пакетной обработки данных
- •17 Вопрос. Наименьшее оставшееся время выполнения. Трехуровневое планирование
- •18 Вопрос. Планирование в интерактивных системах
- •19 Вопрос. Несколько очередей. "Самый короткий процесс - следующий"
- •20 Вопрос. Гарантированное планирование. Лотерейное планирование. Справедливое планирование
- •21 Вопрос. Планирование в системах реального времени
- •22 Вопрос. Иерархия классов в Linux: rt, cfs, idle, stats.
- •23 Вопрос. Реальные алгоритмы планирования
- •24 Вопрос. Проблема балансировки нагрузки в smp-системах
- •Область применения нитей и процессов.
- •Реализация потоков в ядре
- •7. Синхронизация процессов и нитей (в т.Ч. Ядерных). Основные примитивы синхронизации. Различия семафоров и спин-блокировки. Ограничения использования семафоров в ядре (сюда же can_sleep()).
- •25 Вопрос. Примитивы межпроцессного взаимодействия
- •Спин-блокировки:
- •26 Вопрос. Семафоры
- •27 Вопрос. Мьютексы
- •[Крищенко: метода sys_linux]
- •28 Вопрос. Виртуальная память
- •Задачи, решаемые виртуальной памятью:
- •Вопросы из лекций:
- •29 Вопрос. Страничная организация виртуальной памяти
- •30 Вопрос. Сегментная и сегментно-страничная организации виртуальной памяти
- •31 Вопрос. Преобразование виртуального адреса в физический при страничном преобразовании
- •32 Вопрос. Tlb и его назначение. Моменты сброса tlb.
- •Адресное пространство процесса
- •Разделы адресного пространства процесса (32 разряда)
- •Выделение памяти процессу и освобождение им памяти. Связь функций выделения памятью стандартной библиотеки и системных вызовов, необходимость менеджера памяти режима пользователя
- •11. Виды межпроцессного взаимодействия и их классификация. Виды ipc в стандартах posix. Использование сокетов tcp/ip при большом количестве соединений Методы межпроцессного взаимодействия.
- •Виды ipc в стандартах posix
- •Использование сокетов tcp/ip при большом количестве соединений
- •32 Вопрос. Ввод-вывод и обработка прерываний.
- •33 Вопрос. Первичная и отложенная обработка прерываний, необходимость такого разделения. Реализация отложенной обработки.
- •13. Планировщик ввода-вывода для дисковых устройств. Алгоритмы планирования ввода-вывода для дискового устройства. Буферизация запросов.
- •34 Вопрос. Структура системы ввода-вывода
- •35 Вопрос. Алгоритмы планирования
- •36 Вопрос. Механизм ввода-вывода
- •36. Вопрос. Дескрипторы очереди запросов. Дескриптор запроса. Процесс планирования ввода-вывода
- •Процесс планирования ввода-вывода
- •14. Подсистема виртуальной фс в ядре ос. Кеширование. Ввод-вывод и прямой доступ к памяти на примере дискового устройства. Необходимость в уровне буферов (на примере Линукс)
- •Основные структуры
- •Уровень виртуальной файловой системы
- •Менеджер ввода-вывода
- •Стратегии организации ввода-вывода:
- •Ещё заметка про уровень буфферов
- •37 Вопрос. Основные структуры файловой системы.
- •Задачи файловой системы (from wiki)
- •38 Вопрос. Различные подходы к организации структур фс
- •39 Вопрос. Неразрывные файлы
- •40 Вопрос. Связанные списки. Связанные списки с индексацией
- •Связанные списки с индексацией
- •41 Вопрос. Индексные узлы
- •42 Вопрос. Реализация простой фс (предлагаю на примере minix file system).
- •43 Вопрос. Битовые карты, индексные узлы в minix 3
- •Индексные узлы
- •44 Вопрос. Журналируемые фс.
- •45 Вопрос. Физическая организация fat
- •46 Вопрос. Физическая организация s5 и ufs
- •47 Вопрос. Поиск адреса файла по его символьному имени
- •49 Вопрос. Физическая организация ntfs
- •50 Вопрос. Первый отрезок mft
- •51 Вопрос. Структура файлов ntfs
- •52 Вопрос. Виды файлов в ntfs
- •53 Вопрос. Каталоги ntfs
- •54 Вопрос. Файловые операции
- •55 Вопрос. Открытие файла
- •56 Вопрос. Обмен данными с файлом
- •57 Вопрос. Блокировки файлов
- •58 Вопрос. Стандартные файлы ввода и вывода, перенаправление вывода
- •59 Вопрос. Контроль доступа к файлам
- •60 Вопрос. Механизм контроля доступа
- •61 Вопрос. Организация контроля доступа в ос unix
- •62 Вопрос. Организация контроля доступа в ос Windows nt
- •63 Вопрос. Разрешения на доступ к каталогам и файлам
- •64 Вопрос. Встроенные группы пользователей и их права
- •65 Вопрос. Выводы
- •16. Сетевая подсистема ос и её функции. Причины включения tcp/ip в ядро ос. Реализация сетевых файловых систем.
- •Реализация сетевых файловых систем
- •Таненбаум Файловая система nfs
- •17. Идея микроядра. Недостатки и достоинства концепции микроядра (см. Qnx, Hurd, Minix, использование Mach в Mac os X). Идея микроядра
- •Достоинства:
- •Недостатки:
- •Более подробно о микроядре на примерах:
- •18. Идея ос на базе jit-vm. Недостатки, достоинства, ограничения концепции (смотреть, например, Singularity)
- •20. Существующие стандарты на интерфейсы ос. Группа стандартов Posix. Достоинства и недостатки реализации нестандартных интерфейсов (на примере WinApi). Реализация интерфейсов "чужеродных" ос.
- •Основные идеи стандарта posix
- •Api операционных систем. Проблемы, связанные с многообразием api (статья Wikipedia: Интерфейс программирования приложений)
- •21. Графическая подсистема и её место в ос на примере x11/Cocoa/WinApi. Достоинства и недостатки различных подходов.
21. Графическая подсистема и её место в ос на примере x11/Cocoa/WinApi. Достоинства и недостатки различных подходов.
В случае использования операционной системы на рабочей станции, особенно при запуске графически емких приложений, возможно, лучше, когда графическая система входит в ядро - в этом случае она может быстрее работать. А при работе на сервере предпочтительней отделение графической системы от ядра ОС, так как она загружает память и процессор. В случае Unix/Linux графическую систему можно просто отключить, к тому же, если системный администратор ее все-таки хочет использовать, в Linux есть несколько графических оболочек на выбор, некоторые из них (например, WindowMaker) достаточно слабо загружают машину. Эта же особенность Unix-образных операционных систем позволяет запускать эти ОС на машинах с весьма скромными объемами ОЗУ и т.п. В случае Windows же графическая система слишком тесно интегрирована в ОС, поэтому она должна запускаться даже на тех серверах, на которых она вовсе не нужна.
Windows
Особое по значению и важности место в ядре системы Windows занимает модуль графического интерфейса - Win32k.sys. Фактически - это часть подсистемы Win32, отвечающая за прорисовку и управление графическим интерфейсом. Этот модуль расположен в ядре специально для того, чтобы существенно повысить производительность графических операций ввода/вывода. Однако размещение столь критической части в ядре накладывает чрезвычайно строгие требования к корректности его исполнения. Фактически, ошибка в коде Win32k.sys приведет к краху системы. Разработчики Windows уделяют огромное внимание этому модулю, и именно он наиболее тщательно протестирован. Опыт эксплуатации систем Windows показывает, что код Win32k.sys работает абсолютно корректно и не содержит фатальных ошибок. Однако некорректный драйвер видеосистемы может все испортить.
Unix/Linux
В отличие от операционных системах Windows, где графическая система интегрирована в ядро в Unix/Linux графическая система существует отдельно от ядра и функционирует как обычное приложение.
X Window System — оконная система, обеспечивающая стандартные инструменты и протоколы для построения графического интерфейса пользователя. Используется в UNIX-подобных ОС. X Window System обеспечивает базовые функции графической среды: отрисовку и перемещение окон на экране, взаимодействие с мышью и клавиатурой.
X Window System не определяет деталей интерфейса пользователя — этим занимаются менеджеры окон, которых разработано множество. По этой причине внешний вид программ в среде X Window System может очень сильно различаться. В X Window System предусмотрена сетевая прозрачность: графические приложения могут выполняться на другой машине в сети, а их интерфейс при этом будет передаваться по сети и отображаться на локальной машине пользователя. В контексте X Window System термины «клиент» и «сервер» имеют непривычное для многих пользователей значение: «сервер» означает локальный дисплей пользователя (дисплейный сервер), а «клиент» — программу, которая этот дисплей использует (она может выполняться на удалённом компьютере).
Система X Window System была разработана в Массачусетском технологическом институте (MIT) в 1984 году. Нынешняя (по состоянию на июнь 2006 года) версия протокола — X11 — появилась в сентябре 1987 года.
В этом примере X-сервер принимает ввод с клавиатуры и мыши и производит вывод на экран. На пользовательской рабочей станции выполняются веб-браузер и эмулятор терминала. Программа обновления системы работает на удалённом сервере, но управляется с машины пользователя. Обратите внимание, что удалённое приложение работает так же, как если бы оно выполнялось локально.
Mac OS X
Mac OS X использует три наиболее совершенные современные графические технологии: Quartz, OpenGL, QuickTime. Графическая система вынесена из ядра и реализована в режиме пользователя. Основой графической системы является - Quartz.
Quartz–это основная часть Mac OS X, отвечающая за графику и работу с окнами. Quartz состоит из двух частей: Core Graphics Services и Core Graphics Rendering. Модуль Core Graphics Services отвечает за создание и управление окнами, выполняет роль сервера окон, обеспечивает низкоуровневую обработку событий и управление курсорами. Для доступа к буферу кадра и устройствам ввода/вывода используется I/O Kit Framework.
Основную работу по построению двумерных изображений (2D-Rendering), как текстовых, так и графических, выполняют модули библиотеки Core Graphics Rendering, которые ориентированы на работу с векторной графикой. Математическая природа векторной графики позволяет использовать не только пиксельные сетки, но и нецелочисленные системы координат, задавать удобные и понятные единицы измерения: сантиметры, дюймы и так далее. Внутренней моделью для представления векторной графики является Portable Document Format (PDF). Хотя PDF берет свое начало от PostScript'a, у него есть целый ряд преимуществ: он лучше работает с цветом, имеет возможность внутреннего сжатия данных, независим от компьютерной платформы и шрифтов, установленных на компьютере, является в некотором роде декларативным, а не полнофункциональным языком программирования, то есть не требует серьезной поддержки времени выполнения (runtime support).
Core Graphics Rendering можно рассматривать как некоторый «черный ящик», который преобразует все, что в него поступает, в PDF-формат и затем уже этот внутренний PDF – во все другие форматы, которые нужны,— экранный bitmap, данные для растровых принтеров, PostScript. Можно также использовать и сам PDF как есть. Это происходит автоматически, когда вызывается функция Preview при печати документов.
Вот некоторые характеристики системы Quartz:
Глубина цвета (Color depth, Bit depth);
Минимальное разрешение;
Сглаживание (anti-aliasing);
Доступ к буферу видеокадра;
Velocity Engine;
Ускорение 2D- графики.
OpenGL–компьютерный стандарт для работы с ЗD-графикой. Широко используется при написании игр, создании компьютерной анимации, в системах автоматизированного проектирования, в медицинских исследованиях. Поддержка технологии OpenGL реализована в виде одной из Rendering-библиотек того же уровня, что и Core Graphics Rendering модуля Quartz.
QuickTime–это среда мультимедийных технологий. Эффективно работает с видео, звуком, анимацией, графикой, текстом, музыкой, с круговыми панорамами, а также с видеопотоками и потоками данных. QuickTime
22. Внутренний интерфейс ядра ОС. Причины ограничения множества функций, доступных для модулей / драйверов. Недостатки и достоинства стабильного / настабильного внутреннего интерфейса ядра (см. Stable API Nonsense).
Под интерфейсом ядра в широком смысле можно понимать все нестатические данные и функции ядра. Также существует понятие двоичного интерфейса (ABI), который регламентирует формат передачи аргументов и возвращаемого значения при вызове функции, состав и формат системных вызовов, и т. п.
Причины ограничения множества функций, доступных для модулей / драйверов
(Далее на примере линукс)
В линукс часть кода, исполняемая в kernel space, выносится в модули с целью уменьшения размера ядра, так как часть такого кода, например драйверы, может не использоваться (напр - при сборке ядра есть возможность определить в конфигурации, попадет ли подсистема/драйвер и т.п. в модуль или прилинкуется к ядру статически). Ядро линукс хранит таблицы символов ядра, для хранения символов (имеется в виду данных и функций), к которым имеют доступ модули ядра, эти символы экспортируются с помощью макросов EXPORT_SYMBOL или EXPORT_SYMBOL_GPL (символы могут экспортироваться для любых модулей или только для модулей под лицензией GPL). Причины ограничения множества функций и данных, доступных для модулей и драйверов ядра: соображения безопасности данных ядра (модули могут быть сторонними и им не вполне доверяют) и лицензия.
Недостатки и достоинства стабильного / настабильного внутреннего интерфейса ядра. Stable API Nonsence
(Далее использовался http://lxr.linux.no/linux/Documentation/stable_api_nonsense.txt)
Линукс не имеет двоичного интерфейса ядра по следующим причинам:
В зависимости от версии компилятора С может меняться выравнивание структур и способ включения функций (например, функция может размещена как inline)
В зависимости от опций, с которыми собирается ядро, могут меняться а) поля, включаемые в структуры; б) некоторые функции могут быть совсем не реализованы, напр. некоторые спин-локи заменяются nop-ами при отсутсвии поддержки SMP (многопроцессорности); в) выравнивание памяти в ядре
Линукс поддерживает несколько архитектур, и бинарники драйверов, выполняемые на 1 архитектуре, не смогут выполняться на другой
Более того, разннобразие опций увеличивается большим количеством дистрибутивов и релизов.
Стабильный внутренний интерейс ядра
Линукс не имеет стабильного внутреннего интерфейса ядра.
Недостаток этого - те драйверы для линукс, которые не включены в основное дерево исходников, не переносимы между версиями, их надо все время переписывать.
Ядро линукс непрерывно совершенствуется и дописывается, находятся и исправляются ошибки, в результате могут меняться поля и названия структур, параметры и имена функций (в качестве примера можно привести внутриядерные usb-интерфейсы, которые переживали переработку трижды). В противоположность этому, разработчики ОС с закрытыми исходниками вынуждены поддерживать старые интерфейсы, что не способствует совершенствованию системы.
Для линукс очень важна безопасность. Ошибки, угрожающие безопасности системы, очень быстро исправляются после того, как их находят. При этом может быть значительно переработан внутренний интерфейс ядра и все драйверы, которые его используют. Возможность изменения интерфейса в данном случае позволяет избежать дальнейшего появления этих ошибок.
Также из ядра периодически удаляется неиспользуемый код для поддержания наибольшей компактности ядра.