Che materia stai cercando?

Anteprima

ESTRATTO DOCUMENTO

Sulla base di questa rappresentazione della funzione dallo spazio di indirizzamento alle locazioni

effettive di memoria, una macchina di 4K senza memoria virtuale ha semplicemente una

corrispondenza fissa tra gli indirizzi da 0 a 4095 e 4096 byte di memoria. Una domanda

interessante è: che cosa succede se un programma salta ad un indirizzo, tra 8192 e 12287? Nella

macchina senza memoria virtuale il programma provoca un trap per l'errore, che stampa un

messaggio abbastanza rude come "riferimento a memoria inesistente" e termina il programma.

Nella macchina con memoria virtuale si verifica la seguente sequenza di passi:

1. i contenuti della memoria centrale sono salvati in una memoria secondaria;

2. i byte da 8192 a 12287 sono localizzati nella memoria secondaria;

3. i byte da 8192 a 12287 sono caricati nella memoria centrale;

4. la mappa degli indirizzi viene cambiata per rappresentare gli indirizzi 8192 a 12287 sulle

locazioni di memoria da 0 a 4095;

5. l’esecuzione continua come se non fosse successo nulla d’insolito.

Questa tecnica per l'esecuzione dell'overlay automatico è chiamata paginazione e i pezzi di

programma letti dalla memoria secondaria sono detti pagine.

È possibile anche un modo più sofisticato per far corrispondere lo spazio d’indirizzo con gli

indirizzi effettivi di memoria. Per chiarezza, chiameremo gli indirizzi a cui il programma può

fare riferimento spazio di indirizzamento virtuale e gli indirizzi di memoria effettivamente

cablati spazio di indirizzamento fisico. Una mappa di memoria mette in relazione gli indirizzi

virtuali con gli indirizzi fisici. Presumiamo che ci sia abbastanza spazio nella memoria

secondaria per memorizzare l’intero programma e i suoi dati.

I programmi sono scritti come se ci fosse abbastanza memoria centrale per l’intero spazio di

indirizzamento virtuale, anche se ciò non si verifica. I programmi possono caricare o

memorizzare una qualsiasi parola nello spazio di indirizzamento virtuale, o saltare ad una

istruzione localizzata in un posto qualsiasi entro lo spazio di indirizzamento virtuale, senza

preoccuparsi che in realtà non ci sia abbastanza memoria fisica. Infatti il programmatore può

scrivere programmi senza sapere se la memoria virtuale esiste. Il calcolatore sembra avere una

grossa memoria.

Per sottolinearlo ancora una volta, la paginazione dà al programmatore l'illusione di una grande

memoria centrale continua e lineare, della stessa dimensione dello spazio di indirizzamento,

anche se in pratica la memoria centrale disponibile può essere più piccola dello spazio di

indirizzamento.

Struttura a moduli

Useremo il termine di modulo di elaborazione, per denotare delle entità attive, capaci cioè di

autocontrollo nel gestire sia la propria evoluzione interna che le interazioni con gli altri moduli.

Un concetto usato è quello di tipo di dato astratto, cioè di entità che implementano precise

strutture dati rese visibili dall’esterno solo mediante le operazioni su di esse definite. Una

computazione può essere vista come un insieme di istanze di tipi di dati astratti cooperanti: la

cooperazione avviene mediante l’invocazione reciproca di operazioni ed è resa possibile

dall’esistenza di precise interfacce a cui in generale saranno associati diritti di accesso o di

protezione.

Un modulo può decidere di non ascoltare invocazioni da altri; una volta in possesso delle

informazioni necessarie è in grado di eseguire nel proprio ambiente di elaborazioni una o più

operazioni; le modalità di cooperazione con gli altri moduli devono essere congruenti con la

definizione delle interfacce fra moduli.

Il microprocessore

In tutti i PC è il microprocessore che esegue ogni tipo di programma. Il microprocessore, o unità

di elaborazione centrale (CPU), svolge calcoli, confronti e trasferimenti di dati in risposta ai

4

programmi memorizzati. La CPU è composta da diverse parti: l’unità di controllo che ha il

compito di prelevare le istruzioni dalla memoria principale e di determinarne il tipo; l’unità

aritmetico-logica esegue le operazioni elementari. La CPU contiene anche una piccola memoria

ad alta velocità usata per memorizzare i risultati temporanei e certe informazioni di controllo.

Questa memoria è costituita da alcuni registri, ognuno dei quali ha una sua finzione. Il registro

più importante è l’accumulatore di programma, che indica la prossima istruzione da eseguire. Un

altro registro è il registro delle istruzioni(IR) che contiene le istruzioni che stanno per essere

eseguite. La CPU controlla le operazioni fondamentali del computer, inviando e ricevendo

segnali di controllo, indirizzi di memoria e dati da una parte del computer ad un’altra, lungo un

gruppo di linee di collegamento elettronico (BUS).Il bus è semplicemente un gruppo di linee

comuni sulla scheda madre, a cui sono collegate tutte le diverse sezioni di controllo de computer.

Vi sono due tipi di bus: dati e indirizzi. Il bus indirizzi utilizza 20 linee si segnale per identificare

le celle di memoria e le periferiche collegate ad esso. Ciascuna linea può assumere due valori 0 e

20

1(bit), quindi questo bus può identificare fino a 2 indirizzi. Il bus dati opera in stretto

collegamento con il bus indirizzi per trasferire i dati all’interno del computer. Solitamente il bus

dati è di otto linee, quindi si hanno 8 bit. Uno dei compiti essenziali della CPU è di rispondere

agli interrupt hardware. Questi sono segnali generati dai componenti del PC, che in questa

maniera richiedono un particolare servizio da parte della CPU. Il microprocessore dispone di un

circuito controllore programmabile degli interrupt (PIC) che segue gli interrupt e li segnala uno

alla volta alla CPU. Questa risponde eseguendo una speciale routin software detta di gestione

dell’interrupt. Alcune parti del computer sono in grado di trasferire dati da e verso la memoria

del computer senza passare per la CPU. Questa operazione è detta accesso diretto alla memoria

(DMA), e viene gestita da un chip detto appunto gestore del DMA. Il suo scopo principale è

consentire la lettura/scrittura sui dischi senza far lavorare ulteriormente la CPU.

La memoria

La memoria è quella parte del calcolatore in cui sono immagazzinati i programmi e i dati.

L’unità fondamentale della memoria è la cifra binaria, chiamata bit, che può assumere i valori 0

e 1. La memoria è costituito da un numero di locazioni, ognuna delle quali può immagazzinare 8

bit (byte). Ogni locazione è identificata da un indirizzo, al quale i programmi si riferiscono. Se

una memoria ha n celle, essa avrà gli indirizzi da 0 a n-1. Tutte le celle contengono lo stesso

numero di bit. L’8086 è un microprocessore a sedici bit in teoria quindi non potrebbe indirizzare

più di 64kB di memoria, in effetti arriva fino a 1024kB. Ciò è possibile perché l’8086 usa un bus

indirizzi di 20 bit. Mentre la memoria dei PC è suddivisa in un gran numero di singoli byte,

molte operazioni vengono eseguite su parole di 16 bit, che vengono poste in memoria all’interno

di 2 qualsiasi byte adiacenti. Il byte meno significativo della parola viene allocato nelle locazione

di memoria ad indirizzo più basso, e quello più significativo nella successiva locazione. Per la

particolare collocazione dei byte in questo schema, tale tipo di memorizzazione viene anche

chiamato “a rovescio”.

E6

9C

Indirizzi crescenti valore della parola: (E6C9) H

Indirizzi

L’8086 suddivide lo spazio in memoria in segmenti, ciascuno dei quali è lungo 64kB. Ogni

