Linux Native Boot Process

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Linux Native Boot Process"

Transcript

1 by Salvatore D'Angelo Table of contents 1 Introduzione Alcuni concetti di base: modalità reale e protetta Software di test Boot process step 0: stampa di un messaggio di boot Boot Process step 1: copia del boot sector in 0x9000: Boot Process step 2: definizione dello spazio per lo stack Boot Process step 3: stop del motore del floppy Boot Process step 4: caricamento del codice di setup Boot Process step 5: routine di debug e stampa del messaggio Loading system Boot Process step 6: jump al codice di setup Boot Process step 7: caricamento del kernel in memoria Boot Process step 8: spostiamo il kernel all'indirizzo 0x0100: Boot Process step 9: stampiamo un semplice messaggio di setup Boot Process step 10: setting up global e interrupt descriptor tables Boot Process step 11: abilita linea A Boot Process step 12: reset coprocessore Boot Process step 13: PIC programming Boot Process step 14: switch alla modalità protetta Boot Process step 15: jump al codice kernel Boot process step 16: build immagine del kernel Conclusioni Download source code Bibliografia...25 Copyright 2004 The Open Community Group. All rights reserved.

2 1. Introduzione Questo articolo introduce il processo di boot adottato da Linux su architetture Intel. Esso guiderà il lettore, step by step, nella creazione di un floppy di boot capace di avviare una immagine di kernel che, nel nostro caso, sarà una semplice funzione C che stampa il messaggio "Hello Kernel". Gli esempi riportati in questo articolo sono prevalentemente scritte in linguaggio assembly e C, per cui è prerequisita la loro conoscenza. Poichè andremo a lavorare direttamente con l'hardware del PC, verranno illustrati anche i concetti base della gestione della memoria nei processori i386 (e superiori), il funzionamento dei chips PIC 8259 e del keyboard controller Poichè l'obiettivo di questo articolo è prevalentemente didattico, il processo di boot sarà spiegato in una forma semplificata rispetto alle versioni di Linux 2.4, diciamo che come riferimento sono state prese le prime versioni di Linux molto più semplici da comprendere. Il lettore una volta compresi i concetti base potrà provare ad estendere le funzionalità del suo boot loader. 2. Alcuni concetti di base: modalità reale e protetta Un microprocessore a 32 bit della famiglia i386 (o superiori) ha due modalità di funzionamento: reale e protetta. La prima fu introdotta per mantenere la compatibilità con le applicazioni che giravano sui vecchi processori a 16 bit i86/i286. Nella seconda modalità, invece, il microprocessore lavora pienamente a 32 bit e supporta un set di istruzioni molto più ampio. In modalità reale sono disponibili 20 linee di indirizzamento che consentono di indirizzare fino a 1 Mb. Ogni singolo byte della memoria viene indirizzato attraverso una coppia di puntatori SEGMENTO:OFFSET ciascuno a 16 bit. Questa coppia di puntatori vengono combinati dal processore in un particolare registro interno di 20 bit, ottenendo di conseguenza l'indirizzo lineare del byte da indirizzare in memoria. Per poter indirizzare la memoria sono disponibili alcuni registri elencati qui di seguito. CS: punta al segmento codice da eseguire. Questo registro in combinazione con il registro IP punta alla prossima istruzione da eseguire. Entrambi i registri sono modificabili solo attraverso istruzioni di jump e di chiamate a procedure. DS: punta al segmento dati. Spesso durante operazioni di copia di blocchi di dati, questo registro viene utilizzato in coppia con il registro SI (source index) per indicare la cella di partenza dei dati sorgente. ES: extra segment. Registro di segmento ausiliario, spesso utilizzato in coppia con il registro DI (destination index) durante la copia di blocchi di memoria per denotare la cella di partenza dei dati destinazione. SS: punta allo stack segment. Lo stack viene utilizzato per il salvataggio dei registri. I moderni compilatori utilizzano lo stack per salvare i parametri passati a una procedura. In genere questo registro viene utilizzato in coppia con il registro SP per puntare al top dello stack. Oltre a questi registri il processore i386 utilizza i seguenti registri general purpose: AX, BX, CX e DX. Per ognuno di questi registri a 16 bit è possibile accedere agli 8 bit più significativi o meno significativi attraverso i registri a 8 bit: AH-AL, BH-BL, CH-CL e DH-DL. Ad esempio se AH=0x10 e AL=0x10 allora AX=0x1010. Ipotizziamo di avere la coppia DS:SI con i seguenti valori, DS=8000h e SI=8F00h, allora per ottenere l'indirizzo lineare a cui la coppia di registri punta, basta operare in questo modo. Si moltiplica DS per 10h e si somma poi l'offset: 80000h+8F00h = 88F00h. Spiegata questa semplice modalità di indirizzamento, andiamo ad osservare come si presenta il primo Mb di memoria dopo l'accensione. La coppia di registri CS:IP punta all'indirizzo F000h:FFF0h, che è anche l'entry point del BIOS. Quest'indirizzo di conseguenza contiene un'istruzione di JUMP al codice effettivo del BIOS. Page 2

