Conseils pour un étudiant ambitieux sur la construction de votre propre noyau [fermé]

18

Je suis un étudiant universitaire très ambitieux qui souhaite apprendre à peu près tout ce qu'il y a à savoir sur les ordinateurs (bash moi si vous voulez, j'aime apprendre). Récemment, j'ai pensé que ce serait un projet amusant (quoique long) de concevoir et de construire mon propre noyau.

J'ai obtenu quelques informations de base et j'ai compris que je devais maîtriser Assembly et C / C ++ pour vraiment faire ce travail. Pendant que j'y travaille, j'aimerais savoir COMMENT fonctionne un noyau du point de vue de la programmation. J'ai passé des heures à parcourir le code du noyau linux mais cela ne peut que vous mener jusqu'ici.

Quelles sont les étapes de base de la construction d'un noyau? Choses que vous devez aborder? Commander ou faire des choses? Je sais que je mord beaucoup, mais je suis suffisamment déterminé pour y faire face.

n0pe
la source
12
Pas besoin de vous critiquer pour vouloir tout apprendre. Mais si vous prévoyez d'essayer, vous feriez mieux d'avoir une durée de vie prolongée, un cerveau surhumain et aucun autre plan pour votre vie;)
2
Je m'attends à avoir tout cela! Pas vraiment cependant, j'ai juste une envie écrasante d'apprendre.
n0pe
@delnan schizophrénie paranoïde possible est un plus aussi: templeos.org
DanteTheEgregore
@DanteTheEgregore Qu'est-ce que?
Panzercrisis

Réponses:

34

Ce que vous devez faire, c'est concevoir le système d'exploitation. Même si, par exemple, vous décidez qu'il doit s'agir d'un système de type UNIX, il reste encore beaucoup de décisions à prendre. Dans quelle mesure voulez-vous que ce soit UNIX? Quelles parties d'UNIX aimez-vous et lesquelles pensez-vous avoir besoin d'être améliorées?

Si vous n'êtes pas déterminé à ce qu'il ressemble à UNIX, vous vous retrouvez avec encore plus de questions à répondre: les processus devraient-ils former un arbre, ou sont-ils "plats"? Quels types de communication inter-processus souhaitez-vous prendre en charge? Voulez-vous qu'il soit multi-utilisateur, ou simplement multi-tâches (ou éventuellement mono-tâches)? Voulez-vous que ce soit un système en temps réel? Quel degré d'isolement souhaitez-vous assurer entre les tâches? Où voulez-vous qu'il tombe à l'échelle monolithique vs micro-noyau? Dans quelle mesure (le cas échéant) souhaitez-vous qu'il prenne en charge le fonctionnement distribué?

Je conseille généralement contre étudier le noyau Linux pour votre inspiration. Ce n'est rien contre le noyau Linux lui-même, mais un simple fait que Linux est principalement destiné à la production, pas à l'éducation. Il a beaucoup d'optimisation, de hacks de compatibilité descendante, etc., qui sont extrêmement utiles pour la production mais plus susceptibles de distraire que d'éduquer.

Si vous pouvez le trouver, une copie du livre de Lion ( Commentaire des Lions sur UNIX 6e édition , avec code source , par John Lions) est un point de départ beaucoup plus facile. La 6e édition d'UNIX était encore petite et assez simple pour lire et comprendre assez rapidement, sans être un système de jouets trop simplifié.

Si vous prévoyez de cibler le x86 (au moins principalement), vous pouvez également consulter MMURTL V 1.0 de Richard Burgess. Cela présente un système pour le x86 qui utilise le matériel x86 beaucoup plus que les concepteurs de CPU l'ont prévu à l'origine - quelque chose que la plupart des vrais systèmes évitent en faveur de la portabilité vers d'autres CPU. Comme vous pouvez le deviner, cela tend à être orienté beaucoup plus fortement vers la fin matérielle des choses. Les copies imprimées semblent coûteuses et difficiles à trouver, mais vous pouvez télécharger le texte et le code gratuitement.

Heureusement, il existe également quelques possibilités supplémentaires - Conception et mise en œuvre de systèmes d'exploitation , par Andrew Tanenbaum et Albert Woodhull, par exemple.

