À quoi ressemble un système d'exploitation sans shell?

41

Un shell tel que bash ou command.com (jusqu'à Windows ME) ou CMD.EXE (dans les versions ultérieures) fournit une interface qui accepte (entre autres choses) les commandes de l'utilisateur. À quoi ressemble un système d'exploitation avant l'exécution d'un shell? Comment les systèmes étaient-ils utilisés avant le développement du premier shell (par exemple, UNIX au début des années 1970)? Si un ordinateur ne peut même pas accepter de commandes (il n'y a pas de ligne de commande), comment un utilisateur peut-il interagir avec elle? Quelle est cette interface la plus basique? Puis-je exécuter cette interface dans un émulateur de terminal ou n'y a-t-il aucun moyen de passer derrière un shell?

44taka
la source
2
(En passant: le terme shell ne s'applique pas seulement aux obus de ligne de commande .)
Arjan
2
@Ramhound Bien sûr, vous pouvez interagir avec un système sans ligne de commande. On peut discuter des mérites de diverses approches de conception d’interface utilisateur toute la semaine, mais il était certainement possible d’interagir à la fois avec Mac OS classique et avec Altair, même si aucune ligne de commande n’était disponible.
un CVn
4
La plus interface de base serait probablement un panneau de commande comme dans le PDP11 / 04 , etc.
Tog
1
Celui-ci ressemble à un jeu d'échecs raspberrypi.org/archives/4300
Nico Burns Le
1
On dirait un arbre qui tombe dans une forêt sans personne pour le voir.
nathan hayfield

Réponses:

35

À quoi ressemble un système d'exploitation avant l'exécution d'un shell?

Dépend du système d'exploitation et de la façon dont vous le configurez. Linux peut être configuré pour écrire du texte de démarrage sur un périphérique de la console, qu’il s’agisse d’une console en mode texte, d’une console framebuffer ou d’un port série. Il peut également être configuré pour être parfaitement silencieux. Certains systèmes d’exploitation / systèmes peuvent écrire des informations de diagnostic sur une mémoire non volatile à laquelle on peut accéder en mettant le système en mode développeur, débogage ou diagnostic. De nombreux systèmes d'exploitation prennent en charge la sortie des informations de démarrage et de diagnostic sur une certaine forme d'UART, laquelle peut être disponible sur l'unité même si elle est cachée de l'utilisateur (google "Ajouter un port série à DD-WRT" pour des exemples de cas où les fabricants cachent des ports série et comment. vous pouvez y accéder).

Un système d'exploitation n'a pas du tout besoin d'un écran externe, c'est simplement un autre périphérique pour le système d'exploitation.

Comment les systèmes étaient-ils utilisés avant le développement du premier shell (par exemple, UNIX au début des années 1970)?

Essentiellement (et en laissant beaucoup, mais cela devrait vous donner une idée) - Vous avez chargé votre programme, soit en faisant basculer les commutateurs sur un panneau, soit en utilisant un lecteur de bande (ces périphériques écrivent directement en mémoire sans intervention de la CPU), puis démarrez la CPU avec un autre commutateur. La CPU exécute ce programme, génère sa sortie et s’arrête. Il s’agit d’un traitement par lots plutôt que d’un traitement interactif. Si vous vouliez exécuter un programme différent, vous deviez recommencer.

Si un ordinateur ne peut même pas accepter de commandes (il n'y a pas de ligne de commande), comment un utilisateur peut-il interagir avec elle?

Je ne suis pas un expert dans ce domaine, mais de vieux, anciens ordinateurs tels que Altair, IMSAI et PDP-8 et ainsi de suite avaient des commutateurs en face avant qui contrôlaient directement le processeur et pouvaient directement lire et écrire de la mémoire sans intervention du processeur.

Quelle est cette interface la plus basique?

Je crois que la plupart, sinon tous les processeurs modernes ont un "port JTAG" qui permet le même type d'opérations directes. N'oubliez pas que pendant longtemps, la plupart des ordinateurs étaient dotés d'une ROM ou d'un micrologiciel qui prend le contrôle du système lorsqu'il est allumé avant de le transférer à un système d'exploitation. Ici, des utilitaires de pré-démarrage peuvent exister, ou un mécanisme minimal de chargement de ces utilitaires existe. Certains chargeurs de démarrage tels que U-Boot sont accessibles via le port série. Les chargeurs de démarrage ne fonctionnent pas "derrière" le système d'exploitation, ils chargent le système d'exploitation, le contrôle manuel, puis ils ne fonctionnent plus.

Puis-je exécuter cette interface dans un émulateur de terminal ou n'y a-t-il aucun moyen de passer derrière un shell?

Non, vous avez besoin d'une interface JTAG. C'est plonger dans le domaine de l'électronique et j'avoue ne pas en savoir beaucoup, sauf que mon GuruPlug en est livré avec un et que je peux directement programmer la puce flash sur la carte du GuruPlug, ce qui signifie que si quelque chose tue le chargeur de démarrage sur le GuruPlug, j’ai une méthode "indépendante du processeur" pour le faire clignoter.

LawrenceC
la source
4
L’interface JTAG permet (avec l’aide d’un automate dédié) d’accéder aux interfaces de test de tous les composants en contournant les modes de fonctionnement normaux. Selon la fonctionnalité de test exposée, vous pouvez programmer des mémoires, contrôler les entrées / sorties, démarrer / arrêter la CPU ou lire les registres internes.
Chaos_99
23

Un système d’exploitation n’a pas à fournir de shell car le terme est couramment utilisé de nos jours (application acceptant les commandes de manière interactive de la part de l’utilisateur), mais un tel système d’exploitation ne «ressemblera» en rien à la utilisateur. Comme Oliver Salzburg le mentionne, il suffirait probablement d'afficher un écran vide (s'il supporte la sortie d'affichage), bien qu'il n'y ait aucune raison pour cela. Prenons l'exemple de la sortie de diagnostic du noyau Linux au cours du processus de démarrage et d'initialisation du noyau.

Le shell, qu’il s’agisse d’un shell graphique, d’un interpréteur de ligne de commande ou de quelque chose d’autre, utilise les fonctions fournies par le système d’exploitation pour exécuter des tâches telles que les commandes de lecture, les processus de lancement, la redirection des E / S, etc.

Cependant, il n'y a aucune raison pour que l'application qui utilise ces installations doit être un shell .

Auparavant, les systèmes d'exploitation constituaient simplement un ensemble de "routines utiles" que chaque application devrait sinon réécrire à partir de zéro, et les ordinateurs étaient essentiellement des dispositifs de traitement par lots. Des éléments tels que les E / S de fichiers, de disques et d'imprimantes ont probablement été parmi les premiers à être rassemblés dans ce que l'on appelle maintenant un système d'exploitation, suivis de la planification des processus (il convient de noter que le début des années 1960 qu'Apollo Guidance Computer était un ordinateur multitâche). Les applications pouvaient alors appeler le système d'exploitation au lieu d'utiliser leurs propres routines, ce qui réduisait la complexité de la programmation et permettait probablement de réduire la taille du code ou le temps d'exécution (car ces installations système pouvaient être fortement optimisées et déboguées une fois, après quoi tout le monde en profiterait) . Au fur et à mesure que les ordinateurs se généralisaient, les systèmes d'exploitation ajoutaient des fonctionnalités largement centrées sur l'utilisateur, telles que la possibilité pour l'utilisateur d'interagir avec l'ordinateur et de donner des commandes de manière interactive; Les coques graphiques ne sont que le prolongement de cette ligne de raisonnement.

De plus, il n'y a pas si longtemps (pensez jusqu'à la fin des années 1980), il était encore assez courant d'écrire des applications pour s'exécuter sur du matériel informatique personnel dépourvu, sans l'aide d'un système d'exploitation ordinaire. Cela était particulièrement utile pour les jeux, car cela évitait la surcharge de mémoire et de traitement du système d'exploitation proprement dit, mais je suis sûr qu'il y avait aussi d'autres exemples. Dans ces cas, dans une certaine mesure, l'application était son propre système d'exploitation et, par conséquent, l'interface utilisateur fournie par cette application était le shell.

un CVn
la source
4
De nos jours, il est très courant d'écrire des programmes fonctionnant sans système d'exploitation, probablement plus que jamais. De nos jours, pratiquement tout ce qui contient de l’électronique a un microcontrôleur. Certains de ces systèmes embarqués tels que les voitures ou les routeurs ont des systèmes d'exploitation, mais les choses simples comme les thermostats, les machines à laver, etc.
Jeanne Pindar
1
@JeannePindar Bon point; J'ai précisé que je voulais dire dans le contexte des ordinateurs personnels.
un CVn
11

Les premiers ordinateurs n'avaient pas de système d'exploitation au sens où nous utilisons le mot aujourd'hui. Ils ont exposé les fonctions implémentées dans le matériel directement à tout programme exécuté sur celui-ci. Il n'y avait jamais qu'un seul programme en cours d'exécution à la fois. Le programme lui-même devait contrôler toutes les tâches, rien n’était fait «en arrière-plan» par un système d’exploitation.

Mais il y avait toujours un point d'entrée pour l'utilisateur pour démarrer un programme. Si vous étirez le mot, vous pourriez appeler cela un "shell". Mais au fond, c’était juste le matériel qui attendait que l’utilisateur entre le premier bit du programme à exécuter. Que ce soit sous la forme de boutons enfoncés, d'interrupteurs à bascule, de fils connectés à un tableau, de cartes perforées, de films perforés ou de bandes magnétiques. Peut-être pourraient-ils même choisir parmi plusieurs options de programme chargées précédemment. Cependant, même la sélection dans une liste affichée sous forme de lumières allumées en appuyant sur un bouton situé à côté peut déjà être considérée comme un "coquillage".

Donc, si votre définition de "shell" est "une interface qui accepte les commandes d'un utilisateur", il ne reste alors plus de temps, du moins pour les appareils que vous appelleriez même vaguement un ordinateur.

Vous voudrez peut-être consulter la très bonne page de Wikipédia sur l’histoire de l’informatique , bien qu’elle ne se concentre pas beaucoup sur la perspective entrée / sortie.

Chaos_99
la source
6

Ce sera probablement un écran vide.

Le shell s'appelle probablement shell car c'est un shell autour du noyau (le noyau étant le système d'exploitation). Dans un sens, il s’agit donc de l’interface utilisateur du système d’exploitation, quelle que soit l’interface utilisée.

Si un système d'exploitation n'avait qu'une seule fonction, ce qui serait de fermer l'ordinateur, et vous construire un programme qui accepte une entrée du clavier et invoque ensuite cette fonction, alors que est la coquille. Il n’est pas nécessaire d’avoir une interface de ligne de commande complexe pour créer quelque chose d’interface avec l’utilisateur.

Der Hochstapler
la source
2

D'un point de vue historique, je suppose qu'il y avait des cartes perforées ( https://en.wikipedia.org/wiki/Punched_card ). Pour interagir avec un système informatique. Mais je suppose que c'est trop en arrière pour votre question.

Daniel Stutz
la source
Les cartes perforées étaient (est) un mécanisme de stockage de données, pas une partie visible d'un système d'exploitation.
un CVn
2

Le premier système d'exploitation que j'ai utilisé (1981) après l'université était PRIMOS sur un mini-ordinateur Prime. Il s’agissait d’un système d’exploitation à temps partagé prenant en charge un certain nombre d’utilisateurs, chacun utilisant un terminal connecté à l’ordinateur via un câble RS232. Vous deviez vous connecter au terminal en donnant un nom d'utilisateur et un mot de passe. Votre session de terminal était une sorte de shell. Vous pouvez éditer des fichiers, compiler, exécuter tout ce que nous faisons de nos jours. Tous les terminaux avaient accès au même système de classement. En gros, ces terminaux n'étaient rien d'autre que des machines à écrire - pas d'éditeurs WYSISWYG, même emacs était un rêve.

Le système d’exploitation était structuré à peu près comme il est actuellement et pourrait être imaginé comme une couche de peaux d’oignons. La couche la plus interne avait des fonctionnalités de très bas niveau - comme le contrôle du matériel, l’accès à la mémoire. En allant vers l'extérieur, le système de fichiers serait ajouté, puis les couches d'utilisateurs. Dans votre programme, vous pourrez interagir avec certaines couches, mais pas avec les couches les plus profondes (vous ne pourrez donc pas vous mêler du temps partagé ou du matériel réel - voyants, etc.). Un ordinateur sans shell ressemblerait à l'une de ces couches internes, il pourrait peut-être accéder à un disque dur et à un lecteur de bande (vraiment!), Mais il ne saurait en savoir plus sur les fichiers ou les utilisateurs.

Pour démarrer un ordinateur ancien, vous deviez charger un ensemble d'instructions de base (par exemple, basculer des commutateurs physiques dans une séquence définie sur l'ordinateur). Cette séquence lancerait un deuxième petit programme, qui pourrait permettre au lecteur de bande de fonctionner. Ensuite, vous chargeriez un système plus complexe via le lecteur de bande, ce qui pourrait mettre le lecteur de disque en ligne. Vous pouvez imaginer un système d'exploitation sans shell ressemblant à l'un de ces chargeurs initiaux.

De nos jours, les ordinateurs ont des séquences similaires. Ainsi, lorsque vous démarrez la machine, celle-ci charge son BIOS, qui démarre les disques, les cartes réseau, la carte vidéo, etc., puis le BIOS recherche un programme spécifique sur le disque dur et l'exécute (sous Windows). au moins). Unix fait quelque chose de similaire: il configure progressivement le noyau en commençant par des modules très basiques et en s’appuyant sur ceux-ci jusqu’à l’invite de connexion.

Derek Knight
la source
1

Le système d'exploitation en tant que définition est plutôt ambigu. Est-ce un noyau lui-même? Est-ce le noyau et les outils d'accompagnement? Linux est le noyau mais GNU / Linux est le système d’exploitation basé sur le noyau Linux et les outils de projet GNU. Shell fait partie intégrante de ce système d'exploitation.

Cependant, une fois que Linux est terminé et que vous avez fini de "démarrer", vous devez lui dire quel programme exécuter. A partir de là, tout est entre les mains de ce programme particulier. Par défaut, il initsait quoi faire et peut éventuellement vous amener à un bel écran de connexion à l’interface graphique. Mais ça ne doit pas forcément être comme ça. Vous pouvez démarrer comme ça

kernel /boot/vmlinuz-2.6.30 root=/dev/sda1 ro init=/bin/fancy

Ensuite, le programme /bin/fancyaffichera "Hello world!". Nous n'avons pas besoin de shell pour cela. Si vous souhaitez démarrer un autre programme, lancez un nouveau processus enman 2 fork et man 2 execve, ou lisez à partir d'un terminal et acceptez les entrées de l'utilisateur. Toujours pas besoin de shell.

À mon avis, le système d'exploitation shell est un programme capable de lire les entrées de l'utilisateur, puis de démarrer un autre programme. Si vous y réfléchissez, vous comprendrez pourquoi on aimerait écrire un tel programme.

Même si vous n'avez pas besoin de lire les entrées de l'utilisateur de manière interactive, il est beaucoup plus pratique d'écrire un script shell simple pour votre tâche. Dans ce cas, il s'agit simplement d'un interpréteur de commandes shell stockées. Vous pouvez aussi bien écrire votre programme en interprète d’une autre langue.

Miroslav Koškár
la source
1

Les systèmes d'exploitation sans shell de ligne de commande ni interface graphique ont de nombreux autres types de "faces".

Les systèmes embarqués font leur travail sans aucune interface utilisateur, comme le système de gestion du moteur de votre voiture (auquel vous pouvez accéder d'une certaine manière via l'interface OBD2 et un terminal approprié). Ou peut avoir des claviers numériques, des boutons ou autre chose (pensez: four à micro-ondes, ascenseur ou la façade d'un système de son moderne). Que vous considériez cela comme une coquille est bien sûr subjectif.

Voici une recette de haut niveau montrant comment, en tant qu'amateur, vous pouvez créer un ordinateur utile sans shell:

  • Construisez une carte de circuit pour un microcontrôleur ou obtenez une carte générique.
  • Branchez-le pour piloter des périphériques utiles, tels que, par exemple, un capteur d'humidité et une vanne d'eau. Le microcontrôleur a des broches périphériques à cet effet: UART, GPIO, etc.
  • Écrivez le firmware pour surveiller le capteur et arroser le sol.
  • Téléchargez le micrologiciel via les outils de développement (aucun shell n’est donc requis sur l’ordinateur hôte pour charger et exécuter quoi que ce soit, et le micrologiciel est stocké dans la mémoire flash de la puce). La programmation peut impliquer que le microcontrôleur soit branché sur un tableau de programmation spécial, ou il peut y avoir un moyen de le faire alors qu'il est assis dans votre tableau. La carte s'interface avec votre PC (de nos jours via USB, par exemple) et vous utilisez certains outils: comme un IDE ou des outils de ligne de commande sur l'hôte.
  • Déployez la chose: il s’agit maintenant essentiellement d’une boîte noire électronique qui surveille en quelque sorte l’humidité du sol et active l’eau, sans autre entrée ni sortie.

Très tôt, les ordinateurs universels sans coque avaient un moyen de saisie, comme la lecture de cartes perforées. Mais bien sûr, il fallait distinguer les cartes perforées: une carte perforée donne-t-elle une commande spéciale à l'ordinateur ou s'agit-il d'un programme Fortran? Il fallait donc développer des "langages de contrôle des tâches", qui sont des lignes de commande de facto.

Avant les cartes perforées et les langages de contrôle des tâches, les programmeurs devaient basculer les commutateurs afin de fournir du code binaire à la machine. Vous avez peut-être entendu des récits d'anciens joueurs qui ont dû "basculer" dans la séquence d'instructions pour lancer un bootstrap. Cela se fait encore aujourd'hui, en quelque sorte: il existe toujours des appareils dotés de cavaliers ou de commutateurs DIP, et ils présentent certains avantages par rapport aux paramètres du microprogramme.

Kaz
la source
0

Le premier ordinateur sur lequel j'ai été bloqué était un Siemens 305 en 1977, j'apprenais le FORTRAN IV. Il y avait une machine à écrire pour exécuter des commandes et imprimer un message de diagnostic sur papier, un lecteur de cartes perforées, un lecteur / graveur de cassettes et une imprimante. Sans oublier le disque dur amovible de 40 Mo, environ 16 pouces. Donc, il y avait déjà un shell et l'interface était la machine à écrire.

ott--
la source
0

Je me souviens avoir utilisé un débogueur et un éditeur de texte (DDT et emacs) comme l’équivalent d’un shell de commande dans les années 1970. Donc, si vous exécutez emacs en mode console avec tout autre programme exécuté via eshell vers un débogueur qui exécute le programme, vous vivrez une expérience proche.

Notez qu'emacs dispose d'un environnement lisp complet. Ainsi, outre une bonne édition de l'historique des commandes et plusieurs terminaux virtuels, vous disposez d'une macro très performante et d'une fonction de script intégrée.

mpez0
la source