[logo]     Programmer dans l'environnement Minix 3 [logo]

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