Come funziona un sistema unix o linux? [chiuso]


37

Vorrei sapere come funziona il sistema operativo in breve :

  • I componenti di base su cui è costruito
  • Come funzionano questi componenti insieme
  • Cosa rende unix UNIX
  • Ciò che lo rende così diverso da altri sistemi operativi come Windows

3
wow questa domanda richiederebbe così tanto tempo per rispondere in modo completo ... come molti libri. Esistono pochissimi sistemi operativi (spazio incorporato a parte e Windows è la notevole eccezione) che non sono Unix.
xenoterracide,

2
non so se piangere o ridere
zvolkov

27
Come funziona un sistema unix o linux? Molto bene grazie :-).
Gaurav,

3
Adoro la domanda. È il tipo che fa verbalizzare la propria comprensione da parte degli utenti esperti e ci dà la possibilità di comprendere l'universo di unix e di linux.
Stein Åsmul,

5
Bene, in poche parole, hai una shell e sotto di essa hai un kernel. Questo è anche il modo in cui funziona Unix.
Tom Zych,

Risposte:


74

Un sistema UNIX è composto da più parti o livelli come vorrei chiamarli.

Per avviare un sistema, un programma chiamato boot loader risiede nel primo settore di una partizione del disco rigido. Viene avviato dal sistema e, a sua volta, individua il kernel del sistema operativo e lo carica.

stratificazione

  1. Il kernel. Questo è il programma centrale che viene avviato dal boot loader. Esegue l'interazione hardware di base per il sistema (disco, memoria, video, audio) e offre un ambiente virtuale in cui è possibile avviare i programmi. Il kernel fornisce anche tutti i driver che gestiscono tutte le piccole differenze tra i dispositivi hardware. Al mondo esterno (i livelli superiori), ogni classe di dispositivi sembra comportarsi esattamente nello stesso modo coerente - su cui, a loro volta, i programmi possono basarsi.

  2. Sottosistemi di sfondo. Ci sono solo programmi regolari, che ti impediscono. Gestiscono cose come l'accesso remoto, forniscono un bus messaggi centrale e fanno azioni basate su eventi hardware / di rete. Ad esempio, rilevamento bluetooth, gestione wifi, ecc. Anche tutti i servizi di rete (file server, server di stampa, web server) vivono a questo livello. Nei sistemi UNIX, questi sono tutti programmi normali.

  3. Gli strumenti della riga di comando. Questi sono tutti piccoli programmi che possono essere avviati per eseguire operazioni di modifica del testo, download di file o amministrazione del sistema. A questo punto, un sistema UNIX è completamente utilizzabile per gli amministratori di sistema. In Windows, questo livello non esiste più.

  4. L'interfaccia utente grafica. Questi sono anche solo programmi, l'unica differenza è che disegnano finestre sullo schermo invece di scrivere del testo. Questo rende il sistema più facile da usare per gli utenti normali.

Qualsiasi servizio o evento andrà dal basso verso l'alto.

Librerie: la piattaforma comune

I programmi fanno molte cose comuni come visualizzare una finestra, disegnare oggetti sullo schermo o scaricare un file. Queste cose sono le stesse per più programmi, quindi quel codice viene messo in file "librerie" separati ( .sofile - che significa oggetto condiviso). La libreria può essere condivisa tra tutti i programmi.

Per ogni cosa immaginabile, c'è una biblioteca. Ce n'è uno per leggere / scrivere file PNG. Ce n'è uno per i file JPEG, per la lettura di XML, per la crittografia, per la riproduzione di video e così via.

Su Linux, le librerie comuni per gli sviluppatori di applicazioni sono Qt e Gtk. Queste librerie utilizzano internamente librerie di livello inferiore per le loro esigenze specifiche, esponendo al contempo le loro funzionalità in modo piacevole e conciso per consentire agli sviluppatori di applicazioni di creare applicazioni ancora più velocemente.

Le librerie forniscono la piattaforma applicativa su cui i programmatori possono creare applicazioni per l'utente finale per un sistema operativo. Più librerie di alta qualità forniscono un sistema, minore è il codice che un programmatore deve scrivere per creare un bellissimo programma.

Alcune librerie possono essere utilizzate su diversi sistemi operativi (ad esempio, Qt lo è), altre sono realmente collegate in modo specifico a un sistema operativo. Ciò limiterà il tuo programma per poter essere eseguito solo su quella piattaforma.

Comunicazione tra processi

Un terzo angolo di un sistema operativo è il modo in cui i programmi possono comunicare tra loro. Questi sono machanismi di Inter Process Communication (IPC). Esistono in diversi modi, ad esempio un pezzo di memoria condivisa o un piccolo canale è impostato tra due programmi per scambiare dati. C'è anche un bus di messaggi centrale su cui ogni programma può inviare un messaggio e ricevere una risposta. Questo è usato per la comunicazione globale, dove non è noto quale programma possa rispondere.

