web-dev-qa-db-fra.com

Comment programmer un système d'exploitation?

J'adore coder, mais je ne fais actuellement que du développement web. J'aimerais faire quelque chose qui sera unique et amusant et très différent de la programmation Web.

Oui, cela pourrait être une question stupide, mais je pense que ce serait vraiment cool de construire un système d'exploitation très simple. Veuillez donc ne rien dire de grossier. Je veux juste savoir les choses suivantes:

*Où commencer? * Ressources * Quelle langue devrais-je utiliser?

Je pensais à quelque chose de simple comme un cmd

33
Kevin

La "bible" absolue sur la conception des systèmes d'exploitation est et était celle d'Andrew Tanenbaum Conception et mise en œuvre des systèmes d'exploitation - le livre "Dragon" :-)

alt text

Il existe également de nombreuses autres références, par exemple Développement de votre propre système d'exploitation 32 bits .

Microsoft Research a également/avait un projet sur la création d'un système d'exploitation en code managé (C #) appelé Singularity - qui pourrait fournir des informations/documents, etc.

L'écriture d'un système d'exploitation complet n'est ni triviale ni rapide, cependant .....

19
marc_s

Passer de webdev à backend sera assez frustrant.

Tout d'abord, choisissez une carte/matériel/architecture - peut-être même aller avec un simulateur de système d'exploitation que vous pouvez exécuter sur votre machine. Apprenez C et certains assemblages (Intel, MIPS, ARM, Coldfire/Motorolla 68k) en fonction de l'architecture du processeur pour laquelle vous construisez votre système d'exploitation.

J'ai vu des packages C++ qui vous permettront de créer un système d'exploitation en C++, puis de le convertir automatiquement pour vous en Assembly, mais c'est un tel casse-tête de les faire convertir correctement. Je ne les recommanderais pas.

Avant de commencer à écrire du code, vous devez concevoir votre système d'exploitation . Peut-être même mettez vos décisions de conception dans un document de 50 pages avec quelques diagrammes.

Quelques réflexions:

  • carte mémoire (où exactement en mémoire chargez-vous des parties de votre système d'exploitation; où résidera-t-il)
  • comment votre planificateur fonctionnerait (processus et/ou thread conscient, priorités). Peut-être un diagramme avec des files d'attente pour différentes priorités; également un diagramme pour les états de processus dans différentes files d'attente (prêt, bloqué, en attente de msg, en cours d'exécution, en cours d'exécution, interrompu, etc.)
  • comment effectuer une communication interprocessus (boîtes aux lettres, mutex, atomicité, communication synchrone vs asynchrone, format de message envelopes {sender process id, receiver process id, message type, message})
  • comment gérer les modes noyau vs utilisateur
  • algorithmes d'allocation de mémoire - vous écrirez votre propre opérateur malloc/free (comment gardez-vous une trace lorsque l'utilisateur alloue dynamiquement de la mémoire? utiliserez-vous un arbre de copain algo? liste liée? pile? etc)
  • comment gérer les interruptions (également le changement de contexte entre ici - comment allez-vous enregistrer tous les registres et les restaurer: vous avez une pile dont vous avez besoin pour savoir où vous en êtes)
  • processus standard: processus clavier, sortie moniteur, timing,
  • comment ajouter des services de chronométrage
  • comment charger et exécuter les processus utilisateur
  • ajouter ou non une préemption
  • ajouter des raccourcis clavier (utile pour déboguer votre système d'exploitation, surtout s'il se fige, vous pouvez ajouter des raccourcis clavier pour inspecter la mémoire)
  • tester votre système d'exploitation

EDIT - Mise à jour d'URL Développer votre propre système d'exploitation 32 bits est épuisé mais est disponible en ligne: http: //www.ipdatacorp .com/mmurtl/mmurtlv1.pdf

9
Adrian

Voici quelques liens pour vous aider à démarrer:

http://www.brokenthorn.com/Resources

http://wiki.osdev.org/Main_Page/

Tu vas avoir besoin de GCC et de NASM. Je pense que vous pouvez également utiliser GASM.

Apprenez les interruptions du BIOS.

Avant même de commencer, saisissez un tas de normes telles que: APIC A20 Gate PCI & PCIEx - Bonne chance pour en obtenir une. Coût un peu de changement. Intel et AMD - Regardez-les, vous donne beaucoup d'informations. VGA ATA & SATA etc ... Il y en a beaucoup.

Prenez également des émulateurs comme: bochs et qemu

Comprenez comment l'ordinateur fonctionne, c'est-à-dire comment il démarre.

Il y a beaucoup d'informations là-bas, vous devez juste faire vos recherches.

Bonne chance.

5
Matthew Hooker

Commencez par lire quelques livres de systèmes d'exploitation - comme Tanenbaums ' Systèmes d'exploitation modernes .

Cela devrait vous donner une idée des problèmes que vous devez résoudre pour écrire un système d'exploitation.

3
Oded

Il existe de nombreuses ressources lorsque vous les recherchez sur Google, mais je vous encourage pas à franchir cette étape!

Pour écrire un système d'exploitation, même simple, vous aurez besoin d'une bonne compréhension du fonctionnement de votre ordinateur à un bas niveau, et vous aurez besoin d'au moins C ou C++ et de préférence Assembly également. Sans ces compétences, ce sera un projet fastidieux et frustrant. C'est difficile et difficile, même pour les programmeurs C qualifiés.

2
GolezTrol

Écrire un OS est difficile. Je recommande de devenir développeur avant de devenir développeur OS. Vous aurez besoin de connaître C/C++ et Assembly pour créer un système d'exploitation de base. vous devrez réfléchir à la façon de créer votre système d'exploitation, c'est-à-dire le type de noyau, le mode réel ou le mode protégé, les cartes mémoire et bien d'autres choses.

2
PersonMan

Je suppose que vous feriez mieux de commencer à explorer le travail d'Andrew S. Tanenbaum .

2
Pradeep