Les premiers pas
Cette section décrit l'organisation générale du système, ses structures de fichiers et de périphériques, ainsi que les mécanismes généraux d'organisation des programmes. Il ne s'agit pas d'une introduction à l'utilisation du système, mais elle devrait vous donner une idée des objectifs et des principes du système.
Fondement et organisation du système
Le système UCSD a été initialement conçu comme un système de développement de programmes pour micro-ordinateurs. Il était à l'origine utilisé pour enseigner la programmation, mais il a rapidement été utilisé pour diverses utilisations, y compris son propre développement. Le système actuel contient de nombreuses fonctions et capacités n'étant pas présentes dans l'original, mais de nombreuses hypothèses de conception d'origine demeurent : un système d'exploitation simple, piloté par menu, une mémoire principale relativement petite, un terminal interactif (généralement un tube cathodique) et un support d'entreposage en ligne de capacité relativement faible (généralement une ou deux disquettes).
La machine la plus simple exécutant le système UCSD p-System sera dotée d'un boîtier avec le microprocesseur central, d'un écran cathodique (un terminal en mode ligne fera l'affaire, mais n'est pas pratique) et d'un unité de disquettes. L'unité de disquettes contiendra une disquette avec le logiciel système et un certain nombre de fichiers utilisateur. Les fichiers utilisateur peuvent être des programmes sources, des programmes objets, des données brutes ou du texte de document.
Ce système simple peut être et est généralement étendu avec des éléments tels que des unités de disquettes plus nombreux ou plus performants, une imprimante et d'autres périphériques. Néanmoins, il sera utilisé par un seul utilisateur assis devant l'écran cathodique et développant des programmes ou exécutant des programmes existants. Le système est orienté vers cet environnement interactif.
Le système d'exploitation, le gestionnaire de fichiers et l'éditeur sont tous «pilotés par menu» - une ligne de prompt est continuellement affichée en haut de l'écran avec toutes (ou presque toutes) les commandes en cours visibles. Ces commandes sont invoquées par une seule frappe de touche et l'organisation est hiérarchique. En général, la saisie d'une touche entraîne soit l'exécution d'une action, soit l'affichage d'une autre prompt de commande détaillant de nouvelles commandes à un niveau différent et «inférieur».
Cette page parle du «niveau de commande». Il s'agit du niveau le plus élevé du système d'exploitation, celui étant visible par l'utilisateur sous la forme du prompt de commande apparaissant au premier démarrage du système. Les commandes à ce niveau sont simples et explicites : R(un, C(ompile, E(dit, F)ile,... Certaines d'entre elles, comme R(un et C(ompile, entraînent l'exécution d'actions directement sur un fichier. D'autres, comme E(dit et F)ile, appellent ces programmes particuliers, étant eux-mêmes pilotés par menu.
Le Filer et le Linker ainsi que certains utilitaires exécutent des fonctions traditionnellement exécutées par des systèmes d'exploitation plus importants. Dans le système UCSD, ils sont traités comme des programmes distincts (tout comme les programmes utilisateur) et ne font donc pas partie du système d'exploitation. En dessous du niveau de commande «externe» ou «le plus élevé», le système d'exploitation n'est pas visible pour l'utilisateur, mais reste une composante important du système en étant disponible pour la surveillance et le contrôle continus des programmes en cours d'exécution et des périphériques d'entrée/sortie.
Lors du premier démarrage du système, l'utilisateur peut être amené à faire face à certains détails de bas niveau, en fonction du matériel concerné.
Le démarrage du système démarre l'émulateur du système (également appelé interpréteur) exécutant tous les programmes écrits en langage de haut niveau. Alors que les assembleurs adaptables génèrent le langage machine pour des machines cibles particulières, les langages de haut niveau du système tels que Pascal, FORTRAN et BASIC sont compilés en un langage intermédiaire appelé p-code. Ce code se présente sous la forme d'un code machine pour une "P-machine" directement. Pour l'exécuter sur un processeur réel, la P-machine doit être émulée : soit par un interpréteur traitant les opérations au moment de l'exécution, soit par un générateur de code effectuant la traduction avant l'exécution, soit par une implémentation matérielle exécutant directement le p-code. Toutes ces méthodes sont utilisées, mais la plupart des installations actuelles utilisent un interpréteur; c'est la méthode employée en premier à l'UCSD.
Cette introduction a énuméré tous les composantes du système, bien que de manière très sommaire. Les deux illustrations suivantes devraient clarifier la relation entre le système d'exploitation et les autres composantes du système. La figure suivante montre un arbre représentant la structure des commandes : la saisie de diverses commandes dans le système équivaut à parcourir cet arbre.
La figure suivante est une image plus détaillée des différents composantes majeurs et de leurs interrelations :
Organisation des fichiers
Pour le système UCSD, un fichier est un ensemble de données. Il peut résider sur un disque et être placé dans la mémoire principale uniquement lorsqu'il est utilisé directement par le système ou par un programme utilisateur. Il peut s'agir de données qu'un programme lit à partir d'un périphérique ou un envoie à un périphérique.
Un fichier peut contenir n'importe quel type de données et être organisé de n'importe quelle manière, mais le système traitera certains fichiers de manière très spécifique, et il existe des conventions de dénomination prenant en charge ce traitement spécial. Les conventions de dénomination informent le système de la manière de traiter un fichier donné et servent également de mnémonique pour l'utilisateur. Avant de discuter des différents types de fichiers, il convient de mentionner que les «fichiers sur disque» sont entreposés sur un support à accès aléatoire, généralement une disquette. Chaque disque contient un répertoire décrivant jusqu'à 77 fichiers. La taille du fichier varie et les limites dépendent du matériel particulier.
La manipulation des fichiers s'effectue généralement avec le Filer. Le Filer est un programme étant appelé au niveau de la commande externe. Il fournit une variété de commandes permettant de créer, nommer et renommer des fichiers, leur suppression et leur transfert entre différents périphériques (unités de disque, imprimantes, écrans cathodiques,...). Il permet également de gérer les unités d'entreposage elles-mêmes.
Remarque : l'amorçage du système implique la lecture de fichiers à partir d'un disque particulier. Ce disque est appelé «disque système», «disque par défaut» ou «disque d'amorçage». Dans la syntaxe du système pour les noms de fichiers, il est appelé «*», et lorsqu'un nom de disque est affiché précédé d'une étoile (par exemple, *SYSTEM.PASCAL), cela signifie que le fichier se trouve sur le disque d'amorçage.
Fichiers système
Les fichiers constituant les principales parties du système lui-même sont identifiés par le préfixe «SYSTEM.». Ainsi, les fichiers importants sont SYSTEM.PASCAL, SYSTEM.EDITOR, SYSTEM.ASSMBLER,... Les fichiers réellement fournis avec un système donné et sur quels disques sont-ils décrits dans le Guide d'installation. Cette section donne une description générale des noms des principaux éléments du système.
Sur certaines implémentations du p-System, de nombreux fichiers système résideront dans la ROM (mémoire morte) plutôt que sur un disque.
Le système d'exploitation lui-même est SYSTEM.PASCAL. Parmi ses principaux composantes, on trouve :
- SYSTEM.FILER
- SYSTEM.EDITOR
- SYSTEM.LINKER
- SYSTEM.COMPILER
- SYSTEM.ASSMBLER (notez le «E» manquant)
... tous ces programmes sont appelés directement par des commandes à une seule lettre au niveau de commande externe.
- SYSTEM.SYNTAX
... contient tous les messages d'erreur du compilateur.
SYSTEM.COMPILER n'est pas nécessairement Pascal -- il peut contenir n'importe lequel des compilateurs disponibles (actuellement, Pascal, FORTRAN ou BASIC). De cette façon, en changeant les noms de fichiers, un utilisateur peut changer le compilateur auquel il accède par une simple frappe de touche.
De même, SYSTEM.EDITOR est livré sous forme d'éditeur orienté écran et contient généralement ce code. Mais si vous êtes contraint d'utiliser un terminal orienté ligne, vous pouvez remplacer YALOE (Yet Another Line Oriented Editor) par SYSTEM.EDITOR, car il répondrait mieux à vos besoins.
- SYSTEM.LIBRARY
... contient des routines préalablement compilées ou assemblées à lier à d'autres programmes.
- SYSTEM.STARTUP
... est un fichier de code exécutable. Si un fichier portant ce nom existe lorsque le système est démarré ou initialisé, il est exécuté avant que la ligne du prompt principale du système ne s'affiche. L'objectif est de fournir un environnement clef en main aux utilisateurs le souhaitant.
- SYSTEM.MISCINFO
... est un fichier de données contenant divers éléments de données sur un système individuel - la plupart étant consacré aux informations de gestion du terminal.
Les émulateurs ont des noms divers, généralement spécifiques à la machine. Les plus largement distribués sont ...
- SYSTEM.PDP-11
- SYSTEM.MICRO
Il existe trois autres fichiers SYSTEM étant généralement présents, mais pas toujours. Ce sont les fichiers constituant le fichier de travail de l'utilisateur, et comme ils sont traités d'une manière spéciale et se rapportent directement à l'utilisation individuelle du système, ils sont traités séparément dans la section ci-dessous. Avant de discuter des fichiers de travail, nous parlerons de fichiers utilisateur plus ordinaires.
Lorsque le système est amorcé, certains fichiers système doivent se trouver sur le disque à partir duquel il est amorcé (ou dans la ROM, pour les implémentations basées sur la ROM). D'autres fichiers système peuvent se trouver n'importe où. Le système les recherchera à chaque fois qu'il sera amorcé ou initialisé, et chaque fois qu'il en aura besoin et qu'ils ne se trouveront pas sur le périphérique sur lequel il les a trouvés précédemment. Le système recherchera d'abord le disque système, puis tous les autres disques en ligne. Une description des fichiers devant être présents sur un disque s'amorçant se trouve dans le Guide d'installation.
Fichiers utilisateur
Les fichiers utilisateur sont généralement constitués de trois éléments : texte de programme ou de document, code de programme compilé ou assemblé ou autres données dans tout type de format défini par l'utilisateur. Certaines conventions de dénomination couvrent également ces fichiers et correspondent en particulier à ces trois types : le suffixe d'un nom de fichier indique de quel type de fichier il s'agit.
Les fichiers .TEXT, tels que SORTER.TEXT, NONSENSE.TEXT ou même SYSTEM.WRK.TEXT, sont des fichiers lisibles par l'homme, formatés pour être utilisés par l'éditeur système (généralement l'éditeur orienté écran). Ils incluent un bloc d'entête et suivent certaines conventions internes.
Les fichiers CODE, tels que SORTER.CODE, FISBIN.1.CODE ou SYSTEM.WRK.CODE, sont soit du p-code, soit du «code natif». Le p-code est le code généré par les compilateurs du système et exécuté sur la P-machine. Le code natif fait référence au code prêt à être exécuté sur un microprocesseur particulier, tel qu'un PDP-11, un 6502 ou un Z80, pour n'en citer que quelques-uns. Les fichiers .CODE sont généralement la sortie d'un compilateur ou d'un assembleur; ils peuvent également être générés par le Linker à partir d'un groupe de fichiers de code déjà existants.
Les fichiers .DATA tels que FOR.SORT.DATA contiennent des informations pour les programmes utilisateur, dans un format connu de l'utilisateur.
Ces conventions de dénomination n'ont en général aucune importance pour le Filer ; les commandes Filer font référence à n'importe quel fichier, quel que soit son nom. Les exceptions sont les commandes G(et, S(ave et N(ew, traitant du fichier de travail ; elles sont décrites ci-dessous. Ces conventions de dénomination sont importantes pour certains autres programmes système ; par exemple, l'éditeur ne modifiera que les fichiers .TEXT. Un fichier de code doit être créé avec le suffixe .CODE ; une fois créé, le nom peut être changé en quelque chose d'autre, et il sera toujours exécutable. Les compilateurs et les assembleurs ajoutent automatiquement .CODE aux noms des fichiers de sortie que vous spécifiez.
Les autres suffixes que vous pouvez rencontrer incluent les fichiers .BACK, étant des sauvegardes de fichiers .TEXT, et les fichiers .BAD, étant des fichiers immobiles utilisés pour couvrir les parties physiquement endommagées d'un disque.
Le fichier de travail
L'utilisateur peut désigner un «fichier de travail», pouvant être considéré comme une zone de travail pour conserver les nouveaux éléments sans nom. De nombreux programmes système supposent que vous travaillez sur le fichier de travail, sauf indication contraire de votre part. Le fichier de travail peut être créé en désignant des fichiers existants ou en créant un nouveau fichier avec l'éditeur.
La modification du fichier de travail peut entraîner la génération de copies temporaires, qui (jusqu'à leur enregistrement) sont nommées :
- SYSTEM.WRK.TEXT
- SYSTEM.WRK.CODE
- SYSTEM.LST.TEXT
SYSTEM.WRK.TEXT peut être créé en quittant l'éditeur ; s'il contient un programme, une compilation ou un R(un réussi créera SYSTEM.WRK.CODE. Si la compilation réussit, la commande R(un exécute immédiatement le code. SYSTEM.LST.TEXT peut éventuellement être créé par le compilateur.
Chaque fois qu'un programme contenu dans SYSTEM.WRK.TEXT est modifié par l'éditeur, R(un le recompile afin de maintenir SYSTEM.WRK.CODE à jour.
Le Filer peut S(aver ces fichiers sous des noms permanents. Le Filer est également utilisé pour désigner un nouveau fichier de travail avec la commande G(et, ou supprimer un ancien avec N(ew.