Newsgroup: it.comp.programmare.win32
Titolo: modalità di indirizzamento

salve, ho un dubbio circa le modalità di indirizzamento in Windows NT.
in Windows processi diversi hanno spazi di indirizzamento diversi, perciò
a indirizzi uguali vedono cose diverse; come è possibile realizzare questa
caratteristica usando i meccanismi di segmentazione e paging degli Intel a
32 bit? so che Win32 usa la segmentazione in maniera minimale, cioè cambia
i segmenti solamente quando deve effettuare una transizione da user mode a
kernel mode o viceversa; confermate? premesso questo dunque, come è
possibile realizzare una situazione come quella sopra descritta usando il
paging con pagine da 4 kb? il layout di un indirizzo virtuale dovrebbe
essere questo: (visualizzate il post con un font monospace, please :))
lower bits           higher bits
          1         2         3
01234567890123456789012345678901
+----------++--------++--------+
|  offset  ||  table ||   dir  |
+----------++--------++--------+
ma quello che non capisco è che se due processi accedono allo stesso
indirizzo virtuale, il processore consulterà *LA STESSA DIRECTORY*, *la
stessa tabella*, ed infine la stessa pagina fisica, ma ovviamente questo
non avviene; come è possibile mappare pagine virtuali identiche su
indirizzi fisici diversi?
grazie per le risposte.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 grazie per le risposte.
azzardo una risposta da totale incompetente:
nell'algoritmo di trasformazione indirizzo virtuale<->indirizzo fisico 
viene inserito da qualche parte una costante legata al processo (es. l'id)
puo essere?

 wrote in message
news:43942e1e$1...@news.unimib.it...

Quoto, qualcosa tipo un Base Address di sicuro
Sko

 Quoto, qualcosa tipo un Base Address di sicuro
lo avevo immaginato anche io: io pensavo che fosse il base address del
segmento corrente (il meccanismo della segmentazione ha effetto sempre
*prima* di quello della paginazione), ma se cosě fosse non mi spiegherei
come mai un processo non puň accedere allo spazio di indirizzamento di un
altro processo.
per esempio, due processi, A e B, accedono all'indirizzo 0x00400000 (il
base address predefinito solitamente usato per gli exe); nel processo A
0x00400000 viene sommato a qualcosa di diverso rispetto al processo B, ma
se B anziché accedere a 0x00400000 accedesse ad un indirizzo virtuale
minore o maggiore, potrebbe riuscire ad accedere a quello che in A
corrisponde a 0x00400000.
cioč, piů che il modo in cui i diversi spazi di indirizzamento sono
separati, quello che non capisco č come faccia Windows ad impedire a un
processo di accedere allo spazio di un altro: usando valori diversi come
base address del segmento corrente č possibile praticamente dividere la
directory delle pagine in zone, ciascuna dedicata ad un processo, solo che
in questo modo:
1) se dividiamo la directory in 30 zone per 30 processi diversi alla fine
i processi non hanno a disposizione i 2 gigabyte virtuali di user mode che
tutti sanno, ma hanno a disposizione solo un trentesimo di 4 gigabyte;
2) anche effettaundo questa suddivisione nulla impedisce a un processo di
accedere ad un indirizzo virtuale che sommato al base address del segmento
va in overflow e quindi accede ad una entry della directory che non gli
"appartiene".
dico bene?


 [...]
ehm, volevo dire user space :P
