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

111

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

  • Je ne m'attends pas à construire le prochain Linux ou Windows.

  • Je sais que ce sera horrible, bogué et ne fonctionnera pas, mais c'est bien.

Je veux tout écrire moi-même, en Assembly , C et (un peu) C ++ .

C'est un projet futur, car je suis occupé avec d'autres choses pour le moment et je n'ai pas le temps immédiatement, mais j'ai pensé que je le poserais maintenant, alors peut-être que je pourrais obtenir beaucoup de réponses à cela, et cela pourrait construire et être une ressource utile pour ce type d'approche (tout le reste que j'ai vu impliquait de construire à partir de minix, en utilisant un chargeur de démarrage existant, en le construisant dans un programme de démarrage virtuel, etc.).

Je souhaite configurer l'un de mes anciens ordinateurs de bureau avec un écran, un clavier et une souris, et commencer à travailler sur un disque dur vierge .

Je veux apprendre à écrire mon propre chargeur de démarrage (j'ai trouvé beaucoup de ressources à ce sujet, mais par souci d'exhaustivité, veuillez toujours en ajouter de bonnes), mon propre pilote USB (si nécessaire), un pilote de CD (si nécessaire) ), etc. Tout, de A à Z.

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

  • De quels pilotes ai-je besoin et pouvez-vous suggérer des références pour les construire?

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

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

  • Que vais-je sans aucun doute rencontrer qui me déroutera?

  • Comment puis-je en faire une ligne de commande O / S et une graphique?

  • Sur quoi repose un O / S graphique? Par exemple, comment pourrais-je faire quelque chose comme, 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, ayant deux lignes de commande de type graphique fonctionnant côte à côte).

  • Comment mettre en place une sorte de système de fenêtrage? Comment afficher des graphiques à l'écran une fois que le multitâche simple est configuré?

Croyez-moi, je comprends que c'est un projet très compliqué, et je ne pourrai probablement jamais le terminer ou y écrire quoi que ce soit.

Il y a beaucoup d'autres éléments que je n'ai pas mentionnés, si vous en pensez, n'hésitez pas à les ajouter également.

Veuillez mettre un "sujet" par réponse - par exemple, les pilotes USB, puis peut-être une liste de ressources, de choses à surveiller, etc.

De plus, veuillez ne pas suggérer de construire à partir d'un autre O / S ou d'un code préexistant. Je sais que je lirai beaucoup de code préexistant (comme le noyau Linux, ou des exemples de ressources, des pilotes existants, etc.) mais finalement je veux faire toute l'écriture moi-même. Je sais que je devrais partir de quelque chose d'autre, et il y a beaucoup d'autres questions sur SO à ce sujet que je pourrais lire si je change d'avis et emprunte cette voie. Mais celui-ci consiste à tout faire à partir de zéro.

Des suggestions sur la façon de le rendre graphique? Différents modes vidéo et comment travailler avec eux, etc.?

Carson Myers
la source
14
C'est mon plus grand objectif. Je veux tellement écrire un système d'exploitation, juste pour le plaisir et l'apprentissage de celui-ci ... Je n'ai tout simplement pas pu gagner du temps ces dernières années. Si jamais vous cherchez quelqu'un pour vous aider ou tout simplement discuter de choses avec vous, vous pouvez m'envoyer un e-mail à schmeling88 à gmail.com
Max Schmeling
2
@Max et @Tom, j'ai aussi le bogue. Je me prépare en fait à commencer cette fois-ci :)
Giovanni Galbo
2
Ne pensez pas aux graphismes maintenant. Unix n'a jamais pris en charge les graphiques directement, et ce n'est pas si mal. :-) Mais fondamentalement, il n'y a pas de moyen facile et portable d'aller au-delà de 800x600 IIRC.
Bastien Léonard
2
Vote de clôture trop large. Similaire à: stackoverflow.com/questions/254149/… || stackoverflow.com/questions/2800741/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
Pourquoi? Cette question est ancienne et ne génère plus d'activité. On s'en fout?
Carson Myers

Réponses:

51

Tout d'abord. Lisez, lisez, lisez, lisez, lisez. Vous devez avoir une bonne compréhension du fonctionnement du système d'exploitation avant de pouvoir espérer mettre en œuvre le vôtre.

