Next Previous Contents

4. Πρόσβαση δίσκου

Για να διαβάσετε ή να γράψετε κάτι από το δίσκο, πρέπει να δείξουμε τη θέση στο δίσκο, δίνοντας για παράδειγμα τον τομέα ή την ενότητα. Αν ο δίσκος είναι SCSI, τότε ο αριθμός του τομέα πηγαίνει κατευθείαν στην εντολή SCSI και ο δίσκος την καταλαβαίνει. Αν ο δίσκος είναι IDE χρησιμοποιώντας LBA, ισχύει το ίδιο. Αλλά αν ο δίσκος είναι παλιός RLL ή MFM ή IDE της προ-LBA εποχής, τότε ο δίσκος περιμένει ένα τριπλό αριθμό (κύλινδρο, κεφαλή, τομέα) για να καταδείξει το σημείο.

Η αντιστοιχία μεταξύ γραμμικής διεύθυνσης και της 3D σημειογραφίας είναι: για ένα δίσκο με C κυλίνδρους, H κεφαλές και S τομείς/ίχνος ή θέση (c,h,s) σε 3D ή CHS είναι η ίδια θέση με c*H*S + h*S + (s-1) σε γραμμική ή LBA. (Το μείον ένα είναι επειδή οι τομείς αρχίζουν κατά παράδοση από το 1, όχι το 0 όπως στο 3D).

Κατά συνέπεια, για να πρόσβαση σε έναν πολύ παλιόo μη-SCSI δίσκο, πρέπει να ξέρουμε την γεωμετρία, δηλαδή, τις τιμές C, H και S.

4.1 Πρόσβαση του BIOS και το όριο των 1024 κυλίνδρων

Το Linux δε χρησιμοποιεί το BIOS, αλλά άλλα συστήματα το χρησιμοποιούν. Το BIOS, που προΰπάρχει του LBA, προσφέρει τις ρουτίνες δίσκου INT13 που δέχονται (c,h,s) παραμέτρους. (Ακριβέστερα: το AH διαλέγει τη λειτουργία που θα εκτελεστεί, το CH είναι τα κάτω 8 bits του ονόματος του κυλίνδρους, το CL έχει στα bits 7-6 τα άνω δυο bits του αριθμού του κυλίνδρου και στα bits 5-0 τον αριθμό του τομέα, DH είναι ο αριθμός της κεφαλής, και DL είναι ο αριθμός του δίσκου (80h ή 81h). Αυτό εξηγεί μερικά τη διάταξη του πίνακα κατατμήσεων.)

Έτσι, έχουμε το CHS κωδικοποιημένο σε 3 bytes, με 10 bits για το όνομα του κυλίνδρου , 8 bits για την κεφαλή και 6 bits για τον αριθμό ίχνους τομέα (1-63). Εξυπακούεται ότι οι κύλινδροι μπορεί να είναι από 0 έως 1023 και δε μπορούν να αριθμηθούν πάνω από 1024 κύλινδροι από το BIOS.

Το DOS και τα Windows δεν άλλαξαν όταν IDE δίσκοι με υποστήριξη LBA εμφανίστηκαν, οπότε το DOS και τα Windows συνέχισα να χρειάζονται γεωμετρία δίσκου, ακόμα κι όταν αυτό δε χρειαζόταν από το Ι/Ο του δίσκου, αλλά μόνο για να επικοινωνούν με το BIOS. Αυτό ξανά σημαίνει ότι το Linux χρειάζεται τη γεωμετρία όπου επικοινωνία με το BIOS ή με άλλα λειτουργικά απαιτείται, ακόμα και σε μοντέρνους δίσκους.

