8
votes

Planification de l'écriture du système d'exploitation dans Objective-C

Pour le moment, j'apprends l'objectif C 2.0 et je prévois bientôt de l'apprentissage de la langue de montage, afin que je puisse écrire un système d'exploitation. Je sais que ce ne sera pas facile et je sais que cela prendra des mois, peut-être des années, des temps et de la patience. Cependant, je prévois d'écrire la plupart d'entre eux dans Objective-C (à l'exclusion des choses que vous devez écrire à l'Assemblée), car non seulement je connais l'objectif-C mieux que je connais c (je ne connaissais à peine aucun c), mais je Personnellement, aussi comme Objective-C beaucoup mieux. Est-ce possible?? Sinon, combien de c dois-je savoir? Devrais-je avoir une excellente compréhension de C à travers un livre? ou juste apprendre les bases en ligne?


6 commentaires

Bonne chance. Juste une citation, qui est entrée à l'esprit: Ceux qui ne comprennent pas Unix sont condamnés à la réinventer, mal. - Henry Spencer


Miku, génial, j'aime Henry Spencer. :) Mais même une mauvaise réimplément de Unix est une excellente occasion d'apprentissage.


@Sarnold: Pour apprendre que cela pourrait être tout bon - je ne m'attendais pas à (au moins moi =) pour pouvoir proposer une plate-forme, que je pouvais réellement utiliser quotidiennement. Mais aussi: favoriser le gras!


Miku, trop vrai, les conducteurs de disques seuliendront suffisamment d'intimidation pour me garder de partir de zéro. Bonne chance à Nick. :)


Quelques points d'entrée pour Osdev en général: Reddit.com/r/osdev


Himmele.blogspot.com/2011/07/... < / a>


5 Réponses :


0
votes

Vous pouvez minimiser la quantité de code de montage nécessaire aux systèmes d'exploitation simples en utilisant Environnement multiboot de GRUB . Grub peut apporter la CPU en mode protégé 32 bits (ou en mode 64 bits sur des jetons plus récentes :) pour vous et déposez le contrôle du code de votre noyau facilement.

Si votre boîte à outils de votre objectif C peut préparer des objets ELF, l'objectif c doit être possible pour un noyau, bien que vous deviez peut-être fournir à certains des services «gratuits». (Par exemple, la standard C spécifie que gratuit () est utilisé pour allouer la mémoire, mais l'allocation de la mémoire à l'intérieur du noyau ne peut pas simplement utiliser des bibliothèques standard - le noyau doit donc fournir ses propres routines d'allocation de mémoire.)

Bien sûr, à un moment donné, vous devrez utiliser l'assemblage pour écrire les outils que vous utiliserez pour les fillocks, les mutiles, les mappages de table de page, la configuration de bus PCI, etc., mais j'espère que vous aurez. appris beaucoup sur des conceptions de systèmes d'exploitation plus simples.


0 commentaires

4
votes

C'est possible ...

Le plus grand problème que vous aurez est le temps d'exécution.

Assembly est nécessaire pour un système d'exploitation, c'est vrai. Chargers de démarrage, Hal, GDT, etc ...

Ensuite, vous pouvez utiliser une autre langue de programmation.

C est bon, car il n'a pas besoin d'exécution, vous pouvez donc coder directement.

Objective-C s'appuie sur un énorme runtime, pour le passage de message, le polymorphisme, etc ...

écrire un système d'exploitation en C ++ serait plus facile, IMHO, car le temps d'exécution n'est pas aussi important que dans l'objectif-c ...

Cela dit, c'est possible ...

Je me suis écrit un petit système d'exploitation en utilisant c et, en tant qu'amoureux de l'objectif-c, j'aimerais aussi utiliser l'objectif-c ... C'est OpenSource, BTW, si vous voulez jeter un coup d'œil: http://www.eosgarden.com/fr/opensource/xeos/

Mais rappelez-vous que l'objectif-c est basé sur C. Cela signifie que vous devrez coder une bibliothèque C Standard C, avant de rédiger le code de l'objectif-C, car cela vous en fallait simplement compter. C'est une matière difficile, même si possible ...

Cela signifie que vous devrez coder stdlib, stdio, etc ...

Vous pouvez également essayer de porter des bibliothèques Standard C existantes. Ensuite, vous pourriez jeter un coup d'œil à gnustep, si vous ne voulez pas recoder tous les éléments de l'objectif-C ...

bonne chance :)


0 commentaires

10
votes

Si non, combien de c dois-je savoir?

tout cela. Objective-C est c, puis certains, vous ne pouvez donc vraiment pas prétendre connaître l'objectif-c jusqu'à ce que vous sachiez c.


0 commentaires

0
votes

Regardez le blog de Julien Le Comte. Il a commencé à écrire SIMLIX pour "brouiller les compétences de base CS". http://www.julienlecomte.net/blog/category/system-programming/


0 commentaires

1
votes

Eh bien, j'ai aussi des plans similaires, alors peut-être coopérer? J'aimerais ouvrir la source mon projet, donc si vous êtes prêt à aussi ...

Ceci est un grand projet. Ma meilleure suggestion est de rester avec OS X ou Linux avec Gnustep. Mais si vous insistez, j'ai un plan, un microkernel:

  • Toute la chose est construite avec Clang / LLVM, permettant à l'arc chaque fois que je peux.

  • Le noyau lui-même est minime. Son seul but est de charger des kexts qui le feront fonctionner. Certaines fonctionnalités sont construites dans le noyau:

    • Support binaires elfe. Pas encore de liaison dynamique.

    • "Systèmes de fichiers" pour GNU Tar. Ceci est adéquat pour un ramdisk raisonnable.

    • Un libc (syscalls) et libobjc2 adéquat pour exécuter l'objectif-c avec l'arc et une réflexion requise pour charger des kexts. Aucune autre caractéristique fantaisie ne sera encore intégrée.

    • Un fondation partielle qui permettra le chargement de nsbundle S par chemin et chargez leurs classes et leur traitement de ligne de commande de noyau.

    • toutes les fonctionnalités fournies par le noyau seront réimprimées dans Userland.

    • tôt tôt (ceux dans le ramdisk), y compris le pilote de système de fichiers et le pilote terminal.

    • Après la charge de FS et Terminal Kext, le noyau procédera et montera root FS et Liberkexts à partir de là, y compris:

      • parties restantes de fondation , libobjc2 et libc . SysCalls sont implémentés par des objets distribués sur des prises.

      • posix syscalls.

      • multithreading et planificateur (basé sur l'interface de libdispatch ou gcd si vous préférez)

      • Couche abstrait matérielle qui énumérera tous les périphériques avec des pilotes chargables minimes et les exposer comme des nœuds de périphérique à faible latence. (C'est Microkernel qui expose HW Access à Userland - Daemons sont de nouveaux pilotes.)

        et dans la zone user:

        • Userland libc (qui appelle SysCalls exposé via une interface d'objets distribuée du noyau)

        • Un pays user complet gnustep

        • Un lieur dynamique qui fonctionnera avec ELF à Apple Fashion (par exemple, les cadres de respect, l'injection de la bibliothèque et plus)

        • launchd, qui veut Sysvinit?

          Des idées supplémentaires?


0 commentaires