Projet système : extensions : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
(A faire)
Ligne 37 : Ligne 37 :
 
:* dans le <tt>crt0.S</tt>
 
:* dans le <tt>crt0.S</tt>
 
:: Pas de copie de <tt>user.bin</tt> (inutile)
 
:: Pas de copie de <tt>user.bin</tt> (inutile)
:* Définir un pgalloc (blocs de 4kO) : nécessaire car les blocs doivent être alignés.
+
:* Définir un pgalloc (blocs de 4ko) : nécessaire car les blocs doivent être alignés.
 
::* principe : liste des blocs libre
 
::* principe : liste des blocs libre
 
::*  allocation en retirant les éléments de la liste et en initialisant la table de pagination
 
::*  allocation en retirant les éléments de la liste et en initialisant la table de pagination
Ligne 45 : Ligne 45 :
 
:: 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
 
:: 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 <tt>contexte_switch</tt>, il faut changer de table de pagination au même niveau que le changement de la pile dans la TSS
 
:* Dans le <tt>contexte_switch</tt>, 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
+
:* Quand est changée l'adresse de la pile dans la TSS il faut aussi modifier la table de pagination dans la structure  
 
::*  <tt>TSS+28</tt> (Cf. <tt>crt0.S</tt> du kernel)
 
::*  <tt>TSS+28</tt> (Cf. <tt>crt0.S</tt> du kernel)
 
::*  <tt>CR3</tt> : table de pagination du processus
 
::*  <tt>CR3</tt> : table de pagination du processus

Version du 11 juin 2012 à 14:39

AttentionCette page est maintenue par les enseignants et utilisée par les élèves de la matière concernée. Vos contributions sont les bienvenues, mais merci d'en discuter avant de faire des modifications non triviales de la page, pour être sûr de ne pas perturber le déroulement du cours.

Mycomputer.png  Deuxième Année  CDROM.png  Informatique 

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

Voir aussi la partie sur Memory Management de la documentation Intel.

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ée l'adresse de la pile dans la TSS il faut aussi modifier la table de pagination dans la structure
  • 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.