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

Асинхронный ввод/вывод, рекомендательные интерфейсы

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >

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

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

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

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

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

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

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

#include <fcntl.h>
int posix_fadvise (int fd,
                   off_t offset,
                   size_t len,
                   int advice);

#include <fcntl.h>
int posix_fallocate (int fd,
                     off_t offset,
                     size_t len);

#include <sys/mman.h>
int posix_madvise (void *addr,
                   size_t len,
                   int advice);

#include <stdlib.h>
int posix_memalign (void **memptr,
                    size_t alignment,
                    size_t size);
Листинг 7.9. Описание функций рекомендательных интерфейсов.

Функция posix_fadvise() информирует реализацию об ожидаемом поведении приложения по отношению к части файла, ассоциированного с открытым дескриптором fd, которая начинается с позиции offset и имеет длину len байт (если значение аргумента len равно нулю, рекомендация распространяется до конца файла).

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

POSIX_FADV_NORMAL

Подразумеваемое поведение – отсутствие рекомендаций.

POSIX_FADV_SEQUENTIAL

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

POSIX_FADV_RANDOM

Специфицирует случайный доступ.

POSIX_FADV_WILLNEED

Предполагается, что данные из указанной части файла скоро понадобятся.

POSIX_FADV_DONTNEED

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

POSIX_FADV_NOREUSE

Специфицирует однократный доступ.

Нормальный результат функции posix_fadvise() равен нулю; при обнаружении ошибки возвращается ее номер.

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >