Cosa significa la parola “shell” nella programmazione?

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")

main-qimg-af5fd2ac89cdd4206091f2e8d3c26814.webp

(ii) Windows Command Prompt

main-qimg-04e2681989a66d8f7190d1dbccd7ed77.webp

(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."

main-qimg-331c52e8bd6f793fbb0278b3eccb4e2c.webp

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."

main-qimg-8b57be9cd9fee7272deffca3a6e29eb2.webp

Immagine sotto - il guscio e il kernel di una nocciola.

main-qimg-87d6bcb8ba84ff7b2700c3f0b694821f.webp

(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.

main-qimg-ca6b7762d4c5f2d4c56f9e00e378639b.webp

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.

main-qimg-d3e3072b541872c041250736987c4d37.webp

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.

main-qimg-5f40bce761b64d127ecfc7846c8cee7a.webp

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.

main-qimg-b8495586936e7233fe408f0f9e4f55b1.webp

(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.!!

main-qimg-8bcb75f7c2d5a25a3b95536499d020e0.webp

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!!!