Questa è una grande domanda - che ha più risposte a più livelli - e meditando sulla quale, si può davvero "capire" molto sui sistemi informatici e sull'architettura del sistema operativo (OS) - mentre le altre risposte hanno cercato di dire "concisamente" cos'è una shell- non hanno davvero approfondito molto i significati O "Cosa significa la parola shell nella programmazione? Quindi ecco che va...
(0) Com'è fatta una shell: (dato che un'immagine vale più di mille parole!)
(i) MacOS Terminal / bash shell (bash è una forma abbreviata per "Bourne Again Shell")
(ii) Windows Command Prompt
(1) Significati letterali
Prima di tutto, nella lingua inglese, cos'è un guscio - "A shell is the outer part - could be a tortoise shell OR a peanut shell OR a coconut shell."
And in English, what's inside a shell? Il kernel - che è definito (in inglese, non solo in CS o programmazione) come "qualsiasi cosa sia dentro un guscio."
Immagine sotto - il guscio e il kernel di una nocciola.
(2) La prospettiva di Computer Science (CS) / Operating System (OS):
Ora, in CS/Programmazione, c'è qualcosa chiamato "Sistema Operativo" (OS) che è l'insieme di programmi necessari per far funzionare un computer, prima che possa fare cose fighe come l'elaborazione di testi, navigare in internet, giocare, ecc.
Il sistema operativo ha 3 parti:
(A) Il Kernel - Questo è il nucleo di un sistema operativo moderno - che svolge compiti come le funzioni di rete, la gestione dell'alimentazione dell'hardware, la gestione dei dispositivi e anche la programmazione dei compiti tra più programmi concorrenti, ecc.
(B) Programmi di utilità - Questi sono i programmi che aiutano ad eseguire i compiti di utilità comunemente necessari - come la gestione del disco (partizionamento, deframmentazione, formattazione, ecc.), l'elaborazione di testi di base (usando Notepad su Windows o Text Edit su MacOS), la gestione degli utenti (cioè, cambiare la password, aggiungere un utente), ecc.
(C) La Shell (aha!) - La shell qui è l'interfaccia - sia a riga di comando / basata su console O con interfaccia grafica, attraverso la quale l'utente e i programmi utente interagiscono con il sistema operativo - e che fa un sacco di compiti tra cui il monitoraggio dello stato attuale del sistema come visto dall'utente corrente.
Nel diagramma sopra, "Applicazioni" includerebbe:
(i) la shell (poiché anche la shell è un'applicazione che esegue le funzioni descritte di seguito)
(ii) applicazioni utente (ad es, elaboratore di testi, grafica, giochi, ecc.)
(iii) Utilità del sistema operativo
Cosa si intende per / incluso nelle funzioni della shell nella definizione sopra riportata della shell?
(a) Gestione delle associazioni dei file - sapere quale programma apre quale file - in modo da poter dire:
(i) Esempio-1:
- [in MacOS] "apri abc.txt" O "open xyz.jpg" - e la shell userà il programma di default attualmente associato per aprire abc.txt (TextEdit di default su MacOS) o per aprire xyz.jpg (usando Anteprima di default su MacOS).
- [in Windows] digitando il nome di un file sulla riga di comando O cliccando su un file si apre il file usando il programma associato al file.
(ii) Interpretare scorciatoie / alias relativi allo stato dell'utente corrente per eseguire azioni comuni:
Esempi:
- cd ~ (in MacOS X; Linux; molte varianti unix) - cambierà la directory corrente nella home directory dell'utente corrente.
- Clicca su una scorciatoia o un alias sul desktop - in Windows / MacOS - la shell interpreta dove punta l'alias o la scorciatoia - e apre il file con il programma predefinito associato o esegue un'applicazione.
Per saperne di più sull'esempio "cd ~" di cui sopra e sulla sua meccanica di base, si vedano le varie risposte alla domanda:
In programmazione, cosa fa il comando "cd ~"?
(b) Automatizzare compiti comuni permettendo all'utente di specificare alias / scorciatoie / batch O script per eseguire gruppi di comandi O aprire file specifici.
Questo è ciò che riguarda lo "shell scripting" (in Unix / Linux / MacOS ecc.) e ciò che riguarda la "programmazione dei file batch" sui sistemi Windows.
C'è anche qualcosa chiamato "Windows Power Shell" che fornisce un'interfaccia basata su JavaScript / VBScript ai profondi interni del sistema operativo Windows e che è spesso usato dagli amministratori di sistema e altri che hanno bisogno di automatizzare comuni compiti amministrativi e di gestione dei sistemi.
(c) Gestire l'"ambiente di sistema" - lo stato dell'istanza corrente della shell visibile all'utente corrente:
Così, se avete più utenti collegati in un sistema, ogni utente può avere più istanze della "shell" aperte e ogni "shell" può avere una directory corrente così come il "Path" di sistema e varie altre variabili d'ambiente impostate e può cambiarle a piacimento e questo "ambiente di sistema" sarà passato ai programmi eseguiti dall'istanza corrente della shell dall'utente corrente.
(d) La Shell Graphical User Interface (GUI) - sia in Windows che in MacOS - la GUI di sistema è anch'essa una "shell" che aiuta l'utente corrente a comunicare con il kernel del sistema operativo e ad invocare le utilità di sistema e che mantiene e gestisce l'"ambiente di sistema" dell'utente corrente così come altri aspetti dello stato corrente del sistema visibili all'utente corrente.
(3) La storia / motivazione: Perché esistono le shell del sistema operativo? Perché gli interni del sistema operativo e la "shell" non possono essere un unico grande blocco?
Influenza del sistema operativo Unix e della filosofia di progettazione Unix: La maggior parte dei sistemi operativi - prima che il sistema operativo Unix fosse concepito, descritto e implementato ai Bell Labs negli anni '70 - era costruito come un unico grande blocco monolitico e che era anche limitato ad un particolare tipo di computer.
Le persone che progettarono e implementarono Unix, immaginarono un sistema operativo che sarebbe stato modulare ed elegante e che avrebbe funzionato su una varietà di sistemi informatici e architetture (cioè: essere portatile) - e così, progettarono il sistema operativo per consistere in un "kernel", "shell" e "programmi di utilità". Dopo il successo di Unix e più tardi di Linux e la sua diffusione nelle varie università e nel mondo accademico, così come nell'esercito degli Stati Uniti e nel nascente Internet - divenne un modello di progettazione standard nella progettazione dei sistemi operativi per astrarre il sistema operativo in una shell, un kernel e programmi di utilità.
L'uso della Shell di Unix e la sua progettazione dal punto di vista dell'utente è descritto nel classico libro soprannominato "la Bibbia" o "il libro giallo" - "Unix Programming Environment" di Kernighan e Pike.
Di seguito, una foto di Brian Kernighan e Rob Pik - i ragazzi che hanno scritto il libro di cui sopra e che erano nel gruppo di ragazzi che hanno scritto il libro di cui sopra.
Sistemi operativi falliti che non sono stati progettati correttamente:
Anche di recente, ci sono stati sistemi operativi/piattaforme che erano per lo più monolitici - ma che sono falliti, tra cui (ma non solo):
(1) Il sistema operativo originale BlackBerry (prima di Blackberry 10) - un gioco che si bloccava poteva causare un crash del sistema operativo in cui tutti i contatti e i file sul dispositivo sarebbero stati persi - perché non c'era una corretta separazione tra le diverse parti del sistema operativo.
(2) Samsung SHP (Samsung Handset Platform) e la sua successiva evoluzione Bada OS - Questo OS ha avuto la particolarità di ispirare il minor interesse da parte degli sviluppatori e di diminuirlo continuamente - anche se i dispositivi con BADA erano leader di mercato in alcuni mercati come la Francia.!!
Spero che questo aiuti...
Riferimenti / ulteriori letture:
(1) Leggi Design of the Unix Operating System - di Maurice J Bach
(2) Leggi Unix Programming Environment - di Kernighan e Pike
(3) Articoli di Wikipedia su Unix Architecture, Unix Design, Kernel e varie shell.
(4) Articolo di Wikipedia: Windows shell
(5) Articolo di Wikipedia: Shell (informatica)
Sentitevi liberi di votare, commentare, suggerire miglioramenti e chiedermi di chiarire... sono felice di aiutare!!!
Se vi è piaciuta questa risposta, sentitevi anche liberi di seguirmi: Nalin Savara - e leggi e vota e condividi anche le altre mie risposte!!!