Scopo della segmentazione e degli indirizzi logici in 8086

3

Nell'8086, la mappatura dei sommatori logici all'indirizzo fisico viene eseguita con l'aiuto della segmentazione. Registri segmento: offset e ottieni la posizione fisica in una RAM da 2 ^ 20 byte, anche se hai registri a 16 bit.

Ora le mie domande sono:

  1. Quando l'indirizzo logico viene generato? (quando il programma inizia a funzionare? prima? sono come indirizzi virtuali?)

  2. Chi li genera? (CPU? Sistema operativo?)

  3. La segmentazione esegue il mapping di qualcosa logicamente più piccolo a qualcosa di più grande? (2 16 spazio di indirizzamento logico a 2 20 spazio di indirizzamento fisico)

  4. Se è così, qual è lo scopo? Per me sembra l'opposto dell'indirizzamento virtuale che mappa uno spazio di indirizzi virtuale più grande su un ram fisico più piccolo.

posta Gabriele Scarlatti 22.02.2017 - 13:30
fonte

1 risposta

3

Lo schema di indirizzamento 8086 non è virtuale.

È uno schema di indirizzamento fisico che tiene conto della limitazione dei registri ai 16 bit dell'architettura del processore, offrendo al tempo stesso un bus di indirizzi più grande.

Un approccio migliore potrebbe essere stato avere registri di indirizzi a 20 bit o un bus di indirizzi a 32 bit (e combinare 2 registri per creare un registro di indirizzi). Era tecnicamente fattibile, perché la famiglia di processori Motorola 68000 aveva questo approccio migliore). Ma questo avrebbe reso l'8086 molto più costoso.

Il compilatore doveva prendere in considerazione lo schema di indirizzamento attraverso il concetto di modello di memoria. Ad esempio:

  • la modalità di memoria ridotta presuppone che tutti i dati rientrino in 64 KB e tutto il codice in un altro 64k, in modo che il codice possa caricare i registri di segmento una volta e mantenerli invariati. I puntatori sono stati memorizzati come una singola parola a 16 bit.
  • al contrario, il modello di grandi dimensioni presuppone che il codice e i dati possano utilizzare l'indirizzo completo Spazio, sapendo quindi che i registri dei segmenti dovevano essere gestiti attivamente. I puntatori sono stati quindi memorizzati con due parole di 16 bit (registro segmenti + offset).

Tra questi estremi c'erano modelli misti, in cui dati o codice erano legati a un singolo segmento di 64k.

Da quello che ricordo era uno schema doloroso. Le librerie dovevano essere prodotte e spedite per ogni modello. E molte limitazioni: l'aritmetica dei puntatori, l'indirizzamento degli array e l'allocazione della memoria erano destinati a stare in 64k, anche nel modello grande.

Quindi riassumere:

  1. gli indirizzi logici vengono generati in fase di esecuzione (durante l'esecuzione).
  2. l'os carica l'eseguibile in memoria, inizializza i registri dei segmenti e consegna il programma. Da allora, il programma ha la piena responsabilità.
  3. No, sta dividendo qualcosa di più grande in pezzi più piccoli in modo da far fronte alle limitazioni hardware della cpu
  4. Non pertinente

Ora, se vuoi capirlo meglio, devi guardare il set di istruzioni 8086 e leggere il modelli di memoria

    
risposta data 22.02.2017 - 14:18
fonte

Leggi altre domande sui tag