mercredi 3 septembre 2014

Du nouveau chez Microchip

Je viens de découvrir que Microchip offre maintenant de nouveaux PIC32MX1xx/2xx. Lorsque j'ai créé mon projet VPC-32 il y a de ça un peut plus d'un an, le plus gros PIC32MX disponible en format PDIP-28 était le PIC32MX150F128B qui dispose de 128Ko de flash et 32Ko de RAM. Le PIC32MX170F256B qui est aussi en format PDIP-28 double les quantités de mémoire, soit 256Ko de flash et 64Ko de RAM. Pour le reste les 2 MCU sont identiques donc je n'ai qu'à remplacer le PIC32MX150F128B dans le VPC-32 par le nouveau PIC32MX170F256B pour doubler les quantités de mémoire.


mise à jour 2014-09-08

J'ai reçu les PIC32MX170F256B ce matin. J'ai remplacé le PIC32MX150F128B sur le prototype du projet VPC-32, fait quelques modifications mineures au projet recompilé,programmé et testé. En Moins de 10 minutes le VPC-32 a maintenant 48Ko de RAM au lieu des 16Ko. C'est malheureusement insuffisant pour installer retroBSD qui requiert 512Ko de flash et 128Ko de RAM.

Qu'est-ce qu'un système d'exploitation

Cet article fait suite à mon article précédent sur CP/M. J'y explique brièvement le pourquoi et le comment des systèmes d'exploitations.

Qu'est-ce qu'un système d'exploitation?

Un système d'exploitation a pour but de faciliter l'utilisation de l'ordinateur et d'assurer la sécurité et l'intégrité des données. Disons qu'au départ l'objectif principal était le premier car au début les besoins en sécurité n'était pas aussi évidents. Donc CP/M et DOS n'offrait aucune sécurité mais offrait des services aux programmeurs d'applications en leur offrant des interfaces simplifiées et standardisées pour l'accès au matériel, c'est à dire clavier, disques, imprimantes, vidéo, etc. Malgré tout il était possible de contourner ces services pour accéder directement au matériel. Ainsi à l'époque de MS-DOS beaucoup de programmeurs de jeux manipulaient directement la mémoire vidéo pour améliorer la vitesse d'exécution. l'interface standard pour la vidéo passait par l'interruption 10hex et son contournement provoquait souvent des problèmes de compatibilité mais les fabricants de jeux considéraient que c'était le prix à payer pour obtenir des jeux plus dynamiques.

Plus tard est apparu la nécessité de limiter les accès aux informations mais aussi au matériel. Les nouveaux microprocesseurs ont des gestionnaires de mémoires qui permettent de diviser celle-ci en segments et de contrôler l'accès à ces segments. Ainsi les PIC32MX de Microchip permettent de fragmenter aussi bien la mémoire flash que la mémoire des données en segment noyau et utilisateur. Mais les processeurs d'usage général comme on retrouvent dans nos ordinateurs ont des gestionnaires encore plus sophistiqués qui permettent d'attribuer des segments mémoire pour chaque application.

Structure d'un système moderne

Comme on le voie sur ce diagramme l'espace mémoire est divisé en espace noyau et en espace utilisateur. Les applications elle-même sont isolées les unes des autres dans leur propre segments de mémoire les protégeant les unes des autres. De cette façon une application défectueuse ou malicieuse ne peut pas affecter le noyau ou une autre application.

La question alors est comment les applications font-elles pour accéder aux périphériques? Elle doivent obligatoirement passer par une interface spéciale basée sur une interruption et qu'on appelle syscall. En fait les programmeurs d'applications n'ont pas la plupart du temps à se soucier de cette interface car les systèmes modernes offrent des couches d'abstractions supplémentaire sous formes de librairies. Sous windows 32bits ces librairies s'appellent user32.dll, kernel32.dll, gdi32.dll, mmedia32.dll, etc (les versions 64 bits existent aussi). Les interfaces (liste de fonctions) pour ces librairies sont documentées et utilisées par les programmeurs, simplifiant grandement la vie de ceux-ci. Chaque application charge dans son espace mémoire une copie des DLL qu'elle utilise.

Le niveau d'abstraction augmente continuellement, alors que dans les années 90 les programmeurs utilisaient directement l'API32 (Application Programming Interface) de Windows, c'est de plus en plus rare aujourd'hui avec les framework comme .NET1, METRO, QT, etc. Ces framework ne sont rien d'autre que des librairies logicielles construites par dessus les API de bases mais qui simplifient encore plus le travail des programmeurs d'applications. Le nombre de couches logicielles augmente sans cesse, mais la complexité des systèmes modernes exigent de plus en plus d'abstraction pour réduire le temps de développement et donc le coût des logiciels.


Quelques liens


1) En ce qui concerne .NET il s'agit plus que d'un ensemble de librairies. Les applications sont compilées pour une machine virtuelle qui exécute du bytecode. Mais cette machine doit-elle utiliser l'API32 ou l'API64 pour s'interfacer avec le système d'exploitation.

mardi 2 septembre 2014

Il était une fois CP/M

Cet article concerne l'histoire de l'informatique, j'y parle du premier système d'exploitation pour micro-ordinateur, CP/M l'ancêtre du DOS.

