remap_file_pages(2)

NUME
remap_file_pages - creează o cartografiere neliniară a fișierelor

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#define _GNU_SOURCE         /* A se vedea feature_test_macros(7) */
#include <sys/mman.h>

[[depreciat]] int remap_file_pages(size_t size;
                                    void addr[size], size_t size,
                                    int prot, size_t pgoff, int flags);

DESCRIERE
Notă: acest apel de sistem a fost marcat ca fiind depreciat începând cu Linux 3.16. În Linux 4.0, implementarea a fost înlocuită cu o emulație în nucleu mai lentă. Acele câteva aplicații care utilizează acest apel de sistem ar trebui să ia în considerare migrarea către alternative. Această modificare a fost făcută deoarece codul nucleului pentru acest apel de sistem era complex și se crede că este puțin utilizat sau poate chiar complet nefolosit. Deși a avut unele cazuri de utilizare în aplicațiile de baze de date pe sisteme pe 32 de biți, aceste cazuri de utilizare nu există pe sistemele pe 64 de biți.

Apelul de sistem remap_file_pages() este utilizat pentru a crea o cartografiere neliniară, adică o cartografiere în care paginile fișierului sunt cartografiate într-o ordine nesecvențială în memorie. Avantajul utilizării remap_file_pages() față de utilizarea apelurilor repetate la mmap(2) constă în faptul că prima abordare nu necesită ca nucleul să creeze structuri de date suplimentare VMA (Virtual Memory Area).

Pentru a crea o cartografiere neliniară, efectuăm următorii pași:

1.  Utilizați mmap(2) pentru a crea o cartografiere (care este inițial liniară). Această cartografiere trebuie să fie creată cu indicatorul MAP_SHARED.

2.  Utilizați unul sau mai multe apeluri la remap_file_pages() pentru a rearanja corespondența dintre paginile din cartografiere și paginile din fișier. Este posibil să se cartografieze aceeași pagină a unui fișier în mai multe locații din regiunea cartografiată.

Argumentele pgoff și size specifică regiunea din fișier care trebuie realocată în cadrul cartografierii: pgoff este un interval al fișierului în unități de dimensiune a paginii de sistem; size este lungimea regiunii în octeți.

Argumentul addr are două scopuri. În primul rând, identifică cartografierea ale cărei pagini dorim să le rearanjăm. Astfel, addr trebuie să fie o adresă care să se încadreze într-o regiune cartografiată anterior printr-un apel la mmap(2). În al doilea rând, addr specifică adresa la care vor fi plasate paginile de fișier identificate de pgoff și size.

Valorile specificate în addr și size trebuie să fie multiplii dimensiunii paginii de sistem. Dacă nu sunt, atunci nucleul rotunjește valorile both down la cel mai apropiat multiplu al dimensiunii paginii.

Argumentul prot trebuie să fie specificat ca fiind 0.

Argumentul prot trebuie să fie specificat ca fiind 0. Argumentul flags are aceeași semnificație ca și pentru mmap(2), dar toate fanioanele, altele decât MAP_NONBLOCK, sunt ignorate.

VALOAREA RETURNATĂ
În caz de succes, remap_file_pages() returnează 0. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EINVAL
    addr nu se referă la o cartografiere validă creată cu indicatorul MAP_SHARED.

EINVAL
    addr, size, prot, sau pgoff nu este valid.

STANDARDE
Linux.

ISTORIC
Linux 2.5.46, glibc 2.3.3.

NOTE
Începând cu Linux 2.6.23, remap_file_pages() creează cartografieri neliniare numai pe sistemele de fișiere în memorie, cum ar fi tmpfs(5), hugetlbfs sau ramfs. Pe sistemele de fișiere cu o memorie de rezervă, remap_file_pages() nu este mult mai eficient decât utilizarea mmap(2) pentru a ajusta ce părți ale fișierului sunt cartografiate la ce adrese.

CONSULTAȚI ȘI
getpagesize(2), mmap(2), mmap2(2), mprotect(2), mremap(2), msync(2)

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.