Prenez l'un des livres d'Andrew Tanenbaum sur les systèmes d'exploitation. C'est celui que nous avons utilisé dans ma classe OS à l'université:

Systèmes d'exploitation modernes PDF

Systèmes d'exploitation modernes sur Amazon

Malgré la couverture ridicule, c'est une lecture fantastique, en particulier pour un manuel. Tanenbaum est vraiment un expert dans ce domaine et ses explications sur le fonctionnement du système d'exploitation sous le capot sont claires et faciles à comprendre. Ce livre est principalement de la théorie, mais je crois qu'il a également un livre qui traite davantage de la mise en œuvre. Cependant, je ne l'ai jamais lu, donc je ne peux pas le commenter.

Cela devrait vous aider à améliorer la gestion des processus, la gestion de la mémoire, les systèmes de fichiers et tout ce que votre noyau de système d'exploitation doit faire pour le mettre dans un état amorçable. À partir de là, il s'agit essentiellement d'écrire des pilotes de périphériques pour le matériel que vous devez prendre en charge et d'offrir des implémentations des fonctions de la bibliothèque C pour faire des appels du noyau pour des choses comme l'ouverture de fichiers et de périphériques, la lecture et l'écriture, la transmission de messages entre les processus, etc. .

Renseignez-vous sur l'assemblage x86 (en supposant que vous concevez ceci pour une machine x86). Cela devrait répondre à beaucoup de vos questions concernant le déplacement entre les modes de fonctionnement du processeur.

Si vous avez des connaissances en électronique, il peut être plus facile de commencer par écrire un système d'exploitation pour un périphérique intégré doté d'une documentation abondante, car il sera généralement plus simple qu'un PC x86. J'ai toujours voulu écrire mon propre système d'exploitation, et je commence par écrire un système d'exploitation intégré au micro-noyau pour cette carte de développement de Digilent. Il peut exécuter le processeur MicroBlaze soft-core de Xilinx, qui dispose d'une documentation très complète. Il a également de la RAM, un stockage de données flash, des LED, des commutateurs, des boutons, une sortie VGA, etc. Beaucoup de choses à jouer avec l'écriture de pilotes simples.

L'un des avantages d'un périphérique intégré est également que vous pouvez éviter d'écrire un pilote VGA pendant une longue période. Dans mon cas, la carte de développement Digilent a un UART intégré, je peux donc utiliser efficacement la sortie série comme console pour tout démarrer et démarrer sur une ligne de commande avec un minimum de tracas.

Assurez-vous simplement que tout ce que vous choisissez de cibler dispose d'un compilateur facilement disponible et bien testé. Vous ne pas voulez être écrire un système d' exploitation et un compilateur en même temps.

Bob Somers
la source
2
+1, mais je préfère le livre Tanenbaum Minix (qui vise davantage la mise en œuvre), et il n'est vraiment pas nécessaire de se concentrer uniquement sur la théorie. Il n'écrira pas de système d'exploitation du premier coup, de toute façon. Il va d'abord écrire un bootloader, puis passer en mode protégé, puis gérer les E / S, et ainsi de suite.
Bastien Léonard
2
+1 pour écrire un OS pour une puce embarquée. À la fin de la journée, vous sentirez que vous avez créé quelque chose d'unique, et c'est vraiment plus simple que d'en écrire un pour (par exemple) x86, tout en conservant les mêmes concepts de base. Regardez TinyOS, par exemple (bien que ce ne soit pas techniquement un système d'exploitation, il y a des choses comme le planificateur et les modules de tâches pour cela ..)
Kristopher Micinski
29

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

Bienvenue dans le monde du développement OS.

Voir aussi d'autres liens de documentation x86 dans SO tag wiki : manuels Intel et AMD, documentation du compilateur / assembleur et divers guides.

Il suggère également d'utiliser BOCHS ou un autre environnement virtuel pour le débogage, car vous pouvez effectuer une seule étape de votre chargeur de démarrage et examiner les registres.

