- •Часть 1
- •В.Г.Олифер, н.А.Олифер. Сетевые операционные системы. Учебное пособие.-сПб.:бхв-Петербург, 2006.-536с.
- •В.А.Шеховцов. Операційні системи. Підручник .-к.:Виканавча група внv. 2005. 576с.
- •Столлингс в. Операционные системы. М.: Вильямс, 2001. -672с. Оглавление
- •Раздел 1 введение
- •1.1. Понятие операционной системы, ее назначение и функции
- •1.1.1. Понятие операционной системы
- •1.1.2. Назначение операционной системы
- •1.1.3. Операционная система как расширеная машина
- •1.1.4. Операционная система как распределитель ресурсов
- •1.2. История развития операционных систем
- •1.3. Классификация современных операционных систем
- •1.4. Функциональные компоненты операционных систем
- •1.4.1. Управление процессами и потоками
- •1.4.2. Управление памятью
- •1.4.3. Управление вводом-выводом
- •1.4.4. Управление файлами и файловые системы
- •1.4.5. Сетевая поддержка
- •1.4.6. Безопасность данных
- •1.4.7. Интерфейс пользователя
- •Раздел 2
- •2.1. Базовые понятия архитектуры операционных систем
- •2.2. Реализация архитектуры операционных систем
- •2.2.1. Монолитные системы
- •2.2.2. Многоуровневые системы
- •2.2.3. Системы с микроядром
- •2.2.4. Концепция виртуальных машин
- •2.3. Операционная система и ее окружение
- •2.3.1. Взаимодействие ос и аппаратного обеспечения
- •2.3.2. Взаимодействие ос и выполняемого программой
- •2.4. Особенности архитектур
- •Раздел 3
- •3.1. Базовые понятия процессов и потоков
- •3.1.1. Процессы и потоки в современных ос
- •3.1.2. Модели процессов и потоков
- •3.1.3. Составные элементы процессов и потоков
- •3.2. Многопотоковость и ее реализация
- •3.2.1. Понятие параллелизма
- •3.2.2. Виды параллелизма
- •3.2.3. Преимущества и недостатки многопотоковости
- •3.2.4. Способы реализации модели потоков
- •3.2.5 Состояния процессов и потоков
- •3.3 Описание процессов и потоков
- •3.3.1. Управляющие блоки процессов и потоков
- •3.3.2. Образы процесса и потока
- •3.4. Переключение контекста и обработка прерываний
- •3.4.1. Организация переключения контекста
- •3.4.2. Обработка прерываний
- •3.5 Создание и завершение процессов и потоков
- •3.5.1 Создание процессов
- •3.5.2. Иерархия процессов
- •3.5.3. Управление адресным пространством во время создания процессов
- •3.5.4. Особенности завершения процессов
- •3.5.5. Синхронное и асинхронное выполнение процессов
- •3.5.6. Создание и завершение потоков
- •3.6 Управление потоками в Linux
- •3.6.1. Базовая поддержка многотопотоковости
- •3.6.2. Особенности новой реализации многопоточности в ядре Linux
- •3.6.3. Потоки ядра Linux
- •3.7 Управление процессами в Windows хр
- •3.7.1. Составные элементы процесса
- •3.7.2. Структуры данных процесса
- •3.7.3. Создание процессов
- •3.7.4. Завершение процессов
- •3.7.5. Процессы и ресурсы. Таблица объектов процесса
- •3.8 Управление потоками в Windows хр
- •3.8.1. Составные элементы потока
- •3.8.2. Структуры данных потока
- •3.8.3. Создание потоков
- •Раздел 4
- •4.1. Виды межпроцесорного взаимодействия
- •4.1.1. Методы распределения памяти
- •4.1.2. Методы передачи сообщений
- •4.1.3. Технология отображаемой памяти
- •4.1.4. Особенности межпроцесорного взаимодействия
- •4.2. Базовые механизмы межпроцессового взаимодействия
- •4.2.1. Межпроцессовое взаимодействие на базе общей памяти
- •4.2.2. Основы передачи сообщений
- •4.2.3. Технологии передачи сообщений
- •Глава 5
- •5.1 Функции ос по управлению памятью
- •5.2 Типы адресов
- •5.3 Алгоритмы распределения памяти
- •5.3.1 Распределение памяти фиксированными разделами
- •5.3.2 Распределение памяти динамическими разделами
- •5.3.3 Перемещаемые разделы
- •5.4 Свопинг и виртуальная память
- •5.4.1 Страничное распределение
- •5.4.2 Сегментное распределение
- •5.4.3 Сегментно-страничное распределение
- •5.5 Разделяемые сегменты памяти
- •5.6 Кэширование данных
- •5.6.1 Иерархия запоминающих устройств
- •5.6.3 Принцип действия кэш-памяти
- •5.6.4 Проблема согласования данных
- •5.6.5 Способы отображения основной памяти на кэш
- •5.6.6 Схемы выполнения запросов в системах с кэш-памятью
- •Раздел 6 Логическая и физическая организация файловой системы
- •6.1 Логическая организация файловой системы
- •6.1.1 Цели и задачи файловой системы
- •5.1.2 Типы файлов
- •5.1.3 Иерархическая структура файловой системы
- •5.1.4 Имена файлов
- •5.1.5 Монтирование
- •5.1.6 Атрибуты файлов
- •5.1.7 Логическая организация файла
- •5.2 Физическая организация файловой системы
- •5.2.1 Диски, разделы, секторы, кластеры
- •5.2.2 Физическая организация и адресация файла
- •5.2.3 Физическая организация fat
- •5.2.4 Физическая организация ntfs
4.2.2. Основы передачи сообщений
Все методы взаимодействия, которые было рассмотрено до сих пор, основываются на чтении и записывании совместно используемых данных. На практике такое взаимодействие не всегда возможное (например, работа с совместно используемыми данными проблематична, если для процессов нет общей физической памяти, а есть только сетевая связь между компьютерами, на которые они выполняются). В таких случаях можно использовать средства взаимодействия, которые не основываются на совместно используемых данных, прежде всего средства передачи сообщений.
Как было уже упомянуто, средства передачи сообщений основываются на обмене сообщениями - фрагментами данных сменной длины. Основой такого обмена есть не общая память, а канал связи. Он обеспечивает взаимодействие между процессами (для того, чтобы общаться, они должны создать канал связи) и является абстрактным отображением сети связи. Абстрактность канала дает возможность реализовать его не только на основе сетевого взаимодействия, но и общей памяти (когда процессы находятся на одном компьютере). При этом такие изменения в реализации будут скрыты от процессов, которые взаимодействуют.
Выделяют такие характеристики каналов связи:
-способ задання;
-количество процессов, которые могут быть соединены одним каналом;
-количество каналов, которые могут быть созданы между двумя процессами;
-пропускная способность канала (количество сообщений, которые могут одновременно находиться в системе и быть ассоциированными с этим каналом);
-максимальный размер сообщения;
-направленность связи через канал (двусторонняя или односторонняя связь).
В односторонней связи для конкретного процесса допускают передачи данных только в один сторону.
Примитивы передачи сообщений
Основная особенность передачи сообщений заключается в том, что процессы совместно используют только каналы. Нет необходимости обеспечивать взаимное исключение процессов во время доступа к совместно используемым данным, вместо этого довольно определить примитивы передачи сообщений.
Примитивы передачи сообщений – это специальные операции обмена данными через канал, которые обеспечивают не только обмен данными, но и синхронизацию.
Есть два примитива передачи сообщений:
-send - для отсылания сообщения каналом,
-receive - для получения сообщения из канала.
Рассмотрим, как особенности их реализации дают возможность выделить разные классы методов передачи сообщений.
Указанные примитивы передачи сообщений могут задавать прямой и косвенный обмен данными. При прямом обмене данными необходимо явным образом указывать процесс, с которым необходимо обмениваться информацией. Косвенный обмен осуществляют через специальный объект (почтовый ящик, порт); процессы могут помещать сообщение в почтовый ящик и получать их оттуда. Обычно несколько процессов имеют доступ к одному почтовому ящику, применяя во время его поиска методы именования. Большинство современных технологий обмена сообщениями использует косвенный обмен данными. Примером прямого обмена являются традиционные сигналы.
Синхронная и асинхронная передача сообщений
Остановимся на основных вопросах синхронизации во время передачи сообщений. Можно выделить разные группы методов передачи сообщений в зависимости от того, как они дают возможность ответить на два вопроса.
-
Может ли поток быть приостановлен во время выполнения операции send, если сообщение не было получено?
-
Может ли поток быть приостановлен во время выполнения операции receive, если сообщение не было отослано?
В реальных системах ответ на второй вопрос практически всегда будет положительной - неблокировочный прием сообщений служит причиной того, что они теряются. Варианты ответов на первый вопрос определяют два класса передачи сообщений - синхронное и асинхронное.
Во время синхронной передачи сообщений операция send приостанавливает процесс получения сообщения, а во время асинхронной передачи сообщений она не приостанавливает процесс (т.е. является неблокировочной); после отсылания сообщения процесс продолжает свое выполнение, не ожидая получение результата. Удобнее в этом случае использовать косвенную адресацию через почтовые ящики.
Реализация синхронной и асинхронной передачи сообщений зависит от ряда характеристик канала и обмена сообщениями, прежде всего от пропускной способности канала.
-
Если пропускная способность равняется нулю (сообщение не могут ожидать в системе), отправитель всегда должен ожидать, пока получателю не поступит сообщения, а получатель должен ожидать, пока сообщение ему не будет отослано. Два процессы должны явно договариваться о будущем обмене.
-
Если пропускная способность ограничена (в системе могут находиться максимум n сообщений для этого канала), отправитель должен ожидать только тогда, когда очередь сообщений для этого канала полна (в ней находится ровно n сообщений), получатель должен ожидать, если эта очередь пустая.
-
Если пропускная способность неограниченная, ожидает только для получатель освобождения очереди.
Во время обмена сообщениями необходимое подтверждение их получения. Некоторые методы обмена сообщениями не требуют подтверждения совсем, в других случаях возможная ситуация, когда отправителя после выполнения операции send блокируют до тех пор, пока получатель не пришлет ему другое сообщение с подтверждением получения; такую технологию называют обменом сообщениями с подтверждением получения.
Решение задачи производителей-потребителей с помощью передачи сообщений
Рассмотрим решение задачи производителей-потребителей с использованием асинхронной передачи сообщений.
Организовывают два почтовых ящика - для производителя и для потребителя. Если сундучок пустой, поток будет ожидать, пока в ней не появится сообщение.
Почтовые ящики производителя и потребителя имеют свои особенности.
Сундучок производителя может содержать только пустые сообщения не больше n. Наличие m сообщений в этом сундучке служит сигналом для производителя, e которого в буфере есть место для m объектов. Чтобы отослать данные в буфер, производитель забирает с сундучка одно сообщение, заполняет его данными и отсылает в сундучок потребителя. Заполнив буфер, производитель опустошит свой сундучок и будет вынужден ждать, пока потребитель не поместит у нее пустое сообщение.
Сообщение в сундучке потребителя отвечают объектам в буфере. После того как потребитель заберет сообщение из этого сундучка, он использует его данные и отошлет пустое сообщение в сундучок производителя, сигнализируя, что в буфере появилось место. Пустой сундучок потребителя означает пустой буфер -потребитель будет ждать, пока производитель не поместит заполненное сообщение в этот сундучок.
В начале работы сундучок производителя заполняют пустыми сообщениями узагальним числом n (это будет означать, что он может сделать n объектов).
Функции producer() и consumer () похожие. Как производитель так и потребитель в цикле стараются забрать сообщение из своих сундучков. Если это удается производителю, он заполняет сообщение данными и отсылает его в сундучок потребителя, если это сможет сделать потребитель, он воспользуется сообщением и отошлет пустое сообщение в сундучок производителя. После этого цикл продолжается.
Основное отличие этого решения заключается в том, что оно не зависит от совместно используемых данных. Доступ к почтовым ящикам может быть выполнен с помощью системных вызовов, которые скрывают их местонахождение; сундучки могут быть и отдаленными. Это дает возможность применять алгоритм тогда, когда производитель и потребитель являются разными процессами, а возможно, и находятся на разных компьютерах.