Αυτή η κατάσταση κράτησε για τέσσερα χρόνια περίπου και μετά εμφανίστηκαν στην αγορά δίσκοι που δε μπορούσαν να κληθούν με τις συναρτήσεις INT13 (καθότι τα 10+8+6=24 bits για (c,h,s) δεν μπορούν να αριθμήσουν πάνω από 8.5 GB) και μια νέα διασύνδεση με το BIOS σχεδιάστηκε: οι αποκαλούμενες Extended INT13 συναρτήσεις, όπου το DS:SI δείχνει στο 16-byte Disk Address Packet που περιλαμβάνει έναν 8μπιτο αριθμό ενοτήτων.

Πολύ αργά ο κόσμος της Microsoft κινείται προς τη χρήση αυτών των Extended INT13 συναρτήσεων. Μάλλον σε μερικά χρόνια από σήμερα, κανένα μοντέρνο σύστημα δε θα χρειάζεται τη γεωμετρία του δίσκου.

4.2 Ιστορία του BIOS και των ορίων του IDE

ATA Specification (για IDE δίσκους) - το όριο των 137 GB

Το πολύ 65536 κύλινδροι (αριθμημένοι 0-65535), 16 κεφαλές (αριθμημένες 0-15), 255 τομείς/ίχνος (αριθμημένοι 1-255) για μια μέγιστη χωρητικότητα 267386880 τομέων (512 bytes ο καθένας), δηλαδή, 136902082560 bytes (137 GB). Αυτό ακόμα δεν είναι πρόβλημα (το 1999), αλλά θα είναι σε μερικά χρόνια από σήμερα.

BIOS Int 13 - το όριο των 8.5 GB

Το πολύ 1024 κύλινδροι (0-1023), 256 κεφαλές (0-255), 63 τομείς/ίχνος (1-63) για μέγιστη χωρητικότητα 8455716864 bytes (8.5 GB). Αυτός είναι ένας αρκετά σοβαρός περιορισμός σήμερα. Σημαίνει ότι το DOS δε μπορεί να χρησιμοποιήσει τους νέους μεγάλους δίσκους.

Το όριο των 528 MB

Αν οι ίδιες τιμές c,h,s χρησιμοποιούνται για το BIOS Int 13 call και για το Ι/Ο του ΙDE δίσκου, και οι δυο περιορισμοί συνδυάζονται και μπορούμε να χρησιμοποιήσουμε το πολύ 1024 κυλίνδρους, 16 κεφαλές και 63 τομείς/ίχνος για μέγιστη τελική χωρητικότητα 528482304 bytes (528MB), το περίφημο όριο των 504 MiB για DOS με παλιό BIOS. Αυτό έγινε πρόβλημα το 1993 και εφευρέθηκαν πολλά τεχνάσματα, και σε υλικό (LBA), και firmware (μεταφράζοντας το BIOS) και σε software (διαχειριστές δίσκων). Η έννοια της 'μετάφρασης' εφευρέθηκε (1994): το BIOS μπορούσε να χρησιμοποιεί μία γεωμετρία όταν επικοινωνούσε με το δίσκο και άλλη, ψευδή, γεωμετρία όταν μιλούσε στο DOS, και να μεταφράσει μεταξύ τους.

Το όριο των 2.1 GB (Απρίλιος 1996)

Μερικά παλιά BIOS χρησιμοποιούν μόνο 12 bits για το πεδίο στη CMOS RAM που δίνει τον αριθμό των κυλίνδρων. Κατά συνέπεια, ο αριθμός αυτός μπορεί να είναι το πολύ 4095, και μόνο 4095*16*63*512=2113413120 bytes είναι προσβάσιμα. Το να υπάρχει μεγαλύτερος δίσκος έχει ως αποτέλεσμα το κρέμασμα κατά την εκκίνηση. Αυτό έκανε δίσκους με γεωμετρία 4092/16/63 αρκετά δημοφιλής. Ακόμα και σήμερα υπάρχουν μεγάλοι δίσκοι που έρχονται με διακόπτη για εμφανίζονται ως 4092/16/63. Δείτε και το over2gb.htm.

Το όριο των 3.2 GB

Υπήρχε ένα μεγάλο bug στο Phoenix 4.03 και 4.04 BIOS που τα έκανε να κολλάνε στο CMOS setup για δίσκους μεγαλύτερους των 3227MB. Δείτε το over3gb.htm.

Το όριο των 4.2 GB (Φεβρουάριος 1997)

Η απλή μετάφραση του BIOS (ECHS=Extended CHS, μερικές φορές λέγεται και `Large disk support' ή απλά `Large') λειτουργεί με τον συνεχή διπλασιασμό του αριθμού των κεφαλών και τον υποδιπλασιασμό του αριθμού των κυλίνδρων που δείχνονται στο DOS, μέχρι οι κύλινδροι να είναι το πολύ 1024. Το DOS και τα Windows 95 δε μπορούν να διαχειριστούν 256 κεφαλές, και στην περίπτωση που ο δίσκος αναφέρει 16 κεφαλές, αυτό σημαίνει ότι ο απλός αυτός μηχανισμός μπορεί να δουλέψει για μέχρι 8192*16*63*512=4227858432 bytes (με ψευδή γεωμετρία με 1024 κυλίνδρους, 128 κεφαλές, 63 τομείς/ίχνος). Σημειώστε ότι το ECHS δεν αλλάζει τον αριθμό των τομέων ανά ίχνος, οπότε αν δεν είναι 63, το όριο θα είναι ακόμα χαμηλότερο. Δείτε το over4gb.htm.

Το όριο των 7.9 GB

Λίγο πιο έξυπνα BIOS αποφεύγουν αυτό το πρόβλημα με τη ρύθμιση πρώτα του αριθμού των κεφαλών σε 15 (`revised ECHS'), ώστε η ψευδής γεωμετρία να διατηρείται με 240 κεφαλές, αρκετό για 1024*240*63*512=7927234560 bytes.

Το όριο των 8.4 GB

Τελειώνοντας, αν το BIOS κάνει ό,τι μπορεί για μια επιτυχή μετάφραση, χρησιμοποιεί 255 κεφαλές με 63 τομείς/ίχνος (`assisted LBA' or just `LBA') και φτάνει τα 1024*255*63*512=8422686720 bytes, λίγο μικρότερο από το προηγούμενο όριο των 8.5 GB, εφόσον γεωμετρίες με 256 κεφαλές πρέπει να αποφεύγονται. (Η μετάφραση θα χρησιμοποιήσει για τον αριθμό κεφαλών τον αριθμό Η από την ακολουθία 16, 32, 64, 128, 255 για την οποία η συνολική χωρητικότητα φτάνει στα 1024*H*63*512, και μετά υπολογίζει τον αριθμό των κυλίνδρων C ως την χωρητικότητα διαιρούμενη με (H*63*512).)

The 33.8 GB limit (August 1999)

Το επόμενο εμπόδιο έρχεται με μεγέθη άνω των 33.8 GB. Το πρόβλημα είναι ότι με 16 κεφαλές και 63τομείς/ίχνος αυτό αντιστοιχεί σε αριθμό κυλίνδρων πάνω από 65535, που δε χωράει σε short αριθμό. Τα περισσότερα BIOS σήμερα δε μπορούν να χειριστούν τέτοιους δίσκους. (Δείτε Asus upgrades για νέες εκδόσεις που δουλεύουν.) Πυρήνες παλαιότεροι των 2.2.14 / 2.3.21 χρειάζονται patch. Δείτε IDE προβλήματα με 34+ GB δίσκους παρακάτω.

Για περαιτέρω συζήτηση αυτού του θέματος δείτε Breaking the Barriers και, για περισσότερες λεπτομέρειες, IDE Hard Drive Capacity Barriers.

Δίσκοι μεγαλύτεροι των 8.4 GB αναφέρουν τη γεωμετρία τους ως 16383/16/63. Αυτό σημαίνει ότι η 'γεωμετρία' είναι ανεπαρκής και ότι η συνολική χωρητικότητα δε μπορεί να υπολογιστεί από τη γεωμετρία.


Next Previous Contents