cacheflush(2)

NUME
cacheflush - șterge conținutul cache-ului de instrucțiuni și/sau de date

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <sys/cachectl.h>

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

Notă: Pe unele arhitecturi, nu există o funcție de învăluire glibc pentru acest apel de sistem; a se vedea secțiunea NOTE.

DESCRIERE
cacheflush() golește conținutul cache-urilor indicate pentru adresele utilizatorului din intervalul addr până la (addr+nbytes-1). cache poate fi unul dintre următoarele:

ICACHE
    Golește memoria cache de instrucțiuni.

DCACHE
    Scrie înapoi în memorie și invalidează liniile de memorie cache valide afectate.

BCACHE
    La fel ca (ICACHE|DCACHE).

VALOAREA RETURNATĂ
În caz de succes, cacheflush() returnează 0; în caz contrar, returnează -1 și configurează errno pentru a indica eroarea.

ERORI-IEȘIRE

EFAULT
    O parte sau întregul interval de adrese de la addr la (addr+nbytes-1) nu este accesibil.

EINVAL
    cache nu este unul dintre ICACHE, DCACHE sau BCACHE (dar consultați secțiunea ERORI).

VERSIUNI
cacheflush() nu ar trebui să fie utilizat în programe destinate să fie portabile. Pe Linux, acest apel a apărut pentru prima dată pe arhitectura MIPS, dar în prezent, Linux oferă un apel de sistem cacheflush() pe alte câteva arhitecturi, dar cu argumente diferite.

  Variante specifice arhitecturii
glibc oferă o funcție de învăluire pentru acest apel de sistem, cu prototipul prezentat în secțiunea REZUMAT, pentru următoarele arhitecturi: ARC, CSKY, MIPS și NIOS2.

Pe alte arhitecturi, Linux oferă acest apel de sistem, cu argumente diferite:

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

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

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

Pe arhitecturile de mai sus, glibc nu oferă o funcție de învăluire pentru acest apel de sistem; apelați-l folosind syscall(2).

  Alternativa GCC
Cu excepția cazului în care aveți nevoie de controlul mai fin pe care îl oferă acest apel de sistem, probabil că doriți să utilizați funcția încorporată în GCC __builtin___clear_cache(), care oferă o interfață portabilă pe toate platformele acceptate de GCC și de compilatoarele compatibile:

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

Pe platformele care nu necesită curățarea cache-ului de instrucțiuni, __builtin___clear_cache() nu are niciun efect.

Notă: La unele compilatoare compatibile cu GCC, prototipul acestei funcții integrate utilizează char * în loc de void * pentru parametri.

STANDARDE
Din punct de vedere istoric, acest apel de sistem a fost disponibil pe toate variantele MIPS UNIX, inclusiv RISC/os, IRIX, Ultrix, NetBSD, OpenBSD și FreeBSD (și, de asemenea, pe unele sisteme de operare MIPS non-UNIX), astfel încât existența acestui apel în sistemele de operare MIPS este un standard de-facto.

ERORI
Nucleele Linux mai vechi decât Linux 2.6.11 ignoră argumentele addr și nbytes, ceea ce face ca această funcție să fie destul de costisitoare. Prin urmare, întreaga memorie cache este întotdeauna golită.

Această funcție se comportă întotdeauna ca și cum BCACHE ar fi fost trecut pentru argumentul cache și nu efectuează nicio verificare a erorilor la argumentul cache.

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.