2009-12-25 5 views
3

Où puis-je trouver des ressources/tutoriels sur la façon de mettre en œuvre les discussions sur une architecture x86 bootloader ... permet de dire que je veux charger des ressources en arrière-plan tout en affichant une barre de progression ..Threading sur bootloader

+0

comment cette question va-t-elle vous donner une opinion subjective? : D Bootloaders sont trop bas pour provoquer un débat religieux –

+0

@Hassan: Vous seriez surpris. – bcat

Répondre

8

C'est une question très inhabituel ... alors permettez-moi de donner mon avis à ce sujet ...

  • Bootloaders, sont vraiment un groupe limité de code d'assemblage, 464 octets pour être exact, 64 octets pour les informations de partition et deux derniers octets pour le marqueur magique pour indiquer la fin du chargeur de démarrage, soit 512 octets au total.
  • Bootloaders tels que Grub peuvent contourner cette limitation en implémentant un chargeur de démarrage en deux phases, la première phase est les 512 octets comme mentionné, puis la deuxième phase est chargée dans laquelle d'autres options etc sont effectuées.
  • Généralement, le code du bootloader est en 16 bits car le code original du BIOS est le code 16 bits, et c'est ce que le processeur 386 vers le haut vers le processeur moderne d'aujourd'hui, démarre en mode réel.
  • En utilisant un bootloader biphasé, les 512 premiers octets sont en 16 bits, puis la seconde phase fait passer le processeur en mode 32 bits, préparant les registres et les sélecteurs de porte en préparation, qui passe ensuite au code d'entrée du programme réel. faire le démarrage - c'est prendre en compte en ayant à lire à partir d'un emplacement spécifique sur le disque ou en lisant un fichier de configuration qui contient des données sur l'endroit où le code de démarrage est stocké.
  • Implémenter des threads en mode 32 bits est quelque chose qui sera difficile à produire car vous devrez créer une sorte de planificateur dans Assembly (puisque vous avez mentionné implémenter les threads sur un bootloader architecture x86).

Vous pouvez contourner ce problème en mettant en œuvre une deuxième partie de phase du bootloader en utilisant C (mais le plus délicat est qu'il n'y a pas des bibliothèques standard doivent être utilisés comme l'environnement d'exécution n'a pas été mis en place encore!)

Vous pouvez être meilleur en utilisant Grub ou même vérifier les bootloaders Open source BIOS here, de nos jours, bios sont flashable afin que vous puissiez obtenir un EFI (interface de firmware extensible here) qui est purement bios 32 bits - cela dépend sur votre processeur. Il y a aussi un autre site web qui pourrait fournir d'autres informations here.La barre de progression au démarrage, est malheureusement écrite en C/C++ qui (déjà en 32 bits, configuration de l'environnement, configuration du planificateur de tâches, threads inclus, gestionnaire de mémoire virtuelle chargé, etc. - c'est le niveau du noyau, après le démarrage procédure est terminée), dans lequel est un processus où un thread a été créé, qui fonctionne en arrière-plan illustrant la détection du matériel/environnement supplémentaire mis en place etc en utilisant une barre de progression pour dire à l'utilisateur "attendre, le système is loading "

+0

Vous avez raison, je suis en fait dans la deuxième étape et j'ai défini la plupart des classes et des types. La plupart des ressources que j'ai trouvées utilisent un planificateur. Ce qui me semble être une liste liée. Seul problème que j'ai rencontré avec writin une liste liée en c, est usin le mot-clé "nouveau". J'ai écrit une liste chaînée auparavant en C++. Son dos à la planche à dessin – Fredrick

-1

This book pourrait aider vous un peu - il décrit divers aspects du noyau Linux - y compris l'initialisation. Vous voudrez peut-être regarder GRUB sa jolie norme à travers les saveurs UNIX. Le livre que j'ai mentionné devrait être votre ressource de choix, le noyau ne considère pas son fil métallique capable jusqu'à assez tard dans le cycle d'initialisation, et par ceci je veux dire que la configuration des structures de données pour le filetage est bien documentée . Bien que je ne puisse pas penser à un réel avantage à autoriser les constructions de threads dans un chargeur de démarrage - premièrement, il est plus simple de configurer votre matériel de base en utilisant un code de procédure simple et vous attendez que le code soit preuve donc le filetage en tant que mécanisme de défense n'est pas nécessaire.

donc je vous attendre à vous cherchez à émulant une barre de progression: D

+0

Ouais, essayant d'en imiter un. Je vais essayer de trouver le livre – Fredrick