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

De Ensiwiki
Aller à : navigation, rechercher
 
(5 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 20 : Ligne 20 :
 
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 <tt>.h</tt>.
 
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 <tt>.h</tt>.
 
Notez bien que cette fonction doit être appelée avec la pagination désactivée ! Dans vos noyaux la pagination est activée. Voir <tt>crt0.S</tt>.
 
Notez bien que cette fonction doit être appelée avec la pagination désactivée ! Dans vos noyaux la pagination est activée. Voir <tt>crt0.S</tt>.
 
== 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.
 

Version actuelle en date du 24 avril 2013 à 13:13

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.