Механизм сокетов
Средства межпроцессного взаимодействия ОС UNIX, представленные в системе IPC, решают проблему взаимодействия двух процессов, выполняющихся в рамках одной операционной системы. Однако, очевидно, их невозможно использовать, когда требуется организовать взаимодействие процессов в рамках сети. Это связано как с принятой системой именования, которая обеспечивает уникальность только в рамках данной системы, так и вообще с реализацией механизмов разделяемой памяти, очереди сообщений и семафоров, – очевидно, что для удаленного взаимодействия они не годятся. Следовательно, возникает необходимость в каком-то дополнительном механизме, позволяющем общаться двум процессам в рамках сети. Однако если разработчики программ будут иметь два абсолютно разных подхода к реализации взаимодействия процессов, в зависимости от того, на одной машине они выполняются или на разных узлах сети, им, очевидно, придется во многих случаях создавать два принципиально разных куска кода, отвечающих за это взаимодействие. Понятно, что это неудобно и хотелось бы в связи с этим иметь некоторый унифицированный механизм, который в определенной степени позволял бы абстрагироваться от расположения процессов и давал бы возможность использования одних и тех же подходов для локального и нелокального взаимодействия. Кроме того, как только мы обращаемся к сетевому взаимодействию, встает проблема многообразия сетевых протоколов и их использования. Понятно, что было бы удобно иметь какой-нибудь общий интерфейс, позволяющий пользоваться услугами различных протоколов по выбору пользователя.
Обозначенные проблемы был призван решить механизм, впервые появившийся в Берклиевском UNIX – BSD, начиная с версии 4.2, и названный сокетами (sockets). Ниже подробно рассматривается этот механизм.
Сокеты представляют собой в определенном смысле обобщение механизма каналов, но с учетом возможных особенностей, возникающих при работе в сети. Кроме того, они предоставляют по сравнению с каналами больше возможностей по передаче сообщений, например, могут поддерживать передачу экстренных сообщений вне общего потока данных. Общая схема работы с сокетами любого типа такова: каждый из взаимодействующих процессов должен на своей стороне создать и отконфигурировать сокет, после чего они должны осуществить соединение с использованием этой пары сокетов. По окончании взаимодействия сокеты уничтожаются.
Механизм сокетов чрезвычайно удобен при разработке взаимодействующих приложений, образующих систему «клиент-сервер». Клиент посылает серверу запросы на предоставление услуги, а сервер отвечает на эти запросы. Схема использования механизма сокетов для взаимодействия в рамках модели «клиент-сервер» такова. Процесс-сервер запрашивает у ОС сокет и, получив его, присваивает ему некоторое имя (адрес), которое предполагается заранее известным всем клиентам, которые захотят общаться с данным сервером. После этого сервер переходит в режим ожидания и обработки запросов от клиентов. Клиент, со своей стороны, тоже создает сокет и запрашивает соединение своего сокета с сокетом сервера, имеющим известное ему имя (адрес). После того, как соединение будет установлено, клиент и сервер могут обмениваться данными через соединенную пару сокетов. Ниже мы подробно рассмотрим функции, выполняющие все необходимые действия с сокетами, и напишем пример небольшой серверной и клиентской программы, использующих сокеты.
- Конспект по курсу лекций Операционные системы
- Структура вычислительной системы
- Аппаратный уровень вычислительной системы
- Системы программирования
- Модель организации прерываний с использованием регистра «слово состояние процессора»
- 3.6.1.1 Устройство последовательного доступа
- Организация управления внешними устройствами
- Иерархия памяти
- Аппаратная поддержка ос и систем программирования
- Некоторые проблемы
- 1. Вложенные обращения к подпрограммам
- 2. Накладные расходы при смене обрабатываемой программы:
- 4. Фрагментация памяти
- 4.2.1 Регистровые окна ( register window )
- Системный стек
- Виртуальная память.
- Базирование адресов.
- Страничная память.
- Многомашинные, многопроцессорные ассоциации.
- Терминальные комплексы
- Компьютерные сети.
- Семейство протоколов tcp/ip
- Ip адрес представляется последовательностью четырех байтов. В адресе кодируется уникальный номер сети, а также номер компьютера (сетевого устройства в сети).
- Транспортный уровень
- Уровень прикладных программ
- Сетевые, распределенные ос
- Операционные системы Основные понятия
- Структура ос.
- Модельная ос
- Жизненный цикл процесса
- Типы операционных систем
- Системы разделения времени
- Управление внешними устройствами. Архитектура.
- Программное управление внешними устройствами
- Буферизация обмена
- Планирование дисковых обменов
- Raid системы.
- Файлы устройств, драйверы
- Управление оперативной памятью
- Двухуровневая организация
- Структурная организация файлов
- Атрибуты файла
- Типовые программные интерфейсы работы с файлами
- Подходы в практической реализации файловой системы Структура «системного» диска
- Модели реализации файлов Непрерывные файлы
- Файлы, имеющие организацию связанного списка.
- Индексные узлы (дескрипторы)
- Модели организации каталогов
- Варианты соответствия: имя файла – содержимое файла
- Координация использования пространства внешней памяти
- Учет свободных блоков файловой системы Связный список свободных блоков
- Использование битового массива
- Организация фс Unix
- Логическая структура каталогов
- Внутренняя организация фс Модель версии System V Структура фс
- Работа с массивами номеров свободных блоков
- Работа с массивом свободных ид
- Индексные дескрипторы
- Адресация блоков файла
- Файл каталог
- Установление связей
- Недостатки фс модели версии System V
- Модель версии ffs bsd
- Стратегии размещения
- Внутренняя организация блоков
- Структура каталога ffs
- Понятие «процесс».
- Процессы в ос Unix Системно-ориентированное определение процесса
- Базовые средства организации и управления процессами
- Семейство системных вызовов exec()
- Использование схемы fork-exec
- Формирование процессов 0 и 1
- . Планирование Основные задачи планирования
- Планирование очереди процессов на начало обработки
- Кванты постоянной длины.
- Кванты переменной длины
- Класс подходов, использующих линейно возрастающий приоритет.
- Разновидности круговорота.
- Смешанные алгоритмы планирования
- Планирование в системах реального времени
- Общие критерии для сравнения алгоритмов планирования
- Планирование в ос unix
- Планирование в Windows nt.
- Планирование свопинга в ос Unix
- Взаимодействие процессов: синхронизация, тупики Параллельные процессы
- Проблемы организации взаимного исключения
- Тупики (deadlocks)
- Способы реализации взаимного исключения
- Семафоры Дейкстры
- Мониторы
- Обмен сообщениями
- Классические задачи синхронизации процессов
- Задача «читателей и писателей»
- Задача о «спящем парикмахере»
- Реализация взаимодействия процессов
- Сигналы
- Системный вызов kill()
- Системный вызов signal()
- Пример 1.
- Пример 2.
- 5 Пример. Программа “Будильник”.
- Пример. Двухпроцессный вариант программы “Будильник”.
- Пример. Использование канала.
- Пример. Схема взаимодействия процессов с использованием канала.
- Пример. Реализация конвейера.
- Пример. Совместное использование сигналов и каналов – «пинг-понг».
- Именованные каналы. Особенность именованных каналов в ос Unix.
- Пример. «Клиент-сервер».
- Межпроцессное взаимодействие, проводимое по модели «главный-подчинённый».
- Системный вызов ptrace()
- Общая схема трассировки процессов
- Пример. Использование трассировки.
- Система межпроцессного взаимодействия ipc.
- Очередь сообщений
- Системный вызов msgget()
- Функция msgsnd()
- Функция msgrcv()
- Функция msgctl()
- Пример. Использование очереди сообщений.
- Пример. Очередь сообщений. Модель «клиент-сервер».
- Разделяемая память.
- Пример. Работа с общей памятью в рамках одного процесса.
- Семафоры
- Пример. Использование разделяемой памяти и семафоров.
- 1Й процесс:
- 2Й процесс:
- Механизм сокетов
- Типы сокетов.
- Функция создания сокета
- Запрос на соединение
- Прослушивание сокета
- Подтверждение соединения
- Прием и передача данных
- Закрытие сокета
- Пример. Работа с локальными сокетами
- Пример работы с сокетами в рамках сети.