Операционная система UNIX
Операционная система UNIX читать книгу онлайн
Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Помимо указанных полей, структура
queue
Передача данных вверх или вниз по потоку осуществляется с помощью функций модуля, указатели на которые хранятся в структуре
qinit
<i>xx</i>put()
<i>xx</i>service()
<i>xx</i>open()
<i>xx</i>close()
(*qi_putp)()
(*qi_srvp)()
(*qi_qopen)()
(*qi_close)()
<i>xx</i>open()
<i>xx</i>close()
<i>xx</i>put()
<i>xx</i>put()
<i>xx</i>service()
Модуль должен иметь функцию
<i>xx</i>put()
<i>xx</i>service()
<i>xx</i>put()
<i>xx</i>service()
Оставшиеся поля структуры
qinit
module_info | В этой структуре хранятся базовые значения таких параметров, как ватерлинии, размер сообщений и т.д. Некоторые из этих параметров также находятся в структуре queue. Это дает возможность динамически изменять их, сохраняя при этом базовые значения. |
module_stat | Эта структура непосредственно не используется подсистемой STREAMS. Однако модуль имеет возможность осуществлять сбор разнообразной статистики своего участка потока с помощью полей этой структуры. |
Сообщения
В подсистеме STREAMS все данные передаются в виде сообщений. С помощью сообщений передаются данные от приложений к драйверу и обратно. Сообщения используются для взаимодействия модулей между собой. Модули могут также генерировать сообщения для уведомления прикладного процесса или друг друга о возникновении ошибок или непредвиденных ситуаций. Таким образом, сообщения являются единственным способом передачи информации между различными компонентами потока и потому занимают ключевое место в подсистеме STREAMS.
Сообщение описывается двумя структурами данных: заголовком сообщения
msgb
datab
Заголовок сообщения
msgb
b_next b_prev | Используются для формирования связанного списка сообщений и соответственно адресуют следующее и предыдущее сообщение очереди |
b_cont | Указывает на продолжение сообщения и используется для связывания различных частей одного сообщения |
b_datap | Указатель на заголовок блока данных |
b_rptr b_wptr | Указатели, определяющие расположение (начало и конец) данных в буфере данных |
b_cont | Содержит ссылку на следующую структуру msgb |
Заголовок блока данных
datab
db_base | Адрес начала буфера |
db_lim | Адрес ячейки памяти, следующей непосредственно за буфером. Таким образом, размер буфера равен db_lim - db_base |
db_type | Тип сообщения |
db_ref | Число заголовков сообщения, адресующих этот блок |
Использование этих структур данных для формирования очереди сообщений и сообщений, состоящих из нескольких частей, показано на рис. 5.17.
Рис. 5.17. Сообщения STREAMS
Поле
b_cont
b_cont
Рис. 5.18. Инкапсуляция данных с использованием составных сообщений
Поле
db_ref