|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2013
Messaggi: 158
|
Indirizzi di memoria
Una curiosità, è possibile in programmazione forzare la memorizzazione di una variabile o di un qualsiasi dato in un indirizzo di memoria specificato da me?
E' il sistema operativo che gestisce il tutto? |
![]() |
![]() |
![]() |
#2 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Ma in generale la mappa di memoria che è organizzata/gestita dal s.o. non ti permette una libertà assoluta nemmeno riguardo agli indirizzi virtuali (altrimenti si potrebbero fare delle interessanti cosucce).
__________________
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 |
||
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Nov 2016
Messaggi: 10
|
Non vorrei spararla grossa, ma da quel che ricordo con assembly 8086 si poteva fare. Il problema è che dovresti tornare indietro di 40 anni
![]() Generalmente già se ti spiazzi troppo in la leggendo un array hai un crash, non penso che un s.o. ti permetterebbe tanta libertà, il che in realtà è un bene ![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Inoltre alcuni processori (es. Motorola e molti altri) non hanno il segnale di I/O sul bus, quindi hanno solo I/O mappato in memoria; qualsiasi dispositivo viene "visto" sullo spazio degli indirizzi. Anche alcuni bus standard (es. VME) usano lo stesso sistema e non hanno il segnale di I/O. Se non fosse possibile, non si potrebbe accedere all'hardware, no? Avremmo processori che non servono a nulla ![]() In primis, il processore. I nuovi processori hanno l'MMU (Memory Management Unit) che gestisce la cosa, ed hanno istruzioni (a livello "super utente") che permettono al processore di accedere alla tabella dell'MMU per i relativi settaggi. Dal punto di vista logico l'MMU e' posta DOPO il processore: riceve gli indirizzi (a questo punto virtuali) del processore e li "trasforma" in indirizzi fisici (o in un'interruzione di errore). Normalmente dicevo si tratta di una tabella che viene applicata alla "parte alta" dell'indirizzo. La tabella e' manipolabile dal processore, cosi' da avere spazi di indirizzamenti diversi per ogni processo. In secondo luogo, c'e' il firmware: in alcuni sistemi (soprattutto utilizzati per l'automazione) e' possibile "smappare" certi indirizzi noti e rendere noto al sistema operativo di non utilizzarli come memoria virtuale ma renderli disponibili cosi' come sono. Esempio tipico: reflective memory. Si tratta di una memoria "speciale": si presenta come una memoria normale in cui si puo' leggere/scrivere. E' pero' collegata ad una fibra ottica e le scritture nella memoria verranno spedite attraverso la fibra ad una memoria gemella. E' quindi un sistema di trasmissione molto veloce, ed e' molto utilizzata nei sistemi di automazione. Infine, il sistema operativo mette a disposizione delle primitive, richiamabili dal tuo programma, per poter accedere alla memoria fisica. I metodi sono i piu' disparati a seconda del grado di protezione che si vuole offrire: normalmente i sistemi per l'automazione hanno modalita' di accesso piu' "facile" (altrimenti che automazione facciamo), mentre altri sistemi hanno un accesso piu' macchinoso e protetto, visto che normalmente gli utenti "normali" non dovrebbero avere questa esigenza (ovviamente ce l'hanno gli sviluppatori dei driver)
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:43.