Fnurglewitz
la source
1
Et surtout wiki.osdev.org !
Matthew Iselin
N'oubliez pas forums.osdever.net :)
Brenden
6
Je sais que ce sont des ressources utiles, mais je pense qu'il pourrait être plus utile pour les futurs lecteurs de fournir un contexte plutôt qu'un ensemble de liens sans explication.
icktoofay
@icktoofay La question est trop large pour recevoir une réponse correcte, je pense.
user253751
15

Je suggérerais de travailler, au moins au début, sur Bochs ou une autre machine virtuelle, la raison étant que vous pouvez l'emporter avec vous où vous voulez, c'est plus facile à déboguer (vous pouvez voir l'état exact du matériel), et si vous ont besoin d'une aide extérieure pour le débogage, ils peuvent utiliser exactement le même «matériel» que vous.

Le conseil le plus utile que j'ai est de vous mettre dans un état où vous pouvez exécuter du code C le plus rapidement possible - c'est-à-dire démarrer, configurer vos tables de descripteurs et arriver à un point où il est sûr d'exécuter le C. compilé. sinon tout le noyau devrait être en C si vous voulez rester sain d'esprit et continuer à travailler dessus. L'assemblage, bien que requis à certains endroits, est fastidieux et a tendance à être difficile à déboguer.

hbar
la source
Je vais regarder Bochs pour jouer pour le moment, mais je veux finalement simplement construire cela sur un PC
Carson Myers
Si cela fonctionne dans BOCHS, cela fonctionnera généralement sur un vrai PC, avec des différences modulo dans leur BIOS. La plupart de vos bogues seront probablement des choses qui affectent BOCHS et le matériel réel, mais la différence est que lorsque votre code est bloqué dans une boucle infinie dans BOCHS, vous pouvez utiliser le débogueur intégré de BOCHS pour savoir où et une seule étape pour trouver comment / pourquoi. Sur du matériel réel, tout ce que vous pouvez faire est d'ajouter des impressions de débogage. L'utilisation d'un débogueur vous fera gagner des heures et des jours de soucis.
Peter Cordes
14

Au niveau le plus bas, le minimum qu'un système d'exploitation doit être capable de faire est de piloter le matériel d'un système d'une manière ou d'une autre et de charger en quelque sorte et d'exécuter une sorte de «code utilisateur». Si vous allez commencer avec un PC, vous devez écrire du code qui peut être chargé par celui-ci à partir d'un appareil ou d'un autre. Les PC plus anciens ont un BIOS dans le micrologiciel qui détermine comment le matériel effectue une certaine initialisation (au moins la vidéo, le clavier et une forme de stockage ou de chargeur de démarrage). (Mise à jour d'octobre 2017: les PC plus récents ont un micrologiciel EFI ou UEFI ... ce qui est en grande partie une différence pédante; ils servent les mêmes objectifs pour cette discussion).

Commencez donc par apprendre les détails de bas niveau sur la façon d'utiliser le BIOS ou un autre micrologiciel sur votre système cible. Autrement dit, apprenez à écrire un programme que le BIOS peut charger et exécuter. Cela finira par se transformer en votre chargeur de démarrage. Commencer petit. Procurez-vous simplement un programme qui imprime: "Hello, Linus" directement à partir du processus de démarrage du firmware (sur une disquette, ou une clé USB, serait un bon début ... ou sur un disque dur si vous le souhaitez).

À partir de là, je recommanderais d'écrire un pilote série très simple ... mettez à jour votre chargeur de démarrage pour initialiser un port série et commencer un téléchargement à partir de là. Ensuite, il peut exécuter le code qu'il extrait. À partir de là, écrivez un peu de bootstrap qui peut écrire sur un autre ensemble de blocs (nous n'avons pas encore implémenté de système de fichiers ... pas même d'analyse de table de partition; donc nous traiterions simplement des plages brutes de blocs sur le disque au début ).

À ce stade, votre chargeur de démarrage devrait être en mesure d'extraire le nouveau code sur la ligne série, de le vider dans une partition (oui, implémenter une gestion de table de partition d'une sorte ... s'il est conforme aux conventions PC standard, c'est à vous de décider à ce stade. ) et exécutez-le.

À partir de là, vous devriez pouvoir travailler sur des fonctionnalités beaucoup plus sophistiquées. A partir de cette base, vous pouvez écrire et compiler un nouveau "noyau" ... redémarrer votre banc d'essai et y faire déployer le nouveau noyau.

(Votre chargeur de démarrage devrait prendre un signal, tel qu'un BREAK sur les lignes de liaison série comme une commande pour ignorer le téléchargement et simplement démarrer l'image existante; et il devrait également gérer un certain délai d'expiration de cette manière).

À partir de là, écrire une couche terminale très simple et un shell de commande? Un système de fichiers? Implémentez des commandes pour télécharger un nouveau contenu exécutable autre que le noyau (fichiers ou objets d'une certaine sorte). Etc.

Naturellement, vous auriez pu commencer avec un pilote de console en utilisant le clavier et la vidéo du PC (le BIOS INT 0x16h et INT 0x10H, respectivement, si je me souviens bien). Cependant, je suggérerais de commencer par un pilote série car vous pouvez ensuite automatiser votre cycle de construction / déploiement / test à partir de tout autre système (fonctionnel) existant. Étant donné que votre nouveau système d'exploitation débutera comme un projet compilé de manière croisée, il sera essentiel pour vous d'avoir une manière rationalisée de gérer cela.

Je ne sais pas jusqu'où vous souhaitez mener votre projet. Un objectif raisonnablement impressionnant serait de parvenir à «l'auto-hébergement». Si vous pouvez créer un assembleur / compilateur simple qui peut vous permettre d'utiliser votre nouveau système d'exploitation pour (re) construire, lier et démarrer dans une version fonctionnelle de votre nouveau système d'exploitation ... alors vous avez atteint cet objectif. (Notez que ce n'est pas une exigence. De nombreux systèmes embarqués ne seront jamais auto-hébergés et il n'y a rien de mal à cela).

Jim Dennis
la source
Sur le matériel moderne, il peut être plus difficile de faire fonctionner un pilote série que d'écrire des pilotes de console (vidéo / clavier). Au cours des années écoulées depuis que j'ai écrit ceci, les vieux connecteurs série sont devenus pratiquement inexistants sur les ordinateurs de bureau et portables modernes. Certains matériels embarqués et "amateurs" ont encore des interfaces RS-232C à l'ancienne sans qu'il soit nécessaire de passer par l'émulation USB. Par exemple: mpl.ch/t2600.html semble l'avoir.
Jim Dennis
12

Si cela ne vous dérange pas d'utiliser la virtualisation matérielle, il existe un cours (livre + cours + logiciel) qui vous mènera «De Nand à Tetris». Vous créez un système informatique complet entièrement vous-même à partir de la porte NAND électrique (à ces fins atomique et donnée), jusqu'à la construction du système d'exploitation, d'un langage, et enfin au codage d'un jeu simple sur votre machine personnelle.

Je pense que c'est une excellente idée et quelque chose dans lequel je compte bien m'engager bientôt. Le livre est étonnamment bon marché et je pense que le cours est enseigné au MIT. Je ne peux imaginer aucune sensation plus grande que d'avoir la connaissance complète et complète de tout un système que vous avez vous-même construit à partir de zéro.

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

Sam
la source
Je pense que ce lien est mort. Quelqu'un connaît-il un autre moyen d'accéder à cela?
Koray Tugay
1
@KorayTugay nand2tetris.org
user253751
10

Je commencerais petit et j'achèterais un kit de développement intégré 8086 et je développerais un système d'exploitation multitâche à ce sujet. Une fois que vous avez un noyau et que vous êtes familiarisé avec le travail au niveau matériel, vous serez prêt à faire quelque chose de plus difficile.

Construire même un clone DOS d'affichage VGA est une chose assez difficile. Les détails sont énormes. :-)

sujets spécifiques.

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

Le BIOS effectuera un bootstrap élémentaire.


De quels pilotes ai-je besoin et pouvez-vous suggérer des références pour les construire?

tout ce qui n'est pas des opérations directes de processeur / mémoire. Tout ce qui n'est pas directement dans le manuel de référence du processeur.


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

Le mode protégé fera partie de la séquence de démarrage.

Ensuite, vous commencez le multitâche et découvrez comment démarrer les processus.


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

Correct. Vous voudrez probablement trier un système de mémoire virtuelle éventuellement.


Que vais-je sans aucun doute rencontrer qui me déroutera?

ne pas avoir d'outils de débogage, pas d'E / S


Comment puis-je en faire une ligne de commande O / S et une graphique?

Avec chagrin. Recherchez Windows 3.1 et Linux, en particulier X windows.


Sur quoi repose un O / S graphique? Par exemple, comment pourrais-je faire quelque chose comme, une ligne de commande, avec une police et une image en haut?

Recherchez X windows.


dernier conseil: étudiez Linux / x Windows. Ce n'est pas parfait, mais cela permet de comprendre une approche. Etudiez également les systèmes embarqués.

Paul Nathan
la source
excellente réponse, j'ai déjà le noyau Linux à portée de main et je vais certainement regarder dans Windows 3.1.
Carson Myers
8

Je vois beaucoup de bonnes références aux sites de développement de systèmes d'exploitation, je vais donc décrire une approche différente:

Si vous voulez avoir l'expérience de l'implémentation d'un système d'exploitation à partir de métal nu, il existe de meilleurs choix de matériel qu'un ancien PC. Avec l'architecture PC, vous passerez une quantité excessive de temps à coder autour d'artefacts inintéressants de ses 30 ans d'histoire de conception. Par exemple, seule la partie bootloader du projet a probablement épuisé de nombreux programmeurs courageux.

Par exemple, vous aurez besoin d'un ensemble de pilotes pour lire votre noyau hors du disque et / ou du réseau. Ensuite, vous aurez besoin de code pour passer en mode protégé. À ce stade, vous avez besoin d'un autre ensemble de pilotes! Très peu de travail que vous effectuez pour mettre la puce en mode protégé sera transférable après ce point. Vous voulez l'exécuter sur un autre PC + - 4 ans et vous aurez besoin d'un autre ensemble de pilotes.

Examinez l'amorçage d'un ARM ou d'une autre puce «intégrée» 32 bits. Des cartes de développement bon marché sont disponibles, ou vous pouvez souder les vôtres! Certains ont Ethernet et USB intégrés. Je pense que vous aurez plus de plaisir à travailler sur une architecture saine et non croustillante, et peut-être vous retrouverez avec des compétences réutilisables.

Rayon des marais
la source
pas exactement ce que j'ai demandé, mais +1 pour m'avoir envoyé sur une tangente de lecture
Carson Myers
Marsh vous donne de bons conseils. Les détails de bas niveau de l'architecture x86 / BIOS sont complexes. Vous vous enliserez probablement dans ces détails, vous empêchant de vous concentrer sur les problèmes plus importants tels que la gestion de la mémoire et la planification des processus. Optez pour une architecture "plus propre" avec un port série. Vous serez plus heureux à long terme.
Barry Brown
8

Plus que toute autre chose, si vous voulez que cela fonctionne sur du matériel réel, vous avez absolument besoin d'une copie du manuel de votre processeur. Les manuels Intel ( http://www.intel.com/products/processor/manuals/ ) sont inestimables. Ils couvrent tout, des modes de commutation (réel / protégé) à la gestion de la mémoire virtuelle (si vous choisissez d'aller jusque-là) en passant par les appels système (si jamais vous arrivez en mode utilisateur). Plus important encore, ils expliquent en détail un certain nombre de choses qui doivent être configurées pour que les choses fonctionnent, comme le TSS et les registres de segments, que la plupart des textes du système d'exploitation ne discutent pas car ils sont plus concernés par des concepts de niveau supérieur que par le processeur. détails spécifiques.

csgordon
la source
Et vous pouvez obtenir des copies papier gratuitement via Intel.
Matthew Iselin
8

Essayez de lire le code d'un petit système d'exploitation open source de base, tel que MikeOS.

Alternativement, je suggère les étapes suivantes (devraient être amusantes!):

  1. Écrivez une machine virtuelle. Définissez toutes les instructions de votre processeur afin de connaître votre système à l'intérieur et à l'extérieur. Interfacez-le avec SDL pour le clavier, la souris, l'écran et l'accès audio. Restez simple afin que vous puissiez tout ranger dans votre tête à la fois. Il n'est pas nécessaire que ce soit une machine virtuelle à la pointe de la technologie, juste une machine capable d'émuler la fonction d'un «vrai» ordinateur.
  2. Ecrivez un assembleur pour le processeur de votre machine virtuelle. N'oubliez pas que cet assembleur n'a pas besoin d'être un programme écrit dans le langage de la machine virtuelle, mais tout ce qui peut convertir votre langage d'assemblage en code machine.
  3. Définissez un format exécutable et écrivez un éditeur de liens simple.
  4. Vous avez toutes les pièces pour écrire votre système d'exploitation maintenant! Écrivez-le dans le langage d'assemblage, assemblez-le ... etc.

Les étapes ci-dessus peuvent sembler un peu stupides pour écrire un système d'exploitation simple, mais bon, c'est vraiment amusant.

ouiliame
la source
6

consultez MikeOS . C'est un système d'exploitation assez simple écrit et lisible (comme dans un assemblage commenté). Même si c'est assez simple, il possède une interface graphique et prend en charge certains réseaux et multimédia.

edit : MenuetOS est graphique. Il est également écrit en simple asm, mais il est plus sophistiqué que MikeOS

Alex
la source
6

Vous avez un objectif ambitieux. Mais l'exécution est la clé.

La plupart des approches structurées (manuel ou classe universitaire) vous guideront tout au long du processus, mais elles fournissent une grande partie du code de fond qui passe sous silence les détails mystérieux de la plate-forme choisie et vous permet de vous concentrer sur les idées générales: planification des processus, gestion de la mémoire, prévention des interblocages, E / S, etc.

Mon conseil est le suivant: réduisez vos attentes et commencez par une question de base.

Qu'est-ce qu'un système d'exploitation?

Un informaticien ne dira jamais (espérons-le) qu'un système d'exploitation est une interface utilisateur graphique, ou un navigateur Web, ou un moyen de connecter des périphériques USB, ou tout ce qu'un utilisateur peut réellement voir ou toucher. Au lieu de cela, un système d'exploitation à son niveau le plus fondamental sont les choses que j'ai mentionnées ci-dessus. Ils relèvent tous d'un seul et même grand parapluie: la gestion des ressources.

Un système d'exploitation n'est rien de plus qu'un programme qui gère les ressources matérielles de l'ordinateur: mémoire, CPU et périphériques.

Voici un système d'exploitation simple: un programme permet à l'utilisateur de saisir un programme (en hexadécimal ou en binaire) à l'aide d'une connexion série. Une fois que le programme a été saisi, il exécute le programme. Lorsque le programme est terminé, le contrôle est retourné à l'utilisateur où il peut soit réexécuter le programme, soit en taper un nouveau.

Faites ceci sur une architecture «propre» telle qu'un processeur ARM intégré avec environ 64 Ko de mémoire. Vous pouvez coder cela en assemblage après quelques jours d'apprentissage des tenants et aboutissants de l'ARM. Et voila!, vous avez vous-même un système d'exploitation.

Il fait tout ce qu'un système d'exploitation est censé faire:

  • Il gère la mémoire en ne laissant pas l'utilisateur écraser le système d'exploitation lui-même.
  • Il planifie un seul processus à exécuter.
  • Il gère les E / S vers le périphérique série unique.

Cela vous donne un élément de base pour commencer. Vous avez maintenant beaucoup de choix. L'une d'elles serait peut-être d'autoriser le chargement de deux programmes en mémoire et de laisser l'utilisateur décider lequel exécuter ensuite.

Ou vous pouvez laisser l'utilisateur suspendre l'exécution d'un programme, passer à l'autre, suspendre et revenir en arrière. C'est du multitâche rudimentaire, même s'il est entièrement manuel.

Vos choix sont illimités, mais chacun est un petit pas par rapport à ce que vous aviez auparavant.

C'est amusant si vous ne visez pas trop haut!

Barry Brown
la source
4

De nombreuses écoles ont des classes OS qui font une grande partie de ce que vous décrivez. Mon école (CMU) a enseigné le système d'exploitation en C, et nous avons écrit un noyau, un système de fichiers et un shell, et avons reçu le code d'un chargeur de démarrage.

Malheureusement, je n'ai pas pu trouver de ressources définitives pour ce cours (15-412) sur le Web, et il a évolué avec le temps. Mais peut-être que les gens pourraient publier des liens vers des sources et des devoirs pour les écoles qui ont de bonnes ressources sur le Web.

Drew Hoskins
la source
3

Vous pourriez apprécier ça didacticiel intitulé "Roll your own toy UNIX-clone OS", il est très perspicace et devrait vous aider sur votre chemin.

Bonne chance.

noirâtre
la source
1
Bien qu'il soit génial d'avoir un didacticiel aussi approfondi, il contient de nombreux bugs que les débutants rencontrent constamment. Le tutoriel est génial si et seulement si vous êtes prêt à ouvrir également des éléments tels que les manuels Intel et à réfléchir à ce que vous faites (c'est-à-dire, ne copiez pas et ne collez pas!).
Matthew Iselin
3

Étudiez le système A2 (anciennement appelé système Oberon ) pour des idées que vous pouvez voler. C'est un système d'exploitation graphique construit par seulement deux personnes, bien que l'un d'eux soit, certes, Niklaus Wirth. Première sortie vers 1990 et la vitesse est étonnamment bonne. Il y a un livre de Gutknecht.

Norman Ramsey
la source
3

À propos de la programmation graphique de bas niveau, cela vous donnera beaucoup d'informations: http://www.osdever.net/FreeVGA/home.htm . (C'est aussi très intéressant pour le mode texte.)

Que vais-je sans aucun doute rencontrer qui me déroutera?

Vous vous rendrez compte que sur PC, il y a énormément de choses qui ne sont pas claires: le jeu d'instructions x86 lui-même est compliqué, et lorsque vous obtenez un accès direct au matériel, cela peut prendre un certain temps avant de comprendre comment écrire un seul caractère à l'écran .

Ne vous inquiétez pas pour les disquettes et autres, la plupart du temps, vous utiliserez un émulateur tel que Bochs ou QEmu.

Bastien Léonard
la source
3

Vous voudrez peut-être envisager de jeter un œil aux concepts des systèmes d'exploitation, par Abraham Silberschatz - Comprendre les concepts de programmation des systèmes est une exigence fondamentale, jetez un coup d'œil aux internes du noyau F / OSS des systèmes d'exploitation linux * BSD et GNU / Linux , en particulier les versions antérieures, qui sont probablement un peu plus documentés.texte alternatif texte alternatif

amaterasu
la source
1
Silbershatz est vraiment très bon, mais de très haut niveau.
Paul Nathan
D'accord; Cependant, je dirais que c'est fondamentalement essentiel. Documentation juste là-haut avec les systèmes d'exploitation modernes par Tanenbaum (mentionné plus tôt)
amaterasu
2

Jetez un œil à Minix . Etudiez le code source avec " Conception et implémentation des systèmes d'exploitation ". Envisagez de contribuer au projet. Je pense que Minix est un système d'exploitation vraiment bon et prometteur en devenir. C'est aussi un projet bien financé. Cela signifie que vous pourriez même être payé pour vos contributions!

Vijay Mathew
la source
1

C'est très facile grâce au fait que le BIOS possède déjà de nombreuses fonctions d'entrée / sortie intégrées pour changer le mode d'écran, changer la couleur des pixels, écrire du texte à l'écran et bien d'autres choses. Cependant, il n'inclut pas la prise en charge des systèmes de fichiers, c'est l'une des rares choses que vous devez intégrer dans votre système d'exploitation.

Le BIOS charge le premier secteur sur le disque dur et commence à exécuter le code à partir de là, donc votre système d'exploitation doit être placé avec la première instruction dans le premier secteur sur le disque dur.

Cet article de Wikipédia devrait vous aider à démarrer sur les interruptions du BIOS pour écrire du texte à l'écran, recevoir des touches du clavier et d'autres choses. https://en.wikipedia.org/wiki/BIOS_interrupt_call

Même si vous envisagez d'utiliser C ++, je vous recommande fortement de lire sur la programmation d'assemblage, car il est essentiel de comprendre le fonctionnement du matériel.

Alpha_Pi
la source