segmento incomincia ad un indirizzo di paragrafo. Per accedere ai singoli byte o parole si usa un

offset che punta ad una particolare locazione d’un byte entro quel segmento. Dato che gli offset

vengono misurati a partire dal segmento, essi vengono anche chiamati indirizzi relativi o offset

relativi. Un segmento e un offset insieme costituiscono un indirizzo segmentato che può servire

ad indicare una qualsiasi locazione entro lo spazio di 1024kB indirizzabile dall’8086. Questo

5

converte un dato indirizzo segmentato fornito su 32 bit in un indirizzo fisico a 20 bit impiegando

il valore del segmento come numero di paragrafo e sommandovi il valore dell’offset. In pratica,

l’8086 sposta di 4 bit verso sinistra il valore del segmento, e vi somma l’offset per dare un

indirizzo a 20 bit (indirizzo fisico).

Es. 1234:4321 12340+4321=16661

I registri

L’8086 è stato concepito per eseguire istruzioni e svolgere operazioni ritmetiche e logiche, oltre

che per ricevere istruzioni e trasferire dati da e verso la memoria. Per fare questo impiega un

certo numero di registri a 16 bit. Di questi registri ne esistono 14 in tutto, ognuno con un proprio

impiego. Quattro registri di transito sono usati dai programmi per contenere temporaneamente i

risultati parziali e gli operandi delle operazioni aritmetiche e logiche. Quattro registri segmento

contengono i valori dei segmenti. Cinque registri puntatore e indice contengono gli offset da

usare assieme ai valori dei registri segmentoper localizzare dati in memoria. In fine un registro

dei flag contiene 9 flag di un bit ciascuno utilizzati per memorizzare informazioni di stato.

I registri di transito

Quando un computer elabora dei dati, gran parte del tempo il microprocessore lo adopera per

trasferire i dati da e verso la memoria. Il tempo di elaborazione però può essere ridotto con

l’utilizzo dei registri di transito, che presentano tempi di accesso notevolmente inferiori rispetto a

quelli delle memorie. Questi sono i registri: AX, BX, CX, DX. Ciascuno di essi può essere

utilizzato come due registri a 8 bit. Tali registri corrispondenti di ordine alto sono detti: AH, BH,

CH, DH; quelli di ordine basso sono: AL, BL, CL, DL. Anche se questi registri sono disponibili

per ogni tipo di lavoro temporaneo, ognuno è specificatamente idoneo per un impiego

particolare:

• Il registro AX (accumulatore) è il registro principale per eseguire le operazioni aritmetiche

• Il registro BX (base) può essere impiegato per puntare all’inizio di una tabella di conversione

entro la memoria

• Il registro CX (contatore) viene usato come contatore per il controllo dei cicli iterativi e per

ripetuti spostamenti dei dati.

• Il registro DX (dati) viene usato per scopi generali

I registri segmento

L’indirizzo completo di una locazione di memoria è costituito un valore a 16 bit di segmento e di

un offset a 16 bit entro tale segmento. Quattro registri, denominati CS, DS, ES e SS, vengano

impiegati per identificare 4 specifici segmenti di memoria. Ciascun registro segmentato viene

usato per un particolare indirizzamento:

• Il registro CS definisce il segmento del codice, che contiene il programma da eseguire

• I registri DS e ES definiscono i segmenti dei dati in cui vengono memorizzati i dati utilizzati

dal programma

• Il registro SS definisce il segmento dello stack

In un programma .come questi 4 registri si riferiscono ad aree di memoria adiacenti.

CS Programma eseguibile

DS Dati del programma

SS Stack CS:IP

I registri degli offset

Cinque registri vengono usati assieme ai registri segmento per definire degli indirizzi segmentati.

Un registro denominato puntatore alle istruzioni (IP) contiene l’offset dell’istruzione corrente del

