114 votes

Comment puis-je créer un petit système d'exploitation sur un vieil ordinateur de bureau?

Cela peut être en vain, car je sais écrire un système d'exploitation est excessivement compliqué (surtout par soi-même).

Je ne m'attends pas à construire la prochaine linux ou windows.

Je sais que ça va être horrible, et le buggy, et de ne pas travailler, mais c'est très bien.

Je veux tout écrire moi-même, en assembleur, C, et (certains) C++.

C'est un projet d'avenir, que je suis occupé avec d'autres choses en ce moment et n'ont pas le temps immédiatement, mais j'ai pensé que je demanderais maintenant, alors peut-être que je pourrais obtenir beaucoup de réponses à cela, et il pourrait s'accumuler et être une ressource utile pour ce genre de démarche (tout le reste j'ai vu agit de construire hors de minix, à l'aide d'un chargeur de démarrage existant, de le construire dans un monde virtuel le démarrage du programme de chose, etc).

Je veux mettre en place l'un de mes anciens ordinateurs de bureau avec un moniteur, un clavier et une souris, et de commencer à travailler sur un vide disque dur.

Je veux apprendre à écrire mon propre chargeur de démarrage (j'ai trouvé beaucoup de ressources sur ce sujet, mais pour être complet, vous pouvez toujours vous ajoutez de la bonne), mon propre pilote USB (si c'est nécessaire), un pilote de CD (si c'est nécessaire), etc. Tout, à partir du sol.

Comment puis-je mettre le code sur l'ordinateur? Est-il préférable de le faire avec une disquette? La plupart des ordinateurs de le faire à partir d'une clé USB?

Pilotes dont j'ai besoin, et pouvez-vous suggérer des références à la construction de ceux-là?

Après la séquence de démarrage, alors quoi? Comment puis-je obtenir en mode protégé, etc.

Comment puis-je gérer la mémoire sans l'aide d'un système d'exploitation? Dois-je simplement utiliser ce que les adresses que je veux? Pas d'initialisation nécessaire?

Ce que je vais sans doute courir dans qui me confondre?

Comment puis-je le faire soit en ligne de commande O/S, et un graphique?

Qu'est ce qu'un graphique O/S construit sur? Comme, comment pourrais-je faire quelque chose comme, d'une ligne de commande, avec une police et une image en haut?

Où puis-je lire sur la configuration d'un environnement multitâche? (c'est à dire., avoir deux graphiques, comme des lignes de commande en cours d'exécution côte à côte).

Comment pourrais-je mettre en place une sorte de système de fenêtrage? Comment puis-je afficher les graphiques sur l'écran une fois simple multitâche est mis en place?

Croyez-moi, je comprends que c'est un très compliquée projet, et je vais probablement jamais l'obtenir autour de les achever ou écrire n'importe quoi sur elle de toute utilisation.

Il ya beaucoup d'autres pièces de cela, je n'ai pas mentionné, si vous pensez à tout, n'hésitez pas à ajouter ceux qui sont trop.

Merci de mettre un "sujet" pour répondre, par exemple, les pilotes USB, et puis peut-être une liste de ressources, des choses à regarder dehors pour, etc.

Aussi, s'il vous plaît ne pas suggérer bâtiment sur un autre O/S ou pré-code existant. Je sais que je vais lire beaucoup de pré-code existant (comme le noyau linux, ou exemple des ressources, pilotes, etc), mais en fin de compte je veux faire toutes les écrire moi-même. Je sais que je devrait se fonder sur autre chose, et il y a beaucoup d'autres questions sur la à celle que je peux lire si je change d'idée et d'aller dans cette voie. Mais celle-ci est tout au sujet de faire le tout à partir de zéro.

mise à jour

J'ai beaucoup de réponses à ce, principalement sur le processus de démarrage, les systèmes de fichiers et les différents projets existants à lire pour référence.

Toutes les suggestions sur la façon d'obtenir ce graphique? Différents modes vidéo et comment travailler avec eux, etc?

52voto

Bob Somers Points 4186

Premières choses d'abord. Lire, lire, lire, lire, lire. Vous devez avoir une solide compréhension de la façon dont le système d'exploitation fonctionne avant de vous peut espérer mettre en place votre propre.

Saisir l'un de Andrew Tanenbaum livres sur les systèmes d'exploitation. C'est celui que nous avons utilisé dans mon OS en classe au collège:

Modern Operating Systems

Les Systèmes d'Exploitation modernes sur Amazon

Malgré le ridicule de couverture, c'est une lecture fantastique, surtout pour un livre. Tanenbaum est vraiment un expert dans ce domaine et ses explications de comment le système d'exploitation fonctionne sous le capot sont claires et faciles à comprendre. Ce livre est surtout de la théorie, mais je crois qu'il a aussi un livre qui traite plus de la mise en œuvre. Je n'ai jamais lu, donc je ne peux pas commenter.

Qui devrait vous aider à l'os sur les processus de gestion, gestion de la mémoire, les systèmes de fichiers, et tout le reste de votre noyau de système d'exploitation doit faire pour l'obtenir jusqu'à un état démarrable. À partir de ce moment, c'est essentiellement une question de l'écriture de pilotes de périphérique pour le matériel dont vous avez besoin à l'appui, et en offrant des implémentations des fonctions de la bibliothèque C pour faire du noyau des appels pour des choses comme l'ouverture de fichiers et de périphériques, de la lecture et de l'écriture, la transmission de messages entre les processus, etc.

Lire sur x86 assemblée (en supposant que vous êtes à la conception de ce pour une machine x86). Cela devrait répondre à beaucoup de vos questions en ce qui concerne le déplacement entre les modes de fonctionnement du processeur.

Si vous avez une connaissance de l'électronique, il peut être plus facile de commencer par écrire un système d'exploitation pour un dispositif intégré qui a une ample documentation, car il sera généralement plus simple qu'un PC x86. J'ai toujours voulu écrire mon propre OS, et je commence avec la rédaction d'un micro-noyau système d'exploitation embarqué pour ce conseil de développement de Digilent. Il peut fonctionner le soft-core processeur MicroBlaze de Xilinx, qui a très approfondie de la documentation. Il a aussi un peu de RAM, flash de stockage de données, les Voyants, commutateurs, boutons, sortie VGA, etc. Beaucoup de choses à jouer avec l'écriture simple, les pilotes pour.

L'un des avantages d'un dispositif intégré est également que vous pouvez être en mesure d'éviter d'écrire un pilote VGA pour un long moment. Dans mon cas, le Digilent conseil de développement a un bord de l'UART, afin que je puisse utiliser efficacement la sortie série que ma console pour obtenir le tout en place et le démarrage d'une ligne de commande avec un minimum de tracas.

Assurez-vous que quoi que vous choisissiez de cible est facilement accessible et bien testé compilateur. Vous n'avez pas envie d'écrire un OS et un compilateur en même temps.

29voto

tr3 Points 1321

http://www.osdev.org/ et http://www.osdever.net/

bienvenue dans le monde du Développement d'OS

15voto

hbar Points 1255

Je suggère de travail, au moins au début, sur Bochs ou une autre machine virtuelle, la raison étant que vous pouvez le prendre avec vous partout où vous voulez, c'est plus facile à déboguer (vous pouvez voir l'état exact du matériel), et si vous avez besoin d'aide de l'extérieur de débogage ils peuvent utiliser le même "matériel" que vous.

La plupart des conseils utiles que j'ai est à vous lancer dans un état où vous pouvez être en cours d'exécution du code C le plus rapidement possible, c'est à dire le démarrage, le programme d'installation de vos tables de descripteurs, et obtenir vous-même à un point où il est sûr d'exécuter compilé C. la Plupart, si pas tous, le noyau devrait être dans C si vous voulez rester sain d'esprit et de continuer à travailler sur elle. De l'assemblée, tandis que requis dans certains endroits, c'est fastidieux et a tendance à être difficile à déboguer.

14voto

Jim Dennis Points 5454

À son niveau le plus bas le minimum pour un système d'exploitation doit être en mesure de faire est de conduire un matériel d'un système, d'une certaine façon. Si vous allez commencer avec un ordinateur, alors vous devez écrire du code qui peut être chargé par elle à partir d'un périphérique ou d'une autre. Les pc ont un BIOS firmware qui détermine la façon dont le matériel effectue une initialisation (au moins la vidéo, clavier, et une certaine forme de stockage ou du chargeur de démarrage).

Donc, commencer par apprendre les détails de bas niveau de la façon d'utiliser le BIOS (comment écrire un programme qui le BIOS permet de charger et d'exécuter). Qui finira par se transformer en votre chargeur de démarrage. Commencer petit. Juste obtenir un programme qui affiche: "Bonjour, Linus" directement depuis le BIOS processus de démarrage (sur une disquette serait un bon début ... ou sur un disque dur si vous le souhaitez).