Les premiers ordinateurs n'avaient pas de système d'exploitation et n'était pas interactif. Un programme était écris pour être ensuite chargé dans la machine pour exécution. Il y avait alors sur ces machines ce qui s’appelait un programme de contrôle. Ce programme présentait à l'opérateur une interface de commande simple lui permettant de charger et d'exécuter les programmes et autres tâches nécessaires à l'utilisation de la machine. Les programmes étaient souvent exécutés en lot (batch). Les programmes étaient fournis à la machine sous forme de ruban ou de carte perforées. Ensuite il y a eu les mainframe, machines très coûteuses qui fonctionnaient en temps partagées. C'est à dire que le système d'exploitation permettait à plusieurs utilisateurs de se connecter au serveur à partir de terminaux en mode texte et d'exécuter un programme. Ces premiers systèmes d'exploitation étaient conçus pour une machine spécifique. Lors de mon premier cours d’informatique je programmais sur des cartes perforées dans un langage appelé FORTRAN IV. On écrivait notre programme à la main sur papier pour ensuite transcrire ce code source sur des cartes en utilisant la machine appelée justement perforatrice1. Nous déposions nos cartes sur une étagère à l'entrée d'un local et le lendemain nous allions chercher le résultat sur la même étagère. Tous les programmes étaient exécutés en lot pendant la nuit. Ce n'était pas vraiment excitant l'informatique à cette époque. C'était au début des années 70.

Control Program for Micro-computer

En 1974 la jeune compagnie Intel sort le microprocesseur 8080 et un petit ordinateur appellé intellec-8. Un certain Gary Kildall travaillait pour Intel à ce moment. Cet pour cet ordinateur qu'il devellopa la première version de CP/M, signifiant Control Programm for Micro-computer. Puis peut de temps après une compagnie du Nouveau Mexique appelée Micro Instrumentation and Telemetry Systems, MITS a mis sur le marché le premier micro-ordinateur populaire digne de ce nom, l'Altair 8800 qui utilisait le microprocesseur 8080 d'Intel. C'est alors que Gary Kildall a décidé de créer une nouvelle version de CP/M qui permettrait de porter plus facilement CP/M sur d'autres ordinateurs que l'intellec 8. Sa femme et lui on créé une compagnie qui s’appelait Digital Research Inc dans le but de vendre ce programme baptisé CP/M,

BIOS

De nombreuses compagnies sont entrées dans le marché des micro-ordinateurs en utilisant l'Intel 8080 ou sa version amélioré le Z80 fabriqué par Zilog2. Gary Kildall devait donc porté son CP/M pour ces différentes machines. C'est alors qu'il eu l'idée de séparer les fonctions de bases qui contrôle directement le matériel des fonctions de plus haut niveau. De cette façon pour modifier CP/M pour qu'il fonctionne sur une autre machine il n'avait qu'à modifier ces fonctions de bases sans avoir à modifier le reste du système. Il baptisa cette couche d'abstraction matérielle le Basic Input Output System, BIOS.

Évolution

MS-DOS de Microsoft a été directement inspiré par CP/M. Lorsque les PC sont sortie sur le marché avec leur processeur 16 bits Intel 8088 et 8086. Microsoft a créé MS-DOS en s'inspirant de CP/M. Les fabriquants de PC fournissaient la couche d'abstraction matérielle qui avait été standardisé en conservant le nom que lui avait donné Kildall, BIOS. Le BIOS interfaçait avec le DOS via les fonctions de l'interruption 13hex. Les applications interfaçaient DOS via les fonctions de l'interruption 21hex.

Système d'exploitation

Les interfaces utilisateurs graphiques apparues avec Apple MacIntosh et Microsoft Windows ont mis fin à l'évolution de CP/M et MS-DOS, DR-DOS3 et IBM-DOS4, quoiqu'il existe encore une version libre appelée FREEDOS ainsi que l'émulateur DOSBOX qui tournent sur les systèmes d'exploitation modernes tel que Linux,OSX et Windows.

Aujourd’hui tous les systèmes d'exploitations utilisent cette structure en multi-couches appelée en anglais software stack. Au plus bas niveau il y a la couche d'abstraction matérielle Hardware Abstraction Layer HAL. Au dessus de celle-ci il y a les pilotes de périphériques. Ensuite viens le noyaux du système d'exploitation qui dans un système moderne est le seul qui est autorisé à parler au pilotes de périphériques. Finalement il y a les applications dans la couche utilisateur. Chaque couche présente une interface standardisée à la couche supérieur ce qui a 2 avantages. Premièrement ça rends le système plus facilement transportable sur une autre machine ou architecture car les couches supérieures ne sont pas affectées par les détails de l'implémentation des couches inférieures et n'ont donc pas besoin d'être modifiées chaque fois qu'une couche inférieure l'est. Deuxièment ça facilite la création de programmes ou pilotes, le programmeur n'ayant qu'à connaître les fonctions de l'interface sans se soucier des détails sous-jacents.

liens:
article sur computer hystory museum
Intellec 8
Altair 8800


1) Il existait aussi des trieuses de cartes pour venir au secours de ceux qui avaient le maleur de laissé tomber leur boite à chaussure remplie de cartes perforées. C'est peut-être pour ça qu'à l'époque il y avait une instruction par carte et que chaque carte débutait avec un numéro de ligne.
2) Zilog existe encore et est maintenant un fabriquant de Microcontroleurs. Ils vendent encore une version CMOS du Z80. L'original était en technologie NMOS. Le Z80 avec le 6502 est un des rares micro-processeur de cette époque qui est encore fabriqué.
3) Pour répondre à la concurrence de Microsoft, Digital Reseach inc. avait développé son propre système DR-DOS avant que la compagnie soit rachetée par Novell.
4) IBM-DOS était développé par Microsoft et c'est d'ailleurs ce contrat avec IBM qui a fait la fortune initiale de Microsoft.