programma nel segmento CS; due registri detti registri stack, sono collegati agli stack; e gli

6

ultimi due, detti registri indice, vengono usati per indirizzare stringhe di dati. Il puntatore alle

istruzioni chiamato anche contatore di programma, contiene l’offset entro il segmento del

programma delle istruzione in corso d’esecuzione. Viene usato insieme a CS per definire la

locazione della successiva istruzione da eseguire. I registri stack, che sono il puntatore dello

stack (SP) e il puntatore alla base (BP), forniscono agli offset entro il segmento dello stack. I

registri indice, detti rispettivamente indice sorgente (SI) e indice destinazione (DI) si possono

impiegare per l’indirizzamento ai dati per scopi generali. Inoltre, tutte le operazioni di

spostamento e confronto fra stringhe usano SI e DI per indirizzarsi a stringhe di dati.

I registri dei flag

L’ultimo registro, detto registro dei flag, in effetti è una raccolta di singoli bit di stato e di

controllo chiamati flag. I flag sono conservati in un registro in modo da poter essere salvati e

recuperati come gruppo, oppure ispezionati come dati normali. Esistono nove flag di un bit nel

registro dei flag dell’8086, che è a 16 bit, quindi 7 bit non sono utilizzati. I flag si possono

dividere in due gruppi: 6 flag di stato, che memorizzano informazioni di stato del processore, e 3

flag di controllo, che distinguono alcune istruzioni dell’8086.

Lo stack

Offre ai programmi un posto dove salvare e recuperare traccia del lavoro in corso. L’impiego più

importante dello stack è per memorizzare l’indicazione del punto in cui certe subroutine sono

state richiamate, e dei parametri che ad esse sono stati passati. Lo stack può essere impiegato

anche come area di memoria temporanea. Lo stack (pila) opera sempre in ordine LIFO. Nuovi

dati vengono inseriti in cima alla pila (PUSH), e dati vengono recuperati dalla cima (POP).

(SP=1004)

:1004 3000 cima dello stack

:1006 4D00 

:1008 5E00 fondo dello stack

Lo stack viene utilizzato partendo dal fondo (indirizzo più alto) fino alla cima (indirizzo più

basso). Perciò quando un dato viene caricato in cima allo stack, viene inserito agli indirizzi di

memoria immediatamente precedenti quello dell’attuale cima dello stack. Lo stack cresce

procedendo all’indietro, per cui ad ogni dato aggiunto l’indirizzo della cima dello stack si sposta

verso valori inferiori, e corrispondentemente lo SP viene decrementato.

Non c’è un modo semplice per determinare le dimensioni dello stack di cui un programma può

avere necessità; una stima, una stima in genere per eccesso, assegna allo stack uno spazio di

circa 2KB.

Indirizzamento di memoria tramite registri

Per l'indirizzamento alla memoria si usa sempre la combinazione di un valore segmento e di un

offset relativo. Il valore di segmento viene in ogni caso ricavato da uno dei quattro registri

segmento. L'offset invece può essere specificato in vari modi.

Nome Indirizzo fisico Esempio Commenti

Immediato Fa parte dell’istruzione mov ax,1234h Memorizza 1234h in AX

Diretto Fa parte dell’istruzione mov ax,[1234h] Copia in AX il valore della

locazione 1234h.Il registro

segmentato per default è DS

7

Registro Contenuto in BX, SI, DI o BP mov ax,[bx] Copia in AX il valore

indiretto dell’offset contenuto in BX. Il

registro segmentato di default

è DS per [BX], [SI], [DI]; SS

per BP

Da base Somma dello scostamento mov ax, [bx+2] Copia in AX il valore locato

(parte dell’istruzione) e del o mov ax,2[bx] 2 byte oltre l’offset dato da

valore in BX o BP BX. Il registro segmentato di

default è DS per [BX]; [BP] è

SS

Indicizzato Somma dello scorrimento e mov ax,[si+2] Copia in AX il valore locato

