Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры ОС1.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
1.61 Mб
Скачать

16. Теоретическая классификация видов взаимодействия процессов: почтовые ящики, конвейеры.

Конвейер (канал) PIPE.

Канал предназначен для обмена сравнительно небольшими объемами данных между процессами. Принцип работы конвейера основан на механизме ввода/вывода, который используется для работы с файлами. Процесс-передатчик записывает с помощью функции write(2), а приемник читает с помощью функции read(2). При этом информация представляется в виде потока байт. Конвейер всегда однонаправленный. По сути это файл особого типа, расположенный не на диске, а в памяти. По историческим причинам размер буфера в ОС Unix ограничен 64 Кбайтами. Буфер работает по принципу FIFO, работает циклически (т.е. замкнут в кольцо).

Если хвост догоняет голову, то информации нет. Если голова догоняет хвост, то буфер переполнен.

Конвейер – еще один вид системного ресурса.

Достоинства:

  1. За организацией циклического буфера следит ОС

  2. Работа ведется как с файлами, но скорость выше, чем у файлов.

Недостаток: Ограниченный размер буфера.

В ОС Windows конвейера нет.

Почтовые ящики: Обеспечивают обмен сообщениями. Состоят из информации о данном почтовом ящике и буферов сообщений. Почтовый ящик может быть привязан к процессу-получателю, процессу-отправителю, к паре взаимодействующих процессов, и может быть именованным.

В простейшем случае почтовый ящик работает только в одном направлении. Отправитель отсылает сообщение и будучи не связанным требованиями синхронизации, продолжает свою работу. Получатель периодически заглядывает в почтовый ящик и забирает почту.

Возможны варианты, когда получатель входит в режим ожидания, если ящик пуст, а отправитель входит в режим ожидания если почтовый ящик полон.

Возможен вариант использования сообщений с уведомлением о доставке.

Имеются 4 стандартные операции с почтовым ящиком:

  1. Send message

  2. Wait message

  3. Send answer

  4. Wait answer

Достоинства способа:

  1. Процессу не нужно знать о существовании других процессов, пока он не получит от них сообщение.

  2. Два процесса могут обмениваться более чем одним сообщением за один раз.

  3. Операционная система может гарантировать приватность сообщений.

  4. Очередь буферов позволяет отправителю продолжать работу, не ожидая получателя.

Недостатки способа:

  1. Низкая суммарная скорость передачи данных.

  2. Возможность переполнения буферов.

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.