Estratto del documento

Sistemi operativi

Capitoli

  • Intro sistemi operativi
  • Thread e POSIX thread
  • Processi
  • Gestione della memoria
  • Memoria virtuale
  • Memoria di massa
  • File system
  • Scheduling CPU
  • Domande di teoria

Intro sistemi operativi

L'introduzione ai sistemi operativi include la command line interface (CLI) e lo shell scripting.

Struttura del sistema operativo

  • Modi di esecuzione della CPU: 2
  • Avvio del sistema operativo BOOTSTRAP: 3

Servizi del sistema operativo

  • Gestione di risorse: allocazione, contabilizzazione, protezione e sicurezza (possessori di informazione devono essere garantiti da accessi indesiderati ai propri dati; processi concorrenti non devono interferire fra loro).
  • Comunicazioni (intra e inter-computer)
  • Rilevamento di errori che possono verificarsi nella CPU e nella memoria, nei dispositivi di I/O o durante l’esecuzione di programmi utente
  • Gestione del file system: capacità dei programmi e dell’utente di leggere, scrivere e cancellare file e muoversi nella struttura delle directory
  • Operazioni di I/O: il SO fornisce ai programmi utente i mezzi per effettuare l’I/O su file o periferica
  • Esecuzione di programmi: capacità di caricare un programma in memoria ed eseguirlo, eventualmente rilevando e gestendo situazioni di errore
  • Programmi di sistema
  • Chiamate di sistema
  • Interfaccia utente: a linea di comando (Command Line Interface, CLI) o grafica (Graphic User Interface, GUI).

Interfaccia utente a linea di comando (CLI)

L’interfaccia utente a linea di comando permette di impartire ordini al SO sotto forma di sequenze di caratteri alfa-numerici digitati sulla tastiera (o presi da un file). L’interprete dei comandi (o anche Shell di comandi) è un programma eseguibile che si occupa di un singolo terminale. Attende i caratteri digitati sulla tastiera per quel terminale. L’utente digita dei caratteri, quando preme il tasto di invio (return) questi caratteri vengono passati all’interprete dei comandi che li gestisce. Ricevuti i caratteri, la shell li interpreta ed esegue gli ordini ricevuti, poi si rimette in attesa di nuovi ordini. La shell è programmabile perché al prompt è possibile passare uno script, ovvero una sequenza di ordini da eseguire.

Gli ordini ricevuti possono essere di due tipi:

  • Comandi: sono ordini la cui implementazione è contenuta nel file eseguibile della shell stessa (comandi builtin della shell). Non li troviamo perciò come file separati nel file system. Ad esempio il comando cd.
  • Eseguibili: sono ordini la cui implementazione è contenuta fuori della shell, cioè in altri file memorizzati nel file system. L’ordine è il nome del file da eseguire. L’interprete cerca il file specificato, lo carica in memoria e lo fa eseguire. Al termine dell’esecuzione la shell riprende il controllo e si rimette in attesa di nuovi comandi.

Unix, Linux: Diverse Shell di comandi, tra le più utilizzate bash (bourne again shell).

Windows: Shell DOS Emulazione di interfaccia testuale Linux: bash realizzata dalla piattaforma cygwin. Utile per far eseguire, in ambiente Windows, applicazioni e servizi implementati per Linux. In Windows 10 è stata aggiunta una bash (non completissima).

Mac: Diverse Shell di comandi, compresa bash.

Librerie e chiamate di sistema

Le chiamate di sistema forniscono ai processi i servizi offerti dal SO: Controllo dei processi, Gestione dei file e dei permessi, Gestione dei dispositivi di I/O, Comunicazioni. Il modo in cui sono realizzate cambia al variare della CPU e del sistema operativo. Il modo di utilizzarle (chiamarle) cambia al variare della CPU e del sistema operativo. Sono utilizzate (invocate) direttamente utilizzando linguaggi di basso livello (assembly). Possono essere chiamate (invocate) indirettamente utilizzando linguaggi di alto livello (C o C++). Infatti, normalmente i programmi applicativi non invocano direttamente le system call, bensì invocano funzioni contenute in librerie messe a disposizione dal sistema operativo ed utilizzate dai compilatori per generare gli eseguibili. L’insieme di tali funzioni di libreria rappresentano le API (Application Programming Interface) cioè l’interfaccia che il sistema operativo offre ai programmi di alto livello. Le librerie messe a disposizione dal sistema operativo sono dette librerie di sistema. Cambiando il sistema operativo oppure cambiando il processore (CPU) su cui il sistema operativo si appoggia, i nomi delle funzioni delle API rimangono gli stessi ma cambia il modo di invocare le system call, quindi cambia l’implementazione delle funzioni delle API per adattarle alle system call e all’hardware.

