
- •2 Теоретические вопросы кузнецов д.Б
- •1. Основные команды oc unix.
- •2.Команды для работы с текстовыми файлами
- •3.Тестирующие команды и работы с переменными
- •2. Поддержка многонитевого программирования.
- •3. Сокеты. Системные вызовы для работы с сокетами. Установка tcp-сединения.
- •4. Управление вводом-выводом, драйверы. Алгоритм обработки прерываний обращений к устройствам.
- •5. Диспетчеризация процессов. Алгоритмы планирования.
- •6. Взаимодействие процессов. Сигналы, именованные и неименованные каналы, ipc, сокеты.
- •7. Виды файловых систем. Типовые структуры каталогов в ос unix и Windows.
- •8. Средства разработки программ. Компилятор, средства разработки и отладки программ.
- •9. Системные вызовы для управления файлами. Открытие, чтение, запись, позиционирование, управление дескрипторами.
- •10. Назначение, функции, классификация операционных систем.
- •11. Пользовательский интерфейс операционной среды. Shell. Режимы командной строки и интерпретации программ.
- •12. Архитектура операционных систем. Понятие ядра и процесса. Состояния и контекст процесса.
- •13. Управление памятью в многозадачной операционной системе. Свопинг и подкачка по запросу.
- •14. Трансляторы. Структура компилятора. Лексический, синтаксический и семантический анализ.
- •15. Стандартный ввод-вывод. Переопределение стандартного ввода-вывода в Shell. Выполнение команд в конвеере.
3. Сокеты. Системные вызовы для работы с сокетами. Установка tcp-сединения.
Чтобы позволить на отдельно взятом компьютере многим процессам одновременно использовать коммуникационные возможности уровня TCP, протокол TCP предоставляет на каждом хост-компьютере набор адресов или портов. Вместе с адресами сетей и хост-компьютеров на коммуникационном уровне Internet они образуют сокет (socket - разъем).
Каждое соединение уникальным образом идентифицируется парой сокетов. Таким образом, любой сокет может одновременно использоваться во многих соединениях. Соотнесение портов и процессов осуществляется каждым хост- компьютером самостоятельно. Однако оказывается полезным связывать часто используемые процессы (такие как "logger" или сервис с разделением времени) с фиксированными документированными сокетами.
Этот сервис можно впоследствии использовать через известные адреса. Установка и настройка адресов портов для других процессов может включать более динамичные механизмы.
Программные гнезда (sockets) - Поддерживаемый ядром механизм, скрывающий особенности сетевой среды и позволяющий единообразно взаимодействовать процессам.
Создание сокета: sd=socket(domain, type, protocol);
domain - домен гнезда, type - тип (с виртуальным соединением или дейтаграммное), protocol - желаемый сетевой протокол, Функция возвращает дескриптор созданного сокета или ошибку.
Закрытие (уничтожение) гнезда close(sd)
Связывание ранее созданного программного гнезда с именем: bind(sd, socknm, socknlen);
sd - дескриптор ранее созданного программного гнезда socknm - адрес структуры, которая содержит имя (идентификатор) гнезда, соответствующее требованиям домена данного гнезда и используемого протокола
Запрос связи с существующим программным гнездом со стороны процесса-клиента:
connect(sd, socknm, socknlen);
смысл параметров, как у функции bind имя программного гнезда на другой стороне коммуникационного канала. У гнезда с дескриптором sd и у гнезда с именем socknm должны быть одинаковые домен и протокол. Если тип гнезда с дескриптором sd - дейтаграммный, то connect служит для информирования системы об адресе назначения пакетов, которые в дальнейшем будут посылаться с помощью функции send.
Информирования о том, что процесс-сервер планирует установление виртуальных соединений через указанное гнездо (прослушивание порта): listen(sd, qlength);
qlength - максимальная длина очереди запросов на установление соединения, которые должны буферизоваться системой, пока их не выберет процесс-сервер
Выборка процессом-сервером очередного запроса на установление соединения с указанным программным гнездом: nsd = accept(sd, address, addrlen);
sd - дескриптор существующего программного гнезда, для которого ранее была выполнена функция listen; address - массив данных, в который должна быть помещена информация, характеризующая имя программного гнезда клиента; addrlen - адрес, по которому находится длина массива address; выполнение функции приводит к установлению виртуального соединения; nsd - новый дескриптор программного гнезда, который должен использоваться при работе через данное соединение; по адресу addrlen помещается реальный размер массива данных, которые записаны по адресу address
Передача и прием данных через программные гнезда с установленным виртуальным соединением: count = send(sd, msg, length, flags);
count = recv(sd, buf, length, flags);
В send: msg указывает на буфер с данными, которые требуется послать; length - длина этого буфера; flags – параметры передачи
В recv: buf указывает на буфер, в который следует поместить принимаемые данные; length - максимальная длина этого буфера; flags – параметры приема
Немедленная ликвидация установленного соединения:
shutdown(sd, mode);
немедленно остановить коммуникации в зависимости от значения параметра mode
Установка соединения и его отмена
Соединение полностью определяется парой сокетов на своих концах. Локальный сокет может принимать участие во многих соединениях с различными чужими сокетами. Соединение можно использовать для передачи данных в обоих направлениях, иными словами, оно является "полностью дуплексным".
Протокол TCP произвольным образом связывает порты с процессами. Однако должны присутствовать общеизвестные сокеты, которые протокол TCP ассоциирует исключительно с "соответствующими им" процессами.
Соединение задается командой OPEN (открыть), сделанной с локального порта и имеющей аргументом чужой сокет. В ответ на такой запрос программа протокола TCP предоставляет имя локального соединения. По этому имени пользователь адресуется к данному соединению при последующих вызовах. Запрос OPEN указывает также, осуществляется ли соединение активным образом, или же происходит пассивное ожидание соединения извне.
Запрос на пассивное открытие соединения означает, что процесс ждет получения извне запросов на соединение, вместо того, чтобы пытаться самому установить его.
Процедура установки соединения использует флаг управления синхронизацией (SYN) и трижды обменивается сообщениями. Отмена соединения также включает обмен сегментами, несущими на этот раз управляющий флаг FIN. Пример работы с сокетами: