H δισκέτα 3.5 διαµορφώνεται µε 80 tracks, 18 sectors/track, 512 bytes/sector, 2 πλευρές (head 0,1). Σύνολο τοµέων 2880, σύνολο χωρητικότητας 2880 Χ 512 = 1.474.560 bytes. Οι πρώτοι 33 τοµείς καταλαµβάνονται από το σύστηµα. Μένουν 2847 τοµείς δηλαδή 2847 Χ 512 = 1.457.664 bytes για αρχεία. Ένα cluster = ένα sector, άρα χρειάζεται διευθυνσιοδότηση 2847 clusters. Χρησιµοποιείται το σύστηµα FAT 12 που διευθυνσιοδοτεί 2 12 = 4096 clusters. Sector 0 : boot sector (αρ. sectors 1). Sectors 1..9 : FAT (1st copy) (αρ. sectors 9). 2847 διευθύνσεις Χ 12 bits = 34164 bits = 4271 bytes = 9 sectors (4608 bytes), 512 Χ 8 / 12 = 341.3 διευθύνσεις clusters σε κάθε sector. Sectors 10..18 : FAT (2nd copy) (αρ. sectors 9). Sectors 19..32 : Root directory (αρ. sectors 14). Κάθε εγγραφή καταλαµβάνει 32 bytes άρα χωρούν 512/32=16 εγγραφές / sector και συνολικά 14 X 16 = 224 εγγραφές στο root directory. Sectors 33..2879 : data area (αρ. sectors 2847). 0000: EB 3C 90 4D 53 44 4F 53 35 2E 30 00 02 01 01 00 Έ<ΡMSDOS5.0 0010: 02 E0 00 40 0B F0 09 00 12 00 02 00 00 00 00 00 ω @ Ώ 0020: 00 00 00 00 00 00 29 4F 3C E0 15 4E 4F 20 4E 41 )O<ω NO NA 0030: 4D 45 20 20 20 20 46 41 54 31 32 20 20 20 FA 33 ME FAT12 3 0040: C0 8E D0 BC 00 7C 16 07 BB 78 00 36 C5 37 1E 56 Ο x 6 7 V 0050: 16 53 BF 3E 7C B9 0B 00 FC F3 A4 06 1F C6 45 FE S > ⁿ ν E 0060: 0F 8B 0E 18 7C 88 4D F9 89 47 02 C7 07 3E 7C FB Μ ΙM ΚG > 0070: CD 13 72 79 33 C0 39 06 13 7C 74 08 8B 0E 13 7C!!ry3 9!! t Μ!! 0080: 89 0E 20 7C A0 10 7C F7 26 16 7C 03 06 1C 7C 13 Κ ι &!! 0090: 16 1E 7C 03 06 0E 7C 83 D2 00 A3 50 7C 89 16 52 µp Κ R 00A0: 7C A3 49 7C 89 16 4B 7C B8 20 00 F7 26 11 7C 8B µi Κ K & Μ 00B0: 1E 0B 7C 03 C3 48 F7 F3 01 06 49 7C 83 16 4B 7C H I K 00C0: 00 BB 00 05 8B 16 52 7C A1 50 7C E8 92 00 72 1D Μ R κp ϋτ r 00D0: B0 01 E8 AC 00 72 16 8B FB B9 0B 00 BE E6 7D F3 ϋυ r Μ ό} 00E0: A6 75 0A 8D 7F 20 B9 0B 00 F3 A6 74 18 BE 9E 7D οu Ξ οt η} 00F0: E8 5F 00 33 C0 CD 16 5E 1F 8F 04 8F 44 02 CD 19 ϋ_ 3 ^ Π ΠD 0100: 58 58 58 EB E8 8B 47 1A 48 48 8A 1E 0D 7C 32 FF XXXΈϋΜG HHΛ 2 0110: F7 E3 03 06 49 7C 13 16 4B 7C BB 00 07 B9 03 00 ή I!! K 0120: 50 52 51 E8 3A 00 72 D8 B0 01 E8 54 00 59 5A 58 PRQϋ: r ϋt YZX 0130: 72 BB 05 01 00 83 D2 00 03 1E 0B 7C E2 E2 8A 2E r έέλ. 0140: 15 7C 8A 16 24 7C 8B 1E 49 7C A1 4B 7C EA 00 00 Λ $ Μ I κk Ά 0150: 70 00 AC 0A C0 74 29 B4 0E BB 07 00 CD 10 EB F2 p υ t) Έ 0160: 3B 16 18 7C 73 19 F7 36 18 7C FE C2 88 16 4F 7C ; s 6 Ι O 0170: 33 D2 F7 36 1A 7C 88 16 25 7C A3 4D 7C F8 C3 F9 3 6 Ι % µm 0180: C3 B4 02 8B 16 4D 7C B1 06 D2 E6 0A 36 4F 7C 8B Μ M ό 6O Μ 0190: CA 86 E9 8A 16 24 7C 8A 36 25 7C CD 13 C3 0D 0A ΗώΛ $ Λ6%!! 01A0: 4E 6F 6E 2D 53 79 73 74 65 6D 20 64 69 73 6B 20 Non-System disk 01B0: 6F 72 20 64 69 73 6B 20 65 72 72 6F 72 0D 0A 52 or disk error R 01C0: 65 70 6C 61 63 65 20 61 6E 64 20 70 72 65 73 73 eplace and press 01D0: 20 61 6E 79 20 6B 65 79 20 77 68 65 6E 20 72 65 any key when re 01E0: 61 64 79 0D 0A 00 49 4F 20 20 20 20 20 20 53 59 ady IO SY 01F0: 53 4D 53 44 4F 53 20 20 20 53 59 53 00 00 55 AA SMSDOS SYS Uς Ερµήνευση Boot Sector : Oem Name :MSDOS5.0 Bytes/Sector : 512 Sect/Cluster : 1 Rsrvd Sectors: 1 FATs : 2 Root Entries : 224 Small Sectors:2880 Media Dscrptr: f0 FAT Sectors : 9 Sectors/Track: 18 Drive Heads : 2 Hidden Sects : 0 Sectors : 0 Drive ID : 0 Boot Sig : 29 Volume ID :3c4f Volume Label :NO NAME File Sys ID :FAT12
Ο sector 0 χρησιµοποιείται για να αποθηκεύσει ένα µικρό πρόγραµµα σε γλώσσα µηχανής για την εκκίνηση του συστήµατος. Συνήθως καλείται ένα άλλο πρόγραµµα (OS Loader Init) που φορτώνει το Λ.Σ. O sector 1 ονοµάζεται Superblock και περιέχει τις φυσικές παραµέτρους του δίσκου και του συστήµατος αρχείων (χωρητικότητα δίσκου, αριθµός και µέγεθος block, το πλήθος των I-Nodes, τη διεύθυνση του πρώτου ελεύθερου block κ.λ.π.) Οι sectors 2 έως και έναν αριθµό (Ν) αποθηκεύουν τα I-Nodes. Οι υπόλοιποι sectors αποθηκεύουν blocks που ανήκουν σε αρχεία και υποκαταλόγους και αποτελούν το data area του δίσκου. Το root directory αντιστοιχεί στο πρώτο I-Node (Ι-Node 0). Το Superblock συνήθως παραµένει στη µνήµη και σε τακτά χρονικά διαστήµατα (π.χ. κάθε 1 λεπτό) γράφεται στο δίσκο. Πρόβληµα : τα data blocks ενός αρχείου µπορεί να είναι οπουδήποτε στο δίσκο και συνεπώς µακριά το ένα από το άλλο και από το I-Node. Λύση ΕΧΤ2 : H χρήση οµάδων κυλίνδρων που η καθεµιά περιέχει το δικό της Superblock και τα δικά της I-Node και data blocks. οµή ενός συστήµατος αρχείων UNIX Boot block Superblock I-Node 0 I-Node n Data Block 0 Data Block x Οµάδες κυλίνδρων στο σύστηµα ΕΧΤ2 Οµάδα Κυλίνδρων 1 Οµάδα Κυλίνδρων 2 Οµάδα Κυλίνδρων 3 Boot block Superblock 1 I-Node list 1 Data Area 1 Superblock 2 I-Node list 2 Data Area 2 Superblock 3 I-Node list 3 Data Area 3
Μέγεθος 64 bytes (SystemV, Berkeley) ή 128 bytes (EXT2). Περιέχει : Flags 16 bit µε τον τύπο του αρχείου και τα δικαιώµατα προσπέλασης 12-15 : τύπος αρχείου (κανονικό, κατάλογος, ειδικό, σωλήνωση) 9-11 : Σηµαίες εκτέλεσης 8 : ικαίωµα read κατόχου (owner) 7 : ικαίωµα write κατόχου (owner) 6 : ικαίωµα execute κατόχου (owner) 5 : ικαίωµα read οµάδας (group) 4 : ικαίωµα write οµάδας (group) 3 : ικαίωµα execute οµάδας (group) 2 : ικαίωµα read υπολοίπων (others) 1 : ικαίωµα write υπολοίπων (others) 0 : ικαίωµα execute υπολοίπων (others) Μετρητής αναφορών αρχείων σε αυτό το I-Node (Hard Links) Ταυτότητα του ιδιοκτήτη του αρχείου (UID) Ταυτότητα της οµάδας που ανήκει το αρχείο (GID) Μέγεθος του αρχείου σε bytes 39 bytes µε δείκτες σε data blocks : έκα (10) δείκτες των 3 bytes για άµεση δεικτοδότηση 10 data blocks. Ένας (1) δείκτης των 3 byte για απλά έµµεσο block. Ένας (1) δείκτης των 3 byte για διπλά έµµεσο block. Ένας (1) δείκτης των 3 byte για τριπλά έµµεσο block. Χρόνος τελευταίας προσπέλασης του αρχείου. Χρόνος τελευταίας τροποποίησης του αρχείου. Χρόνος τελευταίας τροποποίησης του I-Node Για µέγεθος block=1k η άµεση δεικτοδότηση επαρκεί για αρχεία µε µέγεθος <=10Χ1K=10K. H έµµεση επαρκεί για δεικτοδότηση 1Χ(1024/(3+1))Χ1024=256K, η διπλά έµµεση για 256Χ256Χ1024=65ΜΒ, και η τριπλά έµµεση για 256Χ65Μ=16GB
Το Superblock περιέχει τις εξής πληροφορίες : 1. Το όνοµα του συστήµατος αρχείων 2. Το µέγεθος του κάθε block σε bytes (512, 1024, 2048 ) 3. Τον συνολικό αριθµό blocks του δίσκου 4. Τον αριθµό των ελεύθερων blocks του δίσκου 5. Τον συνολικό αριθµό των I-Nodes 6. Το µέγεθος της λίστας των I-Nodes σε blocks 7. Τον αριθµό των ελεύθερων I-Nodes 8. Την ηµεροµηνία και ώρα τελευταίας ενηµέρωσης του Superblock 9. Την διεύθυνση του πρώτου ελεύθερου block (σύστηµα συνδεδεµένης λίστας) ή την διεύθυνση του block µε τον χάρτη δυαδικών ψηφίων 10. Τον αριθµό του πρώτου ελεύθερου I-Node (σύστηµα συνδεδεµένης λίστας) ή το I-Node της λίστας των ελεύθερων I-Nodes Κατά την δηµιουργία νέου αρχείου ή επέκταση ενός υπάρχοντος, το Λ.Σ. θα πρέπει να βρεί έναν ελεύθερο χώρο στο δίσκο για να το αποθηκεύσει. Η αναζήτηση ελεύθερου χώρου πρέπει να είναι γρήγορη. 1. Εντοπισµός ελεύθερων clusters µε απευθείας ανάγνωση της ενωµένης λίστας διευθύνσεων ενοτήτων (FAT). 2. Τήρηση καταλόγου ελεύθερων ενοτήτων. Κρατείται ξεχωριστά στο δίσκο ένας κατάλογος µε τις διευθύνσεις των ελεύθερων ενοτήτων και ενηµερώνεται µε κάθε δηµιουργία, µεταβολή ή διαγραφή αρχείου. Π.χ. για FAT16 έχουµε 2 16 = 65536 ενότητες, άρα ο κατάλογος χρειάζεται το πολύ 65536 X 16 = 1.048.576 bits = 131.072 bytes. 3. Με χάρτη δυαδικών ψηφίων (NTFS). Για κάθε ενότητα (cluster) του δίσκου κρατείται 1 bit που είναι είτε 0 (ελεύθερη ενότητα) είτε 1 (κατειληµένη ενότητα). Π.χ γιάfat 16 ο χάρτης δυαδικών ψηφίων απαιτεί 2 16 = 65536 bits δηλαδή 8192 bytes. Λόγω του µικρού του µεγέθους ο χάρτης bits κρατείται και ενηµερώνεται στην κύρια µνήµη του Η/Υ (RAM).
Κατά το άνοιγµα ενός αρχείου π.χ. Type C:\Temp\a.txt συµβαίνουν τα εξής : 1. ιαβάζεται το root directory του δίσκου που είναι σε συγκεκριµένα clusters και µπορεί να κρατείται και σε buffer στη µνήµη. 2. Προσπελαύνονται σειριακά όλες οι εγγραφές του root directory µέχρι να βρεθεί η εγγραφή του καταλόγου Temp. 3. Μόλις βρεθεί τότε διαβάζεται ο αριθµός του πρώτου cluster που περιέχει τον κατάλογο. 4. Ακολουθώντας την αλυσίδα του FAT βρίσκονται και διαβάζονται όλοι οι clusters που αποτελούν τον κατάλογο. 5. Προσπελαύνονται σειριακά όλες οι εγγραφές του καταλόγου Temp µέχρι να βρεθεί η εγγραφή του αρχείου a.txt. 6. Μόλις βρεθεί τότε διαβάζεται ο αριθµός του πρώτου cluster που περιέχει το αρχείο. 7. Ακολουθώντας την αλυσίδα του FAT βρίσκονται και διαβάζονται όλοι οι clusters που αποτελούν το αρχείο. Κατά το άνοιγµα ενός αρχείου π.χ. cat /tmp/a.txt συµβαίνουν τα εξής : 1. ιαβάζεται το root directory του δίσκου που είναι σε συγκεκριµένα blocks και µπορεί να κρατείται και σε buffer στη µνήµη. 2. Προσπελαύνονται σειριακά όλες οι εγγραφές του root directory µέχρι να βρεθεί η εγγραφή του καταλόγου tmp. 3. Μόλις βρεθεί τότε διαβάζεται ο αριθµός του αντίστοιχου I-Node και στη συνέχεια το ίδιο το I-Node του καταλόγου. 4. Αν ο κατάλογος είναι µικρός περιέχεται µέσα στο I-Node. Αλλιώς ακολουθούνται δείκτες προς data blocks και διαβάζονται όλα τα blocks που αποτελούν τον κατάλογο. 5. Προσπελαύνονται σειριακά όλες οι εγγραφές του καταλόγου tmp µέχρι να βρεθεί η εγγραφή του αρχείου a.txt. 6. Μόλις βρεθεί τότε διαβάζεται ο αριθµός του αντίστοιχου I-Node και στη συνέχεια το ίδιο το I-Node του αρχείου. 7. Αν το αρχείο είναι µικρό περιέχεται µέσα στο I-Node. Αλλιώς ακολουθούνται δείκτες προς data blocks και διαβάζονται όλα τα blocks που αποτελούν το αρχείο.
Έλεγχος blocks(clusters) Έλεγχος αρχείων σε συστήµατα EXT2 Έλεγχος blocks (clusters) : Το πρόγραµµα δηµιουργεί δύο πίνακες µε τόσες θέσεις όσα και τα blocks(clusters) του δίσκου. Κάθε θέση του πίνακα είναι ένας µετρητής. Ο πρώτος καταγράφει πόσες φορές βρέθηκε το block σε κάποιο αρχείο. Ο δεύτερος καταγράφει πόσες φορές βρέθηκε το block στη λίστα ελεύθερων blocks. Οι µετρητές µηδενίζονται. ιαβάζονται όλα τα I-Nodes. Για κάθε I-Node βρίσκονται τα data blocks που αποτελούν το αντίστοιχο αρχείο ή κατάλογο και αυξάνουν τους αντίστοιχους µετρητές κατά 1 στον πρώτο πίνακα. Πρώτος πίνακας Κατόπιν διαβάζεται η λίστα ελεύθερων blocks και για κάθε block 0 1 2 3 4 5 6 7 8 9 που περιέχει αυξάνεται ο αντίστοιχος µετρητής στον δεύτερο πίνακα. εύτερος πίνακας 1 1 0 1 1 0 0 1 1 0 Στο τέλος θα πρέπει ο µετρητής για κάθε block να είναι ίσος µε 1 είτε 0 1 2 3 4 5 6 7 8 9 στον πρώτο πίνακα είτε στον 0 0 1 0 0 1 1 0 0 1 δεύτερο. Περιπτώσεις σφαλµάτων : 1. Κάποιο block δεν εµφανίζεται σε κανένα πίνακα (ο µετρητής του block και στους 2 πίνακες είναι 0) : προστίθεται στη λίστα ελεύθερων blocks ως αχρησιµοποίητο. 2. Ένα block εµφανίζεται να ανήκει σε 2 αρχεία (µετρητής στον 1ο πίνακα = 2). Σηµαντικό σφάλµα που σηµαίνει ότι πιθανότατα το περιεχόµενο του ενός ή και των 2 αρχείων έχει αλλοιωθεί : δέσµευση ελεύθερου block, αντιγραφή του κοινού block στο νέο, και παραχώρηση ενός block σε κάθε αρχείο (διορθώνει την ακεραιότητα όχι το περιεχόµενο των αρχείων). 3. Ένα block εµφανίζεται και να ανήκει σε αρχείο αλλά και στα ελεύθερα τµήµατα (έχει 1 και στους 2 πίνακες). Προκύπτει από το προηγούµενο όταν ένα από τα 2 αρχεία διαγραφεί : διαγράφεται το block από τα ελεύθερα τµήµατα 4. Ένα block εµφανίζεται 2 φορές στα ελεύθερα τµήµατα (µετρητής στον 2ο πίνακα = 2). Προκύπτει από το προηγούµενο όταν διαγραφεί και το 2ο αρχείο : ανακατασκευή της λίστας ελεύθερων τµηµάτων.
Έλεγχος συστήµατος καταλόγων. ηµιουργείται ένας πίνακας µε πλήθος θέσεων όσα και τα I-Nodes. Κάθε θέση του πίνακα είναι ένας µετρητής. Οι µετρητές µηδενίζονται. ιατρέχεται αναδροµικά το δένδρο των καταλόγων. Για κάθε αρχείο αυξάνεται κατά ένα ο µετρητής του αντίστοιχου I-Node του αρχείου. Στο τέλος ο πίνακας µετρητών περιέχει τον αριθµό των αρχείων που «δείχνουν» σε κάθε I-Node. Ο αριθµός αυτός συγκρίνεται µε το πλήθος των σκληρών συνδέσµων (hard links) του I-Node. Περίπτωση 1 : Ο µετρητής είναι µικρότερος από το καταχωρηµένο πλήθος των Hard Links (αν διαγραφούν όλα τα αρχεία που «δείχνουν» στο I-Node, το πλήθος των Hard Links θα µείνει >0 και δεν θα διαγραφεί το I-Node) : το πλήθος των Hard Links γίνεται ίσο µε το µετρητή Περίπτωση 2 : Ο µετρητής είναι µεγαλύτερος από το πλήθος των Hard Links (πριν διαγραφούν όλα τα αρχεία που «δείχνουν» στο I-Node, το πλήθος των Hard Links θα µηδενιστεί και το I-Node θα διαγραφεί) : το πλήθος των Hard Links γίνεται ίσο µε το µετρητή Αριθµός I-Node 0 1 2 3 4 5 6 7 8 9 Μετρητές αρχείων 1 1 1 1 1 2 1 1 1 2