[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
ATA, ovvero AT attachment, è un bus a 16 bit, nato originariamente per il collegamento di dischi fissi. Questo tipo di bus è conosciuto anche con altri nomi, che però non sono standard; in particolare «IDE» (Integrated drive electronics).
Il bus ATA venne definito quando la tecnologia cominciò a integrare l'elettronica dell'interfaccia nel disco fisso stesso, da cui viene l'acronimo IDE. Il primo elaboratore che abbia incorporato un bus ATA è stato proprio un IBM PC/AT, da cui il nome che giustifica l'acronimo ATA.
ll bus ATA ha avuto subito un grande successo e ancora oggi continua ad averlo, tanto che ormai le schede madri comuni ne incorporano uno, partendo dal presupposto che l'accesso ai dischi avvenga sempre secondo questa modalità. L'evoluzione dello standard ha portato a espandere le possibilità del bus, che originariamente permetteva solo il collegamento di dischi fissi, consentendo l'uso di altri tipi di dischi e non solo questo, attraverso le estensioni ATAPI (ATA packet interface).
Un bus ATA (ma in questo contesto si potrebbe usare il termine «canale») consente di collegare uno o due unità, attraverso una piattina con tre connettori da 40 poli (un connettore si collega all'unità di controllo ATA, mentre gli altri due servono per i componenti), come si vede nella figura 35.1. Un'estremità della piattina è colorata in modo diverso a indicare il lato in cui si trova il terminale numero uno.
I due dischi, o comunque i due componenti che si collegano all'unità di controllo devono essere distinti, essendo uno master e l'altro slave. Questa distinzione è indispensabile e in condizioni normali è necessario dichiarare questo ruolo dei componenti utilizzando dei ponticelli o dei micro interruttori. In questa situazione, utilizzando piattine normali diventa indifferente il collegamento dei componenti su questo o su quel connettore. In particolare, a differenza del bus SCSI non è richiesta alcuna terminazione.
Eventualmente esistono dei cavi ATA speciali che consentono di distinguere l'unità master da quella slave in base alla scelta del connettore utilizzato. Ma questo fatto richiede comunque la selezione nelle unità stesse della modalità cable select, sempre attraverso ponticelli o micro interruttori.
Lo standard ATA, nella sua evoluzione, ha cercato di mantenere la compatibilità con il passato, per garantire che un'unità di controllo aggiornata sia in grado di funzionare anche con componenti ATA più vecchi e viceversa. In particolare, questo fatto serve a garantire che l'accoppiamento di due componenti eterogenei, collegati allo stesso canale, possano funzionare ugualmente. In pratica, nonostante le buone intenzioni, possono anche sorgere dei problemi di compatibilità; inoltre, l'accoppiamento di due componenti eterogenei comporta solitamente l'utilizzo del protocollo di comunicazione migliore che entrambi sono in grado di gestire, costringendo uno dei due a lavorare con prestazioni inferiori rispetto alle proprie possibilità.
Il protocollo ATA si è sviluppato nel tempo utilizzando tecniche diverse per la comunicazione dei dati. In particolare, le versioni più recenti che consentono velocità di trasferimento dati più elevate richiedono una piattina speciale, in cui ogni collegamento dei 40 poli esistenti viene separato da un filo di massa, allo scopo di ridurre le interferenze reciproche. Questo tipo di piattina a 80 fili ha anche la caratteristica di selezionare automaticamente il componente master e slave, pertanto questi devono essere configurati in modalità cable select.
I dischi (fissi o rimovibili che sia) hanno una geometria, definita in base a tre coordinate: cilindro, testina e settore. Nella prima edizione dello standard ATA era necessario indicare i valori massimi di queste coordinate nella configurazione del firmware. A partire da ATA-2 si è introdotta la capacità di identificare automaticamente la geometria dei dischi e di poterla ridefinire in base a ciò che è stato chiamato LBA, ovvero Logical block addressing.
Attraverso questo meccanismo, se il firmware è predisposto per farlo, è possibile superare i limiti alla quantità di cilindri e di testine che erano imposti dalla struttura tradizionale del firmware stesso. Tuttavia, perché sia possibile l'utilizzo di questa possibilità, è necessario anche che il sistema operativo e il sistema di avvio siano in grado di gestirla.
Attualmente, nell'ambito del protocollo ATA si distinguono tre modalità di comunicazione: PIO (Programmed I/O), DMA (che comunque si articola in due sotto categorie) e Ultra DMA. Ognuna di queste modalità ha poi dei livelli differenti, costituiti da un numero intero, dove lo zero rappresenta quello minimo con le prestazioni peggiori, mentre i valori successivi indicano una progressione.
Il protocollo PIO è il primo a essere stato realizzato e ha la caratteristica di impegnare direttamente l'unità centrale (la CPU) per il suo funzionamento. La tabella 35.1 elenca le modalità PIO, ovvero i livelli di questo protocollo, in cui si può vedere che il numero cinque non appartiene allo standard codificato, ma probabilmente viene indicato da qualche costruttore, facendo riferimento a una velocità di trasferimento di 22 Mbyte/s.
Tabella 35.1. Modalità PIO.
Modalità PIO | Velocità massima in Mbyte/s (106 byte/s) | Note |
0 | 3,3 | |
1 | 5,2 | |
2 | 8,3 | |
3 | 11,1 | |
4 | 16,7 | |
5 | 22,2 | Non standard. |
Di solito, la gestione del protocollo PIO può essere controllata dal firmware (il BIOS), con cui si può imporre una modalità particolare, oppure si può escludere del tutto, in favore di altri protocolli. Tuttavia, questo tipo di intervento si può richiedere solo se si incontrano dei problemi, in cui i componenti installati non sono in grado di determinare automaticamente il metodo migliore di funzionamento. Il programma di accesso alla configurazione del firmware potrebbe presentare le voci seguenti, dove in questo caso si lascia una gestione automatica del protocollo:
Primary Master PIO: Auto Primary Slave PIO: Auto Secondary Master PIO: Auto Secondary Slave PIO: Auto
Il protocollo DMA utilizza in pratica un accesso diretto alla memoria (Direct memory access). Inizialmente, il trasferimento dei dati avveniva a pacchetti di 16 bit (word), ovvero quanto l'ampiezza del canale ATA. Successivamente si è introdotta la possibilità di trasmettere sequenze più lunghe. Nel primo caso si parla di single word, mentre nel secondo si fa riferimento al termine multi word. Queste due varianti del protocollo DMA hanno livelli di identificazione distinti, come se fossero due protocolli diversi; tuttavia, attualmente il trasferimento a blocchi singoli di 16 bit non si usa più, per cui il protocollo DMA è inteso implicitamente essere di tipo multi word.
Tabella 35.2. Modalità DMA.
Modalità single word | Modalità multi word | Velocità massima in Mbyte/s (106 byte/s) |
0 | 2,1 | |
1 | 4,2 | |
2 | 8,3 | |
0 | 4,2 | |
1 | 13,3 | |
2 | 16,7 |
La comunicazione diretta con la memoria può avvenire attraverso un sistema di controllo integrato nella scheda madre, oppure direttamente attraverso l'unità di controllo ATA. In pratica, il secondo caso richiede che il bus in cui si inserisce a sua volta l'unità di controllo ATA consenta la tecnica conosciuta come bus mastering, attraverso cui un componente del bus può prendere il controllo.
Il primo tipo di sistema, in cui si passa per l'intermediazione della scheda madre, viene indicato come third party DMA, mentre l'accesso diretto al DMA si indica come first party DMA. L'utilizzo dell'accesso DMA senza intermediazioni consente di gestire velocità più elevate e diventa necessario per mettere in pratica gli ultimi livelli di questo protocollo.
Il protocollo Ultra DMA, o solo UDMA, è un'evoluzione del DMA, in cui vengono usate delle tecniche diverse per aumentare la frequenza di trasmissione effettiva dei dati, introducendo anche un sistema di controllo CRC per la verifica che questi siano stati ricevuti correttamente, che consente anche la regolazione della velocità effettiva in base alle caratteristiche reali del mezzo.
Tabella 35.3. Modalità UDMA.
Modalità UDMA | Velocità massima in Mbyte/s (106 byte/s) |
0 | 16,7 |
1 | 25,0 |
2 | 33,3 |
3 | 44,4 |
4 | 66,7 |
5 | 100,0 |
Le tecniche di trasmissione introdotte dal protocollo UDMA richiedono l'uso di una piattina speciale, a 80 fili, quando si supera la velocità di 33,3 Mbyte/s. Come già accennato, ognuno dei fili corrispondenti ai 40 poli viene alternato da un filo di massa, che serve a ridurre le interferenze; inoltre, questo tipo di cavo implica la selezione di tipo cable select nei componenti che si installano. Pertanto, i vari connettori sono colorati in modo differente per evitare confusione.
Anche se non dovrebbe essere necessario, è probabile che il firmware consenta di stabilire espressamente la modalità UDMA che deve essere utilizzata con un certo componente. Nell'esempio seguente si vede la richiesta di lasciare che il protocollo venga definito in modo automatico, in base a quanto riportato dai componenti e dalla verifica delle comunicazioni:
Primary Master UDMA: Auto Primary Slave UDMA: Auto Secondary Master UDMA: Auto Secondary Slave UDMA: Auto
Alcune unità di controllo, in base ai protocolli ATA, consentono di inviare dei blocchi di dati più consistenti attraverso il bus, per ogni singolo ciclo di interruzione, secondo una tecnica definita block mode. In generale questo fatto non crea complicazioni; tuttavia viene riportato solo per chiarire il senso di ciò quando una voce del genere appare nella configurazione del firmware:
IDE HDD Block Mode: Enabled
Di solito sono disponibili due bus ATA, ovvero due canali per ogni unità di controllo, specialmente se questa è integrata nella scheda madre. Ogni canale, o bus, utilizza delle risorse, in particolare un livello IRQ; pertanto, se uno dei due canali non viene utilizzato, conviene disabilitarne il funzionamento attraverso il firmware:
OnChip IDE Channel0: Enabled OnChip IDE Channel1: Disabled
Tabella 35.4. Risorse utilizzate da un'unità di controllo ATA comune. Si tenga presente che un'unità di controllo collegata a sua volta su un bus PCI, utilizza anche altre aree di indirizzi di I/O.
Canale | IRQ | I/O |
0 | 14 | da 01F016 a 01F716 e da 03F616 a 03F616 |
1 | 15 | da 017016 a 017716 e da 037616 a 037616 |
Lo standard ufficiale per quanto riguarda il bus ATA è definito da ANSI e la tabella 35.5 ne riassume le caratteristiche salienti.
Tabella 35.5. Standard ATA secondo ANSI.
Sigla | Denominazione | PIO | DMA single word | DMA multi word | UDMA |
ATA-1 | AT Attachment Interface for Disk Drives | 0, 1, 2 | 0, 1, 2 | 0 | -- |
ATA-2 | AT Attachment Interface with Extentions | 0, 1, 2, 3, 4 | 0, 1, 2 | 0, 1, 2 | -- |
ATA-3 | AT Attachment 3 Interface | 0, 1, 2, 3, 4 | -- | 0, 1, 2 | -- |
ATA/ATAPI-4 | AT Attachment with Packet Interface Extentions | 0, 1, 2, 3, 4 | -- | 0, 1, 2 | 0, 1, 2 |
ATA/ATAPI-5 | AT Attachment with Packet Interface - 5 | 0, 1, 2, 3, 4 | -- | 0, 1, 2 | 0, 1, 2, 3, 4 |
ATA/ATAPI-6 | ? | ? | -- | ? | 0, 1, 2, 3, 4, 5 |
Purtroppo si sono diffuse una grande quantità di definizioni non standard, il cui significato diventa a volte ambiguo. Per essere certi delle possibilità di un bus ATA o di un componente ATA, occorre verificare le caratteristiche che compongono lo standard, ovvero le modalità dei protocolli. Il problema legato alla terminologia dipende molto dal fatto che i prodotti che si trovano in commercio sono spesso più avanzati degli standard già definiti, anche se è molto probabile che vengano poi incorporati negli standard ufficiali. Pertanto, questo favorisce la diffusione di appellativi provvisori e altisonanti. Quello che segue è un elenco molto approssimativo dei nomi attribuiti nel gergo a vari aspetti dello standard ATA.
IDE, EIDE
La sigla IDE sta per Integrated drive electronics, ovvero quel tipo di disco che integra l'elettronica di controllo. Pur non essendo codificata negli standard, questa sigla viene usata comunemente, al posto di ATA.
La sigla EIDE è stata coniata da un'azienda particolare, con il significato di Enhanced IDE, a sottolineare l'utilizzo di tecniche nuove, non ancora codificate fino a quel momento, ma senza fare riferimento a un'epoca o a delle caratteristiche particolari, rendendo così la sigla altrettanto vaga quanto IDE.
Fast ATA
La definizione Fast ATA è stata usata in vari contesti per identificare qualcosa di più veloce del normale, ma senza un legame particolare con lo standard ufficiale. In particolare, quando si legge qualcosa come «Fast ATA-n», il numero non corrisponde a quello usato dallo standard ANSI. Per esempio, Fast ATA-4 potrebbe voler solo dire che offre il protocollo UDMA 4, mentre lo standard ufficiale corrispondente è ATA/ATAPI-5.
Ultra ATA, Ultra ATA/33, ATA/33, Ultra ATA/66, ATA/66,...
Questo genere di definizioni sono solitamente ottenute sommando assieme porzioni delle caratteristiche dei protocolli gestibili. Il termine «ultra» si riferisce normalmente al protocollo UDMA, mentre il numero indica presumibilmente la velocità di trasferimento dei dati. Pertanto, «Ultra ATA/33» o solo «ATA/33» si riferisce presumibilmente a un protocollo UDMA che consente un trasferimento a 33,3 Mbyte/s.
Nei sistemi GNU/Linux i file di dispositivo usati per accedere alle unità ATA hanno un nome che rispetta il modello:
/dev/hdx[n]
In pratica, x può essere una lettera minuscola, da a a t, che rappresenta un disco ATA completo; per esempio, /dev/hdd
indica il disco slave del secondo canale ATA disponibile. Se al nome segue un numero, questo indica l'n-esima partizione. Pertanto, /dev/hdd1
è la prima partizione della quarta unità ATA.
La gestione dei componenti ATA da parte del kernel Linux viene definita nella sezione {ATA/IDE/MFM/RLL support
} (29.2.10). La gestione accurata delle opzioni di configurazione di quella sezione consente di ottenere le prestazioni massime disponibili dal bus ATA di cui si dispone.
Le informazioni che si possono ottenere da un kernel Linux consentono di verificare la configurazione effettiva del firmware e il riconoscimento dell'unità di controllo ATA esistente. La prima verifica va fatta sui messaggi iniziali di avvio del kernel, che si possono rileggere con il comando dmesg:
$
dmesg | less
Nella prima parte si può osservare la gestione generale del bus ATA:
Uniform Multi-Platform E-IDE driver Revision: 6.31 ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
Nella seconda parte si può osservare l'identificazione delle particolarità dell'unità di controllo ATA, ammesso che sia in grado di farlo:
VP_IDE: IDE controller on PCI bus 00 dev 39 VP_IDE: chipset revision 16 VP_IDE: not 100% native mode: will probe irqs later ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx VP_IDE: VIA vt82c596b (rev 23) IDE UDMA66 controller on pci00:07.1 ide0: BM-DMA at 0xd000-0xd007, BIOS settings: hda:DMA, hdb:DMA ide1: BM-DMA at 0xd008-0xd00f, BIOS settings: hdc:pio, hdd:pio
Quindi si mostrano le caratteristiche dei componenti installati, che in questo caso sono due dischi fissi:
hda: IBM-DTLA-307030, ATA DISK drive hdb: QUANTUM FIREBALLlct10 20, ATA DISK drive ide0 at 0x1f0-0x1f7,0x3f6 on irq 14 hda: 60036480 sectors (30739 MB) w/1916KiB Cache, CHS=3737/255/63, UDMA(66) hdb: 39876480 sectors (20417 MB) w/418KiB Cache, CHS=2482/255/63, (U)DMA
Infine si vedono anche le partizioni di questi:
Partition check: hda: hda1 hda2 hda4 < hda5 hda6 hda7 > hdb: hdb1 hdb2
Se l'unità di controllo ATA è collegata a sua volta su un bus PCI, cosa che ormai rappresenta la situazione normale, se ne possono trovare le tracce nel file virtuale /proc/pci
:
PCI devices found: ... Bus 0, device 7, function 1: IDE interface: VIA Technologies, Inc. Bus Master IDE (rev 16). Master Capable. Latency=32. I/O at 0xd000 [0xd00f].
Un kernel Linux non è in grado di gestire direttamente i masterizzatori ATAPI, se non attraverso una gestione in cui questi vengono equiparati a delle unità SCSI. Per ottenere questo risultato, è necessario predisporre il kernel in modo che sia abilitata tale emulazione, eventualmente attraverso un modulo separato (sezione 29.2.10), quindi occorre richiedere espressamente l'abbinamento del dispositivo ATAPI alla gestione SCSI. Per cominciare si può verificare che il kernel sia predisposto per l'emulazione SCSI, analizzano il rapporto generato da dmesg. Si dovrebbe vedere una riga come quella seguente, se l'emulazione è incorporata nel file principale del kernel:
scsi1 : SCSI host adapter emulation for IDE ATAPI devices
In questo caso, si presume che esista anche un'unità di controllo SCSI vera e propria (a cui è già stato abbinato il nome scsi0). Se non si trova questa riga, può darsi che la funzionalità debba essere caricata attraverso un modulo, corrispondente al file ide-scsi.o
:
#
modprobe ide-scsi
A ogni modo, perché la cosa possa funzionare, occorre avviare il kernel aggiungendo il parametro hdx=ide-scsi, dove x è una lettera opportuna. Per esempio, hdc=ide-scsi serve a trasformare la terza unità ATA/ATAPI in SCSI.
Prima di questa trasformazione, si accede all'unità ATAPI attraverso un file di dispositivo del tipo /dev/hdx
, mentre dopo si deve usare il file corrispondente per un'unità SCSI: /dev/srn
oppure /dev/scdn
. Quello che segue è un estratto del rapporto di dmesg, quando l'emulazione SCSI è incorporata nel file principale del kernel (per cui non si richiede il caricamento di un modulo):
scsi1 : SCSI host adapter emulation for IDE ATAPI devices Vendor: LITE-ON Model: LTR-12102B Rev: NS1H Type: CD-ROM ANSI SCSI revision: 02 ... Detected scsi CD-ROM sr1 at scsi1, channel 0, id 0, lun 0
Come si può vedere, in questo caso risulta disponibile il CD-ROM come dispositivo /dev/sr1
, corrispondente alla seconda unità di controllo SCSI, collegato al canale zero, ID zero e LUN zero.
In linea di principio, dovrebbe essere possibile far convivere la gestione ATAPI normale per i lettori CD-ROM e l'emulazione SCSI. Se dovessero sorgere dei problemi, è possibile separare il modulo ATAPI per i CD-ROM, corrispondente al file ide-cd.o
, caricandolo in modo da escludere l'unità ATAPI che viene convertita espressamente in SCSI. Per questo occorre usare il parametro ignore=hdx; per esempio, volendo caricare il modulo escludendo il dispositivo /dev/hdc
, si potrebbe usare il comando seguente:
#
modprobe ide-cd ignore=hdc
Per verificare la situazione dei componenti SCSI e pseudo-SCSI, si può usare il programma Cdrecord, descritto nel capitolo 70:
#
cdrecord -scanbus
Le coordinate che si ottengono sono quelle abbreviate, in cui non si fa riferimento al canale delle unità di controllo, presupponendo che non possa essercene più di uno:
scsibus0: 0,0,0 2) 'FUJITSU ' 'M2513A ' '1200' Removable Optical Storage 0,1,0 1) * 0,2,0 2) * 0,3,0 3) 'TEAC ' 'CD-R55S ' '1.0E' Removable CD-ROM 0,4,0 4) * 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * scsibus1: 1,0,0 100) 'LITE-ON ' 'LTR-12102B ' 'NS1H' Removable CD-ROM 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) * 1,6,0 106) * 1,7,0 107) *
Charles M. Kozierok, The PC guide, Integrated Drive Electronics / AT Attachment (IDE/ATA) Interface
ATA/ATAPI history, ATA-ATAPI.COM
The Linux gazette, numero 57, settembre 2000, Chris Stoddard, CD-writing with an ATAPI CDR Mini-HOWTO
daniele @ swlibero.org
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome ata_at_attachment.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]