Un module chargeable NetWare ( NLM ) est un module de noyau chargeable (un module de code binaire ) qui peut être chargé dans le système d'exploitation NetWare de Novell . Les NLM peuvent implémenter des pilotes matériels, des fonctions serveur (par exemple, le clustering), des applications (par exemple, GroupWise ), des bibliothèques système ou des utilitaires.
Les NLM ont été pris en charge à partir de la version 3.x de NetWare basée sur Intel 80386. Les versions précédentes de NetWare avaient un noyau monolithique et des modifications matérielles ou fonctionnelles importantes nécessitaient de relier le noyau aux modules objet.
En raison de problèmes de stabilité avec les premiers NLM tiers, ils ne sont jamais devenus populaires pour la programmation d'applications serveur, à quelques exceptions près comme les programmes antivirus , les programmes de sauvegarde et certains produits de base de données .
Fonctionnalité
Lors du chargement, un NLM demande des ressources, telles que de la mémoire et des threads de processus, au noyau NetWare. Le noyau NetWare suit ces demandes et peut identifier la mémoire et d'autres ressources attribuées à un NLM spécifique. Les NLM peuvent charger automatiquement d'autres NLM dont ils dépendent eux-mêmes.
Les NLM peuvent enregistrer des commandes auprès du noyau NetWare, étendant ainsi le vocabulaire de commandes disponible à l'invite de la console NetWare.
Lorsqu'ils sont correctement codés, les NLM peuvent être réentrants, ce qui permet de charger et d'exécuter plusieurs instances du même code.
Problèmes de programmation
Initialement, Novell a publié une boîte à outils de développement pour la programmation NLM comprenant une documentation sur l'API du noyau et un compilateur C ( Watcom ), mais le support tiers pour la fonction exécutable NLM était très limité.
Dans les premières versions de NetWare (antérieures à la version 4.x), tous les processus étaient exécutés dans l' espace d'adressage du noyau , sans protection mémoire spécifique. Il était donc possible que des bogues dans les NLM écrasent l'espace d'adressage du noyau ou d'autres NLM et finissent par faire planter le serveur. Dans la terminologie Novell dérivée des mainframes, ce phénomène était connu sous le nom d'ABEND ou ABnormal END .
De plus, NetWare utilisait un modèle multitâche non préemptif ou coopératif , ce qui signifie qu'un NLM devait céder régulièrement la place au noyau. Un NLM exécutant une boucle infinie , par exemple, ne pouvait donc pas être arrêté.
Dans NetWare v4.x, Novell a introduit une forme limitée de protection de la mémoire, qui a été étendue aux espaces d'adressage protégés dans NetWare v5.x. Grâce à ces mécanismes, des NLM correctement codés peuvent être chargés dans leur propre espace d'adressage et les NLM qui se comportent mal peuvent être empêchés de compromettre l'intégrité du noyau.
Compilateurs
Les compilateurs officiels qui produisent les NLM sont :
- Compilateur Watcom C/C++ / OpenWatcom
- Metrowerks CodeWarrior pour NetWare
- EPC C/C++
- Novell NLMLINK.EXE
Le développement NLM est également possible avec GNU cc et binutils. Plus de détails sont disponibles dans NetWare Loadable Module Programming HOWTO de Martin Hinner.
NLM côté client avec NIOS
En mars 1995, Novell a présenté un nouveau client NetWare DOS/Windows 32 bits (Client 32 basé sur ODI32/NIOS) en 1996, remplaçant l'ancien client 16 bits basé sur ODI /VLM. Son composant NIOS ( NetWare I/O Subsystem ) utilisait des techniques similaires à DPMS pour déplacer et exécuter des NLM en mode protégé et en mémoire étendue afin de réduire l' empreinte mémoire conventionnelle du client à 2 à 5 Ko.