Meilleure réponse
Cela dépend de ce que vous entendez par système dexploitation. Une fois, jai écrit un système de mise en file dattente simple qui exécuterait plusieurs sessions de protocole de manière circulaire. Mais il fonctionnait sous un système dexploitation standard. Lorsque les microcontrôleurs sont sortis pour la première fois pour les systèmes embarqués, les ingénieurs ont généralement écrit leur propre système dexploitation rudimentaire comme indiqué dans lune des autres réponses.
Le plus petit système dexploitation utile que jai utilisé qui avait les fonctionnalités de base dun multitâche fonctionnant hors -le système détagère sappelait QNX. Cétait un système Unix réduit et fonctionnait sur le premier IBM PC. Il navait pas de graphismes fantaisistes mais je pouvais facilement faire du développement logiciel dessus. En fait, la seule vraie différence avec une machine moderne était linterface utilisateur avec des couleurs et des graphiques. Donc, fondamentalement, lintroduction du DOS par IBM a fait reculer lindustrie informatique dau moins 10 ans. Il y avait un certain nombre de systèmes dexploitation supérieurs (qui auraient pu être adaptés) ou en cours de développement à lépoque avec bien sûr, Unix établissant la norme.
Réponse
Je viens de terminer le développement un noyau pour une classe ( CS-4284 Systems & Networking Capstone ) pendant mon dernier semestre à lécole. Auparavant, jai suivi une classe de système dexploitation qui vise à travailler avec le système dexploitation du point de vue du programmeur, et non du point de vue dun concepteur de système dexploitation. Être impliqué dans le développement du système dexploitation et du noyau depuis un an et demi (ce nest pas depuis longtemps, mais jai beaucoup appris), voici ce que je recommande:
1. Maître C Je ne peux plus insister là-dessus. Non vraiment, maîtrisez-le. Le développement du système dexploitation est difficile. Il comprend de nombreux concepts dont vous avez vraiment besoin pour maîtriser C, donc cela ne vous gêne pas. Par exemple, prenez le tube Unix (tapé | dans un shell). Pour développer un tube dans votre système dexploitation, vous devez bien comprendre le système de fichiers du système dexploitation et la structure des fichiers. Cest un problème typique de tampon limité (consommateur / producteur) et devra gérer toute la synchronisation. Vous devez être conscient de la mémoire virtuelle lors de son écriture. De plus, Unix est généralement BYOB (apportez votre propre tampon). Vous devra gérer correctement le tampon que lutilisateur a fourni etc … La dernière chose que vous « voudriez faire ici est de traiter les problèmes de base C tels que les pointeurs et la gestion de la mémoire (note: la gestion de la mémoire dans le système dexploitation est 10 fois plus difficile que la gestion de la mémoire C: vous devez être conscient des espaces dadressage utilisateur par rapport au noyau)
2. Kernel vs OS Vous devez comprendre la différence entre un noyau et un OS. Un noyau est essentiellement le cerveau du système dexploitation. Le système dexploitation est un ensemble dapplications regroupées. Par exemple, Mac OS X comprend: un noyau, linterface (GUI), des applications standard intégrées (Finder – qui nest quune abstraction pour visualisez le système de fichiers, TextEdit, un shell etc …)
3. Ne plongez pas directement Il est impossible de commencer faire le développement du noyau en quelques jours ou semaines. Je vous suggère de commencer par ce qui suit:
- Familiarisez-vous avec les étapes des compilations GCC (que se passe-t-il lorsque vous exécutez gcc, comment un exécutable est produit et quoi se produit lorsque vous exécutez le programme). Vous pouvez également écrire un assembleur simple en C (prendre le code dassembly comme code machine dentrée et de sortie. Cela vous oblige à comprendre quelles sections .data, .text et .bss sont dans lassembly (très utile vers le bas la route pour comprendre la mémoire virtuelle du système dexploitation). Vous comprendrez également ladressage au niveau de la machine et comment les branches sont résolues.
- Familiarisez-vous avec mach outils et programmes de niveau ine. Je suggère de faire le laboratoire de bombes, car il y a beaucoup de matériel pédagogique là-bas. Juste un laboratoire de bombe Google.
- Familiarisez-vous avec les attaques de base du système dexploitation. Je suggère de regarder le débordement de tampon pour la même raison que le point 1 (laboratoire de débordement de tampon google).
- En savoir plus sur les appels système, les threads et les processus en C. À partir de là, développez votre propre shell en C.
- En savoir plus sur lallocation de mémoire et implémenter malloc et free en C. En savoir plus sur les compromis de conception, les stratégies dallocation, les stratégies de libération, etc.
- En savoir plus sur le multi-threading et le multi-processing en C. À partir de là, plongez dans les mécanismes de synchronisation (verrous, mutex, sémaphores) et développez un pool de threads en C, que dautres programmes peuvent utiliser.
4. Désormais, vous pouvez commencer à développer un noyau OS réel mais simplifié À ce stade, vous pouvez commencer à développer sur un système dexploitation réel en tant que concepteur de système dexploitation. Google Stanford Pintos et vous aurez accès à un petit noyau éducatif développé à Stanford. Il est livré avec de la documentation et un ensemble de 4 projets. Vous pouvez rechercher sur Google certaines écoles qui ont des diapositives de cours pour Pintos. Je suggère dacheter des concepts de système dexploitation ( Amazon.com: Operating System Concepts (9781118063330): Abraham Silberschatz, Peter B.Galvin, Greg Gagne: Livres ). La documentation est plutôt bien et les projets sont bien expliqués. Le système dexploitation est également livré avec des tests que vous pouvez exécuter en exécutant `make check`, afin que vous puissiez voir si vous » avez fait les choses correctement ou pas.
5. Vous pouvez commencer à contribuer à Linux Cela demandera beaucoup d’efforts pour examiner le code source et les décisions de conception Linux (qui sont beaucoup plus compliquées que celles de Pintos), mais je pense qu’à ce stade, vous allez être capable au moins de commencer. Avec plus de pratique et de lecture, vous serez en mesure de le reprendre.
Je viens de terminer létape 4. Jai adoré les étapes 1 à 3, mais franchement, à mi-chemin 4, jai réalisé que je ne suis pas SI intéressé par le développement du système dexploitation. Jaimais beaucoup travailler avec le système dexploitation en tant que programmeur (du point de vue dun programmeur), mais je nappréciais pas autant creuser plus profondément. Jai cependant beaucoup appris du développement du noyau, et cela vous expose à beaucoup de choses. De plus, si vous pouvez écrire un noyau, vous écrivez nimporte quel logiciel là-bas. Je recommande fortement de faire au moins les 3 premières étapes car cela vous donne un bon aperçu du système dexploitation. Vous deviendrez littéralement un meilleur ingénieur logiciel en général. Vous apprendrez à apprécier davantage les langages de haut niveau et à utiliser le bon outil / langage / technologie pour le bon travail.
Jai beaucoup de matériel sur le développement dOS, des projets, des tests, etc. Si les gens sont intéressés, faites-le moi savoir en commentant et je pourrai peut-être créer un eBook / tutoriel / guide en ligne avec un environnement de test qui guidera les débutants dans le développement dOS et fournir des projets et des commentaires sur lesquels travailler.