L'ORGOGLIO DI ESSERE TRA I PIU' GRANDI (Parte 1)

Ormai sempre più spesso, si sente parlare di macchine che non si possono definire veri "computers", ma che stanno prendendo il sopravvento con "Sistemi Operativi a 32Bit" e "Multitasking"...

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.


MULTITASKING

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%
  

Come si vede dall'esempio il BusyTask richiederebbe all'OS il 100% della cpu-time, ma il sistema operativo gliene concede solo il 95%.

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%
  

Questa è la situazione ideale di un buon Sistema Operativo.

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.


Confronti

Vediamo adesso come queste caratteristiche di Multitasking vengono implementate negli OS che consideriamo: Amiga e Windows.

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.


Volete provare? Eccovi un esempio di busy-loop per Amiga e per Windows.

Versione Amiga: Linguaggio E

PROC main()
  REPEAT
  UNTIL FALSE
ENDPROC

Lanciando questo programma noterete un certo rallentamento, ma nulla più. Interrompete il task con Amiga Real Time Monitor per tornare alla normalità.

Versione Windows: Linguaggio Visual Basic.

sub form_load() Do Loop Until False end sub

Compilate l'eseguibile e lanciatelo.

Non potrete eseguire nessun'altra operazione.

Sarete costretti a riavviare Windows.


E con questo abbiamo finito il primo articolo di comparazione tra Windows e Amiga.

A risentirci sul prossimo numero!


Pagina Principale


    Scritto da: Fabio Rotondo      e-mail: fsoft@intercom.it
                C.so Vercelli 9
                28100 Novara
                ITALY               tel:    (ITA) - (0)321 459676