ISSN 2305-5626. Вестник МГТУ им. Н.Э. Баумана: электронное издание. 2013
5
Таблица 1
Переходы между состояниями сокета
Исходное
состояние
Конечное
состояние
Событие
Условие
Нет данных
Нет данных
select( )
Сокет не готов для
неблокирующего
чтения
Нет данных
Ожидание
чтения
select( )
Сокет готов для
неблокирующего
чтения
Ожидание
чтения
Нет данных
read( )
Ожидание
чтения
Заблокирован
до чтения
select( )
В списке отслежива-
емых сокетов для
чтения нет данного
сокета
Заблокирован
до чтения
Заблокирован
до чтения
select( )
Заблокирован
до чтения
Нет данных
read( )
При выполнении функции записи аналогичные состояния вы-
делить нельзя, поскольку если сокет готов для записи, то делать ее
не обязательно, а единственная ошибка, определяемая при записи
(см. рис. 1), не требует информации о возникавших ранее собы-
тиях.
Другим объектом ядра ОС, важным для разрабатываемого мето-
да, является поток. Для разрабатываемого метода он имеет следую-
щие состояния: «Без блокирования», «Потенциальное блокирова-
ние», «Происходило блокирование».
Поток начинает работу в состоянии «Без блокирования». При вы-
полнении операции, которая могла заблокировать поток, но не сделала
этого, он изменяет свое состояние на «Потенциальное блокирование».
Если поток будет переведен в состояние сна планировщиком задач, то
его состояние изменится на «Происходило блокирование».
Для системного вызова мультиплексирования блокирование про-
цесса является нормальным действием, поэтому при вызове
select( )
процесс перейдет в состояние «Без блокирования».
Диаграмма переходов между состояниями изображена на рис. 4.
Для хранения требуемой методу информации можно добавить нуж-
ные поля в структуры ядра Linux [4]. На рис. 5 показаны необходи-
мые изменения структур данных системы.
1,2,3,4 6,7,8,9,10,11,12,13,14,...15