1890-1950 - Fonctionnement inhérent au système Les tout premiers ordinateurs intégraient l'équivalent de ce que fait aujourd'hui un système d'exploitation. Vous (l'opérateur) faisiez également partie du système d'exploitation. Vous actionniez les commutateurs de registre (ou utilisiez une carte perforée) et échangiez physiquement les fils du bus (pensez au poste de téléphoniste d'antan) et la mémoire était reliée (par des fils physiques) directement aux ampoules électriques (le moniteur de l'époque) et aux imprimantes (le stockage à long terme) de telle sorte que la sortie du programme s'allumait et s'imprimait directement sur le périphérique au moment où elle était placée dans le tampon de la mémoire de sortie. Aucun pilote n'était nécessaire pour ces appareils car (en raison de la façon dont les fils physiques étaient acheminés) ils "fonctionnaient tout simplement" (il n'existait pas non plus de moniteur à l'époque). En fait, il allait falloir attendre quelques décennies avant qu'un affichage numérique soit inventé pour que vous puissiez voir les nombres que vous aviez déjà entrés dans le registre et la sortie sous forme de nombres décimaux ; les imprimantes ont régné sur toute cette époque jusqu'aux moniteurs ). Ils étaient câblés exactement comme ils devaient l'être pour fonctionner correctement. Rien de tout cela n'a vraiment changé avec le passage du mécanique (années 1890) à l'électrique, de l'analogique (années 1910) au numérique (années 1930). Cette architecture "Plug N Play" a été remplacée par le système d'interruption à cette époque et n'a refait surface qu'à la fin des années 90 ; bien sûr, à ce moment-là, il y avait beaucoup moins de branchements. Avec les interruptions, les périphériques étaient autorisés à prendre le temps de l'unité centrale, ce qui permettait des architectures qui n'étaient pas directement liées au matériel, mais il a fallu plusieurs générations pour que ce soit vraiment le processus rationalisé que nous voyons dans l'architecture x86 (et plus récente) ; les premiers systèmes se heurtaient souvent à d'horribles conditions de course, à la compatibilité du matériel, à l'utilisation de la technologie de l'information et à l'utilisation de l'informatique. \delay et d'autres comportements bizarres en ce qui concerne les interruptions. Comme chaque machine utilisait des architectures radicalement différentes (et expérimentales) à cette époque, presque tous les dispositifs étaient fabriqués sur mesure pour la machine sur laquelle ils travaillaient.
1950-1973 - Fonctionnement au sein d'un système Cette époque a vu l'avènement de la plupart des fonctionnalités auxquelles nous pensons lorsque nous parlons d'un véritable système d'exploitation. Le débogage, les langages de programmation, les utilisateurs multiples, les tâches multiples, les terminaux, les lecteurs de disques, la mise en réseau, la normalisation des composants, etc. ont tous été introduits à cette époque. Cette époque a vu un pas de géant vers la standardisation de la plupart de ces éléments, ce qui signifie que nous avions des appareils plus standardisés, mais que chaque système d'exploitation était conçu à la main pour chaque machine, ce qui signifiait que les fonctionnalités du système d'exploitation étaient sévèrement limitées par ce que les ingénieurs qui concevaient ce système particulier décidaient qu'ils avaient besoin. À cette époque, il existait une zone grise importante dans la définition d'un système d'exploitation, car les différentes architectures géraient les choses de manière très différente et une machine à usage plus général aura besoin de beaucoup plus de systèmes d'exploitation qu'une machine qui comprend du matériel pour effectuer les mêmes tâches. Le fait est que le matériel sera toujours plus rapide que le logiciel et que pratiquement tout ce qui est fait en logiciel peut théoriquement être fait en matériel (il s'agit d'une question de coût). \flexibility\size\time\etc ce qui nous empêche encore aujourd'hui de réaliser des versions matérielles presque pures de tous les produits). Un système d'exploitation a été conçu pour un ordinateur ou un type d'ordinateur particulier ; il ne fonctionnerait pas ailleurs. Chaque nouvelle conception d'ordinateur nécessitait que tous les logiciels de bas niveau du système d'exploitation soient réécrits à partir de zéro pour fonctionner avec un modèle de machine particulier. Vers la fin de cette période, un nouveau système d'exploitation est apparu, qui allait bientôt changer ce paradigme : UNIX, écrit aux laboratoires Bell par Ken Thompson et Dennis Ritchie.
1973 - Fonctionnement entre systèmes Un seul programme a changé tout cela, mais ce n'était pas UNIX. Il s'agit du compilateur C (qui a été fabriqué dans un garage par Ken Thompson et Dennis Ritchie après que Bell Labs l'ait supprimé). Jusqu'alors, chaque fois que vous écriviez du code, il s'agissait soit de code machine (code que la machine comprend directement mais qui n'est pas portable), soit d'un langage qui compilait votre code en code d'octets (code qui est interprété par un autre programme lorsqu'il s'exécute). L'énorme différence que le langage C a apportée aux systèmes d'exploitation est la possibilité de faire ce que l'on appelle de la compilation croisée en code machine. Cela signifie que le code peut être écrit une seule fois et compilé pour fonctionner sur de nombreux types de machines différentes, à condition qu'un compilateur ait été écrit pour cette machine. Les systèmes d'exploitation doivent être écrits en code machine parce que le code machine est littéralement le seul code que la machine connaisse.
Je dirais que ce n'est que lorsque Ken et Dennis ont compilé pour la première fois le noyau UNIX à l'aide d'un compilateur C qu'un véritable système d'exploitation au sens moderne du terme a vu le jour. Avant cela, un système d'exploitation était soit un objet physique, soit simplement un morceau d'espace mémoire préinitialisé conçu spécifiquement pour une machine particulière. L'ajout de nouveaux dispositifs au système nécessitait littéralement la réécriture du code du "noyau". Désormais, le système d'exploitation UNIX conçu pour une machine particulière pouvait être recompilé et exécuté sur d'autres machines sans TOUT réécrire (tant que cette machine était capable de compiler un compilateur C à partir d'un environnement de démarrage, le reste du système d'exploitation pouvait être écrit dans un code C de relativement haut niveau).