3 Il BIOS (Basic Input Output System) non è altro che un insieme di routine software che fornisce il supporto per gestire le periferiche del computer. Oltre a fornire questa interfaccia, il compito del BIOS è quello di verificare il corretto funzionamento dei dispositivi hardware essenziali in un computer, e di segnalare eventuali errori all'utente. Una volta che il diagnostico di sistema termina, viene invocato l'interrupt software 19h, meglio conosciuto come interrupt di boot-strap. Compito di questo interrupt è quello di caricare dai dispositivi di memoria di massa il codice di boot e stampare un messaggio di errore se questo non viene trovato. In modalità protetta il processore i386 (o superiori) hanno piene funzionalità a 32 bit, tuttavia il modo in cui vengono gestite le cose cambia completamente. Per comprendere le potenzialità di un processore i386 in modalità protetta, si consideri la seguente frase estratta da [1]. "L'80386 è un potente microprocessore a 32 bit ottimizzato per i sistemi operativi multitasking e progettato per applicazioni che necessitano di prestazioni molto elevate. Il processore può indirizzare fino a 4 Gb di memoria fisica e 64 Tb (246 bytes) di memoria virtuale. I mezzi di gestione della memoria onchip comprendono i registri per la conversione dell'indirizzo, un avanzato hardware multitasking, un meccanismo di protezione e il sistema di paginazione della memoria virtuale. Speciali registri di debugging forniscono breakpoint di dati e di codice perfino nel software basato su ROM". Queste poche righe dovrebbero dare un idea delle novità introdotte da questi tipi di microprocessori. Il nuovo processore è dotato di un set di registri general purpose chiamati EAX, EBX, ECX, EDX, EBP, ESP, ESI, EDI che sono la versione a 32 dei noti registri a 16 bit AX, BX, CX, DX, BP, SP, SI, DI. Infatti è possibile accedere ai primi 16 bit del registro semplicemente usando il vecchio nome e così via anche per le due diverse parti a 8 bit. Tra i registri messi a disposizione dal microprocessore, ci sono quelli di segmento che sono sempre CS, DS, ES, SS a cui si aggiungono FS e GS. In modalità protetta questi registri conterranno il selettore di un determinato indirizzo logico. Più avanti introdurremo il concetto di indirizzo logico e di selettore. Per ora ci basta tener presente che SS e ESP conterranno il valore dello stack pointer, mentre CS e EIP conterranno il valore del program counter. Ci sono poi alcuni registri flags e altri utilizzati nella gestione della memoria tra cui figurano: GDTR, Global Descriptor Table Register; LDTR, Local Descriptor Table Register; IDTR, Interrupt Descriptor Table Register; TR, Task Register. Esistono poi dei registri di controllo come CR0, CR2 e CR3. CR0 contiene i flags di controllo del sistema, che controllano o indicano le condizioni applicabili al sistema nel suo complesso e non ad un singolo task. Il registro CR2 viene impiegato per gestire gli errori di pagina qualora vengano utilizzate tabelle di pagine per convertire gli indirizzi. Il registro CR3 consente al processore di individuare l'elenco di tabelle di pagine per il task corrente. Infine ci sono registri di test e debugging che però non prenderemo in considerazione in questa sede. Ora concentriamo la nostra attenzione su come venga gestita la memoria in modalità protetta. In questa modalità di funzionamento un indirizzo è costituito da una coppia (selettore, offset) detto indirizzo logico. La Fig. 1 riporta il formato di un selettore. E' possibile notare un indice di 13 bit che identifica una entry in una GDT o LDT. C'è poi un Table Indicator (TI) che indica se l'indice fa riferimento a una GDT (TI=0) o LDT (TI=1), (quest'ultima non è presa in considerazione in questo articolo). Infine, ci sono due bits che rappresentano il Requestor Privilege Level (RPL) che in Linux può essere 0 (kernel mode) o 3 (user mode). Page 3

4 Selector Il registro GDTR contiene il base address della GDT, per cui sommando il suo contenuto con quello del selettore moltiplicato per 8 (visto che ogni entry occupa 8 bytes) si ottiene una entry nella GDT che contiene un descrittore di segmento il cui formato è riportato in Fig. 3. Questo descrittore contiene il base address di un segmento nell'area di indirizzamento lineare che, sommato all'offset dell'indirizzo logico ci restituisce un indirizzo lineare, come mostra la Fig. 2. Global Descriptor Table Osservando la Fig. 3 si può constatare che il descrittore è composto da un certo numero di campi di cui diamo una descrizione solo per quelli che ci interessano ai fini del nostro articolo. - LIMIT I due campi Limit 0-15 e Limit costituiscono il limite del segmento. Il limite indica la dimensione del segmento. Concatenando i due campi contenuti nel descrittore otteniamo un indirizzo a 20 bit. Questo indirizzo può assumere un valore da 0 a 2^ GRANULARITY Nel descrittore questo bit è indicato con la lettera G ed indica in che modo deve essere interpretato il campo LIMIT. Qualora questo bit non sia settato, il contenuto di LIMIT viene interpretato come unità in byte, quindi si ha un limite massimo di 1Mb, mentre se il bit G è settato il limite sarà considerato come il numero di unità da 4 Kb, ed in tal caso avremo un max di 4 Gb (come avviene nel nostro caso). - BASE Questo valore identifica la locazione del segmento entro lo spazio d'indirizzi lineare da 4 Gb. In parole semplici, identifica l'indirizzo assoluto in memoria dove si trova il primo byte del segmento. - DPL Questi 2 bit indicano il livello di privilegio del descrittore e di conseguenza i relativi permessi concessi al codice o ai dati in esso contenuti. Nel nostro caso utilizzeremo solo la modalità 0 (kernel mode) e 3 (user mode). Page 4

5 GDT Descriptor La prima entry della GDT viene generalmente settata con 8 bytes nulli (cioè uguali a 0) al fine di una corretta gestione dei page fault. La seconda e terza entry, in genere, sono riservati al code e data segment del kernel. Come ultimo aspetto riguardo la modalità protetta, vediamo invece come viene gestita la tabella degli interrupt. Il registro IDTR contiene l'indirizzo della tabella dei vettori di interrupt. In modalità reale questa tabella è costituita da vettori di 4 bytes per un numero massimo di 256 elementi, collocata all'indirizzo di memoria 0x0. In modalità protetta, ogni task può avere una sua tabella di interrupt. Gli elementi possono essere fino ad un massimo di 256 elementi, ed ognuno di essi è rappresentato da una struttura di 64 bit come riportato in Fig. 4. IDT Descriptor Analizziamo ora in dettaglio i campi di un Interrupt Descriptor. - SELECTOR: insieme ad OFFSET fornisce l'indirizzo logico dell'handler di interrupt. - OFFSET: insieme ad SELECTOR fornisce l'indirizzo logico dell'handler di interrupt. - Bit P: indica la presenza o meno dell'interrupt. - DPL: indica il livello di privilegio dell'interrupt. - Bit T: indica se si tratta di una trap (T=1) oppure di un interrupt (T=0). Quando si verifica un errore, la CPU in modo protetto lo comunica al sistema operativo generando una eccezione. Le eccezioni sono delle interruzioni che mandano in esecuzione i relativi interrupt. Pertanto, i primi 17 interrupt sono riservati al codice di sistema operativo. IDT[00] Errore di divisione IDT[01] Eccezione di debugging IDT[02] Non usato IDT[03] Breakpoint/Debugging IDT[04] Overflow IDT[05] Check limits IDT[06] Codice operativo non valido (istruzione sconosciuta) IDT[07] Coprocessore non disponibile IDT[08] Doppio difetto IDT[09] Superamento del segmento di coprocessore IDT[0A] TSS non valido IDT[0B] Segmento non presente IDT[0C] Eccezione di stack IDT[0D] Protezione generale Page 5

6 IDT[0E] Difetto di pagina IDT[0F] Non usato IDT[10] Errore di processore I rimanenti interrupt possono essere definiti dal sistemista o dall'applicativo. 3. Software di test Gli esempi riportati in questo articolo sono stati testati su una distribuzione Linux RedHat 8.0 dove è disponibile l'utility make, il compilatore gcc, l'assemblatore as ed il linker ld. 4. Boot process step 0: stampa di un messaggio di boot Questa sezione illustrerà come creare un floppy di boot che permette la stampa del messaggio "Hello World" all'avvio del computer. Quando un computer parte e da BIOS viene configurato il floppy come drive di boot, esso cerca di caricare il primo settore nella locazione 0:0x07C0. E' importante che questo settore al primo byte contenga già una istruzione eseguibile e che l'ultima word sia uguale a 0xAA55 (identificativo di un settore di boot). Quindi per stampare il messaggio di "Hello World" al boot basta utilizzare il servizio 0x0E dell'interrupt 0x10 che consente la stampa di un carattere (caricato nel registro AL) a video. In [4] è possibile trovare la specifica di tutte le routines di interrupt del BIOS più comuni..code16.text.global _start _start: movb $0x0E, %ah movb $'H', %al // stampa il carattere 'H' int 0x10 movb $'e', %al // stampa il carattere 'e' int 0x10... // stampa altri caratteri done: jmp done // loop infinito.org 510 boot_flag:.word 0xAA55 Il programma termina con un loop infinito, questo serve per evitare che la CPU esegua codice invalido. Si noti come i bytes finali 510 e 511 siano, rispettivamente, uguali a 0xAA e 0x55. Una volta scritto il programma in un file che chiameremo bootsect.s è possibile compilarlo attraverso i seguenti comandi. as -o bootsect.o bootsect.s ld -Ttext 0x0 -s oformat binary -o bootsect bootsect.o Il primo comando crea un object file partendo dal codice in assembler. Il secondo comando crea l'immagine di boot chiamata bootsect. L'opzione -Ttext 0x0 indica che 0x0 è l'indirizzo di partenza per i segmenti code, data e bss. L'opzione -oformat specifica il formato di output prodotto da ld. A questo punto per creare il dischetto di boot basta eseguire il seguente comando. dd if=bootsect of=/dev/fd0 bs=512 Spegniamo ora il computer e inseriamo il dischetto nel floppy driver (assicuriamoci che il BIOS sia configurato in modo tale da consentire il boot da dischetto). Durante lo startup della macchina ecco che per magia compare il messaggio "Hello World". Page 6

7 A questo punto per velocizzare il processo di sviluppo abbiamo bisogno di due cose, un sistema più rapido del reboot per testare il nostro codice e un Makefile. Il primo problema si risolve semplicemente scaricando da sourceforge (http://sourceforge.net/projects/bochs) il tool bochs che è un emulatore Intel open source. Vediamo, invece, come creare il nostro Makefile. Chi lavora in ambiente Unix sa che l'utility make viene utilizzata per la build automatizzata di progetti sotware. In pratica se la build di un programma richiede l'inserimento di molti comandi questa utility consente allo sviluppatore di definire semplici comandi con cui gestire lo sviluppo del proprio progetto. Il nostro Makefile dovrà fornire tre semplici comandi. make -> per una build completa del progetto make disk -> per creare l'immagine di boot make clean -> rimozione di tutti i file generati in fase di build Qui di seguito è riportato il Makefile utilizzato nel nostro progetto. AS=as LD=ls all: bootsect image bootsect: bootsect.o $(LD) -Ttext 0x0 -s oformat binary -o $< bootsect.o: bootsect.s $(AS) -o $< disk: image dd if=image of=/dev/fd0 bs=512 image: bootsect cat bootsect > image clean: rm bootsect rm image rm *.o Si provi ora a buildare il nostro software con i comandi di build nel seguente ordine: make clean make make disk 5. Boot Process step 1: copia del boot sector in 0x9000:0 Il primo passo del processo di boot è quello di spostare il boot sector dalla locazione 0x07C0:0 a 0x9000:0. Questo per evitare che, quando si caricherà il kernel nello step 7, questi vada a sovrascrivere il codice correntemente in esecuzione. I registri DS:SI punteranno alla cella iniziale dei dati sorgenti, cioè all'indirizzo 0:0x07C0. I registri ES:DI punteranno, invece, all'indirizzo iniziale del blocco destinazione che, nel nostro caso, sarà 0x9000:0. Per fare la copia si utilizzeranno le istruzioni assembler: CLD REP MOVSW con CLD si stabilisce che ad ogni word copiata il registro DI venga incrementato. REP indica che l'istruzione successiva deve Page 7

8 essere ripetuta per un numero di volte pari al contenuto del registro CX (che nel nostro caso conterrà 256 word= 512 bytes). MOVSW muove una word da DS:SI a ES:DI. Dopo questa operazione si fa un jump alla locazione 0x9000:go che conterrà l'istruzione successiva da eseguire nel boot sector. Qui di seguito riportiamo il codice che effettua la copia sopra citata. Per testare che la copia sia avvenuta con successo e che il jump non abbia generato problemi, stampiamo in questa nuova regione il messaggio "Hello World". BOOTSEG=0x07C0 INITSEG=0x9000.code16.text.global _start: _start: movw $BOOTSEG, %ax movw %ax, %ds # DS = 0x07C0 movw $INITSEG, %ax movw %ax, %es # ES = 0x9000 movw $256, %cx # CX = 256 subw %si, %si # SI = 0 subw %di, %di # DI = 0 cld rep movsw # copia boot sector ljmp $INITSEG, $go # jump a 0x9000:go go: <stampa Hello World come l'esempio precedente>.org 510 boot_flag:.word 0xAA55 Compiliamo il nostro programma e creiamo il disco di boot con i comandi make illustrati nello step precedente. 6. Boot Process step 2: definizione dello spazio per lo stack Negli steps che seguiranno, si effettueranno chiamate a procedure, per cui è importante definire uno spazio per lo stack settando opportunamente i registri SS e SP. Abbiamo visto che il boot sector occupa uno spazio compreso tra 0x9000:0 e 0x9000:0x01FF. A partire dall'indirizzo 0x9000:0x0200 nei prossimi steps caricheremo 4 settori (2048 bytes) che conterrano del codice di setup. Per cui la regione di memoria compresa tra 0x9000:0x0200 e 0x9000:0x09FF sarà riservato al codice di setup. Dopo questa regione definiamo la regione dello stack che si estenderà fino a 0x9000:(0x ). Il motivo per cui i primi 12 bytes non fanno parte dello stack è che questi nel vero codice di boot di Linux servono a contenere la Disk Parameter Table utilizzata per ottimizzare la lettura dei settori. L'unica cosa che per ora ci interessa sapere è che la regione stack parte dall'indirizzo 0x9000:(0x ) e si estende verso l'alto fino all'indirizzo 0x9000:0x0A00 (vedi Fig. 5). Page 8

9 Memory Layout Qui di seguito riportiamo il codice per il setting dell'area stack.... go: movw $0x , %di movw %ax, %ds movw %ax, %ss // SS = 0x9000 movw %di, %sp // SP = 0x <stampa Hello World come l'esempio precedente>.org 510 boot_flag:.word 0xAA55 7. Boot Process step 3: stop del motore del floppy In questo step introduciamo una procedura che ci consente di effettuare lo stop del motore del floppy dopo la lettura dei dati da disco. Questo ci consentirà di attivare il kernel in una situazione consistente dal punto di vista del floppy. In questa sezione non entreremo in dettaglio circa l'hardware del floppy, bensì vedremo solo le cose necessrie per i nostri scopi. Di solito i PC utilizzano il controller disco NEC mpd765. I PC AT possono includere anche il controller 82072A, mentre i PS/2 usano un Intel 82077A. Questo controller gestisce un certo numero di registri tra cui il Digital Output Register (DOR) che è un registro a 8 bits a sola scrittura, disponibile all'indirizzo 0x3F2, che si occupa della gestione dei motori dei vari floppy drives disponibili. Page 9

10 FDC Controller Register In Fig. 6 è possibile osservare il formato di questo registro. I bit DR1, DR0 selezionano il floppy driver a cui inviare il comando di stop del motore. La selezione del drive ha senso solo se il motore è attivo. Il bit REST quando è posto a 1 attiva il controller, mentre se vale 0 esegue il reset del controller. Quando si effettua lo start del motore di un floppy drive si può decidere di associare ad esso una linea di DMA con relativo canale IRQ. MOTA, MOTB, MOTC, MOTD controllano lo start/stop per i floppy drive A, B, C e D. Se il bit MOTx è 1, allora il motore del floppy drive x viene avviato, altrimenti viene spento. Visto che il nostro obiettivo è quello di spegnere il motore di tutti i floppy drive disponibili, allora bisogna scrivere il valore 0 nel registro DOR. out[0x3f2] = 0 Qui di seguito riportiamo il codice della routine chiamata kill_motor. kill_motor: movw $0x3f2, %dx xorb %al, %al outb %al, %dx # out[0x3f2] = 0.word 0x00eb, 0x00eb # breve delay ret questa routine verrà invocata nel nostro main program subito dopo la stampa del messaggio di "Hello World". 8. Boot Process step 4: caricamento del codice di setup Il codice di setup segue sul floppy di boot il bootsector, ed esso occupa 4 settori (2048 bytes) di disco. Quindi i settori 2-5 della traccia 0 contengono tale codice. Quest'ultimo deve essere caricato in memoria nel segmento 0x9000 subito dopo il boot sector, per cui a partire dall'offset 0x0200 (512 appunto). Per effettuare questa copia utilizzeremo il servizio 0x02 dell'interrupt 0x13 che consente di copiare n settori dalla locazione di disco (drive, head, track, sector) in memoria a partire dall'indirizzo puntato dai registri ES:BX. Una volta eseguita questa copia, per eseguirlo verrà effettuato un semplice jump alla locazione iniziale del codice di setup (0x9000:0x0200). Prima di effettuare la copia è necessario eseguire un reset del controller del floppy attraverso il servizio 0x00 dell'interrupt 0x13, come mostra il codice seguente. load_setup: xorb %ah, %ah # AH = 0 -> service 0x00 xorb %dl, %dl # DL = 0 -> drive 0 int $0x13 # reset FDC Dal codice si intuisce che il valore del servizio deve essere inserito nel registro AH, mentre il floppy drive da resettare va posto nel registro DL. Dopo questa semplice operazione avviene la vera e propria copia. Page 10

11 Il servizio 0x02 dell'interrupt 0x13 consente di copiare n settori di disco in memoria. Le specifiche di questo servizio sono le seguenti. DH = drive da cui vengono letti i dati (0 nel nostro caso) DL = testina da cui parte la copia (0 nel nostro caso) CH =traccia da cui parte la copia (0 nel nostro caso) CL = settore da cui parte la copia (2 nel nostro caso) ES:BX = indirizzo di memoria destinazione AH = numero servizio (0x02) AL = settori da copiare (4 nel nostro caso) La routine di interrupt ritorna un codice nel registro AX che rappresenta il risultato della copia. Questo valore è 0 se la copia è avvenuta con successo, altrimenti conterrà un opportuno codice di errore. Per semplicità in questo step faremo stampare a video la stringa "Error" se avviene un errore durante la copia, nel prossimo step vedremo come effettuare il dump del codice di errore. Memory Layout Qui di seguito riportiamo il codice assembler utilizzato per fare il loading del codice di setup. movb $0x02, %cl movw $0x0200, %bx movb $0x02, %ah movb $4, %al int $0x13 Page 11

12 jnc ok_load_setup stampa il messaggio Error jmp load_setup # riprova di nuovo ok_load_setup: stampa il messaggio Setup loaded call kill_motor done: jmp done La Fig. 7 mostra come appare la memoria dopo quest'ulima operazione di copia. 9. Boot Process step 5: routine di debug e stampa del messaggio Loading system Dopo aver caricato il codice di setup, stampiamo il messaggio Loading system utilizzando il servizio 0x13 dell'interrupt 0x10. Questo perchè quando verrà passato il controllo al codice di setup, questo inizializzerà alcune componenti di sistema e poi provvederà a caricare il kernel in memoria. Ricordiamo al lettore che nel nostro caso il kernel è una semplice routine C che stampa il messaggio "Hello Kernel". Il servizio 0x13 consente di stampare a video una intera stringa. Le specifiche di questo servizio sono le seguenti. CX= numero caratteri della stringa (compreso lo 0 finale) BH=pagina video (0 nel nostro caso) BL=attributi di stampa (7 nel nostro caso) ES:BP=indirizzo stringa DH=riga dove scrivere la stringa DL=colonna dove scrivere la stringa AH= numero servizio (0x03) Per avere in DH DL la posizione corrente del cursore, utilizzeremo il servizio 0x03 dell'interrupt 0x10. Qui riportiamo il nuovo codice da aggiungere al file bootsect.s subito dopo il codice di caricamento dei settori di setup. Ovviamente è ora possibile rimuovere il codice che stampava il messaggio Setup loaded!!. movb $0x03, %ah # ottieni la posizione del cursore in DH e DL xorb %bh, %bh # BH = 0 int $0x10 movw $17, %cx movw $0x0007, %bx movw $msg1, %bp movw $0x1301, %ax int $0x10... msg1:.byte # new line.ascii Loading system Aggiungiamo a questo punto al nostro codice due routine che potrebbero tornare utile in fase di debugging: print_all e print_hex. La prima stampa le prime 5 word al top dello stack che dovrebbero contenere: codice errore, AX, BX, CX e DX; Questa routine è utile per verificare il valore dei registri in un dato punto del codice o al termine di una routine di interrupt. La seconda routine stampa la word puntata da SS:BP in formato esadecimale. Evitiamo di riportare in tale sede il codice perchè l'introduzione di queste routine è facoltativa e necessita solo di conoscenze assembler. Il lettore potrà trovare il codice + nei files sorgenti relativi a questo step. Ora che abbiamo a disposizione queste routine di debugging anzichè stampare il messaggio Error come facevamo nello step 4, se il caricamento del codice di setup falliva, stampiamo il codice di errore in AX. Page 12

13 pushw %ax # stampa il codice di errore sul video call print_nl # stampa unanew line sul video movw %sp, %bp call print_hex # stampa AX sul video popw %ax jmp load_setup # riprova di nuovo 10. Boot Process step 6: jump al codice di setup In questo step introduciamo un nuovo file che chiameremo setup.s, esso conterrà il codice di setup del boot loader. Questo codice, come già anticipato sopra, dovrà occupare 4 settori (2048 bytes). Per ora nel file setup.s effettuiamo la stampa di un semplice messaggio "Wow I am in setup", mentre in bootsect.s dobbiamo effettuare un jump al codice di setup. Questo è il codice di setup.s..code16.text.global _start _start: stampa il messaggio Wow I am in setup done: jmp done.org 2048 # loop infinito # size 4 settori Nel file bootsect.s, invece, aggiungiamo subito dopo lo stop del floppy motor un jump all'indirizzo di inizio del setup code (0x9000:0x0200). ljmp $INITSEG, $0 E' necessario, a questo punto, modificare il Makefile in modo tale che venga buildato anche setup.s e che il relativo object file venga concatenato al boot sector nel file immagine. all: bootsect setup image... setup: setup.o $(LD) -Ttext 0x0 -s --oformat binary -o $< setup.o: setup.s $(AS) -o $< setup.s: setup.s $(CPP) -traditional $< -o La regola per creare il file immagine, invece, è la seguente. image: bootsect setup cat bootsect > image cat setup >> image Buildiamo il nostro nuovo codice, e avviamo il nostro dischetto di boot. Dovrebbero comparire i seguenti messaggi. Loading system Page 13

14 Wow I am in setup 11. Boot Process step 7: caricamento del kernel in memoria Prima di effettuare il jump al codice di setup, il codice di boot provvede a caricare il codice del kernel nella locazione 0x1000:0. La lettura avviene utilizzando sempre il servizio 0x02 dell'interrupt 0x10 che abbiamo già esaminato nello step 4. La lettura avviene una traccia per volta. Visto che il nostro dischetto di boot lavora prevalentemente con floppy da 1.44Mb, avremo che per ogni traccia leggeremo 18 settori (solo per la prima traccia leggeremo 13 settori, visto che il boot sector e i settori di setup sono già stati letti). E' importante ricordare, inoltre, che la lettura delle tracce avviene in questo modo. Per il drive 0, vengono lette prima le tracce 0 per entrambe le testine, poi la traccia 1 per entrambe le testine e così via, questo ovviamente serve a ridurre al minimo il movimento delle parti meccaniche. Per i floppy 1.44Mb abbiamo 2 traccie per testina, per cui la lettura delle tracce avviene nel seguente ordine: drive=0, testina=0, traccia=0 drive=0, testina=1, traccia=0 drive=0, testina=0, traccia=1 drive=0, testina=1, traccia=1 drive=0, testina=0, traccia=2 drive=0, testina=1, traccia=2... Come abbiamo più volte detto il nostro kernel è una semplice routine C che stampa il messaggio "Hello Kernel". Questo kernel non è altro che un file eseguibile a.out che chiameremo kernel la cui size è definita in bootsect.s attraverso la variabile SYSIZE. Questa variabile deve contenere la size del kernel in CLICKS (16 bytes). In pratica se la size del kernel è x, allora SYSIZE=(x+15)/16. Visto che read_it è una routine abbastanza complessa, riportiamo in questo articolo solo la versione in pseudo codice, rimandando il lettore ai listati sorgenti allegati all'articolo per i dettagli implementativi. head -> testina corrente track -> traccia corrente sread -> settore corrente check iniziali rp_read: se tutti i bytes del kernel sono stati letti dal disco, allora stop; altrimenti vai a ok1_read; ok1_read: es contiene il segmento che conterrà la copia della traccia corrente; bx contiene l'offset di memoria dove si inizierà a copiare; se bx non ha superato i limiti dei 64 Kb allora vai a ok2_read; è stato superato il limite di 64 Kb, per cui meno settori devono essere letti, per sapere quanti settori si dovrà leggere basta calcolare la distanza tra bx e la fine segmento e dividere per 512. ok2_read: leggi la traccia (o parte di essa) attraverso il servizio 0x02 dell'interrupt 0x13; se la traccia non è stata letta completamente vai a ok3_read; se per la testina n solo una traccia è stata letta allora vai a ok4_read; entrambe le tracce sono state lette per la testina n, Page 14

15 quindi head = 1 - n ok4_read: per la testina n entrambe le tracce sono state lette, quindi head = 1 -n track = track+1 ok3_read: update sread se non abbiamo superato i limiti di 64 kb allora vai a rp_read; sono stati superati i limiti di 64 Kb, per cui incrementa il registro ES e a BX assegna 0. salta a rp_read; Questa routine deve essere invocata nel main program prima dell'invocazione alla routine kill_motor. Abbiamo visto come la costante SYSIZE tiene traccia della size del kernel in CLICKS. E' chiaro che in fase di sviluppo la size del kernel varia in continuazione e ad ogni compilazione aggiornare questo valore potrebbe essere dispendioso. Per evitare ciò modifichiamo il Makefile in modo tale che questa venga calcolata a compile time in base alla size del kernel. Ecco la modifica suggerita: bootsect.o: bootsect.s (echo -n "SYSSIZE = ("; \ echo -n `ls -gg kernel cut -c16-24`; \ echo "+ 15 ) / 16") > tmp.s cat bootsect.s >> tmp.s mv tmp.s bootsect.s $(AS) -o $< Per avere un minimo di kernel, scriviamo un file main.c e dentro definiamo la routine start_kernel (entry point del kernel) che effettua un loop infinito. void start_kernel(void) { while(1) ; } Aggiorniamo il Makefile affinchè da questa semplice file C venga creato un file eseguibile (il nostro kernel). all: kernel bootsect setup image... kernel: main.o $(LD) -e stext -Ttext 0x1000 -s --oformat binary head.o \ main.o -o main.o: main.c $(CC) -Wall -O -fstrength-reduce -fomit-frame-pointer \ -c $< -o image: cat bootsect > image cat setup >> image Nel processo di build comparirà un messaggio di warning come il seguente: ld: warning: cannot find entry symbol stext; defaulting to per ora il lettore non si deve preoccupare di questo messaggio, negli step successivi, quando completeremo l'implementazione del kernel, questo messaggio non apparirà più. Page 15

16 12. Boot Process step 8: spostiamo il kernel all'indirizzo 0x0100:0 A questo punto del processo di boot il kernel viene copiato dall'indirizzo 0x1000:0 a 0x0100:0. A questo punto vi chiederete: ma perchè il kernel non è stato copiato direttamente lì? La risposta è semplice, se avessimo copiato il kernel direttamente all'indirizzo 0x0100:0 avremmo coperto tutte l'area BIOS e, quindi, anche le routine di interrupt, tra cui la 0x13, cosa che non ci avrebbe consentito più la lettura da disco. La prima cosa da fare in questo step è quello di disabilitare gli interrupt e NMI bootup, per evitare che da questo punto in poi avvenga un qualche tipo di interruzione. cli # no interrupts movb $0x80, %al # disabilita NMI bootup outb %al, $0x70 # out[0x80] = 0x70 A questo punto inizia la vera e propria fase di copia, dove DS:SI punta all'area sorgente, mentre ES:DI a quella di destinazione. La copia avviene a blocchi di 4Kb. do_move: movw %ax, %es # ES:DI = indirizzo destinazione addw $0x100, %ax cmpw $0x9000, %ax # if (AX == 0x9000) jump a end_move jz end_move movw %bx, %ds # DS:SI = indirizzo sorgente addw $0x100, %bx subw %di, %di subw %si, %si movw $0x800, %cx # copia 0x800 words (4096 bytes == 4Kb) rep movsw jmp do_move end_move:... Si osservi che questo codice copia il kernel fino a coprire l'area da 0x1000 a 0x90000 per un totale di 572 Kb che rappresenta anche la size max del nostro kernel. 13. Boot Process step 9: stampiamo un semplice messaggio di setup Per questo messaggio di setup usiamo il classico servizio 0x0E dell'interrupt 0x10. Stamperemo una stringa finchè non viene trovato il carattere null (0). Questo è il codice da aggiungere al nostro processo di boot. Questo step è opzionale. leaw msg, %si # DS:SI puntano a msg call prtstr # stampa il mesaggio ret prtstr: lodsb # carica il carattere da stampare da # DS:SI in AX andb %al,%al jz fin # stampa finchè AL non è 0 call prnt1 # stampa jmp prtstr fin: ret prnt1: pushw pushw %ax %cx Page 16

17 xorb %bh,%bh movw $0x01, %cx movb $0x0e, %ah int $0x10 popw %cx popw %ax ret... msg:.byte 13, 10.ascii "Setting up system".byte 0x0 14. Boot Process step 10: setting up global e interrupt descriptor tables La prima cosa da fare in questo step è quello di caricare in IDTR e GTDR i base address e le size delle tabelle IDT e GDT. Il seguente codice mostra come ciò viene fatto nel nostro codice. lidt idt_48 # base == 0, limit == 0 lgdt gdt_48 # limit == > 256 entries... idt_48:.word.word 0 0, 0 # idt limit = 0 # idt base = 0L gdt_48:.word 0x8000 # gdt limit=2048, 256 GDT entries.long gdt + SETUPSEG*0x10 Si osservi come la GDT sia stata definita con 256 entries e con base address pari all'indirizzo corrispondente alla label gdt del codice di setup (infatti SETUPSEG*0x10 è l'indirizzo assoluto dove inizia il codice di setup e gdt è la label da dove parte la definizione della tabella). gdt:.word 0, 0, 0, 0 # dummy.word 0xFFFF # 4Gb - (0x100000*0x1000 = 4Gb).word 0 # base address = 0.word 0x9A00 # code read/exec.word 0x00CF # granularity = 4096, 386 # (+5th nibble of limit).word 0xFFFF # 4Gb - (0x100000*0x1000 = 4Gb).word 0 # base address = 0.word 0x9200 # data read/write.word 0x00CF # granularity = 4096, 386 # (+5th nibble of limit) Cerchiamo di capire ora cosa significano questi valori. Dalla label gdt inizia la GDT che come abbiamo visto, contiene 256 entries. La prima entry generalmente è usata nella gestione dei page fault, per cui contiene, in genere, valori dummy. Da qui si spiega perchè le prime 4 word (primo descriptor) della GDT sono uguali a 0. Il secondo e terzo descriptor, in genere, descrivono il code e data segment del kernel. Il kernel code segment è definito attraverso il seguente descriptor..word 0xFFFF # size segment = 4Gb.word 0 # base address = 0.word 0x9A00 # code read/exec.word 0x00CF # granularity = 4096, 386 il quale dice che il code segment ha come base address 0x0, size 4Gb e accesso in read/exec. Page 17

18 Il kernel data segment, invece, è definito attraverso quest'altro descriptor..word 0xFFFF # 4Gb - (0x100000*0x1000 = 4Gb).word 0 # base address = 0.word 0x9200 # data read/write.word 0x00CF # granularity = 4096, 386 # (+5th nibble of limit) Differisce dal precedente per il fatto che l'accesso è di tipo read/write. Si noti come entrambi le aree hanno base 0x0 e size pari a 4Gb. Questo ci semplificherà le cose, perchè tutti gli indirizzi a 32 bit che utilizzeremo, saranno indirizzi assoluti. Le restanti entries della GDT sono lasciati ai processi utenti, per cui non verranno al momento definiti. 15. Boot Process step 11: abilita linea A20 In origine il processore 8088 aveva 20 linee di indirizzamento, con cui poteva gestire uno space address di 1 Mb. Se un programma cercava di far riferimento ad un indirizzo maggiore di 1 Mb un wrap around veniva applicato. Con l'introduzione dei processori 286 le linee di indirizzamento furono portate a 24 dando così la possibilità di indirizzare fino a 16 Mb. Per mantenere la compatibilità verso i vecchi processori di default questi operavano con 20 linee di indirizzamento e la nuova modalità doveva opportunamente essere abilitata via software. Questa nuova funzionalità era ed è tuttora pilotabile attraverso il controller 8042 della testiera. Nell'abilitare la linea A20 è importante che la coda della tastiera non contenga dati da elaborare, a tale scopo viene utilizzata la routine empty_8042 che ritorna non appena tale coda è vuota. empty_8042: call delay # piccolo delay inb $0x64, %al # %al = in[0x64] testb $0x1, %al jz no_output # if (bit %al[0] == 0) jump no_output call delay # piccolo delay inb $0x60, %al # %al = in[0x60] jmp empty_8042 # jump a empty_8042 no_output: testb $2, %al # if (bit %al[1] == 1) jump a # empty_8042 jnz empty_8042 ret... delay:.word ret 0x00eb Si osservi come questo codice controlla che i 2 bits del registro di stato siano 0. Nel caso in cui il bit 0 non sia nullo (quindi ci sono dati in coda), questi vengono rimossi leggendo dalla porta 0x60 gli scan codes o i keybord data. A questo punto si può abilitare la linea A20 ricordandoci di assicurare che prima di ogni write command la 8042 queue sia vuota. call empty_8042 out[ 0x64 ] = 0xD1 # command: write to the output port call empty_8042 out[ 0x60 ] = 0xDF # bit 1 is set -> A20 enabled call empty_8042 Con il primo comando specifichiamo che effettueremo una scrittura sulla porta di output del controller. Con il secondo Page 18

19 comando, invece, abiliteremo la linea A20 impostando a 1 il bit 1 dell'output port. 16. Boot Process step 12: reset coprocessore Il reset del coprocessore si effettua semplicemente scrivendo 0 sulle porte di I/O 0xF0 e 0xF1 come riporta il codice seguente. # Reset coprocessor xorw %ax, %ax outb %al, $0xf0 # out[0xf0] = 0 call delay outb %al, $0xf1 # out[0xf1] = 0 call delay 17. Boot Process step 13: PIC programming Il compito del controller PIC 8259 è quello di notificare la CPU di eventi provenienti da dispositivi hardware attraverso delle linee chiamate IRQs. Quando un evento viene notificato al PIC, questi provvederà poi ad avvertire la CPU che attiverà l'opportuna routine di handling. Se durante il processamento di un evento arriva un altro evento, questi viene messo in coda. Nel caso di arrivo di due eventi contemporanei, essi vengono gestiti in base ad una priorità ben precisa. In un PC con processore i386 o superiore, troviamo due controller PIC 8259 collegati in cascata, ognuno che gestisce 8 linee IRQ (IRQ0-IRQ7), chiamati master e slave. Per comodità chiameremo IRQ0-IRQ7 le linee IRQ del controller master e IRQ8-IRQ15 quelle dello slave. La Fig. 8 mostra il collegamento tra i due controller PIC che avviene attraverso le linee IRQ2 e IRQ12. La seguente tabella illustra i dispositivi che generalmente sono collegati ai due controller. PIC 8259 Master IRQ0 System Timer IRQ1 Keyboard IRQ2 Collegamento al controller slave IRQ3 COM2/COM4 IRQ4 COM1/COM3 IRQ5 LPT2 IRQ6 FDC IRQ7 LPT1 PIC 8259 Slave IRQ8 Real Time Clock Chip IRQ9 Networking adapter IRQ10 Non usato IRQ11 Non usato IRQ12 Collegamento al controller master IRQ13 Floating Processor Unit IRQ14 HDC IRQ15 Non usato Chi ha configurato almeno una volta una scheda audio sa che spesso questa viene associata all' IRQ 5, questo perchè generalmente ad un PC non si collega una seconda stampante, per cui questa associazione non crea alcun conflitto. E' fondamentale, tuttavia, che due dispositivi hardware realmente collegati al PC non utilizzino la stessa linea IRQ, altrimenti si genera un conflitto che provocherà malfunzionamenti nel nostro sistema. La comunicazione tra la CPU ed i due controller avviene attraverso 4 porte I/O (2 per ogni PIC). Page 19

20 PIC 8259 Master-Slave Le porte sono la 0x20 e 0x21 per il controller master, e la 0xA0 e 0xA1 per il controller slave. Il PIC accetta due tipi di comandi: Initialization Command Words (ICW); Operation Command Words (OCW). I comandi sono 7 e vengono spediti uno in coda all'altro seguendo l'ordine numerico. Comando ICW1 (porta 0x20 o 0xA0) Bits _ 1: comando ICW4 verrà inviato; 1: master; 0: slave; 1: dim. vettori interrupt è 8; 0: dim. vettori intr. è 4; 1: level triggered (PS/2); 0: edge triggered; 1: comando ICW1; Comando ICW2 (porta 0x21 o 0xA1) Bits specifica il vettore di interrupt per ogni IRQ partendo da IRQ0. Ad esempio, se questo valore è 0x20, allora IRQ0 -> 0x20, IRQ1 -> 0x21 e così via. Comando ICW3 (porta 0x21 o 0xA1) Bits 0-7. Indica a quale IRQ è collegato il canale slave sul canale master e viceversa. Su architetture AT i due controller sono Page 20

Sistemi x86 CALCOLATORI ELETTRONICI LM

Sistemi x86 CALCOLATORI ELETTRONICI LM Sistemi x86 CALCOLATORI ELETTRONICI LM 1 Registri x86 31 15 8 7 AH AX AL EAX 31 IP BH BX BL EBX CH CX DH DX CL DL ECX EDX 31 FLAGS EF SI ESI DI EDI BP EBP 15 8 7 SP CS SS DS ESP Sono presenti anche i registri

Dettagli

Hardware di un Computer

Hardware di un Computer Hardware di un Computer Monitor Mouse Tastiera Printer Disk CPU Graphics Adapter USB Controller Parallel Port Disk Controller BUS Memoria RAM Memoria ROM (BIOS) DMA CPU esegue istruzioni, effettua calcoli,

Dettagli

Architettura degli elaboratori (A)

Architettura degli elaboratori (A) Laurea in Informatica a.a. 2010-2011 Laboratorio del corso di Architettura degli elaboratori (A) Modulo 1: l Architettura dell 8086 Valeria Carofiglio Linguaggi a vari livelli e loro relazioni Programma

Dettagli

Sistemi di Elaborazione a Microprocessore 8259. (Controllore Program m abile delle Interruzioni) M. Rebaudengo - M. Sonza Reorda

Sistemi di Elaborazione a Microprocessore 8259. (Controllore Program m abile delle Interruzioni) M. Rebaudengo - M. Sonza Reorda 8259 (Controllore Program m abile delle Interruzioni) M. Rebaudengo - M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica 1 M. Rebaudengo, M. Sonza Reorda Generalità L'8259 è stato progettato

Dettagli

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088 ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088 microprocessori Intel di terza generazione progetto originario del 1979, ancora oggi interessanti per: 1. motivi didattici: l architettura dei processori

Dettagli

Lezione 16: L architettura LC-3

Lezione 16: L architettura LC-3 Lezione 16: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 15 Maggio 2013 Ricorda... Il ciclo di esecuzione di un istruzione è composto da sei fasi: FETCH DECODE ADDRESS

Dettagli

Architettura degli Elaboratori

Architettura degli Elaboratori Architettura degli Elaboratori Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Laboratorio lez1: il processore 8086/88 Prof. S.Pizzutilo I processori Intel

Dettagli

Il microprocessore 8086

Il microprocessore 8086 1 Il microprocessore 8086 LA CPU 8086 Il microprocessore 8086 fa parte della famiglia 80xxx della INTEL. Il capostipite di questa famiglia è stato l 8080, un microprocessore ad 8 bit che ha riscosso un

Dettagli

Classe 3a INF - Esecuzione di un interrupt: ricostruzione delle operazioni al calcolatore con Turbo Debugger

Classe 3a INF - Esecuzione di un interrupt: ricostruzione delle operazioni al calcolatore con Turbo Debugger Classe 3a INF - Esecuzione di un interrupt: ricostruzione delle operazioni al calcolatore con Turbo Debugger Turbo debugger è un potente strumento di sviluppo pensato, anni fa, come complemento agli strumenti

Dettagli

Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086.

Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086. I processori Intel Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086. L'8086 e' un processore a 16 bit quindi i suoi registri potranno

Dettagli

Il livello architettura e set di istruzioni

Il livello architettura e set di istruzioni Corso di Informatica 2 Prof. Sciuto Il livello architettura e set di istruzioni Daniele Paolo Scarpazza Dipartimento di Elettronica e Informazione Politecnico di Milano 7 Giugno 2004 Daniele Paolo Scarpazza

Dettagli

Programmazione dello Z80

Programmazione dello Z80 Il microprocessore si incarica di: gestire il programma e i suoi dati di eseguire i calcoli richiesti. Le azioni appena elencate rendono necessario che il microprocessore abbia da qualche parte, al suo

Dettagli

MULTIPROGRAMMAZIONE E PROTEZIONE. G. Frosini Multiprogrammazione e Protezione Slide 1

MULTIPROGRAMMAZIONE E PROTEZIONE. G. Frosini Multiprogrammazione e Protezione Slide 1 MULTIPROGRAMMAZIONE E PROTEZIONE G. Frosini Multiprogrammazione e Protezione Slide 1 SISTEMI MULTIPROGRAMMATI Sistema di elaborazione con un solo processore: può eseguire un solo programma alla volta;

Dettagli

Calcolatori Elettronici Parte X: l'assemblatore as88

Calcolatori Elettronici Parte X: l'assemblatore as88 Anno Accademico 2013/2014 Calcolatori Elettronici Parte X: l'assemblatore as88 Prof. Riccardo Torlone Università Roma Tre L'assemblatore as88 Disponibile presso: CD-ROM allegato al libro di testo del corso

Dettagli

STRUTTURE DEI SISTEMI DI CALCOLO

STRUTTURE DEI SISTEMI DI CALCOLO STRUTTURE DEI SISTEMI DI CALCOLO 2.1 Strutture dei sistemi di calcolo Funzionamento Struttura dell I/O Struttura della memoria Gerarchia delle memorie Protezione Hardware Architettura di un generico sistema

Dettagli

1. I dispositivi periferici

1. I dispositivi periferici La gestione dell I/O 1. I dispositivi periferici Un ulteriore aspetto fondamentale del SO è la gestione dei dispositivi periferici (periferiche) Dal punto di vista del sistema operativo per periferiche

Dettagli

Ing. Paolo Domenici PREFAZIONE

Ing. Paolo Domenici PREFAZIONE Ing. Paolo Domenici SISTEMI A MICROPROCESSORE PREFAZIONE Il corso ha lo scopo di fornire i concetti fondamentali dei sistemi a microprocessore in modo semplice e interattivo. È costituito da una parte

Dettagli

STACK, istruzioni PUSH e POP; PROCEDURE, istruzioni CALL e RET

STACK, istruzioni PUSH e POP; PROCEDURE, istruzioni CALL e RET Lo stack STACK, istruzioni PUSH e POP; PROCEDURE, istruzioni CALL e RET Lo stack (tradotto talvolta in italiano con pila o catasta) è un'area di memoria privilegiata, dove il microprocessore può salvare

Dettagli

Classe 3 A Inf - Alcune informazioni sull'uso del programma Debug

Classe 3 A Inf - Alcune informazioni sull'uso del programma Debug Classe 3 A Inf - Alcune informazioni sull'uso del programma Debug Un po' di storia Debug è un programma che da lunghissimo tempo è presente nei sistemi Microsoft. Fin dall'epoca dei primi dischetti DOS,

Dettagli

Sistemi Operativi (modulo di Informatica II) Sottosistema di I/O

Sistemi Operativi (modulo di Informatica II) Sottosistema di I/O Sistemi Operativi (modulo di Informatica II) Sottosistema di I/O Patrizia Scandurra Università degli Studi di Bergamo a.a. 2009-10 Sommario L hardware di I/O Struttura Interazione tra computer e controllori

Dettagli

Architettura di un sistema di calcolo

Architettura di un sistema di calcolo Richiami sulla struttura dei sistemi di calcolo Gestione delle Interruzioni Gestione della comunicazione fra processore e dispositivi periferici Gerarchia di memoria Protezione. 2.1 Architettura di un

Dettagli

Il contesto! Gestione della Memoria! Reg. di Base e reg. Limite! Associazione tra dati/istruzioni e memoria!

Il contesto! Gestione della Memoria! Reg. di Base e reg. Limite! Associazione tra dati/istruzioni e memoria! Il contesto Gestione della Memoria Per essere eseguiti, i programmi devono essere trasferiti (dal disco) in memoria e tradotti in processi. Obiettivi: accesso rapido e protezione. Accesso rapido La CPU

Dettagli

Istruzioni di modifica della sequenza di elaborazione

Istruzioni di modifica della sequenza di elaborazione Istruzioni di modifica della sequenza di elaborazione Permettono di modificare la sequenza di esecuzione delle istruzioni di un programma, normalmente controllata dal meccanismo automatico di avanzamento

Dettagli

SISTEMI OPERATIVI. Gestione della memoria Domande di verifica. Luca Orrù Centro Multimediale Montiferru 18/06/2007

SISTEMI OPERATIVI. Gestione della memoria Domande di verifica. Luca Orrù Centro Multimediale Montiferru 18/06/2007 2007 SISTEMI OPERATIVI Gestione della memoria Domande di verifica Luca Orrù Centro Multimediale Montiferru 18/06/2007 Gestione della memoria 1. Si descriva il concetto di memoria virtuale (esame del 19-06-2006)

Dettagli

Interrupts e System calls

Interrupts e System calls by Salvatore D'Angelo Table of contents 1 Introduzione... 2 2 Interrupts & Eccezioni... 2 2.1 Interrupts & Eccezioni: che cos'è un interrupt... 2 2.2 Interrupts & Eccezioni: Programmable Interrupt Controller

Dettagli

Lezione 2 Principi Fondamentali di SO Interrupt e Caching. Sommario

Lezione 2 Principi Fondamentali di SO Interrupt e Caching. Sommario Lezione 2 Principi Fondamentali di SO Interrupt e Caching Sommario Operazioni di un SO: principi fondamentali Una visione schematica di un calcolatore Interazione tra SO, Computer e Programmi Utente 1

Dettagli

INTERRUPT 21H. Dispensa. Autore: Michele Naso. Classe: QUINTA INFORMATICA (5IA) Anno scolastico: 2003/2004. Scuola: Itis Euganeo

INTERRUPT 21H. Dispensa. Autore: Michele Naso. Classe: QUINTA INFORMATICA (5IA) Anno scolastico: 2003/2004. Scuola: Itis Euganeo Autore: Classe: Michele Naso QUINTA INFORMATICA (5IA) Anno scolastico: 2003/2004 Scuola: Itis Euganeo INTERRUPT 21H Dispensa Elenco di chiamate ai servizi DOS più diffusi e relativi schemi di utilizzazione.

Dettagli

Desiderata: memoria capiente e veloce. Connessioni tra livelli di memoria. Memoria cache, struttura. Tecniche impiegate. Ad ogni accesso alla memoria

Desiderata: memoria capiente e veloce. Connessioni tra livelli di memoria. Memoria cache, struttura. Tecniche impiegate. Ad ogni accesso alla memoria Connessioni tra livelli di memoria Tape Registers Cache Main memory Magnetic disk Optical disk (Architettura degli Elaboratori) Gerarchie di memorie / 58 Metodo: Desiderata: memoria capiente e veloce i

Dettagli

Cenni ad Assembly Intel

Cenni ad Assembly Intel Cenni ad Assembly Intel Luca Abeni April 17, 2015 Architerrura Intel Utilizzata sulla maggior parte dei laptop, desktop e server moderni Lunga storia Dagli anni 70 (Intel 8080-8 bit!)......fino ad oggi

Dettagli

Processi. Laboratorio Software 2008-2009 C. Brandolese

Processi. Laboratorio Software 2008-2009 C. Brandolese Processi Laboratorio Software 2008-2009 Introduzione I calcolatori svolgono operazioni simultaneamente Esempio Compilazione di un programma Invio di un file ad una stampante Visualizzazione di una pagina

Dettagli

Fondamenti di Informatica T-1 CdS Ingegneria Informatica a.a. 2011/2012. Introduzione a Visual Studio 2005/2008/2010

Fondamenti di Informatica T-1 CdS Ingegneria Informatica a.a. 2011/2012. Introduzione a Visual Studio 2005/2008/2010 Fondamenti di Informatica T-1 CdS Ingegneria Informatica a.a. 2011/2012 Introduzione a Visual Studio 2005/2008/2010 1 Outline Solution e Project Visual Studio e linguaggio C Visual Studio schermata principale

Dettagli

ARCHITETTURA DI UN SISTEMA A MICROPROCESSORE

ARCHITETTURA DI UN SISTEMA A MICROPROCESSORE ARCHITETTURA DI UN SISTEMA A MICROPROCESSORE 1. INTRODUZIONE In questo capitolo viene presentata la struttura, sia interna che esterna, di un microprocessore generico riprendendo i concetti esposti nella

Dettagli

PD32. Interfacciamento con i dispositivi di I/O (V)

PD32. Interfacciamento con i dispositivi di I/O (V) PD32 Interfacciamento con i dispositivi di I/O (V) Interazione CPU - dispositivi Soluzioni possibili Busy Waiting Utilizzabile quando CPU esegue solo il task di dialogo con la periferica Interruzioni D.M.A.

Dettagli

Il calcolatore elettronico. Parte dei lucidi sono stati gentilmente forniti dal Prof. Beraldi

Il calcolatore elettronico. Parte dei lucidi sono stati gentilmente forniti dal Prof. Beraldi Il calcolatore elettronico Parte dei lucidi sono stati gentilmente forniti dal Prof. Beraldi Introduzione Un calcolatore elettronico è un sistema elettronico digitale programmabile Sistema: composto da

Dettagli

Il supporto al Sistema Operativo

Il supporto al Sistema Operativo Il supporto al Sistema Operativo Obiettivi e funzioni del S.O. Il Sistema Operativo è il software che controlla l esecuzione dei programmi e amministra le risorse del sistema. Ha due obiettivi principali:

Dettagli

SET/CLEAR LOAD DATA FROM STRING

SET/CLEAR LOAD DATA FROM STRING SET/CLEAR STD CLD AZIONE: Imposta ad 1 (STD) o a zero (CLD) il valore del flag DF. Sono istruzioni senza parametri. Vanno sempre messi!! FLAG di cui viene modificato il contenuto: Nessuno (a parte DF).

Dettagli

L architettura del calcolatore (Terza parte)

L architettura del calcolatore (Terza parte) L architettura del calcolatore (Terza parte) Ingegneria Meccanica e dei Materiali Università degli Studi di Brescia Prof. Massimiliano Giacomin I dispositivi periferici periferia parte centrale sottosistema

Dettagli

Introduzione a Visual Studio 2005

Introduzione a Visual Studio 2005 Fondamenti di Informatica e Laboratorio T-AB Ingengeria Elettronica e Telecomunicazioni a.a. 2008/2009 Introduzione a Visual Studio 2005 Outline Solutions e Projects Visual Studio e il linguaggio C Visual

Dettagli

Corso di Sistemi di Elaborazione A.A. 2008/2009

Corso di Sistemi di Elaborazione A.A. 2008/2009 Università di Ferrara Facoltà di Ingegneria Docente: Ing. Massimiliano Ruggeri Mail: m.ruggeri@imamoter.cnr.it mruggeri@ing.unife.it Tel. 0532/735631 Corso di Sistemi di Elaborazione A.A. 2008/2009 Durata:

Dettagli

Virtualizzazione delle Periferiche. Corso di Sistemi Operativi

Virtualizzazione delle Periferiche. Corso di Sistemi Operativi Virtualizzazione delle Periferiche Corso di Sistemi Operativi Introduzione Una delle funzioni principali di un SO è di controllare tutte le periferiche connesse al PC SO deve: comandare i dispositivi ascoltare

Dettagli

PROGRAMMAZIONE MISTA. G. Frosini Programmazione mista Slide 1

PROGRAMMAZIONE MISTA. G. Frosini Programmazione mista Slide 1 PROGRAMMAZIONE MISTA G. Frosini Programmazione mista Slide 1 Caratteristiche del processore PC Processore PC (Processore Completo): processore didattico; schematizzazione (software compatibile) dei processori

Dettagli

CAP. 4: Aspetti generali del Sistema Operativo Linux. l http://home.dei.polimi.it/silvano/acso.htm

CAP. 4: Aspetti generali del Sistema Operativo Linux. l http://home.dei.polimi.it/silvano/acso.htm Struttura interna del sistema Operativo Linux CAP. 4: Aspetti generali del Sistema Operativo Linux CAP. 5: Funzionalità del calcolatore l http://home.dei.polimi.it/silvano/acso.htm Funzionalità del Sistema

Dettagli

memoria virtuale protezione

memoria virtuale protezione Memoria Virtuale Le memorie cache forniscono un accesso veloce ai blocchi di memoria usati più di recente La memoria virtuale fornisce un accesso veloce ai dati sulle memorie di massa usati più di recente.

Dettagli

Il sottosistema di I/O. Input Output digitale

Il sottosistema di I/O. Input Output digitale Il sottosistema di I/O Il sottosistema di I/O consente la comunicazione fra il calcolatore ed il mondo esterno. Fanno parte del sottosistema i dispositivi (Unità di I/O) per la comunicazione uomo/macchina

Dettagli

Il sistema di I/O. Calcolatori Elettronici 1. Architettura a bus singolo. Memoria. Unità di I/O. Interfaccia. Unità di I/O.

Il sistema di I/O. Calcolatori Elettronici 1. Architettura a bus singolo. Memoria. Unità di I/O. Interfaccia. Unità di I/O. Il sistema di I/O Calcolatori Elettronici 1 Architettura a bus singolo Memoria CPU Interfaccia Unità di I/O Interfaccia Unità di I/O Calcolatori Elettronici 2 1 Interfaccia Svolge la funzione di adattamento

Dettagli

DATA: 21-09-08 CLASSE: V a EL. TITOLO: ELABORAZIONE DEL SISTEMA OPERATIVO PER mp0

DATA: 21-09-08 CLASSE: V a EL. TITOLO: ELABORAZIONE DEL SISTEMA OPERATIVO PER mp0 DATA: 21-09-08 CLASSE: V a EL. TITOLO: ELABORAZIONE DEL SISTEMA OPERATIVO PER mp0 nelle lezioni precedenti abbiamo preso in esame tutte le caratteristiche e le funzionalità del microprocessore didattico

Dettagli

Dischetti di emergenza per sistemi Linux Creazione ed utilizzo di dischetti di emergenza

Dischetti di emergenza per sistemi Linux Creazione ed utilizzo di dischetti di emergenza Pagina 1 di 11 Dischetti di emergenza per sistemi Linux Creazione ed utilizzo di dischetti di emergenza Questo approfondimento vuole introdurre gli strumenti essenziali per il recupero di un sistema Linux

Dettagli

SISTEMI OPERATIVI 3 febbraio 2014 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR

SISTEMI OPERATIVI 3 febbraio 2014 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR SISTEMI OPERATIVI 3 febbraio 2014 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR Cognome: Nome: Matricola: 1. Ricordate che non potete usare calcolatrici o materiale didattico,

Dettagli

Software di base. Corso di Fondamenti di Informatica

Software di base. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Software di base Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

INTRODUZIONE AI SISTEMI OPERATIVI EMBEDDED

INTRODUZIONE AI SISTEMI OPERATIVI EMBEDDED 1 INTRODUZIONE AI SISTEMI OPERATIVI EMBEDDED ROUND ROBIN ROUND ROBIN CON INTERRUPT FUNCTION QUEUE SCHEDULING REAL TIME OPERATING SYSTEMS (RTOS) INTERRUPT PROGRAMMATI: TIMER INTRODUZIONE 2 In relazione

Dettagli

Corso di Sistemi di Elaborazione delle informazioni

Corso di Sistemi di Elaborazione delle informazioni Corso di Sistemi di Elaborazione delle informazioni Sistemi Operativi a.a. 2010/2011 Francesco Fontanella Il Sistema Operativo Sistema Operativo 2 Il Sistema Operativo Il Sistema Operativo è uno strato

Dettagli

Software relazione. Software di base Software applicativo. Hardware. Bios. Sistema operativo. Programmi applicativi

Software relazione. Software di base Software applicativo. Hardware. Bios. Sistema operativo. Programmi applicativi Software relazione Hardware Software di base Software applicativo Bios Sistema operativo Programmi applicativi Software di base Sistema operativo Bios Utility di sistema software Software applicativo Programmi

Dettagli

L Assembler 80x86 Concetti Generali. M. Rebaudengo M. Sonza Reorda P. Bernardi

L Assembler 80x86 Concetti Generali. M. Rebaudengo M. Sonza Reorda P. Bernardi L Assembler 80x86 Concetti Generali M. Rebaudengo M. Sonza Reorda P. Bernardi Sommario Introduzione Pseudo-Istruzioni Operatori Modi di Indirizzamento Istruzioni Sommario Introduzione Pseudo-Istruzioni

Dettagli

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL STRUTTURA DEI SISTEMI OPERATIVI 3.1 Struttura dei Componenti Servizi di un sistema operativo System Call Programmi di sistema Struttura del sistema operativo Macchine virtuali Progettazione e Realizzazione

Dettagli

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio Il software di base Software

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 3 Martedì 15-10-2013 1 Struttura ed organizzazione software dei sistemi

Dettagli

Antonio Cianfrani. Fondamenti di Reti - Prof. Marco Listanti - A.A. 2010/2011. INFOCOM Dept

Antonio Cianfrani. Fondamenti di Reti - Prof. Marco Listanti - A.A. 2010/2011. INFOCOM Dept Antonio Cianfrani Laboratorio Fondamenti di Reti 1. Introduzione ai Router IP Funzioni svolte dai Router I router operano allo strato 3 della pila protocollare OSI Individuano il cammino dei pacchetti

Dettagli

Processo di boot Linux su un PC x86 : il Bootstrap. http://www.imolug.org/wiki/index.php/bootstrap

Processo di boot Linux su un PC x86 : il Bootstrap. http://www.imolug.org/wiki/index.php/bootstrap Processo di boot Linux su un PC x86 : il Bootstrap http://www.imolug.org/wiki/index.php/bootstrap Bootstrap Durante il processo di avvio i normali strumenti del sistema operativo non sono disponibili,

Dettagli

ASM: catena di compilazione

ASM: catena di compilazione ASM: catena di compilazione Lorenzo Dematté October 2, 2011 1 La nostra Macchina Virtuale Una macchina virtuale o modello di programmazione è l ambiente nel quale i programmi girano. Di solito si parla

Dettagli

uomo Software (sistema operativo) hardware

uomo Software (sistema operativo) hardware uomo Software (sistema operativo) hardware 1 Sistema operativo Insieme di programmi che svolgono funzioni essenziali per l uso del sistema di elaborazione Questi programmi sono i primi ad essere eseguiti

Dettagli

Università degli Studi G. d'annunzio C.L. Economia e Informatica per l'impresa. Sistemi Operativi e Reti A.A. 2014/2015 prof.

Università degli Studi G. d'annunzio C.L. Economia e Informatica per l'impresa. Sistemi Operativi e Reti A.A. 2014/2015 prof. Università degli Studi G. d'annunzio C.L. Economia e Informatica per l'impresa Sistemi Operativi e Reti A.A. 2014/2015 prof. Gianluca Amato Architettura degli elaboratori Architettura Hardware Architettura

Dettagli

Tutorial: Toshiba Controller LCD T6963

Tutorial: Toshiba Controller LCD T6963 www.kiocciola.net Pagina 1 di 18 Tutorial: Toshiba Controller LCD T6963 Il chip Toshiba T6963 è un controller LSI (Large Scale Integration) per LCD (Liquid Crystal Display) monocromatici, costituiti da

Dettagli

Memoria virtuale e Sistema operativo. In riferimento all architettura x86 e al sistema operativo Linux

Memoria virtuale e Sistema operativo. In riferimento all architettura x86 e al sistema operativo Linux Memoria virtuale e Sistema operativo In riferimento all architettura x86 e al sistema operativo Linux 1 Premessa Questa NON è una lezione di un corso di Sistemi Operativi, né tantomeno di Linux Lo scopo

Dettagli

Processore PC. Spazio di indirizzamento. la ALU (Arithmetic and Logic Unit) la FPU (Floating Point Unit)

Processore PC. Spazio di indirizzamento. la ALU (Arithmetic and Logic Unit) la FPU (Floating Point Unit) Processore PC Faremo riferimento al cosiddetto processore PC, che rappresenta una schematizzazione dei processori a 32 bit presenti nei Personal Computer. Il processore è costituito da due unità fondamentali:

Dettagli

Parte V. Sistemi Operativi & Reti. Sistemi Operativi. Sistemi Operativi

Parte V. Sistemi Operativi & Reti. Sistemi Operativi. Sistemi Operativi Parte V & Reti Sistema operativo: insieme di programmi che gestiscono l hardware Hardware: CPU Memoria RAM Memoria di massa (Hard Disk) Dispositivi di I/O Il sistema operativo rende disponibile anche il

Dettagli

MACCHINA DI VON NEUMANN

MACCHINA DI VON NEUMANN I seguenti appunti non hanno la pretesa di essere esaustivi, ma hanno l unico scopo di illustrare in modo schematico i concetti necessari allo sviluppo del programma di Informatica della 1D del Liceo Scientifico

Dettagli

Corso di Sicurezza Informatica

Corso di Sicurezza Informatica Corso di Sicurezza Informatica Sicurezza del Software Ing. Giuseppe D Aquì Sicurezza nell informatica Un computer sicuro è un computer spento (Kevin Mitnick) Attacchi informatici Gli attacchi informatici,

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione Il Sistema Operativo Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela Fogli Cos

Dettagli

Sistema Operativo Compilatore

Sistema Operativo Compilatore MASTER Information Technology Excellence Road (I.T.E.R.) Sistema Operativo Compilatore Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Il Sistema

Dettagli

MEMORIA VIRTUALE. Programma: Processore: Memoria fisica: Caso più semplice:

MEMORIA VIRTUALE. Programma: Processore: Memoria fisica: Caso più semplice: MEMORIA VIRTUALE Programma: utilizza indirizzi che prendono il nome di indirizzi logici: l insieme degli indirizzi logici costituisce il cosiddetto spazio logico. Processore: utilizza indirizzi che prendono

Dettagli

Blocchi funzione: FbModbusAsciiMs

Blocchi funzione: FbModbusAsciiMs Pagina 1 di 6 ELSIST Srl, www.elsist.it Blocchi funzione MNL041Q000 FbModbusAsciiMs Questo blocco funzione permette lo scambio di dati tra due sistemi, uno master ed uno slave, utilizzando una connessione

Dettagli

Capitolo 11 -- Silberschatz

Capitolo 11 -- Silberschatz Implementazione del File System Capitolo 11 -- Silberschatz Implementazione del File System File system: Definizione dell aspetto del sistema agli occhi dell utente Algoritmi e strutture dati che permettono

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica Il software Dipartimento di Ingegneria dell Informazione Universitàdegli Studi di Parma SOFTWARE I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono

Dettagli

Infrastrutture Software

Infrastrutture Software Infrastrutture Software I componenti fisici di un sistema informatico sono resi accessibili agli utenti attraverso un complesso di strumenti software finalizzati all utilizzo dell architettura. Si tratta

Dettagli

Introduzione ai sistemi operativi

Introduzione ai sistemi operativi Introduzione ai sistemi operativi Che cos è un S.O.? Shell Utente Utente 1 2 Utente N Window Compilatori Assembler Editor.. DB SOFTWARE APPLICATIVO System calls SISTEMA OPERATIVO HARDWARE Funzioni di un

Dettagli

Introduzione a GCC: GNU Compiler Collection

Introduzione a GCC: GNU Compiler Collection Introduzione a GCC: GNU Compiler Collection Caratteristiche di GCC Compilatore multipiattaforma modulare Disponibile per tutti i principali sistemi operativi Può produrre programmi per la maggior parte

Dettagli

Il computer: primi elementi

Il computer: primi elementi Il computer: primi elementi Tommaso Motta T. Motta Il computer: primi elementi 1 Informazioni Computer = mezzo per memorizzare, elaborare, comunicare e trasmettere le informazioni Tutte le informazioni

Dettagli

Software Hardware. Livello ISA. Progettisti hardware. Progettazione di un ISA

Software Hardware. Livello ISA. Progettisti hardware. Progettazione di un ISA Livello ISA Instruction Set Architecture: l insieme delle istruzioni eseguibili dal processore: linguaggio macchina Presentazione generale dei linguaggi macchina. Elenco degli aspetti salienti di un linguaggio

Dettagli

L informatica comprende:

L informatica comprende: Varie definizioni: INFORMATICA Scienza degli elaboratori elettronici (Computer Science) Scienza dell informazione Definizione proposta: Scienza della rappresentazione e dell elaborazione dell informazione

Dettagli

- Guida a VMware - Guida a VMware. Questa guida vi aiuterà passo passo nell installazione e la configurazione di VMware.

- Guida a VMware - Guida a VMware. Questa guida vi aiuterà passo passo nell installazione e la configurazione di VMware. 1 di 5 05/12/2008 1.06 Guida a VMware Scritto da Aleshotgun Venerdì 08 Febbraio 2008 17:44 - Guida a VMware - Questa guida vi aiuterà passo passo nell installazione e la configurazione di VMware. Prima

Dettagli

Corso di Laurea in Matematica. Seminario C/C++ Lorenzo Dusty Costa. Università degli Studi di Milano Dipartimento di Matematica

Corso di Laurea in Matematica. Seminario C/C++ Lorenzo Dusty Costa. Università degli Studi di Milano Dipartimento di Matematica Corso di Laurea in Matematica Seminario C/C++ Costa Università degli Studi di Milano Dipartimento di Matematica 19 Ottobre 2011 Cos'é un'ide IDE = Integrated Development Environment Consiste in: Editor

Dettagli

Informatica di Base - 6 c.f.u.

Informatica di Base - 6 c.f.u. Università degli Studi di Palermo Dipartimento di Ingegneria Informatica Informatica di Base - 6 c.f.u. Anno Accademico 2007/2008 Docente: ing. Salvatore Sorce Architettura dei calcolatori I parte Introduzione,

Dettagli

Software Hardware. Livello ISA

Software Hardware. Livello ISA Livello ISA Instruction Set Architecture: l insieme delle istruzioni eseguibili dal processore: linguaggio macchina Presentazione generale dei linguaggi macchina. Elenco degli aspetti salienti di un linguaggio

Dettagli

Controllo I/O Costituito dai driver dei dispositivi e dai gestori dei segnali d interruzione.

Controllo I/O Costituito dai driver dei dispositivi e dai gestori dei segnali d interruzione. C6. REALIZZAZIONE DEL FILE SYSTEM Struttura del file system Un file è analizzabile da diversi punti di vista. Dal punto di vista del sistema è un contenitore di dati collegati tra di loro, mentre dal punto

Dettagli

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione Il sistema di I/O Hardware di I/O Interfacce di I/O Software di I/O Introduzione 1 Sotto-sistema di I/O Insieme di metodi per controllare i dispositivi di I/O Obiettivo: Fornire ai processi utente un interfaccia

Dettagli

11 Realizzazione del File System. 11.1.1 Struttura a livelli (fig. 11.1) 11.4 Allocazione dei file

11 Realizzazione del File System. 11.1.1 Struttura a livelli (fig. 11.1) 11.4 Allocazione dei file 11 Realizzazione del File System 1 Metodi di allocazione Allocazione contigua Allocazione concatenata e varianti Allocazione indicizzata e varianti Gestione dello spazio libero 11.1.1 Struttura a livelli

Dettagli

Capitolo 3 Operazioni di ingresso e uscita

Capitolo 3 Operazioni di ingresso e uscita Capitolo 3 Operazioni di ingresso e uscita 3.1. Per assicurare che i dati siano letti solo una volta. 3.2. Assumendo i registri dell interfaccia dello schermo in Figura 3.3, si può usare il seguente programma:

Dettagli

Il processore - CPU. PDF created with pdffactory trial version www.pdffactory.com

Il processore - CPU. PDF created with pdffactory trial version www.pdffactory.com Il processore - CPU (CENTRAL PROCESSING UNIT) Funzionamento o Programmi e dati risiedono in file memorizzati in memoria secondaria. o Per essere eseguiti (i programmi) e usati (i dati) vengono copiati

Dettagli

Embedded Software Sviluppo di uno Scheduler di base per PIC18. Tutorial. Embedded Software. Sviluppo di uno Scheduler di base per PIC18.

Embedded Software Sviluppo di uno Scheduler di base per PIC18. Tutorial. Embedded Software. Sviluppo di uno Scheduler di base per PIC18. Tutorial Embedded Software Sviluppo di uno Scheduler di base per PIC18 Pagina 1 Sommario 1. INTRODUZIONE... 3 2. COSA CI SERVE?... 3 3. UN PO DI TEORIA... 4 4. DALLA TEORIA ALLA PRATICA... 5 5. IMPLEMENTAZIONE...

Dettagli

Connessione ad internet

Connessione ad internet Introduzione al C++ Connessione ad internet Istruzioni per la connessione internet: - una volta connessi, aprire un browser (firefox) - in Modifica/preferenze/avanzate/rete/impostazioni - attivare la modalità

Dettagli

Microelettronica. Architettura del processore ARM. Stefano Salvatori. Università degli Studi Roma Tre. (salvator@uniroma3.it) Microelettronica

Microelettronica. Architettura del processore ARM. Stefano Salvatori. Università degli Studi Roma Tre. (salvator@uniroma3.it) Microelettronica Microelettronica Architettura del processore ARM Stefano Salvatori (salvator@uniroma3.it) Microelettronica Sommario Architettura ARM Differenze con i RISC Programmer s model Sistemi di sviluppo Microelettronica

Dettagli

BREVE GUIDA ALL UTILIZZO DI BFTC

BREVE GUIDA ALL UTILIZZO DI BFTC BREVE GUIDA ALL UTILIZZO DI BFTC Rev. 1.0.0 11 Ottobre 2014 Digital Technology Art srl Digital Technology Art srl BFTC Introduzione 1 INDICE INTRODUZIONE INSTALLAZIONE IMPOSTARE IL PLUG IN CREARE UN NUOVO

Dettagli

Sistemi Operativi. Funzioni e strategie di progettazione: dai kernel monolitici alle macchine virtuali

Sistemi Operativi. Funzioni e strategie di progettazione: dai kernel monolitici alle macchine virtuali Modulo di Sistemi Operativi per il corso di Master RISS: Ricerca e Innovazione nelle Scienze della Salute Unisa, 17-26 Luglio 2012 Sistemi Operativi Funzioni e strategie di progettazione: dai kernel monolitici

Dettagli

Antifork Research, Inc. HACKERS RESEARCH VIRTUAL LAB. Shellcode Advanced. Angelo Dell'Aera Security Date 2004 Ancona 29/04/2004

Antifork Research, Inc. HACKERS RESEARCH VIRTUAL LAB. Shellcode Advanced. Angelo Dell'Aera <buffer@antifork.org> Security Date 2004 Ancona 29/04/2004 Antifork Research, Inc. HACKERS RESEARCH VIRTUAL LAB Shellcode Advanced Angelo Dell'Aera Security Date 2004 Ancona 29/04/2004 Esplorare mondi nuovi... In questa presentrazione analizzeremo

Dettagli

Architettura dei calcolatori

Architettura dei calcolatori Architettura dei calcolatori Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA Uff. 0577233606 rigutini@dii.unisi.it http://www.dii.unisi.it/~rigutini/

Dettagli

Sistema Operativo di un Router (IOS Software)

Sistema Operativo di un Router (IOS Software) - Laboratorio di Servizi di Telecomunicazione Sistema Operativo di un Router (IOS Software) Slide tratte da Cisco Press CCNA Instructor s Manual ed elaborate dall Ing. Francesco Immè IOS Un router o uno

Dettagli

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO 1 Domanda [1 punto] Dato il formato in virgola mobile su 32 bit così definito (precisione singola): o 1

Dettagli

Forse la periferica più importante di un elaboratore File system:

Forse la periferica più importante di un elaboratore File system: Forse la periferica più importante di un elaboratore File system: Un insieme di funzionalità per astrarre i dati grezzi presenti in memoria di massa e interpretare questi ultimi in termini di files e cartelle

Dettagli

----------------------------------------------------------------

---------------------------------------------------------------- ---------------------------------------------------------------- utilizzo frequente di chiamate a.. A differenza del Pascal, il C permette di operare con assegnamenti e confronti su dati di tipo diverso,

Dettagli

Lezione 5: Software. Firmware Sistema Operativo. Introduzione all'informatica - corso E

Lezione 5: Software. Firmware Sistema Operativo. Introduzione all'informatica - corso E Lezione 5: Software Firmware Sistema Operativo Architettura del Calcolatore La prima decomposizione di un calcolatore è relativa a due macrocomponenti: Hardware e Software Firmware: strato di (micro-)programmi

Dettagli