Jerry Coffin
la source
Wow merci pour la gentille réponse. Je vais regarder dans tous ces livres.
n0pe
7
J'ai ajouté des liens vers des PDF du livre et de la source. La chose étonnante à propos de la source pour v6 UNIX est qu'elle fait 100 pages, avec 100 lignes par page. Et en 10 000 lignes de code, vous disposez d'un système d'exploitation multitâche complet . Si vous pouvez vraiment comprendre le code entourant le fameux commentaire à la ligne 2238, «Vous n'êtes pas censé comprendre cela», vous pouvez vous donner une Gold Star et un Honorary Masters. Prendre plaisir!
Peter Rowell
Merci pour les liens! Maintenant, je dois trouver où l'imprimer ...
n0pe
1
Minix (le livre de Tannenbaum) est conçu pour l'éducation et peut être exactement ce dont on a besoin ici.
@PeterRowell, dmr a déclaré qu'il s'agissait d'un bogue dans cm.bell-labs.com/who/dmr/odd.html
12

Je suggérerais de commencer par une petite tâche très ciblée: utiliser l'assemblage, écrire un programme d'amorçage jouet. Cela ne doit pas faire grand-chose. Vous souhaitez simplement que l'ordinateur charge automatiquement le programme au démarrage, imprime un message confirmant qu'il est en cours d'exécution, lit certaines entrées du clavier, imprime un autre message, puis arrêtez l'ordinateur.

Cela aurait plusieurs avantages:

  1. Vous allez éventuellement avoir besoin d'un processus d'amorçage pour votre noyau, ce ne sera donc pas un exercice inutile.
  2. Il vous donnera la pratique de l'écriture en assemblage.
  3. Il vous donnera la pratique d'écrire des routines d'E / S de bas niveau. Comment écrivez-vous un message à l'écran ou lisez-vous une touche lorsqu'il n'y a pas de système d'exploitation auquel vous pouvez faire appel?
  4. Il vous donnera de l'expérience en faisant des recherches sur les minuties techniques du CPU et de la carte mère. (Première question: comment votre carte mère / processeur trouve-t-elle un programme de démarrage au démarrage?)
  5. L'écriture de noyaux est devenue une tâche très sophistiquée, avec une tonne de subtilités. Cette tâche vous donnera quelque chose pour commencer et peut-être vous empêchera de vous perdre dans les mauvaises herbes avant même de commencer.

Une fois que vous pouvez le faire, vous aurez une bien meilleure idée de ce dans quoi vous vous embarquez.

Charles E. Grant
la source
Merci pour cela, je pense que c'est exactement ce que je vais essayer de faire. Plus de lecture dans mon avenir.
n0pe
7

Apprendre à programmer dans l'assembleur est un bon premier départ et le faire à partir de MSDOS 6.0 peut également être utile en raison d'un manque de fonctionnalités intégrées.

La lecture d'un bon livre comme Operating System Concepts serait un bon début pour concevoir votre propre noyau. Vous devrez gérer le chargement de démarrage, la gestion des pilotes de périphériques, l'interfaçage avec le BIOS, la création et la gestion du système de fichiers, la planification des programmes, le chargement et le déchargement des programmes, implémenter au moins une sorte de shell (beaucoup plus facile que de construire un système de fenêtrage).

C / C ++ ne fonctionnera que si votre noyau est compatible avec les bibliothèques standard pour ces langages, sinon vous devrez également écrire une copie de ces bibliothèques.

Cela ne commence même pas à penser au multithreading, à la sécurité du système, au réseautage.

Peter Smith
la source
7

Minix est un joli clone Unix (qui a inspiré Linux) qui a été écrit pour l'enseignement.

Andrew S. Tannenbaum est un excellent écrivain et enseignant et a écrit un livre entier sur les systèmes d'exploitation utilisant Minix comme exemple (et inclut le code source à suivre): http://en.wikipedia.org/wiki/Operating_Systems:_Design_and_Implementation

Personnellement, je trouve qu'il est un peu meilleur écrivain que programmeur, donc certaines choses ne sont pas aussi claires que je le souhaiterais personnellement, mais - hé - ça marche!

Je peux fortement recommander d'envisager cela comme une ressource d'apprentissage. Cela vous donnera également une idée de la quantité de travail nécessaire pour produire réellement quelque chose qui peut réellement être utile.


la source
Je recommanderais de prendre le livre physique. Plus facile à prendre des notes.
En fait, j'y pense, je pense que j'ai vu le livre sur Amazon pour pas cher. Je pourrais y arriver. Merci
n0pe
Notez également qu'il s'agit de la troisième édition. Je pense que nous avons utilisé la première édition lorsque j'ai suivi le cours.