- •Вопросы по курсу «Операционные системы» весеннего семестра 2010-2011 учебного года
- •1. Общие сведения об операционных системах, цели применения ос, структура ос.
- •2. Модель взаимодействия компонентов операционной системы.
- •3. Классификация ос.
- •4.5. Теоретические основы параллельного программирования, понятия: процесс, задача, мультизадачный режим работы ос, нить, контекст нити.
- •6. Теоретические основы параллельного программирования: классификация программных модулей; понятия реентерабельности и повторной входимости программных модулей.
- •7. Прерывания и механизмы обработки прерываний операционной системой.
- •8.9.Диспетчер задач: дисциплины диспетчеризации, критерии оценки дисциплин диспетчеризации задач.
- •10. Теоретические основы параллельного программирования: независимые и взаимодействующие процессы, понятия ресурса и критического ресурса.
- •11. Теоретические основы параллельного программирования: список условий функционирования взаимодействующих процессов, понятие тупика.
- •12. Теоретические основы параллельного программирования: принцип организации критических секций.
- •13. Теоретическая классификация видов взаимодействия процессов: сигналы, семафоры, мьютексы.
- •15. Теоретическая классификация видов взаимодействия процессов: очереди сообщений, файлы, разделяемая память, объект «ресурс».
- •16. Теоретическая классификация видов взаимодействия процессов: почтовые ящики, конвейеры.
- •17 Организация подсистемы безопасности в ос Windows: создание и открытие объектов, понятие описателя, атрибуты безопасности, права доступа, структура описателя безопасности.
- •18.Организация подсистемы безопасности в ос Windows: маркеры, привилегии пользователей, олицетворение.
- •19. Организация подсистемы безопасности в ос Windows: получение доступа к объекту.
- •20. Процессы в ос Windows: понятие Win32 api; main() и WinMain(), создание и завершение процессов и нитей, основные функции работы с процессами и нитями.
- •21. Работа с файлами в ос Windows: синхронная и асинхронная.
- •24. Таймеры ожидания в ос Windows и понятие apc
- •25. Структурная обработка исключений.
- •26. Способы управления памятью: простое непрерывное распределение, оверлейное распределение.
- •1. Простое непрерывное распределение
- •2. Оверлейное распределение (OverLay)
- •27. Способы управления памятью: распределение статическими и динамическими разделами.
- •28. Способы управления памятью: сегментная организация памяти.
- •29. Страничная организация памяти
- •30. Сегментно-страничный способ организации памяти
- •31. Таблицы физических страниц памяти в современных ос. Понятие pfn, понятие mdl.
- •32. Распределение оперативной памяти в современных компьютерах. Спецификация acpi
- •33. Распределение первого мегабайта оперативной памяти в персональных компьютерах.
- •35. Резервирование памяти с помощью функции VirtualAlloc
- •36. Работа с кучами процессов
- •37 . Динамически загружаемые библиотеки (dll). Связывание во время загрузки библиотеки.
- •38. Системные перехватчики (hook
- •40. Службы
16. Теоретическая классификация видов взаимодействия процессов: почтовые ящики, конвейеры.
Конвейер (канал) PIPE.
Канал предназначен для обмена сравнительно небольшими объемами данных между процессами. Принцип работы конвейера основан на механизме ввода/вывода, который используется для работы с файлами. Процесс-передатчик записывает с помощью функции write(2), а приемник читает с помощью функции read(2). При этом информация представляется в виде потока байт. Конвейер всегда однонаправленный. По сути это файл особого типа, расположенный не на диске, а в памяти. По историческим причинам размер буфера в ОС Unix ограничен 64 Кбайтами. Буфер работает по принципу FIFO, работает циклически (т.е. замкнут в кольцо).
Если хвост догоняет голову, то информации нет. Если голова догоняет хвост, то буфер переполнен.
Конвейер – еще один вид системного ресурса.
Достоинства:
За организацией циклического буфера следит ОС
Работа ведется как с файлами, но скорость выше, чем у файлов.
Недостаток: Ограниченный размер буфера.
В ОС Windows конвейера нет.
Почтовые ящики: Обеспечивают обмен сообщениями. Состоят из информации о данном почтовом ящике и буферов сообщений. Почтовый ящик может быть привязан к процессу-получателю, процессу-отправителю, к паре взаимодействующих процессов, и может быть именованным.
В простейшем случае почтовый ящик работает только в одном направлении. Отправитель отсылает сообщение и будучи не связанным требованиями синхронизации, продолжает свою работу. Получатель периодически заглядывает в почтовый ящик и забирает почту.
Возможны варианты, когда получатель входит в режим ожидания, если ящик пуст, а отправитель входит в режим ожидания если почтовый ящик полон.
Возможен вариант использования сообщений с уведомлением о доставке.
Имеются 4 стандартные операции с почтовым ящиком:
Send message
Wait message
Send answer
Wait answer
Достоинства способа:
Процессу не нужно знать о существовании других процессов, пока он не получит от них сообщение.
Два процесса могут обмениваться более чем одним сообщением за один раз.
Операционная система может гарантировать приватность сообщений.
Очередь буферов позволяет отправителю продолжать работу, не ожидая получателя.
Недостатки способа:
Низкая суммарная скорость передачи данных.
Возможность переполнения буферов.
17 Организация подсистемы безопасности в ос Windows: создание и открытие объектов, понятие описателя, атрибуты безопасности, права доступа, структура описателя безопасности.
Многие функции, описанные Win32API на самом деле не существуют, поскольку являются макросами, которые компилятор заменяет на вызовы правильной функции. Такие действия требуются из-за UNICODE.
UNICODE в ОС WINDOWS – это формат алфавитно-цифровых символов, точное название которых UTF-16. В этом формате каждый символ кодируется минимум 2 байтами. ASCII – более привычный формат (совершенно другое представление символов)
В LINUX используется UTF-8 (каждый символ минимум 1 байт). В формате UTF-8 стандартный английский алфавит совпадает с форматом его в ASCII. В ОС WINDOWS не совпадают символы ASCII и UNICODE.
FE|FF - это означает, что это текст (файл формата UNICODE).
#define UNICODE (1)
В зависимости от того, используется ли (1) или нет, компилятор подставляет вместо макроса соответствующую функцию. Имя функции обрабатывается из имени макроса плюс в конце большой символ ‘А’ или ‘W’. (А – ASCII, W – Wide)
CreateProcess CreateProcessA или CreateProcessW
При написании программ, которые будут пользоваться текстом UNICODE, нужно использовать: L “Sample string”
Однако, наиболее правильным способом программирования, является способ, при котором исходный текст программы может компилироваться как в ASCII, так и в UNICODE версии. Строка в этом случае должна писаться так: TEXT (“Sample string”)
Программы в формате UNICODE работают быстрее в ОС WINDOWS NT и выше, а программы в ASCII – в WINDOWS 95. Ядро ОС Windows NT начало разрабатываться в компании Microsoft в 1989 г. Группой программистов под руководством David Catler. На начальном этапе в группу входило 9 человек, разработка ядра ОС заняла 3 года.
Интерфейс м/д прикладными процессами и ядром ОС в WINDOWS наз-ся Win32API. Этот интерфейс не является «родным», а был разработан дополнительно для управления вызова большинства ф-ций ОС. «Родной» интерфейс Native API. Многие программы, написанные самой Microsoft используют NativeAPI, который оказался наиболее быстрым. Особенностью программного интерфейса от Windows состоит в том, что в нем очень большое кол-во ф-ций и с каждой новой версией Windows их количество растёт. Многие ф-ции описанные в Win32API, на самом деле не сущ-ют, т.к. являются макросами, которые компилятор заменяет на вызов правильной функции, такое действие треб-ся из-за UNICODE.
В ОС Windows реализована дискреционная схема контроля доступа. Привязка информации о правах доступа делается к самому объекту в составе ядра.
Понятие описателя Handle С точки зрения процесса представляет собой абстрактное число, используемой для идентификации объекта в составе ядра. Описатели созданы для повышения уровня безопасности ядра ОС. По числовому значению описателя невозможно определить, какой объект он описывает. С точки зрения ядра ОС описатель представляет собой сложный индекс в системе массивов. Актуальный размер описателя 24 бита. Содержит индекс в массивах среднего, низкого и высокого уровней.
Помимо указателя на объект, структура описателя хранит в себе еще и права доступа к объекту, разрешенные по данному описателю. При каждом обращении к объекту по описателю права доступа сравниваются с правом, требуемым для данной операции. Если таковое отсутствует, то операция отклоняется.
Атрибуты безопасности
Security_attributes. Структура содержит в себе описатели безопасности объекта и определяет, будет ли наследуемым описатель, являющийся результатом работы функции. Length – размер структуры Pvoid lpSecurity Descriptor – описатель безопасности
Bool bInherit Handle – будет ли наследуемый описатель
Структура Security_attributes исполняется во многих функциях: Create File, Create event, Create Process…
Описатель безопасности.
Набор прав на работу с объектом. Привязывается к объекту, имеет плавающий размер.
Oi
Описатель безопасности содержит в себе помимо прочего список дискреционного набора доступа DACL (Discretion Access Control list) Определят права других пользователей и списка пользователей на доступ к файлу в виде перечня правил.
Системный контроль доступа
SACL (System -//-) Содержатся требования по аудиту контроля операция над объектами. DACL ACE(Access Control Entity)) идентификатор право SID.
Права доступа ACCESS_MASK
Права доступа могут быть унифицированными и точно определенными.
Унифицированные права доступа:
GENERIC_READ, GENERIC_WRITE, GENERIC_EXECUTE, GENERIC_ALL
Точно определенные права доступа для каждого типа объекта в системе определяются по-разному. Например, для процесса имеются следующие права:
Process_Terminate 0x0001 Process_Create_Thread 0x0002
Process_Set_Session_ID 0x0004 Process_VM_Read 0x0010
Process_VM_Write 0x0020
Для трансформации точно определенных прав в унифицированные существует специальная структура, которая называется Generic_Mapping В структуре 4 поля. Это 4-байтные числа, которые содержат в себе дизъюнкцию строго определенных прав доступа. Структура G_M служит для трансформации унифицированных прав доступа в точно определенные, она привязана к типу объекта. Для стандартных типов значение этой структуры изменить нельзя. Можно создать свой тип объекта. В этом случае G_M определяется пользователем. Проверка прав доступа осуществляется с помощью Access Check.
