ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX Μάθημα: Λειτουργικά Συστήματα Συστήματα Αρχείων Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης (clam@unipi.gr) Δρ. Α. Γαλάνη (agalani@unipi.gr) Λειτουργικά Συστήματα 1
Αρχεία με Χαρτογράφηση στη Μνήμη Κάποια ΛΣ υποστηρίζουν μηχανισμό για την χαρτογράφηση (mapping) των αρχείων στο χώρο των διευθύνσεων της διεργασίας που εκτελείται. Συγκεκριμένα, αξιοποιούνται οι εντολές: Map: Αυτή παρέχει ένα όνομα αρχείου και μια εικονική διεύθυνση και αναγκάζει το ΛΣ να απεικονίσει το αρχείο μέσα στο χώρο διευθύνσεων ξεκινώντας από τη συγκεκριμένη εικονική διεύθυνση Unmap: Αφαιρεί τα αρχεία από το χώρο διευθύνσεων Λειτουργικά Συστήματα 2
Αρχεία με Χαρτογράφηση στη Μνήμη Τα βασικά προβλήματα: Επειδή συνήθως η διαχείριση μνήμης γίνεται μέσω σελίδων ή / και τμημάτων, το σύστημα δεν είναι εύκολο να γνωρίζει το ακριβές μέγεθος του αρχείου (παρά μόνο σε πλήθος σελίδων) Ένα αρχείο που είναι χαρτογραφημένο στη μνήμη μπορεί να ανοίξει για συμβατική ανάγνωση από άλλη διεργασία και να δημιουργηθεί πρόβλημα «ασυνεπών» εκδόσεων του αρχείου. Τέλος αν κάποιο αρχείο είναι πολύ μεγάλο θα πρέπει η εντολή map να χαρτογραφεί μόνο μέρος του αρχείου Λειτουργικά Συστήματα 3
Υλοποίηση Συστήματος Αρχείων Οι περισσότεροι δίσκοι μπορούν να διαιρεθούν σε ένα ή περισσότερα διαμερίσματα (partitions) και κάθε διαμέρισμα να έχει ανεξάρτητο σύστημα αρχείων. Ο τομέας 0 του δίσκου ονομάζεται Βασική Εγγραφή Εκκίνησης (MBR Master Boot record) και εκτελείται όταν ξεκινάει ο υπολογιστής. Στο τέλος του MBR βρίσκεται ο Πίνακας Διαμερισμάτων που περιέχει την αρχική και τελική διεύθυνση κάθε διαμερίσματος. Ένα από τα διαμερίσματα του πίνακα σημειώνεται ως ενεργό Το πρόγραμμα του MBR έχει ως στόχο να εντοπίσει το ενεργό διαμέρισμα και να αναγνώσει το πρώτο του μπλόκ που είναι το μπλόκ εκκίνησης (boot block). Λειτουργικά Συστήματα 4
Υλοποίηση Συστήματος Αρχείων Για λόγους ομοιομορφίας, το πρώτο μπλόκ σε όλα τα διαμερίσματα είναι το μπλόκ εκκίνησης στο οποίο τοποθετείται το πρόγραμμα εκκίνησης του λειτουργικού συστήματος του συγκεκριμένου διαμερίσματος (ακόμα και αν το συγκεκριμένο διαμέρισμα δεν περιέχει λειτουργικό σύστημα εκκίνησης). Με εξαίρεση το μπλόκ εκκίνησης, η δομή των διαμερισμάτων τροποποιείται από σύστημα αρχείων σε σύστημα αρχείων. Λειτουργικά Συστήματα 5
File System Implementation Περιέχει διάφορες κρίσιμες παραμέτρους για το Σύστημα Αρχείων (τύπος συστήματος αρχείων, πλήθος μπλόκς κ.λ.π.), & τοποθετείται στη μνήμη όταν ξεκινάει ο υπολογιστής ή χρησιμοποιείται για πρώτη φορά στο σύστημα αρχείων Πληροφορίες για τα ελεύθερα μπλόκς (Χάρτης ψηφίων ή λίστα από δείκτες) Πίνακας από i-κόμβους (ένας κόμβος για κάθε αρχείο) Βσικός Κατάλογος (περιέχει την κορυφή του δένδρου του συστήματος αρχείων) A possible file system layout Λειτουργικά Συστήματα 6
Υλοποίηση Αρχείων Ίσως το πιο σημαντικό ζήτημα στην υλοποίηση της αποθήκευσης των αρχείων είναι να γνωρίζουμε σε κάθε χρονική στιγμή ποια μπλοκ του δίσκου ανήκουν σε κάθε αρχείο Χρησιμοποιούνται διάφοροι μέθοδοι σε κάθε ΛΣ Λειτουργικά Συστήματα 7
Υλοποίηση Αρχείων Συνεχής Κατανομή Η πιο απλή μέθοδος είναι να αποθηκεύουμε κάθε αρχείο ως μία συνεχή αλληλουχία μπλοκ δίσκου Παράδειγμα 1: σε έναν δίσκο που διαθέτει μπλοκ με χωρητικότητα 1ΚΒ, ένα αρχείο με μέγεθος 50ΚΒ θα δεσμεύσει 50 συνεχόμενα μπλοκ Παράδειγμα 2: σε έναν δίσκο που διαθέτει μπλοκ με χωρητικότητα 2ΚΒ, ένα αρχείο με μέγεθος 50ΚΒ θα δεσμεύσει 25 συνεχόμενα μπλοκ Λειτουργικά Συστήματα 8
Υλοποίηση Αρχείων Συνεχής Κατανομή Συνεχής κατανομή του χώρου του δίσκου για 7 αρχεία * Κάθε αρχείο ξεκινάει στην αρχή ενός νέου μπλοκ οπότε, αν το αρχείο Α έχει μέγεθος 3 ½ μπλοκ, χάνεται κάποιος χώρος στο τέλος του τελευταίου μπλοκ Λειτουργικά Συστήματα 9
Υλοποίηση Αρχείων Συνεχής Κατανομή Η συνεχής κατανομή έχει δύο σημαντικά πλεονεκτήματα: 1. Είναι απλή στην υλοποίηση επειδή για να γνωρίζουμε πού βρίσκονται τα μπλοκ ενός αρχείου χρειάζεται να θυμόμαστε μόνο 2 αριθμούς: τη διεύθυνση του 1 ου μπλοκ στον δίσκο και το πλήθος των μπλοκ που καταλαμβάνει το αρχείο Αν γνωρίζουμε τον αριθμό του 1 ου μπλοκ, ο αριθμός οποιουδήποτε άλλου μπλοκ μπορεί να βρεθεί με μία απλή πρόσθεση 2. Η απόδοση κατά την ανάγνωση είναι εξαιρετική επειδή μπορεί να διαβαστεί ολόκληρο το αρχείο από τον δίσκο με μία λειτουργία: χρειάζεται μόνο μία αναζήτηση (για το 1 ο μπλοκ) Λειτουργικά Συστήματα 10
Υλοποίηση Αρχείων Συνεχής Κατανομή Μειονέκτημα: με την πάροδο του χρόνου, ο χώρος του δίσκου κατατέμνεται Ο δίσκος δεν συμπτύσσεται για να κλείσει το κενό, επειδή αυτό θα απαιτούσε να αντιγραφούν όλα τα μπλοκ που ακολουθούν το κενό (θα μπορούσαν να είναι και εκατομύρια), κάτι το οποίο θα απαιτούσε ώρες ή ακόμα και μέρες στους μεγάλους δίσκους Η επαναχρησιμοποίηση του ελεύθερου χώρου των κενών απαιτεί τη διατήρηση μιας λίστας των κενών, πράγμα που είναι εφικτό. Όταν όμως δημιουργείται ένα νέo αρχείο, είναι απαραίτητοο να γνωρίζουμε από πριν το τελικό του μέγεθος, ώστε να μπορέσουμε να επιλέξουμε ένα κενό με κατάλληλο μέγεθος Κατάσταση του δίσκου μετά τη διαγραφή των αρχείων D και E Χρησιμοποιείται ακόμη στην πράξη στα CD-ROΜ: όλα τα μεγέθη είναι γνωστά εκ των προτέρων και δεν πρόκειται να αλλάξουν στο μέλλον κατά τη χρήση του συστήματος αρχείων του CD-ROM Λειτουργικά Συστήματα 11
Υλοποίηση Αρχείων Κατανομή Συνδεδεμένης Λίστας Αποθήκευση αρχείων σε μια συνδεδεμένη λίστα από μπλοκ δίσκου. Η πρώτη λέξη κάθε μπλοκ χρησιμοποιείται σαν δείκτης προς το επόμενο. Το υπόλοιπο τμήμα του μπλοκ χρησιμοποιείται για την αποθήκευση των δεδομένων => μπορούν να χρησιμοποιηθούν όλα τα μπλοκ του δίσκου=>δεν υπάρχει απώλεια χώρου εξαιτίας κατάτμισης (εκτός από την εσωτερική κατάτμιση του τελευταίου μπλοκ Αρκεί να αποθηκευτεί η διεύθυνση του πρώτου μπλοκ στην καταχώριση καταλόγου. Το υπόλοιπο αρχείο μπορεί να βρεθεί με αφετηρία αυτό το σημείο Λειτουργικά Συστήματα 12
Υλοποίηση Αρχείων Κατανομή Συνδεδεμένης Λίστας Όμως: Αργή τυχαία προσπέλαση Για να φτάσει στο μπλοκ n, το ΛΣ πρέπει να ξεκινήσει από την αρχή και να διαβάσει τα n-1 προηγούμενα μπλοκ, ένα προς ένα. Όλες αυτές οι αναγνώσεις είναι εξαιρετικά χρονοβόρες Απώλεια χώρου από τους δείκτες σε κάθε μπλοκ Ο διαθέσιμος χώρος δεν είναι δύναμη του 2 πια, αφού δείκτης καταλαμβάνει κάποια bytes. Τα «περίεργα» μεγέθη μπλοκ είναι λιγότερο αποδοτικά επειδή πολλά προγράμματα γράφουν και διαβάζουν μπλοκ των οποίων το μέγεθος είναι δύναμη του 2 Λειτουργικά Συστήματα 13
Υλοποίηση Αρχείων Κατανομή Συνδεδεμένης Λίστας με Χρήση ενός Πίνακα στην Κύρια Μνήμη Η λέξη με το δείκτη από κάθε μπλοκ μεταφέρεται σε ένα πίνακα στη μνήμη, που είναι γνωστός ως Πίνακας Κατανομής Αρχείων (File Allocation Table) Και οι 2 αλυσίδες τερματίζονται σε κάποιον ειδικό αριθμό (π.χ. -1), ο οποίος δεν είναι έγκυρος αριθμός μπλοκ Λειτουργικά Συστήματα 14
Υλοποίηση Αρχείων Κατανομή Συνδεδεμένης Λίστας με Χρήση ενός Πίνακα στην Κύρια Μνήμη Διαθέσιμο για αποθήκευση το σύνολο του μπλοκ Γρήγορη τυχαία προσπέλαση Μειονέκτημα: Διατηρείται στη μνήμη ολόκληρος ο πίνακας (->για έναν δίσκο 1ΤΒ και μέγεθος μπλοκ 1ΚΒ, ο πίνακας χρειάζεται 1 δισεκατομμύριο καταχωρίσεις, μία για καθένα από τα 1 δισεκατομμύριο μπλοκ) Απαιτείται ~ 60-80 MB για 20GB δίσκου Εξάρτηση του μεγέθους του πίνακα από το μέγεθος του δίσκου Λειτουργικά Συστήματα 15
Υλοποίηση Αρχείων Κόμβοι i (Index Nodes) Σε κάθε αρχείο αντιστοιχίζεται μια δομή δεδομένων: κόμβος i (i node από index node) Περιέχει τις διευθύνσεις στο δίσκο των μπλοκ του αρχείου Τις ιδιότητες του αρχείου Ο κόμβος i βρίσκεται στη μνήμη μόνο όταν είναι ανοιχτό το αντίστοιχο αρχείο Αν κάθε κόμβος i καταλαμβάνει n byte και μπορούν να είναι ανοιχτά το πολύ k αρχεία, η συνολική μνήμη που καταλαμβάνεται από τον πίνακα που περιέχει τους κόμβους i (για όλα τα ανοιχτά αρχεία) είναι μόνο kn byte => χρειάζεται να δεσμευθεί εκ των προτέρων μόνο αυτή η μικρή ποσότητα χώρου Λειτουργικά Συστήματα 16
Υλοποίηση Αρχείων Κόμβοι i (Index Nodes) Αυτή η σχεδίαση λοιπόν απαιτεί στη μνήμη την ύπαρξη πίνακα με μέγεθος που εξαρτάται από το μέγιστο επιτρεπόμενο αριθμό των ανοιχτών αρχείων και όχι το μέγεθος του δίσκου, όπως στην Κατανομή Συνδεδεμένης Λίστας με Χρήση ενός Πίνακα στην Κύρια Μνήμη Πρόβλημα: αν καθένας από τους κόμβους i διαθέτει χώρο για έναν σταθερό αριθμό διευθύνσεων δίσκου, τι θα συμβεί αν το μέγεθος ενός αρχείου υπερβεί αυτό το όριο; Πιθανή λύση:μπορεί να δεσμευθεί η τελευταία διεύθυνση δίσκου όχι για μπλοκ δεδομένων αλλά για τη διεύθυνση ενός μπλοκ που περιέχει περισσότερες διευθύνσεις από μπλοκ δίσκου Λειτουργικά Συστήματα 17
Υλοποίηση Καταλόγων Για να ανοίξει ένα αρχείο αξιοποιείται το όνομα διαδρομής που παρέχει ο χρήστης για να εντοπιστεί η καταχώριση καταλόγου στον δίσκο Η καταχώρηση καταλόγου παρέχει τις πληροφορίες που χρειάζονται για να βρεθούν τα μπλόκ του δίσκου η διεύθυνση δίσκου ολόκληρου του αρχείου για τη περίπτωση συνεχούς κατάτμισης Ο αριθμός του πρώτου μπλόκ για τις δύο περιπτώσεις συνδεδεμένης λίστας Ο αριθμός του κόμβου i Ένα ζήτημα είναι η επιλογή του χώρου για την αποθήκευση των ιδιοτήτων (attributes) του αρχείου Λειτουργικά Συστήματα 18
Υλοποίηση Καταλόγων (a) Απλή Σχεδίαση: κάθε κατάλογος αποτελείται από μία λίστα με καταχωρίσεις σταθερού μεγέθους (μια ανά αρχείο), που περιέχουν το όνομα του αρχείου (σταθερού μεγέθους), μια δομή με τις ιδιότητες του αρχείου, και μια ή περισσότερες διευθύνσεις στο δίσκο (μέχρι κάποιο μέγιστο) οι οποίες αναφέρουν που βρίσκονται τα μπλοκ του δίσκου Λειτουργικά Συστήματα 19
Υλοποίηση Καταλόγων ((b) Σχεδίαση καταλόγου στον οποίο κάθε καταχώριση αναφέρεται απλώς σε έναν κόμβο i: οι ιδιότητες αποθηκεύονται μέσα στους κόμβους, και όχι στις καταχωρήσεις καταλόγου => οι καταχωρίσεις καταλόγου είναι μικρότερες: απλώς το όνομα του αρχείου και ο αριθμός του κόμβου i Λειτουργικά Συστήματα 20
Διαχείριση Μεγάλων Ονομάτων Αρχείων στους Καταλόγους Όλα σχεδόν τα ΛΣ υποστηρίζουν μεγάλα ονόματα αρχείων μεταβλητού μήκους. Πώς μπορούν να υλοποιηθούν; Απλούστερη προσέγγιση: να τεθεί ένα όριο στο μήκος των ονομάτων των αρχείων (τυπικά 255 χαρακτήρες) και να χρησιμοποιηθεί μία από τις προηγούμενες 2 μεθόδους, δεσμεύοντας 255 χαρακτήρες για κάθε όνομα αρχείου Η προσέγγιση αυτή σπαταλάει αρκετό χώρο στον κατάλογο, επειδή ελάχιστα αρχεία έχουν τόσο μεγάλα ονόματα => για να αυξηθεί η αποδοτικότητα απαιτείται μία διαφορετική δομή Λειτουργικά Συστήματα 21
Διαχείριση Μεγάλων Ονομάτων Αρχείων στους Καταλόγους α) Εσωτερικά: κάθε καταχώριση καταλόγου περιλαμβάνει ένα σταθερό τμήμα, το οποίο ξεκινάει συνήθως με το μέγεθος της καταχώρισης και συνεχίζεται με δεδομένα σταθερής δομής (π.χ. ιδιοκτήτης, ώρα δημιουργίας, πληροφορίες προστασίας, κ.ά.). Η κεφαλίδα ακολουθείται από το πραγματικό όνομα αρχείου, όσο μεγάλο και αν είναι. Κάθε όνομα αρχείο τερματίζεται με έναν ειδικό χαρακτήρα (Χ). Για να επιτρέπεται σε κάθε καταχώριση καταλόγου να ξεκινάει σε όριο λέλξς, κάθε όνομα αρχείου συμπληρώνεται μέχρι το τέλος της τελευταίας λέξης Λειτουργικά Συστήματα 22
Διαχείριση Μεγάλων Ονομάτων Αρχείων στους Καταλόγους β) Σε Σωρό: οι καταχωρήσεις καταλόγου έχουν μεταβλητό μήκος και όλα τα ονόματα αρχείων διατηρούνται σε έναν σωρό στο τέλος του καταλόγου => δεν υπάρχει πλέον πραγματική ανάγκη να ξεκινούν τα ονόματα αρχείων στα όρια των λέξεων και δεν χρειάζονται χαρακτήρες συμπλήρωσης μετά από τα ονόματα των αρχείων Λειτουργικά Συστήματα 23
Κοινόχρηστα Αρχεία Υπάρχουν προβλήματα συγχρονισμού του αρχείου!! Λειτουργικά Συστήματα 24
Κοινόχρηστα Αρχεία Το πρόβλημα του συγχρονισμού μπορεί να λυθεί με δύο τρόπους: Τα μπλόκ του δίσκου δεν παρουσιάζονται στους καταλόγους αλλά σε μικρές δομές δεδομένων (π.χ. Κόμβους i για το UNIX) οι οποίες είναι συσχετισμένες με το ίδιο το αρχείο O B συνδέεται με ένα από τα αρχεία του C μέσω της δημιουργίας ενός νέου αρχείου τύπου LINK, και της τοποθέτησης του νέου αυτού αρχείου στον κατάλογο του Β. Το νέο αρχείο περιέχει απλώς το όνομα της διαδρομής που έχει συνδεθεί. Ο τρόπος αυτός είναι γνωστός ως «Συμβολική Σύνδεση». Λειτουργικά Συστήματα 25
Κοινόχρηστα Αρχεία (με χρήση μικρών Δομών Δεδομένων) (a) Αρχική Κατάσταση (b) Μετά τη σύνδεση του χρήστη Β με το αρχείο, ο μετρητής συνδέσεων στον κόμβο αυξάνει κατά 1, ώστε το σύστημα να γνωρίζει πόσες καταχωρήσεις καταλόγων δείχνουν στο αρχείο της συγκεκριμένη χρονική στιγμή (c) Μετά που ο αρχικός χρήστης C διαγράφει το αρχείο (=> διαγράφει την καταχώριση καταλόγου του C) παραμένει άθικτος ο κόμβος και ο μετρητής των συνδέσεων παίρνει την τιμή 1. Όταν ο Β αποφασίσει να το διαγράψει, ο μετρητής θα γίνει 0 και το αρχείο θα διαγραφεί Λειτουργικά Συστήματα 26
Διαχείριση Χώρου Δίσκου Αποθήκευση αρχείου σε συνεχή ακολουθία από byte Οδηγεί στο πρόβλημα της μεταφοράς του αρχείου όταν αυτό μεγαλώσει Αποθήκευση αρχείου σε μπλοκ σταθερού μεγέθους Ποιο πρέπει να είναι το μέγεθος του μπλοκ Μεγάλο μέγεθος μπλοκ: Απώλεια χώρου σε μικρά αρχεία Ταχύτερη μεταφορά δεδομένων Μικρό μέγεθος μπλοκ: Καλύτερη χρήση του χώρου του δίσκου Μικρότερος ρυθμός μεταφοράς δεδομένων Κεντρική τιμή μεγέθους αρχείων: 2475 byte Λειτουργικά Συστήματα 27
Διαχείριση Χώρου Δίσκου Block size Η συνεχής καμπύλη (αριστερή κλίμακα) δίνει το ρυθμό μεταφοράς δεδομένων του δίσκου Η διακεκομμένη καμπύλη (δεξιά κλίμακα) δίνει την αποδοτικότητα χρήσης του χώρου του δίσκου Για αρχεία μεγέθους 2KB Λειτουργικά Συστήματα 28