Sistemi operativi Sommario Sistemi operativi Sommario Macchine virtuali Il software di base Il sistema operativo Avviamento del calcolatore Gestione del processore Gestione della memoria principale Gestione della memoria di massa (file system) Gestione delle periferiche Interazione con l’utente Strumenti per la programmazione Compilatori e Interpreti I programmi applicativi Riprendiamo il discorso sull'architettura del calcolatore. Nella lezione sullo hardware abbiamo visto che Un calcolatore è un insieme di circuiti elettronici (molto complicati) che alimentati si scambiano ed elaborano dei segnali elettrici rappresentanti due valori, 0 e 1 (presenza e assenza di tensione). Compiendo un passo di astrazione, grazie al fatto che abbiamo studiato il ciclo di funzionamento della CPU, possiamo anche affermare che Un calcolatore è una macchina in grado di eseguire delle istruzioni rappresentate da sequenze binarie (di “0” e “1”). Dunque un calcolatore "nudo" non è utilizzabile dagli utenti, ma essendo programmabile, e può essere equipaggiato con un insieme di programmi (software) che lo rendano utilizzabile (per fortuna!) Il software deve permettere di: astrarre dall’organizzazione fisica del calcolatore, interagire in modo semplice con il calcolatore, La parola chiave è astrazione: il sw deve realizzare una macchina virtuale (cioè che in realtà non esiste) a partire da un calcolatore elettronico, astraendo dai dettagli dello hardware. L'utente interagisce con la macchina virtuale e non con la macchina fisica. Astrarre (come "estrarre") vuol dire rimuovere dettagli. Macchine virtuali Una macchina è descritta dall’insieme delle funzioni che è in grado di svolgere. Una macchina virtuale è una macchina in cui una parte delle sue funzioni sono realizzate da programmi. Il termine “virtuale” sta proprio a indicare che tale macchina non esiste realmente, ma che una parte delle sue funzioni è realizzata dal software. Una macchina virtuale è organizzata in una struttura a più strati (a cipolla): il nucleo più interno rappresenta l’hardware, gli altri strati rappresentano programmi che aggiungono funzioni (sempre più astratte/complesse rispetto all’Hw) alla macchina virtuale. Ogni strato aggiunge nuove funzioni utilizzando le funzioni realizzate dagli strati sottostanti (nascondendole in parte, agli strati superiori), Lo strato più esterno rappresenta le applicazioni utente. Il software di base È l’insieme dei programmi che realizzano la macchina virtuale utilizzabile dall’utente. Due classi di programmi: Sistema operativo (Operating System): Si occupa della gestione delle risorse, dell'avviamento del calcolatore e della creazione dell’ambiente (virtuale) dell’utente. In particolare, esso controlla: la gestione del processore e dei processi la gestione della memoria principale la gestione delle periferiche l'interazione tra utente e sistema Strumenti per la programmazione: traduzione tra linguaggi diversi (interpreti, compilatori) ambienti per lo sviluppo software (IDE, Integrated Development Environment) Il sistema operativo È un insieme di programmi fondamentale per il buon funzionamento di un calcolatore. Ha lo scopo di: gestire efficientemente il calcolatore e le sue periferiche creare un ambiente per l’interazione tra l’uomo e la macchina realizzato a livelli, ogni livello fornisce funzioni diverse: I livelli bassi (vicino all’HW) si occupano della gestione efficiente di: processore, memoria principale, periferiche I livelli alti (vicino all’utente) si occupano dell'interazione con l’utente. Funzioni di un sistema operativo: Avviamento calcolatore (boot) gestione dei processi gestione della memoria (RAM) reale e virtuale gestione memoria di massa e il file system gestione delle periferche interazione con l’utente La parte più esterna del S.O., quella che implementa l'interazione con l'utente, prende anche il nome di shell (guscio). Mentre la parte più interna, quella che comprende la gestione processi (ma non solo) si chiama kernel (nucleo). Numero di utenti monoutente: elaboratori per uso personale multiutente: utilizzabili da più utenti contemporaneamente Modo di elaborazione monoprogrammati: eseguono un solo programma alla volta (oltre al S.O). Il programma corrente (in esecuzione) deve completare la propria esecuzione prima che ne possa essere eseguito un altro. Un solo programma alla volta in memoria centrale (oltre al S.O). multiprogrammati (multitasking): più programmi risiedono in memoria centrale e sono pronti per essere eseguiti. Il programma in esecuzione può essere temporaneamente interrotto e sostituito da un altro programma. Esempi di sistemi operativi Unix: sistema operativo multiutente e multitasking con implementazioni per molti processori e usato per mini/micro computer, server, … . Ne esistono diversi dialetti Unix: BSD4.2, AT&T System V, Solaris, Linux, HP/UX . MacOs (ver. 7-9): sistema operativo monoutente e multitasking con interfaccia grafica integrata; esistono implementazioni per Motorola 680x0 e PowerPc. Mac OS X: dalla versione 10 il S.O. dei Mac è profondamente cambiato. Esso si ispira a NextStep, e si basa su di un nucleo di Unix; ne esistono implementazioni per PowerPc e Intel. Windows: sistema operativo monoutente e multitasking con interfaccia grafica ormai totalmente integrata (non Windows 95 che si basa su MSDOS); ne esistono implementazioni per processori Intel e compatibili (AMD). Un SO implementa funzionalità che dipendono dalla sua tipologia, ma che non dipendono dal processore: una architettura con processore Intel può supportare Windows, Linux e Mac OS X. Avviamento del calcolatore Il processo di avvio del sistema operativo da computer spento si chiama boot o bootstrap. Può essere interessante capire come funziona nel dettaglio questa fase. All’accensione del calcolatore il Program Counter viene "inizializzato" con un indirizzo della memoria ROM (p.es. FFFF0, questo è cablato nel processore) dove inizia un programma chiamato BIOS (o Basic Input / Output System). Grazie al fatto che la CPU inizia a compiere il suo ciclo fetch-execute, il BIOS viene eseguito. Il BIOS effettua vari controlli sull'hardware presente, ma soprattutto: identifica il disco di avvio (di solito quello con il numero più basso) carica in memoria da esso (da una posizione fissa corrispondente al primo settore del disco) un programma chiamato boot loader; esegue il boot loader, il quale si occupa di caricare in memoria (dal disco) e mandare in esecuzione il sistema operativo. Da quel momento in poi il controllo passa al sistema operativo. Man mano che il S. O. viene caricato, diventano disponibili le varie funzioni; vengono identificate le risorse disponibili (periferiche, memoria secondaria) e controllato il loro stato. Gestione del processore La gestione del processore, il componente più importante di un calcolatore, deve essere efficiente. Nei sistemi monoprogrammati l’esecuzione di un programma avviene senza interruzioni. Si ha un uso inefficiente del processore. E.g., se il programma in esecuzione richiede un’operazione di I/O, esso deve aspettare il compimento di tale operazione da parte della periferica, con spreco di tempo, mentre il processore è inutilizzato. Nei sistemi multiprogrammati l’esecuzione di un programma può subire interruzioni. E.g., se il processo in esecuzione richiede un’operazione di I/O, esso viene messo in attesa, il processore passa a eseguire un processo pronto e in seguito al compimento dell’operazione di I/O il primo processo passerà dallo stato di attesa a quello di pronto e così prima o poi la sua esecuzione sarà ripresa. Convenienza della multiprogrammazione La convenienza della multiprogrammazione è motivata dalla velocità delle periferiche, migliaia di volte più lente del processore. Il tempo di attesa (per il completamento di un'operazione I/O) di un programma è molto superiore rispetto al suo tempo di esecuzione. Questo spiega perché i sistemi monoprogrammati sono inefficienti: il processore è inattivo (idle) per lungo tempo. La multiprogrammazione produce i seguenti vantaggi pratici: Nei sistemi monoutente si possono usare più applicazioni contemporaneamente, ad esempio: un programma di elaborazione di testi e un programma di grafica per produrre un documento contenente immagini. nel caso di attivazione di un programma mentre si sta usando un’altra applicazione (e.g. programma di grafica), l’attività dei due programmi viene svolta seguendo alternativamente i due programmi per brevi periodi (decine di ms.). L’applicazione utente può continuare a funzionare, con solo qualche rallentamento nel suo funzionamento. Nei sistemi multiutente l’uso condiviso della CPU da parte di più processi di utenti diversi ad intervalli regolari (decine di millisecondi) fa si che ogni utente creda di essere l’unico utente del sistema e di avere a disposizione tutte le risorse. Questi sistemi sono detti a partizione di tempo (o time sharing). I processi Un processo è un programma che può interrompere la propria esecuzione, assumendo (almeno) tre possibili stati: pronto, esecuzione, attesa. Nei calcolatori con un unico processore, un solo processo è in esecuzione, mentre possono esistere diversi processi negli altri due stati. La multiutenza è di solito creata con la partizione di tempo: il tempo del processore è suddiviso tra i processi. La tecnica più semplice è quella "round robin" che assegna in modo ciclico ai processi pronti un quanto di tempo (ad es. 30 millisecondi) del processore per la loro esecuzione. In realtà i processi pronti possono essere in memoria centrale o in memoria di massa, e dunque il gestore dei processi deve anche occuparsi di caricare e scaricarli dalla memoria di massa. Per ragioni di efficienza - infatti -- prima di essere messo in esecuzione un processo deve essere pronto in memoria centrale. Gestione del multitasking Il gestore dei processi in un sistema multiprogrammato dovrà dunque: ricordare lo stato di ogni processo mediante una tabella dei processi che contiene l'immagine dei processi, ovvero il loro codice e i relativi dati; realizzare il cambio di contesto, cioè il cambio del processo in esecuzione; eseguire lo scheduling del processore (scelta del processo da mandare in esecuzione); coordinamento, sincronizzazione e mutua esclusione tra processi: conflitti nella condivisione delle risorse, scambio di dati tra processi. I processi di sistema In un S.O. multiprogrammato, i programmi del S.O. sono gestiti come i programmi utente, e sono quindi dei processi a tutti gli effetti. Possono essere sempre attivi e presenti in memoria principale (ad es. in Windows, sono visibili dal Task Manager) Vengono eseguiti non appena necessario (in seguito ad un segnale di interruzione o interrupt) e hanno una priorità superiore a quella dei processi utente. Gestione della memoria principale In un S.O. multiprogrammato, i processi esistenti devono condividere la memoria principale, cioè il codice dei processi deve essere caricato nella memoria principale, in modo che ad ogni cambio di contesto non sia sempre necessario caricare/scaricare i programmi in memoria. Si pone quindi il problema di non sovrapporre/danneggiare dati. Questo vale anche per i processi di sistema (sempre esistenti) che devono essere protetti dai processi utente. È conveniente dare ai processi la visione di una memoria virtuale, anche se condivisa, più grande di quella effettivamente installata. Memoria reale e virtuale La memoria reale è la memoria RAM, che viene suddivisa tra i processi con: partizioni con allocazione continua partizioni con allocazione non contigua La memoria principale a disposizione di un processo dipende dal numero dei processi esistenti. La memoria virtuale è la memoria che i processi credono di avere a disposizione. Essa è una memoria fittizia, più estesa della memoria RAM, ed è simulata dal sistema operativo usando parti della memoria secondaria e la memoria RAM assegnata ai processi. Paginazione: una tecnica di memoria virtuale La memoria è suddivisa in aree di uguali dimensioni (comprese tra 512 B e 64 KB, con valori tipici di 1-4 KB) dette pagine. Ad ogni processo viene assegnato un certo numero di pagine di memoria centrale (pagine fisiche), solitamente inferiore al numero necessario per mantenere il codice del processo (pagine logiche). Il processo "vede" le pagine logiche come un blocco di memoria contigua, mentre le corrispondenti pagine fisiche non necessariamente lo sono. L'implementazione della memoria virtuale è basata sulle tecniche di swapping e page demanding. Un processo che tenta di accedere a un indirizzo di una pagina non caricata in memoria (page fault): libera dello spazio di memoria scaricando una o più pagine sul disco (page swapping), oppure gli viene assegnata una pagina fisica libera su cui caricare la pagina mancante (page demanding).. Così, effettuando quando necessario una serie di trasferimenti tra memoria RAM e disco, ogni processo può disporre di una memoria virtuale limitata solamente dalle dimensioni del disco rigido. Gestione della memoria di massa (file system) I supporti di memoria di massa memorizzano permanentemente dati e programmi e servono per l'implementazione della memoria virtuale. La memorizzazione permanente dei dati avviene tramite il file system, il modulo del sistema operativo che gestisce le informazioni, organizzate in file (archivio). I file Un file raggruppa informazioni elementari in dati strutturati complessi ed è composto da una sequenza di record. Un record (registrazione) è un insieme di campi logicamente correlati che costituiscono una informazione complessa. Un campo è una singola informazione (numero, carattere, etc.). Ad esempio, nome, cognome, data di nascita, stato civile, impiego costituiscono i campi di un record che rappresenta i dati anagrafici di una persona I record hanno lunghezza costante/variabile I file sono strutturati se le registrazioni hanno un formato complesso. I file di testo sono quelli "meno strutturati": un record è costituito da un unico campo di tipo carattere. I file sono ad accesso sequenziale/casuale/indicizzato. Ad ogni file è associato un nome, così non è necessario conoscere l’indirizzo della zona di memoria in cui risiede. Le operazioni tipiche sui file sono: creazione, distruzione, copia, visualizzazione, stampa, lettura/modifica/scrittura, ridenominazione. L’organizzazione del file system suddivide i file in gruppi, detti directory/folder/cartella. Ogni cartella può contenere altre cartelle. In questo modo si gestiscono grandi quantità di file organizzati in una gerarchia. I file devono essere protetti: il proprietario deve avere l’accesso in lettura, scrittura ed esecuzione e solo lui può concedere ad altri tali privilegi. Molti S.O. organizzano il file system come un diagramma ramificato (albero) di directory e file (foglie). Ogni directory contiene dei file un riferimento alla directory padre (quella da cui discende), indicata con “..” un riferimento a sé stessa, indicata con “.” un riferimento alle directory discendenti (figli) Un file è identificato all’interno del file system dal suo pathname (percorso), ovvero dalla sequenza di directory che si devono accedere per raggiungere il file a partire dalla radice del file system (percorso assoluto) o da una specifica directory (percorso relativo). Esempio di file system apps/mdraw.exe è il percorso assoluto del file mdraw.exe esami/iscrgen.doc è un percorso del file iscrgen.doc relativo alla directory didat ../bianchi/file1.jpg è un percorso del file file1.jpg relativo alla directory rossi ../../utenti/bianchi/file1.jpg è un percorso del file file1.jpg relativo alla directory esami La cartella radice del file system, denominata root come nei sistemi Unix e Linux, è in Windows un disco di nome, ad es. A: (floppy), C: , D: , …, etc Organizzazione fisica dei file Un file viene memorizzato in una serie di blocchi (settori), non necessariamente contigui, di memoria secondaria. I blocchi che memorizzano il contenuto di un file: sono concatenati tra loro: ogni blocco contiene l’indirizzo del blocco seguente (Win) sono reperibili attraverso una tabella (indice) contenente gli indirizzi dei blocchi (Unix) La tabella di allocazione dei file (FAT - File Allocation Table) contiene in ogni riga le informazioni su un file: nome, data, dimensione, proprietario, tipo, indirizzo del primo blocco/indirizzo dell’indice. Gestione delle periferiche Obiettivi: fornire agli utenti una visione astratta delle periferiche, con comandi semplici, razionalizzare l’uso dei dispositivi. Esistono due tipi di dispositivi: a controllo di programma: il S.O. accede alla memoria (piccola) del dispositivo DMA (Direct Memory Access): leggono e scrivono direttamente in memoria Il S.O. viene avvisato della richiesta di operazioni da un segnale di "interrupt" e manda in esecuzione il driver del dispositivo. Quest'ultimo è un particolare programma che gestisce le peculiarità del dispositivo stesso. Interazione con l’utente L’utente accede alle funzioni del S.O. tramite un’interfaccia utente, basata su un linguaggio di interazione tra utente e sistema interazione testuale: l’utente usa dei comandi testuali (codici) con una sintassi precisa interazione grafica: l’utente accede ai comandi e ai dati tramite elementi grafici selezionabili con dispositivi di puntamento video Funzioni utente disponibili attraverso l’interfaccia di un S.O. gestione dei file: operazioni sui file e sul file system gestione delle periferiche: operazioni di stampa, funzionalità di tastiera e mouse gestione dei programmi applicativi: memorizzazione nel file system, esecuzione dei programmi accesso dei dati: visualizzazione dati funzionalità di base per i programmi applicativi Interfaccia testuale È realizzata tramite un processo, detto interprete dei comandi (Command Line Interpreter), che viene mandato in esecuzione all’avvio della macchina. L'interprete dei comandi segnala la disponibilità ad accettare ed eseguire comandi visualizzando un prompt (e.g. “>” ) sul monitor, l’utente digita nome e argomenti di un comando, poi preme return (invio). L'interprete legge quanto è stato scritto e se è corretto esegue il comando, altrimenti segnala l’errore all’utente; poi visualizza di nuovo il prompt e attende un nuovo comando da eseguire. La sintassi dei comandi dipende dal S.O. L'interazione testuale è sempre meno usata perché poco amichevole verso l’utente (non è user-friendly): è necessario conoscere la sintassi dei comandi ci sono delle facilitazioni: help on line, abbreviazioni continua a essere usata dai tecnici (programmatori e sistemisti) perché l’esecuzione dei comandi è molto veloce si possono scrivere dei file contenenti delle sequenze di comandi (script): sono detti batch file (file di testo eseguibili, con estensione .bat) in MS-DOS, shell script in Unix o Linux Interfaccie grafiche Le interfacce grafiche (Graphical user interface, GUI) sono state introdotte per superare i limiti delle interfacce testuali e per favorire soprattutto gli utenti poco esperti. Sono state studiate dalla Xerox tra ‘70 e ‘80; utilizzate per la prima volta da Apple per Lisa e Macintosh. In seguito, anche gli altri produttori di S.O. usarono le GUI: Windows, X-Windows, Amiga, NextStep ; L’accesso al S.O. avviene tramite un video grafico con un dispositivo di puntamento (e.g. mouse). Una metafora delle GUI: la scrivania La metafora della scrivania (desktop) rappresenta fedelmente una GUI: Il video rappresenta il piano di una scrivania, su cui appaiono degli oggetti, così come appaiono su una scrivania reale gli oggetti sono rappresentate da icone i dati e i programmi sono considerati come oggetti e pertanto rappresentati da icone si opera sugli oggetti della scrivania selezionandoli e applicandogli una particolare operazione o strumento Il file system è visto come uno schedario che contiene: i file di dati, rappresentati come documenti sulla scrivania; le directory, rappresentate come cartelle dentro lo schedario; i programmi applicativi (equivalenti agli strumenti che si trovano sulla scrivania, e. g. rubrica, penna, etc). Elementi grafici di base (WIMP) W - finestre: aree dello schermo che mostrano dati, programmi, icone, testo, grafica, etc. Hanno bottoni per chiusura, spostamento, ridimensionamento. Caso speciale: finestre di dialogo I - icone: una piccola immagine o un simbolo che serve come rappresentazione rapida ed intuitiva di uno strumento software, funzione o un file di dati. M - menù: lista di comandi che appare come risposta al click del mouse sul titolo del menù P - puntatore: a forma di freccia, si sposta in conformità con il movimento del mouse Vi sono poi pulsanti: una volta premuti generano azioni immediate (button), per scelte mutuamente esclusive (radio button), per selezionare opzioni (check box). La loro funzione è illustrata da una icona o da un testo controlli a scorrimento (slider): servono ad impostare un valore in un intervallo continuo. Menu: a tendina pop-up menu a cascata scorciatoie (shortcut) Funzioni standard Nuovo Apri Chiudi Salva (Salva con nome) Stampa Esci Interazione Apertura di icone: tramite selezione e doppio click col mouse, si lancia il programma o si apre un file dati associato all’icona Apertura/chiusura finestre: creazione e rimozione di una finestra Cut & paste: eliminazione (cut) e copia in un’area di memoria temporanea (clipboard) di un oggetto, da dove può essere ricopiato altrove (paste) Drag & drop: trascinamento di un oggetto da un punto ad un altro della scrivania Le differenze tra S.O. diversi sono minime: numero di click, posizione degli elementi grafici sulle finestre, etc. Strumenti per la programmazione La programmazione nel linguaggio macchina di un processore è molto difficoltosa. Occorre avere un linguaggio semplice per scrivere dei programmi applicativi che svolgano compiti anche di notevole difficoltà. Dobbiamo allora realizzare una macchina astratta (cioè che in realtà non esiste) a partire da un calcolatore elettronico, che sia in grado di eseguire i programmi scritti in un linguaggio di programmazione. I programmatori di applicazioni non scrivono programmi applicativi nel linguaggio macchina della CPU ma utilizzano un “linguaggio ad alto livello”, più facile da usare che permette di scrivere programmi in minor tempo con meno errori (presenti anche nel prodotto finale) modulari e in forma standardizzata, per facilitarne la riusabilità e la manutenzione Il programmatore “vede” il calcolatore come una macchina astratta in grado di eseguire programmi in un linguaggio evoluto Compilatori e Interpreti La macchina astratta che esegue un programma in un linguaggio ad alto livello (programma sorgente) è realizzata tramite un programma (facente parte del software di base) che traduce il programma sorgente in un programma equivalente nel linguaggio macchina del processore (codice oggetto o codice eseguibile). Il codice oggetto sarà quindi eseguito dal processore. Una macchina virtuale (che esegue programmi in un linguaggio ad alto livello L) è composta dall'hardware, dal sistema operativo, e da un programma traduttore. Linguaggi ad alto livello: C, C++, Pascal, Java, Javascript, Cobol, VisualBasic, PostScript, Lisp, ... Programma Java per il calcolo dei numeri triangolari class NumTriangolari { public static void main (String[] args) { System.out.println("inserire un intero"); int S=0, Y=0, X = IngressoDati.leggiInt(); while (Y <= X ) { S = S + Y ; Y++ ; } System.out.println(S); } } Esempio di programma Assembler ; prog. che copia i valori negativi di un vettore vet1 di numeri interi ; nel vettore vet2. I numeri sono interi a 16 bit in complemento a 2. lea vet1,A0 ; indirizzo vet1 -> A0 lea vet2,A1 ; indirizzo vet2 -> A1 move.w #4,D1 ; n. elementi vet1 -1 -> D1 ciclo: move.w (A0)+,D0 ; vet1[i] -> D0 bge salta ; se D0≥ 0 vai a salta move.w D0,(A1)+ ; D0 -> (A1) , A1+2 -> A1 salta: dbra D1, ciclo ; se ci sono altri elementi da elaborare vai a ciclo jsr stop ; fine programma vet1: dc.w 5,-3,4,-2,8 ; vettore 1 vet2: ds.w 5 ; vettore 2 end La traduzione è realizzabile in due modi diversi: compilazione: un programma, il compilatore, traduce un programma sorgente P scritto in un linguaggio L ad alto livello in un nuovo programma P’ nel linguaggio macchina del processore interpretazione: un programma, l’interprete, legge ogni istruzione del programma sorgente P, la traduce e la esegue direttamente Un linguaggio si dice interpretato se sono prevalentemente disponibili degli interpreti di tale linguaggio, altrimenti si dice compilato. Tale scelta dipende anche dalle caratteristiche del linguaggio Il tempo di esecuzione del codice oggetto prodotto dalla compilazione di un programma P è molto inferiore al tempo di esecuzione di P da parte di un interprete. Le normali applicazioni sono scritte in linguaggi compilati: e.g. C, C++. Un programma che viene modificato deve essere nuovamente compilato prima di essere eseguito un interprete è più facilmente realizzabile di un compilatore Riassumendo: la compilazione produce applicazioni più veloci, ma nello sviluppo di prototipi gli interpreti sono preferiti perché più flessibili In alcuni ambiti, la scelta di un linguaggio interpretato è però d’obbligo. Uno di questi è il web: i linguaggi di scripting (JavaScipt, Visual Basic) usati per la costruzione di siti web dinamici sono interpretati. Un browser contiene al proprio interno l’interprete del linguaggio di scripting, così, al caricamento di una pagina web, può eseguire gli script nella pagina. La scelta di introdurre il (o un riferimento al) codice compilato all’interno di una pagina non funziona, perché questo è scritto nel linguaggio macchina di un processore e non può essere eseguito da calcolatori con processori diversi. Quando siano disponibili sia un compilatore che un interprete di un linguaggio di programmazione, un programma applicativo viene sviluppato usando preferibilmente un interprete e, una volta messo a punto, viene compilato. Il codice oggetto non è facilmente modificabile e/o riutilizzabile dall’utente: e.g. non è utilizzabile per ricavare il programma sorgente. I programmi applicativi Sono programmi che forniscono funzionalità di alto livello agli utenti: elaboratori di testi fogli elettronici basi di dati programmi di grafica statistica I programmi applicativi si basano sul S.O. e sulla sua interfaccia: ogni programma funziona sul S.O. specifico per cui è stato creato bisogna farne una versione per ogni S.O. Gli utenti di un sistema informatico si suddividono in tre categorie: programmatori di sistema: realizzano i programmi applicativi utilizzando le funzioni del S.O. amministratori di sistema: gestiscono il sistema, e.g., creando account per gli utenti, stabilendo i diritti d’accesso al file system e ai dispositivi degli utenti, aggiornando il S.O., i programmi applicativi e l’hardware, effettuando il salvataggio periodico dei dati (backup) utenti applicativi: utilizzano i programmi applicativi e hanno una visione dell’intero sistema limitata ad alcune componenti del S.O. [Rielaborazione a cura di A. Fusiello degli appunti di S. Mazzanti.]
© Copyright 2024 Paperzz