CAPITOLO I - CONCETTI PRELIMINARI

HARDWARE E SOFTWARE

Prima di affrontare le problematiche legate alla tutela giuridica del software è opportuno fornire alcune informazioni preliminari sia per chiarire concetti che, sebbene siano ormai divenuti di uso abbastanza comune, spesso vengono fraintesi o sono poco chiari, sia per fissare una terminologia che verrà utilizzata nel resto del presente lavoro.

Un sistema di elaborazione, chiamato comunemente computer o elaboratore o calcolatore, è essenzialmente costituito da due componenti: l'hardware e il software.

L'hardware costituisce la parte fisica dell'elaboratore, cioè l'insieme dei suoi componenti elettronici e meccanici. La struttura tipica di un computer prevede la presenza di un processore, una memoria e un insieme di unità periferiche. Il processore è il cuore dell'elaboratore, è la componente elettronica in grado di eseguire le istruzioni: è come il motore per un'automobile. La memoria contiene le informazioni che saranno elaborate dal processore; in particolare contiene le istruzioni che saranno eseguite dal processore (programmi) e i dati su cui lavoreranno i programmi stessi. Si possono distinguere due tipi di memoria: la memoria volatile e la memoria stabile. La memoria volatile o RAM (Random Access Memory) è in grado di contenere informazioni finché il computer è alimentato elettricamente; non appena il computer viene spento tutte le informazioni in essa contenute vengono perdute. Tuttavia le operazioni di accesso alle informazioni contenute nella RAM sono velocissime (generalmente dell'ordine dei milionesimi di secondo). La memoria stabile, detta anche memoria di massa, è in grado di contenere informazioni anche se il computer non è attivo: essa è rappresentata dai supporti magnetici di memorizzazione come i floppy disk, gli hard disk, i nastri. Mentre la memoria volatile e quella stabile sono generalmente utilizzabili sia per leggere che scrivere dati, esiste anche un tipo di memoria utilizzabile soltanto per operazioni di lettura: questo tipo di memoria è detta ROM (Read Only Memory) e di solito contiene informazioni relative all'hardware e programmi che interagiscono direttamente con l'hardware (firmware). Infine le unità periferiche o dispositivi consentono al computer di comunicare con il mondo esterno sia per ricevere dati (unità o dispositivi di input) sia per inviare i risultati delle elaborazioni (unità o dispositivi di output). Esempi di dispositivi di input sono la tastiera, il mouse, lo scanner, mentre esempi di dispositivi di output sono il monitor, la stampante, il plotter. Esistono anche dispositivi di input/output, cioè che consentono al computer sia di ricevere dati che di inviarli all'esterno, come ad esempio il modem.

L'hardware di un sistema di elaborazione non è tuttavia in grado di risolvere alcun problema di per sé. Possiamo dire che esso è soltanto potenzialmente un risolutore di problemi di vario tipo.

Per poter essere operativo l'hardware ha bisogno del software, cioè dei programmi: insieme di istruzioni la cui esecuzione da parte dell'elaboratore consente di ottenere dei risultati a partire da dati di input. Il software, al contrario dell'hardware, è un componente astratto, non tangibile, ma che rende attivo l'elaboratore consentendogli di svolgere determinati compiti. Il tipo di compito che il calcolatore può svolgere dipende dal particolare software. Si possono distinguere due grandi categorie di software: il software di base e il software applicativo.

Il software di base è costituito dall'insieme di quei programmi il cui scopo è quello di rendere operativo il computer, cioè di metterlo in grado di eseguire programmi per risolvere i problemi dell'utente. Tipici esempi di software di base sono i sistemi operativi, insieme di programmi che gestiscono l'hardware e forniscono un supporto per l'esecuzione di programmi che risolvono particolari problemi dell'utente. Il software di base è strettamente legato alle caratteristiche dell'hardware di ciascun computer per cui non è necessario che l'utente ne conosca i dettagli tecnici. Tra i sistemi operativi più diffusi ricordiamo il DOS, Unix, Windows, OS/2.

