Perché un sistema può non rispondere?


12

Ho appena eseguito dot(un programma per disegnare grafici diretti) con un file di input che era così grande che non poteva essere reso in un ragionevole lasso di tempo.

Tutto il mio sistema si è bloccato. Potrei arrivare a malapena a una console di testo con Ctrl+ Alt+ F1per uccidere dot, ma ci sono voluti diversi minuti.

Perché il sistema consente qualcosa di simile? Perché fornisce un programma non critico come il dot99% del sistema e utilizza il restante 1% per rimanere reattivo?


Risposte:


15

Questo è il modo in cui GNU / Linux e altri sistemi multitasking funzionano, condividono il processore tra i processi in esecuzione, dotnon avranno il 99%, ma il 100% nel 99% delle volte. Ogni processo domina il processore per un certo periodo di tempo.

Questo è gestito dagli scheduler (Linux ha diversi programmatori, alcuni usano solo la solita strategia, altri cercano di dedicare più tempo alle interfacce utente e così via).

Ora, nel tuo caso, il problema era - probabilmente - che dotnon richiedeva molto tempo per il processore, ma molta memoria. E quando un programma usa troppa memoria, c'è un thrashing , che è esattamente un processo che congela il sistema, non perché dotsta facendo molto, ma perché il kernel deve spostare le pagine di memoria avanti e indietro tra il disco (partizione di swap) e la memoria di sistema.

Anche se dotimpiegava solo il 99% del tempo della CPU, è probabile che passare a un terminale di testo sarebbe quasi immediato, ciò che accade è che il kernel deve spostare le dotcose dalla memoria in modo da poterle rimettere Xin memoria in modo che Xpossano vedere le chiavi basta premere e passare al terminale di testo, quindi il kernel deve Xuscire dalla memoria per la dotquale è ancora in esecuzione, e quindi anche spostarsi dotfuori per spostare loginnuovamente i processi del terminale di testo (forse solo ?) in memoria. (Se questo sembra disordinato, non è solo perché l'esempio è disordinato - la realtà è così disordinata.)

Un esempio è se accedi al terminale di testo, potresti essere in grado di premere semplicemente i tasti, premere backspace e accadrà felicemente in tempo reale, ma se fai qualcosa di semplice come eseguire un piccolo strumento come ps, "si bloccherà "per un po 'perché deve liberare memoria da caricare ps(e deve anche attendere nella coda di I / O del disco, che viene pesantemente utilizzata per spostare i dati da e verso la memoria, fino a quando non è in grado di richiedere psdal filesystem) .


Hm, quindi il modo per una migliore esperienza utente sarebbe quello di specificare alcuni programmi come " appiccicosi " e quindi impedire che quelli vengano scambiati.
Christoph Wurm,

La viscosità non ha funzionato così dagli anni '70 e la semantica originale della parte "appiccicosa". È possibile , tuttavia, bloccare (parti di) programmi nella memoria in modo che non possono essere scambiati fuori. La memoria principale è un lusso costoso, quindi non è possibile farlo per tutto.
Alessio,

@njsg, grazie per la buona spiegazione. Una domanda di follow-up: non c'è modo di prevenire il thrashing? Comprendo che lo scambio rende l'utilizzo della memoria più efficace nel complesso, ma dovrebbero esserci dei limiti. IMHO un processo essenziale come X non dovrebbe mai essere spostato dalla memoria. Esiste un modo per configurare un sistema simile a unix in modo tale che i processi essenziali siano protetti dall'allontanamento? Su un server è una cosa diversa, ma su un desktop preferirei avere un processo che richiede molta memoria per bloccarsi piuttosto che il mio desktop smette di parlare con me.
A. Donda,
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.