Come posso trovare l'indirizzo della mia prima posizione di memoria

-2

Se scrivo il mio kernel, avrò accesso alla memoria fisica (invece di una memoria virtuale).

Supponiamo ora di voler creare un ciclo a partire dalla prima posizione di memoria fino all'ultimo e impostare ogni byte su 0xFF . Il mio puntatore inizierà così:

unsigned char *firstMemoryAddress = N;

Che cosa sarebbe N ? nei sistemi embedded posso fare riferimento alla scheda tecnica del microcontrollore specifico, ma permetto di dire che sto eseguendo questo sul mio hardware portatile. N sarà sempre un valore specifico nelle macchine basate su Intel? Come posso trovarlo?

    
posta xnight 17.09.2018 - 04:55
fonte

1 risposta

2

Non esiste un modo standard per chiedere a un sottosistema di memoria generico quale memoria vera / valida esiste quando si scrive da zero un sistema operativo che dovrebbe funzionare su tutti i computer.

L'approccio scelto dai tipi di PC IBM e dai loro cloni è che determinare questa è una funzione del BIOS, non una funzione del sistema operativo. Questa operazione del BIOS viene eseguita nelle prime fasi del processo di avvio e viene personalizzata dal produttore della scheda per una scheda specifica, quindi ha una conoscenza dettagliata delle possibili posizioni e dei potenziali tipi di moduli RAM rispetto ai dispositivi I / O.

Anche all'interno dei PC x86, tentare di farlo con il tuo algoritmo personalizzato sarà estremamente soggetto a errori. Se si espande per includere altre piattaforme (telefoni, dispositivi, ecc ...) è probabilmente un compito senza speranza. Quindi, la soluzione migliore è fare affidamento sugli standard e le pratiche emerse, ad esempio affidarsi alle funzioni del BIOS per informarlo.

    
risposta data 17.09.2018 - 05:05
fonte

Leggi altre domande sui tag