Perché usare programmi di alto livello?

Un programma sorgente in linguaggio C che usa le API non deve essere modificato se cambio il sistema operativo o l’hardware (e questi mantengono le stesse API), poiché sul nuovo s.o. cambia l’implementazione delle API e quindi cambia l’eseguibile che viene generato su diversi s.o ed hardware. In Linux esiste un comando che permette di vedere quali system call sono usate da un programma in esecuzione: Strace, esegue il comando specificato come argomento fino a che questo termina. Intercetta e visualizza le system calls che sono chiamate dal processo e i segnali che sono ricevuti dal processo.

POSIX (Portable Operating System Interface)

Portabilità: Un sorgente C Standard conforme a POSIX può essere eseguito, una volta ricompilato, su qualunque sistema POSIX dotato di un ambiente di programmazione C Standard. Per scrivere un programma conforme a POSIX, bisogna includere gli header files richiesti dalle varie primitive usate, scelti fra:

  • Header files della C Standard Library (contenenti opportune modifiche POSIX)
  • Header files specifici POSIX

#define _POSIX_SOURCE 1

File System

Lo spazio di ciascun disco rigido è suddiviso in una o più parti dette partizioni. Le partizioni contengono:

  • Contenitori di dati detti files
  • Contenitori di files, detti directories (folders o cartelle in ambienti grafici)

In realtà ciascuna directory può a sua volta contenere dei files e anche delle altre directories formando una struttura gerarchica. In Windows le partizioni del disco sono viste come logicamente separate e ciascuna è indicata da una lettera (C: B: Z: …). Nei sistemi Linux/Mac ciascun utente di un computer ha a disposizione dello spazio su disco per contenere i suoi files. Nel momento in cui si accede al terminale a riga di comando di un computer, il terminale stabilisce la posizione logica attuale dell’utente all’interno del filesystem, collocandolo inizialmente nella propria home directory.

Esempi di directories in Linux:

  • bin: Essential command binaries
  • boot: Static files of the boot loader
  • dev: Device files
  • etc: Host-specific system configuration
  • lib: Essential shared libraries and kernel modules
  • media: Mount point for removable media
  • mnt: Mount point for mounting a filesystem temporarily
  • opt: Add-on application software packages
  • sbin: Essential system binaries
  • srv: Data for services provided by this system
  • tmp: Temporary files
  • usr: Secondary hierarchy

Utenti e gruppi

Nei sistemi Unix/Linux esistono le astrazioni di utente (user) e gruppo di utenti (group). Un utente può corrispondere ad una persona umana oppure essere solo la rappresentazione di una entità usata per indicare chi è che esegue un servizio di sistema. Ad esempio lo user mysql che esegue il servizio del database mysql.

Un utente (user) è caratterizzato da una stringa chiamata username che contiene il nome utente (studente, vic, syslog) e da un identificatore numerico chiamato userID entrambi univoci nel sistema. Un gruppo (group) è caratterizzato da una stringa chiamata groupname che contiene il nome del gruppo (staff, admin) e da un identificatore numerico chiamato groupID entrambi univoci nel sistema. Ciascun utente appartiene ad uno o più gruppi.

Ciascun file (e ciascuna directory) del filesystem appartiene ad un utente (detto proprietario del file, owner) che normalmente è l'utente che ha creato quel file. Ciascun file (e ciascuna directory) è associata ad un gruppo. Un utente può tentare di accedere ad un file, chiedendo di leggere o modificare il contenuto di un file oppure di eseguire un file eseguibile, anche se non è il proprietario del file.

Viene indicato col termine effective user un utente quando cerca di accedere ad un file: il termine permette di distinguere tra chi sta usando il file e chi ne è il proprietario. Il proprietario di un file stabilisce chi può accedere a quel suo file, configurando i permessi di accesso a quel file. Il proprietario stabilisce, distinguendoli, i permessi assegnati al proprietario del file (sé stesso), agli utenti appartenenti allo stesso gruppo del file e, infine, a tutti gli altri.

