
- •Введение
- •1. Основные понятия в операционных системах
- •1.1. Классификация и функции операционных систем
- •1.2. Ос общего назначения и реального времени
- •1.3. Выполнение команд в вычислительной системе
- •1.4. Прерывания
- •1.5 Архитектуры операционных систем
- •1.6. Управление оперативной памятью вычислительной системы
- •1.7. Общие сведения о процессах и потоках
- •2. Операционная система windows
- •2.1. Версии операционной системы Windows
- •2.2. Архитектура операционной системы windows
- •2.3. Процессы и потоки в Windows
- •2.4. Взаимодействие процессов
- •2.5. Управление потоками в Windows
- •2.6. Файловые системы Windows
- •2.7. Установка и последовательность загрузки Windows
- •Последовательность загрузки Windows xp
- •2.8. Интерпретатор команд и пакетные файлы
- •2.9. Конфигурирование Windows
- •3. Операционная система qnx neutrino
- •3.1. Версии операционной системы qnx Neutrino
- •3.2. Архитектура операционной системы qnx Neutrino
- •3.3. Процессы в qnx6
- •Завершение процесса
- •3.4. Потоки в qnx6
- •Завершение потока
- •3.5. Управление потоками и процессами в qnx6
- •Механизмы ipc
- •Средства синхронизации в qnx
- •3.6. Файловые системы qnx
- •Типы файлов
- •3.7. Инсталляция и последовательность загрузки qnx
- •3.8. Интерпретаторы команд и пакетные файлы в qnx
- •3.9. Конфигурирование qnx
- •4. Виртуальные машины
- •4.1. Общие сведения о виртуальных машинах
- •4.2. Работа с виртуальной машиной VmWare
- •5. Защита от сбоев и несанкционированного доступа
- •5.1. Принципы построения систем безопасности
- •5.2. Безопасность операционной системы windows
- •6. Сетевые возможности операционных систем
- •6.1. Аппратаное обеспечение локальных сетей
- •6.2. Сети Windows
- •6.3. Локальная сеть на основе qnet
- •6.4. Глобальные сети
- •7. Многопроцессорные системы
- •7.1. Архитектуры многопроцессорных операционных систем
- •7.2. Принципы функционирования smp
- •7.3. Принципы функционирования кластеров
- •Список использованной литературы
- •Компилятор
2.4. Взаимодействие процессов
В Windows процессы имеют три типа взаимодействия между собой [3]. Они показаны в табл.4.
1) Процессы могут быть не осведомлены о наличии друг друга: это независимые процессы, не предназначенные для совместной работы, например, многозадачность для конкретных заданий и интерактивная сеть.
2) Процессы косвенно осведомлены о наличии друг друга: они не обязательно могут знать идентификаторы друг друга, однако могут разделять доступ к некоторому объекту (буфер ввода/вывода).
3) Процессы непосредственно осведомлены о наличии друг друга: они обращаются друг к другу по идентификаторам и предназначены для совместной работы.
Взаимодействие процессов Таблица 4.
Степень взаимодействия |
Взаимосвязь |
Влияние одного процесса на другой |
Потенциальная проблема взаимодействия |
Не осведомлены |
Конкуренция |
Результаты работы одного процесса не зависят от действий других. Возможно влияние одного процесса на работу другого |
Взаимоисключение, взаимоблокировка, голодание |
Косвенно осведомлены |
Сотрудничество с использованием разделения ресурса |
Результаты работы одного процесса могут зависеть от информации, полученной от других. Возможно влияние одного процесса на работу другого |
Взаимоисключение, взаимоблокировка, голодание, связь данных |
Непосредственно осведомлены |
Сотрудничество с использованием связей |
Результаты работы одного процесса могут зависеть от информации, полученной от других. Возможно влияние одного процесса на работу другого |
Взаимоблокировка, голодание |
Взаимоисключение (mutual exclusion) – это предоставление процессу некоторого ресурса в монопольное использование, например, принтер предоставляется файла для печати, иначе на распечатке будут чередоваться строки различных файлов. Такой ресурс будет называться критическим, а участок программы, который его использует – критической секцией программы.
Взаимоблокировка (deadlock) – пусть в системе 2 процесса П1 и П2 и 2 ресурса Р1 и Р2. Для работы П1 требуется Р1 и Р2 и он уже захватил Р1, а Р2 недоступен. В тоже время, П2 требуется Р1 и Р2, он захватил Р2, а Р1 недоступен, таким образом, процессы оказываются взаимноблокированы.
Голодание - пусть в системе 3 процесса П1, П2 и П3, которые используют ресурс. Возможна ситуация, когда ресурсом владеет П1, а затем передаёт П3. ОС может предоставлять ресурс так, что П2 его не получит, а П1 и П3 будут использовать его попеременно. Таким образом, П2 не получает ресурса, хотя никакой взаимоблокировки нет, т. е. он голодает.
Потоки одного процесса не имеют доступа к адресному пространству другого процесса. Однако существуют механизмы для передачи данных между процессами. Важнейшими из них являются: разделяемая память, именнованные и не именованные каналы, сокеты.
Система виртуальной памяти в Win32 использует файл подкачки - swap file (или файл размещения - page file), имея возможность преобразования страниц оперативной памяти в страницы файла подкачки на диске и наоборот. Система может проецировать на оперативную память не только файл размещения, но и любой другой файл. Приложения могут использовать эту возможность. Это может использоваться для обеспечения более быстрого доступа к файлам, а также для совместного использования памяти.
Такие объекты называются проекциями файлов на оперативную память (file-mapping object). Для создания проекции файла сначала вызывается функция CreateFileMapping(). Ей передается дескриптор (уже открытого) файла или указывается, что нужно использовать page file операционной системы. Кроме этого, в параметрах ей передается флаг защиты, максимальный размер проекции и имя объекта. Затем вызывается функция MapViewOfFile(). Она отображает представление файла (view of a file) в адресное пространство процесса. По окончании работы вызывается функция UnmapViewOfFile(). Она освобождает память и записывает данные в файл (если это не файл подкачки). Чтобы записать данные на диск немедленно, используется функция FlushViewOfFile(). Проекция файла, как и другие объекты ядра, может использоваться другими процессами через наследование, дублирование дескриптора или по имени.
Кроме разделяемой памяти, в Windows есть и другие способы передачи информации между процессами, например, каналы, именованные каналы и сокеты. Все они имеют сходный принцип и представляют собой своеобразный канал или соединение, "трубу", соединяющую процессы. Программа, имея один конец такого соединения, может читать и/или писать в него данные, обмениваясь, таким образом, информацией с программой на другом конце. Каналы используются для пересылки данных в одном направлении между дочерним и родительским процессами или между двумя дочерними процессами. Операции чтения/записи в канал похожи на подобные операции при работе с файлами. Поименованные каналы используются для двустороннего обмена данными между процессом-сервером и одним или несколькими процессами-клиентами. Как и анонимные каналы, они используют файлоподобный интерфейс, но, в отличие от первых, пригодны также для обмена данными по сети.
Сокет - это абстрактный объект для обозначения одного из концов сетевого соединения, в том числе и через Internet. Сокеты Windows бывают двух типов: сокеты дейтаграмм и сокеты потоков. Интерфейс Windows Sockets (WinSock) основан на BSD-версии сокетов, но в нем имеются также расширения, специфические для Windows.
Для синхронизации в Win API используются (табл.5): уведомление об изменении файла, мьютекс, семафор, события, таймер ожидания.
Механизмы для синхронизации параллельных вычислений Таблица 5
Тип объекта |
Определение |
Условие перехода в сигнальное состояние |
Ожидающие потоки |
Процесс |
Программа, включающая адресное пространство и ресурсы, требуемые для её выполнения |
Завершение последнего потока |
Освобождаются все потоки |
Поток |
Выполняемая единица внутри процесса |
Завершение работы потока |
Освобождаются все потоки |
Файлы |
Открытый файл или устройство ввода/ вывода |
Завершение операций ввода/вывода |
Освобождаются все потоки |
Консольный ввод |
Буфер текстового окна используется для операций I/O в MS-DOS |
Имеется введённая информация доступная процессу |
Освобождается один поток |
Объекты специально для синхронизации |
|||
Уведомление об изменении файла |
Уведомление о любых изменениях ФС |
Изменение в ФС соответствующее заданным объектом фильтру |
Освобождается один поток |
Мьютекс |
Механизм обеспечения взаимоисключений в Win 32 |
Поток освобождает мьютекс |
Освобождается один поток |
Семафор |
Счётчик, регулирующий количество потоков, которые могут использовать ресурс |
Счётчик семафора обнуляется |
Освобождается один поток |
События |
Извещение о наступлении некоторого события в системе |
Поток осуществляет событие |
Освобождаются все потоки |
Таймер ожидания |
Счётчик, учитывающий прошедшее время |
Наступил указанный момент времени или истёк указанный интервал времени. |
Освобождаются все потоки |
Семафор – это объект синхронизации, имеющий счетчик целых значенией и над которыми определены три операции:
инициализация неотрицательным числом;
уменьшения значения семафора: если значение отрицательное, то поток, выполняющий эту операцию блокируется;
увеличения значений семафора: если значение было отрицательным, то оно увеличиваясь становится больше нуля, тогда заблокированный поток разблокируется.
Каждый объект синхронизации ОС может находиться в сигнальном и несигнальном состоянии, когда объект входит в сигнальное состояние исполняющая система ОС освобождает все потоки, находящиеся в состоянии ожидания этого объекта.
Мьютекс похож на бинарный семафор, но он знает имя процесса, который его захватил (в отличии от семафора). При его переходе в сигнальное состояние освобождается только один из ожидающих потоков и скорость его работы на два порядка выше, чем у семафора.