Mini FAQ sur la programmation sous MINIX
Ce document aborde certains problèmes techniques liés à l'utilisation de MINIX
et à la programmation pour ce système d'exploitation.
Q: Comment puis-je apprendre à programmer en C?
R: La première édition de Operating Systems Design and Implementation
par Andy Tanenbaum incluait une annexe 'Introduction au C'. Hélas, avec un
MINIX 2 bien plus gros, il n'y avait plus la place pour elle dans la seconde
édition d' OSDI. Elle est de plus un peu dépassée, car elle traite de la
version originale du C (souvent appelée "K&R C") définie en 1978 dans la
première édition de
The C Programming Language,
par Brian Kernighan
et Dennis Ritchie. La seconde édition de ce livre décrit le C dit "ANSI" ou "Standard"
qui est le langage de référence pour implémenter POSIX, même si le standard POSIX
permet le "Common Usage C" qui utilise des éléments d'avant la standardisation.
Après OSDI 2nde éd., un exemplaire de
The C Programming Language 2nde éd.
est l'ouvrage le plus utile que vous puissiez posséder.
Q: En plus de C, que dois-je connaître d'autre pour programmer dans l'environnement MINIX?
R: Un grand classique est l'ouvrage de Brian Kernighan et Rob Pike, Unix
Programming Environment, malheureusement épuisé à l'heure actuelle, mais
vous pouvez trouver sur Amazon.com ou autres sources des livres d'occasion. Ce livre
met l'accent sur l'utilisation de petits programmes pour accomplir des parties d'une
plus grosse tache, et suggère de commencer un programme par un script shell dans lequel
on remplace au fur et à mesure les commandes standards par des programmes C maison,
jusqu'à ce que l'ensemble soit capable de faire son travail par lui-même. Du même auteur,
le plus récent The Practice of Programming (1999) est également intéressant,
mais pas aussi utile à un programmeur débutant. Advanced Programming in the UNIX(R)
Environment de W. Richard Stevens est un autre ouvrage rempli d'informations sur
la façon d'utiliser les ressources fournies par un environnement de type Unix, mais là
encore, ce n'est pas un livre pour débutant.
Q: Je ne veux pas acheter un livre coûteux de plus, avez-vous d'autres suggestions?
R: Je vous recommande de regarder
Hacking 101: Becoming Productive Quickly in the UNIX World,
de Philip Fong. Il a été écrit en pensant aux utilisateurs de Linux, mais la plus grande
partie s'applique également au monde Minix.
Q: Qu'en est t'il de la programmation avec les scripts shell?
R: Le shell Minix, ash, est semblable à bash, le shell standard de la
plupart des distributions Linux. Cette série d'articles
Bash par l'exemple
mérite d'être regardée même si tout ne s'applique pas à Minix. Si vous désirez acheter
un gros livre, le recueil Unix Power Tools (de Shelley Powers, Jerry
Peek, et bien d'autres auteurs ou contributeurs) fournit quantité d'astuces sur
l'utilisation des shells et commandes Unix, et plusieurs chapitres sont consacrés aux
scripts. Un conseil: l'édition actuelle d'Unix Power Tools est la 3ème.
Si vous trouvez une 2nde édition au tiers de son prix, vous pouvez considérer que c'est
une bonne affaire. L'information ne s'abime pas, et pour l'environnement console en
mode texte de Minix, un ouvrage un peu daté peut se révéler bien suffisant.
Q: J'entends beaucoup parler de problème de sécurité, des astuces pour une programmation sécurisée?
R: Même si au départ vous pouvez penser que vos programmes sur votre petit système Minix
même-pas-relié-au-réseau ne seront jamais une menace pour la sécurité, c'est une bonne
idée d'apprendre rapidement à programmer de façon sécurisée dans votre carrière de
programmeur. Voici deux références utiles: la
FAQ Secure UNIX Programming,
maintenue par Thamer Al-Herbish, et le
Comment-Faire: Secure Programming for Linux and Unix
de David A. Wheeler.
Q: Quels sont les langages de programmation et les compilateurs supportés par MINIX?
R: Le Système d'Exploitation Minix lui-même et les nombreux utilitaires et programmes
intégrés à la distribution sont écrits en C, et la distribution inclut un
compilateur C. En fait, Minix fournit aussi des compilateurs pour Pascal et
Modula2; ces compilateurs ont été conçus en utilisant l' Amsterdam Compiler
Kit, plus connu sous le nom d'ACK. Une "façade" pour chacun de ces langages
produit un code intermédiaire qui est ensuite compilé en langage d'assemblage par le
reste de la chaîne de compilation. Consultez les pages man
cc(1), pc(1), m2(1),
et
ACK(7)
pour plus d'information.
La
licence d'ACK
est semblable à
celle de Minix.
Pour des informations supplémentaires sur ACK, vous pouvez consulter l'
Amsterdam Compiler Kit Information Sheet
qui contient un lien vers le site ftp où télécharger le code source du compilateur.
Il existe également d'autres possibilités de programmation sous Minix:
-
Autres compilateurs C:
-
C386est une alternative de Dave Walker au compilateur ACK pour Minix 32-bit,
téléchargeable sur
http://homepage.ntlworld.com/itimpi/index.htm.
Le code source est disponible, de même qu'un C68 pour Minix-68k.
-
Gcc est le compilateur standard de Minix-vmd. Une recherche sur Internet fournit
de nombreuses références à des ports de gcc vers des versions de Minix-standard
antérieures à la 1.7. Alors que je commençais à écrire ceci, j'ai cru me souvenir
d'un port récent de gcc vers Minix, mais je n'ai pu le retrouver. Le code source
de gcc est disponible. Gcc consomme beaucoup de ressources et peut parfois
utiliser des calculs en virgule flottante qui ne sont pas possibles sous le Minix
standard. L'intérêt de gcc existait surtout, jusqu'à l'époque de Minix 1.5, de par
l'absence d'un compilateur C ANSI et du support des instructions 32 bit dans la
distribution standard, mais cet intérêt a diminué quand ACK, compilateur C ANSI
avec support 32-bit, a été intégré à la distribution Minix-standard.
-
Le compilateur C/C++ TenDRA a été porté vers Minix par Jose Juan Mendoza
Rodriguez <josejuanmr@users.sourceforge.net>. Il a créé un projet SourceForge sur
http://tendra4minix.sourceforge.net.
Des informations supplémentaires et les téléchargements sont disponibles à cette adresse.
J'ai posté là-bas une copie du
README
pour le compilateur C/C++ TenDRA (version 4.1.2) pour Minix 2.0.2, tel que je l'ai
posté sur comp.os.minix en février 2004.
-
Compilateurs et interpréteurs pour autres langages:
-
BASIC:
la version 1.0.16 de Brandy, un interpréteur de langage BASIC, a été porté sous Minix
par Harald Arnesen <harald@skogtun.org>. Lisez le fichier descriptif
b116m.txt,
ou téléchargez
b116m.tar.Z
dans la section 'contributed software'.
-
FORTRAN:
Un convertisseur FORTRAN vers C a été porté sous Minix et est disponible pour
ce système. Lisez le fichier descriptif
f2c.txt,
ou téléchargez
f2c.tar.Z
dans la section 'contributed software'.
-
Perl:
Perl 5 a bénéficié d'un portage vers Minix. Lisez le fichier descriptif
perl.txt,
ou téléchargez
perl.tar.Z
dans la section 'contributed software'.
-
Python -- 1/2005:
Michael Kennett a réalisé le portage de Python en version 1.5.2 (pas la dernière
donc, mais une moins gourmande en ressources). Il est disponible pour Minix
sous forme de sources ou de fichiers binaires. Lisez le fichier descriptif
py152-src.txt (ou
py152-bin.txt),
ou téléchargez
py152-src.tar.Z (ou
py152-bin.tar.Z)
dans la section 'contributed software'.
-
Quelqu'un se souvient-il de
RATFOR?
Il s'agit du préprocesseur "RATional FORtran" pour le FORTRAN, tel que décrit dans le
livre original Software Tools, par Brian Kernighan et P. J. Plauger. Cet
ouvrage de 1976 est toujours imprimé. RATFOR a été porté vers Minix et est disponible.
Lisez le fichier descriptif
ratfor.txt,
ou téléchargez
ratfor.tar.Z
dans la section 'contributed software'. Bien sur, s'agissant d'un préprocesseur, vous
aurez aussi besoin de FORTRAN pour qu'il vous serve à quelque chose.
Q: Existe t'il un manuel de programmation en langage assembleur pour MINIX?
R: Non, pas en tant que tel (mais voyez plus bas*). Le langage assembleur
de Minix possède une syntaxe dérivée de celle d'autres assembleurs pour systèmes
Unix, ce qui déroute un peu ceux habitués à Microsoft MASM ou similaires. Voici
plusieurs documents sur le langage assembleur de Minix qui peuvent être utiles:
-
Pc-ix-assem.txt
est ce qui s'approche le plus d'un manuel. Il décrit le langage assembleur 16 bit
de Minix. Le langage 32 bit possède des instructions supplémentaires, mais la
description de la syntaxe et des pseudo-ops en fait une référence appréciable.
-
La page intitulée
Minix assembly pseudo-ops, sections, and comments
présente les réponses de Kees Bot aux questions posées sur comp.os.minix sur ces
aspects de la programmation assembleur Minix.
-
Pc-ack-assem.txt:
une rapide discussion de Kees Bot sur l'évolution du langage assembleur au travers
des différentes versions de Minix..
-
Assm_example.txt
est un "Hello World" en assembleur qui illustre comment un programme en assembleur
peut être assemblé et lié. Cette démo a été écrite pour Minix 1.5 et serait
légèrement différente pour Minix 2.0.
-
*Mini-manuel: Peu après que j'ai répondu par la négative à la question
ci-dessus, quelqu'un a posté sur le groupe de discussion comp.os.minix un lien
vers un document très intéressant, intitulé
Introduction to Intel x86 Assembly Language in Minix
(ce lien pointe sur un document html mais il existe aussi une
version PDF).
Son auteur est Carl Burch de l'université St John (Etats-Unis, Minnesota). Ce
document présente le langage reconnu par l'assembleur open-source
NASM,
très proche du langage assembleur de Minix.
-
Les manuels de programmation pour les architectures Intel et AMD
se trouvent sur le Net aisément; ces deux fabricants désirant bien sur que les gens
programment pour leurs produits, ils fournissent quantité d'informations sur ceux-là.
-
Un
tutoriel sur le mode protégé,
sur http://my.execpc.com/~geezer/os/pm.htm, le site est maintenu par Chris Giese.
Cette page traite plutôt de la programmation d'applications MS-DOS, mais offre un
bon aperçu de la façon dont fonctionne le mode protégé.
-
Wangzhi <quakewang@mail.whut.edu.cn> a réalisé la traduction en anglais d'un
Minix Assembly Language Manual,
écrit à l'origine en chinois par Mao Yao et Yang Songhua. Il comprend de nombreux
exemples écrits par Wangzhi. Le lien pointe sur un document html mais il y a aussi une
version PDF
disponible.
Q: Connaissez-vous quelques tutoriels sur la programmation en assembleur?
R: Sur son site web
The Art of Assembly Language Programming website,
Randall Hyde offre trois versions de son document sur la programmation en
assembleur: pour DOS 16-bit, pour Windows 32-bit et pour Linux 32-bit. Il y a
également beaucoup d'autres informations intéressantes sur le site.
Q: Pourquoi le calcul en virgule flottante ou MMX nécessite t'il un support
de la part du Système d'Exploitation?
R: En réponse, voici un extrait d'une discussion sur comp.os.minix:
From: kjb=733301@cs.vu.nl (Kees J Bot)
Subject: Re: MMX/3DNow support was RE: MINIX Development?
Date: Wed, 23 Jul 2003 20:15:03 +0200
C'est vraiment un problème matériel avec la virgule flottante (NdT: Floating Point),
car les registres MMX et FP se recouvrent. Cela a été fait pour que les OS qui
ne connaissent pas le MMX puissent tout de même exécuter des programmes MMX,
parce que lorsqu'ils sauvegardent et restaurent les registres FP, ils sauvegardent
et restaurent également le contexte MMX, si c'est ce pour quoi les registres FP sont
employés.
Ces sauvegardes et restaurations sont ce que Minix ne fait pas. Donc, si deux processus
utilisent FP/MMX, le basculement de l'un à l'autre va fausser le contexte FP des deux.
Ce qui serait nécessaire pour que cela fonctionne, c'est une trappe qui réagit à
l'utilisation de la FP, pour que Minix puisse sauver le contexte FP du dernier processus
à avoir utilisé la FP puis charger le contexte FP du nouveau processus. Lors d'un
changement de contexte, tout ce que fait Minix, c'est de positionner le bit "n'utilise
pas la FP" dans un registre.
Le coût? Un handler pour l'interruption FP, un peu de code pour sauver/ restaurer/
initialiser la FP, un peu de mémoire où enregistrer le contexte FP de chaque processus,
et un peu de mémoire pour sauver le contexte FP quand un processus utilisateur intercepte
un signal (Je ne suis pas sur pour l'histoire du signal, à vérifier avec Philip). Ça ne
représente pas beaucoup de travail, on peut se contenter de reprendre le code de Minix-vmd,
mais je n'en ai pas vu l'utilité jusque là. Minix doit employer la FP logicielle comme
dans la distribution ou il ne tournera pas sur un vieux 386, donc Minix lui-même n'en a
pas besoin.
Est-ce que quelqu'un ici veut faire manger du nombre à Minix? Si c'est le cas, je peux
me laisser convaincre d'ajouter un ENABLE_FPU dans la prochaine sortie, désactivé par
défaut. Je me fiche de MMX, c'est bien trop exotique pour Minix.
Q: Existe t'il des inconsistances dans la syntaxe de l'assembleur sous MINIX?
R: Les fichiers en langage assembleur pour Minix n'utilisent pas toujours la même
syntaxe. Le problème a été discuté lors de
cet échange sur le groupe de discussion comp.os.minix
en mai et juin 2004.
Traduction Vincent Niarfeix
|