cacheflush(2)

НАИМЕНОВАНИЕ
cacheflush - выталкивает содержимое кэша инструкций и/или данных

БИБЛИОТЕКА
Стандартная библиотека языка C (libc, -lc)

ОБЗОР
#include <sys/cachectl.h>

int cacheflush(int nbytes;
               void addr[nbytes], int nbytes, int cache);

Note: On some architectures, there is no glibc wrapper for this system call; see VERSIONS.

ОПИСАНИЕ
cacheflush() выталкивает содержимое указанного кэша(ей) обратно в пользовательское адресное пространство в диапазоне с addr по (addr+nbytes-1). Параметр cache может принимать одно из значений:

ICACHE
    Выталкивает кэш инструкций.

DCACHE
    Записать обратно в память и объявить недействительными задетые достоверные строки кэша.

BCACHE
    Тоже что и (ICACHE|DCACHE).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
cacheflush() returns 0 on success. On error, it returns -1 and sets errno to indicate the error.

ОШИБКИ

EFAULT
    Некоторая часть или весь диапазон адресов с addr по (addr+nbytes-1) недоступен.

EINVAL
    Значение cache не равно ICACHE, DCACHE или BCACHE (но смотрите ДЕФЕКТЫ).

ВЕРСИИ
Вызов cacheflush() не должен использоваться в переносимых программах. В Linux, этот вызов сперва появился на архитектуре MIPS, но в настоящее время Linux предоставляет системный вызов cacheflush() и на других архитектурах, но с другими аргументами.

  Варианты, зависящие от архитектуры
glibc provides a wrapper for this system call, with the prototype shown in SYNOPSIS, for the following architectures: ARC, CSKY, MIPS, and NIOS2.

В некоторых других архитектурах Linux предоставляет этот системный вызов с другими аргументами:

M68K:
    int cacheflush(unsigned long addr, int scope, int cache,
                   unsigned long size);

SH:
    int cacheflush(unsigned long addr, unsigned long size, int op);

NDS32:
    int cacheflush(unsigned int start, unsigned int end, int cache);

On the above architectures, glibc does not provide a wrapper for this system call; call it using syscall(2).

  альтернатива GCC
Unless you need the finer grained control that this system call provides, you probably want to use the GCC built-in function __builtin___clear_cache(), which provides a portable interface across platforms supported by GCC and compatible compilers:

    void __builtin___clear_cache(void *begin, void *end);

На платформах, не требующих очистки кэша инструкций, __builtin___clear_cache() не имеет никакого эффекта.

Примечание: В некоторых GCC-совместимых компиляторах прототип этой встроенной функции использует char * вместо void * для параметров.

СТАНДАРТЫ
В прошлом, данный системный вызов был доступен во всех вариантах UNIX на MIPS включая RISC/os, IRIX, Ultrix, NetBSD, OpenBSD и FreeBSD (и также в некоторых ОС не-UNIX MIPS), поэтому существование этого вызова в ОС на MIPS является стандартом де-факто.

ОШИБКИ
Linux kernels older than Linux 2.6.11 ignore the addr and nbytes arguments, making this function fairly expensive. Therefore, the whole cache is always flushed.

Данный вызов всегда поступает так, как если бы в аргументе cache передавалось значение BCACHE, и не выполняет проверку ошибочности значения cache.

ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Katrin Kutepova <blackkatelv@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков (<debian-l10n-russian@lists.debian.org>).