Quelles sont les ressources pour démarrer dans le développement de systèmes d'exploitation? [fermé]


589

Une chose que j'ai toujours voulu faire est de développer mon propre système d'exploitation (pas nécessairement sophistiqué comme Linux ou Windows, mais mieux qu'un simple chargeur de démarrage que j'ai déjà fait).

J'ai du mal à trouver des ressources / guides qui vous permettront d'écrire un simple système d'exploitation "Hello World".

Je sais que beaucoup de gens vont probablement recommander que je regarde Linux ou BSD; mais la base de code pour des systèmes comme celui-ci est (vraisemblablement) si grande que je ne saurais pas par où commencer.

Aucune suggestion?

Mise à jour: Pour faciliter la tâche des personnes qui accèdent à ce message via Google, voici quelques ressources de développement de système d'exploitation:

Autres ressources:

J'ai trouvé une belle ressource nommée MikeOS , "MikeOS est un outil d'apprentissage pour montrer comment les systèmes d'exploitation simples fonctionnent. Il utilise le mode réel 16 bits pour l'accès au BIOS, de sorte qu'il n'a pas besoin de pilotes complexes"

Mise à jour 14/11/08

J'ai trouvé quelques ressources dans le guide de Freebyte pour ... des systèmes d'exploitation gratuits et non libres qui sont liés à des kits tels que OSKit et la bibliothèque ExOS. Ceux-ci semblent super utiles pour commencer le développement du système d'exploitation.

Mis à jour le 2/23/09

Ric Tokyo a recommandé des nanoos dans cette question . Nanoos est un OS écrit en C ++.

Mis à jour le 3/9/09

Dinah a fourni une discussion utile sur Stack Overflow des futurs développeurs de systèmes d'exploitation: Roadblocks dans la création d'un système d'exploitation personnalisé discute des pièges que vous pourriez rencontrer lors du développement d'un système d'exploitation et le développement du système d'exploitation est une discussion plus générale.

Mise à jour 7/9/09

LB a fourni un lien vers le projet Pintos , un système d'exploitation éducatif conçu pour les étudiants apprenant le développement de systèmes d'exploitation.

Mis à jour le 27/07/09 (Toujours aussi fort!)

Je suis tombé sur un cours OS en ligne de Berkley comprenant 23 conférences.

TomOS est un fork de MikeOS qui inclut un petit gestionnaire de mémoire et un support de souris. En tant que MikeOS, il est conçu pour être un projet éducatif. Il est écrit dans l'assembleur NASM.

Mise à jour 8/4/09

J'ai trouvé les diapositives et autres documents pour accompagner les conférences en ligne de Berkeley énumérées ci-dessus.

Mise à jour 23/08/09

Toutes les questions marquées osdev sur stackoverflow

OS / 161 est un OS académique écrit en c qui s'exécute sur un matériel simulé. Cet OS est similaire dans Nachos. Merci Novelocrat!

tangurena recommande http://en.wikipedia.org/wiki/MicroC/OS-II , un OS conçu pour les systèmes embarqués. Il y a aussi un livre d'accompagnement .

Le développement du noyau Linux par Robert Love est suggéré par Anders. Il s'agit d'un «regard d'initié largement acclamé sur le noyau Linux».

Mis à jour le 18/09/2009

Merci à Tim S. Van Haren de nous avoir parlé de Cosmos , un OS entièrement écrit en c #.

tgiphil nous parle du framework MOSA (Managed Operating System Alliance) , "un ensemble d'outils, de spécifications et de code source pour favoriser le développement de systèmes d'exploitation gérés basés sur le Common Intermediate Language".

Mise à jour 24/09/2009

Steve a trouvé quelques ressources pour le développement sur Windows à l'aide de Visual Studio, consultez la configuration du guide de BrokenThorn avec VS 2005 ou la section VS d'OSDev .

Mise à jour 9/5/2012

kerneltrap.org n'est plus disponible. Le noyau Linux v0.01 est disponible sur kernel.org

Mis à jour le 21/12/2012 Un didacticiel de développement de base du système d'exploitation conçu pour être un projet de semestre. Il vous guide pour créer un système d'exploitation avec des composants de base. Très bon début pour les débutants. Document connexe . Merci Srujan!

