Scroll to navigation

CACHEFLUSH(2) Руководство программиста Linux CACHEFLUSH(2)

ИМЯ

cacheflush - выталкивает содержимое кэша инструкций и/или данных

СИНТАКСИС

#include <asm/cachectl.h>
int cacheflush(char *addr, int nbytes, int cache);

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

ОПИСАНИЕ

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

Выталкивает кэш инструкций.
Записать обратно в память и объявить недействительными задетые достоверные строки кэша.
Тоже что и (ICACHE|DCACHE).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном завершении cacheflush() возвращает 0 или -1 при ошибке. Если обнаружены ошибки, то errno будет содержать номер ошибки.

ОШИБКИ

Некоторая часть или весь диапазон адресов с addr по (addr+nbytes-1) недоступен.
Значение cache не равно ICACHE, DCACHE или BCACHE (но смотрите ДЕФЕКТЫ).

СООТВЕТСТВИЕ СТАНДАРТАМ

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

Предостережение

Вызов 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.

On some other architectures, Linux provides this system call, with different arguments:

int cacheflush(unsigned long addr, int scope, int cache,
               unsigned long len);
int cacheflush(unsigned long addr, unsigned long len, int op);
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 alternative

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);

On platforms that don't require instruction cache flushes, __builtin___clear_cache() has no effect.

Note: On some GCC-compatible compilers, the prototype for this built-in function uses char * instead of void * for the parameters.

ДЕФЕКТЫ

Ядра Linux до версии 2.6.11 игнорируют аргументы addr и nbytes, что делает этот вызов относительно дорогим — всегда очищается весь кэш.

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

ЗАМЕЧАНИЯ

Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан 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 версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

21 декабря 2020 г. Linux