À partir de là, je vous recommande la rédaction d'un très simple pilote de série ... mise à jour de votre chargeur de démarrage d'initialisation du port série, et de lancer le téléchargement. Ensuite, il peut exécuter le code qu'il tire de partout. À partir de là, écrire un peu de bootstrap peut écrire sur un autre ensemble de blocs (nous n'avons pas mis en œuvre un système de fichiers encore ... même pas de table de partition l'analyse; de sorte que nous venions de faire face avec des gammes de blocs sur le disque lors de la première).

À ce point de votre chargeur de démarrage doit être en mesure de tirer de nouveau du code, et dans la série, de déverser dans une partition (oui, de mettre en œuvre la table de partition de la manipulation, de la sorte ... si elle est conforme à la norme PC conventions est à vous à ce point), et de l'exécuter.

De là, vous devriez être en mesure de travailler sur beaucoup plus de fonctionnalités sophistiquées. À partir de cette base, vous pouvez écrire et compiler un nouveau "noyau" ... redémarrez votre banc d'essai, et ont le nouveau noyau a été déployée.

(Votre chargeur de démarrage doit prendre un certain signal, comme une PAUSE au cours de la série de handshaking lignes de commande pour ignorer le télécharger et il suffit de démarrer l'image existante; et il doit gérer un certain délai d'attente de cette façon).

