Scroll to navigation

cacheflush(2) System Calls Manual cacheflush(2)

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

Стандартная библиотека языка C (libc, -lc)

ОБЗОР

#include <sys/cachectl.h>
int cacheflush(void addr[.nbytes], int nbytes, int cache);

Примечание: На некоторых архитектурах нет оболочки glibc для этой системы call; см. ПРИМЕЧАНИЯ.

ОПИСАНИЕ

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

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

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

cacheflush() returns 0 on success. On error, it returns -1 and sets errno to indicate the error.

ОШИБКИ

Некоторая часть или весь диапазон адресов с 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.

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

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

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 * для параметров.

ОШИБКИ

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> и Kirill Rekhov <krekhov.dev@gmail.com>

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

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

5 февраля 2023 г. Справочные страницы Linux 6.03