Comment sont programmées les machines de tous les jours (pas tant les ordinateurs et les appareils mobiles que les appareils, les montres numériques, etc.)? Quel type de code entre dans la programmation d'un distributeur Coca-Cola? Comment ma cafetière accepte-t-elle une heure préprogrammée et commence-t-elle à préparer une tasse de café des heures plus tard, lorsque cette heure arrive?
Est-ce que ces types de machines ont des systèmes d'exploitation à l'intérieur, ou est-ce encore plus basique? Sont-ils écrits en assembleur, en C ou dans une autre langue?
Et, je voudrais vraiment trouver une ressource qui répertorie ces systèmes d'exploitation ou systèmes de code sous-jacents, éventuellement même avec du code source si possible. Si quelqu'un connaissait une telle ressource (la recherche ne me rapportait rien), ce serait fantastique.
La plupart de ce dont vous parlez sont des systèmes embarqués où le C est un luxe souvent non disponible. Ils n'ont pas de logiciel au sens traditionnel. La plupart du temps, le logiciel est écrit en C, en assembleur ou même en code machine. C et ASM nécessitent que des compilateurs soient écrits pour les utiliser pour cette plate-forme. Le code machine est écrit en binaire sans compilateur.
Votre cafetière et les systèmes les plus simples comme celui-ci ne comportent pas de système d'exploitation. Ils se chargent simplement à partir d'une adresse de début en mémoire et vous y mettez votre code. Souvent, ces systèmes ont leur "code" gravé dans des EEPROM qui agissent comme le disque dur du système. Bousiller le code après avoir brûlé les bals, jeter les jetons reburn le code sur la puce et recommencer. Il existe des puces FPGA plus récentes que les appareils haut de gamme utilisent pour faciliter les tests, le déploiement, etc., mais c'est la même chose.
Les machines Coca-cola, les routeurs, etc. utilisent généralement un système d'exploitation en temps réel comme QNX, EMBOS ou parfois RTlinux si vous êtes chanceux. La plupart d'entre eux sont des systèmes d'exploitation propriétaires que vous achetez sous licence pour beaucoup d'argent, mais ils ont des compilateurs C, des pilotes pour travailler avec du matériel, etc.
http://www.segger.com/cms/embos.html
RTLinux
Ils utilisent des microcontrôleurs, le 8051 est le classique. Ce sont des cœurs 8 bits ou 16 bits, ils ont rarement un système d'exploitation. Le programmeur écrit le code pour initialiser les périphériques intégrés et implémenter les gestionnaires d'interruption. Les langages utilisés sont Assembly et C. Les travaux de débogage difficiles nécessitent un émulateur en circuit.
Il y a beaucoup de place au-delà de cela, avec des cœurs intégrés 32 bits (ARM est le gorille de 100 livres) qui démarrent une version intégrée de Linux et/ou la JVM Java Java.
Ce sont systèmes embarqués , et seraient programmés en utilisant un langage de très bas niveau tel que C ou Assembly. En général, un tel système fonctionnera sans système d'exploitation, bien que certaines "machines de tous les jours" plus récentes, telles que les lecteurs DVD Blue-ray et les routeurs sans fil, exécutent leur code au-dessus d'un système d'exploitation basé sur Unix.
Dans la lignée de ce que d'autres ont dit, de nombreux systèmes embarqués modernes exécutent également une saveur de fenêtres. Cela dépend de l'application. En outre, il existe une tendance dans de nombreux espaces à s'exécuter sur une plate-forme plus puissante avec un système d'exploitation, à gérer des cas tels que les lecteurs Blue-ray devant exécuter Java et d'autres cas où l'utilisateur final souhaite plus de fonctionnalités.
Pensons au processeur de votre bureau. Il ne fait qu'exécuter les instructions de la machine et, en soi, ne se soucie pas vraiment des "systèmes d'exploitation" ou des "programmes".
Vous allumez votre ordinateur, le processeur pointe vers la première instruction et il commence à s'exécuter.
Sur votre bureau, il commence à exécuter le "système d'exploitation". Mais il n'y a aucune raison pour que le processeur n'exécute aucun ensemble d'instructions que vous avez choisi. (Cela peut ne pas être très utile, car vous voudriez toujours afficher les résultats à l'écran, et cette fonctionnalité réside dans le système d'exploitation.) En même temps, si les instructions de votre machine se composaient des bons opcodes afin que le processeur produise la bonne séquence de signaux pour peindre une image sur le moniteur, tant mieux. Aucun OS requis.
Les bureaux font tellement stuff que nous avons généralement besoin de l'abstraction d'un OS. Mais au fond, tout ce que le processeur fait est d'exécuter des instructions.
Idem pour le processeur des machines à coke et des machines à café. Il ne fait qu'exécuter des instructions.
Eh bien, écrire des instructions machine bit par bit est fastidieux. Ainsi, tout comme avec les ordinateurs de bureau, nous écrivons généralement du code en C, qui est ensuite compilé en code machine. Ce code machine est chargé sur le processeur intégré et s'exécute.
Les systèmes embarqués font si pe qu'ils n'ont pas besoin de systèmes d'exploitation complets. Un microcontrôleur peut avoir 8 ou 16 broches sur la puce - par rapport aux dizaines de broches de votre socket CPU standard.
Ainsi, le flux de travail consiste à écrire du code (par exemple, en C), à le compiler sur votre ordinateur de bureau. Ce compilateur génère du code machine pour la puce intégrée. Ensuite, ce code est chargé sur le microprocesseur (et vous avez besoin d'un matériel spécial pour ce faire.) Ensuite, vous alimentez la puce et elle commence à exécuter des instructions. Facile!
De nombreux appareils qui exécutent une fonction spécifique ne contiennent aucun "code". Ils remplissent leurs fonctions via les propriétés de leurs composants électroniques. Les systèmes plus avancés, qui peuvent remplir de nombreuses fonctions différentes ou doivent être facilement évolutifs, contiendront un microcontrôleur et une sorte de "système d'exploitation". Étant donné que ceux-ci ont encore des limites à leur fonctionnalité, le système d'exploitation sera simple et spécialement conçu. De plus en plus avancé, l'appareil contiendra quelque chose de similaire à un ordinateur. Il aura un système d'exploitation plus compliqué qui pourra communiquer avec différentes parties du système. Enfin, vous atteignez des appareils tels que les téléphones intelligents, qui contiennent un système d'exploitation complet qui peut exécuter le code de niveau utilisateur et avoir beaucoup plus d'entrée utilisateur que les appareils plus simples. Cependant, même les processeurs modernes sont essentiellement de très gros circuits électriques. Chaque instruction reconnue par le CPU entraînera l'utilisation d'un circuit différent pour exécuter cette fonction.
Voici quelques pages Wikipédia qui pourraient vous intéresser:
http://en.wikipedia.org/wiki/Electrical_engineering
http://en.wikipedia.org/wiki/Integrated_circuits
http://en.wikipedia.org/wiki/Electronic_engineering
http://en.wikipedia.org/wiki/Computer_engineering
http://en.wikipedia.org/wiki/Microcontroller
Les microcontrôleurs bas de gamme que l'on trouve dans les appareils de tous les jours n'exécutent généralement pas de système d'exploitation. Ils sont choisis pour un faible coût, et les principaux facteurs entraînant ce coût sont le nombre de broches sur la puce (d'une douzaine à quelques centaines) et la quantité de mémoire à l'intérieur (de quelques kilo-octets à une mégaoctet ROM, de quelques octets à cent kilo-octets de RAM).
Comme le fluage des fonctionnalités opère sa magie, il arrive qu'un micro-ondes ait besoin d'effectuer plusieurs tâches. Dans ce cas, le programmeur rappelle son cours sur les systèmes d'exploitation et implémente le passage des messages, la planification des tâches, les E/S asynchrones, etc. si nécessaire!
Bien sûr, pour des raisons de commodité, de simplicité, de taille de code, etc., les fonctionnalités ont tendance à être effectuées de manière rudimentaire. Souvent, cela dépend de la façon dont vous analysez le programme, pour trouver la fonctionnalité généralisée du système d'exploitation dans le code spécifique à la tâche. Mais le chemin est long entre un planificateur de tâches codé en dur et un système d'exploitation, et lorsque vous n'avez que quelques kilo-octets avec lesquels travailler, un système d'exploitation standard n'est pas la solution.
Jetez un œil à DigiKey, un site de sélection de pièces électroniques populaire, pour en savoir plus sur les microcontrôleurs bas de gamme. Ici est leurs informations sur un MCU très bon marché avec un contrôleur LCD, comme on peut le trouver dans une machine à café. Il est assez facile d'obtenir le manuel de programmation et tout .
C'est une question très large et cela dépend beaucoup de la machine. Je peux seulement deviner que la majorité de ces distributeurs automatiques sont contrôlés par des microcontrôleurs (8051, PIC, ARM7, pour n'en nommer que quelques-uns des plus utilisés) et ont rarement un système d'exploitation et s'il en a, ce serait une sorte de RTOS, comme FreeRTOS .
Des machines plus complexes, telles que les lecteurs DVD/BluRay ou les téléphones mobiles, fonctionnent sur des plates-formes sophistiquées, telles que OMAP4 . Habituellement, un OS Unix fonctionne sur eux.
Le travail d'un système d'exploitation consiste à fournir un accès partagé aux ressources - temps d'exécution du processeur, RAM, E/S, etc. , ils n'ont donc pas besoin d'un système d'exploitation.
Les systèmes embarqués sont généralement programmés en C, et parfois en Assembly pour un timing extrême ou une optimisation de la mémoire. Certains compilateurs intégrés vous permettent de séparer Assembly dans un langage de niveau supérieur.
Je suis récemment tombé sur un distributeur de cigarettes qui exécutait Ubuntu (la machine redémarrait, donc je pouvais voir le logo).
Jetez un œil à Embedded Systems Magazine et Circuit Cellar
Si vous recherchez des informations générales sur Google, recherchez des éléments tels que "systèmes intégrés", "soc" (système sur puce). Je dirais qu'une grande partie de ces types d'appareils fonctionnent dans des langages de bas niveau, tels que C.
Fait amusant: Java a été initialement conçu comme une solution pour la programmation de systèmes embarqués: http://en.wikipedia.org/wiki/Oak_ (Programming_language )
La plupart des kiosques, registres, écrans de service au volant et même des machines à café et micro-ondes haut de gamme exécutent en fait Windows XP ou Linux, comme les machines de la série "Jura Impressa"; vous pouvez SSH dedans et brasser café.
Voici un script github d'un travail cron de machine à café: https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb
La plupart des routeurs, des fours plus récents, des réfrigérateurs plus récents, des voitures, des lecteurs DVD, divers appareils électroniques, des produits domotiques plus récents, y compris des ampoules, exécutent une version de ARM linux ou Linux embarqué).
Les appareils les moins chers, moins de 20 $, s'ils sont plus récents, fonctionnent sur l'ESP8266 ou un appareil similaire (peut exécuter LUA ou un serveur Node server pour 2 $ en vrac - incroyablement bon marché)
http://nodemcu.com/index_en.html
L'utilisation de FPGA et de systèmes embarqués comme 8051, Z80 ou d'autres appareils embarqués comme PICC, AVR et Arduino va bientôt être remplacée par des systèmes tout-en-un/SoC (System on Chip) comme l'ESP8266. Ils sont tout simplement trop faciles à programmer et constituent un système complet sur une puce qui gère son propre serveur Web; vous les allumez, téléchargez votre code source et vous avez un serveur en réseau pour 2 $.
J'ai grandi en codant PICC et AVR et 8051, et je suis triste de les voir partir, mais je n'ai rien touché d'autre que ESP8266es depuis des années parce qu'ils sont 1/10e du prix et sont un ordre de grandeur plus faciles à travailler . Vous pouvez les obtenir sur des cartes de développement avec des batteries et des dispositions de broches éclatées pour 5 $ sur ebay ou 10 $ sur adafruit.