Опубликован: 06.12.2004 | Доступ: свободный | Студентов: 1180 / 143 | Оценка: 4.76 / 4.29 | Длительность: 20:58:00
ISBN: 978-5-9556-0021-5
Лекция 10:

Заключение

Приоритетное планирование

У каждого потока управления ( процесса ) в каждый момент времени есть определенный приоритет. Равноприоритетные потоки управления, готовые к выполнению, объединяются в списки. Эти списки упорядочены, от первого элемента (головы) к последнему (хвосту).

Цель политики планирования состоит в определении допустимых операций над множеством списков (например, перемещение потоков между списками и внутри них).

Реализация, удовлетворяющая стандарту POSIX, должна выбирать для выполнения процесс ( поток управления ), находящийся в голове наиболее приоритетного списка, независимо от ассоциированной политики планирования.

Политика SCHED_FIFO ( планирование по очереди) предписывает упорядочивать потоки управления в пределах каждого списка по длительности ожидания.

Чтобы сделать планирование более справедливым по отношению к равноприоритетным процессам, можно воспользоваться политикой SCHED_RR (циклическое планирование ). Она эквивалентна SCHED_FIFO с одним исключением: когда время, в течение которого поток управления занимал процессор, становится больше или равным результату функции sched_rr_get_interval(), он перемещается в хвост соответствующего списка, а для выполнения выбирается головной поток. Таким образом, ни один из равноприоритетных потоков не сможет монополизировать процессор.

По сравнению с SCHED_FIFO и SCHED_RR, политика SCHED_SPORADIC (спорадическое планирование ) представляется гораздо более сложной. Она позволяет резервировать процессорное время для выполнения непериодических действий.

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

Стандарт POSIX-2001 предусматривает следующие функции управления планированием процессов: sched_getscheduler() (опрос политики планирования процесса ), sched_getparam() (опрос параметров планирования процесса ), sched_setscheduler() (установка политики и параметров планирования процесса ) и sched_setparam() (установка параметров планирования процесса ).

Стандарт POSIX-2001 предоставляет также средства для опроса характеристик политик планирования – минимального ( sched_get_priority_min() ) и максимального ( sched_get_priority_max() ) среди допустимых приоритетов, а также величины кванта выделяемого процессорного времени для политики циклического планирования ( sched_rr_get_interval() ).

Функция sched_yield() позволяет вызывающему потоку управления добровольно уступить процессор.

Асинхронный ввод/вывод

Средства асинхронного ввода/вывода позволяют прикладным процессам ставить в очередь команды ввода/вывода данных, продолжать работу параллельно с операциями передачи данных и получать асинхронные уведомления о завершении выполнения этих команд.

После завершения асинхронной операции ввода/вывода приложению может быть доставлен сигнал.

Жизненный цикл операции асинхронного ввода/вывода включает два этапа:

  • постановка запроса в очередь;
  • выполнение запроса, осуществление ввода/вывода.

Основными операциями асинхронного ввода/вывода являются чтение ( aio_read() ) и запись ( aio_write() ) данных.

Функция lio_listio() позволяет за один вызов поставить в очередь список запросов на чтение и/или запись данных.

Для выяснения статуса операций асинхронного ввода/вывода служат функции aio_return() и aio_error().

Ожидающие обработки запросы на асинхронный ввод/вывод можно аннулировать, воспользовавшись функцией aio_cancel().

Согласно стандарту POSIX-2001, списком можно не только инициировать запросы на асинхронный ввод/вывод, но и ожидать их завершения. Для этого служит функция aio_suspend().

Функции sync(), fsync(), fdatasync(), aio_fsync() предназначены для согласования состояния буферизованных и хранимых в долговременной памяти данных, обеспечения целостности данных и файлов.

Рекомендательные интерфейсы

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

  • последовательный доступ;
  • кэширование;
  • передача данных;
  • предварительное резервирование долговременной и оперативной памяти.

Описанные возможности реализуют функции posix_fadvise(), posix_fallocate(), posix_madvise() и posix_memalign().

Ожидаемое поведение может специфицироваться как:

  • отсутствие рекомендаций;
  • последовательный доступ;
  • случайный доступ;
  • доступ в ближайшее время;
  • отсутствие доступа в ближайшее время;
  • однократный доступ.

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

POSIX_REC_MIN_XFER_SIZE

Минимальное рекомендуемое число передаваемых байт при обмене данными с файлами. Рекомендуется также, чтобы и смещение передаваемой порции данных от начала файла было кратным POSIX_REC_MIN_XFER_SIZE.

POSIX_REC_MAX_XFER_SIZE

Максимальное рекомендуемое число передаваемых байт при обмене данными с файлами.

POSIX_REC_XFER_ALIGN

Рекомендуемое значение для выравнивания границы буфера обмена данными с файлами.