Ogni file ha un proprietario (identificato da un numero intero univoco detto userID) ed un gruppo del proprietario (identificato da un intero detto groupID). Allo userID corrisponde una stringa username, e al groupID corrisponde una stringa groupname. Solo il proprietario del file può cambiare proprietario, gruppo e permessi del proprio file. Comandi per cambiare proprietario, gruppo e permessi: chown, chgrp, chmod.

Subshell

Una subshell è una shell (shell figlia) creata da un’altra shell (shell padre). IMPORTANTE: Una subshell viene creata in caso di:

  • Esecuzione di comandi raggruppati (vedi dopo).
  • Esecuzione di script.
  • Esecuzione di processo in background (vedi dopo).

NB: l’esecuzione di un comando built-in avviene nella stessa shell padre. Ogni shell ha una propria directory corrente (ereditata dalla shell padre). Ogni shell ha delle proprie variabili. Ogni subshell eredita dalla shell padre una copia delle variabili d’ambiente (vedi dopo). Ogni subshell non eredita le variabili locali della shell padre.

Quando una shell deve eseguire uno script esegue queste operazioni:

  • Legge la prima riga dello script in cui è indicato quale interprete di comandi deve eseguire lo script es: #!/bin/bash
  • Crea una subshell
  • Il nome dello script viene passato come argomento (opzione -c) alla nuova subshell
  • La nuova subshell esegue lo script.
  • Alla fine dell’esecuzione dello script la subshell termina e restituisce il controllo alla shell padre, restituendo un valore intero che indica il risultato.

Ogni shell supporta due tipi di variabili:

  • Variabili locali: Non “trasmesse” da una shell alle subshell da essa create. Utilizzate per computazioni locali all’interno di uno script
  • Variabili di ambiente: “Trasmesse” dalla shell alle subshell. Viene creata una copia della variabile per la subshell. Se la subshell modifica la sua copia della variabile, la variabile originale nella shell non cambia.

C’è differenza tra una variabile che esiste ma è vuota ed una variabile che invece non esiste:

  • Se una variabile non è mai stata dichiarata allora non esiste.
  • Se a una variabile è stato assegnato come valore la stringa vuota “”, allora esiste ma è vuota.

Posso eliminare una variabile esistente (vuota o no) col comando unset nomevariabile. Dopo averla eliminata, quella variabile non esiste.

La funzionalità history memorizza i comandi lanciati dalla shell e permette di visualizzarli ed eventualmente rilanciarli. La storia dei comandi viene mantenuta anche dopo la chiusura della shell.

set lanciato senza nessun parametro visualizza tutte le variabili della shell, sia quelle locali che quelle d’ambiente. Inoltre visualizza le funzioni implementate nella shell (le vedremo più avanti (forse)). set lanciato con dei parametri serve a settare o resettare una opzione di comportamento della shell in cui viene lanciato.

Argomenti o parametri a riga di comando di un programma

Sono un insieme ordinato di caratteri, separati da spazi, che vengono passati al programma che viene eseguito in una shell, nel momento iniziale in cui il programma viene lanciato.

Tilde ~ expansion

Riguarda 5 casi essenziali:

  • Un carattere tilde isolato
  • Un carattere tilde seguito da slash non quotato
  • Un carattere tilde seguito da slash non quotato seguito da altri caratteri
  • Una parola che inizia con la tilde seguita da un nome utente
  • Una parola che inizia con la tilde seguita da un nome utente, seguita da slash non quotato a cui possono seguire altri caratteri

Wildcard

I metacaratteri * e ? sono caratteri che vengono inseriti dall’utente nei comandi digitati e che la shell interpreta cercando di sostituirli con una sequenza di caratteri per ottenere i nomi di files nel filesystem:

  • * può essere sostituito da una qualunque sequenza di caratteri, anche vuota.
  • ? può essere sostituito da esattamente un singolo carattere.
  • [abk] può essere sostituito da un solo carattere tra a b oppure k.
  • [1-7] può essere sostituito da un solo carattere tra 1 2 3 4 5 6 oppure 7.
  • [c-f] può essere sostituito da un solo carattere tra c d e oppure f.
  • [[:digit:]] può essere sostituito da un solo carattere numerico (una cifra).
  • [[:upper:]] può essere sostituito da un solo carattere maiuscolo.
  • [[:lower:]] può essere sostituito da un solo carattere minuscolo.

