Андрей Робачевский - Операционная система UNIX

Тут можно читать онлайн Андрей Робачевский - Операционная система UNIX - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство BHV - Санкт-Петербург, год 1997. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Операционная система UNIX
  • Автор:
  • Жанр:
  • Издательство:
    BHV - Санкт-Петербург
  • Год:
    1997
  • Город:
    Санкт-Петербург
  • ISBN:
    5-7791-0057-8
  • Рейтинг:
    4.63/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Андрей Робачевский - Операционная система UNIX краткое содержание

Операционная система UNIX - описание и краткое содержание, автор Андрей Робачевский, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).

Для широкого круга пользователей

Операционная система UNIX - читать онлайн бесплатно полную версию (весь текст целиком)

Операционная система UNIX - читать книгу онлайн бесплатно, автор Андрей Робачевский
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать
Значение поля fields Размещаемые и инициализируемые поля
T_ALL Все необходимые поля
T_ADDR Поле addrв структурах t_bind, t_call, t_unitdata, t_uderr
T_OPT Поле optв структурах t_call, t_unitdata, t_uderr, t_optmgmt
T_UDATA Поле udataв структурах t_call, t_unitdata, t_discon

Отметим одну особенность. Фактический размер буфера и, соответственно, структуры netbufзависят от значения поля maxlenэтой структуры. В свою очередь, этот параметр зависит от конкретного поставщика транспортных услуг — именно он определяет максимальный размер адреса, опций и прикладных данных. Чуть позже мы увидим, что эта информация ассоциирована с транспортным узлом и может быть получена после его создания с помощью функции t_open(3N) . Поэтому для определения фактического размера размещаемых структур в функции t_аlloc(3N) необходим аргумент fd, являющийся дескриптором транспортного узла, который возвращается процессу функцией t_open(3N) .

Перейдем к основным функциям TLI.

Как видно из рис. 6.18 и 6.19, в качестве первого этапа создания коммуникационного узла используется функция t_open(3N) . Как и системный вызов open(2) , она возвращает дескриптор, который в дальнейшем адресует узел в функциях TLI. Функция имеет вид:

#include

#include

int t_open(const char *path, int oflags, struct t_info *info);

Аргумент pathявляется именем специального файла устройства, являющегося поставщиком транспортных услуг, например, /dev/tcpили /dev/udp. Аргумент oflagsопределяет флаги открытия файла и соответствует аналогичному аргументу системного вызова open(2) . Приложение может получить информацию о поставщике транспортных услуг в структуре info, имеющей следующие поля:

addr Определяет максимальный размер адреса транспортного протокола. Значение -1 говорит, что размер не ограничен, -2 означает, что прикладная программа не имеет доступа к адресам протокола. Протокол TCP устанавливает размер этого адреса (адрес порта) равным 16.
options Определяет размер опций для данного протокола. Значение -1 свидетельствует, что размер не ограничен, -2 означает, что прикладная программа не имеет возможности устанавливать опции протокола.
tsdu Определяет максимальный размер пакета данных протокола (Transport Service Data Unit, TSDU). Нулевое значение означает, что протокол не поддерживает пакетную передачу (т.е. не сохраняет границы записей). Значение -1 свидетельствует, что размер не ограничен, -2 означает, что передача обычных данных не поддерживается. Поскольку протокол TCP обеспечивает передачу неструктурированного потока данных, значение tsduдля него равно 0. Напротив, UDP поддерживает пакетную передачу.
etsdu Определяет максимальный размер пакета экстренных данных протокола (Expedited Transport Service Data Unit, ETSDU). Нулевое значение означает, что протокол не поддерживает пакетную передачу (т.е. не сохраняет границы записей). Значение -1 свидетельствует, что размер не ограничен, -2 означает, что передача экстренных данных не поддерживается. TCP обеспечивает такую поддержку, а UDP — нет.
connect Некоторые протоколы допускают передачу прикладных данных вместе с запросом на соединение. Поле connect определяет максимальный размер таких данных. Значение -1 свидетельствует, что размер не ограничен, -2 означает, что данная возможность не поддерживается. И TCP и UDP не поддерживают этой возможности.
discon Определяет то же, что и connect, но при запросе на прекращение соединения. И TCP и UDP не поддерживают этой возможности.
servtype Определяет тип транспортных услуг, предоставляемых протоколом. Значение T_COTSозначает передачу с предварительным установлением соединения, T_COTS_ORD— упорядоченную передачу с предварительным установлением соединения, T_CLTS— передачу без предварительного установления соединения. Протокол TCP обеспечивает услугу T_COTS_ORD, a UDP — T_CLTS.

Прежде чем передача данных будет возможна, транспортному узлу должен быть присвоен адрес. Эта фаза называется операцией связывания и мы уже сталкивались с ней при разговоре о сокетах в главе 3 и при обсуждении сетевой поддержки в BSD UNIX ранее в этой главе. В рассмотренных случаях связывание выполнял вызов bind(2) . В TLI для этого служит функция t_bind(3N) , имеющая вид:

#include

int t_bind(int fd, const struct t_bind *req,

struct t_bind *ret);

Аргумент fdадресует коммуникационный узел. Аргумент reqпозволяет программе явно указать требуемый адрес, а через аргумент retвозвращается значение, установленное протоколом.

Два последних аргумента описываются структурой t_bind, имеющей следующие поля:

struct netbuf addr Адрес
unsigned qlen Максимальное число запросов на установление связи, которые могут ожидать обработки. Имеет смысл только для протоколов с предварительным установлением соединения

Рассмотрим три возможных формата аргумента req:

req == NULL Позволяет поставщику транспортных услуг самому выбрать подходящий адрес
req != NULL req->addr.len == 0 Позволяет поставщику транспортных услуг самому брать подходящий адрес, но определяет максимальное число запросов на установление связи, которые могут ожидать обработки
req != NULL req->addr.len > 0 Явно указывает требуемый адрес и максимальное число запросов на установление связи, которые могут ожидать обработки

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

Для протоколов с предварительным установлением соединения программе-клиенту необходимо использовать функцию t_connect(3N) , отправляющую запрос на создание соединения с удаленным транспортным узлом. Функция t_connect(3N) имеет вид:

#include

int t_connect(int fd, const struct t_call* sndcall,

struct t_call *rcvcall);

Аргумент sndcallсодержит информацию, необходимую поставщику транспортных услуг для создания виртуального канала. Формат этой информации описывается структурой t_call, имеющей следующие поля:

struct netbuf addr Адрес удаленного транспортного узла
struct netbuf opt Требуемые опции протокола
struct netbuf udata Прикладные данные, отправляемые вместе с управляющей информацией (запрос на установление соединения или подтверждение)
int sequence В данном случае не имеет смысла

Через аргумент revcallпрограмме возвращается информация о виртуальном канале после его создания: адрес удаленного узла, опции и прикладные данные, переданные удаленным узлом. Как уже отмечалось, ни TCP, ни UDP не позволяют передавать данные вместе с управляющей информацией. Программа может установить значение rcvcallравным NULL, если информация о канале ее не интересует.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Андрей Робачевский читать все книги автора по порядку

Андрей Робачевский - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Операционная система UNIX отзывы


Отзывы читателей о книге Операционная система UNIX, автор: Андрей Робачевский. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x