Mise à jour 15/11/2013

Écrire un système d'exploitation simple à partir de zéro . Merci James Moore!

Mise à jour 08/12/2013

Comment faire un système d'exploitation informatique Merci ddtoni!

Mise à jour 18/03/2014

ToAruOS un OS construit principalement à partir de zéro, y compris GUI

Mis à jour le 12 septembre 2016

Écrire votre propre système d'exploitation de jouet

Mis à jour le 10 décembre 2016

Écrire un système d'exploitation simple - à partir de Scratch (merci @Tyler C)


5
N'oubliez pas forums.osdever.net
Brenden

15
Pourquoi ce type de bonnes questions générales est-il toujours fermé sur SO?
Pratik Singhal

30
Cette question a 370 votes positifs, a été surévaluée 422 fois et existe depuis le lancement de StackOverflow. La communauté semble l'avoir aimé, mais pour une raison quelconque, une poignée de personnes doivent le ruiner pour tout le monde. C'est pourquoi je commence à vraiment détester SO
Giovanni Galbo

1
Il y a une tendance très intéressante avec Unikernels (faites juste une chose et faites-le bien) où ces efforts sont très pertinents. Vous pouvez généralement démarrer à froid un noyau dans une machine virtuelle et exécuter le code utilisateur en moins d'une seconde. J'ai vu une solution où simplement la recherche DNS pour un tel service, fait que le serveur DNS déclenche une "machine virtuelle de démarrage" pour qu'il soit prêt lorsque la demande réelle du service arrive.
Thorbjørn Ravn Andersen

Réponses:


95

Il y a beaucoup de liens après ce bref aperçu de ce qui est impliqué dans l'écriture d'un OS pour la plate-forme X86.

Le lien qui semble le plus prometteur (www.nondot.org/sabre/os/articles) n'est plus disponible, vous devrez donc parcourir la version Archive.org pour le lire.

À la fin de la journée, le chargeur de démarrage prend le code machine du noyau, le met en mémoire et y saute. Vous pouvez mettre n'importe quel code machine dans le noyau que vous voulez, mais la plupart des programmes C attendent un système d'exploitation, vous devrez donc dire à votre compilateur qu'il n'aura pas tout cela, ou que le chargeur de démarrage doit en créer une partie.

Le noyau fait alors tout le gros du travail, et je soupçonne que c'est l'exemple de noyau que vous voulez. Mais il y a un long chemin à parcourir entre avoir un noyau qui dit "Bonjour tout le monde" et avoir un noyau qui charge un interpréteur de commandes, fournit des services de disque et charge et gère des programmes.

Vous voudrez peut-être envisager de vous abonner à ACM pour accéder à leur ancienne littérature - il existe de nombreux articles à la fin des années 80 et au début des années 90 dans les premiers magazines informatiques sur la façon de créer des systèmes d'exploitation alternatifs . Il y a aussi probablement des livres épuisés de cette époque. Vous pourriez être en mesure d'obtenir gratuitement les mêmes informations en recherchant les index de ces magazines (qui sont disponibles sur ce site - cliquez sur "index" près du nom du magazine), puis en demandant des personnes avec une copie.

Enfin, je sais que Usenet est mort (pour ainsi dire les prophètes du destin d'Internet), mais vous constaterez que de nombreux anciens experts escarpés de cette époque y vivent toujours. Vous devriez rechercher des groupes Google (ils ont l'ancien référentiel de dejanews) et je m'attends à ce que vous trouviez beaucoup de gens posant les mêmes questions il y a une décennie ou 1,5 que vous posez maintenant. Vous pouvez même parcourir les nombreuses demandes d'aide de Linus Torvalds alors qu'il développait Linux à l'origine. Si les recherches n'apportent rien, demandez dans le groupe de discussion approprié (commence probablement par comp.arch, mais recherchez ceux avec OS dans le nom).


Hé monsieur, COSMOS est-il un bon outil pour développer un système d'exploitation?
Vikas Verma

@VikasVerma Je ne l'ai pas utilisé, donc je ne sais pas.
Adam Davis

