Service de noyau rmmap_create
Objectif
Définit une adresse d'adresse effective [ EA ] dans la région de traduction [ RA ].
Syntaxe
Paramètres
| Article | Descriptif |
|---|---|
| Eaddr | Adresse de traitement obligatoire de la région de mappage. |
| Iomp | La mémoire de bus à laquelle l'adresse effective décrite par le paramètre Eaddr doit correspondre. Pour la mémoire réelle, l'ID de bus doit être défini sur RÉSE_REALMEM_ et l'adresse de bus doit être définie sur l'adresse de mémoire réelle. La zone de taille doit être au moins PAGESIZE, pas plus grande que TAILLE DE SEGMENT, et un multiple de PAGESIZE. La clé doit être définie sur MAPPE_MEM_IO_IO_DE_. La zone des indicateurs n'est pas utilisée. |
| Flags | Les indicateurs sélectionnont les attributs de page et de segment de la traduction. Les indicateurs d'attribut de page ne sont pas tous compatibles. Les combinaisons valides des indicateurs d'attribut de page sont les suivantes.
|
Descriptif
Les régions de conversion créées avec le service de noyau Rmmap_create sont gérées dans des segments de mappage d'entrée-sortie. Un seul segment de ce type peut traduire jusqu'à 256 mégaoctets de mémoire réelle ou d'E-S mappées de mémoire dans une seule région. La seule granularité pour laquelle le service Rmmap_remove peut être démarré est un mappage unique créé par un appel unique vers Rmmap_create.
Il existe des contraintes sur la taille du mappage et le paramètre Indicateurs , décrit ultérieurement, ce qui entraîne l'échec de l'appel, qu'il existe ou non un espace adresse adéquat.
Si le service de noyau Rmmap_create est appelé avec l'adresse effective de zéro, la fonction tente de trouver de l'espace disponible dans l'espace adresse du processus. En cas de réussite, un segment de mappage d'E-S est créé et l'adresse effective (qui est transmise par référence) est remplacée par l'adresse effective qui est mappée à la première page de la mémoire Iomp .
Si le service de noyau Rmmap_create est appelé avec une adresse effective non nulle, il est considéré comme l'adresse effective requise qui doit se traduire par la mémoire Iomp transmise. Cette fonction vérifie que la plage demandée est libre. Si ce n'est pas le cas, il échoue et renvoie EINVAL. Si le mappage à l'adresse effective n'est pas contenu dans un seul segment, la fonction échoue et renvoie ENOSPC. Sinon, la région est allouée et l'adresse effective n'est pas modifiée. L'adresse effective est mappée à la première page de la mémoire Iomp . Les références en dehors des régions mappées mais dans le même segment ne sont pas valides.
L'adresse effective (si elle est fournie) et l'adresse de bus doivent être un multiple de PAGESIZE ou EINVAL est renvoyée.
Les segments de mappage d'E-S ne sont pas hérités par les processus enfant après une sous-routine Fourche .
Les segments de mappage d'E-S ne sont pas hérités par les processus enfant après une sous-routine Fourche , sauf lorsque RMMAP_HÉRITAGE est spécifié. Ces segments sont supprimés par Exec, Sortieou Rmmap_remove de la dernière plage d'un segment.
Seules certaines combinaisons de drapeaux sont autorisées, en fonction du type de mémoire mappée. Pour les mappages de mémoire réelle, PAGE_RMMAP_M est requis alors que PAGE_RMMAP_W, RMMAP_PAGE_Iet PAGE_RMMAP_G ne sont pas autorisés. Pour les mappages d'E-S, il est valide de spécifier uniquement PAGE_RMMAP_M, sans autre indicateur d'attribut de page. Il est également valide de spécifier RMMAP_PAGE_I et, le cas échéant, PAGE_RMMAP_Met PAGE_RMMAP_G. PAGE_RMMAP_W n'est jamais autorisé.
La plage d'adresses réelle décrite par le paramètre Iomp doit être unique dans ce segment de mappage d'E-S.
Environnement d'exécution
Le service de noyau Rmmap_create peut être appelé uniquement à partir de l'environnement de processus.
Valeurs renvoyées
Une fois l'opération terminée, le service de noyau Rmmap_create renvoie zéro et modifie l'adresse effective sur la valeur à laquelle la région de mappage nouvellement créée a été connectée à l'espace adresse du processus. Sinon, elle renvoie l'une des erreurs suivantes:
| Article | Descriptif |
|---|---|
| EINVAL | Un type d'erreur de paramètre s'est produit. Ces paramètres incluent, mais ne sont pas limités à, des erreurs de taille et des sélections d'options mutuellement exclusives. |
| ENOMEM | Le système d'exploitation ne peut pas allouer les structures de données nécessaires pour représenter le mappage. |
| ENOSPC | Espace adresse effectif épuisé dans la région indiquée par Eaddr. |
| EPERM | Cette plateforme matérielle ne met pas en oeuvre ce service. |
Caractéristiques de mise en oeuvre
Ce service fonctionne uniquement sur les microprocesseurs PowerPC .