Répondre complètement à cette question n'est pas simple. De manière pratique, le système d'exploitation est le logiciel le plus important de la machine, puisqu'il fournit :
Tout programme est concerné : il est important d'appréhender la façon dont fonctionne un système d'exploitation pour améliorer l'efficacité de ses propres programmes ;
Tout programmeur est susceptible de rencontrer les mêmes problèmes de mise en oeuvre dans son propre domaine : pas la peine de réinventer la roue.
C'est un sujet intéressant en soi, dont l'objectif est la recherche de l'efficacité, nécessitant une étude théorique approfondie mais dont l'objectif est la fourniture de solutions réalisables en pratique : c'est une excellente approche du métier d'ingénieur !
Pour que les programmes puissent s'exécuter de façon portable et efficace, il faut pouvoir gérer simultanément :
Ne sont pas des systèmes d'exploitation :
En fait, tous ces programmes s'exécutent dans un mode non privilégié, car ils n'ont pas besoin d'un accès privilégié au matériel. En revanche, le système d'exploitation fonctionne typiquement en mode privilégié, pour pouvoir accéder a toutes les fonctionnalités du processeur. Ainsi, le système d'exploitation est protégé par le matériel contre les erreurs de manipulation (mais il existe des systèmes d'exploitation s'exécutant sur du matériel non protégé, comme par exemple le DOS sur les anciens IBM PC).
Un système d'exploitation a pour but :
Ils constituent l'interface entre le système d'exploitation et les programmes d'application (ou leurs bibliothèques) qui s'exécutent en mode non privilégié (aussi appelé parfois mode utilisateur. Ils sont realisés au moyen d'instructions spécifiques (les << traps >>, ou interruptions logicielles), qui permettent le passage en mode privilegié (aussi appelle mode noyau, ou << kernel >>), lorsqu'il existe sur le processeur.
Au niveau du processeur, le mode noyau se différencie habituellement du mode utilisateur par les fonctionnalités suivantes :
La différence entre mode noyau (privilégié) et mode utilisateur (non privilégié) est gérée directement au niveau du processeur. Elle n'a rien à voir avec la notion de super-utilisateur mise en oeuvre sur certains systèmes d'exploitation, qui est gérée au niveau logiciel dans le code du système d'exploitation. En fait, même le super-utilisateur d'un système passe le plus clair de son temps Cours de systèmes d'exploitation
UNIX est l'un des systèmes d'exploitation les plus populaires au monde, en raison du grand nombre d'architectures qu'il supporte. Il fut à l'origine développé en tant que système d'exploitation multitâches pour mini-ordinateurs et grands systèmes vers l'année 1970, mais a bien évolué depuis pour devenir l'un des systèmes les plus utilisés, en dépit de son interface parfois déroutante et de son manque de réelle standardisation.
La raison de la popularité d'UNIX ? Beaucoup de programmeurs le ressentent comme La Vérité; Le Vrai Système d'Exploitation, presque de manière religieuse. D'où le développement de Linux, par un groupe évolutif de programmeurs UNIX désirant mettre les mains dans le cambouis et réaliser leur propre système.
Il existe des versions d'UNIX pour beaucoup d'ordinateurs, depuis les ordinateurs personnels jusqu'aux grosses machines comme le Cray Y-MP. La plupart de ses implémentations pour PC sont lourdes et onéreuses. A l'heure ou nous écrivons ces lignes, une version pour une seule machine de l'UNIX System V de AT&T pour i386 coûte environ US$1500.
Linux est une version d'UNIX gratuite et librement diffusable développée à l'origine par Linus Torvalds à l'université de Helsinki, en Finlande(août 1991). Linux a été développé avec l'aide de nombreux programmeurs et spécialistes UNIX, grâce au réseau mondial Internet, autorisant quiconque ayant suffisamment de connaissances à participer activement à l'évolution du système. Le noyau de Linux n'utilise aucun code en provenance de AT&T ou de quelque autre source propriétaire, et la plupart des programmes disponibles pour Linux est développée par le projet GNU à la Free Software Foundation à Cambrige, Massachusetts. Toutefois, des programmeurs du monde entier ont contribué à l'ensemble.
Les prémices du développement de linux furent la maîtrise de la commutation de tâches du mode protégé du processeur 80386, tout fut écrit en assembleur. Linus écrit:
``Après ça, tout coulait de source: encore de la programmation touffue, mais j'avais quelques périphériques, et le déboguage était plus facile. C'est à ce stade que j'ai commencé à utiliser le langage C, ce qui a certainement accéléré le développement. C'est aussi à ce moment que j'ai commencé à prendre au sérieux mes idées mégalo de faire un "Minix meilleur que Minix". J'espérais un jour pouvoir recompiler gcc sous Linux...
``Deux mois pour le code de base, puis un peu plus jusqu'à ce que j'aie un pilote de disque dur (sérieusement bogué, mais par chance il fonctionnait sur ma machine), et un petit système de fichiers. C'est à cette époque que j'ai diffusé la version 0.01 [fin août 1991]: Ce n'était pas très beau, je n'avais pas de pilote de disquette, et ça ne pouvait pas faire grand chose. Je ne pense pas que quelqu'un ait un jour compilé cette version. Mais j'étais pris au jeu, et je ne voulais plus m'arrêter tant que je ne pouvais pas jeter Minix aux orties.''
Aucune annonce de Linux version 0.01 ne fut jamais faite. Ce n'était même pas exécutable; l'archive ne contenait que les rudiments des sources du noyau, et considérait que vous aviez accès à un système Minix pour compiler Linux et jouer un peu avec.
Linus écrit dans comp.os.minix,
`` Vous regrettez les beaux jours de Minix-1.1, lorsque les hommes étaient des hommes et écrivaient leurs propres pilotes de périphériques ? Vous manquez d'un superbe projet et vous languissez après un système que vous pourriez modifier à votre convenance ? Vous êtes frustrés que tout fonctionne sous Minix ? Plus de nuits blanches passées à tenter de faire fonctionner un programme récalcitrant ?
Alors ce message pourrait bien être pour vous.
`` Comme signalé il y a un mois, je travaille actuellement sur une version libre et gratuite d'un système ressemblant à Minix pour les ordinateurs AT-386. J'ai finalement atteint un stade où il est utilisable (bien qu'il puisse ne pas l'être pour vous, selon ce que vous désirez), et je compte diffuser les sources pour une diffusion plus large. Il s'agit juste de la version 0.02... mais j'ai pu exécuter bash, gcc, gnu-make, gnu-sed, compress, etc. avec succès sous ce système.
Après la version 0.03, Linus passa le numéro de version directement à 0.10, puisque de plus en plus de gens commencèrent à travailler sur le système. Puis, après plusieurs autres révisions, Linus gonfla à nouveau le numéro pour sortir la version 0.95, afin de refléter son impression: Linux était prêt pour une version ``officielle'' très prochainement. (Généralement, un programme ne se voit attribuer le numéro de version 1.0 que lorsqu'il est théoriquement complet, ou sans bogue). Ceci se passait au mois de mars 1992. Presque un an et demi plus tard, fin décembre 1993, le noyau de Linux en était encore à la version 0.99.pl14... Approchant 1.0 de manière asymptotique. Certains pensaient que la version 1.0 ne verrait jamais le jour.