del valore in SI o DI o mov ax,2[si] 2 byte oltre l’offset contenuto

in SI. Il registro segmentato

di default è DS

Indicizzato Somma dello scostamento, del mov ax,[bp+si+2] L’offset è la somma dei valori

da base valore in SI o DI, e del valore o mov ax,2[bp+si] in BP e SI+2. Se si usa BX, il

in BX o BP o mov ax,2[bp][si] registro segmentato di default

è DS; per BP è SS.

Stringa di origine: registro Movsb Copia la stringa partendo da

Indirizzamento

stringa indiretto con uso si SI. Stringa DS:[SI] dalla locazione

destinazione: registro indiretto ES:[DI]

con uso di DI

Ognuno dei modi diversi per formare un indirizzo fisico ha il suo impiego. Si possono usare gli

indirizzamenti immediato e diretto quando si conosce in anticipo l'offset di una particolare

locazione di memoria. Si deve ricorrere a uno degli altri modi quando non si sa quale potrà

essere l'indirizzo fino al momento dell’esecuzione del programma.

Si usano le parentesi quadre, [ ], per indicare che il valore fra esse incluso è un offset relativo. La

regola chiave è: quando non ci sono parentesi quadre, si utilizza l'effettivo valore contenuto nel

registro per l'operazione volta a volta specificata.

Gli interrupt

Un interrupt è la segnalazione al microprocessore che occorre la sua attenzione immediata. I

microprocessori possono rispondere sia a interrupt generati dal software che dall'hardware. Un

dispositivo hardware può generare un segnale d'interrupt che viene elaborato dal controllore

programmabile degli interrupt (PIC) e passato al microprocessore via software, l’istruzione INT

genera un interrupt. In entrambi i casi il microprocessore arresta la sua attività precedente ed

esegue una routine residente in memoria detta di gestione d'interrupt. Quando questa ha svolto i

suoi compiti. il microprocessore riprende l'esecuzione dal punto in cui l'interrupt l'aveva fermato.

L'8086 supporta 256 interrupt differenti. Identificati ciascuno da un numero fra 00H e FFH (da 0

a 255 dec). L'indirizzo segmentato di ciascuna delle 256 routine di gestione del relativo interrupt

è memorizzato dentro una tabella dei vettori d'interrupt che parte dall'indirizzo 0000:0000H

(ossia dal primo byte della RAM disponibile).

Interrupt hardware

Il microprocessore risponde a un interrupt generato dall'hardware in modo analogo a un interrupt

software: ossia trasferendo il controllo a un'apposita routine di gestione dell'interrupt. La

differenza importante sta nel modo con cui viene segnalato l'interrupt. Un dispositivo come il

timer di sistema, il disco fisso, la tastiera, o una delle porte di comunicazione seriale può

generare un segnale d'interrupt su un gruppo di linee riservate di richiesta d'interrupt (IRQ,

8

Interrupt ReQuest). Queste linee vengono continuamente sorvegliate dal circuito del PIC, che

assegna a ciascuna un particolare numero d'interrupt. Quando interviene un particolare interrupt

hardware, il PIC colloca il relativo numero d'interrupt sul bus dati del sistema dove il

microprocessore può leggerlo. Il PIC assegna anche determinate priorità alle varie richieste

d'interrupt. Se, mentre viene elaborato un’interrupt su richiesta di una periferica, sopravviene una

richiesta d'interrupt hardware a minore priorità, il PIC ritarda l'accettazione dell’interrupt a

priorità inferiore fino a quando la routine di gestione dell'interrupt della periferica precedente

segnala di aver terminato l'esecuzione.

C'è un particolare interrupt hardware che "salta" completamente il PIC: è l'interrupt non

mascherabile (NMI, Non-Maskable Interrupt), a cui viene assegnato il numero d'interrupt 02H,

