mercredi 3 septembre 2014

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.

Aucun commentaire:

Enregistrer un commentaire