Quote:
Originariamente inviato da walter sampei
(Messaggio 34046345)
come fa win 9x ad assegnare e gestire gli spazi di memoria quando si trova a che fare con programmi 16 bit, sia win 3 che dos, grazie :)
|
Allora, dobbiamo fare due distinzioni:
- i programmi "windows-aware", che richiedono e rilasciano memoria utilizzando le API di Windows
- i programmi DOS "puri", che pensano di avere la memoria tutta per se.
I primi richiedono memoria direttamente a Windows 9x e quindi non ci sono problemi particolari nella loro gestione: il s.o. mantiene una lista delle locazioni di memoria libera e, tramite la MMU (memory management unit) integrata all'interno di ogni processore >=i386, mappa una certa locazione di memoria fisica all'interno dello spazio virtuale assegnato al processo. In pratica questo è il concetto di funzionamento della memoria virtuale: è il s.o. (e solo lui) a conoscere le vere locazioni fisiche di memoria, mentre la applicazioni conoscono solo lo spazio di indirizzamento virtuale.
Memoria protetta come sui sistemi Win2K, quindi? No: l'utilizzo della memoria virtuale è un primo passo verso la protezione (in quanto assegna a ogni processo un proprio spazio virtuale), ma da sola non basta, in quanto non impedisce a un programma scritto male di interferire con il s.o. e con gli altri programmi. Negli ambienti Win9x un programma qualunque gira in ring0, lo stesso del kernel. Questo significa che volendo ha il pieno controllo della macchina, potendo bypassare anche i limiti imposti al suo address space virtuale.
In pratica, Win9x ha una politica di separazione dei processi in cui, per quanto virtualizzi alcune risorse (come la memoria), si trova alla fine a doversi "fidare" del processo stesso che, però, ha pieni poteri. Capisci quindi che processi buggati o malevoli possono buttare già il sistema senza grossi problemi.
Per i programmi DOS puri, il discorso è differente: tutti i processori IA32 (dal 386 in poi) integrano una modalità chiamata virtual86 in cui i programmi DOS classici vengono fatti girare non con i provilegi "pieni", ma ridotti. In questo modo il processore può essere impostata in modalità protetta (necessaria per la memoria virtuale e l'abilitazione dell'MMU) ma i programmi DOS più vecchi possono continuare a funzionare perchè sono convinti di avere tutto il sistema a loro disposizione (in modalità reale). Ovviamente non è così, ed è per questo che la modalità è chiamata virtual86: se il programma DOS fa richieste privilegiate (come modificare la memoria VGA), la macchina virtuale va in "trap" e notifica il sistema operativo che il programma in finestra ha cercato di modificare una certa area di memoria privilegiate. A questo punto il s.o. può intervenire, emulando la richiesta e infine ridando il controllo alla macchina virtuale 8086, che a sua volta continua l'esecuzione dell'applicazione DOS.
Ho fatto delle semplificazioni, ma direi che il discorso rimane abbastanza preciso...
Ciao. :)