Dimenticando sempre di più che tutte queste cose un Amiga le ha avute sin dagli albori.
In questa serie di articoli, mostreremo le differenze tra i due sistemi operativi più in discussi: Windows (95 e 3.11) e Amiga OS. Non parleremo di MacOS, in quanto Amiga emula, con ShapeShifter, un Mac Quadra: la superiorità del nostro sistema operativo è quindi già provata e non serve parlarne oltre.
Chiunque intenda collaborare a questo dibattito, potrà spedire delle e-mail a questo indirizzo: fsoft@intercom.it, commenti positivi e negativi saranno ben accetti.
Ma iniziamo subito con il dibattito di questo numero.
Nozioni Generali
Una delle caratteristiche più belle di alcuni Sistemi Operativi (OS) è il multitasking, la capacità, cioè, di eseguire più compiti (task) contemporaneamente. Per essere chiari, il sistema si occupa di "distribuire" il tempo di cpu (cpu-time) alle varie applicazioni, operazione detta "time-sharing". Ogni applicazione è "identificata" dal Sistema Operativo dal nome (nome del task) e da un valore di priorità, necessario per determinare l'importanza del task stesso. Un applicazione con priorità 100 sarà quindi più importante di una con priorità 10.
Compito dell'OS sarà di distribuire la cpu-time correttamente alle varie applicazioni in modo che tutte siano "soddisfatte", ottenendo l'accesso alla CPU per il tempo richiesto. Quando si verificano situazioni critiche come busy-loop (cicli che occupano la macchina in maniera eccessiva) l'OS deve essere in grado, calcolando il giusto rapporto tra la priorità e richiesta di cpu-time, di garantire comunque il multi-tasking.
Facciamo un esempio:
Supponiamo che ci siano due applicazioni:
NOME TASK PRIORITA' CPU-TIME (richiesta) CPU-TIME (ottenuta) BusyTask 0 100% 95% NormalTask 0 5% 5%
Normalmente, ci sono più di due applicazioni che girano contemporaneamente in un ambiente multitask. Ma vediamo un altro esempio con anche priorità differenti:
NOME TASK PRIORITA' CPU-TIME (richiesta) CPU-TIME (ottenuta) BusyTask 0 100% 47% NormalTask 0 5% 5% Secondtask -5 10% 2% MainTask 10 10% 10% FastTask 40 35% 35% SleepTask -20 5% 1%
Se un OS è scritto bene, al programmatore non resta che cercare di evitare busy-loops e scrivere un programma robusto... teoricamente non ci si deve preoccupare del multitasking, in quanto è l'OS che pensa a tutto.
In Amiga, ogni programma viene "aggiunto" alla lista dei task che richiedono cpu-time con un valore di priorità. Questa lista viene "ordinata" per priorità e poi viene "passata" dall'alto verso il basso (da quello con priorità più alta a quello con priorità più bassa). Se un task entra in busy-loop, Amiga OS gli dedicherà la cpu-time RIMANENTE, quella cioè che "avanzerà" dopo aver soddisfatto tutti gli altri task. In questo modo, si può notare un certo rallentamento nel sistema, ma mai un crollo completo: tutti i task continueranno a funzionare correttamente.
In Windows 3.11 non è così. Il multitask non è pre-emptive: il sistema non si occupa, cioè, di "togliere" ad un task l'attenzione della cpu, quando questo è entrato in busy-loop. Questo può risultare essere un fatto grave. Ogni operazione da parte dell'utente genera un "messaggio": ad esempio, quando si preme un gadget, viene mandato un segnale che il sistema interpreta come: "Il bottone numero ... è stato premuto". Il gestore degli "eventi" (messaggi) è effettivamente un task che chiede una certa quantità di cpu-time all'OS. Se un task in busy-loop "blocca" l'attenzione della cpu solamente su se stesso, tutti gli eventi di altre finestre non verranno segnalati. Tecnicamente, verranno messi in una "coda di messaggi" aspettando che l'OS abbia il tempo di leggerli.
Quindi, se un programma in Windows entra in busy-loop, non è detto che si riescano a salvare i dati di altri programmi aperti.
Win95 è stato spacciato per "Ambiente a 32Bit con Multitasking pre-emptive", ma anche questa volta le aspettative sono state deluse dall'amara realtà. Come per Windows 3.11, il multitasking è puro e semplice multi-plexing: la cpu si occupa di un programma per volta e, finchè questo non dice "vai pure da un'altra, cara, non ho bisogno di te per un po'", la cpu non si muove. I problemi di multi-task sono quindi gli stessi che ci sono in Windows 3.11.
PROC main() REPEAT UNTIL FALSE ENDPROC
Compilate l'eseguibile e lanciatelo.sub form_load() Do Loop Until False end sub
Non potrete eseguire nessun'altra operazione.
Sarete costretti a riavviare Windows.
A risentirci sul prossimo numero!
Scritto da: Fabio Rotondo e-mail: fsoft@intercom.it C.so Vercelli 9 28100 Novara ITALY tel: (ITA) - (0)321 459676