|
Youngz |
.amico.
Registered: Mar 2009
Posts: 26 (0.00 al dì)
Location:
Corso:
Anno:
Time Online: 6:19:31 [...]
Status: Offline
Edit | Report | IP: Logged |
Qui son le mie prime risposte:
Lezione 1+2
• Cos’è un Os?
Software che, tramite l'interfaccia utente, consente l'invio di comandi al computer, e che controlla e gestisce tutto il traffico di dati all'interno del computer e fra questo e tutte le periferiche, operando anche come intermediario fra hardware e software di sistema ed i diversi programmi in esecuzione. Sono sistemi operativi il DOS, Unix, Windows '9x, Mac/OS, CP/M.I tre elementi (computer/processore/scheda madre, il sistema operativo, i software da eseguire) devono essere strettamente compatibili. All'acquisto di un programma, ad esempio, è essenziale controllare che sia compatibile con il sistema operativo installato sul nostro computer, oltre che con la sua configurazione. Un sistema operativo è composto da tre parti: l'interfaccia utente (shell), ilfile system ed il kernel.
• Come funziona, da cosa è costituito.
Il sistema operativo è costituito da un insieme di software che si differenziano in due tipologie:
API(Application Programming Interface): Software utilizzato per la astrazione dell’hardware, cioè che “nascondono” l’hardware presente nel computer per permettere un semplificato interfacciamento (alto livello) tra uomo/macchina; questo permette ai programmatori/utenti di scrivere tutte le informazioni in binario,unico codice capito dal computer, o al massimo in assebly
Kernel: Gestisce il file system,cioè il meccanismo tramite il quale i dati vengono immagazzinati nella memoria rigida
Gestione dei Device: Interfacciamento con l’hardware; legge e configura l’hardware della macchina e tenta di utilizzarli al meglio delle possibilità
• OS- Distribuito
Utilizzati nei network, vari calcolatori collegati tra loro, per ottimizzare l’utilizzo delle risorse senza incentrare tutto su un unico calcolatore visto che son dedicati a scopi differenti. Un sistema operativo distribuito deve essere in grado di gestire un gran numero di informazioni e interfacciarle con le altre macchine a seconda del loro scopo in maniera contemporanea.
Questo tipo di OS è diviso principalmente in due parti:
- Gestione del lavoro locale
- Gestione dell’interfacciamento con gli altri calcolatori
I vantaggi che si possono cogliere da questo tipo di sistema operativo son principalmente due: Affidabilità (se una macchina si guasta non crea gravi perdite visto che il lavoro è distribuito su più calcolatori) , Espansibilità (Possibilità di poter modificare l’hardware o aggiungere una nuova macchina senza dover riconfigurare tutto da capo)
• Gli OS nelle reti
Come detto sopra ci son dei sistemi operativi creati appositamente per la gestione delle reti; le funzioni principali sono:
– Gestire un file system per dati, applicazioni, profili utente e periferiche di rete
– coordinare tutte le risorse e i servizi disponibili
– elaborare le richieste degli utenti
– richiedere agli utenti le informazioni per l’accesso alla rete, convalidare gli account, applicare le limitazioni, eseguire le funzioni di gestione degli utenti
– gestire una o più stampanti di rete
– gestire l’interconnessione tra reti locali
– gestire gli utenti connessi in modalità locale e remota
– supportare la protezione del sistema
– supportare le funzioni client/server
– supportare lo sviluppo delle pagine Web e le operazioni del server Web
Il problema principale tra le risorse gestite è il server , il quale è la macchina principale (la quale deve essere molto potente) che contiene un grande file system con tutte le informazioni necessarie.
I sistemi operativi di rete maggiormente conosciuti sono:Novell NetWare, Microsoft Windows NT/2000, Unix, Linux, IBM OS/2
• Il linguaggio macchina
Il linguaggio macchina, detto anche linguaggio a basso livello, è un linguaggio di base di tutti i linguaggi ad alto livello (i linguaggi ad alto livello non fan altro che , dato un linguaggio definito con cui un programmatore scrive il programma, traduce il tutto in un linguaggio a basso livello compreso dal calcolatore) .
Il linguaggio macchina è basato su un alfabeto binario (0/1) , concatenati fra loro, formando istruzioni comprensibili alla CPU. Ogni CPU ha un proprio metodo di interpretare i bit; anche se molti parametri son uguali per tutti (ad esempio in un numero, considerando il primo bit, se è a 1 vuol dire che è negativo, se è a 0 vuol dire che è positivo) .
• Il modello di Von Neumann
Questo modello si riferisce a uno schema di progettazione di calcolatori ideati dal matematico John von Neumann, ed è anche la base per qualunque calcolatore.
Lo schema è basato su 5 principali componenti:
1 CPU o unità di lavoro che si divide a sua volta in
-Unità operativa, nella quale uno dei sottosistemi più rilevanti è l'ALU (Arithmetic Logic Unit)
-Unità di controllo
2 Unità di memoria, intesa come memoria di lavoro o memoria principale (RAM, Random Access Memory)
3 Unità di input, tramite la quale i dati vengono inseriti nel calcolatore per essere elaborati
4 Unità di output, necessaria affinché i dati elaborati possano essere restituiti all'operatore
5 Bus, un canale che collega tutti i componenti fra loro
(uno schema è presente a questo link: http://upload.wikimedia.org/wikiped...von_neumann.png )
L’ALU inoltre serve all’interfacciamento con l’I/O grazie a un meccanismo di caricamento e scrittura sulla memoria.
• I RISC Processor
Reduced Instruction Set Computer è una architettura di microprocessori dedicati all’esecuzione di operazioni molto semplici i quali hanno una velocità di esecuzione molto elevata.
Esempio al seguente url: ( http://upload.wikimedia.org/wikiped...PowerPC_G4e.png )
• I MIPS Processor
Microprocessor without Interlocked Pipeline Stages è un processore di architettura RISC utilizzato in varie console e nei sistemi embedded (sistemi dedicati) .L’architettura è semplice e lineare.
• I CISC Processor
Complex instruction set computer è un’architettura di microprocessori basata su operazioni complesse con tempi di esecuzione variabili,questi CISC permettono di colmare,almeno parzialmente, il divario tra linguaggio macchina e linguaggio ad alto livello.
• Le modalità di indirizzamento della memoria
• OS - Single Thread
• OS – Multi Thread
• Il Polling e L’Interrupt
Polling:
Il polling è la verifica ciclica di tutte le unità di input/output da parte del sistema operativo di un personal computer tramite test dei bit di stato associati ad ogni periferica, seguita da un'eventuale interazione (scrittura o lettura). Questa attività impegna molto del tempo di funzionamento del processore (CPU), rallentando di conseguenza l'intero sistema.
Il polling presenta pochi vantaggi e alcuni svantaggi.
Il vantaggio principale è quello di riuscire a gestire le periferiche sia come struttura hardware che software (cosa che non fanno le interruzioni), ma presenta degli svantaggi:
1. Potenzialmente la CPU potrebbe sprecare preziose risorse di calcolo: se, ad esempio, nessuna periferica fosse pronta al colloquio, la CPU farebbe comunque un controllo a vuoto sui bit di stato di tutte le periferiche;
2. L'intervallo tra due interrogazioni del bit di stato non è costante, ma dipende dallo stato delle periferiche;
3. Ci si può trovare in una situazione di emergenza oppure che una periferica mandi un segnale alla CPU per continuare il suo lavoro.
Interrupt
L’interrupt è una istruzione della CPU che permette di interrompere gli attuali processi in caso del verificarsi di particolari condizioni, questi condizioni possono essere di due tipi:
- Interrupt hardware generati da dispositivi esterni alla CPU, che hanno il compito di comunicare il verificarsi di eventi esterni, di solito dispositivi di Input/Output.
- Interrupt software che sono delle istruzioni assembly, tipo INT xx o SYSCALL, che possono essere assimilate alle chiamate di sottoprogrammi, ma che sfruttano il meccanismo delle interruzioni per passare il controllo dal programma chiamante a quello chiamato, e viceversa; vengono utilizzati per accedere direttamente alle risorse del sistema operativo.
Gli interrupt vengono utilizzati principalmente quando:
- un processo tenta di eseguire un'istruzione non valida, come una divisione per zero. In questi casi non è possibile proseguire con l'esecuzione del processo e l'interrupt consente di informare il sistema operativo di quanto avvenuto in modo da permettere la corretta gestione del problema.
- un processo richiede un'operazione di I/O al sistema operativo. Le CPU moderne prevedono la possibilità di utilizzare diversi livelli di privilegi che i processi in esecuzione hanno, per ragioni di sicurezza. Solo il sistema operativo può effettuare alcune operazioni, accedere ad alcune aree di memoria, gestire le periferiche.
- un dispositivo di I/O informa la CPU che è disponibile a ricevere o fornire dati. In questo caso viene avviata un'opportuna procedura del sistema operativo preposta ad occuparsi della relativa periferica. Questo tipo di interrupt necessita una gestione molto attenta, infatti è possibile che due dispositivi abbiano generato un interrupt durante l'esecuzione di un processo, ed è necessario disporre di meccanismi che evitino conflitti e la perdita di informazioni, ad esempio decidendo quale interrupt ha maggiore priorità e deve essere eseguito per primo e ponendo in coda il secondo.
- il tempo massimo a disposizione per tale processo è raggiunto e lo scheduler deve riassegnare la CPU ad un altro processo in coda.
- viene effettuato il debugging di un'applicazione. Durante la fase di sviluppo di un programma è frequente la necessità di testare il funzionamento di quanto creato per scoprire e risolvere l'origine dei malfunzionamenti. Il debugging consente di seguire l'evoluzione del programma istruzione per istruzione, dando la possibilità di interrompere il processo in qualunque momento per verificare il valore di ogni parametro. Per effettuare questo è necessario che il codice sorgente sia compilato in maniera apposita, in questo caso se il programma viene eseguito sotto il controllo di un apposito programma, il debugger, ad ogni istruzione viene eseguito un interrupt che consente di verificare se in tale punto è richiesta l'interruzione del processo.
Gestione delle interruzioni
Nel momento in cui il processore riceve una richiesta di interrupt, vi è l'esigenza di determinare quale sia il dispositivo ad averla generata. Vi sono tre sistemi principali per farlo:
- linee di interrupt multiple
- scansione degli interrupt (polling)
- vettorizzazione degli interrupt
Nelle linee di interrupt multiple ad ogni dispositivo è associato un proprio piedino per la gestione degli interrupt. Questo sistema è impraticabile per la gestione degli interrupt di numerosi dispositivi, ma può essere utilizzato in tecnologie special purpouse.
La scansione degli interrupt consiste nell'effettuare una scansione dei dispositivi, interrogando ognuno per un'eventuale conferma della richiesta di interrupt inviata. Quando il dispositivo che ha generato l'interrupt viene interrogato, invierà una conferma al processore e quest'ultimo avvierà la ISR relativa. Impostando la sequenza della scansione è possibile impostare la priorità.
La vettorizzazione fa uso di un circuito integrato detto Programmable Interrupt Controller che ha in ingresso un certo numero di linee di interrupt request (IRQ), usate dai dispositivi per richiedere un'interruzione. Quando riceve una richiesta, il PIC si occupa di inviare a sua volta una richiesta di interrupt al processore e, dopo che quest'ultimo ha confermato la richiesta (cosa che potrebbe non avvenire se gli interrupt fossero disabilitati), deposita nel bus dati l'indice del vettore di interrupt relativo alla ISR che gestisce l'interazione con il dispositivo. I vettori sono contenuti in una tabella situata ad una determinata locazione in memoria, predefinita o meno, e chiamata interrupt vector table (interrupt descriptor table per 8086 e IA-32). Ogni vettore contiene i dati che permettono al processore di determinare l'indirizzo in memoria della ISR relativa al dispositivo che ha generato l'interrupt, e di gestire quindi l'operazione di I/O richiesta.
• I sistemi dedicati – sistemi Embedded
Il sistema Embedded è un sistema dedicato a una determinata applicazione,questo sistema è formato da un microprocessore progettato ad hoc che serve a controllare particolari funzioni.
A differenza dei processori più comuni, questi processori son utilizzati per delle specifiche funzioni conosciute prima della creazione dello stesso.
Lezione 3+4
Qui ha fatto il “Mini-corso di sopravvivenza a C” questi sono giusto quelle quattro cose che mi sono scritto durante quelle lezioni.
• Dove si colloca C nella programmazione?
Il c si colloca in uno schema ad “alto livello” ,anche se non è uno di quelli più ad alto livello in quanto molte parti somigliano molto all’assembly , ed è orientato alla programmazione per sistemi operativi.
• Linguaggio ad alto o basso livello?
Il C è un linguaggio definito di Alto Livello anche se ha delle istruzioni simili al linguaggio assembly
• I puntatori in C
I puntatori son dichiarati come le variabili ma con un * prima del nome, e contengono l’indirizzo della memoria a cui puntano,ad esempio:
int a=5; (a è all’indirizzo 150)
int *punt=a(*punt conterrà 5 ma punt conterrà 150)
• Scopo di un puntatore
Il puntatore ha l’utilità di puntare a specifiche aree di memoria, in modo da poter semplificare lo scorrimento dell’array o di inserire stringhe formate da una serie di caratteri.
• I tipi di dati in C
Ci son differenti tipi di dati in c (che per altro compaiono all’incirca in tutti i linguaggi di programmazione) , i tipi interi sono int, short , long e i loro rispettivi unsigned(senza segno) ; i decimali sono float,double , long double e il tipo carattere char.
Esempi:
int a = 5;
short b = 020; (ottale)
long c = 0x10;(esadecimale)
float d = 2.145;
double e = 2.546;
char f = ‘A’;
• Le funzioni
Il C non ha procedure, solo funzioni.
In pratica, una funzione che non ritorna alcun valore di interesse (e.g. di tipo void) si comporta come una
procedura.
I programmi C sono in genere composti da molte funzioni semplici.
Esistono librerie standard di funzioni per:
•I/O (printf(), scanf(), getchar(), putchar(),fopen(), ... )
•Gestione caratteri (isalpha(), isascii(), islower(), ...)
•Gestione stringhe (strcpy(), strcmp(), strlen(),...)
•Data e ora (gmtime(), localtime(), ...)
•Calcoli matematici (sin(), cos(), ...)
•Gestione memoria (malloc(), calloc(),...)
•Chiamate di sistema (fork(), exit(),...)
•Altre amenita’...
• Struttura di un funzione
Una funzione viene dichiarata :
int somma(int a,int b){
Int c= a+b;
Return c
}
Dove vuol dire che ritorna un intero(c) e prende all’interno due interi per le proprie procedure
|