View Single Post
Old 05-03-2007, 19:55   #8
Scoperchiatore
Senior Member
 
L'Avatar di Scoperchiatore
 
Iscritto dal: Sep 2001
Città: Roma
Messaggi: 1944
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
Di indirizzi virtuali, non di ram. La ram è una cosa che il programmatore non deve sapere neanche che esiste.
Se proprio vuoi utilizzare macchine a 32 bit, puoi usare come "ram" un grosso file (open64 + ftrunc64 + unlink) -- può essere un file su fs "normale" (la page cache provvederà a tenerlo in ram a regime; fadvise ti viene in aiuto), o su tmpfs, o - meglio ancora - su hugetlbfs. tmpfs è memoria "anonima", dello stesso identico tipo che otterresti con malloc; hugetlbfs è simile al tmpfs ma utilizza huge pages invece di pagine di 4kb. Un pò più efficiente. In tutti e tre i casi puoi "allocare" ben più di 4 GB.
Il problema che devi affrontare è il seguente: deve essere compito tuo mappare (mmap64) di volta in volta, nello spazio di indirizzi del tuo programma, delle "finestre" del file/memoria su cui operare. In soldoni puoi ottenere la "memoria" che ti serve, anche con 32 bit, ma devi usare mmap per accedere a una certa regione -- non puoi "vedere" tutto il blocco in memoria contemporaneamente.
Si può fare, ma ha un overhead a causa delle mmap/munmap (dipendente da quante volte devi cambiare "finestra") e varie complicazioni non simpatiche.
Devo fare un gestore di pagine sopra quello del sistema operativo .

Mi sembra una cosa abbastanza ardua, più che altro sovradimensionata per lo scopo (semmai la implementassi, sarebbe decisamente più interessante la struttura per gestire la memoria che il programma che la utilizza!)

A questo punto, direi che l'uso di un 64 bit è l'unica soluzione, speriamo che non crei problemi negli aggiornamenti (anche se una debian con i servizi base dovrebbe essere affidabile in tal senso)

Grazie dell'aiuto
__________________
"Oggi è una di quelle giornate in cui il sole sorge veramente per umiliarti" Chuck Palahniuk

Io c'ero
Scoperchiatore è offline   Rispondi citando il messaggio o parte di esso