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