Qual'è la differenza tra Multiprogramming e Multitasking


10

Trovo difficile distinguere chiaramente tra multiprogrammazione e multitasking.

La mia fonte principale è stata Wikipedia , ma l'articolo del WP sembra essere un po 'in contrasto con alcune fonti meno affidabili (come il mio professore universitario).

Mentre leggo il WP, il multiprogrammazione è un modo rudimentale di aumentare la produttività della CPU, cambiando contesto quando un processo attende I / O.

Il multiprogrammazione non fornisce alcuna garanzia che un programma verrà eseguito in modo tempestivo. In effetti, il primo programma potrebbe benissimo funzionare per ore senza la necessità di accedere a una periferica.

Cooperative Time-sharing , sinonimo di Cooperative Multitasking , è un miglioramento del multiprogrammazione (con il quale non è sinonimo). La CPU cambia regolarmente contesto per dare l'impressione di un'esecuzione simultanea, ma i processi devono ancora produrre - e programmi mal progettati possono far morire di fame il resto del sistema.

Il multitasking preventivo prende un controllo più aggressivo della pianificazione, dando priorità ad alcuni processi rispetto ad altri, ecc.

  1. Questa panoramica è corretta? In caso contrario, perché WP non è corretto o perché ho letto WP sbagliato?
  2. Perché alcune fonti sembrano confondere multiprogrammazione e multitasking?

1
"con alcune fonti meno affidabili (come il mio professore universitario)" - oh mio Dio. Spero che sia più rispettabile di Wikipedia, che ha molti contenuti a metà su CS.
Raffaello

"multiprogrammazione" sembra essere più un approccio storico. il multitasking moderno è in effetti correlato al blocco degli I / O ma è solo uno dei fattori utilizzati per destreggiarsi tra i processi. inoltre quasi tutto il multitasking moderno è preventivo con il supporto della CPU (che non ha sempre avuto quel supporto anni fa e che i processi ben educati avrebbero dovuto chiamare metodi di attesa basati sul sistema operativo che supportavano la cooperazione).
vzn,

2
@Raphael, puoi fare un favore a tutto il mondo cuocendoli alla perfezione.
vonbrand,

1
@vonbrand ci ho provato, ma sfortunatamente ci sono abbastanza esperti cotti per contrastare tali tentativi.
Raffaello

@Raphael, e quella folla non si fa vedere anche qui?
vonbrand,

Risposte:


9

Sono più o meno sinonimi. Il multiprogrammazione è più utilizzato quando è coinvolta una CPU, che viene commutata da un processo all'altro, processi che si stanno rimettendo in memoria contemporaneamente. Sono arrivati ​​i thread, e non passava più da un programma all'altro ...

I processori, in particolare la linea Intel, disponevano dei meccanismi per un vero multitasking (interruzione del timer, istruzioni privilegiate) almeno dall'80286. L'M68000 utilizzato nel primo Mac era un processore con capacità multitaking a tutti gli effetti. Questo non è uno sviluppo recente nelle architetture. Si noti che la prima volta che i sistemi condivisi hanno scambiato i programmi dell'utente in entrata e in uscita, e quindi non erano realmente multiprogrammi nel senso di avere diversi programmi in memoria contemporaneamente.

L'idea è di avere diversi programmi che risiedono contemporaneamente nella memoria, in modo tale che quando uno cede la CPU (terminando o aspettando) ce ne sono altri pronti ad usare la CPU, aumentando così l'utilizzo della CPU (e come puoi considerare ogni scoppio della CPU essere preparazione per un utilizzo dell'I / O, aumento dell'utilizzo complessivo). Ciò fornisce un miglior pensiero (importante nei sistemi batch).

Arrivò la condivisione del tempo, diversi utenti interattivi collegati alla macchina. Stessa idea, mantieni i loro programmi in giro ma passa da uno all'altro abbastanza velocemente da avere l'illusione di "avere un computer per sé". Richiede un timer che interrompe la CPU per evitare la monopolizzazione.

