Linguaggio macchina
Ogni processore ha un proprio linguaggio macchina, prenderemo in esempio l’ INTEL 8086.
TIPO DI INFORMAZIONE
decodifica
numero
RAPPRESENTAZIONE
INTERNA
ESTERNA
conversione
binaria
codifica
conversione
decodifica
istruzione del
linguaggio macchina
decimale
assemblaggio
codice
macchina
codifica
descrizione
simbolica
disassemblaggio
Convenzioni sintattiche:
cost
cost
cost
cost
cost
M
Valore costante in notazione esadecimale, ed è un’indirizzo di locazione che può essere
fino a quattro cifre.
C0
C0 C1
C0 C1 C2
C0 C1 C2 C3
Cost = C0 | C0 C1 | C0 C1 C2 | C0 C1 C2 C3 =
= ( FFFF )16 = 65535
Locazione di memoria di 8 o 16 Bit.
M8 = BYTE [const] | [const]
M16 = WORD [const] | [const]
R
M = M8 | M16
Registri generali di 8 o 16 Bit.
R8 = AL | AH | BL | BH | CL | CH | DL | DH
R16 = AX | BX | CX | DX | SP | BP | DI | DI
AX = AL + AH
BX = BL + BH
CX = CL + CH
DX = DL + DH
R = R8 | R16
Sintassi delle istruzioni:
A due operandi:
nome dest, sorg
nome mnemonico
dell’istruzione
operando di
destinazione
operando
sorgente
I due operandi devono avere la stessa lunghezza, inoltre non possono rappresentare
contemporaneamente locazioni di memoria.
ISTRUZIONI
Istruzione MOVE:
Nome mnemonico = MOV
[| RS: |] MOV dest, sorg
Le coppie dei operandi possono essere: R,R | R,M | M,R | R,const | M, const | M,RS | RS,M
Operazioni: copiare nell’ operando di destinazione il valore dell’ operando sorgente.
Effetti: non modifica i flag.
Istruzione MOVE STRING BYTE:
Nome mnemonico = MOVSB
[| REP: |] MOVSB
Operazioni: copia il Byte di indirizzo Byte[ DS : SI ] alla locazione Byte[ ES : DI ].
Se compre l’istruzione Rep ripete l’istruzione copiando i seguenti Byte tanti quanti è il
numero in CX ( alla fine varrà 0 ).
Se si usa l’istruzione Rep bisogna tenere conto del flag Direction: se l’indirizzo fisico
iniziale del sorgente è maggiore di quello della destinazione il flag deve valere 0,
mentre per il caso opposto deve valere 1.
Effetti: non modifica i flag.
Istruzione MOVE STRING WORD:
Nome mnemonico = MOVSW
[| REP: |] MOVSW
Operazioni: compie le stesse operazione di Move String Byte, ma copia un word invece di un byte.
Effetti: non modifica i flag.
ISTRUZIONI ARITMETICHE:
Istruzione ADD:
Nome mnemonico = ADD
ADD dest, sorg
Operazioni: eseguire la somma binaria del contenuto dei 2 operandi, copiando il risultato nell’
operando destinazione.
dest = dest + sorg
Effetti: modifica i flag OF, SF, ZF, CF.
Istruzione ADD WITH CARRY :
Nome mnemonico = ADC
ADC dest, sorg
Operazioni: eseguire la somma binaria del contenuto dei 2 operandi ed il CF, copiando il risultato
nell’ operando destinazione.
dest = dest + sorg + CF
Effetti: modifica i flag OF, SF, ZF, CF.
Istruzione SUBTRACK:
Nome mnemonico = SUB
SUB dest, sorg
Operazioni: eseguire la sottrazione binaria del contenuto dei 2 operandi, copiando il risultato nell’
operando destinazione.
dest = dest - sorg
Effetti: modifica i flag OF, SF, ZF, CF.
Istruzione SUBTRACK WITH BORROW:
Nome mnemonico = SBB
SBB dest, sorg
Operazioni: eseguire la sottrazione binaria del contenuto dei 2 operandi, copiando il risultato nell’
operando destinazione.
dest = dest - sorg - CF
Effetti: modifica i flag OF, SF, ZF, CF.
Istruzione COMPARE:
Nome mnemonico = CMP
CMP dest, sorg
Operazioni: eseguire la sottrazione binaria del contenuto dei 2 operandi, senza copiare il risultato
nell’ operando destinazione.
dest - sorg
Effetti: modifica i flag OF, SF, ZF, CF.
ISTRUZIONI LOGICHE:
Istruzione AND:
Nome mnemonico = AND
AND dest, sorg
Operazioni: copia nell’operando di destinazione il prodotto logico Bit a Bit tra il contenuto
dell’operando sorgente e l’ operando destinazione.
Effetti: modifica i flag SF, ZF.
A
0
0
1
1
B
0
1
0
1
Prodotto
0
0
0
1
Istruzione OR:
Nome mnemonico = OR
OR dest, sorg
Operazioni: copia nell’operando di destinazione la somma logica Bit a Bit tra il contenuto
dell’operando sorgente e l’ operando destinazione.
Effetti: modifica i flag SF, ZF.
A
0
0
1
1
B
0
1
0
1
Somma
0
1
1
1
Istruzione EXCLUSIVE OR:
Nome mnemonico = XOR
XOR dest, sorg
Operazioni: copia nell’operando di destinazione la somma esclusiva Bit a Bit tra il contenuto
dell’operando sorgente e l’ operando destinazione.
Effetti: modifica i flag SF, ZF.
A
0
0
1
1
B
0
1
0
1
Somma
0
1
1
0
Istruzione TEST:
Nome mnemonico = TEST
TEST dest, sorg
Operazioni: fa al somma logica Bit a Bit tra il contenuto dell’operando sorgente e l’ operando
destinazione, senza copiare il risultato nell’operando di destinazione.
Effetti: modifica i flag SF, ZF.
ISTRUZIONI ARITMETICO / LOGICHE AD UN OPERANDO:
Istruzione INCREMENT:
Nome mnemonico = INC
INC dest
Operazioni: somma all’ operando destinazione un Bit alto.
dest = dest + 1
Effetti: modifica i flag OF, SF, ZF.
Istruzione DECREMENT:
Nome mnemonico = DEC
DEC dest
Operazioni: sottrae all’ operando destinazione un Bit alto.
dest = dest -1
Effetti: modifica i flag OF, SF, ZF.
Istruzione NEGATE:
Nome mnemonico = NEG
NEG dest
Operazioni: fa il complemento a 2 dell’ operando di destinazione.
dest = - dest
Effetti: modifica i flag OF, SF, ZF, CF.
Istruzione NOT:
Nome mnemonico = NOT
NOT dest
Operazioni: complementa Bit a Bit l’ operando di destinazione.
dest = - dest + 1
Effetti: modifica i flag OF, SF, ZF, CF.
ISTRUZIONI ARITMETICO / LOGICHE SENZA OPERANDI:
Istruzione CLEAR CARRY:
Nome mnemonico = CLC
Operazioni:
Effetti: modifica il flag CF portandolo uguale a 0.
Istruzione SET CARRY:
Nome mnemonico = STC
Operazioni:
Effetti: modifica il flag CF portandolo uguale a 1.
Istruzione COMPLEMENT CARRY:
Nome mnemonico = NOT
Operazioni:
Effetti: modifica il flag CF complementandolo.
Istruzione CLEAR DIRECTION:
Nome mnemonico = CLD
Operazioni:
Effetti: modifica il flag DF portandolo uguale a 0.
Istruzione SET DIRECTION:
Nome mnemonico = STD
Operazioni:
Effetti: modifica il flag DF portandolo uguale a 1.
ISTRUZIONI DI SALTO:
Operazione comune: data un a condizione se risulta vera copia il calore della const nel Reg16 IP
Sintassi:
nome dest
dest = indirizzamento a una locazione di memoria
Istruzione:
Jump on overflow
Jump if not overflow
Jump on sign
Jump if not sign
Jump on zero
Jump if not zero
Jump on carry
Jump if not carry
Jump
Nome:
JO
JNO
JS
JNS
JZ
JNZ
JC
JNC
JMP
Condizione di salto:
OF = 1
OF = 0
SF = 1
SF = 0
ZF = 1
ZF = 0
CF = 1
CF = 0
sempre vera
Le istruzioni di salto condizionato possono saltare a una locazione massima da dove sono dichiarati
di 128 Byte.
Istruzione JUMP FAR:
Nome mnemonico = JMP FAR
JMP FAR segment : offset
Operazioni: medesima operazione di Jump ma oltre a cambiare il contenuto del Reg IP assegna la
parte segment a CS.
ISTRUZIONI DI SCORRRIMANTO E ROTAZIONE:
Caratteri generali: sintassi
nome dest, cnt
dest = R | BYTE M | WORD M
cnt ( conteggio ) = 1 | CL
Istruzione SHIFT LEFT e SHIFT ARITMETIC LEFT:
Nome mnemonico = SHL e SAL
Operazioni: entrambe le istruzioni traslano il contenuto dell’ operando di destinazione verso sinistra
di cnt posizioni, il meno significativo viene inserito 0.
dest = dest * 2cnt
Effetti: modifica i flag OF, ZF, SF, CF.
Istruzione SHIFT RIGHT:
Nome mnemonico = SHR
Operazioni: trasla il contenuto dell’ operando di destinazione verso destra di cnt posizioni
spostando il bit meno significativo nel CF e il più significativo aggiunge 0.
dest = dest / 2cnt
Effetti: modifica i flag OF, ZF, SF, CF.
Istruzione SHIFT ARITMETIC RIGHT:
Nome mnemonico = SAR
Operazioni: copia il contenuto dell’ operando di destinazione verso destra di cnt posizioni
spostando il bit meno significativo nel CF e mantenendo il Bit più significativo
invariato.
Effetti: modifica i flag OF, ZF, SF, CF.
Organizzazione della memoria:
Program segment prefix
Per le informazioni del sistema operativo
(MS-DOS).
( 0000 )16 :
256 Byte
( 0100 )16 :
Codice delle
istruzioni e dei dati
Area libera
Reg SP :
Stack del
programma
( FFFF )16 :
Lo Stack è una particolare struttura dati in cui il programma può accedervi attraverso particolari
istruzioni con la tecnica LIFO ( last in first out ).
IN
OUT
Reg SP :
( FFFF )16 :
ISTRUZIONI DI MANIPOLAZIONE DELLO STACK:
Istruzione PUSH:
Nome mnemonico = PUSH
PUSH sorg
sorg = R16 | M16 | [| WORD|] M | RS
Operazioni: SP viene decrementato di 2 e l’operando sorgente viene copiato nella locazione a cui
punta SP.
Istruzione PUSH FLAGS:
Nome mnemonico = PUSHF
Operazioni: compie le stesse operazioni dell’istruzione Push ma il sorg è sottinteso ed è il Reg dei
flag.
Stack overflow : avviene quando il PUSH riempie completamente l’area libera e salta alla
locazione dove aveva incominciato a scrivere a a sovrascrive l’area del SS.
Istruzione POP:
Nome mnemonico = POP
POP dest
dest = R16 | M16 | [| WORD |] M | RS
Operazioni: copia il contenuto della locazione di memoria Word [ SS : SP ] nell’operando
destinazione e SP viene incrementato di 2.
ISTRUZIONI DI CHIAMATA E DI RIENTRO DA UNA PROCEDURA:
Istruzione CALL:
Nome mnemonico = CALL
CALL dest
dest = vedi istruzioni di salto
Operazioni: SP viene decrementato di 2, il WORD a cui punta SP viene copiato il valore di IP ( per
il rientro ), infine il Reg IP è uguale a dest.
Come le istruzioni di salto condizionato possono saltare a procedure entro i 128
Byte.
Istruzione CALL FAR:
Nome mnemonico = CALL FAR
CALL FAR segment : offset
Operazioni: Come l’istruzioni Call ma può richiamare procedure da altri segment e salva nello
Stack sia l’indirizzo del IP e del CS.
Istruzione RETURN:
Nome mnemonico = RET
Operazioni: il Reg IP è uguale a alla locazione di memoria a cui punta SP, e poi SP viene
decrementato di 2.
Istruzione RETURN FAR:
Nome mnemonico = RETF
Operazioni: è il corrispondente dell’istruzione Call Far .
SISTEMI OPERATIVI
Un sistema operativo è un insieme di programmi di un sistema di elaborazione e si divide in
software di sistema e software applicativi.
I software applicativi sono l’insieme di tutti i programmi che svolgono tutte le operazioni per la
gestione del sistema,mentre software di sistema i programmi aggiuntivi richiesti dell’utente.
Oltre a questi ultimi due ci sono i software di base che si riferisce ai programmi presenti nel
calcolatore al momento dell’acquisto.
Un sistema operativo esegue:
1- Gestire le risorse: hardware e software;
2- Permette ai programmi applicativi e di sistema di utilizzare le risorse del sistema di
elaborazione in modo semplice, efficiente ed affidabile.
Schema di un sistema operativo:
HARDWARE
LINGUAGGIO MACCHINA
SISTEMA OPERATIVO*
SOFTWARE DI SISTEMA E APPLICATIVO
INTERFACCIA UTENTE
L’OS aggiunge al set del linguaggio macchina anche altre istruzioni ed è chiamato LINGUAGGIO
MACCHINA ESTESO.
Accesso al OS:
- Interattivo: l’utente richiede, forma l’esecuzione di un programma;
- Batch: l’utente dispone di comandi da inserire chiamati batch scritti in linguaggio JCL (Job
Control Language o linguaggio dei comandi); questo metodo di comunicazione e usato per i
supercomputer per rendere stabile il sistema;
CLASSIFICAZIONE DEI SISTEMI DI ELABORAZIONE
1° CENTRALIZZATO:
E’ composto da una sola unità centrale di
elaborazione.
1.1 Personal Computer – sono sistemi ai quali
può accedere solo un utente alla volta:
1.1.1
Palmari;
1.1.2
Portatili;
1.1.3
Desk-top;
1.1.4
Work-station;
1.2 Mini Computer – i terminali sono minori
di 10 e altrettanti utenti;
1.3 Mainframe Computer – più utenti e più
utenti;
1.4 Super Computer – usati per applicazioni
scientifiche o ricerca avanzata con
modalità BATCH
2° DISTRIBUITO:
Possiede più unità di elaborazione.
2.1 Muti Computer – la distanza massima tra
due unità centrali è di
qualche metro in un solo
contenitore, utilizzati per
calcoli paralleli;
2.2 Reti di calcolatori: le unità centrali
distano più di un metro
Tipo
Locale
Metropolitane
Geografiche
Distanza
< 1 Km
< 10 Km
> 10 Km
2.3 Reti di Reti di calcolatori: inter-rete, cioè
reti di sottoreti
ERE DELL’INFORMATICA
1985
1945
era dei grossi sistemi centralizzati
vale la legge di Grosh
era dei sistemi distribuiti
Legge di Grosh:
La potenza di calcolo era proporzionale al costo dell’elaboratore.
P = k C2
P - potenza di calcolo;
k - costante;
C - costo.
Storia dell’informatica dal 1945 al 1985 sull’evoluzione dei sistemi centralizzati
Generazione
Periodo
Tecnologia
dell’U.C.
1°
’45 – ‘55
Valvole
termoioniche
2°
’45 – ‘55
Transistor
Unità
periferiche
Lettori e
perforatori di
schede o nastri
di carta e
stampanti
Calcolo
numerico
Unità a nastro
magnetico,
primi monitor
simili a TV
Applicazioni
/
4°
’45 – ‘55
Circuiti
integrati
(LSI / VLSI)
Evoluzione
delle unità a
disco
Scientifico
Militare
Gestionale
Nascita dei
computer
O.S.
3°
’45 – ‘55
Circuiti
integrati
(SSI / MSI)
Unità a disco
Batch
Supercomputer Microcomputer
Mainframe
(PC)
minicomputer
Batch/interattivi
Interattivi
Batch per
supercomputer
CTSS (Compatible Time Sharing System) – primo O.S. creato al MIT.
|--- > MULTIX ---- > UNIX
Categorie di O.S. centralizzati:
- Batch (o al lotti): per applicazioni non interattive, servono per avare un uso intensivo dell’unita
centrale; tuttora usati nei supercomputer, dove ci possono accedere solo gli
operatori e non gli utenti per avere il minimo rischio di crash del O.S.;
- Interattivi monoutenti: sono usati nei PC, supportano solo un utente alla volta (nascita ‘70);
- Interattivi multiutente: supportano più utenti, per i microcomputer (dagl’anni ‘60), eseguono la
multiprogrammazione (time - sharing);
- Transazionali: usati per effettuare un gran numero di transizione di dati, usati per sistemi
operativi aziendali;
- Real time: usati per il controllo automatico di processi trasformazione industriale (uso di sensori,
per acquisire dati e attuatori per effettuare degli output usando i PLC per
l’elaborazione in tempo reale);
- Di uso generale: usati per avere le prestazioni di tutti gl’altri tipi di O.S. appena descritti, sono
usati sui mainframe computer;
Architettura del O.S.:
Architettura Monolitica:
Architettura Modulare:
Risorse di un sistema di elaborazione
Una risorsa di un sistema di elaborazione si intende ogni componete di tipo hardware e software
che un sistema ha a propria disposizione per eseguire i programmi.
Tipi di risorse:
Hardware
- Processore;
- Memoria centrale(locazioni di memoria);
- Dispositivi I/O.
Software
- Dati;
- Programmi sistema e di applicativi
Processi
Per processo si intende l’attività di esecuzione di un programma all’interno di un sistema di
elaborazione.
Per i O.S. multiprogrammazione tutti i programmi da eseguire vengono caricati in memoria centrale
assieme al O.S.. Attraverso il timer di sistema (interruzione INT 8) il programma in corso vengono
salvati tutti i registri, viene interrotto e richiamato l’O.S., a sua volta richiama il programma
successivo ripristinando i registri se fosse già stato interrotto, e via cosi.
Over Head: è il valor medio del rapporto tra la quantità di tempo impiegato per eseguire i
programmi degli utenti ed il tempo di elaborazione complessivo.
L’O.S. po’ far eseguire più processi su uno stesso programma senza caricarlo in memoria più di una
volta, ciascun processo diventerà indipendente e sarà indipendente dagl’altri.
Il programma sarà tolto dalla memoria quando non ci saranno processi che lo usano.
Servizi per le gestioni dei processi offerti dall’O.S.:
- Creazione di un processo;
- Terminazione di un processo, da parte del programma;
- Distruzione di un processo da parte di processo padre;
- Attesa di terminazione, per la chiusura del processo.
Blocco di descrizione di un processo(P.C.B.):
Un blocco contiene tutte le informazioni di un processo e ne esistono tanti P.C.B. tanti quanti sono i
processi “attivi”.
Il P.C.B. contiene:
- Codice d’identificazione;
- Codice d’identificazione del processo padre;
- Codice d’identificazione dell’utente;
- Stato di avanzamento(ready, running e blocked );
- Valore dei registri quando il processo è bloccato o interrotto;
- Aree allocate per il processo;
- Informazioni su tutte le altre risorse allocate per il processo (file aperti, stampanti…).
Le tecniche di schedulazione:
1. Schedulazione senza rilascio(Not Preemptive), FIFO o FCFS ( First Come First Serve ):
Il processore esegue un programma alla volta(es. MS-DOS).
Effetti collaterali: il sistema operativo non può svolgere più programmi contemporaneamente.
2. Round Robin:
Viene introdotto il Time Slice (o quanto di tempo) e con questo l’ O.S. permette la
multiprogrammazione. Introduzione del time slice
Effetti collaterali: i processi che prediligono l’uso del processore rallentano l’effetto del
simultaneità dei programmi, mentre i programmi che prediligono l’uso delle
interfacce di I/O intasano la coda dei descrittori dei processi bloccati.
3. A classi di priorità:
Il sistema operativo permette di gestire processi con differenti priorità, secondo la necessità (es.
Windows 98 o sup.).
Livello di priorità
0
1
2
3
Categoria di processi
Processi di sistema
(server)
Interattivi
I/O Bound
CPU Bound
Multitheard:
All’interno di un processo ci può essere l’esecuzione di più punti di esecuzione all’interno dello
stesso processo.
Risorse di un processo:
- Descrittore del processo;
- File aperti;
- Risorse hardware usate;
- Segmento di codice del programma;
- Segmento dei dati;
Per ogni theard:
- Descrittore del theard;
- Segmento dello stack.
Stato di avanzamento di un thread:
I thread, al contrario dei processi hanno aree di memoria in comune e non sono in competizione per
l’uso del processore.
Tecniche di programmazione:
1. A livello di O.S.: il sistema operativo organizza i vari thread del programma, non è
efficiente, usato da Solaris Windows 95 o sup.
2. A livello di utente: la schedulazione dei thread è gestita dal compilatore, l’efficienza
dipende dal metodo di schedulazione del compilatore.
Problemi del multithreading:
Le Corse critiche sono funzioni che se sono interrotti in certi punti possono dare anomalie nei
sistemi programmazione multiprogrammato. Avvengono quando si accedono ad una risorsa comune
contemporaneamente da parte di due o più thread.
Tecniche hardware per evitare i problemi di multithreading:
Istruzione EXCANGE:
Nome mnemonico = XCHG
XCHG dest,sorg ( = Reg, Reg | Mem, Reg | Reg, Mem )
Operazione: scambia i due operandi.
Istruzione LOCK:
Nome mnemonico = LOCK
XCHG Istruzione
Operazione: obbliga il processore a eseguire l’istruzione successiva senza che sia interrotta da
interruzioni o da altre unità centrali