Pourquoi NIL ne vaut pas 0 sur Pascal RS/6000 (entre autres)

Tout d'abors, NIL est une valeur symbolique qui n'a aucune raison particulière de vouloir 0. Mais la vrai raison est ailleurs...

Le processeur coopère avec le système d'exploitation afin de maintenir pour chaque processus la table des page mémoires qui lui appartient. Le processeur doit maintenir la correspondance entre les adresses physiques des pages en mémoire et leur adresse logique (virtuelle). Il contient pour ce faire un cache associatif pour un petit nombre de pages, et le reste des correspondances dans une table en mémoire (vive). Lorsqu'un processus tente d'accéder à une page qui ne réside pas en mémoire vive, il provoque une "faute de page" (l'appel d'une routine spéciale du système d'exploitation), et le système "prend le relais", dans le sens où il exécute des opérations qui ne sont pas câblées dans le processeur.

Le système peut alors effectuer une action appropriée au problème posé: si la page en question appartient à l'espace logique du processus mais a été swappée hors de la mémoire vive, le système obtient une page mémoire (soit une page libre, soit en copiant une des pages mémoire sur le disque), copie la page demandée dans la mémoire vive, met à jour la table des pages mémoires du processeur et rend la main ("retour de trap"). Si la page demandée est la première qui suit la dernière page allouée au processus, ou la première en bas de la pile, le système peut allouer une page de plus pour étendre l'espace mémoire logique du processus.

Il est possible de tirer parti de ce mécanisme pour obtenir une détection hard des accès au travers d'un pointeur NIL (à un coût zéro)