Sulle macchine personali non vi erano molti incentivi per eseguire diversi programmi alla volta, almeno inizialmente (un utente di fronte a un dispositivo gravemente limitato non si aspettava molto). Con la crescita delle macchine, un modo per aggirare questo problema e consentire diversi programmi alla volta senza cambiare molto il sistema operativoera un "multitasking cooperativo", in quanto ogni programma è destinato a cedere periodicamente al sistema operativo per selezionarne un altro da eseguire. Dato che il programma in questo modo ha il pieno controllo, può scegliere di farlo quando nulla potrebbe essere incasinato da altri. Inutile dire che un programma che "dimentica" di adempiere al proprio dovere di rendimento ottiene un aumento interessante delle prestazioni ... i primi sistemi Mac hanno funzionato in questo modo, e per i motivi di cui sopra non è durato a lungo. Sui sistemi embedded con nessun sistema operativo o solo rudimentale e con una serie strettamente controllata di programmi in esecuzione, questa è certamente un'opzione attactive.


l'articolo del WP sembra implicare che il multiprogrammazione manchi di memoria virtuale, al contrario del multitasking (sistemi). Storicamente può essere vero, ma la definizione è ortogonale?
didierc,

1
Avevamo un IBM S / 370 multiprogrammato qui negli anni '70, e sicuramente non aveva memoria virtuale (mi sembra di ricordare che aveva un disco usato solo per lo spooling). La memoria virtuale consente di avere ancora più programmi nella RAM limitata (poiché si tengono a portata di mano solo le parti "più utilizzate"), un utilizzo ancora migliore in questo modo. Quindi sì, considererei quelli totalmente indipendenti; ma in pratica oggi non troverai l'uno senza l'altro. Tranne forse nel tuo router WiFi o cellulare ...
vonbrand,

Ok. Lo pensavo anche io, in effetti. I sistemi integrati spesso mancano di un'adeguata protezione della memoria, ne ero consapevole. Tuttavia, con programmi ben educati non dovrebbe essere un problema. Questo ovviamente dipende dai fornitori del programma.
didierc,

@didierc orthogonal? vuoi dire reciprocamente esclusivi giusto?
jsj

2

Differenza tra multitasking e multiprogrammazione? Il multitasking è un'estensione logica della multiprogrammazione. Classicamente in un ambiente multi-programmazione, più di un utente condivide la cpu e la cpu passa rapidamente da un utente all'altro, fornendo una trasparenza completa l'uno dall'altro. Nel multitasking, l'utente viene sostituito da programmi, ovvero più di un programma condivide la cpu e la cpu passa rapidamente da un programma all'altro. In realtà un software residente su disco è un programma. Quando viene portato nella RAM per l'esecuzione è noto come processo o attività e quando si trova all'interno della CPU ed è in esecuzione, è noto come thread. Quindi il multiprograaming è fondamentalmente per più utenti e il multitasking è per un singolo utente con più programmi. Poiché la maggior parte dei sistemi operativi moderni supporta entrambi, quindi spesso sono intercambiabili.


0

Ci sono molte differenze tra multitasking e multiprogrammazione.

Il multitasking sta eseguendo più di un'attività alla volta. Ad esempio, stai ascoltando una canzone, stampando un foglio e digitando su MS-Word contemporaneamente.

Durante la multiprogrammazione, in questo tipo di sistema operativo, miglioriamo l'utilizzo della CPU tramite buffering e spooling. Nell'esecuzione sequenziale, la CPU rimane inattiva dopo aver eseguito un programma e carica il programma successivo dalla memoria principale. Durante le operazioni di I / O la CPU si trova anche in idel, anche la CPU rimane inattiva, ma utilizzando un ambiente multiprogrammazione, la CPU passa al programma successivo e lo elabora. Questa è una tecnica utilizzata con l'aiuto del buffering e dello spooling.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.