Il software applicativo è costituito dall'insieme dei programmi che risolvono determinati problemi dell'utente. Esempi di software applicativi sono i programmi di contabilità, i programmi di videoscrittura, i programmi di elaborazione grafica, ecc. E' essenziale che il software applicativo interagisca con il software di base per poter funzionare. Esso inoltre può essere suddiviso in software personalizzato, cioè realizzato appositamente in base alle richieste di un singolo utente, e software standard o package, cioè software realizzato per risolvere una gamma di problemi abbastanza comuni e pertanto diretto a più utenti.

Sia il software di base che il software applicativo per poter essere eseguito deve essere caricato nella RAM. Generalmente sia i dati che i programmi sono contenuti in strutture logiche chiamate file o archivi e memorizzati su supporti di memoria di massa (hard disk, floppy disk, nastri magnetici) in modo che le relative informazioni non si perdano quando il computer è spento. All'accensione del computer il sistema operativo viene caricato dal supporto di memoria di massa, su cui si trova, nella RAM, rendendolo pronto per l'esecuzione dei programmi applicativi. Un programma applicativo deve essere anch'esso caricato in RAM per poter essere eseguito. L'esecuzione di un programma consiste nella esecuzione da parte del processore di ciascuna delle istruzioni che compongono il programma stesso.

Come abbiamo detto, un programma è un insieme di istruzioni che, eseguite dal processore di un elaboratore, risolve un determinato problema. Tuttavia le istruzioni devono essere espresse in forma tale da essere "comprese" dal calcolatore. L'insieme dei simboli e delle regole che consentono di esprimere le istruzioni destinate ad un calcolatore è detto linguaggio di programmazione. Il calcolatore, come macchina elettronica digitale, è in grado di interpretare soltanto sequenze di stati di tensione elettrica, codificati generalmente con 0 e 1 (bit). Il linguaggio di programmazione che esprime le istruzioni impartite ad un calcolatore tramite sequenze di bit è detto linguaggio macchina ed è l'unico linguaggio riconosciuto dal calcolatore. L'attività di programmazione di un calcolatore, cioè quell'attività che mette in grado un calcolatore di risolvere un determinato problema, è schematicamente riconducibile all'individuazione di un metodo per risolvere il problema e la traduzione del metodo in una forma comprensibile al computer, cioè la traduzione in linguaggio macchina.

Il metodo astratto per risolvere un determinato problema è detto algoritmo; la traduzione dell'algoritmo in un linguaggio di programmazione dà origine al programma. Per chiarire meglio la distinzione tra algoritmo e programma, possiamo considerare il caso in cui il problema è costituito dal calcolo dell'area di un triangolo: l'algoritmo per risolvere tale problema stabilisce che occorre moltiplicare la misura della base del triangolo per la relativa altezza e dividere il risultato per due; un programma derivato da questo algoritmo è la descrizione di questi calcoli in un linguaggio di programmazione. Si noti che dato un algoritmo possono esistere diversi programmi da esso derivati, in quanto diversi sono i linguaggi di programmazione esistenti e diversi sono i modi di esprimere uno stesso algoritmo con un dato linguaggio di programmazione.

Tuttavia, la programmazione in linguaggio macchina non è certamente agevole per un essere umano. Nel corso della storia dell'informatica si è cercato di realizzare strumenti che consentissero al programmatore di esprimere l'algoritmo in modo più agevole e sempre più vicino al linguaggio umano. Questi strumenti sono i linguaggi di programmazione di alto livello, come il FORTRAN, il BASIC, il COBOL, il Pascal, ecc. Questi linguaggi artificiali hanno costrutti molto simili alla lingua inglese e rendono l'attività di programmazione meno ostica rispetto alla codifica in linguaggio macchina. Il compito di tradurre un programma espresso in un linguaggio ad alto livello in linguaggio macchina è demandato a programmi speciali (interpreti, compilatori). La presenza di questi strumenti software pone un programma sotto due forme: il programma sorgente, cioè il programma espresso in un linguaggio ad alto livello, e il programma oggetto o eseguibile, cioè il programma espresso in linguaggio macchina.


[ Indice | Introduzione | Capitolo I - Necessità di una appropriata tutela per il software... ]