2015-12-02 15 views
5

Sappiamo che tutto ciò che viene eseguito sul computer è un enorme programma collaborato da molti.
Quindi, quando un computer si blocca e non siamo in grado di fare nulla, cosa succede allora? Inoltre, è questo scenario in cui tutto blocca anche qualcosa implementato nel programma? o è come se il Contatore del Programma fosse bloccato e non potesse incrementare e quindi c'è qualche problema nel processore?cosa succede quando si dice che un computer "si blocca" o si blocca?

risposta

3

Il computer potrebbe bloccarsi in circostanze diverse. Questi sono quelli che posso pensare ora:

  • x86 CLI e HLT istruzioni. CLI disabilita gli interrupt, quindi nessun evento asincrono (come un timer interrompe o premendo un tasto) può spostare il puntatore di istruzioni CS:EIP in un'altra istruzione e HLT interrompe letteralmente il processore.
    L'istruzione viene usata raramente e lasciata solo al kernel se, ad esempio, qualche routine di inizializzazione nel codice di avvio fallisce. Anche se il riavvio è un'opzione migliore qui.
    Nota che HLT arresta solo il nucleo è corsa su, non tutti core.

  • Una finestra non risponde (si trova comunemente su Windows). Questo differisce da un'applicazione all'altra. Maggiori informazioni here.

  • Si tenta di acquisire una risorsa ma è protetta da un lucchetto ed è già stata acquisita. Il processo attende (in realtà un ciclo di occupato o produce un altro processo) fino a quando non può finalmente acquisire la risorsa. Questo è solo uno stato temporaneo , al contrario di ...

  • Un deadlock. Molteplici circostanze in cui può verificarsi, ma comune, sono due processi che tentano di acquisire risorse che forniscono reciprocamente allo stesso tempo. Nessuno può gestire la richiesta di acquisizione perché entrambi sono in attesa degli altri processi, quindi entrambi i processi terminano con non interrompibile. Questo è il motivo dei processi non interrompibili su Linux, che non possono essere uccisi nonostante venga inviato il segnale a.

  • Multitasking su processore lento o processore con pochi thread. Un cattivo algoritmo di programmazione rende la situazione ancora peggiore.
    Poiché un processo occupa almeno un thread, il numero di processi effettivamente eseguiti contemporaneamente è molto basso. Questo potrebbe essere stabilizzato da un processore molto veloce, però.
    Ciò comporta tempi di risposta lunghi per eventi come i clic del mouse.

Per i sistemi x86, HLT è l'unica istruzione realmente ostacolare il puntatore all'istruzione di avanzare.
Tutti gli altri casi sono solo loop (potenzialmente infiniti) o bug del programma/sistema operativo.

+0

dato che si mette "il multitasking su un processore lento", penso che dovresti aggiungere anche "traffico di scambio elevato su un sistema con poca RAM". Sono nello stesso ballpark: risorse hardware limitate. – bolov

+1

Una domanda interessante è: un errore in un processo utente può bloccare solo l'intero sistema, oppure deve esserci anche un bug nel sistema operativo o driver di sistema affinché ciò accada? – bolov

+0

@bolov È davvero ma piuttosto filosofico.Il buon vecchio bombardamento a forcella è un programma utente e può facilmente bloccare il sistema. Il fatto che i sistemi operativi non lo vietino: è un bug o no? "Philosophical" potrebbe non essere la parola giusta qui, ma spero che tu capisca cosa intendo comunque. ** Nota: ** Adatterò la mia risposta più tardi in base al tuo primo commento, ma al momento non sono in grado di farlo. – Downvoter