Linux & C: Как установить приоритет чтения файлов в многопроцессорной программе? - PullRequest
6 голосов
/ 06 февраля 2009

Это для задания, над которым я работаю, и НЕТ, я не ищу, чтобы вы просто дали мне ответ. Мне просто нужно, чтобы кто-то указывал мне правильное направление, может быть, с помощью строки или двух примеров кода.

Мне нужно выяснить, как установить приоритет операции чтения файла из моей программы. К вопросу:

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

Единственный способ, которым я могу думать об этом (прямо сейчас, в любом случае), - это увеличивать счетчик каждый раз, когда я создаю сообщение, и делать что-то вроде sched_yield после того, как счетчик достигнет заданного значения для назначенного приоритета этого процесса , Скорее всего, это ужасный, ужасный подход, но это все, о чем я могу думать в данный момент. Назначение больше относится к очередям сообщений, чем к чему-либо еще, но мы все равно должны иметь приоритет передачи данных.

Любая помощь / руководство приветствуется:)

Ответы [ 3 ]

6 голосов
/ 06 февраля 2009

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

2 голосов
/ 06 февраля 2009

До недавнего времени в Linux не было приоритетов ввода-вывода. Теперь есть ionice. Но я сомневаюсь, что вы должны использовать это в своем назначении.

1 голос
/ 06 февраля 2009

Вы уверены, что ваше назначение говорит о файлах, а не об очередях сообщений System V?

Прочитайте справочные страницы для:

   msgctl(2),    msgget(2),    msgrcv(2),    msgsnd(2),   capabilities(7),
   mq_overview(7), svipc(7)

Хотя я думаю, что вы можете использовать файл в качестве ключа для создания очереди сообщений, чтобы у нескольких процессов был способ сближения через очередь сообщений, сама очередь сообщений Sys V не является файлом.

Просто интересно, потому что вы конкретно упоминаете «очереди сообщений» и говорите о «приоритетах», которые, возможно, могут отображаться в поле msgtyp, например. msgsnd и msgrcv, хотя трудно сказать, какой информацией вы дали, о чем на самом деле это назначение.

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