|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
[sistemi operativi] paginazione
Se ne discuteva nell' area di Vista ma nin si è giunti a nessuna conclusione!
In sostanza un sistema a 32 bit senza alcuna estensione PAE abilitata puo indirizzare, per limite numerico dei 32 bit, 4GB totali di memoria.Tale memoria deve essere data dalla somma della ram e dal file di swap? Stranamente il mio Vista Premium con 2GB di ram...invece di 4096 arriva a 4300MB |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
4GB e' il limite del solo indirizzamento fisico.
L'indirizzamento virtuale e' molto piu' esteso. E' limitato sotto windows a seconda della versione, ma gia' sul 386 poteva raggiungere 64TeraByte. library.nocrew.org/lib/cpu/23163011.pdf Datasheet del 386, primissima pagina, da apporfondire sul capitolo della segmentazione.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 28-04-2008 alle 21:29. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Ora leggo il documento.
Ma quando su diversi documenti(anche microsoft) inerenti l' argomento si trova scritto che per le architetture la memoria virtuale massima è di 4GB..a cosa si riferiscono?forse al singolo processo? La cosa che non capisco è come superare tale limitazione di spazio utilizzando solo i 32 bit. Credo poi, ma non ne sono sicuro, che i sistemi atuali utilizzino un misto di paginazione esegmentazione. Ultima modifica di nuovoUtente86 : 28-04-2008 alle 22:12. |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Lo spazio di memoria virtuale dedicabile per ciascun processo sotto l'architettura x86 a 32bit e' di 4GB. Windows ha dedicato storicamente 2GB di questi per i dati e il codice, mentre altri 2GB erano dedicati al kernel. Con il paramentro /3G e' possibile dedicare fino a 3GB per dati e codice, e uno solo per il kernel. Processo non significa comunque applicazione. Ci sono applicazioni multiprocesso (ES: SQL Server) che potendo avere piu' di un processo, possono venirsi dedicati "virtualmente" piu' di 4GB. Quote:
I sistemi di oggi, ma gia' anche da NT, usano segmentazione+paginazione. La paginazione e' proprio il supporto hardware per il file di scambio, mentre la segmentazione e' il principalmente usata per i meccanismi di protezione ad anelli, che sembrano semplici, ma non lo sono (o almeno per me la call-gate mi fregava sempre) Tali meccanismi sono stati accennati dal 286, realizzati con il 386 e praticamente sono rimasti invariati fino al Pentium4, a parte una breve attimo di euforia quando il PenitumPro ha esteso i pin di indirizzi da 32 a 36, con conseguente aumento dell'indirizzamento fisico possibile da 4GB a 64GB. Comunque per fortuna sta morendo tutto, con i 64bit e' tutto piu' semplice. Il modello di memoria e' quello flat, senza registri di segmento o selettori. Non so neppure se ci sia un qualche tipo di segmentazione, ma spero che non l'abbiano messo.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
||
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
In realtà anche con l'architettura AMD64 la segmentazione è rimasta, in particolare si usano i registri FS e GS per accedere ad aree di memoria di sistema.
Tolto questo, mi sembra che non ve ne sia rimasta più traccia, per cui "di fatto" possiamo considerarla scomparsa.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Tirando le somme: ogni processo ha uno spazio virtuale di indirizzamento di 4GB(avevo letto da qualche parte che su XP fosse stato ridotto a 2, ma probabilmente si riferiva alla sola area codice-dati) divisi equamente tra dati-codice e spazio riservato al sistema. Quindi ogni processo ha gli indirizzi virtuali da 0 a (2^32)-1. Ora se ricordo bene per la risoluzione degli indirizzi da virtuali a fisici si utilizzano delle gerarchie di tabelle accedute utilizzando porzioni dell' indirizzo virtuale a 32 bit, ma per consentire ad ogni processo di avere 4GB virtuali con soli 32bit disponibili vuol dire che ogni processo ha associato una struttura propria in grado di mappare l' indirizzo...o c' è qualcosa che mi sfugge?! |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Guarda, e' molto lunga la faccenda, se proprio sei interessato e non si fa avanti nessuno posso provare a spiegare quello che mi ricordo.
E' comunque tutto scritto sul datasheet del 386. Basta che cerchi il capitolo sulla composizione dell'indirizzo fisico. Cerca concetti come la GDT, la LDT e i selettori. Come detto, non e' proprio tutto semplice. Meno male che se ne sono liberati.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
La traslazione da indirizzo virtuale (a 32 bit) a indirizzo fisico avviene nel seguente modo: - si prendono i 10 bit più alti, e si seleziona la entry (ce ne sono 1024) nella "master" page table (di cui ogni processo ha ovviamente un registro che ne contiene il puntatore) da cui si prelevano il puntatore alla page table di secondo livello e relativi flag (che si usano per marcare la pagina opportunamente; es.: pagina utente o supervisore, pagina eseguibile, pagina non presente, ecc.). - si prendono i seguenti 10 bit, e si seleziona la entry nella page table di secondo livello da cui si preleva (finalmente) il puntatore alla pagina di memoria a cui accedere e relativi flag; - si prendono i rimanenti 12 bit (i meno significativi) e si sommano (per la precisione: si copiano così come sono) al puntatore di cui al precedente punto, e si prelevano anche i flag. A questo punto si ha finalmente il puntatore alla memoria fisica a cui accedere. Questo a grandi linee, senza considerare cache TLB e segmentazione (qui ho illustrato soltanto la paginazione).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
|
#9 | ||
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Quote:
|
||
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
Quote:
__________________
Khelidan |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
anche io l' ho resettata...ma come vedi poi tutto torna utile...Grazie al forum e a qualche dispense mi sono rinfrescato la memoria..anche perchè...durante i corsi molti particolari vengono trascurati per questioni di tempo.
|
|
|
|
|
|
#12 | |||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quote:
Io ricordo ancora oggi alcuni dettagli (non tutti, come puoi vedere sopra), semplicemente perché ho lavorato in assembly per parecchi anni, e ai tempi dell'Amiga avevo quasi finito un buon emulatore 80186, da far evolvere poi in 286 prima e 386 poi, per cui non mi sono limitato a studiarmi l'assembly di questi processori, ma anche (dettagliatamente) l'ISA.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
E poi da bravo furbacchione mica ti sei messo a partire con lo spiegare l'unita' di segmentazione
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Se posso evitare, è meglio.
![]() Comunque ho sempre sostenuto la paginazione e non la segmentazione (peggio ancora la combinazione delle due), ma devo riconoscere che per alcuni problemi (piuttosto comuni) la segmentazione fornisce una soluzione semplice, veloce ed elegante.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
? |
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Stava parlando (forse) dell'allocazione, ovvero quando fai richiesta al SO di un tot di memoria a tuo uso e consumo.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#17 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Ma, come dicevo, un page fault non necessariamente deve produrre il caricamento di una pagina. Dipende tutto da quello che vuoi implementare. Quote:
P.S. Si capisce che non ne voglio parlare in dettaglio?
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Dal discorso mi pare di capire che lavorando in assembly è possibile avere una maggiore interezione e controllo della paginazione che con la programmazione ad alto livello è del tutto trasparente essendo di fatto ad opera del SO!E' cosi? |
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Anche con l'assembly, a livello utente, e' tutto nascosto e gestito dal sistema operativo.
L'unica cosa che puoi fare (ma lo fai anche ad alto livello) e' chiedere della memoria, lui te la da, e tu la usi, senza porti particolari problemi se non quello di rilasciarla correttamente quando hai finito di usarla. Inoltre per come sono fatti Windows e Linux per l'interazione con il SO e' meglio il C++ che l'assembly Forse anche il C va bene, ma gia' sotto Windows3.11 si usava il C++, non so quanti abbiano usato il C puro per interfacciarsi con Windows. Questo a meno che tu non stia programmando dei driver, o addirittura un sistema operativo stesso, nel qual caso e' praticamente certo che tu debba sporcarti le mani con l'assembly in alcune parti critiche (come queste della segmentazione e della paginazione). Per il resto era gia stato studiato in modo che per gli sviluppatori fosse tutto trasparente
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 30-04-2008 alle 23:37. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:07.





