Espressioni condizionali

  • Le espressioni condizionali sono dei particolari comandi che valutano alcune condizioni e restituiscono un exit status di valore 0 per indicare la verità dell'espressione o di valore diverso da zero per indicarne la falsità.
  • Ciascuna espressione condizionale si scrive mettendo le condizioni da valutare tra doppie parentesi quadre [[ .... ]].
  • Le condizioni all'interno delle [[ ]] possono essere composte tra loro mediante degli operatori logici ! (not), && (and), || (or) e mediante parentesi tonde per stabilire l'ordine di valutazione. Ad esempio [[ ((condA)&&(condB)) || condC ]].
  • All'interno delle espressioni condizionali [[ ]] la bash effettua solo le interpretazioni variable expansion, arithmetic expansion con $(()) ma non (()), command substitution, process substitution, and quote removal, ma solo negli operandi.
  • Notare che in una stessa espressione condizionale [[ ]] io posso effettuare sia confronti aritmetici (specificando opportuni operatori -eq -ne -le -lt -ge -gt), ma anche confronti non aritmetici (specificando altri operatori). Posso infatti verificare condizioni non aritmetiche che riguardano stringhe, usando gli operatori di confronto lessicografico tra stringhe == != < <= >= <>.
  • Posso anche verificare se delle stringhe sono vuote o no (con gli operatori -z -n). Posso verificare condizioni sui file (operatori -d -e -f -h -r -s -t -w -x -O -G -L). Posso confrontare le date di ultima modifica di due files (operatori -nt -ot).

Comandi Bash

I comandi Bash includono gestioni di input/output, file, raggruppamento comandi e altre funzionalità come SED stream editor (coreutils).

Concetti di processo, gruppo di processi, terminale di controllo e gruppo di processi

Un processo è la più piccola unità di elaborazione completa ed autonoma che può essere eseguita in un computer. Un processo è un insieme di thread di esecuzione operanti all'interno di un contesto, il quale comprende uno spazio di indirizzamento in memoria ed una tabella dei descrittori di file aperti per quel processo.

Gruppo di processi

Un processo può lanciare l'esecuzione di altri processi: questi altri processi appartengono allo stesso gruppo di processi del processo padre, a meno che non si svolgano azioni che modificano il gruppo di appartenenza.

Terminale di controllo

Un processo lanciato in esecuzione può avere un "controlling terminal" (un terminale da cui è controllato, che è l'astrazione di terminale (console=video+tastiera) da cui prende gli standard input output ed error.

Terminale di controllo del gruppo di processi

Un processo lanciato in esecuzione eredita lo stesso "controlling terminal" dal padre che lo ha lanciato, a meno che non si svolgano azioni che sganciano il processo dal terminale di controllo. Quindi tutti i processi di uno stesso gruppo di processi condividono lo stesso terminale di controllo.

Sessione

Per gestire l'insieme di processi, il kernel necessita di raggruppare i processi in modo più complesso che non la semplice relazione padre-figlio. Perciò viene usata l'astrazione di "sessione" e di "gruppo di processi". Un utente normalmente apre una shell interattiva (di login o no) che viene inserita dal sistema operativo in un terminale (la window che rappresenta la console monitor video+tastiera) e da questa shell eseguirà operazioni varie, tra cui l'esecuzione di comandi, eseguibili binari e script. Il terminale in cui la shell interattiva esegue è detto "terminale di controllo" (controlling terminal). La shell interattiva all'inizio crea una a sessione, specificando un nuovo sessionId, e lega la sessione al terminale di controllo. Questa shell interattiva diventa così il leader della sessione. I processi discendenti di quella shell apparterranno alla stessa sessione, a meno che non si eseguano operazioni di distacco.

Anteprima
Vedrai una selezione di 17 pagine su 78
Sistemi operativi Pag. 1 Sistemi operativi Pag. 2
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 6
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 11
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 16
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 21
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 26
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 31
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 36
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 41
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 46
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 51
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 56
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 61
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 66
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 71
Anteprima di 17 pagg. su 78.
Scarica il documento per vederlo tutto.
Sistemi operativi Pag. 76
1 su 78
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher MatCan98 di informazioni apprese con la frequenza delle lezioni di Elementi di Sistemi operativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Bologna o del prof Ghini Vittorio.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community