NMI è impiegato dai dispositivi che richiedono una priorità assoluta, "ora e subito", rispetto a

tutte le altre funzioni della CPU.

Ogni volta che interviene uno di questi interrupt hardware la CPU utilizza lo stack corrente per

salvare CS:IP e il registro dei flag. Se lo stack risulta troppo piccolo, o se si stava manipolando

SS o SP quando è avvenuto l'interrupt, la CPU rischia di danneggiare dati importanti quando

salva CS:IP e i flag, quindi si provvede a disabilitare preventivamente gli interrupt hardware

coll'istruzione CLI prima di aggiornare SS. Ciò evita la possibile generazione di un interrupt

hardware fra le due istruzioni MOV, in un momento in cui SS:SP punta a una locazione

completamente sbagliata.

Le routine di avviamento

Il primo compito che i programmi della ROM debbono svolgere è l’avviamento del computer. Le

routine di avviamento svolgono compiti diversi:

- effettuano un rapido controllo dell'affidabilità del computer (e delle routine della ROM) per

accertare che tutto sia in ordine

- inizializzano i chip e i dispositivi standard collegati al computer

- inizializzano la tabella dei vettori d'interrupt

- controllano quali dispositivi opzionali sono collegati al sistema

- caricano infine il sistema operativo dal disco

Il test di affidabilità (POST), serve per controllare che il computer sia pronto a funzionare. Tutte

le routine del POST sono veloci, salvo per il controllo della memoria.

Il processo di inizializzazione è un po' più complesso. Una routine inserisce i valori prefissati dei

vettori d'interrupt. Questi valori di default puntano alle apposite routine di gestione degli errori

poste entro il ROM BIOS, oppure puntano a certe routine "vuote" nel ROM BIOS, che non

fanno nulla ma possono venire sostituite successivamente a opera del sistema operativo oppure

da routine di gestione d'interrupt definite dall'utente. Un'altra routine d'inizializzazione determina

che tipo di dispositivi risulta collegato al computer, e pone in memoria bassa un elenco dei

relativi indirizzi. Le routine del POST apprendono la configurazione hardware in base a un

esame logico e appositi controlli. In pratica, è come se il programma d'inizializzazione lanciasse

un appello a ogni possibile dispositivo "Ci sei?!", e registra la relativa risposta.

Le routine di inizializzazione verificano pure l'esistenza di nuovi dispositivi e di estensioni della

ROM. Se ce ne sono, viene passato momentaneamente il controllo alle estensioni della ROM, in

modo che queste possano procedere alla rispettiva inizializzazione. Poi le routine di

inizializzazione proseguono nell'esecuzione delle rimanenti routine di avviamento. La parte

finale della procedura di avviamento, dopo il POST, l'inizializzazione e l'acquisizione delle

estensioni della ROM, è costituita dal cosiddetto caricatore bootstrap, Si tratta di una breve

routine che carica un programma dal disco. Sostanzialmente, il caricatore di bootstrap della

ROM tenta di leggere un programma di boot (avviamento del sistema) dal primo settore del

disco. Se questa lettura ha successo, il caricatore della ROM trasferisce il controllo del computer

a questo programma. Il programma di "boot" del disco a sua volta procede a caricare un altro

9

programma dal disco, più lungo, normalmente un sistema operativo come il DOS. Se il

caricatore bootstrap non trova il programma di boot sul disco, visualizza un messaggio di errore.

Una volta che si è verificato uno o l’altro di questi eventi, la procedura di avviamento è

terminata.

La mappa di memoria dei caratteri in modo testo

Nei modi testo, la mappa di memoria comincia dall'angolo sinistro in alto dello schermo.

Utilizzando 2 byte per ogni posizione carattere. Le coppie di byte per le successive posizioni si

succedono in memoria nel medesimo ordine in cui si legge lo schermo da sinistra verso destra e

dall'alto in basso. I modi testo con un formato schermo di 80x25 caratteri: ogni riga occupa