Dalle librerie ai sistemi operativi

Con le librerie, IPC e il kernel in atto, i programmatori possono creare tutti i tipi di applicazioni per servizi di sistema, amministrazione utenti, configurazione, amministrazione, lavoro d'ufficio, intrattenimento, ecc. Questo costituisce la suite completa che gli utenti inesperti riconoscono come "sistema operativo ".

Nei sistemi UNIX / Linux, tutti i servizi sono solo programmi. Tutti gli strumenti di amministrazione del sistema sono solo programmi. Fanno tutti il ​​loro lavoro e possono essere incatenati insieme. Ho riassunto molti dei principali programmi su http://codingdomain.com/linux/sysadmin/


Parti distinguibili con Windows

UNIX è principalmente un sistema di programmi, file e autorizzazioni limitate. Molte complessità vengono evitate, rendendolo un sistema potente mentre sembra che abbia un lavoro facile farlo.

Nel dettaglio, questi sono principi che possono essere trovati nei sistemi UNIX / Linux:

  • Esistono modi uniformi per accedere alle informazioni. ("Tutto è solo un file"). È possibile aprire un file, un socket di rete, un canale IPC, i parametri del kernel e il dispositivo di blocco come file. Da qui la comparsa dei filesystem virtuali in / dev, / sys e / proc. L'unica API di cui hai mai bisogno è open, reade close.

  • Il sistema sottostante è trasparente. Ogni programma funziona con le stesse regole. A differenza di Windows, non esiste alcuna differenza artificiale tra un "programma console", un "programma gui" o un "servizio in background". Sono tutti solo programmi, che capita di fare cose diverse. Possono anche essere tutti osservati, analizzati e sottoposti a debug allo stesso modo.

  • Le impostazioni sono leggibili, modificabili e possono essere annotate con commenti. In genere hanno un formato in stile INI, ma possono utilizzare un formato personalizzato per le esigenze di tale applicazione. Poiché sono solo file, possono essere copiati su altri sistemi, archiviati o sottoposti a backup con strumenti standard.

  • Non ci sono grandi applicazioni "fai tutto in una volta". Il mantra è "fai una cosa, fallo bene". Gli strumenti della riga di comando possono essere concatenati e insieme essere potenti. Servizi separati (ad es. SMTP, IMAP e POP e login) sono sottoprogrammi separati, evitando complessi codici intrecciati e problemi di sicurezza. Ambienti desktop complessi delegano il duro lavoro ai singoli programmi.

  • fork(). I nuovi programmi vengono avviati da un programma esistente stesso clonato. Il clone imposta tutto (ad es. Handle di file) e facoltativamente si sostituisce con il nuovo codice del programma. Ciò rende davvero semplice applicare le stesse impostazioni di sicurezza e le stesse restrizioni ai nuovi programmi, condividere la memoria o configurare un meccanismo IPC. Anche il costo di avvio di un processo è molto basso.

  • Il file system è un albero in cui è possibile montare altre partizioni del disco e condivisioni di rete. C'è di nuovo un modo universale di accedere ai dati. Posizioni di sistema comuni (ad es. /usrPossono essere facilmente montate come condivisione di rete.

  • Il sistema è costruito per i privilegi dell'utente basso. Dopo l'accesso, ogni utente (tranne root) viene limitato alle proprie risorse, eseguendo solo applicazioni e file. I servizi di rete riducono i loro privilegi il più presto possibile. Esiste un unico modo chiaro per ottenere più privilegi o chiedere a qualcuno di eseguire un lavoro privilegiato per loro conto. Ogni altra chiamata è limitata dalle restrizioni e dai limiti del programma.

  • Ogni programma memorizza le impostazioni in un file / cartella nascosto della home directory dell'utente. Nessun programma tenta mai di scrivere un file di impostazione globale.

  • Un favore a meccanismi di comunicazione descritti apertamente rispetto a meccanismi segreti o specifici meccanismi 1 a 1. Altri fornitori e sviluppatori di software sono incoraggiati a seguire le stesse specifiche, in modo che le cose possano essere facilmente collegate, scambiate e tuttavia rimanere vagamente accoppiate.


1
bella risposta, so che è davvero difficile da spiegare in breve! Grazie! ;-)
Sander Versluys,

1
sì signore, ben fatto per questa risposta.
Stefan,

14
Dov'è il pulsante +10 ???
EricSchaefer

1
Grazie a tutti per i commenti e i voti! Bello sapere che la risposta è apprezzata così bene!
vdboor,

