Системные вызовы работы с сокетами в ОС UNIX

Структура адреса сокета

Существует два семейства адресов сокетов:

- семейство адресов UNIX (домен UNIX), используется для межпроцессного взаимодействия на одном компьютере;

- семейство адресов Internet (домен Internet) используется для межпроцессного взаимодействия в сети.

Структура адреса сокета домена Internet:

struct sockaddr in{

u_char sin_len; /* длина структуры */

u_char sin_family; /* константа AF_INET */

u_short sin_port; /* номер порта */

struct in_addr sin_addr; /* IP-адрес */

char sin_zero[8]; /* резерв */

}

Получить дескриптор сокета (создать сокет)

Сокет создается при помощи системного вызова socket.

#include <sys/types.h>

#include <sys/socket.h>

int socket(int domain,int type,int protocol);

Здесь domain – (IF_INET для домена Интернет, AF_UNIX Для домена UNIX), type – тип обслуживания (SOCK_STREAM для TCP, SOCK_DGRAM для UDP), protocol – номер применяемого протокола или 0. Нулевое значение параметра указывает, что должен применяться протокол, предусмотренный по умолчанию для данного семейства адресов и типа обслуживания. Функция socket в случае успешного выполнения возвращает дескриптор сокета, в случае ошибки возвращает -1.

Пример: sd = socket(AF_INET,SOCK_STREAM,0);

Указать адрес локальной оконечной точки

Функция bind привязывает локальный сокет к адресу, или указывает адрес локальной оконечной точки.

#include <sys/types.h>

#include <sys/socket.h>

int bind(int sockfd, struct sockaddr *lockaddr, int addrlen);

Здесь sockfd – дескриптор сокета, созданный в результате вызова функции socket; lockaddr – указатель на структуру адреса сокета, в которой указаны IP-адрес и номер порта; addrlen – размер структуры адреса сокета. Функция bind возвращает 0 в случае успешного выполнения и -1 при ошибке.

Функция "привязывает" сокет к локальному IP-адресу и локальному порту.

Перевод сокета в пассивный режим

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

#include <sys/socket.h>

int listen(int sd,int backlog);

Здесь sd – дескриптор сокета; backlog – максимальная длина очереди для запросов на установление соединения. Функция listen возвращает 0 в случае успешного выполнения и -1 при ошибке.

Принять соединение с сокетом

Функция accept используется процессом-сервером.

#include <sys/types.h>

#include <sys/socket.h>

int accept(int sd, struct sockaddr *addr,int *addrlen);

Здесь sd – дескриптор сокета; addr – указатель на структуру, в которую функция accept записывает IP-адрес и номер порта протокола удаленного компьютера; addrlen – указатель на целое число, в которое перед вызовом функции записывается размер структуры *addr, а после возврата из функции содержится число байтов, записанных фуекцией в эту структуру. Функция accept возвращает неотрицательный дескриптор сокета в случае успешного выполнения и -1 при ошибке.

Функция accept 1) извлекает из очереди сокета с дескрипторм sd следующий запрос на установление соединения; 2) создает новый сокет для нового запроса и возвращает дескриптор этого сокета. Этот сокет используется только для нового соединения. Старый сокет служит для приема новых запросов на соединения. Старый сокет sd называют прослушивающим, новый сокет – присоединенным.

Установить соединение с сервером.

Функция connect соединение с сервером.

#include <sys/types.h>

#include <sys/socket.h>

int connect(int sd, struct sockaddr *addr, int addrlen);

Здесь sd – дескриптор сокета; addr – указатель на структуру, в которую записан адрес оконечной точки, соответствующей удаленному компьютеру; addrlen – длина второго параметра. Функция connect возвращает 0 в случае успешного выполнения и -1 при ошибке.

Функция connect используется клиентом. Она инициирует соединение TCP и возвращает код возврата, говорящий об успехе или неуспехе.

Чтение данных из сокета и запись данных в сокет

Чтение и запись данных могут производиться как при помощи универсальных функций (read, write), так и при помощи специализированных функций работы с сокетами (send, recv для сокетов TCP и sendto, recvfrom для сокетов UDP).

Операции клиента и сервера

На рис. 13.2 показаны операции клиента и сервера при взаимодействии с установлением соединения.

Системные вызовы работы с сокетами в ОС UNIX - student2.ru

Вопросы для самоконтроля

1. Что такое IP-адрес?

2. Как адресуются службы в сети?

3. Что представляет собой порт?

4. Дайте определение понятиям "протокол", "стек коммуникационных протоколов".

5. Что такое сокет?

6. Могут ли процессы, работающие на одном и том же компьютере, взаимодействовать при помощи сокетов?

Раздел 4. Планирование

Тема 14. Краткосрочное планирование

Основные понятия

В многозадачных системах ОС должна выполнять планирование процессов. Существует три вида планирования:

Долгосрочное планирование – решение о добавлении процесса в пул выполняемых процессов.

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

Краткосрочное планирование – решение о том, какой из доступных процессов будет выполняться процессором.

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

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

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

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

14.2. Критерии краткосрочного планирования.

Основная цель краткосрочного планирования состоит в распределении процессорного времени таким образом, чтобы оптимизировать один или несколько критериев (аспектов поведения системы). Основные из этих критериев перечислены ниже.

Время оборота – интервал времени поступлением процесса и его завершением. Включает время выполнения и ожидания.

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

Предсказуемость – данное задание должно выполняться примерно за одно и то же время независимо от загрузки системы.

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

Использование процессора – процент времени, в течение которого процессор занят.

14.3. Стратегии краткосрочного планирования.

Наши рекомендации