80x2=160 byte di memoria. Conseguentemente lo schermo di formato 80x25 richiede 4 KB di

memoria, e l'area di 16 KB può accomodare fino a 4 pagine video. Normalmente ogni pagina

video parte da un indirizzo multiplo di 1 KB.

La mappa di memoria dei pixel nei modi grafici

Nei modi grafici, la mappa di memoria dei pixel risulta lineare, come nei modi testo, i pixel sono

memorizzati da sinistra a destra in ogni byte, e le varie righe di pixel si succedono nello stesso

ordine nel buffer video. Su MCGA e VGA, per esempio, i singoli pixel sono rappresentati da 8

bit del modo 320x200, 256 colori.

Struttura fisica dei dischi

Per comprendere come i dati vengono organizzati su un disco, consideriamo la struttura fisica del

disco stesso e del meccanismo che "legge" e "scrive". Osserviamo subito che i dischi fissi hanno

sostanzialmente la stessa geometria base dei floppy.

Entro il contenitore quadrato di plastica che racchiude un dischetto c'è un disco circolare di

materiale plastico, ricoperto di un materiale magnetico. Un'unità di lettura e scrittura (drive)

memorizza i dati sui dischi registrandovi e poi rileggendo le configurazioni magnetiche che

rappresentano i dati digitali. Poiché entrambe le facce del disco sono rivestite, tutte e due

possono essere utilizzate per memorizzare i dati. Un'unità a dischi contiene un motore che fa

ruotare il dischetto a velocità costante, il drive possiede internamente due testine di

lettura/scrittura, una per ciascuna faccia del disco. Le testine sono montate su un braccio che le

sposta all'unisono su una qualsiasi posizione vicina o lontana dal centro del disco. La testina di

lettura/scrittura di un drive può magnetizzare il mezzo che riveste il dischetto, per memorizzarvi

i dati; questi poi possono essere recuperati decodificando le configurazioni magnetiche registrate

sulla superficie del disco. La geometria di un disco fisso è simile a quella di un dischetto. I dischi

fissi girano tuttavia a una velocità assai superiore, e pertanto sono di metallo o vetro rivestiti, e

non di plastica. I dischi fissi inoltre in genere sono formati dalla sovrapposizione di più dischi

che ruotano assieme, i relativi drive sono dotati di più testine di lettura/scrittura, una per ciascuna

faccia di ciascun disco.

Memorizzazione dei dati

Il modo con cui i dati sono disposti sui dischetti e sui dischi fissi è strettamente legato alla

geometria dell'hardware. Quando una particolare testina di lettura/scrittura è fissa in una certa

posizione, sotto di essa il disco rotante fa scorrere un anello di materiale magnetico. Per ogni

posizione della testina relativa al centro del disco c'è un corrispondente anello di materiale

magnetico, su cui sono memorizzati i dati. Questi anelli vengono chiamati tracce.

Ogni traccia di un disco, viene suddivisa in tratti più corti chiamati settori. I settori e le tracce

ricevono una numerazione progressiva, quindi si può specificare la posizione di un particolare

byte di dati sul disco indicandone il numero di traccia e quello di settore.

10

Dato che sia i dischetti a doppia faccia sia i dischi rigidi hanno comunque più di una faccia,

occorre immaginare una struttura tridimensionale per localizzare un byte, Così la posizione di

una testina di lettura/scrittura per tali dischi viene descritta da un numero di cilindro. Come le

tracce, i cilindri sono numerati in sequenza.

Se si immagina un cilindro come dato dalla sovrapposizione di più tracce per una determinata

posizione della testina, si vede come la posizione di una certa traccia risulti fissata specificando,

oltre al numero del cilindro, anche quello della testina.

Dischi di sistema

Indipendentemente dal formato utilizzato per i dati, tutti i tipi di dischetti possono essere

