Projet système : extensions
De Ensiwiki
Révision de 25 mai 2011 à 13:03 par Rousfran (discussion | contributions)

Sommaire
Résumé
Ce document présente quelques extensions possible pour le projet système. Il sera complété au fil du temps.
BIOS
Pour programmer des appels au BIOS en mode réel sur PC, nous vous fournissons un patch à appliquer avec la commande suivante :
# Pour voir les changements appliques par le patch patch -p1 --dry-run < ~/Psys_bios.patch # Enlever le parametre --dry-run pour appliquer effectivement les changements
Il ajouter trois fichiers de sources et modifie le Makefile ainsi que le kernel.lds. La seule fonction ajoutée par ce patch est décrite dans le fichier .h. Notez bien que cette fonction doit être appelée avec la pagination désactivée ! Dans vos noyaux la pagination est activée. Voir crt0.S.
Mémoire virtuelle
A faire
- Coté application
-
- Définir un format d'application
- Exemple dans les programmes d'application au niveau du crt0.S
- Taille de la zone user (.data .rodata .text .bss) contenu dans le .bin
- Nom du programme (qu'on peut appeler)
- LDSCRIPT de l'application : toutes les applications commencent à 1Go
- Coté noyau
-
- dans le crt0.s
- Pas de copie de user.bin (inutile)
- Définir un pgalloc (blocs de 4kO) : nécessaire car les blocs doivent être alignés.
- principe : liste des blocs libre
- allocation en retirant les éléments de la liste et en initialisant la table de pagination
- libération en remettant les éléments dans la liste
- Démarrer 1er processus après avoir mis en place la table de pagination-
- Définir un nouvel appel système : startProcessus(char *nom)...
- Attention il faut une table de pagination par processus lourd, et ne pas oublier que la partie kernel doit être la même pour tous les processus
- Dans le contexte_switch, il faut changer de table de pagination au même niveau que le changement de la pile dans la TSS
- Quand est changé l'adresse de la pile dans la TSS il faut modifier la table de pagination dans la structure aussi
- TSS+28 (Cf. crt0.S du kernel)
- CR3 : table de pagination du processus
- CR0 : activation de la pagination (fait dans le crt0.S, pas besoin de modifier)
Conseil de mapping mémoire (pagination)
- 0 à 4ko -> adresse non valide (pour lever une exception en cas de pointeur null)
- 4Go-4ko à 4Go -> adresse non valide (pour lever une exception en cas d'accès à cette zone mémoire)
- 4ko à 64Mo -> Garder @virtuelle = @ physique
- 1Go -> @virtuelle de tous les programmes utilisateurs (allocation et correspondance à chaque pgalloc)
- Conseil
- Placer à 1Go le programme utilisateur.bin (.rodata, .data, .text, .bss) + tas (qui peut être alloué dynamiquement lors d'un memalloc, appel système à prévoir)
- Placer à (4Go-4ko) et avant la pile du programme utilisateur.
S'il y a un débordement de la pile, il y aura une exception.