À partir de là, écrire une simple couche de terminale et de commande shell? Un système de fichiers? Mettre en œuvre des commandes de télécharger de nouveaux contenus exécutables autre que le noyau (des fichiers ou des objets de quelque sorte). Et ainsi de suite.

Naturellement, vous avez peut-être commencé avec une console de pilote à l'aide du clavier du PC et de la vidéo (le BIOS INT 0x16h et INT 0x10H trucs, respectivement, si je me souviens bien). Cependant, je te suggère de commencer avec un pilote de série puisque vous pouvez automatiser votre construction/déploiement/test de cycle à partir de l'existant (fonctionnelle) du système. Depuis votre nouveau système d'exploitation va commencer comme un cross-compilé projet, il va être essentiel pour vous d'avoir une méthode rationalisée de la manutention.

Je ne sais pas dans quelle mesure vous voulez le prendre à votre projet. Un assez impressionnante de l'objectif à atteindre "l'auto hébergement." Si vous pouvez créer un simple assembleur/compilateur qui peut vous permettre d'utiliser votre nouveau système d'exploitation de (re-)construire, de lien, de démarrer dans une version de travail de votre nouveau système d'exploitation ... alors que vous avez atteint cet objectif. (Remarque c'est pas une obligation. De nombreux systèmes embarqués ne sont jamais va être l'auto-hébergement, et il n'y a rien de mal à cela).

12voto

Sam Points 1883

Si vous n'avez pas l'esprit à l'aide de matériel de la virtualisation, il y a un cours (livre + conférences + logiciel), qui vous mènera 'à Partir de la Nand de Tetris'. Vous créez un ensemble complet de système informatique entièrement vous-même à partir de l' (à ces fins atomique, et donné) électrique NAND gate, en passant par la construction de l'OS, une langue, et, enfin, le codage d'un simple jeu sur votre machine personnelle.

Je pense que c'est une excellente idée et j'ai bien l'intention de rester coincé dans bientôt. Le livre est étonnamment bon marché et je crois que le cours est enseigné au MIT. Je peux imaginer rien de plus gratifiant que d'avoir la pleine et entière connaissance de tout le système que vous avez construit vous-même à partir du sol.

Lien: http://www1.idc.ac.il/tecs/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X