mincore()
renvoie un vecteur qui indique si des pages de mémoire virtuelle
d'un processus appelant sont présentes en mémoire physique (RAM)
auquel cas un accès à ces pages ne provoquera pas d'accès disque
(défaut de page).
Le noyau renvoie les informations concernant les pages à partir
de l'adresse
addr
sur une longueur de
length
octets.
L'argument
addr
doit être un multiple de la taille de page du système.
L'argument
length
n'a pas besoin d'être un multiple de la taille de page du système, mais
puisque les informations sont renvoyées pour des pages entières,
length
est arrondie par excès au multiple de la taille de page du système.
On peut obtenir la taille de page
(PAGE_SIZE)
avec
sysconf(_SC_PAGESIZE).
L'argument
vec
doit pointé vers un tableau contenant au moins
(length+PAGE_SIZE-1) / PAGE_SIZE
octets.
En retour, le bit de poids faible de chaque octet sera positionné à 1 si
la page correspondante est présente en mémoire physique et à 0 autrement.
(L'état des autres bits de chaque octet est indéfini ;
ces bits sont réservés pour une éventuelle utilisation future.)
Bien entendu, les informations renvoyées dans
vec
ne sont qu'un instantané : les pages qui ne sont pas verrouillées
en mémoire peuvent aller et venir à tout moment, et le contenu de
vec
peut être déjà périmé au retour de l'appel.
Pour que
mincore()
réussisse,
addr
doit être alignée sur une frontière de page.
C'est la responsabilité de l'appelant d'arrondir
l'adresse à la page la plus proche.
Le paramètre
length
n'est pas nécessairement un multiple de la taille de page.
Le vecteur
vec
doit être assez grand pour contenir (length+PAGE_SIZE-1)/PAGE_SIZE octets.
On peut connaître la taille de page en invoquant
getpagesize(2).