1
@faif, è abbastanza standard (anche i sistemi operativi Microsoft ce l'hanno), e suppongo che la bellezza sia negli occhi di chi guarda. Il punto è che tutto è un file, anche quelli speciali.
psusi,

11

UNIX è un sistema operativo potente, basato su un sound design che ha avuto successo per oltre 40 anni (è quasi l'eternità nell'informatica). La tecnologia centrale si basa sul linguaggio C e su una miriade di piccoli programmi: i comandi UNIX. La filosofia di base è stata riassunta da McIlroy:

Scrivi programmi che fanno una cosa e la fanno bene. Scrivi programmi per lavorare insieme. Scrivi programmi per gestire flussi di testo, perché questa è un'interfaccia universale.

Ulteriori informazioni sulla filosofia UNIX sono disponibili in ESRaymond "L'arte della programmazione UNIX".


2
+1 per "L'arte della programmazione UNIX". Tuttavia, mentre l'API è definita attorno a C, non esiste alcun problema tecnico con l'implementazione dell'intero sistema in Haskell (con bit di assembly;)) o qualcosa del genere.
Maciej Piechotka,

3
I pezzi di assemblaggio possono anche essere scritti in Haskell. Dai un'occhiata a Potential
Phil Miller,

10

Ci sono alcune risposte eccellenti qui. Tuttavia, una cosa che penso sia stata lasciata fuori è come * nix differisce dagli altri sistemi operativi, in particolare Microsoft Windows.

Il concetto fondamentale già trattato sopra "fai una cosa, fallo bene" è così centrale nei sistemi operativi * nix che a volte può essere trascurato. Eppure è questa filosofia di progettazione che rende Linux così flessibile e potente.

Ad esempio, l'interfaccia utente grafica (GUI) per MS Windows è intrecciata nel sistema operativo. È praticamente impossibile installare un sistema operativo MS senza la GUI. In Linux, puoi facilmente visualizzare un server o un sistema incorporato che non ha alcun componente grafico. Può essere interamente guidato dalla riga di comando ed essere ancora un server completo.

La progettazione modulare di Linux consente inoltre a un amministratore di sistema di interrompere un servizio, aggiornarlo e ripristinarlo senza riavviare il sistema operativo. In effetti, l'unica volta in cui è necessario riavviare un sistema operativo Linux è quando il kernel stesso viene modificato o aggiornato.

Ad esempio, potresti installare un nuovo gestore di Windows (gnome, kde, qualunque) su Linux e un utente attualmente connesso al sistema potrebbe non esserne mai a conoscenza.

Su Windows, spesso le modifiche più semplici al sistema richiedono un riavvio, anche se a volte questo è più un problema di sicurezza che un reale requisito tecnico. Direi che questo è uno dei difetti di base dei sistemi operativi MS. Su Linux potresti aggiornare molti dei moduli driver e avere un impatto minimo o nullo sugli utenti. Su Windows potrebbe essere necessario riavviare l'intera casella se si installa semplicemente una nuova applicazione.

Questo design modulare offre anche a Linux una straordinaria flessibilità. Ogni sistema Linux può essere personalizzato per l'attività specifica che devi compiere, con il minor carico di risorse possibile. Con Windows non è possibile disattivare l'interfaccia della GUI per eseguire un semplice server HTTP. C'è un'impronta di memoria che Windows presume che crei una barriera sotto la quale l'hardware non può andare. Questo è uno dei motivi principali per cui Linux è diventato il sistema operativo preferito da molte applicazioni mobili e integrate.

Potrei andare avanti all'infinito, ma spero che questi esempi aiutino a spiegare perché Linux è diventato così popolare e in che modo differisce realmente da quell'altro sistema operativo.



2

Consiglierei di leggere Advanced Programming in Unix Environment 2e per imparare molto sull'API e POSIX Single Unix Standard (SUS), che ti daranno un'idea di ciò che rende Unix Unix e come funzionano i componenti e lavorano insieme.

Tuttavia, è un libro molto pesante e più di un manuale di riferimento. Se hai un problema con l'insonnia, portalo a letto con te. A parte questo, se sei un programmatore Unix C è un must.


2

Nello spirito dei precedenti due libri consiglierei anche di raccomandare

L'interfaccia di programmazione LINUX di M. Kerrisk

che, sebbene mirando all'argomento della programmazione del sistema UNIX / Linux, rivela tonnellate di informazioni dettagliate su come funzionano i sistemi Linux e più in generale UNIX dal punto di vista del programmatore / utente. Approfondisce dettagliatamente la maggior parte dei proiettili menzionati nella risposta di vdboor e rivela abbastanza dettagli in modo comprensibile e leggibile per avere un'idea / immagine dei concetti fondamentali di UNIX e delle loro basi.

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.