Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: как работает select()?  (Прочитано 2235 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Светочка

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
как работает select()?
« : 04 Мая 2012, 07:01:13 »
Такая проблема, в лабораторной работе необходимо рассказать о функции
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *utimeout);

Возник вопрос: "Как функция получает информацию о том, что в потоке что-нибудь появилось?"

К чему я пришла:
-внутри select есть функция pool, которая мониторит поток.
За отведенное время poll поочерёдно обходит по запрошенным файловым дескрипторам, получает сведения полные сведения об открытом файле через файловый дескриптор с помощью вызова функции соответствующей функции:

struct file {

...

struct file_operations *f_op;

...

}

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

struct file_operations {

...

unsigned int (*poll) (struct file *, struct poll_table_struct *);

...

};

Эту функцию должен реализовать драйвер того символьного устройства, с которого будет производится, например, чтение каких-то данных (в моем случае это чтение данных с терминала, то таким “виртуальным” символьным устройством будет являться bash).

Обход происходит до тех пор, пока не закончится отведенное на опрос файлов время, или же пока не произошло какое-либо запрошенное событие.

Но преподаватель не принимает такой ответ, говорит, типа, это все верно, но все таки, из=-за чего срабатывает pool? я отвечаю, что срабатывает драйвер устройства. Он говорит, что это не совсем правда и приводит в пример чтение файла. Я, конечно, не совсем поняла, что такое устройство, но, как мне кажется, файл устройством не является...

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: как работает select()?
« Ответ #1 : 05 Мая 2012, 07:17:51 »
Очень странное понимание сути вещей
Полное описание займёт много места. Лучше уж читать книжку А. Таненбаума "Операционные системы".

1) select и poll это разные системные вызовы. со своими ограничениями. не факт что один реализован через другой. кроме того есть ещё epoll у него гораздо больше возможностей и гораздо меньше ограничений.

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

3) события прямо или косвенно генерируются прерываниями от физических устройств.

Оффлайн yorik1984

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 1592
  • Кто не хочет, ищет причины
    • Просмотр профиля

 

Страница сгенерирована за 0.069 секунд. Запросов: 25.