Che cosa significa "spazio indirizzo" quando si parla di dispositivi IO?

4

La seguente citazione proviene da questa pagina :

While some CPU manufacturers implement a single address space in their chips, others decided that peripheral devices are different from memory and, therefore, deserve a separate address space. Some processors (most notably the x86 family) have separate read and write electrical lines for I/O ports and special CPU instructions to access ports.

Voglio sapere che cosa significa "spazio indirizzo". Questo è ciò che penso significhi:

Dì che abbiamo il seguente:

Questoèciòcheaccadequandoilsistemaoperativosiavvia:

  • Ilsistemaoperativorichiederàalcontrollerdimemoriamoltamemoriaperlamemoriachip,supponiamocheilchipdimemoriaabbia2GBdimemoria.OrailIlsistemaoperativosceglieràunintervallodiindirizzicompostoda2GB,supponiamoilsistemaoperativohasceltol'intervalloda30394a2147514042(2147514042-30394=2GB),orailSOdiràalcontrollerdimemoriadirispondererichiestesugliindirizzidimemoriada30394a2147514042.
  • IlsistemaoperativofaràlastessacosaconidispositiviIOcomehafattoconlamemoria(chiederàaciascuncontrollerdeldispositivoIOlaquantitàdimemoriadeldispositivoIOavere...),oralacosaimportantequièchegliindirizzidimemoriacheverràassegnatoperidispositiviIOnonsarànellastessaintervalloassegnatoperlamemoria(da30394a2147514042),adesempioseilmonitorha12KBdimemoria,ilsistemaoperativosceglieràadesempiolagammada104a12392(12392-104=12KB).NotachepresumochegliIODeviceutilizzanoIOmappatiinmemoria.

Quindiinpratica"spazio degli indirizzi" significa che sia la memoria che i dispositivi IO saranno nello stesso "pool" di indirizzi, e quindi la CPU può trattare la memoria e gli IO Device come uno logico chip di memoria.

Sono corretto?

    
posta Christopher 17.10.2017 - 22:03
fonte

3 risposte

4

Un Spazio indirizzo è semplicemente un intervallo di indirizzi consentiti.

Un indirizzo I / O è un numero univoco assegnato a un particolare dispositivo I / O, utilizzato per indirizzare quel dispositivo. Gli indirizzi I / O possono essere mappati in memoria , oppure possono essere dedicati a uno specifico bus I / O . Quando si fa riferimento a un indirizzo I / O mappato in memoria, I / O utilizza le stesse istruzioni del processore che si utilizzerebbero per indirizzare, leggere e scrivere la memoria effettiva. Quando si fa riferimento a un bus I / O dedicato, esistono istruzioni speciali per il processore I / O che vengono utilizzate esclusivamente per la lettura / scrittura sul bus I / O.

Naturalmente, quando si utilizza l'I / O mappato in memoria, è necessario dedicare un intervallo di indirizzi di memoria dedicati specificamente all'I / O, non alla memoria. Nel contesto di I / O, è corretto dire che l'intervallo di indirizzi di memoria riservati agli I / O è lo spazio indirizzo in cui avviene l'I / O mappato in memoria.

    
risposta data 17.10.2017 - 22:32
fonte
3

L'idea di base è piuttosto semplice: un chip può avere un bus per connettersi alla memoria e un secondo bus per connettersi ai dispositivi I / O - oppure può condividere un singolo bus tra i due.

In pratica, anche una CPU che tratta i due come separati non li separa di solito completamente. Ad esempio, l'8088 originale aveva una piedinatura come questa:

Con questo, AD0 tramite AD7 trasporta i dati e (a seconda della fase del bus) degli 8 bit meno significativi dell'indirizzo. Questo vale per entrambi i dispositivi I / O e memoria. Quindi il pin IO/M (con una barra sopra M ) determina se una particolare lettura / scrittura va in memoria o un dispositivo I / O (dispositivo I / O quando è alto, memoria quando è basso).

