[SOS] Virtual Memory Manager

Christophe Lucas clucas at rotomalug.org
Mer 10 Aou 10:32:10 CEST 2005


Thomas Petazzoni (thomas.petazzoni at enix.org) wrote:
> Salut,
> 
> KAISER Edouard wrote:
> 
> >Merci Thomas pour ces eclaircissements, y a que les cons qui changent
> >pas d'avis il parait, donc je me suis un peu pris en main et j'ai bien
> >relus le chapitre4. Tout semble plus clair dans ma tete sur la
> >pagination, et ce n'est pas du tout la montagne que je m'en etais fais
> >en tous cas.
> >Donc je vais l'implementer ! =)
> 
> Ah, très bien !
> 
> Ceci étant dit, je rappelle toutefois que faire un OS avec pagination 
> reste une possibilité. On peut très bien faire un OS sans pagination, 
> mais à ce moment là, on n'aura pas toutes les fonctionnalités d'un OS 
> classique de bureau/serveur. Par contre, ne pas avoir de pagination 
> permet de garantir d'autres propriétés au niveau temps-réel par exemple.
> 
> >Au passage, pourquoi avoir choisis des champs aussi grand que
> >sos_ui32_t dans la struct x86_pde ou x86_pte pour les champs qui ne
> >font qu'un bit au final ? (R/W, P etc...).
> 
> Je répondrais: « Pourquoi pas ? »
> 
> Honnêtement, je ne sais pas exactement. Sans doute qu'avec un unsigned 
> char ça aurait marché.

Je dirais qu'à première vue ca marcherait:
#include <unistd.h>
#include <stdio.h>

struct a {
        unsigned long int champ_1:1;
        unsigned long int champ_2:1;
};

struct b {
        unsigned char champ_1:1;
        unsigned char champ_2:1;
};

int main(int argc, char* argv)
{
        struct a A;
        struct b B;

        A.champ_1 = 1;
        A.champ_2 = 1;
        B.champ_1 = 1;
        B.champ_2 = 1;
}
et:

main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        andl    $-16, %esp
        movl    $0, %eax
        subl    %eax, %esp
        leal    -4(%ebp), %eax
        orb     $1, (%eax)
        leal    -4(%ebp), %eax
        orb     $2, (%eax)
        leal    -5(%ebp), %eax
        orb     $1, (%eax)
        leal    -5(%ebp), %eax
        orb     $2, (%eax)

(listing assembleur incomplet)

Bonne journée,

				- Christophe (clucas at rotomalug.org)


Plus d'informations sur la liste de diffusion Sos