Fonction Mlock 2 C

Fonction Mlock 2 C
Les pages physiques liées à la plage d'adresses virtualisée commençant à l'addr sont verrouillées dans RAM pour les caractères Len principalement par la fonction MLOCK System. Les pages qui ont été restreintes via une ou même plus de méthodes MLOCK sont déverrouillées par la fonction munlock (). La mémoire doit être attribuée sur toute sa gamme. Les pages spécifiées après un tel appel Mlock ne se traduiront pas de pages erronées ou de problèmes de traduction d'adresse à moins qu'ils ne soient libérés. Sur les systèmes avec des TLB d'outils de développement, ils pourraient néanmoins entraîner des défaillances de protection contre la violation ou les problèmes TLB-MISS. Une fois que tous les mappages restreints pour les pages sont supprimés, les pages réelles sont maintenues en stock.

Grâce à leurs traductions d'adresse virtuelle, les différentes opérations peuvent bloquer les mêmes pages réelles. Grâce à diverses traductions virtuelles des mêmes pages ou des demandes MLOCK empilées sur la plage d'adresses très identique, une méthode solitaire peut également avoir plusieurs pages qui sont verrouillées. Une invocation à la fonction munmap () qui désemble la plage d'adresse non frappée que le déverrouillage est expressément ou implicitement.

Après seulement une fourche, les traductions bloquées ne sont pas transmises au processus de l'enfant. Les threads ne peuvent fermer qu'une certaine quantité de RAM physique car il s'agit d'une marchandise relativement rare. La restriction d'actifs Rlimit_memlock par processus par processus et la limitation des «pages câblées» à l'échelle de la plate-forme peuvent être bloquées par un seul thread. Bien que les implémentations NetBSD se terminent au multiple le plus proche du nombre de pages, le code transportable doit s'assurer que peut-être les arguments Addr et Len sont synchronisés à un.

Valeurs de retour

Le retour 0 signifie que l'appel est réussi et que presque toutes les pages de la portée ont été bloquées ou libérées. L'état de verrouillage de chaque page du domaine reste inchangé si la valeur numérique est -1, indiquant une exception. L'erreur est indiquée dans cette situation en définissant l'emplacement global Errno.

les erreurs

La fonction mlock () peut échouer pour plusieurs raisons. Dans cette partie de l'article, nous discuterons du nombre d'exceptions que nous avons obtenues après l'échec de la fonction MLOCK () ainsi que leurs raisons de se produire en exécution. Voici quelques-unes des erreurs que nous pouvons trouver jusqu'à présent:

  • Eagain: Cette erreur peut se produire lorsque le verrouillage de la plage spécifiée irait plus loin que le serveur ou le seuil par processus pour un stockage restreint, donc le mlock () se bloque dans un tel cas.
  • Einval: Cette erreur peut se produire lorsque l'adresse fournie mais plutôt la longueur n'est pas coordonnée de page. Dans ce cas, la solution ne fonctionne pas comme elle devrait.
  • Enomem: Le problème de défaut ou de traduction d'une page se produit lorsque cette erreur est trouvée. C'est parce qu'il peut y avoir des adresses non allouées dans plusieurs des gammes d'adresses fournies.
  • Eperm: L'erreur EPERM est trouvée jusqu'à présent sur une plate-forme dans laquelle la comptabilité de la page de verrouillage n'est pas prise en charge et la fonction MLOCK () est invoquée par un utilisateur non root.

La fonction munlock () utilisée simultanément avec la fonction mlock () peut échouer pour plusieurs raisons. Dans cette partie de l'article, nous discuterons du nombre d'exceptions que nous obtenons après l'échec de la fonction Munlock () ainsi que leurs raisons de se produire en exécution. Voici quelques-unes des erreurs que nous pouvons trouver jusqu'à présent:

  • Einval: La solution n'est pas ronde et ni l'adresse ni la longueur fournies n'est alignée sur la page.
  • Enomem: Il existe des adresses non allouées dans plusieurs des plages d'adresses fournies. La plage d'adresses donnée n'est pas entièrement limitée.

Exemple:

Pour comprendre le concept de la fonction Mlock () C, nous jetons un coup d'œil à un exemple simple. Nous avons créé un nouveau fichier C nommé «MSEG.C ”dans le dossier Kali Linux« Works ».

Nous commençons ce code avec l'utilisation des bibliothèques C standard requises pour l'exécution fluide du code C, I.e. stdio.H et Unistd.H. Le sys / mman.L'en-tête H est utilisé pour permettre l'utilisation des fonctions de verrouillage de la mémoire. Après cela, l'exécution commence à partir de l'initialisation d'une variable entière DATA_SIZE à 2048. Le tableau de caractères «data_lock» du data_size est défini et transmis à la fonction Memory_lock () définie par l'utilisateur avec la variable DATA_SIZE comme argument dans la première instruction «IF».

La fonction Memory_lock () définie par l'utilisateur est exécutée et obtient la taille d'une page dans la variable Page_Size. La page_offset est calculée et l'adresse est ajustée à la limite de la page. La taille est ajustée avec la fonction page_offset et la fonction MLOCK () est invoquée et renvoyée à l'aide des variables «taille» et «adresse». La méthode «if» perror () lancera une erreur «Lock_memory» si le résultat renvoyé est égal à -1. Sinon, l'instruction ELSE imprimera la «mémoire est verrouillée en RAM» via la fonction printf.

Une autre instruction «if-else» est utilisée pour libérer le verrouillage. La fonction Memory_unlock () est invoquée dans l'instruction «IF» en passant le DATA_LOCK et DATA_SIZE comme arguments. La même procédure est suivie de cette fonction que nous avons suivi dans la fonction Memory_lock (). Le seul changement est l'utilisation de la fonction munlock () avec les mêmes arguments pour libérer le verrou et renvoyer le résultat. La deuxième instruction «IF» lancera une exception «unlock_memory» en utilisant la fonction Perror si le résultat est équivalent à -1. Sinon, l'instruction ELSE affichera que «la mémoire est déverrouillée» à l'aide de la fonction printf.

Nous avons créé un fichier d'objet de ce fichier C à l'aide de l'option GCC compilateurs "-o".

Après avoir exécuté le fichier d'objet, nous avons obtenu les messages d'affichage car la mémoire a été verrouillée et déverrouillée via l'utilisation des fonctions mlock () et munlock ().

Conclusion

Il s'agit de l'utilisation de la fonction Mlock de C dans le système d'exploitation Kali Linux pour vous montrer la démonstration de la façon dont une mémoire peut être verrouillée et déverrouillée sans aucun problème. Nous avons ajouté l'explication, la syntaxe, les erreurs et la valeur de retour de la fonction MLOCK avec un exemple détaillé. Ce tutoriel serait suffisant pour que les utilisateurs aient la main avec cette fonction dans le langage de programmation C.