@AdamDavis Le premier lien est rompu (et les autres semblent également l'être). Veuillez les réparer!
nbro

35

Minix est beaucoup plus petit et conçu à des fins d'apprentissage, et le livre qui l'accompagne est également bon.

Mise à jour: Je suppose que Minix 3 est un objectif un peu différent, mais Minix 2 (et bien sûr la première version) était destiné à l'enseignement.


J'ai le dernier livre de Tanenbaum mais le code source minix3 a l'air sacrément énorme! J'ai un objectif similaire comme l'OP, alors que je ne veux pas construire un noyau à partir de zéro, je veux vraiment comprendre comment fonctionne un noyau et ce qu'il fait. Est-ce que suivre Tanenbaum book and minix3suffisamment pour apporter des modifications à minix3 m'aidera éventuellement à contribuer au noyau Linux?
Gideon

32

En tant que personne qui a écrit un système d'exploitation multitâche en temps réel à partir de zéro ...

routine anti-rebond du clavier, pilote de clavier, pilote de disque, pilote vidéo, système de fichiers et enfin un chargeur de démarrage - et c'est juste pour le lancer pour la première fois sans rien faire!

... Je ne saurais trop insister sur l'importance de se familiariser avec le matériel! Cela est particulièrement vrai si vous voulez vraiment tout faire vous-même au lieu de simplement choisir un système primitif que quelqu'un d'autre a déjà conçu pour vous. Par exemple, contactez Intel et demandez-leur une carte CPU pour votre type de CPU! Cela vous le présentera - les "broches", les interruptions, les opcodes, vous l'appelez!

N'oubliez pas que le matériel rend tout cela possible. Étudiez le matériel. Vous ne le regretterez pas.

.


18

Écrivez un OS de microcontrôleur. Je recommande un microcontrôleur basé sur x86. Un système d'exploitation moderne est tout simplement énorme . Apprenez d'abord les bases.


2
des idées par où commencer avec celui-ci? Je suis très intéressé? quel kit acheter .. des livres pour commencer, etc.
Julio

@Uncle: Je n'ai pas rencontré de livre sur les systèmes embarqués de premier ordre à ce jour. Soit ils sont trop élevés et supposent un système d'exploitation, soit ils sont destinés à un ingénieur électricien et ignorent le code. Quant aux kits, un google trouve un " bifferos.bizhat.com ". Il existe également des kits ARM. Je ne aime pas les architectures harvard personnellement, donc je suis pas intéressé à arduino, mais il est le plus populaire. Pour des travaux plus exotiques, le XC-1A est également sympa.
Paul Nathan

@Paul apprécierait que vous développiez votre réponse. J'ai examiné AVR et Arduino, mais j'ai récemment vu un micro .NET. Je suis trop un gars LOB d'abstraction plus élevée, mais je veux commencer à descendre la pile. Où recommandez-vous de commencer?
gideon

@giddy: Les AVR sont la mode actuelle. Ils sont petits et bon marché, mais je n'aime pas vraiment l'architecture. Je recommanderais d'obtenir un kit de développement ARM (coût estimé ~ 100). Ils sont populaires dans les applications commerciales.
Paul Nathan

@ Paul merci! Pas beaucoup entendu parler d'ARM. Qu'en est-il du .net micro? Je suis un peu inquiet de brûler quelque chose. La plupart des kits seront livrés avec une sorte d'instructions, n'est-ce pas? Merci encore.
gideon

16

Je souhaite qu'il y ait un endroit pour obtenir toutes les informations sur le développement de votre propre système d'exploitation. Le plus proche à venir est OS Dev Wiki et Forums . Ils offrent une tonne de bonnes informations concernant la configuration, le développement et les informations sur le matériel de l'appareil.

Il y a aussi d'excellents tutoriels sur BoneFide , j'ai utilisé le tutoriel de démarrage de Bran , et j'en regarde maintenant un plus récent basé sur son OS appelé Roll your own toy UNIX-clone OS .

Je vérifie ensuite: "Systèmes d'exploitation: conception et mise en œuvre"

Et si vous souhaitez développer sur Windows, consultez le blog de jolson .

Modifier: pour le développement sur Windows à l'aide de Visual Studio, consultez le guide de BrokenThorn ou le wiki d'OSDev .


1
Connexes: le wiki de balise x86 de SO a des liens vers les manuels Intel / AMD, et beaucoup de bonnes choses.
Peter Cordes

15

Une excellente ressource est le matériel du cours MIT 6.828: Operating System Engineering.

XV6 - OS simple d'enseignement Unix écrit en ANSI C pour x86 http://pdos.csail.mit.edu/6.828/2012/xv6.html

Source XV6 - sous forme de livret imprimé avec des numéros de ligne http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf

Livre XV6 - explique les principales idées de conception os http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

Le matériel est compact: source de 92 pages et commentaire de 96 pages.

Je l'aime plus que le livre Minix! C'est un vrai bijou!


11

vous voudrez peut-être également jeter un œil à SharpOS qui est un système d'exploitation qu'ils écrivent en c #.


9

Il existe de bonnes ressources pour les bases du système d'exploitation dans les livres. Comme il n'y a pas beaucoup d'appel pour créer de nouveaux systèmes d'exploitation à partir de zéro, vous ne trouverez pas une tonne d'informations de type amateur sur Internet.

Je recommande le manuel standard, "Modern Operating Systems" de Tanenbaum. Calingaert peut également vous aider à trouver les «éléments du système d'exploitation» - c'est un aperçu d'un livre qui donne un aperçu de ce qu'est un système d'exploitation du point de vue d'un concepteur.

Si vous êtes intéressé par les systèmes en temps réel (et que vous devriez au moins comprendre les différences et les raisons des systèmes d'exploitation en temps réel), je recommanderais également "MicroC / OS-II" de Labrosse.

Éditer:

Pouvez-vous préciser ce que vous entendez par "plus technique"? Ces livres donnent des détails sur l'implémentation de pseudo-code, mais cherchez-vous un exemple de système d'exploitation ou des extraits de code pour une machine / un langage particulier?

-Adam


7

Je viens d'une autre question. Je voudrais mentionner Pintos ... Je me suis souvenu que mon cours OS avec Nachos et Pintos semblait être le même genre de chose qui peut fonctionner sur x86.


7

J'ai trouvé le développement du noyau Linux de Robert Love assez intéressant. Il vous explique comment les différents sous-systèmes du noyau Linux fonctionnent de manière très terre-à-terre. Puisque la source est disponible, Linux est un candidat de choix pour quelque chose à pirater.



6

Mon cours sur les systèmes d'exploitation au premier cycle nous a permis de créer un certain nombre de sous-systèmes pour OS / 161 , un noyau simple de type BSD qui fournit certaines des bases tout en vous laissant la liberté d'explorer diverses décisions d'espace de conception dans la mise en œuvre de services de niveau supérieur.


6

Commencez à pirater Minix. Il est beaucoup plus petit que Linux (évidemment) et il est conçu avec des objectifs pédagogiques à l'esprit (certains, au moins). Pas Minix 3 cependant, c'est une toute autre histoire.


5

Je réponds déjà, mais quand j'ai pris les systèmes d'exploitation à l'université, nous avons commencé avec un premier noyau Linux et ajouté des fonctionnalités modernes simplistes (systèmes de fichiers de base, mémoire virtuelle, multitâche, mutex). Bon amusement. Vous pouvez ignorer certains des éléments d'assemblage de bas niveau VRAIMENT fous uniquement pour le nettoyage avec le mode protégé et les tableaux de pages tout en apprenant certaines des tripes.

http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2


4

Vous voudrez peut-être regarder linuxfromscratch .

Linux From Scratch (LFS) est un projet qui vous fournit des instructions étape par étape pour créer votre propre système Linux personnalisé, entièrement à partir du code source.


32
Compiler un système d'exploitation est bien loin d'en écrire un.
duskwuff -inactif-

7
@duskwuff Vous avez raison, mais vous en apprendrez beaucoup. Ensuite, vous pouvez continuer et écrire le vôtre.
jfs

4

Un tutoriel de développement de système d'exploitation simple et de base conçu pour être un projet de semestre. Il vous guide pour créer un système d'exploitation avec des composants de base. Très bon début pour les débutants. Le document connexe est ici .


Excellentes ressources. Le document fait référence à Nachos (2500 lignes de code), OS / 161 (11000), MINIX (30000), GeekOS. Allez sur chaque page officielle de l'université et vous trouverez le code source, le simulateur et les outils ainsi que les devoirs par an.
limitcracker



3

Consultez le projet MOSA (Managed Operating System Alliance) à l' adresse www.mosa-project.org . Ils conçoivent un compilateur AOT / JIT et un système d'exploitation entièrement géré en C #. Certains développeurs sont issus du projet SharpOS inactif.


3

J'ai joué avec Cosmos , qui est "un projet de système d'exploitation implémenté complètement dans des langages compatibles CIL." C'est écrit en C #, donc c'était mon affaire. Pour quelqu'un comme moi qui n'a jamais essayé de construire un système d'exploitation, c'était en fait assez cool de pouvoir faire fonctionner un système d'exploitation "Hello World" en un rien de temps.



3

Comme mentionné ci-dessus, le Wiki OSDev est (de loin) la meilleure source pour le développement d'OS. Pour ceux d'entre vous qui parlent allemand, le wiki lowlevel.eu est également génial. Quelque chose Incitatus OS relativement inconnu , un simple noyau avec un petit ensemble d'applications de l'espace utilisateur. C'est génial à utiliser pour entrer dans le sujet compliqué du développement du système d'exploitation.


2

Movitz est un environnement Lisp écrit en Common Lisp et fonctionnant "sur le métal". Malheureusement, certains liens sur la page principale de Movitz refusent l'accès, mais vous pouvez trouver des instructions sur la façon de télécharger et de compiler le code source à partir de la page trac . De plus, une image prête peut être trouvée dans les archives de cette page .

À mon humble avis, cela est extrêmement intéressant, car il ramène le concept de machine Lisp sur le matériel actuellement disponible. Il a échoué commercialement, mais cela ne me prouve pas que l'idée était mauvaise.

Le manuel Unix haters est un livre amusant qui réprimande semi-sérieusement le concept d'Unix et de ses dérivés. De nombreuses sections argumentent sur l'amélioration du concept de machine Lisp.




1

Question intéressante pour les programmeurs. Voir qu'il faudra beaucoup de temps pour construire un système d'exploitation comme Windows ou Mac, mais si vous voulez en créer un simple, vous pouvez faire de votre mieux

  1. Vous devez vous concentrer sur Assembly Language, C et C ++. Vous devez être expert dans ces langues.
  2. Lisez d'abord un bon livre sur le fonctionnement du système d'exploitation [Google it], puis lisez toutes les informations de Wiki OS
  3. Recherchez sur YouTube "Comment créer votre propre système d'exploitation en langage d'assemblage" regardez la vidéo, par exemple. Vidéo
  4. Téléchargez le code source de Linux OS et compilez-le vous-même et essayez de modifier le code vous-même
  5. Maintenant que vous êtes un éditeur de système d'exploitation expérimenté, téléchargez Minix et QNX et commencez à développer avec eux et obtenez leurs documents à partir d'ici Minix Doc et QNX Doc

Maintenant que vous avez acquis le master (Pas complètement juste un peu plus) pour créer un OS, distribuez maintenant cette connaissance à vos amis et avec leur aide essayez de créer un OS aussi puissant que Mac, Linux ou Windows


Les éditeurs, veuillez modifier ma réponse et supprimer l'espace entre http: et www car je suis un nouveau venu, donc je n'ai pas une réputation si élevée, faites-le pour moi
BharatKhanna

1

Lorsque vous avez créé un système d'exploitation de base, il est difficile de continuer, car il n'y a pas beaucoup de ressources pour créer des interfaces graphiques ou porter des bibliothèques. Mais je pense que jeter un oeil à ToAruOS aiderait beaucoup!

Le code sous la surface de ce système d'exploitation est tellement simple! mais en même temps, il a porté des choses comme cairo, python, (pas encore mais bientôt) sdl, fait partager la mémoire et il a également fait sa propre boîte à outils de widget. Tout est écrit en C.

Un autre système d'exploitation intéressant serait pedigreeOS . Il est fait par JamesM (l'homme derrière le tutoriel du noyau de jamesM . Bien qu'il ait plus de fonctionnalités que ToaruOS, il est également plus grand et plus déroutant.

Mais de toute façon, ces 2 OS vous aideront beaucoup, en particulier ToAruOS.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.