[SISTEMI OPERATIVI]traduzione da ind. fisici a ind. logici

starsuper
Sapendo che il so implementa la memoria virtuale paginata con pagine da 2Kb, si trasformi gli indirizzi fisici in una sequenza di numeri di indirizzi di pagine logiche... come posso fare^
Sappiamo che passo la cpu genera un int fittizio che viene sommato con il registro rilocatore presente nell MMU il quale genere un indirizzio fisico vero e prorpio.. ma come faccio il viceversa?
Avevo pensato di fare il passaggio inverso cioè tolgo da ogni ind. fisico un valore ma che valore ho nel registro rilocatoree? (2048 ?) grazie.

Risposte
starsuper
Altra ipotesi, visto che parliamo di paginazione, l mmu non è utilizzato ( se non sbaglio non c'entra niente con la paginazione), ma bensi devo scomporre l'ind logico in , sapendo che ogni pagine è 1024 byte, allora avrò 512byte per la pagina e 512 byte per l'offset... sono sulla buona strada?

hamming_burst
Ciao,
secondo me hai un attimo di cofusione.

La MMU è sempre usata per gestire gli indirizzi (virtuali), si chiama apposta Memory Management Unit. :-)

Se hai l'indirizzo fisico, non hai motivo di traformarlo in uno logico.
Comprendo il tuo dubbio, ma la MMU crea indirizzi virtuali, e con adeguati trasformazioni hardware si ricava l'indirizzo fisico.
Ma un sistema operativo utilizza solo indirizzi virtuali (paginati in questo caso).

Se hai domande chiedi pure. :-)

PS: quando studiai queste cose avevo dubbi pure io, ti consiglio questo post e le dispense sotto, se ti sono utili:

https://www.matematicamente.it/forum/ind ... 57955.html
http://calcolatori.iet.unipi.it/contrib ... latori.pdf
http://calcolatori.iet.unipi.it/contrib/domande.pdf

starsuper
Si in effeitt faccio un po' di confusione. A quanto ho inteso io, lo spazio degli ind. fisici e logici non sempre è lo stesso, anzi raramente. Per un discorso di rapidità la cpu genera e lavora su indirizzi logici, fittizi, opportunamente creati (mmu o pagniazione e relative tabelle) e successivamente trasformati in ind. fisico che rappresenta il frame a cui ci riferimo nella ram. Il mio post è per svolgere un esercizio, quindi mi serve solamente a livello accademico, ma nonostante i concetti espressi sopra non capisco comuque come collegare le due cose ... ! grazie

hamming_burst
"discorso di rapidità"
si dai, più o meno, anche per questioni di limiti di memoria, ma penso che tu lo sappia :-)

il resto è correto quello che dici.

Questo è solo un discorso che per me non ha molto senso, ma se è per un esercizio allora proviamo.
Pensa se hai un indirizzo fisico, ed essendo che è un indice di una tabella ed un offset, domandati: esiste una tabella di indirizzi fisici con corrispondenza di indirizzi virtuali?
Per fare il contrario, devi avere l'indirizzo di questa tabella, che salvi da qualche parta.

starsuper
non ho indirizzi nel testo, il testo è come si vede nel primo post... :(

hamming_burst
Rileggendo a mente "fresca", ho capito il senso dell'esercizio. Avendo degli esami ieri ho capito male, chiedo scusa.

Quello che devi fare è, avendo la memoria fisica cioè un elenco di celle di memoria con indirizzi:

0000000000
0000000001
....

0000010000

crei gli indirizzi virtuali da pagine di 2048 byte. Semplicemente fai a mano un'implementazione di una memoria.
Qua devi decidere che tipo di implementazione usare, falla semplice ed usa una sola tabella delle pagine. Ed usi tipi indirizzi di 16 bit come vuoi.

Devi decidere la suddivisione dell'indirizzo, sapendo che un indirizzo virtuale viene duddiviso in indirizzo di pagine (a bit) e indirizzo di riga (b bit). Perciò avrai la suddivisione di $2^a$ pagine ciascuna di ampiezza di $2^b$ byte. Per fare ancora più facile, decidi che la memoria fisica ha una corrispondenza 1:1 con le pagine di meoria virtuale, perciò saranno di ampiezza di $2^b$ byte.

Adesso non ricordo come suddividere $a$ e $b$ sull'indirizzo virtuale (appena posso mi recupero il libro di SO2). Una volta fatto puoi dedurra i valori di bit dell'indirizzo virtuale.

Spero che sia un po' più chiaro cosa tu debba fare :-)


PS: da dove viene questo esercizio per curiosità?

starsuper
Ora mi torna :) Ero arrivato anche io a codesta conclusione, avevo fatto pagine da 2048. ( vedi 0000-2048 . 2049-4096. etc etc) tante quante sono le pagine logiche fornite... solo che non ho la minima idea di come assegnare i byte... una cosa del genere :http://www.dacrema.com/Informatica/paginazione_MP.htm.

Ho l'esame di Sitemi operativi e sono dispense ed esercizi dei vari prof !

hamming_burst
Se segui le figure di quel sito riesci ben a scrivere gli indirizzi.
Quello che ti chiede l'esercizio è scolo scrive un indirizzo paginato, mica una struttura di memoria :-)

Se hai il libro di Silberchatz, ricordo che c'era una figura sulla paginazione ad una sola tabella, dove si utilizzavano decimali per spiegare la paginazione. Da li ricavi tutto il necessario, non è complicato, è più lunga la spiegazione :-)

Rggb1
Il famoso testo di Silberschatz - Galvin - Gagne, per quanto riguarda la preparazione universitaria, può essere considerato la bibbia sull'argomento (ed ha altrettante edizioni e varianti della bibbia stessa :-D). Ti consiglio di cercarne una copia, almeno in prestito.

starsuper
Lo uso già, ma ahime scarseggia su esercizi svolti :)

hamming_burst
@starsuper:

Settima edizione, capitolo 8.4 (Paginazione)
8.4.1 Metodo di base

Paginazione base, con una sola tabella,
Figura 8.7-9 e il testo

Quello che dicono le figure, e fai un ragionamento inverso, ti danno la soluzione dell'esercizio.

Se hai ancora problemi posta pure qua :-)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.