Se avessero scelto, avrebbero potuto facilmente designarlo come (ad esempio) A20, quindi il chip avrebbe un pin di indirizzo aggiuntivo, permettendogli di indirizzare 2 megabyte di memoria. Quindi qualcuno potrebbe scrivere la logica del decodificatore che ha diretto alcuni sottoinsiemi di tale intervallo su dispositivi I / O (e il resto sulla memoria effettiva).

Il grande vantaggio di combinare i due è abbastanza semplice: allo stato attuale è fondamentalmente diviso lo spazio degli indirizzi a metà: una metà per la memoria, l'altra per i dispositivi I / O. Questo però non si adatta molto bene all'utilizzo reale: nella maggior parte dei casi, probabilmente dovresti stare meglio con (diciamo) 64k per i dispositivi I / O e il resto dello spazio di indirizzi ora da 2 megabyte per la memoria.

    
risposta data 17.10.2017 - 23:43
fonte
1

so the CPU can treat the memory and the IO devices as one logical memory chip... ?

Sì, in quanto le stesse istruzioni della CPU per leggere / scrivere RAM vengono utilizzate per leggere / scrivere nelle (aree mappate in memoria dei) dispositivi - vale a dire il carico di memoria del processore e le istruzioni del negozio.

Detto questo, tuttavia, ci sono alcune cose da notare, che anche se si possono usare le stesse istruzioni del processore, il software deve tenere in considerazione le aree di memoria / comunicazione fornite dal dispositivo tra le seguenti:

A volte un'area di comunicazione mappata sulla memoria del dispositivo è progettata per essere scritta dal processore (per eseguire la parte O di I / O) e altre volte per essere letta dal processore (per eseguire la parte I di I / O). Quindi, la lettura dell'area di comunicazione del dispositivo scrivibile può produrre solo zeri o immondizia piuttosto che ciò che è stato precedentemente scritto dal processore (e la scrittura leggibile potrebbe non avere alcun effetto).

Non c'è motivo per cui RAM e / o memoria del dispositivo siano contigue, quindi possono esserci dei buchi nello spazio degli indirizzi in cui non sono mappati né RAM né dispositivi (piuttosto che un solo foro o assenza, ad esempio alla fine). Molti dispositivi si aspettano che un'area di comunicazione abbia un grande allineamento per l'indirizzo di memoria iniziale, che è una fonte di fori tra le aree di comunicazione quando lo spazio degli indirizzi viene saltato per raggiungere l'allineamento corretto.

Per realizzare I / O, dobbiamo fare più che leggere / scrivere nello spazio degli indirizzi del dispositivo: dobbiamo seguire un protocollo (specifico del dispositivo) che dice al dispositivo cosa faremo, o ascoltare ai segnali pronti del dispositivo, usando i suoi registri di controllo mappati alla memoria (o alla porta I / O) (che possono avere la propria area di comunicazione o parte di un'altra).

I dispositivi sono anche (possono anche essere) collegati alle linee di interrupt del processore, per la comunicazione asincrona (oltre a essere mappati in memoria), cioè per segnalare l'attenzione del processore.

Le cache dei dati dei processori possono interferire notevolmente con l'I / O mappato in memoria. Per questo motivo la maggior parte dei processori ha un meccanismo per supportare accessi di memoria non collegati. A volte ciò si ottiene utilizzando un bit (molto elevato) nello spazio degli indirizzi per indicare se gli accessi devono essere scollegabili o non collegati. Questa è un'altra ragione per i buchi nello spazio degli indirizzi. (Alcuni processori hanno tutti gli stessi dispositivi di memoria e di accesso accessibili in due diversi indirizzi fisici, dove uno dei mapping è memorizzabile nella cache e l'altro è senza cache).

    
risposta data 18.10.2017 - 01:06
fonte

Leggi altre domande sui tag