"James Kanze" wrote in message
news:
Alain Gaillard wrote:
> kanze a écrit :
[...]
Le problème n'est pas vraiment pour les fonctions. Je reconnais
bien qu'un niveau d'indirection supplémentaire pourrait faire
l'affaire (et encore, il y a des cas où ça ne doit pas être
évident). Le problème, c'est les données statiques.
Non, parce qu'une DLL (ou un exe) ne gère que des adresse 32
bit (qui sont que des offset en fait), le système lui gère
aussi les segments, et peut faire en sorte qu'un code
s'éxécute avec le bon segment de données (et bien sur le bon
segement de pile etc...).
"James Kanze" <kanze.james@neuf.fr> wrote in message
news:1157885071.765095.141990@m79g2000cwm.googlegroups.com...
Alain Gaillard wrote:
> kanze a écrit :
[...]
Le problème n'est pas vraiment pour les fonctions. Je reconnais
bien qu'un niveau d'indirection supplémentaire pourrait faire
l'affaire (et encore, il y a des cas où ça ne doit pas être
évident). Le problème, c'est les données statiques.
Non, parce qu'une DLL (ou un exe) ne gère que des adresse 32
bit (qui sont que des offset en fait), le système lui gère
aussi les segments, et peut faire en sorte qu'un code
s'éxécute avec le bon segment de données (et bien sur le bon
segement de pile etc...).
"James Kanze" wrote in message
news:
Alain Gaillard wrote:
> kanze a écrit :
[...]
Le problème n'est pas vraiment pour les fonctions. Je reconnais
bien qu'un niveau d'indirection supplémentaire pourrait faire
l'affaire (et encore, il y a des cas où ça ne doit pas être
évident). Le problème, c'est les données statiques.
Non, parce qu'une DLL (ou un exe) ne gère que des adresse 32
bit (qui sont que des offset en fait), le système lui gère
aussi les segments, et peut faire en sorte qu'un code
s'éxécute avec le bon segment de données (et bien sur le bon
segement de pile etc...).
Je sais que le 80386 introduisait un mechanisme pour supporter
ce genre de chose -- un appel FAR pouvait passer par un espèce
de portail qui faisait qu'on ne pourrait arriver qu'à des
adresses bien définies, mais qu'on ce faisant, on passait en
mode super-user.
règistre, et puis d'utiliser un « trap » -- sur une 80x86, une
instruction INT -- qui passe par une table d'interruptions (que
le code utilisateur ne peut pas modifier, au moins en mode
protégée du processeur).
machine. Même aujourd'hui, je vois mal un système qui mappe l'OS
et l'application utilisateur dans le même espace virtuel.
J'avais oublié le :-). L'idée qu'un processus utilisateur ne
peut se servir de 2 Go, à la place de 4,
sur un processeur
moderne 32 bits avec mémoire virtuelle, me faisait en fait
penser au commentaire « 564 [ou quelque chose comme ça] mémoire
serait assez grande pour n'importe qui », attribué à Bill Gates
(faussement, je crois).
Alors, comme fait-il ? Le problème reste que dans un code ultra
simple :
int
f()
{
static int i = 0 ;
return i ++ ;
}
le compilateur génère une adresse absolue pour i.
J'avoue que je suis curieux en ce qui concerne la solution.
Je sais que le 80386 introduisait un mechanisme pour supporter
ce genre de chose -- un appel FAR pouvait passer par un espèce
de portail qui faisait qu'on ne pourrait arriver qu'à des
adresses bien définies, mais qu'on ce faisant, on passait en
mode super-user.
règistre, et puis d'utiliser un « trap » -- sur une 80x86, une
instruction INT -- qui passe par une table d'interruptions (que
le code utilisateur ne peut pas modifier, au moins en mode
protégée du processeur).
machine. Même aujourd'hui, je vois mal un système qui mappe l'OS
et l'application utilisateur dans le même espace virtuel.
J'avais oublié le :-). L'idée qu'un processus utilisateur ne
peut se servir de 2 Go, à la place de 4,
sur un processeur
moderne 32 bits avec mémoire virtuelle, me faisait en fait
penser au commentaire « 564 [ou quelque chose comme ça] mémoire
serait assez grande pour n'importe qui », attribué à Bill Gates
(faussement, je crois).
Alors, comme fait-il ? Le problème reste que dans un code ultra
simple :
int
f()
{
static int i = 0 ;
return i ++ ;
}
le compilateur génère une adresse absolue pour i.
J'avoue que je suis curieux en ce qui concerne la solution.
Je sais que le 80386 introduisait un mechanisme pour supporter
ce genre de chose -- un appel FAR pouvait passer par un espèce
de portail qui faisait qu'on ne pourrait arriver qu'à des
adresses bien définies, mais qu'on ce faisant, on passait en
mode super-user.
règistre, et puis d'utiliser un « trap » -- sur une 80x86, une
instruction INT -- qui passe par une table d'interruptions (que
le code utilisateur ne peut pas modifier, au moins en mode
protégée du processeur).
machine. Même aujourd'hui, je vois mal un système qui mappe l'OS
et l'application utilisateur dans le même espace virtuel.
J'avais oublié le :-). L'idée qu'un processus utilisateur ne
peut se servir de 2 Go, à la place de 4,
sur un processeur
moderne 32 bits avec mémoire virtuelle, me faisait en fait
penser au commentaire « 564 [ou quelque chose comme ça] mémoire
serait assez grande pour n'importe qui », attribué à Bill Gates
(faussement, je crois).
Alors, comme fait-il ? Le problème reste que dans un code ultra
simple :
int
f()
{
static int i = 0 ;
return i ++ ;
}
le compilateur génère une adresse absolue pour i.
J'avoue que je suis curieux en ce qui concerne la solution.
"kanze" wrote in message
news:
Vincent Burel wrote:
> "James Kanze" wrote in message
> news:
> [...]
ben c'est à dire que chaque "task" s'exécute dans un environnement mémoire
propre, et en fonction d'une table de mappage mem-phy <-> mem logique
spécique. Quand le programme fait appel à une adresse 32 bit, c'est
dans un contexte mémoire donné...
[...]
"kanze" <kanze@gabi-soft.fr> wrote in message
news:1157956613.844273.280450@d34g2000cwd.googlegroups.com...
Vincent Burel wrote:
> "James Kanze" <kanze.james@neuf.fr> wrote in message
> news:1157885071.765095.141990@m79g2000cwm.googlegroups.com...
> [...]
ben c'est à dire que chaque "task" s'exécute dans un environnement mémoire
propre, et en fonction d'une table de mappage mem-phy <-> mem logique
spécique. Quand le programme fait appel à une adresse 32 bit, c'est
dans un contexte mémoire donné...
[...]
"kanze" wrote in message
news:
Vincent Burel wrote:
> "James Kanze" wrote in message
> news:
> [...]
ben c'est à dire que chaque "task" s'exécute dans un environnement mémoire
propre, et en fonction d'une table de mappage mem-phy <-> mem logique
spécique. Quand le programme fait appel à une adresse 32 bit, c'est
dans un contexte mémoire donné...
[...]
j'ai oublier de conclure, mais cela veux dire que le systme (windows en tout
cas) peut mapper la mémoire logique comme bon lui semble en mémoire physique
(par page évidemment) et que même si le programme (exe ou DLL) est compilé
dans un espace logique linéaire de 4 Go (adress 32 bit), avant éxécution, le
systeme peut reloger tout ou partie du code et des données, n'importe où
dans la mémoire physique, dans le désordre ou pas, fragmenté ou pas... Alors
que lui continuera de travailler avec des adresse logique, et voir la
mémoire comme un espace linéaire et continue de 4Go...
j'ai oublier de conclure, mais cela veux dire que le systme (windows en tout
cas) peut mapper la mémoire logique comme bon lui semble en mémoire physique
(par page évidemment) et que même si le programme (exe ou DLL) est compilé
dans un espace logique linéaire de 4 Go (adress 32 bit), avant éxécution, le
systeme peut reloger tout ou partie du code et des données, n'importe où
dans la mémoire physique, dans le désordre ou pas, fragmenté ou pas... Alors
que lui continuera de travailler avec des adresse logique, et voir la
mémoire comme un espace linéaire et continue de 4Go...
j'ai oublier de conclure, mais cela veux dire que le systme (windows en tout
cas) peut mapper la mémoire logique comme bon lui semble en mémoire physique
(par page évidemment) et que même si le programme (exe ou DLL) est compilé
dans un espace logique linéaire de 4 Go (adress 32 bit), avant éxécution, le
systeme peut reloger tout ou partie du code et des données, n'importe où
dans la mémoire physique, dans le désordre ou pas, fragmenté ou pas... Alors
que lui continuera de travailler avec des adresse logique, et voir la
mémoire comme un espace linéaire et continue de 4Go...
Arnold McDonald (AMcD) a écrit :
En effet tu lis en diagonale, car d'abord je ne vois pas en quoi cette
discussion est une engueulo.
Déjà, ce n'est pas le processeur qui possède la mémoire virtuelle
("un processeur moderne 32 bits avec mémoire virtuelle"),
On a pas dit ça ce me semble.
On a pas dit ça non plus, dès le début de la discussion j'ai dit:
'les 4 g0 adressables pour le processus." et les tables de saut des
dll sont toujours dans les 2 go supérieurs
Arnold McDonald (AMcD) a écrit :
En effet tu lis en diagonale, car d'abord je ne vois pas en quoi cette
discussion est une engueulo.
Déjà, ce n'est pas le processeur qui possède la mémoire virtuelle
("un processeur moderne 32 bits avec mémoire virtuelle"),
On a pas dit ça ce me semble.
On a pas dit ça non plus, dès le début de la discussion j'ai dit:
'les 4 g0 adressables pour le processus." et les tables de saut des
dll sont toujours dans les 2 go supérieurs
Arnold McDonald (AMcD) a écrit :
En effet tu lis en diagonale, car d'abord je ne vois pas en quoi cette
discussion est une engueulo.
Déjà, ce n'est pas le processeur qui possède la mémoire virtuelle
("un processeur moderne 32 bits avec mémoire virtuelle"),
On a pas dit ça ce me semble.
On a pas dit ça non plus, dès le début de la discussion j'ai dit:
'les 4 g0 adressables pour le processus." et les tables de saut des
dll sont toujours dans les 2 go supérieurs
En effet tu te trompes, la table de sauts est constituée à l'appel de
LoadLibrary. GetProcAddress ne fait que retourner une e addresse dans la
table.
En effet tu te trompes, la table de sauts est constituée à l'appel de
LoadLibrary. GetProcAddress ne fait que retourner une e addresse dans la
table.
En effet tu te trompes, la table de sauts est constituée à l'appel de
LoadLibrary. GetProcAddress ne fait que retourner une e addresse dans la
table.
kanze a écrit :
> Mais alors, il faudrait des pointeurs FAR, à 48 bits, ou ?
??
kanze a écrit :
> Mais alors, il faudrait des pointeurs FAR, à 48 bits, ou ?
??
kanze a écrit :
> Mais alors, il faudrait des pointeurs FAR, à 48 bits, ou ?
??
"kanze" wrote in message
news:
Vincent Burel wrote:
> "James Kanze" wrote in message
> news:
> Alain Gaillard wrote:
> > kanze a écrit :
> [...]
> Le problème n'est pas vraiment pour les fonctions. Je reconnais
> bien qu'un niveau d'indirection supplémentaire pourrait faire
> l'affaire (et encore, il y a des cas où ça ne doit pas être
> évident). Le problème, c'est les données statiques.
> Non, parce qu'une DLL (ou un exe) ne gère que des adresse 32
> bit (qui sont que des offset en fait), le système lui gère
> aussi les segments, et peut faire en sorte qu'un code
> s'éxécute avec le bon segment de données (et bien sur le bon
> segement de pile etc...).
Mais alors, il faudrait des pointeurs FAR, à 48 bits, ou ?
ben c'est à dire que chaque "task" s'exécute dans un
environnement mémoire propre, et en fonction d'une table de
mappage mem-phy <-> mem logique spécique. Quand le programme
fait appel à une adresse 32 bit, c'est toujours dans un
contexte mémoire donné...
il faut lire le "IA-32 Intel ® Architecture Software
Developer's Manual Vol ume 3 : System Programming Guide"
(document 25366814.pdf téléchargeable chez intel) qui explique
les différents models mémoires...
on peut supposer que windows utilise le Multi Segment Model où
chaque "task" a son jeu de segement (CS, SS, DS, ES, FS, GS)
et de table de descripteur (LDT). Et qu'en plus, windows
utilise le paging, qui permet de découper la mémoire en
tranche de 4kB (par exemple), et de faire autant de mapping
(logique to physique) différent... Notons que c'est le
processor qui s'occupe de la translation logique to physique,
selon la LDT (ou GDT pour le system) et peut génère une
exception-fault si la page demandée n'est pas en mémoire
physique (et c'est la que le systeme peut prendre la main,
pour monter de la swap par exemple)...
"kanze" <kanze@gabi-soft.fr> wrote in message
news:1157956613.844273.280450@d34g2000cwd.googlegroups.com...
Vincent Burel wrote:
> "James Kanze" <kanze.james@neuf.fr> wrote in message
> news:1157885071.765095.141990@m79g2000cwm.googlegroups.com...
> Alain Gaillard wrote:
> > kanze a écrit :
> [...]
> Le problème n'est pas vraiment pour les fonctions. Je reconnais
> bien qu'un niveau d'indirection supplémentaire pourrait faire
> l'affaire (et encore, il y a des cas où ça ne doit pas être
> évident). Le problème, c'est les données statiques.
> Non, parce qu'une DLL (ou un exe) ne gère que des adresse 32
> bit (qui sont que des offset en fait), le système lui gère
> aussi les segments, et peut faire en sorte qu'un code
> s'éxécute avec le bon segment de données (et bien sur le bon
> segement de pile etc...).
Mais alors, il faudrait des pointeurs FAR, à 48 bits, ou ?
ben c'est à dire que chaque "task" s'exécute dans un
environnement mémoire propre, et en fonction d'une table de
mappage mem-phy <-> mem logique spécique. Quand le programme
fait appel à une adresse 32 bit, c'est toujours dans un
contexte mémoire donné...
il faut lire le "IA-32 Intel ® Architecture Software
Developer's Manual Vol ume 3 : System Programming Guide"
(document 25366814.pdf téléchargeable chez intel) qui explique
les différents models mémoires...
on peut supposer que windows utilise le Multi Segment Model où
chaque "task" a son jeu de segement (CS, SS, DS, ES, FS, GS)
et de table de descripteur (LDT). Et qu'en plus, windows
utilise le paging, qui permet de découper la mémoire en
tranche de 4kB (par exemple), et de faire autant de mapping
(logique to physique) différent... Notons que c'est le
processor qui s'occupe de la translation logique to physique,
selon la LDT (ou GDT pour le system) et peut génère une
exception-fault si la page demandée n'est pas en mémoire
physique (et c'est la que le systeme peut prendre la main,
pour monter de la swap par exemple)...
"kanze" wrote in message
news:
Vincent Burel wrote:
> "James Kanze" wrote in message
> news:
> Alain Gaillard wrote:
> > kanze a écrit :
> [...]
> Le problème n'est pas vraiment pour les fonctions. Je reconnais
> bien qu'un niveau d'indirection supplémentaire pourrait faire
> l'affaire (et encore, il y a des cas où ça ne doit pas être
> évident). Le problème, c'est les données statiques.
> Non, parce qu'une DLL (ou un exe) ne gère que des adresse 32
> bit (qui sont que des offset en fait), le système lui gère
> aussi les segments, et peut faire en sorte qu'un code
> s'éxécute avec le bon segment de données (et bien sur le bon
> segement de pile etc...).
Mais alors, il faudrait des pointeurs FAR, à 48 bits, ou ?
ben c'est à dire que chaque "task" s'exécute dans un
environnement mémoire propre, et en fonction d'une table de
mappage mem-phy <-> mem logique spécique. Quand le programme
fait appel à une adresse 32 bit, c'est toujours dans un
contexte mémoire donné...
il faut lire le "IA-32 Intel ® Architecture Software
Developer's Manual Vol ume 3 : System Programming Guide"
(document 25366814.pdf téléchargeable chez intel) qui explique
les différents models mémoires...
on peut supposer que windows utilise le Multi Segment Model où
chaque "task" a son jeu de segement (CS, SS, DS, ES, FS, GS)
et de table de descripteur (LDT). Et qu'en plus, windows
utilise le paging, qui permet de découper la mémoire en
tranche de 4kB (par exemple), et de faire autant de mapping
(logique to physique) différent... Notons que c'est le
processor qui s'occupe de la translation logique to physique,
selon la LDT (ou GDT pour le system) et peut génère une
exception-fault si la page demandée n'est pas en mémoire
physique (et c'est la que le systeme peut prendre la main,
pour monter de la swap par exemple)...
Vincent Burel a écrit :
> j'ai oublier de conclure, mais cela veux dire que le systme
> (windows en tout cas) peut mapper la mémoire logique comme
> bon lui semble en mémoire physique (par page évidemment) et
> que même si le programme (exe ou DLL) est compilé dans un
> espace logique linéaire de 4 Go (adress 32 bit), avant
> éxécution, le systeme peut reloger tout ou partie du code et
> des données, n'importe où dans la mémoire physique, dans le
> désordre ou pas, fragmenté ou pas... Alors que lui
> continuera de travailler avec des adresse logique, et voir
> la mémoire comme un espace linéaire et continue de 4Go...
Parfaitement exact et bien dit :)
Vincent Burel a écrit :
> j'ai oublier de conclure, mais cela veux dire que le systme
> (windows en tout cas) peut mapper la mémoire logique comme
> bon lui semble en mémoire physique (par page évidemment) et
> que même si le programme (exe ou DLL) est compilé dans un
> espace logique linéaire de 4 Go (adress 32 bit), avant
> éxécution, le systeme peut reloger tout ou partie du code et
> des données, n'importe où dans la mémoire physique, dans le
> désordre ou pas, fragmenté ou pas... Alors que lui
> continuera de travailler avec des adresse logique, et voir
> la mémoire comme un espace linéaire et continue de 4Go...
Parfaitement exact et bien dit :)
Vincent Burel a écrit :
> j'ai oublier de conclure, mais cela veux dire que le systme
> (windows en tout cas) peut mapper la mémoire logique comme
> bon lui semble en mémoire physique (par page évidemment) et
> que même si le programme (exe ou DLL) est compilé dans un
> espace logique linéaire de 4 Go (adress 32 bit), avant
> éxécution, le systeme peut reloger tout ou partie du code et
> des données, n'importe où dans la mémoire physique, dans le
> désordre ou pas, fragmenté ou pas... Alors que lui
> continuera de travailler avec des adresse logique, et voir
> la mémoire comme un espace linéaire et continue de 4Go...
Parfaitement exact et bien dit :)
En effet tu lis en diagonale, car d'abord je ne vois pas en quoi cette
discussion est une engueulo.
Ne serait-ce que ton ton "je suis le best je sais tout", ça donen une vague
idée de franche camaraderie.
PS : garde ton ton doct
En effet tu lis en diagonale, car d'abord je ne vois pas en quoi cette
discussion est une engueulo.
Ne serait-ce que ton ton "je suis le best je sais tout", ça donen une vague
idée de franche camaraderie.
PS : garde ton ton doct
En effet tu lis en diagonale, car d'abord je ne vois pas en quoi cette
discussion est une engueulo.
Ne serait-ce que ton ton "je suis le best je sais tout", ça donen une vague
idée de franche camaraderie.
PS : garde ton ton doct