potenzialmente "dischi di sistema". ossia contenere le informazioni necessarie per caricare e

rendere attivo un particolare sistema operativo quando si accende il computer. Un disco di

sistema non ha un formato speciale: semplicemente contiene quelle informazioni che rendono

possibile al ROM BIOS di caricare (boot) il sistema operativo. Su ogni dischetto o disco fisso

per PC il primo settore del disco cilindro traccia 0, testina o faccia 0, settore 1 è riservato a un

breve programma di bootstrap. La funzione del programma di bootstrap è quella di caricare in

memoria il complesso del sistema operativo, leggendolo da un'altra sezione del disco, e poi

trasferire il controllo al sistema operativo stesso.

Quando si fa partire il computer, l'ultima funzione che le routine del ROM BIOS svolgono è di

leggere sul disco il contenuto del boot sector nella posizione citata sopra, e di caricarlo in

11

memoria, verificando poi che si tratta del programma di lancio. Il BIOS compie tale verifica

esaminando gli ultimi due byte del boot record per identificare la presenza di due dati speciali

(55H e AAH), che indicano che i dati del settore rappresentano il programma di bootstrap, Se

questi byte identificativi non corrispondono, il BIOS considera che sul primo settore non sia

presente il programma bootstrap, e quindi che il disco non sia di sistema. Il compito del

programma bootstrap è copiare dal disco, nella memoria del computer, il programma che avvia

un certo sistema operativo.

Formati dei dischi fissi

Poiché la capacità di memoria dei dischi fissi è considerevole, molti utenti di PC preferiscono

utilizzare solo una parte dello spazio del disco fisso per il DOS, riservando altre sezioni del disco

ad altri sistemi operativi. Per rendere la cosa più facile, lo spazio disponibile su di un disco fisso

può essere suddiviso in un massimo di 4 partizioni logiche diverse, ciascuna accessibile

separatamente. I dati di ogni partizione possono essere mantenuti completamente separati da

quelli delle altre.

Ogni partizione può contenere il proprio boot record e il proprio sistema operativo. Il primo

settore di un disco fisso contiene una speciale tabella di partizione di 64 byte e il programma di

bootstrap. La tabella di partizione specifica la posizione delle varie partizioni sul disco; inoltre

indica una delle partizioni come avviabile. Il primo settore di tale partizione è un boot sector di

partizione che il ROM BIOS può impiegare per caricare un dato sistema operativo.

Il programma di bootstrap esamina la tabella di partizione per determinare quale delle partizioni

sia quella di avviamento, poi legge il relativo boot record in memoria. Tale settore contiene un

programma di avviamento che copia il sistema operativo in memoria e trasferisce quindi a esso il

controllo. Dato che le partizioni dotate di boot record sono indicate in una tabella, è possibile

selezionare una diversa partizione del disco fisso semplicemente aggiornando la tabella e

facendo ripartire il computer. Tutti i sistemi operativi capaci di supportare i dischi fissi sono

dotati di un programma di utilità che permette di aggiornare la tabella di partizione.(Un esempio

è il programma di servizio del DOS FDISK.)

Come il DOS organizza il disco

Ogni dischetto o partizione DOS del disco fisso comprende quattro aree distinte, Nell'ordine di

registrazione, sono l'area riservata, la tabella di allocazione dei file (FAT, File Allocation Table),

la directory radice, e l'area dei i file.

Settore logico 0 Area riservata

Area di allocazione dei file

(FAT)

Directory radice

Area dei file

(file e sottodirectory) 12


PAGINE

21

PESO

335.34 KB

AUTORE

flaviael

PUBBLICATO

+1 anno fa


DETTAGLI
Corso di laurea: Corso di laurea in informatica
SSD:
Università: Messina - Unime
A.A.: 2013-2014

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher flaviael di informazioni apprese con la frequenza delle lezioni di Architettura degli elaboratori e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Messina - Unime o del prof Fiumara Giacomo.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!