Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/12/2010, à 19:24

gilbert

[C et Linux] adressage

Bonjour,

Est-il possible sous Linux (je dis bien Linux, pas besoin d'être forcément POSIX compliant), d'accéder à des adresses absolues du plan mémoire avec une application écrite en user-level ??

Il y a des fonctions comme mmap(2) mais je pense que ça ne fonctionne qu'en root ?

Et si cela est possible. Admettons que j'aie un pointeur myMemoryPtr qui pointe sur mon endroit désiré. Lorsque je l'incrémente de 1, il augmente d'une unité du type d'objet sur lequel il pointe ou d'une position mémoire ?

En fait mon but est de savoir lorsque j'exécute une ligne de code comme cela :

myData1 = *myMemoryPtr ;
myMemoryPtr ++;
myData2 = *myMemoryPtr ;

Comment sont affectés les bits sur le bus d'adresse afin de savoir s'il faut faire des décalages (adressage octet, mot, double mot, etc) ou bien si c'est fait automatiquement par l'unité en charge des accès mémoires ??

Merci pour votre aide.

Salutations.


Simplement moi-même..

Hors ligne

#2 Le 03/12/2010, à 20:10

BadZoot

Re : [C et Linux] adressage

Salut,

Je n'ai pas tout compris et je ne suis certainement pas le meilleur interlocuteur pour ton souci.
Selon mes maigres connaissances, c'est l'OS qui attribue quels processus accèdent à quelles adresses.

A mon avis, tu vas avoir des erreurs de segmentation.

Bon courage.


Le pervers père de Pierre perd son imper' vert.

No, I am Zoot's identical twin-sister : Dingo.

Hors ligne

#3 Le 03/12/2010, à 20:45

chopinhauer

Re : [C et Linux] adressage

gilbert, tu n'as jamais accès aux adresses absolus en mémoire. Linux (et Windows aussi) utilise le paging pour offrir à chaque processus un espace d'adressage séparé et laisser le processeur (la MMU en particulier) faire la traduction de l'adresse virtuel dans l'adresse réel.

La différence entre l'adresse de myMemoryPtr et ++myMemoryPtr est la dimension du type déclaré pour le pointeur (ou un octet pour void * si je me souviens bien). C'est le compilateur qui décide lors de la compilation.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#4 Le 03/12/2010, à 22:19

gilbert

Re : [C et Linux] adressage

chopinhauer a écrit :

gilbert, tu n'as jamais accès aux adresses absolus en mémoire. Linux (et Windows aussi) utilise le paging pour offrir à chaque processus un espace d'adressage séparé et laisser le processeur (la MMU en particulier) faire la traduction de l'adresse virtuel dans l'adresse réel.

Sûr de ça ??? ça serait embêtant..

En fait l'OS doit tourner sur une IP ARM implémentée dans un SoC atmel SAM9M10. Mon but c'est de pouvoir adresser une autre IP personnelle qui est sur le bus du processeur.

Dernière modification par gilbert (Le 03/12/2010, à 22:20)


Simplement moi-même..

Hors ligne

#5 Le 03/12/2010, à 22:30

chopinhauer

Re : [C et Linux] adressage

C'est vrai pour l'architecture x86, je ne connais pas l'architecture ARM (mais je pense que pour le userspace un système similaire au paging est utilisé). En tout cas si tu veux faire de l'Entrée/Sortie, tu vas devoir écrire un module pour Linux. Tu peux regarder les autres systèmes qui communiquent sur le bus du processeur pour t'inspirer.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#6 Le 03/12/2010, à 22:50

gilbert

Re : [C et Linux] adressage

bon.. je vais voir tout ça et je vous redis.

merci pour l'info.


Simplement moi-même..

Hors ligne