Scroll to navigation

subpage_prot(2) System Calls Manual subpage_prot(2)

NUME

subpage_prot - definește o protecție de subpagină pentru un interval de adrese

BIBLIOTECA

Biblioteca C standard (libc, -lc)

REZUMAT

#include <sys/syscall.h>      /* Definirea constantelor SYS_* */
#include <unistd.h>
int syscall(SYS_subpage_prot, unsigned long addr, unsigned long len,
            uint32_t *map);

Notă: glibc nu oferă nici o funcție de învăluire pentru subpage_prot(), fiind necesară utilizarea syscall(2).

DESCRIERE

Apelul de sistem specific PowerPC subpage_prot() oferă posibilitatea de a controla permisiunile de acces pe subpagini individuale de 4 ko pe sistemele configurate cu o dimensiune a paginii de 64 ko.

Harta de protecție se aplică paginilor de memorie din regiune începând de la addr și continuând cu len octeți. Ambele argumente trebuie să fie aliniate la o limită de 64 ko.

Harta de protecție este specificată în memoria tampon indicată de map. Harta are 2 biți pentru fiecare subpagină de 4ko; astfel, fiecare cuvânt de 32 de biți specifică protecțiile a 16 subpagini de 4ko în interiorul unei pagini de 64ko (astfel, numărul de cuvinte de 32 de biți indicate de map ar trebui să fie egal cu numărul de pagini de 64ko specificate de len). Fiecare câmp de 2 biți din harta de protecție este fie 0 pentru a permite orice acces, fie 1 pentru a împiedica scrierea, fie 2 sau 3 pentru a împiedica toate accesele.

VALOAREA RETURNATĂ

În caz de succes, subpage_prot() returnează 0. În caz contrar, se returnează unul dintre codurile de eroare specificate mai jos.

ERORI-IEȘIRE

Memoria tampon la care face referire map nu este accesibilă.
Argumentele addr sau len sunt incorecte. Ambele argumente trebuie să fie aliniate la un multiplu al dimensiunii paginii de sistem și nu trebuie să se refere la o regiune din afara spațiului de adrese al procesului sau la o regiune care constă din pagini uriașe.
Memorie insuficientă.

STANDARDE

Linux.

ISTORIC

Linux 2.6.25 (PowerPC).

Apelul de sistem este furnizat numai în cazul în care nucleul este configurat cu CONFIG_PPC_64K_PAGES.

NOTE

Se aplică, de asemenea, protecțiile normale ale paginilor (la nivelul paginii de 64 ko); mecanismul de protecție a subpaginilor este o constrângere suplimentară, astfel încât dacă se pune 0 într-un câmp de 2 biți nu se va permite scrierea pe o pagină care este altfel protejată la scriere.

Justificare

Acest apel de sistem este furnizat pentru a ajuta la scrierea emulatoarelor care operează folosind pagini de 64 ko pe sistemele PowerPC. Atunci când se emulează sisteme precum x86, care utilizează o dimensiune mai mică a paginilor, emulatorul nu mai poate utiliza unitatea de gestionare a memoriei (MMU) și apelurile de sistem normale pentru a controla protecția paginilor. (Emulatorul ar putea emula MMU prin verificarea și eventual realocarea adresei pentru fiecare acces la memorie în software, dar acest lucru este lent). Ideea este că emulatorul furnizează o serie de măști de protecție care se aplică unui interval specificat de adrese virtuale. Aceste măști sunt aplicate la nivelul la care intrările în tabelul de pagini hardware (PTE) sunt inserate în tabelul de pagini hardware pe baza PTE-urilor Linux, astfel încât PTE-urile Linux nu sunt afectate. Implicit, regiunile spațiului de adrese care sunt protejate sunt comutate pentru a utiliza pagini hardware de 4 ko în loc de pagini hardware de 64 ko (pe mașinile cu suport hardware pentru pagini de 64 ko).

CONSULTAȚI ȘI

mprotect(2), syscall(2)

Documentation/admin-guide/mm/hugetlbpage.rst în arborele sursă al nucleului Linux

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 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.

30 martie 2023 Pagini de manual de Linux 6.05.01