Professional Documents
Culture Documents
Ενότητα # 1: Εισαγωγή
Σκοποί ενότητας
• Κατανόηση των στόχων και της ιστορικής
εξέλιξης των λειτουργικών συστημάτων (ΛΣ)
• Επισκόπηση του υλικού υπολογιστών
• Κατανόηση των τύπων των ΛΣ
• Παρουσίαση των βασικών εννοιών και των
τυπικών κλήσεων των ΛΣ
• Παρουσίαση των τρόπων δόμησης ΛΣ
• Εισαγωγή στη γλώσσα C
4
Περιεχόμενα ενότητας
• Tι είναι το λειτουργικό σύστημα (ΛΣ);
• Ιστορία ΛΣ
• Υλικό υπολογιστών
• Είδη ΛΣ
• Έννοιες ΛΣ
• Κλήσεις συστήματος
• Δομή ΛΣ
• Η γλώσσα C
5
Τι είναι το λειτουργικό σύστημα;
7
Τι είναι το ΛΣ (2 από 3);
9
Η επεκτεταμένη μηχανή (1 από 2)
• Όψη του λειτουργικού συστήματος από πάνω
– Μετατροπή μιας άσχημης εικόνας σε πιο όμορφη
• Το υλικό των υπολογιστών είναι περίπλοκο
– Κάθε συσκευή έχει τις δικές τις ιδιαιτερότητες
10
11
Ο διαχειριστής πόρων
• Όψη του λειτουργικού συστήματος από κάτω
– Διαχείριση των διάφορων πόρων ενός συστήματος
– Μας ενδιαφέρει η αποδοτική διαχείριση των πόρων
• Δυνατότητα ταυτόχρονης εκτέλεσης προγραμμάτων
– Κάθε πρόγραμμα θεωρεί ότι έχει τη δική του μηχανή
• Διαχείριση και προστασία μνήμης και συσκευών
• Πολύπλεξη πόρων σε δύο άξονες
– Χρόνος: διαδοχική χρήση ΚΜΕ από τα προγράμματα
– Χώρος: συνύπαρξη προγραμμάτων στη μνήμη
12
Ιστορία ΛΣ
Ιστορία ΛΣ (1 από 10)
• Πρώτη γενιά (1945-1955): λυχνίες κενού
– Παράδειγμα: ENIAC, UNIVAC
– Προγραμματισμός από τους σχεδιαστές
– Απόλυτη γλώσσα μηχανής ή πίνακες καλωδιώσεων
– Σχετικά απλές μηχανές με απλές λειτουργίες
– Δεν υπήρχε λειτουργικό σύστημα
• Χρήση διάτρητων καρτών για προγραμματισμό
– Αρχικά χρήση για είσοδο δεδομένων
– Αντικατέστησε τους πίνακες καλωδιώσεων
14
15
Ιστορία ΛΣ (3 από 10)
• Αυτοματοποίηση συστημάτων δέσμης
– Αντιγραφή εργασιών σε ταινίες σε μικρό υπολογιστή
– Υποβολή ταινίας με εργασίες στον μεγάλο υπολογιστή
– Έξοδος αποτελεσμάτων σε άλλη ταινία
– Εκτύπωση αποτελεσμάτων σε μικρό υπολογιστή
16
17
Ιστορία ΛΣ (5 από 10)
• Τρίτη γενιά (1965-1980): ολοκληρωμένα κυκλώματα
– Αντικατάσταση τρανζίστορ με κυκλώματα SSI
– Προσανατολισμός σε συγκεκριμένες εφαρμογές
• Οικογένεια υπολογιστών
– Ιδέα της IBM με το System/360
– Μηχανές με ίδια αρχιτεκτονική και σύνολο εντολών
– Διαφορετικές δυνατότητες και κόστος
– Ίδια προγράμματα (εντός λογικών πλαισίων)
– Χρειάζεται και το ίδιο λειτουργικό σύστημα
– Εξαιρετικά περίπλοκο λόγω των διαφορετικών μηχανών
18
19
Ιστορία ΛΣ (7 από 10)
• Χρονομερισμός
– Βασίζεται στην πολυπρογραμματισμό
– Κάθε χρήστης έχει το δικό του τερματικό
– Το σύστημα εξυπηρετεί τους χρήστες ψευδοταυτόχρονα
• Το σύστημα MULTICS
– Παροχή υπολογιστικής ισχύος από κεντρικό υπολογιστή
– Όπως το cloud computing αλλά με έναν υπολογιστή!
• Τα συστήματα DEC PDP
– Μικροί και (σχετικά οικονομικοί) υπολογιστές
– Μεγάλη εξάπλωση σε περισσότερους οργανισμούς
20
21
Ιστορία ΛΣ (9 από 10)
• Τέταρτη γενιά (1980-): προσωπικοί υπολογιστές
– Χρήση κυκλωμάτων VLSI με τεράστιες δυνατότητες
– Δυνατότητα τοποθέτησης ΚΜΕ σε ένα κύκλωμα
– Εμφάνιση προσωπικών υπολογιστών
• ΛΣ προσωπικών υπολογιστών
– Το CP/M γράφτηκε για τον 8080 και μετά τον Z80
– Το MS-DOS γράφτηκε για τον 8088/8086
• Αρχικά σαν το CP/M, μετά με ιδέες από το UNIX
– Εμφάνιση υπολογιστών με γραφικές διεπαφές
22
23
Υλικό υπολογιστών
ΛΣ και υλικό
26
Επεξεργαστής (2 από 4)
• Σωλήνωση
– Χωριστές μονάδες για κάθε στάδιο εκτέλεσης
– Εκτέλεση διαφορετικής εντολής σε κάθε ομάδα
• Υπερβαθμωτοί επεξεργαστές
– Πολλαπλές μονάδες εκτέλεσης
– Προσκόμιση και αποκωδικοποίηση πολλών εντολών
– Εκτέλεση εντολών και εκτός σειράς
27
Επεξεργαστής (3 από 4)
• Καταστάσεις λειτουργίας επεξεργαστή
– Κατάσταση χρήστη και κατάσταση πυρήνα
– Σε κατάσταση χρήστη επιτρέπεται υποσύνολο εντολών
• Κλήσεις συστήματος
– Εντολές που προκαλούν παγίδα υλικού
– Μετάβαση σε κατάσταση πυρήνα με ελεγχόμενο τρόπο
• Πολυνηματικοί και πολυπύρηνοι επεξεργαστές
– Πολλοί τρόποι αξιοποίησης διαθέσιμων τρανζίστορ
– Κρυφή μνήμη, πολλαπλές μονάδες εκτέλεσης
– Γιατί όχι και πολλές μονάδες ελέγχου;
28
Επεξεργαστής (4 από 4)
Μνήμη (2 από 2)
• Κρυφές μνήμες
– Οργανώνονται και αυτές ιεραρχικά
– Γενικά θέματα οργάνωσης κρυφών μνημών
– Πολιτικές προσκόμισης, τοποθέτησης, αντικατάστασης
• Κρυφή μνήμη επιπέδου 1 (L1)
– Στο εσωτερικό του επεξεργαστή
– Συνήθως χωριστή για εντολές και δεδομένα
• Κρυφή μνήμη επιπέδου 2 (L2)
– Εντός ή εκτός επεξεργαστή
– Κοινή ή καταμεριζόμενη ανάμεσα στους πυρήνες
31
Αποθήκευση
• Μαγνητικοί δίσκοι
– Τροχιές/κύλινδροι, επιφάνειες, τομείς
– Αρκετός χρόνος μέχρι να βρεθεί το σωστό σημείο
– Αποθήκευση δεδομένων και προγραμμάτων
32
• Είσοδος/έξοδος με διακοπές
– Ο ελεγκτής διακόπτει την CPU όταν ολοκληρώσει
– Μεταφορά ελέγχου στο κατάλληλο σημείο της μνήμης
• Είσοδος/έξοδος με DMA
– Ο ελεγκτής μεταφέρει ο ίδιος τα δεδομένα στη μνήμη
34
Δίαυλοι (1 από 2)
36
Εκκίνηση ΛΣ
• Βασικό λογισμικό συστήματος στο BIOS
– Εξετάζει τις βασικές συσκευές σε γνωστές θέσεις
– Εξετάζει τους διαύλους για πρόσθετες συσκευές
– Καθορισμός συσκευής εκκίνησης μέσω μνήμης CMOS
– Φόρτωση τομέα 0 από συσκευή εκκίνησης
– Προσδιορισμός ενεργής διαμέρισης
– Φόρτωση προγράμματος εκκίνησης από τη διαμέριση
– Φόρτωση λειτουργικού συστήματος
– Εξέταση συσκευών από BIOS και φόρτωση οδηγών
– Αρχικοποίηση δομών δεδομένων και φόρτωση φλοιού
37
Είδη ΛΣ
Είδη ΛΣ (1 από 3)
• ΛΣ για μεγάλους υπολογιστές (mainframes)
– Πολύ μεγάλες ικανότητες εισόδου/εξόδου
– Επεξεργασία δέσμης, συναλλαγών και χρονομερισμός
• ΛΣ για διακομιστές (servers)
– Διαχείριση αιτημάτων πάρα πολλών πελατών
– Μεγάλοι υπολογιστές ή ισχυροί μικροϋπολογιστές
• ΛΣ για πολυεπεξεργαστές (multiprocessors)
– Από παράλληλοι ως πολυπύρηνοι υπολογιστές
– Συνήθως παραλλαγές των ΛΣ για διακομιστές
39
Είδη ΛΣ (2 από 3)
• ΛΣ προσωπικών υπολογιστών (personal computers)
– Τα συνηθισμένα συστήματα ενός (κυρίως) χρήστη
• ΛΣ για υπολογιστές χειρός (handhelds)
– Μικρότερη δυνατότητα αποθήκευσης (χωρίς δίσκους)
• Ενσωματωμένα ΛΣ (embedded)
– Ελέγχουν συσκευές όπως DVD, τηλέφωνα, media players
– Εκτελούν μόνο προκαθορισμένα προγράμματα
• ΛΣ κόμβων αισθητήρων (sensors)
– Πολύ απλά συστήματα οδηγούμενα από γεγονότα
40
Είδη ΛΣ (3 από 3)
• ΛΣ πραγματικού χρόνου
– Αυστηρά συστήματα πραγματικού χρόνου
• Όλες οι εργασίες πρέπει να εκτελούνται πάντα εγκαίρως
• Συστήματα ελέγχου, ηλεκτρονικά αεροσκαφών
– Ήπια συστήματα πραγματικού χρόνου
• Οι εργασίες πρέπει να εκτελούνται συνήθως εγκαίρως
• Κινητά τηλέφωνα, media players
• ΛΣ έξυπνων καρτών
– Εκτελούνται σε έξυπνες κάρτες με ελάχιστους πόρους
41
Έννοιες ΛΣ
Διεργασίες (1 από 2)
• Διεργασίες: προγράμματα που εκτελούνται
– Χώρος διευθύνσεων: πρόγραμμα και δεδομένα
– Πόροι: καταχωρητές, ανοιχτά αρχεία, σήματα
• Προσωρινή αναστολή διεργασίας
– Αποθήκευση πόρων στον πίνακα διεργασιών
– Ο πίνακας διεργασιών είναι συνέχεια στη μνήμη
– Ο χώρος διευθύνσεων μπορεί να είναι εν μέρει στη μνήμη
• Κλήσεις διαχείρισης διεργασιών
– Δημιουργία και τερματισμός διεργασιών
– Επικοινωνία διεργασιών (όταν αυτό επιτρέπεται)
43
Διεργασίες (2 από 2)
• Δένδρα διεργασιών
• Σήματα (signals)
– Ειδοποιήσεις προς τη διεργασία για κάποιο γεγονός
– Παράδειγμα: εκπνοή χρονομέτρου (alarm)
• Προνόμια διεργασίας
– Κωδικός ταυτότητας χρήστη (UID)
– Κωδικός ταυτότητας ομάδας (GID)
44
Χώροι διευθύνσεων
• Χώροι διευθύνσεων
– Τα ΛΣ γενικά υποστηρίζουν πολλές διεργασίες
– Μηχανισμός προστασίας κάθε διεργασίας
• Απομόνωση της μνήμης της
– Εικονική μνήμη: μεγάλος χώρος διευθύνσεων
• Δεν είναι όλος ταυτόχρονα στην κύρια μνήμη
• Διευκολύνει τη συνύπαρξη διεργασιών στη μνήμη
• Ό,τι δεν είναι στην κύρια μνήμη είναι στο δίσκο
45
Αρχεία (1 από 4)
• Αρχεία
– Λογική όψη συσκευών αποθήκευσης
• Ενιαία μορφή αρχείων σε όλες τις συσκευές
– Οργάνωση αρχείων σε καταλόγους
– Περιγραφέας αρχείου: δείκτης σε ανοιχτό αρχείο
• Χρησιμοποιείται από τις διεργασίες
• Χειριστήριο για πράξεις στα αρχεία
46
Αρχεία (2 από 4)
Αρχεία (4 από 4)
• Ειδικά αρχεία
– Απεικόνιση των συσκευών σε αρχεία
– Ειδικά αρχεία μπλοκ ή ομάδων
• Συσκευές με τυχαία προσπελάσιμα μπλοκ (π.χ. δίσκοι)
– Ειδικά αρχεία χαρακτήρων
• Συσκευές με ρεύματα χαρακτήρων (π.χ. πληκτρολόγια)
• Αγωγοί ή σωληνώσεις (pipes)
– Ψευδοαρχείο ανάμεσα σε δύο διεργασίες
– Επιτρέπει την επικοινωνία των διεργασιών
49
Άλλες έννοιες
• Είσοδος/έξοδος
– Υποσύστημα διαχείρισης συσκευών εισόδου/εξόδου
– Οδηγοί συσκευών ανά κατηγορία συσκευής
• Προστασία
– Μηχανισμός που προστατεύει τα στοιχεία των διεργασιών
– Παράδειγμα: bit προστασίας στο UNIX
• Κέλυφος
– Δεν είναι μέρος του λειτουργικού (αλλάζει «εύκολα»)
– Επιτρέπει στον χρήση να επικοινωνεί με το λειτουργικό
– Γραμμή εντολών ή γραφική διεπαφή
50
51
Ανακύκλωση ιδεών (2 από 3)
• Μεγάλες μνήμες
– Οι μεγάλοι υπολογιστές ξεκίνησαν με πολύ μικρές μνήμες
– Όλα τα προγράμματα σε συμβολική γλώσσα
– Η αύξηση μνήμης οδήγησε στους μεταγλωττιστές
– Οι μίνι/μίκρο-υπολογιστές γύρισαν σε συμβολική γλώσσα
• Υλικό προστασίας
– Οι μεγάλοι υπολογιστές δεν είχαν υλικό προστασίας
– Τα ΛΣ δεν είχαν πολυπρογραμματισμό
– Το υλικό προστασίας επέτρεψε πολυπρογραμματισμό
– Το ίδιο έγινε με μίνι/μίκρο-υπολογιστές
52
53
Κλήσεις συστήματος
55
Κλήσεις συστήματος (2 από 3)
• Παράδειγμα: count=read(fd,&buffer,nbytes);
56
57
Διαχείριση διεργασιών (1 από 3)
• Διαχείριση καταλόγων
– mkdir(): δημιουργία νέου καταλόγου
– rmdir(): διαγραφή καταλόγου (πρέπει να είναι κενός)
– link(): δημιουργία συνδέσμου προς αρχείο/κατάλογο
– unlink(): διαγραφή συνδέσμου ή αρχείου
– (u)mount(): ανάρτηση/απομάκρυνση συστήματος αρχείων
62
Διάφορες κλήσεις
66
Δομή ΛΣ
Δομή ΛΣ (1 από 7)
• Μονολιθικά συστήματα
– Όλο το ΛΣ είναι ένα τεράστιο πρόγραμμα
– Το σύνολο του ΛΣ εκτελείται σε κατάσταση πυρήνα
– Κάθε διαδικασία μπορεί να καλέσει κάθε άλλη
• Τα πάντα είναι ορατά σε όλους (δομές, διαδικασίες)
• Δυσκολία στη συντήρηση και στη διόρθωση σφαλμάτων
– Στοιχειώδης οργάνωση του κώδικα
• Η είσοδος στο ΛΣ γίνεται με μια παγίδα
• Κύριο πρόγραμμα που καλεί την αντίστοιχη διαδικασία
• Διαδικασίες που εξυπηρετούν τις κλήσεις συστήματος
68
Δομή ΛΣ (2 από 7)
• Πολυεπίπεδα συστήματα
– Ιδέα του E.W. Dijkstra που εφαρμόστηκε στο THE
– Κάθε επίπεδο παρέχει υπηρεσίες στα παραπάνω επίπεδα
– Γενικεύθηκε στο σύστημα MULTICS
• Οργάνωση σε ομόκεντρους δακτυλίους
• Συνδυασμός δόμησης σε επίπεδα και προστασίας
69
Δομή ΛΣ (3 από 7)
• Μικροπυρήνες
– Ελάχιστο σύνολο λειτουργιών σε κατάσταση επόπτη
• Διακοπές, διεργασίες, χρονοπρογραμματισμός, IPC
– Οι υπόλοιπες εκτελούνται σε κατάσταση χρήστη
– Επικοινωνία μέσω μηνυμάτων ή IPC
– Μείωση πιθανότητας κατάρρευσης λόγω σφαλμάτων
70
Δομή ΛΣ (4 από 7)
• Μοντέλο πελάτη-εξυπηρετητή
– Εξυπηρετητές: παρέχουν υπηρεσίες
– Πελάτες: ζητούν υπηρεσίες από τους εξυπηρετητές
– Επικοινωνία μέσω μεταβίβασης μηνυμάτων
• Απλουστεύει την κατανομή υπηρεσιών σε δίκτυο
71
Δομή ΛΣ (5 από 7)
• Εικονικές μηχανές
– Ξεκίνησε με το VM/370 και επιβιώνει στο z/VM
– Βασικός πυρήνας που εκτελείται πάνω στο υλικό
– Παρέχει την εικόνα πολλών πανομοιότυπων μηχανών
• Παγίδευση και εκτέλεση όλων των προνομιούχων εντολών
– Οι μηχανές είναι ακριβή αντίγραφα του υλικού
• Αρχικά, συστήματα δέσμης ή διαλογικά συστήματα ενός χρήστη
• Σήμερα, πλήρη λειτουργικά συστήματα όπως Linux ή Windows
72
Δομή ΛΣ (6 από 7)
74
Η γλώσσα C
Η γλώσσα C (1 από 3)
• Από την Java στην C σε λίγα λεπτά
– Η Java μοιάζει αρκετά στη σύνταξη με τη C
– Απλοί τύποι δεδομένων και δομές, πίνακες και ενώσεις
– Συνηθισμένες εντολές ελέγχου (if, switch, for, while)
– Δυνατότητα χρήσης δεικτών στη μνήμη
– Οι δείκτες θεωρητικά έχουν τύπους (π.χ. σε ακέραιο)
– Η C δεν κάνει αυτόματη διαχείριση μνήμης
• Απαιτείται ρητή δέσμευση και αποδέσμευση μνήμης
• Η δυναμική μνήμη χρησιμοποιείται μέσω δεικτών
– Η C είναι πολύ ισχυρή, αλλά και πολύ επικίνδυνη
76
Η γλώσσα C (2 από 3)
• Αρχεία κεφαλίδες
– Περιέχουν δηλώσεις και ορισμούς τύπων / μακροεντολών
– Οι αντικαταστάσεις γίνονται από τον προεπεξεργαστή C
• Αντικατάσταση κειμένου, μεταγλώττιση υπό συνθήκη
• Μεταγλώττιση και σύνδεση
– Ο μεταγλωττιστής καλεί πρώτα τον προεπεξεργαστή
– Η έξοδος του μεταγλωττιστή είναι αντικειμενικό αρχείο
– Τα αρχεία συνδέονται (στατικά ή δυναμικά) σε εκτελέσιμα
– Χρήση make για μερική μεταγλώττιση συστήματος
77
Η γλώσσα C (3 από 3)
78
Περιεχόμενα ενότητας
• Διεργασίες
• Νήματα
• Διαδιεργασιακή επικοινωνία
• Χρονοπρογραμματισμός
• Κλασικά προβλήματα
5
Διεργασίες
7
Το μοντέλο της διεργασίας (2 από 3)
• Μοντέλο διεργασίας
– Οι διεργασίες φαίνεται ότι εκτελούνται ανεξάρτητα
– Κάθε ΚΜΕ όμως ασχολείται με μία διεργασία τη φορά
– Η ταχύτητα εκτέλεσης των διεργασιών είναι απρόβλεπτη
• Εξαρτάται από τον τρόπο εναλλαγής των διεργασιών
• Μπορεί να αλλάζει σε κάθε εκτέλεση
8
9
Δημιουργία διεργασίας (1 από 2)
• Αρχικοποίηση του συστήματος
– Διεργασίες προσκηνίου όπως η διεργασία σύνδεσης
– Διεργασίες παρασκηνίου όπως ο έλεγχος για e-mail
• Δημιουργία διεργασίας από εκτελούμενη διεργασία
– Καταμερισμός εργασίας (σωληνωτά ή παράλληλα)
• Αίτηση χρήστη για δημιουργία διεργασίας
– Από το φλοιό ή από γραφική διεπαφή
• Εκκίνηση διεργασίας δέσμης
– Ξεκινάει όταν έρθει η σειρά της (επιλεγεί προς εκτέλεση)
10
12
Ιεραρχίες διεργασιών
• Ομάδα διεργασιών στο UNIX: διεργασία και απόγονοι
– Μπορούν να σταλούν σήματα σε όλη την ομάδα
– Κάθε διεργασία αποφασίζει πώς θα τα χειριστεί
• Όλες οι διεργασίες στο UNIX είναι απόγονοι της init
– Δημιουργεί διεργασίες για κάθε τερματικό
– Οι διεργασίες αυτές τελικά δημιουργούν έναν φλοιό
– Ο φλοιός εκτελείται για λογαριασμό του χρήστη
• Στα Windows δεν υπάρχει ιεραρχία διεργασιών
– Η πατρική διεργασία έχει χειριστήριο προς το παιδί
– Μπορεί όμως να μεταβιβαστεί και σε άλλες διεργασίες
13
Καταστάσεις διεργασιών (1 από 4)
• Υλοποίηση διεργασιών
– Πίνακας διεργασιών: μία δομή ανά διεργασία
– Επιτρέπει την διακοπή και συνέχιση των διεργασιών
16
17
Μοντελοποίηση
πολυπρογραμματισμού
Νήματα
Χρήση των νημάτων (1 από 6)
• Οργάνωση νημάτων
– Παράδειγμα: εξυπηρετητής Ιστού
– Το νήμα-διεκπεραιωτής δέχεται αιτήσεις από το δίκτυο
– Τα νήματα-εργάτες εκτελούν τις αιτήσεις
– Όλα τα νήματα έχουν πρόσβαση στην κρυφή μνήμη
21
Χρήση των νημάτων (3 από 6)
23
Χρήση των νημάτων (5 από 6)
• Τα νήματα απλοποιούν τον κώδικα
– Συνδυάζουν πολυπρογραμματισμό με κοινή μνήμη
– Οι κλήσεις εισόδου/εξόδου οδηγούν σε εμποδισμό
• Τα υπόλοιπα νήματα συνεχίζουν να εκτελούνται κανονικά
– Η επικοινωνία μεταξύ των νημάτων είναι γρήγορη
• Γίνεται μέσω κοινής μνήμης
• Δεν χρειάζεται παρέμβαση του πυρήνα
24
Μοντέλο Γνωρίσματα
Παράλληλα κλήσεις συστήματος που
Νήματα
μπλοκάρουν (ανασταλτικές)
Δεν υπάρχει παραλληλία, κλήσεις
Διεργασία με ένα
συστήματος που μπλοκάρουν
νήμα
(ανασταλτικές)
Μηχανή
Παραλληλία, κλήσεις συστήματος που δεν
πεπερασμένων
μπλοκάρουν (μη ανασταλτικές), διακοπές
καταστάσεων
25
Κλασικό μοντέλο νημάτων (1 από 5)
27
Κλασικό μοντέλο νημάτων (3 από 5)
• Τα νήματα δεν προστατεύονται
– Δεν απομονώνονται όπως οι διεργασίες
– Οι πόροι είναι κοινοί σε όλα τα νήματα
• Τα νήματα μπορούν εύκολα να ανταλλάσσουν δεδομένα
• Μπορούν όμως και να καταστρέφουν το ένα το άλλο
• Είναι ευθύνη του προγραμματιστή να προσέχει
28
30
31
Νήματα στο POSIX (2 από 3)
• Νήματα στο POSIX (πακέτο pthreads)
– Κάθε νήμα περιγράφεται από τυποποιημένη δομή
• Μεταβιβάζεται κατά τη δημιουργία του νήματος
• Μπορούμε να αφήσουμε προεπιλεγμένες τιμές
– Η δημιουργία νήματος επιστρέφει ένα αναγνωριστικό
• Παρόμοιο με το αναγνωριστικό διεργασίας
• Ο πατέρας μπορεί να περιμένει τον τερματισμό του παιδιού
– Το νήμα μπορεί να παραχωρήσει τον επεξεργαστή
32
35
Στο χώρο του πυρήνα
• Υλοποίηση επιπέδου πυρήνα
– Όλοι οι πίνακες και κλήσεις εμπλέκουν τον πυρήνα
– Ο πυρήνας αντιμετωπίζει το μπλοκάρισμα
• Μπορεί να επιλέξει άλλο νήμα της ίδιας διεργασίας
– Μεγάλο κόστος για τη δημιουργία νέων νημάτων
• Παράκαμψη με διατήρηση νημάτων σε ανενεργή κατάσταση
– Πώς λειτουργεί η fork και τα σήματα;
• Υβριδικές υλοποιήσεις
– Υλοποίηση νημάτων στον πυρήνα
– Πολλά νήματα χρήστη πάνω σε κάθε νήμα πυρήνα
36
Ενεργοποιήσεις χρονοπρογραμματιστή
37
Αναδυόμενα νήματα
• Αναδυόμενα νήματα
– Δημιουργούνται όταν έρχεται ένα νέο αίτημα
– Κατάλληλα για κατανεμημένα και δικτυακά συστήματα
38
39
Μετατροπή κώδικα (2 από 3)
41
Διαδιεργασιακή επικοινωνία
Επικοινωνία διεργασιών
• Επικοινωνία διεργασιών
– Κανονικά οι διεργασίες είναι απομονωμένες
– Επικοινωνούν μόνο με αυστηρά ελεγχόμενο τρόπο
• Τρεις παραλλαγές επικοινωνίας διεργασιών
– Μεταβίβαση πληροφοριών μεταξύ τους
• Παράδειγμα: σωλήνωση στο φλοιό του UNIX
– Αποφυγή συγκρούσεων για πόρους
• Παράδειγμα: δέσμευση θέσεων σε σύστημα κρατήσεων
– Εξαρτήσεις ανάμεσα στις διεργασίες
• Παράδειγμα: παραγωγή και κατανάλωση δεδομένων
43
Συνθήκες ανταγωνισμού (1 από 2)
45
Κρίσιμες περιοχές (1 από 2)
• Αμοιβαίος αποκλεισμός
– Βασική τεχνική αποφυγής συνθηκών ανταγωνισμού
• Γενική μορφή του αμοιβαίου αποκλεισμού
– Κάθε διεργασία περιέχει ορισμένες κρίσιμες περιοχές
– Οι κρίσιμες περιοχές εκτελούνται με αποκλεισμό
– Γενικότερα έχουμε 4 συνθήκες για αποδοτική λύση
• Μόνο μία διεργασία μπορεί να είναι στην κρίσιμη περιοχή
• Δεν βασιζόμαστε σε ταχύτητα εκτέλεσης ή πλήθος ΚΜΕ
• Διεργασίες εκτός κρίσιμης περιοχής δεν εμποδίζουν τις άλλες
• Δεν επιτρέπεται οι διεργασίες να περιμένουν επ’ αόριστον
46
48
• Αυστηρή εναλλαγή
– Χρήση μεταβλητής που δείχνει ποιος έχει σειρά
• Ονομάζεται και κλείδωμα περιστροφής
• Η μεταβλητή αλλάζει στο τέλος της κρίσιμης περιοχής
– Το πρόβλημα είναι ότι παραβιάζονται οι συνθήκες
• Έστω ότι η διεργασία θέλει να ξαναμπεί στην κρίσιμη περιοχή
• Πρέπει να περιμένει να μπει πρώτα η άλλη διεργασία
49
Αναμονή με απασχόληση (3 από 7)
51
Αναμονή με απασχόληση (5 από 7)
• Η εντολή TSL
– Απαιτεί μια νέα εντολή υλικού: TSL register, lock
• Αντιγράφει τη θέση μνήμης lock στον register
• Αποθηκεύει την τιμή 1 στη θέση μνήμης lock
• Οι δύο λειτουργίες γίνονται ατομικά
• Ο δίαυλος κλειδώνεται όσο διαρκεί η εντολή
• Το κλείδωμα επηρεάζει όλους τους επεξεργαστές
– Η TSL προσπαθεί να «κλειδώσει» τη θέση lock
• Αν το πέτυχε, θα το εξετάσει η επόμενη εντολή
52
• Η εντολή XCHG
– Παραλλαγή της ίδιας ιδέας με την TSL
– Η XCHG ανταλλάσει τις τιμές των register και lock
• Η ανταλλαγή γίνεται πάλι ατομικά
– Πάλι έχουμε δύο πράξεις σε ένα βήμα
• Ανάγνωση και αλλαγή της θέσης lock
– Χρησιμοποιείται στους επεξεργαστές x86
54
55
Λήθαργος και αφύπνιση (2 από 4)
• Πρόβλημα παραγωγού-καταναλωτή
– Δύο διεργασίες μοιράζονται μια περιορισμένη μνήμη
– Παραγωγός: τοποθετεί αντικείμενα στην περιοχή
• Δεν μπορεί να προχωρήσει αν δεν υπάρχουν κενές θέσεις
– Καταναλωτής: αφαιρεί αντικείμενα από την περιοχή
• Δεν μπορεί να προχωρήσει αν δεν υπάρχουν πλήρεις θέσεις
– Έστω ότι έχουμε n θέσεις μνήμης και count μη κενές
• Ο παραγωγός μπλοκάρεται όταν count=n
• Ο παραγωγός ξυπνά τον καταναλωτή όταν count=1
• Ο καταναλωτής μπλοκάρεται όταν count=0
• Ο καταναλωτής ξυπνά τον παραγωγό όταν count=n-1
56
57
Λήθαργος και αφύπνιση (4 από 4)
• Γιατί η λύση αυτή δεν λειτουργεί;
– Έστω ότι count=0 (όλες οι θέσεις κενές)
– Ο καταναλωτής διαβάζει την count αλλά διακόπτεται
– Ο παραγωγός ξεκινά και τοποθετεί ένα αντικείμενο
– Ο παραγωγός στέλνει σήμα wakeup στον καταναλωτή
– Ο καταναλωτής ξεκινά αργότερα και μπλοκάρεται
– Το σήμα του wakeup του παραγωγού έχει χαθεί!
– Πρέπει κάπως να θυμόμαστε τα σήματα
58
Σηματοφόροι (1 από 4)
• Σηματοφόροι
– Ειδική μορφή ακέραιης μεταβλητής (ιδέα του Dijkstra)
• Παίρνει θετικές τιμές ή μηδέν
– Στους σηματοφόρους ορίζονται δύο πράξεις
• Down: αν η τιμή είναι >0, μειώνεται κατά 1 και συνεχίζουμε
• Αν όμως είναι 0, τότε η διεργασία μπλοκάρεται
• Up: αν έχουν μπλοκαριστεί διεργασίες, τότε αφυπνίζεται μία
• Αλλιώς η τιμή αυξάνεται κατά 1
– Οι up και down εκτελούνται αδιαίρετα
• Αλλαγή τιμής, εμποδισμός και αφύπνιση σε ένα βήμα
59
Σηματοφόροι (2 από 4)
• Υλοποίηση σηματοφόρων
– Κλήσεις συστήματος που εκτελούνται ατομικά
• Απενεργοποίηση διακοπών ή εντολές TSL/XCHG
• Ο εντολές αυτές απαιτούν ελάχιστο χρόνο
• Λύση προβλήματος παραγωγού-καταναλωτή
– Full: πλήρεις θέσεις, αρχικά 0
– Empty: κενές θέσεις, αρχικά n
– Mutex: αμοιβαίος αποκλεισμός, αρχικά 1
• Δυαδικός σηματοφόρος (0 ή 1)
60
Σηματοφόροι (3 από 4)
61
Σηματοφόροι (4 από 4)
• Οι δύο χρήσεις των σηματοφόρων
– Ο mutex επιτυγχάνει τον αμοιβαίο αποκλεισμό
– Οι full και empty επιτυγχάνουν το συγχρονισμό
• Απόκρυψη διακοπών
– Κάθε συσκευή Ε/Ε έχει ένα σηματοφόρο
– Ο διαχειριστής συσκευής κάνει down
• Περιμένει να ολοκληρωθεί η λειτουργία Ε/Ε
– Η διαδικασία εξυπηρέτησης κάνει up
• Σήμα στον διαχειριστή συσκευής να αφυπνιστεί
62
Τα mutex (1 από 9)
• Τα mutex
– Απλή μορφή δυαδικού σηματοφορέα
– Mutex_lock: κλειδώνει το mutex
• Αν είναι κλειδωμένο, η διεργασία μπλοκάρεται προσωρινά
• Όταν αφυπνιστεί δοκιμάζει ξανά (και μπλοκάρεται ξανά)
– Mutex_unlock: ξεκλειδώνει το mutex
63
Τα mutex (2 από 9)
• Διαφορά mutex από άλλες λύσεις
– Το mutex υλοποιείται στο χώρο του χρήστη
– Στο σηματοφόρο έχουμε ουρά διεργασιών
• Στο mutex τα νήματα μπλοκάρονται προσωρινά
• Δοκιμάζουν ξανά όταν έρθει η σειρά τους
– Στην αναμονή με απασχόληση σπαταλάμε πόρους
• Στο mutex παραχωρείται ο επεξεργαστής
• Έχει νόημα σε συνεργατικό περιβάλλουν (νήματα!)
64
Τα mutex (3 από 9)
• Πώς γίνεται η πρόσβαση στις κοινές δομές;
– Όταν έχουμε νήματα, όλα βλέπουν την ίδια μνήμη
• Άρα και τα ίδια mutex ή άλλες μεταβλητές
• Τα mutex προστατεύουν τις κοινές δομές
• Αν δεν είναι διαθέσιμες, παραχώρηση επεξεργαστή
– Όταν έχουμε διεργασίες, έχουν διαφορετική μνήμη
• Προσπέλαση κοινών δομών μέσω κλήσεων συστήματος
• Προσπέλαση κοινών δομών μέσω κοινής μνήμης
• Προσπέλαση κοινών δομών μέσω κοινών αρχείων
65
Τα mutex (4 από 9)
66
Τα mutex (5 από 9)
• Mutex στο πακέτο νημάτων pthreads
– Δημιουργία και καταστροφή mutex
– Κλείδωμα (με μπλοκάρισμα ή αποτυχία)
– Ξεκλείδωμα mutex
• Μεταβλητές συνθήκης
– Τα mutex δεν επαρκούν για πιο σύνθετες συνθήκες
– Παράδειγμα: πρόβλημα παραγωγού καταναλωτή
• Το mutex μπορεί μόνο να κλειδώσει την κοινή μνήμη
• Δεν αρκεί για ειδικότερες συνθήκες μπλοκαρίσματος
67
Τα mutex (6 από 9)
68
Τα mutex (7 από 9)
• Μεταβλητές συνθήκης
– Μπλοκάρισμα σε συνθήκη μέχρι να εμφανιστεί σήμα
• Σήμα αφύπνισης για ένα ή για όλα τα νήματα
– Η μεταβλητή χρησιμοποιείται σε κρίσιμη περιοχή
• Η διεργασία πρέπει πρώτα να κλειδώσει το mutex
• Αν μπλοκαριστεί η διεργασία, το mutex ξεκλειδώνεται
• Μια άλλη διεργασία μπορεί να κλειδώσει τώρα το mutex
• Όταν αφυπνιστεί το νήμα ελέγχει πάλι τη συνθήκη
69
Τα mutex (8 από 9)
70
Τα mutex (9 από 9)
71
Ελεγκτές (1 από 6)
• Ελεγκτές
– Η χρήση των σηματοφόρων και των mutex θέλει προσοχή
• Λάθος σειρά στις κλήσεις οδηγεί σε αδιέξοδο!
– Ο ελεγκτής είναι μια αφαίρεση υψηλότερου επιπέδου
• Είναι δομή της γλώσσας προγραμματισμού, όχι του λειτουργικού
72
Ελεγκτές (2 από 6)
• Ελεγκτές
– Ο ελεγκτής αποτελείται από δεδομένα και διαδικασίες
• Τα δεδομένα προσπελαύνονται μόνο από αυτές τις διαδικασίες
• Μόνο μία διεργασία μπορεί να είναι ενεργή στον ελεγκτή
– Υλοποίηση ανάλογα με τον μεταγλωττιστή
• Παράδειγμα: με σηματοφορείς ή mutex
– Χρήση μεταβλητών συνθήκης
• Εντολές signal και wait για χρήση μέσα στον ελεγκτή
• Τι γίνεται μετά από ένα signal; Ποιος εκτελείται;
– Λύση Hoare: συνεχίζει η διεργασία που αφυπνίσθηκε
– Λύση Brinch-Hansen: το signal είναι πάντα η τελευταία εντολή
73
Ελεγκτές (3 από 6)
74
Ελεγκτές (4 από 6)
• Παράδειγμα σε Java
– Η Java υλοποιεί ελεγκτές με μεθόδους synchronized
• Μία τάξη μπορεί να ορίζει μεθόδους synchronized
• Όλες οι μέθοδοι αυτές εκτελούνται με αμοιβαίο αποκλεισμό
75
Ελεγκτές (5 από 6)
Ελεγκτές (6 από 6)
• Ελεγκτής σε Java
– Οι διαδικασίες παραγωγού/ καταναλωτή είναι synchronized
– Δεν υπάρχουν διακριτές μεταβλητές συνθήκης
• Υπάρχει μία μόνο ανώνυμη συνθήκη για όλο τον ελεγκτή
• Η εντολή wait() οδηγεί σε μπλοκάρισμα
• Πρέπει να εκτελείται σε βρόχο γιατί δεν ξέρουμε γιατί ξυπνήσαμε!
• Η εντολή notify() ξυπνάει ένα άλλο νήμα (τυχαία)
77
Μεταβίβαση μηνυμάτων (1 από 3)
• Μεταβίβαση μηνυμάτων
– Οι σηματοφόροι είναι τεχνική χαμηλού επιπέδου
• Μπορεί όμως να χρησιμοποιηθεί μέσω βιβλιοθήκης
– Οι ελεγκτές είναι τεχνική υψηλού επιπέδου
• Απαιτεί όμως υποστήριξη από γλώσσα προγραμματισμού
– Η μεταβίβαση μηνυμάτων είναι μια πιο γενική τεχνική
• Και η μόνη κατάλληλη για κατανεμημένα συστήματα
– Η send(dest, &msg) στέλνει το msg στον dest
– Η receive(src, &msg) παραλαμβάνει το msg από τον src
• Μπορεί να προκαλεί μπλοκάρισμα ή να επιστρέφει αμέσως
78
Φράγματα
• Φράγματα
– Οι διεργασίες διαιρούνται σε φάσεις
• Στο τέλος κάθε φάσης εκτελούμε μια κλήση barrier
• Οι διεργασίες μπλοκάρονται μέχρι να φτάσουν όλες εκεί
• Μόλις συμβεί αυτό, απελευθερώνονται όλες
– Επιτρέπει συγχρονισμό παράλληλων υπολογισμών
81
Χρονοπρογραμματισμός
Χρονοπρογραμματισμός (1 από 6)
• Έννοια του χρονοπρογραμματισμού
– Ποια διεργασία θα εκτελεστεί μετά από κάποια διακοπή;
• Ιστορική εξέλιξη χρονοπρογραμματισμού
– Στα συστήματα δεσμίδων εκτελούσαμε επόμενη εργασία
– Στα συστήματα πολυπρογραμματισμού υπάρχει επιλογή
• Και στα σύγχρονα μικτά συστήματα υπάρχει ζήτημα επιλογής
– Οι προσωπικοί υπολογιστές δεν δίνουν μεγάλη έμφαση
• Η ταχύτητα των επεξεργαστών είναι πολύ μεγάλη
• Ελάχιστες διεργασίες είναι πραγματικά χρονοβόρες
– Οι εξυπηρετητές προσέχουν τον χρονοπρογραμματισμό
83
Χρονοπρογραμματισμός (2 από 6)
• Εναλλαγή διεργασιών
– Η αλλαγή της εκτελούμενης διεργασίας έχει κόστος
• Αποθήκευση κατάστασης προηγούμενης διεργασίας
• Φόρτωση κατάστασης νέας διεργασίας
• Αλλαγή χώρου διευθύνσεων και ακύρωση κρυφής μνήμης
• Συμπεριφορά των διεργασιών
– Οι διεργασίες εναλλάσσουν Ε/Ε και επεξεργασία
– Οι διεργασίες χωρίζονται σε δύο κατηγορίες
• Εξαρτημένες από την ΚΜΕ
• Εξαρτημένες από είσοδο/έξοδο
84
Χρονοπρογραμματισμός (3 από 6)
86
Χρονοπρογραμματισμός (5 από 6)
• Κατηγορίες αλγορίθμων χρονοπρογραμματισμού
– Συστήματα δέσμης
• Μη προεκτοπιστική ή προεκτοπιστική με μεγάλο διάστημα
• Λιγότερες εναλλαγές διεργασιών για αύξηση επίδοσης
– Συστήματα αλληλεπίδρασης
• Υποχρεωτικά προεκτοπιστική για αποφυγή καθυστερήσεων
• Όλες οι διεργασίες πρέπει να εκτελούνται από λίγο
– Συστήματα πραγματικού χρόνου
• Δεν είναι απαραίτητη η προεκτοπιστική εκτέλεση
• Εκτελούνται μόνο συγκεκριμένες διεργασίες στο σύστημα
87
Χρονοπρογραμματισμός (6 από 6)
• Στόχοι αλγορίθμων χρονοπρογραμματισμού
– Δίκαιη κατανομή ΚΜΕ, επιβολή πολιτικής, ισορροπία
– Συστήματα δέσμης
• Μεγάλη διεκπεραιωτική ικανότητα και μικρός μέσος χρόνος
• Υψηλή αξιοποίηση επεξεργαστή
– Συστήματα αλληλεπίδρασης
• Χαμηλός χρόνος απόκρισης σε αιτήσεις
• Τήρηση αναλογιών (οι «απλές» εξυπηρετούνται γρήγορα)
– Συστήματα πραγματικού χρόνου
• Τήρηση των προθεσμιών των διεργασιών
• Προβλεψιμότητα και ομαλότητα χρονοπρογραμματισμού
88
Συστήματα δέσμης
• Εξυπηρέτηση με βάση τη σειρά άφιξης
– Οι νέες διεργασίες μπαίνουν στο τέλος μιας ουράς
– Οι διεργασίες εκτελούνται με τη σειρά της ουράς
– Οι μπλοκαρισμένες διεργασίες βγαίνουν από την ουρά
• Όταν απελευθερωθούν μπαίνουν στο τέλος της ουράς
• Εξυπηρέτηση με βάση τη μικρότερη διάρκεια
– Όλες οι διεργασίες πρέπει να είναι διαθέσιμες μαζί
– Εκτελούμε πάντα την μικρότερη διεργασία που απομένει
• Εξυπηρέτηση με βάση το μικρότερο υπόλοιπο
– Κατάλληλη για προεκτοπιστικό χρονοπρογραμματισμό
89
Συστήματα αλληλεπίδρασης (1 από 6)
• Χρονοπρογραμματισμός αλληλεπίδρασης
– Προγραμματισμός εκ περιτροπής
• Σε κάθε διεργασία εκχωρείται χρονικό διάστημα εκτέλεσης
• Αν εξαντληθεί το διάστημα αυτό, η διεργασία αλλάζει
• Η διεργασία αλλάζει κι αν μπλοκαριστεί για κάποιο λόγο
• Υλοποιείται με κυκλική λίστα
90
91
Συστήματα αλληλεπίδρασης (3 από 6)
93
Συστήματα αλληλεπίδρασης (5 από 6)
• Εξυπηρέτηση με βάση τη μικρότερη διάρκεια
– Βασίζεται στον αντίστοιχο αλγόριθμο συστημάτων δέσμης
– Θεωρούμε κάθε διάστημα εκτέλεσης ως νέα εργασία
– Πρέπει να μαντέψουμε πόσο θα εκτελεστεί η διεργασία
– Παράδειγμα: στάθμιση προηγούμενων χρόνων εκτέλεσης
• Tn=Tn-1/2+Tn-2/4+Tn-3/8+…
• Εγγυημένος χρονοπρογραμματισμός
– Αν έχουμε n χρήστες, ο καθένας παίρνει το 1/n της ΚΜΕ
• Υπολογίζεται ο λόγος χρόνου εκτέλεσης προς αναλογούντα
• Εκτελείται η διεργασία με τον μικρότερο τέτοιο λόγο
94
• Χρονοπρογραμματισμός με λοταρία
– Κάθε διεργασία έχει ορισμένους λαχνούς
– Διαφορετικοί λαχνοί για κάθε πόρο
– Για κάθε πόρο γίνεται κλήρωση λαχνών
– Οι πιο σημαντικές διεργασίες έχουν περισσότερους
• Ο πελάτης μπορεί να παραχωρήσει λαχνούς στον εξυπηρετητή
• Χρονοπρογραμματισμός δίκαιης διανομής
– Οι πόροι ανατίθενται ανά χρήστη
– Οι διεργασίες αξιοποιούν μόνο τους πόρους του χρήστη
95
Συστήματα πραγματικού χρόνου
• Χρονοπρογραμματισμός πραγματικού χρόνου
– Οι διεργασίες πρέπει να εκτελούνται μέσα σε προθεσμίες
– Περιοδικά: τα ίδια γεγονότα εμφανίζονται περιοδικά
– Απεριοδικά: τα γεγονότα προκύπτουν απρόβλεπτα
– Έστω ένα περιοδικό σύστημα
• Το συμβάν i εμφανίζεται κάθε Pi και απαιτεί χρόνο Ci
• Το σύστημα είναι χρονοπρογραμματίσιμο αν ΣCi/Pi<=1
• Αν είναι παραπάνω, είναι αδύνατον να χρονοπρογραμματιστεί
– Στατικοί αλγόριθμοι: οι αποφάσεις λαμβάνονται αρχικά
– Δυναμικοί αλγόριθμοι: λήψη αποφάσεων δυναμικά
96
97
Χρονοπρογραμματισμός νημάτων (1 από 2)
• Χρονοπρογραμματισμός νημάτων
– Σε επίπεδο χρήστη περιορίζονται στο κβάντο διεργασίας
• Ο ακριβής αλγόριθμος είναι θέμα του πακέτου χρήστη
– Στο επίπεδο πυρήνα μπορούν να αγνοούνται οι διεργασίες
• Προκύπτουν διαφορετικές ακολουθίες εκτέλεσης
98
99
Κλασικά προβλήματα
• Λύση με σηματοφόρους
– Ο φιλόσοφος μπορεί να φάει αν δεν τρώνε οι γείτονες
– Κεντρικός σηματοφόρος και πίνακας σηματοφόρων
103
Το δείπνο των φιλοσόφων (4 από 4)
104
• Το πρόβλημα αναγνωστών-γραφέων
– Μοντελοποιεί πρόσβαση σε βάσεις δεδομένων
– Πολλοί μπορούν να διαβάζουν τη βάση
• Επιτρέπεται ταυτόχρονη ανάγνωση χωρίς όριο
– Μόνο ένας όμως μπορεί να γράφει στη βάση
• Όταν η βάση γράφεται, απαγορεύεται η ανάγνωση
• Δεν επιτρέπεται η ταυτόχρονη εγγραφή
– Ποιος έχει προτεραιότητα;
• Περιμένει ο γραφέας ή οι αναγνώστες;
105
Πρόβλημα αναγνωστών-γραφέων (2 από 3)
• Το πρόβλημα αναγνωστών-γραφέων
– Πολλοί αναγνώστες αλλά μόνο ένας γραφέας
106
• Λύση με σηματοφόρους
– Ο db επιτρέπει είτε έναν γραφέα, είτε πολλούς αναγνώστες
• Αλλάζει τιμή από τον πρώτο/τελευταίο αναγνώστη
– Οι αναγνώστες συγχρονίζονται μέσω του mutex
• Προστατεύει τη μεταβλητή rc
– Ο γραφέας μπορεί να μην εκτελεστεί ποτέ!
• Εκτός αν οι νέοι αναγνώστες εμποδίζονται όταν περιμένει γραφέας
107
Ενότητα # 3: Διαχείριση Μνήμης
Σκοποί ενότητας
• Κατανόηση της ανάγκης αφαίρεσης μνήμης
• Εξοικείωση με τις βασικές τεχνικές
οργάνωσης της εικονικής μνήμης:
σελιδοποίηση και τμηματοποίηση
• Κατανόηση των βασικών αλγορίθμων
αντικατάστασης σελίδων
• Εξοικείωση με τα βασικά ζητήματα
σχεδιασμού και υλοποίησης εικονικής μνήμης
4
Περιεχόμενα ενότητας
• Χωρίς αφαίρεση μνήμης
• Χώροι διευθύνσεων
• Εικονική μνήμη
• Αλγόριθμοι αντικατάστασης σελίδων
• Θέματα σχεδιασμού
• Ζητήματα υλοποίησης
• Τμηματοποίηση
5
Εισαγωγή (1 από 2)
• Η μνήμη είναι μόνιμα κρίσιμος πόρος
– Η διαθέσιμη μνήμη αυξάνεται συνεχώς
– Δυστυχώς μεγαλώνουν και τα προγράμματα!
– Ιδανικά: μόνιμη, γρήγορη, άπειρη, φτηνή μνήμη
• Ιεραρχία μνήμης
– Από την κρυφή μνήμη του επεξεργαστή
– Μέχρι τους μαγνητικούς δίσκους
– Διαφορετικοί συμβιβασμοί ταχύτητας / κόστους
7
Εισαγωγή (2 από 2)
• Διαχειριστής μνήμης
– Διαχειρίζεται την ιεραρχία μνήμης
– Ποια τμήματα της μνήμης χρησιμοποιούνται;
– Πόση μνήμη παραχωρείται σε κάθε διεργασία;
– Ποια μνήμη έχει κάθε διεργασία;
– Λογισμικό που αξιοποιεί εξειδικευμένο υλικό
• Υλικό που παρακολουθεί τις προσπελάσεις
• Υλικό που επιβάλλει κανόνες προστασίας
11
Χωρίς αφαίρεση μνήμης (3 από 5)
• Πολυπρογραμματισμός χωρίς αφαίρεση μνήμης
– Η συνύπαρξη στη μνήμη απαιτεί πρόσθετο υλικό
– Παράδειγμα: ΙΒΜ 360 με κλειδιά προστασίας
• Κάθε μπλοκ μνήμης των 2 KB έχει ένα κλειδί προστασίας
• Το εκτελούμενο πρόγραμμα έχει ένα κλειδί προστασίας
– Η ανάγκη της επανατοποθέτησης (relocation)
• Έστω ότι έχουμε δύο προγράμματα που χωράνε στη μνήμη
• Τα προγράμματα δεν ξέρουν πού θα τοποθετηθούν
– Στατική επανατοποθέτηση στον IBM 360
• Οι αναφορές σε διευθύνσεις αλλάζουν κατά τη φόρτωση
12
14
Χώροι διευθύνσεων
Χώροι διευθύνσεων (1 από 3)
• Γιατί τα προγράμματα να μην βλέπουν τη μνήμη;
– Μπορούν να διαγράψουν ακόμη και το λειτουργικό
– Είναι δύσκολο να έχουμε πολλά ταυτόχρονα
• Χώροι διευθύνσεων
– Λογική αφαίρεση της μνήμης μιας διεργασίας
– Αποτελείται από το σύνολο των διευθύνσεών της
– Διάφοροι τρόποι υλοποίησης χώρων διευθύνσεων
• Καταχωρητές βάσης και ορίου
– Μορφή δυναμικής επανατοποθέτησης
– Αρχικά σε CDC 6600, παραλλαγή σε 8088/8086
16
18
Εναλλαγή (1 από 4)
• Εναλλαγή διεργασιών
– Aν δεν χωράνε όλα τα προγράμματα στη μνήμη;
– Χρήση δίσκου για αποθήκευση αδρανών διεργασιών
– Εναλλαγή (swapping) των διεργασιών στη μνήμη
19
Εναλλαγή (2 από 4)
• Η εναλλαγή δημιουργεί «τρύπες» στη μνήμη
– Μία διεργασία που φεύγει αφήνει ένα κενό
– Στη θέση της μπαίνει ίση ή μικρότερη διεργασία
– Αν είναι μικρότερη, δημιουργείται «τρύπα»
• Περιοδικά χρειάζεται σύμπτυξη μνήμης
– Μεταφορά διεργασιών για να μην έχουμε κενά
– Μεγάλο κόστος για την αντιγραφή της μνήμης
20
Εναλλαγή (3 από 4)
• Διεργασίες με δυναμικό μέγεθος
– Οι στοίβες και οι σωροί επεκτείνονται δυναμικά
– Αν περάσουμε την αρχική κατανομή;
– Θα πρέπει αναγκαστικά να επεκταθούμε
– Αν η γειτονική περιοχή είναι κενή, ΟΚ
– Αλλιώς πρέπει να μεταφερθούμε αλλού
– Γενικά κατανέμουμε χώρο από την αρχή
• Ο χώρος μπορεί να μείνει αναξιοποίητος
21
Εναλλαγή (4 από 4)
24
25
Διαχείριση ελεύθερης μνήμης (4 από 7)
27
Διαχείριση ελεύθερης μνήμης (6 από 7)
28
29
Εικονική μνήμη
31
Εικονική μνήμη (2 από 2)
• Εικονική μνήμη (virtual memory)
– Κάθε πρόγραμμα έχει δικό του χώρο διευθύνσεων
– Ο χώρος διαιρείται σε σελίδες σταθερού μεγέθους
– Ορισμένες σελίδες βρίσκονται στη μνήμη
• Οι υπόλοιπες βρίσκονται στο δίσκο
– Το υλικό μεταφράζει αυτόματα τις αναφορές μνήμης
• Χρησιμοποιεί έναν πίνακα μετάφρασης
– Οι αναφορές σε μη διαθέσιμες σελίδες παγιδεύονται
• Το λειτουργικό φορτώνει την αντίστοιχη σελίδα στη μνήμη
32
Σελιδοποίηση (1 από 5)
• Σελιδοποίηση (paging)
– Κάθε πρόγραμμα έχει έναν εικονικό χώρο διευθύνσεων
– Οι εντολές του αναφέρονται σε εικονικές διευθύνσεις
– Η μονάδα διαχείρισης μνήμης τις μετατρέπει σε φυσικές
– Οι φυσικές διευθύνσεις τοποθετούνται στο δίαυλο
33
Σελιδοποίηση (2 από 5)
• Παράδειγμα
– Εικονικός χώρος 64 K
• Διαιρείται σε σελίδες
– Φυσική μνήμη 32 K
• Διαιρείται σε πλαίσια
– Σελίδες - πλαίσια 4 K
• 16 σελίδες - 8 πλαίσια
– Ορισμένες λείπουν (Χ)
• Σφάλμα αν προσπελαστούν
• Το ΛΣ ελευθερώνει πλαίσιο και
φέρνει τη σελίδα
34
Σελιδοποίηση (3 από 5)
• Λειτουργία MMU
– Σπάσιμο διεύθυνσης
• 4 bit σελίδα+12 bit απόσταση
– Πίνακας χαρτογράφησης
• Έχει 24=16 θέσεις
• Περιέχει bit παρουσίας
• Δίνει 3 bit για το πλαίσιο
– Έλεγχος bit παρουσίας
• Αν είναι 0, σφάλμα σελίδας
• Αν είναι 1, διαβάζουμε 3 bit
35
Σελιδοποίηση (4 από 5)
• Πίνακες σελίδων
– Κάθε διεύθυνση αποτελείται από 2 μέρη
• Αριθμός εικονικής σελίδας: περισσότερο σημαντικά bit
• Απόσταση μέσα στη σελίδα: λιγότερο σημαντικά bit
– Η διαίρεση καθορίζει το μέγεθος και πλήθος των σελίδων
– Ο αριθμός εικονικής σελίδας χρησιμοποιείται ως δείκτης
• Επιλέγει μία καταχώριση από τον πίνακα σελίδων
• Αν υπάρχει η σελίδα στη μνήμη, διαβάζουμε αριθμό πλαισίου
• Ο αριθμός πλαισίου επισυνάπτεται στην απόσταση
– Το αποτέλεσμα στέλνεται στο δίαυλο της μνήμης
36
Σελιδοποίηση (5 από 5)
38
40
41
Πολύ μεγάλες μνήμες (1 από 4)
• Πίνακες σελίδων για μεγάλες μνήμες
– Παράδειγμα: εικονικές διευθύνσεις 32 bit και σελίδες 4 K
– Ο πίνακας σελίδων έχει 1 εκατομμύριο καταχωρίσεις!
• Πολυεπίπεδοι πίνακες σελίδων
– Παράδειγμα: εικονικές διευθύνσεις 32 bit και σελίδες 4 K
• Τα πρώτα 10 bit αναφέρονται στον πίνακα πρώτου επιπέδου
• Ο πίνακας χωράει ακριβώς σε μία σελίδα των 4 K
• Τα επόμενα 10 bit αναφέρονται στον δεύτερο πίνακα
• Και αυτός ο πίνακας χωράει σε μία σελίδα των 4 K
• Η απόσταση επισυνάπτεται για να βγει η τελική διεύθυνση
42
44
Αλγόριθμοι αντικατάστασης
• Αντικατάσταση σελίδας στη μνήμη
– Απαιτείται μετά από σφάλμα σελίδας
– Επιλέγεται μία σελίδα προς απομάκρυνση από τη μνήμη
– Αν έχει τροποποιηθεί, γράφεται στο δίσκο
– Στη συνέχεια φορτώνεται στη θέση της η νέα σελίδα
• Αλγόριθμοι αντικατάστασης σελίδων
– Στόχος: απομάκρυνση μιας «αχρησιμοποίητης» σελίδας
– Παρόμοιοι αλγόριθμοι με άλλα είδη αντικατάστασης
– Η χρονική κλίμακα είναι σχετικά μεγάλη
• Η νέα σελίδα πρέπει να φορτωθεί από το δίσκο
47
Ο βέλτιστος αλγόριθμος
• Βέλτιστος αλγόριθμος αντικατάστασης (OPT)
– Επιλέγεται η σελίδα που θα χρησιμοποιηθεί πιο αργά
– Ο αλγόριθμος είναι ο θεωρητικά βέλτιστος
– Δεν ξέρουμε πότε θα ξαναχρησιμοποιηθεί κάθε σελίδα
– Μπορούμε να τον δοκιμάσουμε με ένα πρόγραμμα
• Σημειώνουμε όλες τις αναφορές σε σελίδες
• Προσομοιώνουμε τον βέλτιστο αλγόριθμο
• Χρησιμοποιούμε τα αποτελέσματα ως μέτρο σύγκρισης
• Ένας αλγόριθμος 1% χειρότερος είναι αρκετά καλός
• Τα αποτελέσματα ισχύουν για τη συγκεκριμένη εκτέλεση
48
49
Αλγόριθμος NRU (2 από 3)
• Αλγόριθμος NRU
– Κατανομή σελίδων σε 4 κατηγορίες
• 0: δεν έγινε αναφορά, δεν τροποποιήθηκε
• 1: δεν έγινε αναφορά, τροποποιήθηκε
• 2: έγινε αναφορά, δεν τροποποιήθηκε
• 4: έγινε αναφορά, τροποποιήθηκε
– Ο NRU επιλέγει σελίδα από τη χαμηλότερη
• Προτεραιότητα σε παλιές σελίδες
• Δευτερευόντως σε «καθαρές» σελίδες
50
51
Αλγόριθμος FIFO
• Αλγόριθμος FIFO
– Ταξινόμηση σελίδων με τη σειρά φόρτωσης
• Αρκεί μια γραμμική λίστα των σελίδων
• Κάθε νέα σελίδα μπαίνει στο τέλος
• Η παλιότερη σελίδα βρίσκεται στην αρχή
– Επιλέγεται η σελίδα που φορτώθηκε πρώτη
• Η σελίδα που είναι περισσότερη στη μνήμη
• Η σελίδα αυτή μπορεί να χρησιμοποιείται πολύ!
52
55
Αλγόριθμος LRU (2 από 2)
57
Προσομοίωση LRU (2 από 3)
59
Σύνολο εργασίας (1 από 4)
• Σελιδοποίηση κατ’απαίτηση
– Όταν ξεκινά η διεργασία, δεν έχει καμία σελίδα στη μνήμη
– Οι σελίδες φορτώνονται όταν συμβεί σφάλμα σελίδας
• Σύνολο εργασίας διεργασίας
– Οι σελίδες που χρησιμοποιεί την τρέχουσα περίοδο
– Περιορισμένο λόγω της τοπικότητας των αναφορών
• Σε κάθε φάση της μια διεργασία χρησιμοποιεί λίγες σελίδες
– Αρκεί το σύνολο εργασίας να είναι στη μνήμη
– Αλλιώς θα έχει συνεχώς σφάλματα σελίδες
• Σε αυτή την περίπτωση λέμε ότι η διαδικασία «αλωνίζει»
60
61
Σύνολο εργασίας (3 από 4)
63
Αλγόριθμος συνόλου εργασίας (1 από 2)
64
65
Αλγόριθμος WSClock (1 από 2)
• Αλγόριθμος WSClock
– Οι σελίδες οργανώνονται σε κυκλική λίστα
– Σε κάθε σφάλμα ξεκινάμε από εκεί που είχαμε μείνει
– Αν η σελίδα έχει Α == 1 μηδενίζουμε και προχωράμε
– Αν έχει Α == 0 τότε συγκρίνουμε την ηλικία με το t
• Αν είναι μεγαλύτερη από t τότε η σελίδα επιλέγεται
– Αν είναι καθαρή, επιλέγεται και αντικαθίσταται
• Αν δεν είναι καθαρή, προγραμματίζεται για εγγραφή
• Προχωράμε στην επόμενη αφού η εγγραφή θα αργήσει
66
67
Αλγόριθμος WSClock (3)
Σύνοψη αλγορίθμων
72
74
75
Μέγεθος σελίδας (2 από 2)
• Μοντελοποίηση της επιβάρυνσης
– μ byte ανά διεργασία
– σ byte ανά σελίδα
– κ byte ανά καταχώριση στον πίνακα σελίδων
– Κάθε σελίδα απαιτεί μ/σ σελίδες
– Άρα ο πίνακας σελίδων έχει μέγεθος μκ/σ
– Η εσωτερική κατάτμηση είναι σ/2
– Η επιβάρυνση ανά διεργασία είναι μκ/σ+σ/2
– Η βέλτιστη τιμή του σ είναι ρίζα του 2μκ
– Παράδειγμα: μ = 1 MB και κ = 8 byte, βέλτιστο σ = 4 KB
76
78
80
81
Κοινόχρηστες βιβλιοθήκες (2 από 3)
• Λειτουργία DLL στα Windows
– Οι DLL φορτώνονται ολόκληρες στη μνήμη
• Δεν φορτώνονται μόνο οι συναρτήσεις που χρησιμοποιούνται
• Στην πραγματικότητα σελιδοποιούνται και αυτές
• Φόρτωση είτε με το πρόγραμμα είτε με την πρώτη κλήση
– Όλα τα προγράμματα έχουν πρόσβαση στις DLL
– Τα DLL επιτρέπουν τη διόρθωση σφαλμάτων
• Έστω ότι βρέθηκε κάποιο πρόγραμμα ασφάλειας σε ένα DLL
• Μπορεί να αντικατασταθεί με νέα έκδοση
• Οι διεργασίες βλέπουν τις ίδιες ακριβώς κλήσεις
82
• Κοινόχρηστες βιβλιοθήκες
– Κάθε διεργασία φορτώνει τη βιβλιοθήκη αλλού
– Η βιβλιοθήκη πρέπει να είναι ανεξάρτητη θέσης
• Να εκτελείται οπουδήποτε στη μνήμη
• Άρα να χρησιμοποιεί μόνο σχετικά άλματα και αναφορές
83
Χαρτογραφημένα αρχεία
• Χαρτογραφημένα αρχεία στη μνήμη
– Παρέχονται σε ορισμένα συστήματα
– Αρχείο που φαίνεται να έχει φορτωθεί στη μνήμη
• Χρήση με λειτουργίες μνήμης αντί εισόδου/εξόδου
• Το αρχείο μπορεί να σελιδοποιείται όπως όλη η μνήμη
• Έτσι μπορούν να φορτώνονται και τα DLL
– Επιτρέπει και επικοινωνία διεργασιών
• Πολλές διεργασίες χαρτογραφούν το ίδιο αρχείο
84
85
Πολιτική καθαρισμού (2 από 2)
• Πολιτική καθαρισμού
– Ο δαίμονας δεν διώχνει τις σελίδες που επιλέγει
• Αν ζητηθούν ξανά, είναι ακόμα διαθέσιμες
• Τώρα όμως θα είναι και καθαρές
• Άρα μπορούν να χρησιμοποιηθούν άμεσα
• Πολιτική ρολογιού με δύο δείκτες
– Ο εμπρός δείκτης επιλέγει σελίδες για εγγραφή
– Φροντίζει να υπάρχουν διαθέσιμες σελίδες αν χρειαστούν
– Ο πίσω δείκτης επιλέγει σελίδες προς αντικατάσταση
– Χρησιμοποιεί τις διαθέσιμες σελίδες για φόρτωση νέων
86
87
Ζητήματα υλοποίησης
89
Ρόλος του ΛΣ (2 από 2)
• Λειτουργικό σύστημα και σελιδοποίηση
– Σφάλμα σελίδας
• Εντοπισμός ζητούμενης σελίδας στο δίσκο
• Φόρτωση σελίδας σε διαθέσιμο πλαίσιο
• Επαναφορά μετρητή προγράμματος και επανεκτέλεση
– Τερματισμός διεργασίας
• Αποδέσμευση πίνακα σελίδων
• Αποδέσμευση χώρου στην περιοχή εναλλαγής
• Αποδέσμευση μη καταμεριζόμενων σελίδων
90
91
Χειρισμός σφαλμάτων σελίδας (2 από 3)
92
93
Αντίγραφα ασφαλείας εντολών (1 από 2)
• Αντίγραφα ασφαλείας εντολών
– Η επανεκτέλεση της εντολής δεν είναι πάντα απλή
– Παράδειγμα: MOVE.L #6(A1),2(A0) [Motorola 68K]
– Εντολή 6 byte με 2 σχετικές διευθύνσεις
– Η αιτία του σφάλματος σελίδας δεν είναι προφανής
• Το σφάλμα μπορεί να συμβεί κατά τις τρεις προσκομίσεις
• Επιπλέον μπορεί να συμβεί στις δύο αναφορές στη μνήμη
94
95
Κλείδωμα σελίδων στη μνήμη
• Κλείδωμα σελίδων στη μνήμη
– Έστω ότι μια διεργασία ξεκινά ανάγνωση του δίσκου
• Η διεργασία μπλοκάρεται περιμένοντας τα δεδομένα
– Τι θα γίνει αν η σελίδα δεδομένων αντικατασταθεί;
• Αν χρησιμοποιούμε DMA θα γράψουμε στο λάθος σημείο!
– Οι σελίδες για είσοδο-έξοδο κλειδώνονται
• Καρφίτσωμα (pinning) σελίδων στη μνήμη
– Εναλλακτικά είσοδος-έξοδος μόνο μέσω πυρήνα
96
97
Δευτερεύουσα μνήμη (2 από 4)
• Διαμέριση ή δίσκος εναλλαγής (swap)
– Για κάθε διεργασία θυμόμαστε πού ξεκινά η περιοχή της
• Αποθήκευση στην καταχώριση του πίνακα διεργασιών
• Εύκολη αντιστοίχιση σελίδων σε μπλοκ του δίσκου
– Αρχικοποίηση της περιοχής ανταλλαγής
• Είτε αντιγραφή της εικόνας στην περιοχή πρώτα
• Είτε αντιγραφή της εικόνας στη μνήμη πρώτα
– Τι γίνεται αν η διεργασία μεγαλώσει;
• Δέσμευση ξεχωριστών περιοχών για κώδικα και δεδομένα
• Δέσμευση πολλών τμημάτων για τα δεδομένα
98
100
101
Πολιτική και μηχανισμός (2 από 3)
103
Τμηματοποίηση
Τμηματοποίηση (1 από 4)
• Τμηματοποίηση (segmentation)
– Κάθε διεργασία αποτελείται από τμήματα (segments)
– Κάθε τμήμα είναι μια γραμμική ακολουθία διευθύνσεων
– Τα τμήματα έχουν διαφορετικό και μεταβλητό μέγεθος
– Λογικός καταμερισμός της μνήμης σε τμήματα
106
Τμηματοποίηση (3 από 4)
• Πλεονεκτήματα τμηματοποίησης
– Απλούστερη σύνδεση διαδικασιών
• Κάθε διαδικασία είναι διαφορετικό τμήμα
• Δεν χρειάζεται επανατοποθέτηση κώδικα κατά τη σύνδεση
– Διευκόλυνση κοινής χρήσης βιβλιοθηκών
• Κάθε βιβλιοθήκη είναι διαφορετικό τμήμα
• Όλες οι διεργασίες τη βλέπουν με τον ίδιο τρόπο
– Προστασία μνήμης σε επίπεδο τμήματος
• Τα τμήματα είναι λογικές οντότητες (όχι όπως οι σελίδες)
• Μπορούν να προστατεύονται ανάλογα με τη φύση τους
107
Τμηματοποίηση (4 από 4)
Υλοποίηση τμηματοποίησης
110
116
120
122
Σκοποί ενότητας
• Κατανόηση της έννοιας των αρχείων και των
καταλόγων αρχείων
• Εξοικείωση με τις βασικές τεχνικές
υλοποίησης συστημάτων αρχείων
• Εισαγωγή στις τεχνικές διαχείρισης και
βελτιστοποίησης των συστημάτων αρχείων
• Εξοικείωση με τον τρόπο υλοποίησης
πραγματικών συστημάτων αρχείων
4
Περιεχόμενα ενότητας
• Αρχεία
• Κατάλογοι
• Υλοποίηση συστήματος αρχείων
• Διαχείριση και βελτιστοποίηση
• Παραδείγματα συστημάτων αρχείων
Εισαγωγή (1 από 3)
• Γιατί χρειάζονται τα μέσα αποθήκευσης;
– Αποθήκευση μεγάλου όγκου πληροφοριών
• Μεγαλύτερου από την μνήμη μιας διεργασίας
– Ανεξαρτητοποίηση πληροφοριών από διεργασίες
• Οι πληροφορίες παραμένουν μόνιμα
• Ακόμη κι αν η διεργασία αποτύχει ή τερματιστεί
– Ταυτόχρονη προσπέλαση πληροφοριών
• Η εικονική μνήμη είναι ιδιωτική σε κάθε διεργασία
7
Εισαγωγή (2 από 3)
• Τα μέσα αποθήκευσης για το ΛΣ
– Γραμμική αλληλουχία μπλοκ σταθερού μεγέθους
– Δύο βασικές λειτουργίες
• Ανάγνωση του μπλοκ k
• Εγγραφή του μπλοκ k
– Πώς βρίσκουμε το κατάλληλο μπλοκ;
– Πώς προστατεύονται τα δεδομένα;
– Πώς ξέρουμε ποια μπλοκ είναι διαθέσιμα;
8
Εισαγωγή (3 από 3)
• Αρχεία: λογική αφαίρεση της αποθήκευσης
– Λογικές μονάδες πληροφοριών
– Οι πληροφορίες στα αρχεία είναι μόνιμες
• Σύστημα αρχείων (file system)
– Υποστηρίζει λειτουργίες επί των αρχείων
• Όψη χρήστη – εικονική μηχανή
– Υλοποιεί αλγόριθμους διαχείρισης των μέσων
• Όψη συστήματος – διαχειριστής πόρων
9
Αρχεία
15
Τύποι αρχείων (1 από 4)
• Τύποι αρχείων
– Κανονικά αρχεία: περιέχουν πληροφορίες χρηστών
– Κατάλογοι: αρχεία ειδικής μορφής για οργάνωση
– Ειδικά αρχεία χαρακτήρων: σειριακές συσκευές
– Ειδικά αρχεία μπλοκ: συσκευές αποθήκευσης
• Αρχεία κειμένου ASCII
– Αποτελούνται από γραμμές κειμένου ASCII
– Τερματισμός γραμμών με CR, LF ή CR+LF
– Εμφανίζονται και εκτυπώνονται όπως είναι
16
17
Τύποι αρχείων (3 από 4)
19
Πρόσβαση στα αρχεία
• Σειριακή προσπέλαση: με τη σειρά
– Μπορεί να γίνεται ανά byte ή ανά εγγραφή
– Το αρχείο μπορεί να επαναφερθεί στην αρχή
• Τυχαία προσπέλαση: με οποιαδήποτε σειρά
– Απαραίτητη για πολλές εφαρμογές
– Εφικτή στους δίσκους, όχι στις ταινίες
– Είτε κάθε εγγραφή/ανάγνωση δίνει τη θέση
– Είτε χρησιμοποιείται κάποια λειτουργία seek
20
21
Χαρακτηριστικά αρχείων (2 από 3)
24
25
Λειτουργίες αρχείων (3 από 3)
• Seek: αλλαγή θέσης ανάγνωσης/εγγραφής
– Τοποθετεί το δείκτη αρχείου σε συγκεκριμένη θέση
• Get attributes: λήψη χαρακτηριστικών
– Παράδειγμα: το make διαβάζει χρόνους τροποποίησης
• Set attributes: καθορισμός χαρακτηριστικών
– Μόνο για όσα έχει νόημα/επιτρέπεται να αλλάξουν
– Παράδειγμα: το μέγεθος δεν αλλάζει, η προστασία ναι
• Rename: μετονομασία αρχείου
– Μπορεί να αντικατασταθεί από αντιγραφή + διαγραφή
26
28
30
Κατάλογοι
Κατάλογοι ενός επιπέδου
Ιεραρχικοί κατάλογοι
34
35
Ονόματα διαδρομών (3 από 3)
37
Λειτουργίες καταλόγων (2 από 3)
• Rename: αλλαγή ονόματος καταλόγου
• Link: σύνδεση αρχείου με κατάλογο
– Το αρχείο εμφανίζεται σε πολλούς καταλόγους
– Όλα τα ονόματα δείχνουν στην ίδια δομή
• Unlink: αποσύνδεση αρχείου από κατάλογο
– Αφαίρεση αρχείου από κατάλογο
– Αν υπάρχει μόνο σε έναν διαγράφεται
– Στο UNIX αυτή είναι η κλήση διαγραφής αρχείων
38
39
Υλοποίηση συστήματος αρχείων
41
Διάταξη συστήματος αρχείων (2 από 2)
42
43
Υλοποίηση των αρχείων (2 από 5)
• Συνεχής κατανομή μπλοκ
– Διαχείριση κενών περιοχών με λίστα κενών
– Σταδιακά οδηγεί σε κατάτμηση του ελεύθερου χώρου
• Η συμπύκνωση των αρχείων απαιτεί πάρα πολύ χρόνο
– Πρέπει να γνωρίζουμε μεγέθη αρχείων από την αρχή
• Γενικά ανέφικτο σε συστήματα αρχείων για δίσκους
• Χρήση στα CD-ROM και τα DVD-ROM
• Γνωρίζουμε τα μεγέθη όλων των αρχείων από την αρχή
– Το DVD περιπλέκει λίγο τα πράγματα
• Τα αρχεία είναι μέχρι 1 GB άρα οι ταινίες σπάνε σε τμήματα
44
48
51
Κοινόχρηστα αρχεία (1 από 4)
• Κοινόχρηστα αρχεία
– Εμφανίζονται σε πολλούς καταλόγους χρηστών
– Προσανατολισμένος ακυκλικός γράφος (DAG)
– Υλοποίηση των κοινόχρηστων αρχείων
• Πρόβλημα όταν οι δείκτες είναι στον κατάλογο
• Κάθε αλλαγή επηρεάζει όλους τους καταλόγους
– Συμβολικοί σύνδεσμοι (symbolic links)
• Ειδικά αρχεία που περιέχουν ένα νέο όνομα
• Μόνο ένας κατάλογος περιέχει το πραγματικό αρχείο
52
• (Απλοί) σύνδεσμοι
– Απλή λύση όταν οι δείκτες βρίσκονται σε κόμβο i
– Όλες οι καταχωρίσεις είναι ισοδύναμες
– Ο κόμβος i καταγράφει πόσοι σύνδεσμοι υπάρχουν
– Όταν μηδενιστούν, το αρχείο διαγράφεται
53
Κοινόχρηστα αρχεία (3 από 4)
• Απλοί ή συμβολικοί σύνδεσμοι;
– Απλοί σύνδεσμοι: προβλήματα χρέωσης
• Τι γίνεται αν διαγράψει το αρχείο ο ιδιοκτήτης;
• Το αρχείο δεν διαγράφεται
• Ο ιδιοκτήτης όμως το χρεώνεται
• Οι συμβολικοί σύνδεσμοι απλά θα γίνουν άκυροι
– Συμβολικοί σύνδεσμοι: επιβάρυνση
• Δύο διασχίσεις καταλόγων για εντοπισμό αρχείου
• Επιπλέον κόμβοι i και μπλοκ στο δίσκο
54
• Κοινόχρηστα αρχεία
– Οι σύνδεσμοι περιπλέκουν τα πράγματα
• Κάποια αρχεία εμφανίζονται σε πολλούς καταλόγους
• Προσοχή στη δημιουργία εφεδρικών αντιγράφων
55
Καταγραφικά συστήματα (1 από 3)
• Συστήματα αρχείων με καταγραφική δομή
– Οι δίσκοι γίνονται φτηνότεροι αλλά όχι ταχύτεροι
• Περιστροφική - χρόνος αναζήτησης αλλάζουν αργά
– Οι κρυφές μνήμες αυξάνονται συνεχώς
• Οι περισσότερες αναγνώσεις γίνονται από εκεί
• Στο δίσκο καταφεύγουμε κυρίως για τις εγγραφές
– Οι εγγραφές κοστίζουν περισσότερο από αναγνώσεις
• Οι αναγνώσεις γίνονται ομαδικά (πολλά μπλοκ μαζί)
• Οι εγγραφές γίνονται σε μικρά κομμάτια
• Οι εγγραφές γίνονται άμεσα (μην χάσουμε δεδομένα)
56
57
Καταγραφικά συστήματα (3 από 3)
• Τι γίνεται όταν γεμίσει ο δίσκος;
– Νήμα καθαρισμού σαρώνει διαρκώς το αρχείο
– Εξετάζονται τα παλιά μπλοκ
– Διαβάζονται κόμβοι i και ενεργά δεδομένα
– Προστίθενται στο τρέχον μπλοκ προς εγγραφή
– Το παλιό μπλοκ απελευθερώνεται για χρήση
– Ο δίσκος λειτουργεί σαν κυκλική ουρά μπλοκ
– Περίπλοκη διαχείριση αλλά αύξηση της ταχύτητας
58
59
Ημερολογιακά συστήματα (2 από 2)
• Ημερολογιακά συστήματα αρχείων
– Καταγραφή λειτουργιών που θα γίνουν
– Στη συνέχεια εκτελούνται οι λειτουργίες
– Στο τέλος διαγράφονται
– Απαιτεί αδύναμες (idempotent) λειτουργίες
• Η επανάληψή τους δεν δημιουργεί προβλήματα
• Η εγγραφή σε συγκεκριμένη θέση στο δίσκο είναι αδύναμη
• Η εγγραφή στο τέλος μιας λίστας δεν είναι αδύναμη
– Το σύστημα οργανώνεται με τέτοιες λειτουργίες
• Όλες οι δομές πρέπει να λειτουργούν με αυτό τον τρόπο
60
62
66
71
Διαχείριση χώρου δίσκου (7 από 7)
73
Αντίγραφα ασφαλείας (2 από 7)
• Ποια αρχεία χρειάζονται εφεδρικά αντίγραφα;
– Τα προγράμματα μπορεί να υπάρχουν σε CD/DVD
– Τα προσωρινά αρχεία γενικά δεν χρειάζονται
– Τα ειδικά αρχεία συσκευών δεν αντιγράφονται
– Μόνο συγκεκριμένοι κατάλογοι του χρήστη
• Πότε πρέπει να αντιγράφονται τα αρχεία;
– Αυξητικά αντίγραφα: αντιγραφή αλλαγμένων αρχείων
– Περιοδικά παίρνουμε ένα πλήρες αντίγραφο
– Στο μεσοδιάστημα αντιγράφουμε αλλαγμένα αρχεία
74
75
Αντίγραφα ασφαλείας (4 από 7)
• Φυσική αντιγραφή δίσκου
– Γράφονται όλα τα μπλοκ με τη σειρά σε ταινία
– Μπορούμε να παραλείψουμε τα ελεύθερα μπλοκ
• Πρέπει να σημειώνουμε όμως ότι υπάρχουν!
– Πρέπει να αποφεύγουμε τα χαλασμένα μπλοκ
• Είτε μέσω επαναχαρτογράφησης στο υλικό
• Είτε μέσω παράκαμψης του αρχείου χαλασμένων μπλοκ
– Πολύ γρήγορη και απλή διαδικασία
– Δεν μπορεί να αντιγράψει επιλεκτικά καταλόγους
– Κατάλληλη για διαμερίσματα με δεδομένα χρήστη
76
78
80
82
83
Επιδόσεις συστημάτων αρχείων (2 από 4)
• Επιλογή μπλοκ που θα αντικατασταθούν
– Δεν θέλουμε καθαρό LRU (αν και είναι εφικτό)
• Τα μπλοκ ελέγχου πρέπει να γράφονται γρήγορα στο δίσκο
– Εκτιμούμε αν θα χρειαστεί ξανά ένα μπλοκ
• Τα μπλοκ που θα χρειαστούν ξανά μπαίνουν στο τέλος
• Περιοδική εγγραφή όλων των μπλοκ στο δίσκο
– Στο UNIX κάθε 30 sec γράφονται όλα τα μπλοκ στο δίσκο
• Ομαδοποίηση μικρών εγγραφών στο ίδιο μπλοκ
– Στα Windows τα τροποποιημένα μπλοκ γράφονταν άμεσα
• Η πολιτική άλλαξε στις πιο πρόσφατες εκδόσεις
84
85
Επιδόσεις συστημάτων αρχείων (4 από 4)
Ανασυγκρότηση δίσκων
• Αρχικά ο δίσκος είναι μια συνεχόμενη κενή περιοχή
• Σταδιακά τα αρχεία διασπείρονται στο δίσκο
– Οι διαγραφές δημιουργούν συνεχώς νέες κενές περιοχές
• Η ανασυγκρότηση ομαδοποιεί τα μπλοκ
– Απαιτείται συνεχόμενη ελεύθερη περιοχή στο δίσκο
– Τα αρχεία ανασυγκροτούνται απελευθερώνοντας χώρο
– Στον κενό χώρο ανασυγκροτούνται και άλλα αρχεία
• Ορισμένα αρχεία δεν πρέπει να μετακινούνται
– Αρχεία σελιδοποίησης, αδρανοποίησης και ημερολογίου
– Συνήθως σταθερού μεγέθους, δεν μετακινούνται ποτέ
87
Παραδείγματα συστημάτων
αρχείων
89
Συστήματα αρχείων CD-ROM (2 από 5)
90
92
93
Σύστημα αρχείων MS-DOS (1 από 3)
95
Σύστημα αρχείων MS-DOS (3 από 3)
96
• Περιεχόμενα κόμβου i
– Μέγεθος αρχείου, χρόνοι,
– Ιδιοκτήτης, ομάδα, bit προστασίας
– Μετρητής συνδέσμων προς τον κόμβο
– Οι πρώτες 10 διευθύνσεις αποθηκεύονται στον κόμβο
• Τρεις δείκτες σε μπλοκ πρόσθετων δεικτών
98
Σκοποί ενότητας
• Κατανόηση των βασικών αρχών του υλικού
και του λογισμικού Ε/Ε
• Εξοικείωση με τον τρόπο οργάνωσης του
λογισμικού Ε/Ε σε επίπεδα
• Εισαγωγή στο λογισμικό βασικών συσκευών
Ε/Ε και διασυνδέσεων με το χρήστη
• Κατανόηση των βασικών τεχνικών διαχείρισης
ισχύος στα σύγχρονα ΛΣ
4
Περιεχόμενα ενότητας
• Αρχές υλικού Ε/Ε
• Αρχές λογισμικού Ε/Ε
• Επίπεδα λογισμικού Ε/Ε
• Δίσκοι
• Ρολόγια
• Διασυνδέσεις με το χρήστη
• Διαχείριση ισχύος
5
Ρόλος του ΛΣ
• Μόνο το ΛΣ έχει πρόσβαση στις συσκευές
– Οι εντολές εισόδου/εξόδου είναι προνομιούχες
• Ρόλος ΛΣ στη διαχείριση συσκευών
– Παροχή απλής και εύχρηστης διασύνδεσης
• Ομοιόμορφης ανάμεσα στις συσκευές
– Ανίχνευση και χειρισμός διακοπών
• Προνομιούχες λειτουργίες χαμηλού επιπέδου
– Αντιμετώπιση σφαλμάτων
7
Αρχές υλικού Ε/Ε
9
Συσκευές Ε/Ε (2 από 3)
• Κάποιες συσκευές δεν είναι τόσο απλές
– Οι ταινίες αποθηκεύουν μπλοκ σειριακά
• Τα μπλοκ έχουν σταθερό μέγεθος
• Δεν υπάρχει δυνατότητα αναζήτησης
– Οι κάρτες δικτύου χειρίζονται μπλοκ
• Τα μπλοκ δεν έχουν σταθερό μέγεθος
• Δεν υπάρχει δυνατότητα αναζήτησης
– Τα ρολόγια παράγουν σήματα διακοπών
10
12
13
Χαρτογράφηση στη μνήμη (1 από 6)
• Επικοινωνία με συσκευές
– Καταχωρητές ελέγχου συσκευής
• Εκεί γράφονται εντολές προς τη συσκευή
• Από εκεί διαβάζεται η κατάσταση της συσκευής
– Προσωρινή μνήμη δεδομένων συσκευής
• Ανάγνωση ή εγγραφή δεδομένων στη συσκευή
15
Χαρτογράφηση στη μνήμη (3 από 6)
• Επικοινωνία με χαρτογράφηση στη μνήμη
– Κάθε καταχωρητής είναι μια διεύθυνση μνήμης
– Χρήση εντολών διαχείρισης μνήμης (PDP-11)
– Υβριδική λύση (Pentium): χαρτογράφηση+θύρες
• Οι προσωρινές μνήμες είναι χαρτογραφημένες στη μνήμη
• Οι καταχωρητές απεικονίζονται σε θύρες Ε/Ε
16
17
Χαρτογράφηση στη μνήμη (5 από 6)
• Πλεονεκτήματα χαρτογραφημένης Ε/Ε
– Δεν χρειάζονται ειδικές εντολές Ε/Ε
• Χρήση γλωσσών υψηλού επιπέδου
• Δεδομένα και καταχωρητές ελέγχου
– Προστασία συσκευών μέσω προστασίας μνήμης
• Χαρτογράφηση σε πυρήνα ή διεργασία
• Προσοχή: αποφυγή κρυφής μνήμης!
– Ανάγνωση/εγγραφή πρέπει να φτάνει στη συσκευή
– Απενεργοποίηση κρυφής μνήμης για τις συσκευές
18
19
Άμεση προσπέλαση μνήμης (1 από 4)
• Άμεση προσπέλαση μνήμης (DMA)
– Κύκλωμα υλικού μαζικής μεταφοράς από/προς τη μνήμη
• Είτε στη μητρική πλακέτα, είτε σε κάθε συσκευή
– «Προγραμματίζεται» από τον επεξεργαστή
• Εκτελεί σειρά από μεταφορές απευθείας από/προς τη μνήμη
– Στο τέλος διακόπτει τον επεξεργαστή
• Απλοί και πολύπλοκοι ελεγκτές DMA
– Οι ελεγκτές ανά συσκευή αναλαμβάνουν μία μεταφορά
– Οι ελεγκτές στη μητρική μπορεί να έχουν πολλά κανάλια
20
21
Άμεση προσπέλαση μνήμης (3 από 4)
• Αντιγραφή λέξη-λέξη ή ανά μπλοκ
– Λέξη-λέξη: ο ελεγκτής κλέβει κύκλους μνήμης
– Ανά μπλοκ: ο ελεγκτής εκτελεί ριπές μεταφορών
• Μεταφορά στη μνήμη ή στον ελεγκτή DMA
– Αρχικά μεταφορά στον ελεγκτή
– Στη συνέχεια μεταφορά σε μνήμη ή άλλη συσκευή
• Συνήθως χρήση φυσικών διευθύνσεων για DMA
– Αλλιώς θα πρέπει να χρησιμοποιείται η MMU
22
Διακοπές (2 από 7)
26
Διακοπές (4 από 7)
28
Διακοπές (6 από 7)
• Ανακριβείς διακοπές: κρατάμε κατάσταση
– Όλη η κατάστασης στέλνεται στη στοίβα
– Μεγάλο κόστος μεταφοράς στοιχείων
– Το ΛΣ πρέπει να καταλάβει τι έχει γίνει
– Ο κώδικας μπορεί να είναι πολύ περίπλοκος
• Ακριβείς και ανακριβείς διακοπές μαζί
– Οι διακοπές Ε/Ε θέλουμε να είναι ακριβείς
– Οι παγίδες διαίρεσης με το μηδέν ας μην είναι
• Η διεργασία θα τερματιστεί έτσι κι αλλιώς!
29
Διακοπές (7 από 7)
• Κατ’επιλογή ακριβείς διακοπές
– Μέσω ενεργοποίησης ενός bit ελέγχου
– Αύξηση της επιβάρυνσης του επεξεργαστή
• Οι ακριβείς διακοπές έχουν κόστος
– Περίπλοκοι μηχανισμοί στον επεξεργαστή
– Καταλαμβάνουν χώρο στο ολοκληρωμένο κύκλωμα
• Ο συμβιβασμός είναι δύσκολος
– Ανακριβείς διακοπές: περίπλοκο λειτουργικό
– Ακριβείς διακοπές: περίπλοκος επεξεργαστής
30
32
33
Στόχοι λογισμικού Ε/Ε (3 από 3)
• Προσωρινή αποθήκευση
– Τα πακέτα δικτύου δεν πάνε στον παραλήπτη
• Πρέπει να εξεταστεί η επικεφαλίδα του πακέτου
– Οι συσκευές ήχου είναι πραγματικού χρόνου
• Το ΛΣ χρησιμοποιεί προσωρινές μνήμες
– Η προσωρινή αποθήκευση οδηγεί σε αντιγραφές
• Μεγάλο κόστος αντιγραφής λόγω αργής μνήμης
• Αποφυγή προσωρινής αποθήκευσης όπου μπορούμε
34
• Χειριστές διακοπών
– Οι οδηγοί ξεκινούν τις μεταφορές και μπλοκάρουν
– Όταν συμβεί μια διακοπή ενεργοποιείται ο χειριστής
• Διαχείριση διακοπών μέχρι την ολοκλήρωση λειτουργίας
• Παράδειγμα: αποστολή πρόσθετων χαρακτήρων στη συσκευή
– Ξεμπλοκάρισμα του οδηγού συσκευής στο τέλος
• Αποστολή σήματος, signal σε σηματοφόρο ή κάτι ανάλογο
40
41
Οδηγοί συσκευών (1 από 5)
• Εξειδικευμένος κώδικας για κάθε είδος συσκευής
– Γνωρίζει εντολές και κώδικες σφαλμάτων της συσκευής
– Χειρίζεται τη συσκευή μέσω των καταχωρητών της
– Μπορεί να χειρίζεται πολλές παρόμοιες συσκευές
• Εκτέλεση συνήθως μέσα στον πυρήνα
– Άμεση πρόσβαση στο υλικό, άρα και στη συσκευή
– Σφάλματα στον οδηγό επηρεάζουν το σύστημα
– Σε ορισμένα ΛΣ εκτελούνται σε επίπεδο χρήστη
– Ακριβή επικοινωνία αλλά μεγαλύτερη αξιοπιστία
42
44
45
Οδηγοί συσκευών (5 από 5)
• Επανεισαγόμενοι οδηγοί (reentrant)
– Διακοπή τρέχουσας εκτέλεσης από νέα κλήση οδηγού
– Ο οδηγός πρέπει να εκτελείται από πολλές διεργασίες
• Υποστήριξη εν θερμώ σύνδεσης (hot plugging)
– Αντιμετώπιση απομάκρυνσης συσκευών
– Πρέπει να αποφεύγεται η ζημιά στον πυρήνα
– Ρύθμιση συσκευών κατά τη σύνδεσή τους
• Επικοινωνία οδηγών με τον πυρήνα
– Χρήση διαδικασιών που διαθέτει ο πυρήνας
– Παράδειγμα: διαχείριση χρονομέτρων, DMA, διακοπών
46
• Προσωρινή αποθήκευση
– Οι διεργασίες χρησιμοποιούν ομάδες χαρακτήρων
– Αν η ομάδα είναι στον πυρήνα, κλειδώνεται στη μνήμη
– Προσθήκη δεύτερης ομάδας για παράλληλη επικοινωνία
– Εναλλακτικά, χρήση κυκλικής προσωρινής μνήμης
49
Ανεξάρτητο από τη συσκευή (4 από 6)
• Προσωρινή αποθήκευση
– Στην έξοδο επιτρέπει στη διεργασία να συνεχίσει
– Αρκεί τα δεδομένα να έχουν αντιγραφεί στον πυρήνα
• Προσοχή όμως στο κόστος των αντιγραφών!
– Οι αντιγραφές επιβραδύνουν τα προγράμματα
50
• Αναφορές σφαλμάτων
– Ορισμένα σφάλματα αντιμετωπίζονται από τον οδηγό
– Άλλα σφάλματα είναι ανεξάρτητα από τη συσκευή
– Παράδειγμα: παράμετροι εκτός ορίων
– Το σφάλμα μπορεί να παρουσιάζεται στο χρήστη
– Ο χρήστης επιλέγει πώς θέλει να αντιμετωπιστεί
• Μέγεθος μπλοκ ανεξάρτητο από τη συσκευή
– Απόκρυψη των διαφορετικών τομέων των συσκευών
– Μετατροπή διάφορων φυσικών σε ένα λογικό μπλοκ
51
Ανεξάρτητο από τη συσκευή (6 από 6)
53
Χώρου χρήστη (2 από 2)
Δίσκοι
Υλικό των δίσκων
• Τύποι δίσκων
– Μαγνητικοί: δίσκοι και δισκέτες
• Ανάγνωση και εγγραφή στην ίδια ταχύτητα
• Σελιδοποίηση, συστήματα αρχείων
– Οπτικοί δίσκοι: CD, DVD, Blu-Ray
• Διανομή προγραμμάτων και μέσων
• Μη εγγράψιμοι, εγγράψιμοι, επανεγγράψιμοι
– Δίσκοι μνήμης flash: πιο γρήγορη ανάγνωση
56
57
Μαγνητικοί δίσκοι (2 από 7)
60
61
Μαγνητικοί δίσκοι (6 από 7)
62
63
Οπτικοί δίσκοι (1 από 7)
65
Οπτικοί δίσκοι (3 από 7)
• Το Mode 1 χρησιμοποιείται κυρίως για δεδομένα
– Το Mode 2 είναι κατάλληλο για πολυμέσα (χωρίς ECC)
• Βασική ταχύτητα ανάγνωσης 75 τομείς/sec
– 153600 byte/sec (Mode 1) ή 175200 byte/sec (Mode 2)
• Βασική χωρητικότητα: 650 MB (Mode 1)
– Υποθέτουμε CD 74 λεπτών και 1 MB = 220 byte
• Πολύ μικρότερη ταχύτητα από μαγνητικούς δίσκους
– Και στο ρυθμό μεταφοράς αλλά και στις αναζητήσεις
• Σύστημα αρχείων: ISO 9660
– Επεκτάσεις για UNIX (Rock Ridge) και Windows (Joliet)
66
• Εγγράψιμα CD
– Βαφή ανάμεσα στο πολυμερές και το ανακλαστικό
– Κατά την εγγραφή η βαφή «καίγεται» επιλεκτικά
– Προχαραγμένο αυλάκι για καθοδήγηση εγγραφής
67
Οπτικοί δίσκοι (5 από 7)
• Πορτοκαλί βιβλίο: CD-R και CD-ROM XA
– Επιτρέπει την εγγραφή σε τροχιές (tracks)
– Οι τροχιές ομαδοποιούνται σε εγγραφές (sessions)
• Οι εγγραφές απαιτούν νέους πίνακες περιεχομένων
– Κάθε τροχιά έχει το δικό της πίνακα περιεχομένων
– Μπορεί να περιέχει ή όχι τα αρχεία παλιότερων τροχιών
• Επανεγγράψιμα CD
– Παρόμοια με CD-R αλλά επιτρέπουν διαγραφή δεδομένων
• Η ακτίνα λέιζερ μπορεί να φέρει τη βαφή στην αρχική κατάσταση
• Έχουμε τρία επίπεδα ισχύος: εγγραφή, διαγραφή, ανάγνωση
68
69
Οπτικοί δίσκοι (7 από 7)
70
71
Διαμόρφωση δίσκου (2 από 5)
72
73
Διαμόρφωση δίσκου (4 από 5)
75
Χρονοπρογραμματισμός (1 από 5)
• Αλγόριθμοι χρονοπρογραμματισμού βραχίονα
– Χρόνος ανάγνωσης/εγγραφής ενός μπλοκ:
• Χρόνος αναζήτησης: μετακίνηση κεφαλής σε κύλινδρο
• Καθυστ. περιστροφής: το μπλοκ φτάνει στην κεφαλή
• Χρόνος μεταφοράς δεδομένων
– Ο χρόνος αναζήτησης κυριαρχεί των άλλων
• Μείωση με χρονοπρογραμματισμό βραχίονα δίσκου
• Στην απλούστερη περίπτωση έχουμε FCFS
• Δεν εκμεταλλευόμαστε τη θέση των αναζητήσεων
76
Χρονοπρογραμματισμός (2 από 5)
77
Χρονοπρογραμματισμός (3 από 5)
78
Χρονοπρογραμματισμός (4 από 5)
• Βελτιστοποιήσεις ανά κύλινδρο
– Εξυπηρέτηση τομέων όπως έρχονται στην κεφαλή
– Εξυπηρέτηση των τροχιών του ίδιου κυλίνδρου
• Ομαδική ανάγνωση τομέων
– Όταν ζητείται ένας τομέας διαβάζεται όλη η τροχιά
– Αποθηκεύεται στην κρυφή μνήμη του ελεγκτή
– Αποφυγή καθυστέρησης αναζήτησης/περιστροφής
– Κατανομή κρυφής μνήμης σε αναγνώσεις/εγγραφές
79
Χρονοπρογραμματισμός (5 από 5)
• Κρυφή μνήμη ελεγκτή ή λειτουργικού;
– Ο ελεγκτής αποθηκεύει τους τομείς που διαβάζει
– Το λειτουργικό αποθηκεύει τους τομείς που ζήτησε
• Παράλληλες λειτουργίες με πολλούς δίσκους
– Επικαλυπτόμενες αναζητήσεις
• Πού εκτελούνται οι αλγόριθμοι αυτοί;
– Παλιότερα: στο λειτουργικό σύστημα
– Σήμερα: οι δίσκοι αποκρύπτουν τη γεωμετρία τους
– Οι αλγόριθμοι μπορούν να εκτελούνται στον ελεγκτή
80
81
Χειρισμός σφαλμάτων (2 από 4)
82
83
Χειρισμός σφαλμάτων (4 από 4)
• Οι ελεγκτές μπορούν να κάνουν και reset
– Ειδικός ακροδέκτης reset σε περίπτωση ανάγκης
• Το πρόβλημα της επαναβαθμονόμησης
– Χρειάζεται όταν έχουμε σφάλματα αναζήτησης
– Ο βραχίονας οδηγείται στο άκρο του δίσκου
– Δημιουργείται σημαντική καθυστέρηση
– Πρόβλημα στις εφαρμογές πολυμέσων
– Οι δίσκοι AV αποφεύγουν την επαναβαθμονόμηση
84
85
Ευσταθής αποθήκευση (2 από 3)
87
Ρολόγια
90
91
Λογισμικό των ρολογιών (1 από 5)
• Τήρηση ημερομηνίας και ώρας
– 32 bit δεν φτάνουν για χτύπους από το 1970!
– Είτε χρήση μετρητή 64 bit
– Είτε χρήση μετρητή δευτερολέπτων
• Αύξηση δευτερολέπτων μετά από n χτύπους
– Είτε χρήση μετρητή χτύπων από την ώρα εκκίνησης
• Πρόσθεση μετρητή στην ώρα εκκίνησης του συστήματος
92
93
Λογισμικό των ρολογιών (3 από 5)
94
95
Λογισμικό των ρολογιών (5 από 5)
• Ανάλυση (profiling) του συστήματος
– Δημιουργία ιστογράμματος χρήσης προγράμματος
– Ενεργοποιείται όταν ζητείται από πρόγραμμα χρήστη
– Σε κάθε διακοπή εξετάζεται η τρέχουσα τιμή του PC
– Αντιστοίχιση του PC σε περιοχή διευθύνσεων
– Αύξηση του μετρητή της περιοχής κατά 1
– Οι περιοχές αντιστοιχούν σε μεθόδους/συναρτήσεις
– Βλέπουμε που ξοδεύει το χρόνο του το πρόγραμμα
96
Χρονόμετρα λογισμικού
• Διάφορα μέρη του συστήματος χρειάζονται ρολόγια
– Παράδειγμα: ο κώδικας των δικτυακών πρωτοκόλλων
• Πώς μπορούν να υλοποιηθούν χωρίς μεγάλη επιβάρυνση;
– Η χρήση διακοπών έχει μεγάλο κόστος σε χρόνο
• Χρονόμετρα λογισμικού: χρήση polling
– Όποτε ο πυρήνας τελειώνει κάποια λειτουργία τα ελέγχει
– Αν κάποιο έχει λήξει εκτελούμε την κατάλληλη λειτουργία
– Αποφεύγουμε διακοπή και αλλαγή περιβάλλοντος
– Πρέπει όμως ο πυρήνας να εκτελείται αρκετά συχνά
– Επιπλέον χρησιμοποιούμε και τις διακοπές ρολογιού
97
Διασυνδέσεις με το χρήστη
99
Λογισμικό εισόδου (2 από 6)
• Λογισμικό πληκτρολογίου
– Το πληκτρολόγιο παράγει κωδικούς 7 bit
– Το 8ο bit του κωδικού είναι
• 0 για πάτημα πλήκτρου
• 1 για απελευθέρωση πλήκτρου
– Ο οδηγός γνωρίζει ποιο 5 πατήσαμε
• Άνω σειρά πλήκτρων ή αριθμητικό
– Ο οδηγός αποφασίζει το συνδυασμό πλήκτρων
• Συνδυασμός πλήκτρων που έχουν πατηθεί (π.χ. CTRL-A)
• Αρκεί η παρακολούθηση των πλήκτρων
100
102
104
105
Λογισμικό εξόδου (2 από 4)
107
Λογισμικό εξόδου (4 από 4)
108
• Σύστημα X Window
– Πελάτης X: ένα πρόγραμμα εφαρμογής
– Εξυπηρετητής X: λογισμικό που χειρίζεται το τερματικό
– Εκτέλεση στο ίδιο ή σε διαφορετικά μηχανήματα
– Επικοινωνία μέσω του πρωτοκόλλου X (πάνω από TCP)
109
Σύστημα X Window (2 από 5)
• Το X δεν είναι πλήρες σύστημα παραθύρων
– Χρειάζεται πολύ ακόμη λογισμικό!
– Xlib: βιβλιοθήκη βασικών διαδικασιών
– Intrinsics: εργαλειοθήκη αντικειμένων
• Widget: στοιχείο διασύνδεσης (π.χ. εικονίδιο)
– Motif: διασύνδεση με ενιαία εμφάνιση
• Εναλλακτικά Gnome (GTK+) και KDE (Qt)
– Window manager: διαχειριστής παραθύρων
110
111
Σύστημα X Window (4 από 5)
• Παράδειγμα προγράμματος X
– Δέσμευση πόρων παραθύρου, ανακοίνωση σε διαχειριστή
– Δημιουργία θεματικού πλαισίου με ιδιότητες παραθύρου
– Επιλογή συμβάντων εισόδου και εμφάνιση παραθύρου
– Βρόχος αντιμετώπισης επόμενου γεγονότος
– Αποδέσμευση πόρων από το πρόγραμμα
113
Σύστημα MS Windows (1 από 6)
116
• Διανυσματικά γραφικά
– Η σχεδίαση σχημάτων είναι διανυσματικά γραφικά
– Η τελική μορφή είναι ανεξάρτητη από τη συσκευή
– WMF: ένα αρχείο διανυσματικών εντολών
• Ψηφιογραφικά
– Κάθε διανυσματικό γραφικό μπορεί να γίνει bitmap
– Έτοιμες εικόνες και φωτογραφίες μπορεί να είναι bitmap
– BMP: ψηφιογραφικό «ανεξάρτητο» από συσκευή
117
Σύστημα MS Windows (5 από 6)
• Ψηφιογραφικά
– Χρήση διαδικασιών bitblt για αντιγραφή περιοχών bitmap
– Ορίζεται η περιοχή προέλευσης και το σημείο αντιγραφής
– Μπορεί να είναι σε διαφορετικά παράθυρα
– Μπορεί να έχουμε και συνδυασμό των δύο περιοχών
118
• Γραμματοσειρές
– Παλιότερα αναπαράσταση με ψηφιογραφικά
– Διαφορετικό αρχείο για κάθε μέγεθος και ανάλυση
– Τώρα χρησιμοποιούνται περιγράμματα γραμματοσειρών
– Κάθε χαρακτήρας είναι σύνολο καμπυλών και υποδείξεων
119
Μικροπελάτες (1 από 2)
• Από τους κεντρικούς υπολογιστές περάσαμε στα PC
– Κάθε χρήστης έχει τον δικό του υπολογιστή
• Πλεονεκτήματα κεντρικών υπολογιστών
– Δεν χρειάζεται διάσπαρτη ενημέρωση λογισμικού
– Κεντρική διαχείριση και τήρηση αντιγράφων αρχείων
– Καλύτερη αξιοποίηση πόρων (δεν έχουμε αδρανή PC)
• Οι χρήστες θέλουν GUI αλλά όχι διαχείριση
– Μικροπελάτες (thin clients): τερματικά για GUI
– Παλιότερα υπήρχαν τα τερματικά X
– Το κόστος τους όμως δεν ήταν ανταγωνιστικό με τα PC
120
Μικροπελάτες (2 από 2)
• Σύστημα THINC
– Ο υπολογιστής είναι απλά μια οθόνη
– Η προετοιμασία των γραφικών γίνεται στον διακομιστή
– Το πρόγραμμα στον διακομιστή σχεδιάζει την οθόνη
– Το THINC δημιουργεί τις εντολές του πρωτοκόλλου
– Οι εντολές στέλνονται στον μικροπελάτη
– Ο μικροπελάτης τις σχεδιάζει στην οθόνη
121
Διαχείριση ισχύος
124
Ζητήματα ΛΣ (2 από 5)
• Ο σκληρός δίσκος
– Σταμάτημα περιστροφής μετά από αρκετή αδράνεια
– Η κρυφή μνήμη βοηθάει στην αποφυγή ενεργοποίησης
– Τα προγράμματα μπορούν να βοηθήσουν και αυτά
• Η ΚΜΕ
– Αδρανοποίηση επεξεργαστή για οικονομία ενέργειας
– Ενεργοποιείται ξανά όταν συμβεί κάποια διακοπή
– Πολλές φορές η ταχύτητα εξαρτάται από την τάση
• Κατανάλωση ανάλογη με το τετράγωνο της τάσης
127
Ζητήματα ΛΣ (3 από 5)
Ζητήματα ΛΣ (4 από 5)
• Η μνήμη
– Καθάρισμα και μετά απενεργοποίηση κρυφής μνήμης
– Θα έχουμε αστοχίες στην κρυφή μνήμη
– Εγγραφή κύριας μνήμης στο δίσκο και απενεργοποίηση
– Αρκετός χρόνος για επαναφορά της μνήμης από δίσκο
• Ασύρματη επικοινωνία
– Ενημερώνουμε τη βάση για την απενεργοποίηση
– Η βάση αποθηκεύει τα μηνύματα προς το σταθμό
– Ο σταθμός αποθηκεύει τα μηνύματα προς τη βάση
– Ενεργοποίηση περιοδική ή όταν γεμίσει η μνήμη
129
Ζητήματα ΛΣ (5 από 5)
• Θερμική διαχείριση
– Οι ανεμιστήρες καταναλώνουν αρκετή ενέργεια
– Ενεργοποιούνται όταν ανεβαίνει η θερμοκρασία
• Διαχείριση μπαταρίας
– Οι σύγχρονες μπαταρίες δίνουν πληροφορίες στο ΛΣ
– Το ΛΣ μπορεί να ρυθμίζει την κατάσταση ανάλογά
• Διασύνδεση οδηγών
– Προηγμένη διασύνδεση διευθέτησης και ισχύος (ACPI)
– Το ΛΣ ζητά από οδηγούς δυνατότητες και κατάσταση
– Μπορεί να τους ζητήσει να αλλάξουν κατάσταση
130
Ζητήματα εφαρμογών
• Έστω ότι τα προγράμματα ενημερώνονται από το ΛΣ
• Παράδειγμα: πρόγραμμα εμφάνισης βίντεο
– Αφαίρεση πληροφορίας χρώματος (ασπρόμαυρη εικόνα)
– Μείωση του αριθμού πλαισίων ανά δευτερόλεπτο
– Μείωση της ανάλυσης της οθόνης ή του μεγέθους της
• Παράδειγμα: πρόγραμμα αναγνώρισης φωνής
– Χρήση μικρότερου λεξιλογίου
– Χρήση απλούστερου μοντέλου φωνής
• Παράδειγμα: πρόγραμμα εμφάνισης χαρτών
– Παράλειψη των μικρότερων δρόμων από το χάρτη
131
Ενότητα # 6: Αδιέξοδα
Σκοποί ενότητας
• Κατανόηση της έννοιας των πόρων και του
προβλήματος των αδιεξόδων κατά τη χρήση
των πόρων
• Εξοικείωση με τις βασικές τεχνικές
διαχείρισης αδιεξόδων: αγνόηση, εντοπισμός
και ανάκαμψη, αποφυγή, αποτροπή
• Κατανόηση των πρακτικών προβλημάτων στη
διαχείριση αδιεξόδων
4
Περιεχόμενα ενότητας
• Πόροι
• Αδιέξοδα
• Αντιμετώπιση αδιεξόδων
• Εντοπισμός και ανάκαμψη
• Αποφυγή αδιεξόδων
• Αποτροπή αδιεξόδων
• Άλλα θέματα
5
Πόροι
Τύποι πόρων (1 από 3)
• Ορισμένοι πόροι του ΛΣ δεν είναι κοινόχρηστοι
– Πόροι υλικού: εκτυπωτής
– Πόροι λογισμικού: πίνακας διεργασιών
• Η δέσμευση πόρων μπορεί να δώσει αδιέξοδο
– Η Α δεσμεύει το σαρωτή και ζητά τον εκτυπωτή
– Η Β δεσμεύει τον εκτυπωτή και ζητά το σαρωτή
• Τα αδιέξοδα είναι πολύ πιο γενικό πρόβλημα
– Συμβαίνουν με πολλές διεργασίες (κυκλική αναμονή)
– Συμβαίνουν σε βάσεις (κλειδώματα εγγραφών)
8
Τύποι πόρων (3 από 3)
• Μη προεκτοπίσιμοι πόροι: δεν αποσπώνται εύκολα
– Παράδειγμα: εγγραφέας CD
• Τα αδιέξοδα αφορούν μη προεκτοπίσιμους πόρους
• Ο τρόπος δέσμευσης εξαρτάται από το ΛΣ
– Δέσμευση πόρου με κλήση συστήματος request
– Δέσμευση πόρου με άνοιγμα αρχείου συσκευής
• Τι γίνεται όταν ένας πόρος δεν είναι διαθέσιμος;
– Είτε η διεργασία μπλοκάρεται και περιμένει
– Είτε επιστρέφει σφάλμα και ξαναπροσπαθεί
Αδιέξοδα
Ορισμός αδιεξόδου (1 από 2)
• Τυπικός ορισμός αδιεξόδου
– Έστω ένα σύνολο μπλοκαρισμένων διεργασιών
– Όλες οι διεργασίες περιμένουν κάποιο συμβάν
– Τα συμβάντα αυτά παράγονται μόνο εσωτερικά
– Αφού όλες περιμένουν κάποια άλλη του συνόλου…
– ..καμία δεν μπορεί να προχωρήσει!
– Με ορισμένες υποθέσεις
• Υποθέτουμε ένα νήμα ανά διεργασία
• Υποθέτουμε ότι δεν αφυπνίζονται από διακοπές
13
14
Συνθήκες του Coffman (1 από 3)
• Συνθήκες του Coffman
– Πρέπει να ισχύουν όλες για αδιέξοδο πόρων
1. Αμοιβαίος αποκλεισμός
• Κάθε πόρος είτε είναι εκχωρημένος σε μία διεργασία είτε
είναι διαθέσιμος
• Δεν επιτρέπεται καταμερισμός των πόρων
2. Δέσμευση και αναμονή
• Μια διεργασία με εκχωρημένους πόρους μπορεί να ζητάει
κι άλλους
• Δεν ζητάει υποχρεωτικά όλους τους πόρους μαζί
15
Αντιμετώπιση αδιεξόδων
Αγνόηση αδιεξόδων (1 από 2)
• Τέσσερις γενικές στρατηγικές αντιμετώπισης
– Αγνοούμε το πρόβλημα
• Ελπίζουμε ότι δεν θα συμβούν
– Εντοπίζουμε τα αδιέξοδα και ανακάμπτουμε
• Απαιτεί ακύρωση ενεργειών και σπατάλη πόρων
– Αποφεύγουμε τα αδιέξοδα
• Απαιτεί προσεκτική κατανομή των πόρων
– Αποτρέπουμε τα αδιέξοδα
• Άρση των συνθηκών του Coffman
21
22
Εντοπισμός και ανάκαμψη
25
26
Με πολλούς πόρους (1 από 4)
27
T
k 1
kl l Yl
28
Με πολλούς πόρους (3 από 4)
• Αλγόριθμος εντοπισμού αδιεξόδων
1. Ψάξε μία ασημείωτη διεργασία k με Ak<=Θ
2. Αν βρεθεί τέτοια, πρόσθεσε το Tk στο Θ
3. Μετά σημείωσε τη διεργασία και πήγαινε στο 1
4. Αν δεν υπάρχει, ο αλγόριθμος τερματίζεται
• Ψάχνουμε μια διεργασία που μπορεί να ολοκληρωθεί
– Θεωρούμε ότι δεσμεύει όλους τους πόρους που θέλει
– Μετά εκτελείται ως το τέλος και τους απελευθερώνει
– Άρα ψάχνουμε μια ασφαλή ακολουθία εκτέλεσης
29
31
32
Ανάκαμψη από αδιέξοδα (3 από 4)
• Ανάκαμψη μέσω ανασκευής (rollback)
– Περιοδική δημιουργία σημείων ελέγχου
• Λέγονται και checkpoints
• Εγγραφή κατάστασης διεργασίας σε αρχείο
• Περιλαμβάνει εικόνα μνήμης και πόρους
– Εντοπίζουμε τη διεργασία που εμπλέκεται
– Εντοπίζουμε τον πόρο που έχει πρόβλημα
– Επανεκκίνηση από προηγούμενο σημείο ελέγχου
• Πρέπει να μην έχει δεσμευθεί ακόμα ο πόρος
33
34
Αποφυγή αδιεξόδων
36
Τροχιές πόρων (1 από 2)
• Τροχιές πόρων
– Έστω ότι έχουμε δύο διεργασίες και δύο πόρους
– Κάθε διεργασία χρειάζεται τους πόρους για
κάποιο διάστημα
– Άξονας: εξέλιξη μίας διεργασίας στο χρόνο
– Η τεθλασμένη δείχνει την εξέλιξη των διεργασιών
– Κίνηση μόνο προς τα πάνω ή τα δεξιά
37
38
Ασφαλείς καταστάσεις (1 από 2)
40
Αλγόριθμος τραπεζίτη (1 από 3)
41
42
Αλγόριθμος τραπεζίτη (3 από 3)
43
Αποτροπή αδιεξόδων
Γιατί πρόληψη αδιεξόδων
• Πόσο ρεαλιστική είναι η αποφυγή αδιεξόδων;
– Λίγο καλύτερη από τον εντοπισμό
• Ελέγχουμε τους πόρους μόνο όταν ζητούνται
– Οι υποθέσεις όμως πάλι δεν είναι ρεαλιστικές
• Οι απαιτήσεις των διεργασιών δεν είναι γνωστές
– Νέες διεργασίες μπορεί να έρχονται στο σύστημα
45
46
Συνθήκη αμοιβαίου αποκλεισμού
• Προσβολή συνθήκης αμοιβαίου αποκλεισμού
– Ορισμένοι πόροι απαιτούν αμοιβαίο αποκλεισμό
• Παράδειγμα: ο εκτυπωτής
– Κρύβουμε τον εκτυπωτή πίσω από μια διεργασία
• Μόνο η διεργασία αυτή μπορεί να τυπώσει
• Οι άλλες διεργασίες της στέλνουν δεδομένα για εκτύπωση
• Η ίδια η διεργασία δεσμεύει μόνο τον εκτυπωτή
• Προσοχή όμως για να αποφύγουμε άλλα αδιέξοδα
• Παράδειγμα: αδιέξοδο στην ουρά εκτύπωσης!
47
48
Συνθήκη μη προεκτόπισης
• Προσβολή συνθήκης μη προεκτόπισης
– Γενικά μη εφικτό σε ορισμένες συσκευές
• Παράδειγμα: εκτυπωτής (χάνουμε χαρτί)
• Παράδειγμα: εγγραφέας CD (χάνουμε το CD)
– Xρήση διαχειριστών πόρων
• Διαχειριστής εκτυπώσεων
• Αποκρύπτει την ακολουθιακή χρήση των πόρων
– Ίδια προσέγγιση με τον αμοιβαίο αποκλεισμό
49
51
Σύγκριση
52
Άλλα θέματα
54
Κλείδωμα σε δύο φάσεις (2 από 2)
– Δέσμευση όλων των πόρων από την αρχή
• Για κάθε ομάδα ενημερώσεων εγγραφών όμως
– Το κλείδωμα μπορεί να καθυστερήσει πάρα πολύ
– Πρέπει το πρόγραμμα να μπορεί να κάνει πίσω
• Απαιτείται κατάλληλη σχεδίαση του προγράμματος
55
56
Αδιέξοδα επικοινωνίας (2 από 3)
– Η διαχείριση αδιεξόδων πόρων δεν λειτουργεί
– Υπάρχει μια άλλη λύση: τα χρονόμετρα
• Όταν στέλνεται ένα μήνυμα, ξεκινάει ένα χρονόμετρο
• Αν λήξει χωρίς απάντηση, επαναλαμβάνουμε
• Τι θα γίνει όμως αν το μήνυμα απλά άργησε;
57
58
Ενεργό αδιέξοδο (1 από 2)
59
60
Λιμοκτονία (1 από 2)
• Ποιος θα πάρει έναν πόρο που ζητούν πολλοί;
– Κάθε σύστημα εφαρμόζει κάποια πολιτική
• Παράδειγμα: εκτυπωτής
– Έστω ότι επιλέγουμε τη μικρότερη εκτύπωση
• Έτσι οι μικρές εκτυπώσεις εξυπηρετούνται γρήγορα
• Οι μεγάλες όμως μπορεί να μην εκτελεστούν ποτέ!
61
Λιμοκτονία (2 από 2)
• Η αναβολή εξυπηρέτησης λέγεται λιμοκτονία
(starvation)
• Αποφεύγεται με κατάλληλους αλγόριθμους
– Ο FCFS δεν οδηγεί σε λιμοκτονία
• Αλλά δεν είναι αποδοτικός!
– Round Robin (διεργασίες) και SCAN (δίσκος)
• Δεν οδηγούν σε λιμοκτονία
• Είναι αποδοτικοί
62
Ενότητα # 7: Ασφάλεια
Σκοποί ενότητας
• Κατανόηση της έννοιας της ασφάλειας στα ΛΣ
και εισαγωγή στην κρυπτογραφία
• Εξοικείωση με τους βασικούς μηχανισμούς
προστασίας και πιστοποίησης ταυτότητας
• Κατανόηση των βασικών κινδύνων ασφάλειας,
όπως εσωτερικές επιθέσεις, αξιοποίηση
σφαλμάτων κώδικα και κακόβουλο λογισμικό
• Εισαγωγή στους βασικούς τρόπους άμυνας
απέναντι στις επιθέσεις στα ΛΣ
4
Περιεχόμενα ενότητας
• Περιβάλλον ασφάλειας
• Αρχές κρυπτογραφίας
• Μηχανισμοί προστασίας
• Πιστοποίηση ταυτότητας
• Εσωτερικές επιθέσεις
• Αξιοποίηση σφαλμάτων κώδικα
• Κακόβουλο λογισμικό
• Τρόποι άμυνας
5
Περιβάλλον ασφάλειας
Εισαγωγή
• Το πρόβλημα της ασφάλειας
– Αποθήκευση εμπιστευτικών πληροφοριών
– Τα πολύπλοκα ΛΣ δυσχεραίνουν την προστασία
– Ακόμη μεγαλύτερο πρόβλημα είναι η δικτύωση
• Το πρόβλημα σταδιακά μεταβάλλεται
– Παλιότερα: ανάμεσα στους χρήστες μιας μηχανής
– Ενδιάμεσα: κάθε χρήστης στη δική του μηχανή
– Τώρα: κάθε χρήστης βλέπει μηχανές των άλλων
Το περιβάλλον ασφάλειας
• Η ασφάλεια έχει πολλές όψεις
– Λειτουργικό σύστημα
– Δίκτυο υπολογιστών
– Πληροφοριακό σύστημα
• Ορολογία
– Ασφάλεια (security)
• Τα δεδομένα δεν θα διαβαστούν ή τροποποιηθούν
– Μηχανισμοί προστασίας (protection mechanisms)
• Μέθοδοι επίτευξης των στόχων της ασφάλειας
8
Απειλές (1 από 2)
• Ένα σύστημα έχει κάποιους στόχους ασφάλειας
• Κάθε στόχος αντιμετωπίζει κάποιες απειλές
• Εμπιστευτικότητα δεδομένων (confidentiality)
– Απόκρυψη μυστικών δεδομένων
– Ο ιδιοκτήτης τους καθορίζει ποιος θα τα δει
• Ακεραιότητα δεδομένων (integrity)
– Τροποποίηση μόνο με άδεια του ιδιοκτήτη τους
– Αλλαγή, προσθήκη και διαγραφή δεδομένων
Απειλές (2 από 2)
• Διαθεσιμότητα συστήματος (availability)
– Το σύστημα δεν αχρηστεύεται από τρίτους
• Επιθέσεις άρνησης εξυπηρέτησης (denial of service)
• Συνήθως εναντίον ομάδων και όχι χρηστών
10
Δύσκολα θέματα
• Προσωπικό απόρρητο (privacy)
– Τι πρόσβαση έχει ο Χ στα δεδομένα μου;
– Όπου Χ = κράτος/εργοδότης/οικογένεια
• Εγείρονται μη τεχνικά ζητήματα
– Νομικά
– Πολιτικά
– Ηθικά
11
Εισβολείς (1 από 2)
• Εισβολείς (intruders) ή εχθροί (adversaries)
– Παθητικοί (passive): διαβάζουν δεδομένα
– Ενεργητικοί (active): τροποποιούν δεδομένα
• Απλοί χρήστες χωρίς τεχνικές γνώσεις
– Διαβάζουν απροστάτευτα δεδομένα
– Κίνητρό τους η περιέργεια
• Εσωτερικοί χρήστες με τεχνικές γνώσεις
– Διαχειριστές, φοιτητές, προγραμματιστές
– Αντιμετωπίζουν την προστασία ως πρόκληση
12
Εισβολείς (2 από 2)
• Επαγγελματίες με στόχο το κέρδος
– Εκμεταλλεύονται κενά του συστήματος
• Εμπορικοί ή στρατιωτικοί κατάσκοποι
– Χρηματοδότηση και προχωρημένα μέσα
• Ιοί και παρόμοιο λογισμικό
– Προσπαθούν να κάνουν ζημιές
– Δεν έχουν συγκεκριμένο στόχο
– Μπορεί να έρχονται από οπουδήποτε
13
Απώλεια δεδομένων
• Απώλεια δεδομένων από ατύχημα
– Δεν υπάρχουν μόνο κακόβουλοι εισβολείς
– Θεομηνίες: πλημμύρες, σεισμοί, φωτιές
– Σφάλματα υλικού/λογισμικού: αλλοίωση
– Ανθρώπινα λάθη: διαγραφή αρχείων κατά λάθος
– Αντιμετωπίζονται με αντίγραφα ασφαλείας
• Κατά προτίμηση μακριά από το σύστημα
– Πιο σοβαρό πρόβλημα από τις παραβιάσεις!
14
Αρχές κρυπτογραφίας
16
Βασικές αρχές (2 από 3)
• Αρχή του Kerchoff (Kerchoff’s principle)
– Οι αλγόριθμοι κρυπτογραφίας είναι δημόσιοι
– Τα κλειδιά (keys) τους είναι μυστικά
– Τελικά οι αλγόριθμοι θα μαθευτούν
– Τα κλειδιά όμως αλλάζουν τακτικά
• Εναλλακτικά: ασφάλεια μέσω κάλυψης
– Κρατάμε μυστικά τα πάντα
– Ρεαλιστικά, κάποτε θα διαρρεύσουν
17
18
Μυστικού κλειδιού (1 από 2)
• Κρυπτογραφία μυστικού κλειδιού
• Μονοαλφαβητική υποκατάσταση
– Κάθε γράμμα αντικαθίσταται (1 προς 1)
– Απλό κείμενο:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
– Κρυπτοκείμενο:
QWERTYUIOPASDFGHJKLZXCVBNM
– Το κλειδί είναι η συμβολοσειρά αντικατάστασης
– Παρόμοια κρυπτογράφηση / αποκρυπτογράφηση
19
22
Μονόδρομες συναρτήσεις
• Μία συνάρτηση y=f(x) είναι μονόδρομη όταν
– Ο υπολογισμός του y από το x είναι απλός
– Ο υπολογισμός του x από το y δεν είναι
• Αντίθετα, είναι εξαιρετικά δύσκολος
• Κρυπτογραφική συνάρτηση κατακερματισμού
– Μονόδρομη συνάρτηση με πρόσθετες ιδιότητες
– Δεν είναι συνάρτηση κρυπτογραφησης
• Δεν υπάρχει συνάρτηση αποκρυπτογράφησης
23
25
28
Τομείς προστασίας (2 από 5)
29
30
Τομείς προστασίας (4 από 5)
31
32
Λίστες ελέγχου πρόσβασης (1 από 4)
33
• Σε τι αντιστοιχούν οι τομείς;
• Τουλάχιστον σε μεμονωμένους χρήστες
– Λέγονται και υποκείμενα (subjects)
– Εναλλακτικά, κύριοι (principals)
• Συνήθως έχουμε και ομάδες (groups) χρηστών
– Ένας χρήστης μπορεί να ανήκει σε διάφορες
ομάδες
34
Λίστες ελέγχου πρόσβασης (3 από 4)
• Δικαιώματα ανά UID/GID
– Ο συνδυασμός UID/GID είναι ένας ρόλος (role)
• Παράδειγμα: η georgia είναι και sysadm και pigfan
– Τα δικαιώματα εξαρτώνται από τρέχουσα ομάδα
• Δικαιώματα ανεξαρτήτως ομάδας
– Παράδειγμα: tana,*: RW
35
37
Δυνατότητες (2 από 3)
• Προστασία δυνατοτήτων
– Οι δυνατότητες σχετίζονται με μια διεργασία
– Η διεργασία δεν πρέπει να τις αλλάζει!
• Αρχιτεκτονικές με ετικέτες (tagged architectures)
– Κάθε λέξη της μνήμης έχει μία ετικέτα (tag)
– Αν είναι 1, η λέξη αλλάζει μόνο από το ΛΣ
• Διατήρηση δυνατοτήτων μέσα στο λειτουργικό
– Οι διεργασίες αναφέρονται σε θέσεις στη λίστα
38
Δυνατότητες (3 από 3)
• Κρυπτογράφηση των δυνατοτήτων
– Στη δημιουργία παράγεται τυχαίο πεδίο ελέγχου
• Ο δημιουργός κρατάει τοπικά το πεδίο ελέγχου
– Ο ιδιοκτήτης λαμβάνει ένα ειδικό αντικείμενο
• Περιέχει κρυπτογραφική σύνοψη των στοιχείων
– Ο χρήστης στέλνει το αντικείμενο για χρήση
• Ο διακομιστής ελέγχει αν τα δικαιώματα είναι ίδια
• Αν όχι, τότε η κρυπτογραφική σύνοψη δεν ταιριάζει
39
Δυνατότητες (4 από 4)
• Γενικά δικαιώματα για όλα τα αντικείμενα
– Αντιγραφή ή διαγραφή δυνατότητας / αντικειμένου
• Ανάκληση δικαιωμάτων πρόσβασης
– Χρήση έμμεσων αντικειμένων για τις διεργασίες
– Τα έμμεσα δείχνουν στα πραγματικά
– Η διαγραφή του έμμεσου ανακαλεί τα πάντα
• Δυνατότητες ή λίστες ελέγχου πρόσβασης;
– Οι δυνατότητες επιτρέπουν πιο γρήγορο έλεγχο
– Οι λίστες ελέγχου επιτρέπουν επιλεκτική ανάκληση
40
Έμπιστα συστήματα
• Γιατί τα σύγχρονα ΛΣ έχουν προβλήματα ασφάλειας;
– Ο τρόπος κατασκευής ασφαλών ΛΣ είναι γνωστός
• Συμβατότητα: ένα νέο ΛΣ θέλει νέες εφαρμογές
– Δεν θα εκτελεί τα υπάρχοντα προγράμματα
• Πολυπλοκότητα: ένα ασφαλές ΛΣ θα είναι απλό
– Δεν θα δέχεται ενεργό περιεχόμενο στο e-mail
– Δεν θα δέχεται ενεργό περιεχόμενο στις ιστοσελίδες
– Ζητάνε πραγματικά οι χρήστες αυτές τις δυνατότητες;
• Ή μήπως προστίθενται από τις εταιρείες για λόγους μαρκετινγκ;
41
43
45
46
Πολυεπίπεδη ασφάλεια (2 από 4)
• Μοντέλο Bell-La Padula
– Σχεδιάστηκε για στρατιωτικά συστήματα
– Διατεταγμένα επίπεδα διεργασιών / αντικειμένων
– Απλή ιδιότητα ασφάλειας
• Μία διεργασία στο επίπεδο k μπορεί να διαβάσει <=k
– Ιδιότητα *
• Μια διεργασία στο επίπεδο k μπορεί να γράψει >=k
– Οι διεργασίες διαβάζουν κάτω & γράφουν πάνω
• Μπορώ να στείλω στον ανώτερο
• Μπορώ να λάβω από τον κατώτερο
47
48
Πολυεπίπεδη ασφάλεια (4 από 4)
• Μοντέλο Biba
– Το Bell-La Padula έχει σχεδιαστεί για να κρατάει μυστικά
• Ενημέρωση από κάτω και αναφορές προς τα πάνω
– Το Biba εγγυάται την ακεραιότητα των δεδομένων
– Απλή ιδιότητα ακεραιότητας
• Μία διεργασία στο επίπεδο k μπορεί να γράψει <=k
– Ιδιότητα * ακεραιότητας
• Μια διεργασία στο επίπεδο k μπορεί να διαβάσει >=k
– Εφαρμογή σε εταιρικό περιβάλλον
• Ενημέρωση από πάνω και οδηγίες προς τα κάτω
49
50
Συγκεκαλυμμένα κανάλια (2 από 5)
51
52
Συγκεκαλυμμένα κανάλια (4 από 5)
• Παράδειγμα: εικόνα με 24 bit χρώματος
– Κάθε εικονοστοιχείο έχει 3 κανάλια χρώματος
– Κάθε κανάλι έχει 8 bit
– Χρησιμοποιούμε το λιγότερο σημαντικό bit
• Αλλάζει ανάλογα με την πληροφορία
– Ανεπαίσθητες αλλαγές στο χρώμα
53
54
Πιστοποίηση ταυτότητας
57
58
Κωδικοί πρόσβασης (4 από 11)
• Πώς διεισδύουν οι κράκερ;
– Τα ονόματα χρήστη είναι συνήθως προφανή
• Παράδειγμα: όνομα.επώνυμο
– Αλλά και οι (απλοί) κωδικοί δεν είναι δύσκολοι
• Οι χρήστες συνήθως χρησιμοποιούν κοινές λέξεις
• Με ένα μικρό λεξικό ανοίγουν πολλοί λογαριασμοί
– Το πρόβλημα είναι πιο μεγάλο λόγω δικτύων
• Ένας χρήστης μπορεί να έχει πολλούς λογαριασμούς
• Συνήθως χρησιμοποιεί τον ίδιο κωδικό παντού
59
60
Κωδικοί πρόσβασης (6 από 11)
• Πώς διεισδύουν οι κράκερ;
– Σάρωση θυρών (port scan)
• Δοκιμή σύνδεσης με διάφορες θύρες UDP και TCP
• Αποκάλυψη υπηρεσιών που τρέχουν σε ένα σύστημα
• Στη συνέχεια επίθεση στις υπηρεσίες αυτές
– Χρήση προεπιλεγμένων κωδικών
• Σε πολλά ΛΣ υπάρχουν λογαριασμοί ειδικού σκοπού
• Οι κωδικοί είναι προεπιλεγμένοι από τον κατασκευαστή
• Πολλοί διαχειριστές δεν τους αλλάζουν ποτέ
61
62
Κωδικοί πρόσβασης (8 από 11)
• Τα σεναριόπαιδα (script kiddies)
– Αδαείς χρήστες που χρησιμοποιούν έτοιμα σενάρια
• Αξιοποίηση είτε γνωστών προβλημάτων είτε επαναλήψεων
• Ασφάλεια κωδικών πρόσβασης στο UNIX
– Η διατήρηση κωδικών σε αρχείο είναι επικίνδυνη
– Στο UNIX αποθηκεύονται κρυπτογραφημένοι
• Χρήση μονόδρομης συνάρτησης στον κωδικό
• Σε κάθε σύνδεση ο κωδικός κρυπτογραφείται και συγκρίνεται
– Ο εισβολέας μπορεί όμως να κάνει κι αυτός το ίδιο
• Κρυπτογράφηση βάσης των κοινών λέξεων και σύγκριση
63
64
Κωδικοί πρόσβασης (10 από 11)
• Κωδικοί πρόσβασης μίας χρήσης (one time passwords)
– Μονόδρομη αλυσίδα κατακερματισμού (hash chain)
• Χρησιμοποιεί μία μονόδρομη συνάρτηση y=f(x)
• Ο χρήστης επιλέγει μυστικό κωδικό (s) και πλήθος κωδικών (n)
• Για n=4 ο πρώτος κωδικός θα είναι P1=f(f(f(f(s))))
• Ο διακομιστής ξεκινάει με P0=f(P1) και αριθμό 1
• Πρώτη σύνδεση: ο διακομιστής στέλνει 1 και ο χρήστης P’1
• Ο διακομιστής ελέγχει αν f(P’1)=P0
• Αν ναι, αποθηκεύει το P1 =P’1 και αριθμό 2
• Ο χρήστης υπολογίζει εύκολα όλα τα Pi γιατί ξέρει το s
• Ο διακομιστής δεν μπορεί να υπολογίσει το επόμενο Pi
65
66
Φυσικά αντικείμενα (1 από 2)
• Πιστοποίηση με χρήση φυσικού αντικειμένου
– Στα ATM έχουμε αντικείμενο (κάρτα) και κωδικό (PIN)
– Οι απλούστερες κάρτες έχουν μία μαγνητική λωρίδα
• Οικονομικές, αλλά διαβάζονται και αντιγράφονται εύκολα
– Οι πιο σύνθετες κάρτες περιέχουν τσιπ μνήμης
• Η αποθηκευμένη τιμή αλλάζει από τη συσκευή ανάγνωσης
• Παράδειγμα: τηλεκάρτες με αποθηκευμένο χρόνο ομιλίας
– Ακόμη πιο σύνθετες είναι οι έξυπνες κάρτες (smart cards)
• Tο τσιπ περιέχει επεξεργαστή (μπορεί να εκτελεί αλγόριθμους)
• Το τσιπ περιέχει μνήμη (μπορεί να αποθηκεύει και χρήματα)
67
69
Βιομετρία (2 από 3)
71
Εσωτερικές επιθέσεις
Λογικές βόμβες
• Επιθέσεις από χρήστες του συστήματος
– Η πιστοποίηση ταυτότητας κρατάει τους τρίτους εκτός
– Πολλές επιθέσεις όμως ξεκινάνε από μέσα
• Λογικές βόμβες (logic bombs)
– Κώδικας που κρύβεται από προγραμματιστή
– Όσο δουλεύει στην εταιρεία δεν γίνεται τίποτα
– Όταν φύγει η βόμβα «εκρήγνυται»
• Μπορεί να αλλοιώνει αρχεία ή προγράμματα
– Έτσι ο προγραμματιστής εκβιάζει την εταιρεία
73
Καταπακτές
74
Παραπλανητική σύνδεση
75
77
78
Υπερχείλιση μνήμης (2 από 3)
79
80
Συμβολοσειρές μορφοποίησης
• Παρόμοια ιδέα με υπερχείλιση μνήμης
– Η printf() μπορεί να αλλάξει τα ορίσματά της
• Ο κωδικός %n υπολογίζει πόσοι χαρακτήρες τυπώνονται
• Ο αριθμός τοποθετείται στο επόμενο όρισμα της printf
• Παράδειγμα: printf(“Hello %nworld\n”,&i);
– Έστω το εξής σενάριο
• Το πρόγραμμα διαβάζει μια συμβολοσειρά s
• Στη συνέχεια την τυπώνει με printf(s) αντί printf(“%s”,s);
• Ο εισβολέας περιλαμβάνει κωδικούς μορφοποίησης στην s
• Έτσι καταφέρνει να τροποποιήσει τη μνήμη
81
82
Επιστροφή στη libc (2 από 2)
83
Υπερχείλιση ακεραίων
• Όλοι οι τύποι αριθμών έχουν σταθερά μεγέθη
• Η C όμως δεν ελέγχει για υπερχειλίσεις
– Οι απρόσημοι αναδιπλώνονται από το μηδέν
– Οι προσημασμένοι μπορεί να αλλάξουν πρόσημο
• Ο εισβολέας μπορεί να προκαλέσει υπερχείλιση
– Παράδειγμα: ζητάμε ύψος και πλάτος εικόνας
– Ο εισβολέας προκαλεί υπερχείλιση ακεραίου
– Το πρόγραμμα δεσμεύει πολύ λίγη μνήμη
– Δυνατότητα επίθεσης υπερχείλισης προσωρινής μνήμης
84
Παρεμβολή κώδικα
85
Κλιμάκωση προνομίων
• Ο εισβολέας ξεγελάει το ΛΣ για να πάρει προνόμια
• Ο cron εκτελεί περιοδικές εργασίες για τους χρήστες
– Εκτελείται με δικαιώματα διαχειριστή
– Διαβάζει προγραμματισμένες εργασίες από κατάλογο
• Οι χρήστες δεν μπορούν να γράψουν στον κατάλογο
• Ο εκτελεί το πρόγραμμά του στον κατάλογο του cron
– Καταρρέει αφήνοντας την εικόνα της μνήμης του
– Η εικόνα γράφεται στον τρέχοντα κατάλογο
• Τελικά καταλήγει στον κατάλογο του cron
– Η εικόνα έχει τη μορφή εντολών cron
86
Κακόβουλο λογισμικό
88
Είδη κακόβουλου λογισμικού (2 από 2)
• Μπορεί να κάνει υποκλοπή ταυτότητας (identity theft)
– Συλλογή δεδομένων χρήστη με keylogger και αναζήτηση
– Ο εισβολέας μπορεί μετά να παραστήσει τον χρήστη
• Και πολλές άλλες παραλλαγές…
– Μεταφορά χρημάτων από το λογαριασμό του χρήστη
– Βιομηχανική κατασκοπεία ή σαμποτάζ
• Γιατί υπάρχει τόσο πολύ κακόβουλο λογισμικό;
– Υπάρχουν λίγα λειτουργικά συστήματα – στόχοι
– Πολλά θυσιάζουν την ασφάλεια χάρη της ευχρηστίας
• Επιτρέπουν σύνδεση χωρίς ή με προφανείς κωδικούς
89
90
Δούρειοι ίπποι (2 από 2)
• Κοινές απάτες με δούρειους ίππους
– Μεταφορά χρημάτων από λογαριασμό χρήστη
• Σε δημοφιλή προγράμματα διαχείρισης χρημάτων
– Κλήση αριθμών πρόσθετης χρέωσης
• Κλείνει τον ήχο του μόντεμ για να μην γίνει αντιληπτό
• Απαιτεί συμφωνία με πάροχο (σε άλλη χώρα)
• Ο εισβολέας μοιράζεται τα έσοδα με τον πάροχο
91
Ιοί (1 από 9)
• Ιοί (viruses)
– Προγράμματα που αναπαράγονται μόνα τους
– Προσκολλώνται σε εκτελέσιμα προγράμματα
– Το μολυσμένο πρόγραμμα μολύνει τα άλλα
• Λειτουργία των ιών
– Αρχικά ο δημιουργός μολύνει ένα πρόγραμμα
– Μετά το πρόγραμμα διαδίδεται κάπως
– Όποτε εκτελείται πρώτα μολύνει και άλλα
– Μετά εκτελεί τον κύριο κώδικά του
92
Ιοί (2 από 9)
• Συνοδευτικοί ιοί (companion viruses)
– Δεν προστίθενται στο πρόγραμμα
– Εκτελούνται αντί αυτού και μετά το καλούν
– Παράδειγμα: το αρχείο prog.exe στο MS-DOS
• Ο ιός είναι στο αρχείο prog.com που καλεί το prog.exe
– Παράδειγμα: αλλαγή συντόμευσης στα Windows
• Η συντόμευση δείχνει στον ιό, που εκτελεί το πρόγραμμα
• Ιοί εκτελέσιμου προγράμματος
– Μολύνουν εκτελέσιμα προγράμματα
– Πιο συνηθισμένη κατηγορία ιών
93
Ιοί (3 από 9)
• Ιοί αντικατάστασης (overwriting viruses)
– Αντικαθιστούν πλήρως το μολυσμένο πρόγραμμα
– Στη συνέχεια βρίσκουν εκτελέσιμα προγράμματα
– Αντικαθιστούν τον κώδικά τους με τον δικό τους
– Συνήθως δεν μολύνουν αμέσως τα πάντα
• Μολύνουν ορισμένα μόνο εκτελέσιμα (πιθανοτικά)
• Ο ιός αντικατάστασης γίνεται γρήγορα αντιληπτός
– Ο χρήστης παρατηρεί ότι το πρόγραμμα δεν λειτουργεί
• Ο παρασιτικός ιός προσαρτάται στο πρόγραμμα
– Το πρόγραμμα λειτουργεί κανονικά παρά τον ιό
94
Ιοί (4 από 9)
Ιοί (5 από 9)
• Ιοί τομέα εκκίνησης (boot sector viruses)
– Γράφεται στον τομέα εκκίνησης του λειτουργικού
– Εκτελείται κατά την εκκίνηση του συστήματος
• Τη στιγμή αυτή έχει τα προνόμια του υπερχρήστη
• Καταλαμβάνει διάνυσμα διακοπών
• Καλείται αυτόματα σε κάθε διακοπή
• Αφού κάνει τη δουλειά του εκκινεί και το λειτουργικό
96
Ιοί (6 από 9)
97
Ιοί (7 από 9)
• Ιοί οδηγών συσκευών (device driver viruses)
– Ο μολυσμένος οδηγός συσκευής είναι ο τέλειος ιός
• Φορτώνεται αυτόματα από το λειτουργικό σύστημα
• Εκτελείται σε κατάσταση πυρήνα με ενισχυμένα προνόμια
• Μακροϊοί ή ιοί μακροεντολών (macro viruses)
– Πολλά προγράμματα επιτρέπουν τις μακροεντολές
• Ο ιός μπορεί να προσαρτηθεί στη μακροεντολή Open File
• Αρκεί να το στείλουμε με e-mail σε έναν εύπιστο χρήστη
– Τα περισσότερα προγράμματα δίνουν προειδοποίηση
• Δεν ξέρουμε όμως αν οι μακροεντολές είναι κακόβουλες
98
Ιοί (8 από 9)
• Ιοί πηγαίου κώδικα (source code viruses)
– Μολύνουν πηγαίο κώδικα ενός προγράμματος
• Αρκεί εντολή #include και μία κλήση συνάρτησης
– Στη μεταγλώττιση ο ιός είναι ήδη εκεί
99
Ιοί (9 από 9)
• Πώς εξαπλώνονται οι ιοί;
– Συχνά από μολυσμένο δωρεάν πρόγραμμα
• Το πρόγραμμα διανέμεται μέσω ιστοσελίδων
• Όταν εκτελεστεί μολύνει άλλα προγράμματα
• Μπορεί έτσι να μολυνθούν τομείς εκκίνησης μηχανών
– Εναλλακτικά, στέλνεται μέσω e-mail
• Με θέμα το οποίο να τραβάει την προσοχή
100
Σκουλήκια
• Το σκουλήκι του Internet (1988)
– Βασίζεται σε δύο κενά ασφάλειας στο BSD UNIX
• Αρχικά δοκίμαζε να εκτελεστεί με rsh (remote shell)
• Μετά δοκίμαζε ένα σφάλμα υπερχείλισης στο finger
• Τέλος δοκίμαζε ένα σφάλμα του sendmail για εκτέλεση e-mail
– Το σκουλήκι εκτελούσε τον βασικό του κώδικα
– Ο κώδικας αυτός κατέβαζε τον κυρίως κώδικα
– Μετά δοκίμαζε να σπάσει όσους κωδικούς μπορούσε
– Αν έβρισκε αντίγραφό του σε μια μηχανή δεν έκανε νέο
• Μία φορά στις εφτά όμως, έκανε και νέο αντίγραφο
101
102
Λογισμικό κατασκοπίας (2 από 3)
• Τρόποι εξάπλωσης
– Συνήθως κρύβεται σε χρήσιμα προγράμματα
– Μπορεί να κατεβαίνει αυτόματα από ιστοσελίδα
– Σπάνια οι χρήστες καταλαβαίνουν τι λογισμικό είναι
– Μερικές φορές βάζει το χρήστη να το αποδεχθεί!
• Τι κάνει το λογισμικό κατασκοπείας;
– Πειρατεία φυλλομετρητή (browser hijacking)
• Αλλαγή αρχικής σελίδας φυλλομετρητή
• Τροποποίηση σελιδοδεικτών φυλλομετρητή
• Προσθήκη νέων γραμμών εργαλείων στο φυλλομετρητή
103
104
Rootkit (1 από 3)
• Προσπαθεί να αποφύγει την αφαίρεσή του
– Συνήθως, κάποιας μορφής κακόβουλο λογισμικό
• Rootkit υλικολογισμικού (firmware)
– Κρύβεται στο BIOS σε μνήμη flash
• Rootkit υπερεπόπτη (hypervisor)
– Εκτελεί το κανονικό ΛΣ ως υπερεπόπτης
• Rootkit πυρήνα (kernel) – πιο συνηθισμένο
– Κρύβεται σε οδηγό συσκευής ή μέρος του πυρήνα
• Rootkit βιβλιοθήκης (library)
• Rootkit εφαρμογής (application)
105
Rootkit (2 από 3)
106
Rootkit (3 από 3)
• Τα rootkit πυρήνα εντοπίζονται με εκκίνηση από USB
– Σάρωση των αρχείων για περίεργες αλλαγές
– Μπορεί να συγκρίνονται τα αθροίσματα ελέγχου τους
• Απομάκρυνση του rootkit
– Είτε προσεκτική αναίρεση των αλλαγών
– Είτε επανεγκατάσταση του συστήματος
• Το rootkit της Sony BMG
– Εκτελούνταν αυτόματα από τα CD μουσικής της εταιρείας
– Μπλόκαρε προγράμματα ανάγνωσης και αντιγραφής
– Η εταιρεία αναγκάστηκε να πληρώσει αποζημιώσεις
107
Τρόποι άμυνας
Τείχη προστασίας (1 από 4)
• Ασφάλεια σε βάθος: πολλά επίπεδα ασφάλειας
– Για να εισβάλλει κάποιος θα πρέπει να τα περάσει όλα
• To Διαδίκτυο εκθέτει το σύστημα σε κινδύνους
– Εισερχόμενους: κράκερ, κακόβουλο λογισμικό
– Εξερχόμενους: διαρροή πληροφοριών και κωδικών
• Το τείχος προστασίας προσπαθεί να τους μειώσει
– Εφαρμογή πολιτικής ασφάλειας στην κίνηση
• Όλη η κίνηση από/προς το σύστημα ελέγχεται από το τείχος
• Μόνο η εγκεκριμένη κίνηση επιτρέπεται να περάσει
• Υλοποίηση με υλικό ή λογισμικό
109
110
Τείχη προστασίας (3 από 4)
• Μη καταστασιακό (stateless) τείχος προστασίας
– Ελέγχεται η κεφαλίδα των πακέτων και οι κανόνες
• Παράδειγμα: αποδοχή θύρας 80 για διεύθυνση 207.68.160.190
• Επιτρέπει επικοινωνία με τον διακομιστή ιστοσελίδων μόνο
– Ο τελευταίος κανόνας πάντα απαγορεύει οτιδήποτε άλλο
• Το τείχος προστασίας δεν λύνει όλα τα προβλήματα
– Δεν επιτρέπει τις μη εξουσιοδοτημένες υπηρεσίες
– Δεν λύνει προβλήματα με εξουσιοδοτημένες υπηρεσίες
• Παράδειγμα: σφάλμα υπερχείλισης σε διακομιστή
• Όσο λιγότερες θύρες ανοίγουμε, τόσο το καλύτερο
111
112
Προστασία από ιούς (1 από 5)
• Τεχνικές εναντίων των ιών
– Συνήθως μιλάμε για αντιβιοτικά (antivirus)
• Για ιούς, σκουλήκια και λογισμικό κατασκοπίας
– Για κάθε τεχνική αντιβιοτικών, υπάρχει αντίμετρο
• Συνεχής αγώνας με τα αντιβιοτικά
• Σαρωτές ιών (virus scanners)
– Οι κατασκευαστές μελετούν συνεχώς νέους ιούς
– Καταγράφουν σε μία βάση τα χαρακτηριστικά του ιού
– Αντιπαραβολή προγραμμάτων με τη βάση
• Πρέπει να ενημερώνονται τακτικά (μέσω δικτύου)
113
116
Προστασία από ιούς (5 από 5)
• Ελεγκτές συμπεριφοράς (behavioral checkers)
– Το αντιβιοτικό είναι συνεχώς στη μνήμη
– Αναχαιτίζει όλες τις κλήσεις συστήματος
– Παγιδεύει περίεργη συμπεριφορά
• Παράδειγμα: εγγραφή τομέα εκκίνησης ή flash
– Δεν είναι προφανές τι είναι κακό και τι όχι
• Έγκυρη συμπεριφορά μπορεί να φαίνεται ύποπτη
• Εγκατάσταση νέας έκδοσης προγράμματος
• Μακροεντολές χρήστη σε αρχείο
117
118
Αποφυγή ιών (2 από 2)
• Εγκαθιστούμε λογισμικό από αξιόπιστες πηγές
• Χρησιμοποιούμε και ενημερώνουμε το αντιβιοτικό
• Δεν ανοίγουμε αρχεία με ενεργό περιεχόμενο
– Απενεργοποιούμε μακροεντολές
• Παίρνουμε συχνά αντίγραφα ασφαλείας
– Κρατάμε περισσότερα από ένα
• Αλλιώς μπορεί να είναι μολυσμένο και το αντίγραφο
• Δεν εκτελούμε λογισμικό από άγνωστες πηγές
– Κλασική μέθοδος διανομής ιών
119
Υπογραφή κώδικα
120
Φυλάκιση
121
122
Ανίχνευση εισβολής (2 από 3)
123
125
• Αμμοπαγίδα (sandbox)
– Περιορισμός προγράμματος στη μνήμη
• Όλες οι διευθύνσεις πρέπει να έχουν το ίδιο πρόθεμα
– Χρήση συγκεκριμένων περιοχών διευθύνσεων
• Εκτέλεση κώδικα σε αμμοπαγίδα κώδικα
• Προσπέλαση δεδομένων σε αμμοπαγίδα δεδομένων
– Ελεγκτής αναφορών για κλήσεις συστήματος
• Αλλαγή κλήσεων έτσι ώστε να δείχνουν στον ελεγκτή
• Αρχείο διάρθρωσης για το τι επιτρέπεται να κληθεί
126
Ενθυλάκωση κινητού κώδικα (3 από 5)
127
• Αμμοπαγίδα (sandbox)
– Ο κώδικας ελέγχεται εν μέρει στατικά
• Οι απόλυτες διευθύνσεις πρέπει να είναι έγκυρες
– Ορισμένα σημεία πρέπει να ελέγχονται δυναμικά
• Εντολές με σχετικές διευθύνσεις (με βάση τον PC)
– Προσθήκη κώδικα ελέγχου πριν κάθε αναφορά
• Αντιγραφή διεύθυνσης σε καταχωρητή ελέγχου 1
• Απομόνωση του προθέματος με ολίσθηση
• Σύγκριση με πρόθεμα στον καταχωρητή ελέγχου 2
• Αν δεν ταιριάζει, παγίδευση της αναφοράς
128
Ενθυλάκωση κινητού κώδικα (5 από 5)
• Διερμηνεία (interpretation)
– Οι εντολές ελέγχονται κατά τη διερμηνεία τους
• Αυτός είναι ο τρόπος που δουλεύει κανονικά η Java
– Οι έμπιστες εφαρμογές εκτελούνται ελεύθερα
– Οι μη έμπιστες βρίσκονται σε αμμοπαγίδα
129
130
Ασφάλεια στην Java (2 από 3)
• Οι εφαρμογές επαληθεύονται πριν εκτελεστούν
– Έλεγχος του ενδιάμεσου κώδικα (bytecode verifier)
– Δεν πρέπει να φτιάχνουν δείκτες
– Δεν πρέπει να βλέπουν ιδιωτικά μέλη κλάσεων
– Δεν πρέπει να χρησιμοποιούν τύπους λανθασμένα
– Δεν πρέπει να υπερχειλίζουν/υποχειλίζουν τη στοίβα
– Δεν πρέπει να κάνουν τυχαίες μετατροπές τύπων
• Οι κλήσεις συστήματος είναι ειδική περίπτωση
131
132
Ενότητα # 8: Το ΛΣ Linux
Σκοποί ενότητας
• Κατανόηση της ιστορικής εξέλιξης που
οδήγησε από το UNIX στο Linux
• Εισαγωγή στη βασική δομή και σχεδίαση του
Linux
• Κατανόηση του τρόπου με τον οποίο οι
γενικές αρχές ΛΣ εφαρμόζονται στο Linux
στους τομείς των διεργασιών, διαχείρισης
μνήμης, εισόδου / εξόδου, συστήματος
αρχείων και ασφάλειας
4
Περιεχόμενα ενότητας
• Ιστορία UNIX/Linux
• Γενικά για το Linux
• Διεργασίες στο Linux
• Διαχείριση μνήμης στο Linux
• Είσοδος / έξοδος στο Linux
• Σύστημα αρχείων στο Linux
• Ασφάλεια στο Linux
5
Ιστορία UNIX/Linux
Εισαγωγή
• Γιατί να μελετήσουμε το Linux;
– Πιο δημοφιλής παραλλαγή του UNIX
• Κινητά, υπολογιστές, διακομιστές
– Υπάρχουν πολλές άλλες παραλλαγές
• AIX, Free/Net/OpenBSD, HP-UX, SCO UNIX, Solaris
• Κοινός βασικός σχεδιασμός
• Κοινό βασικό σύνολο κλήσεων συστήματος
• Κάθε σύστημα έχει διαφοροποιήσεις
• Σε μεγάλο βαθμό, όλα είναι UNIX
UNICS
• Η προϊστορία του UNIX
– CTSS (MIT): πρωτοπόρο σύστημα χρονομερισμού
– MIT, Bell Labs και GE σχεδίασαν το MULTICS
• Πολύ φιλόδοξο πρόγραμμα για χρονομερισμό
– Τα Bell Labs αποσύρθηκαν από το MULTICS
• Η GE αποσύρθηκε από τους υπολογιστές!
– UNICS: απλή έκδοση του MULTICS για PDP-7
• Για να εκτελεί προγράμματα του MULTICS
• Τελικά το όνομα κατέληξε να είναι UNIX
8
PDP-11 UNIX
• Σύντομα το UNIX μεταφέρθηκε στα PDP-11
– Διέθεταν υλικό προστασίας μνήμης και αρκετή μνήμη
– Ήταν όμως 16 bit: 64 KB πρόγραμμα + 64 KB δεδομένα
• Η μεταφορά οδήγησε στην επινόηση και της C
– Η συγγραφή του ΛΣ σε assembly ήταν χρονοβόρα
– Η C σχεδιάστηκε ειδικά για αυτή τη δουλειά
– Το UNIX ξαναγράφτηκε σε C
• Το UNIX έγινε δημοφιλές αν και δεν ήταν προϊόν
– Η AT&T δεν μπορούσε να μπει στην αγορά
– Έδινε άδειες (με πηγαίο κώδικα) σχεδόν δωρεάν
10
Φορητό UNIX (2 από 2)
• Φορητός μεταγλωττιστής της C
– Δημιουργήθηκε παράλληλα με το φορητό UNIX
– Παρήγαγε κώδικα για διάφορες μηχανές
• Μικρές αλλαγές για χρήση σε νέα μηχανή
– Επέτρεπε τη μεταγλώττιση του UNIX
• Συνήθως μεταγλωττιστής και UNIX πήγαιναν μαζί
• Τελικά η AT&T άρχισε να πουλάει UNIX
– Αρχικά το System III
– Στη συνέχεια το System V Release 2, 3, 4
11
Berkeley UNIX
• Το Berkeley ξεκίνησε από το Version 7 σε PDP-11
• Πολλές προσθήκες με χρηματοδότηση DARPA
– Το αποτέλεσμα ήταν το BSD UNIX
– Η DARPA ενθάρρυνε τη χρήση του στο ARPAnet
• Η έκδοση 4BSD ήταν ιδιαίτερα σημαντική
– Έτρεχε στα VAX που ήταν εξαιρετικά δημοφιλή
– Εικονική μνήμη με σελιδοποίηση
– Γρήγορο σύστημα αρχείων με μεγάλα ονόματα
– Υλοποίηση TCP/IP και υποδοχών (sockets)
– Πολλές νέες εφαρμογές (csh, vi)
12
Πρότυπο UNIX (1 από 2)
• Πολλές εταιρείες βασίστηκαν στο BSD
– SunOS και Ultrix ήταν εξελιγμένα BSD
– Solaris και OSF/1 βασίζονταν στο System V
• Στα τέλη του ‘80 υπήρχαν πολλά UNIX
– Παραλλαγές των System V και BSD
– Το καθένα με ελαφρά διαφορετικό λογισμικό
• Απαιτούσαν νέα μεταγλώττιση λογισμικού
– Το MS-DOS είχε συμβατότητα σε δυαδικό επίπεδο
– Οι αρχικές προσπάθειες τυποποίησης απέτυχαν
13
14
MINIX (1 από 2)
• Το UNIX δεν ήταν κατάλληλο για μελέτη
– Οι εταιρείες δεν έδιναν άδειες πηγαίου κώδικα
– Αδύνατον να κατανοηθεί τόσο μεγάλο σύστημα
• MINIX: επιστροφή στο Version 7 UNIX
– 11800 γραμμές C και 800 γραμμές assembly
– Διαθέσιμο σε 80386 με πηγαίο κώδικα
– Ίδια διεπαφή με Version 7 (κλήσεις συστήματος)
– Υλοποίηση με μικροπυρήνα
– Κατάλληλο για εκπαιδευτική χρήση
• Ανοιχτό λογισμικό, πλήρης περιγραφή του σε βιβλίο
15
MINIX (2 από 2)
• Το MINIX 2.0 ήταν συλλογική προσπάθεια
– Το MINIX 1.0 ήταν έργο του A. Tanenbaum
– Πολλοί είχαν συνεισφέρει κώδικα
• Το MINIX 3.0 ήταν πολύ πιο αξιόπιστο
– Καθαρή υλοποίηση μικροπυρήνα
– Οι οδηγοί συσκευών έφυγαν από τον πυρήνα
• Το MINIX όμως δεν ήταν για όλους
– Δεν είχε την απόδοση του μονολιθικού πυρήνα
– Ήταν (επίτηδες) απλό, χωρίς πολλά χαρακτηριστικά
16
Linux (1 από 2)
• Νέα υλοποίηση ενός συστήματος UNIX
– Βασίστηκε στο MINIX αλλά με μονολιθικό πυρήνα
– Ο στόχος ήταν ένα ΛΣ παραγωγής
• Υψηλές επιδόσεις και κάλυψη πολλών μηχανών
• Το Linux αναπτύχθηκε πολύ γρήγορα
– Προσθήκη νέων δυνατοτήτων και συσκευών
– Εκδόσεις για πολλές διαφορετικές μηχανές
– Μεταφέρθηκαν πολλά προγράμματα για UNIX
– Γράφτηκαν όμως και νέα (π.χ. KDE και GNOME)
17
Linux (2 από 2)
• Το Linux διανέμεται με την άδεια GPL
– Μπορεί κανείς να διανείμει τροποποιήσεις
– Πρέπει όμως να παρέχει τον πηγαίο κώδικα
• Δωρεάν (και ελεύθερο) λογισμικό
– Στα Αγγλικά το free έχει δύο έννοιες
• Το Linux είναι free και με τις δύο
– Μπορούν να φτιαχτούν εμπορικά προϊόντα
– Υπάρχουν και δωρεάν διανομές
– Έσοδα από υποστήριξη εταιρειών
18
Linux ή xBSD;
• Η ανάπτυξη του Berkeley UNIX σταμάτησε το 1992
– Το 4.4BSD είχε άδεια ανοιχτού λογισμικού (όχι GPL)
– Οι σχεδιαστές του BSD ίδρυσαν την BSDI για υποστήριξη
– Δεν είχε καθόλου κώδικα της AT&T, αλλά μηνύθηκε
• Μέχρι να γίνει συμβιβασμός, το BSD ήταν εκτός αγοράς
• Το Linux κάλυψε το κενό του BSD
– Γράφτηκε από το μηδέν χωρίς νομικά προβλήματα
– Ήταν σύστημα παραγωγής σε αντίθεση με το MINIX
• Τι θα γινόταν αν το 1992 το BSD ήταν διαθέσιμο;
– Θα μπορούσε να είναι παντού (αντί μόνο στο Mac OSX)
19
21
22
Διασυνδέσεις του Linux (1 από 2)
23
24
Το κέλυφος (1 από 3)
• Το πρώτο κέλυφος του UNIX λεγόταν sh
– Λέγεται και Bourne shell για να διακριθεί από τα άλλα
• Το κέλυφος του Linux λέγεται bash (Bourne again shell)
• Εμφανίζει προτροπή (prompt) και περιμένει είσοδο
• Ερμηνεύει την πρώτη λέξη ως όνομα εντολής
– Οι επόμενες ερμηνεύονται ως παράμετροι
• Συνήθως με τον χαρακτήρα – δίνονται σημαίες
• Χρήση χαρακτήρων μπαλαντέρ *, ?, [-]
– Παράδειγμα: ls *.c ή ls [ape]*
25
Το κέλυφος (2 από 3)
• Κάθε πρόγραμμα ξεκινά με τρία ανοιχτά αρχεία
– Καθιερωμένη είσοδος, έξοδος και έξοδος σφαλμάτων
– Αρχικά αντιστοιχούν σε πληκτρολόγιο και οθόνη
– Τα φίλτρα (filters) διαβάζουν και γράφουν από εκεί
• Ανακατεύθυνση των αρχείων με < και >
– Παράδειγμα: sort <in >out
– Τα σφάλματα πηγαίνουν στην οθόνη
• Αγωγοί εντολών (pipelines) με |
– Παράδειγμα: sort <in | head -30
– Δεν χρειάζεται χρήση ενδιάμεσων αρχείων
26
Το κέλυφος (3 από 3)
• Εκτέλεση στο παρασκήνιο με &
– Παράδειγμα: wc –l <a >b &
– Δίνει αμέσως τον έλεγχο πίσω στο χρήστη
• Ο χρήστης μπορεί να χειριστεί το πρόγραμμα
• Σενάρια κελύφους (shell scripts)
– Αρχεία με εντολές κελύφους προς εκτέλεση
• Εκτελούνται από νέο κέλυφος
– Μπορούν να παίρνουν παραμέτρους
– Διαθέτουν μεταβλητές και δομές ελέγχου
27
28
Βοηθητικά προγράμματα (2 από 2)
31
34
Θεμελιώδεις έννοιες διεργασιών (2 από 5)
35
36
Θεμελιώδεις έννοιες διεργασιών (4 από 5)
37
38
Κλήσεις διεργασιών (1 από 4)
41
42
Διεργασίες και νήματα (1 από 9)
• Διεργασία: τμήμα χρήστη και τμήμα πυρήνα
– Τμήμα χρήστη: εκτελεί το πρόγραμμα του χρήστη
– Τμήμα πυρήνα: χρήση σε κλήσεις συστήματος
• Στις κλήσεις συστήματος εκτελείται κώδικας πυρήνα
• Ανεξάρτητη στοίβα και μετρητής προγράμματος
• Επιτρέπει διακοπή της διεργασίας μέσα στον πυρήνα
• Στο Linux νήματα=διεργασίες=εργασίες (tasks)
– Κάθε εργασία αντιστοιχεί σε μία δομή εργασίας
– Μια πολυνηματική διεργασία έχει πολλές δομές
– Και ο πυρήνας είναι πολυνηματικός
43
44
Διεργασίες και νήματα (3 από 9)
• Περιεχόμενα δομής εργασίας στο Linux
– Κατάσταση κλήσης συστήματος (τρέχουσα κλήση)
– Πίνακας περιγραφέων αρχείων (ανοιχτά αρχεία)
– Λογιστικές πληροφορίες
– Στοίβα πυρήνα (για το τμήμα πυρήνα)
– Διάφορα (κατάσταση, συμβάν που αναμένεται, PID)
• Μέρος της δομής μπορεί να πηγαίνει στο δίσκο
– Τα σήματα πρέπει να είναι συνέχεια στη μνήμη
– Οι περιγραφείς αρχείων μπορούν να είναι στο δίσκο
45
46
Διεργασίες και νήματα (5 από 9)
• Υλοποίηση κλήσης fork (δεύτερο μέρος)
– Ορισμός τμήματος κώδικα ως κοινόχρηστου
– Δημιουργία πίνακα σελίδων για τμήμα δεδομένων
– Σημείωση σελίδων δεδομένων ανάγνωσης μόνο
• Ανεξάρτητα από το αν είναι όντως ανάγνωσης μόνο
– Όταν γραφτούν, δημιουργείται παγίδα
• Η σελίδα αντιγράφεται σε νέο πλαίσιο
• Οι σελίδες σημειώνονται ως ανάγνωσης και εγγραφής
• Ουσιαστικά αντιγράφονται μόνο αν τροποποιηθούν
47
49
50
Διεργασίες και νήματα (9 από 9)
• Οι δομές εργασιών δείχνουν σε άλλες δομές
– Για μνήμη, αρχεία, σήματα…
– Έτσι έχουμε τόσα κοινά στοιχεία στην clone
– Χάνουμε τη συμβατότητα με το κλασικό UNIX
• Ταυτότητα εργασίας (TID) - διεργασίας (PID)
– Κάθε εργασία έχει διαφορετικό (μοναδικό) TID
– Μπορεί να έχει ίδιο PID με άλλη για συμβατότητα
• Όλα τα νήματα μίας διεργασίας έχουν το ίδιο PID
51
Χρονοπρογραμματισμός (1 από 6)
• Xρονοπρογραμματισμός σε επίπεδο εργασιών
– Πραγματικού χρόνου FIFO
– Πραγματικού χρόνου εκ περιτροπής
– (απλού) Χρονομερισμού
• Οι πραγματικού χρόνου FIFO εκτελούνται πρώτα
– Προεκτόπιση μόνο από εργασίες FIFO
• Μετά τα πραγματικού χρόνου εκ περιτροπής
– Το κάθε ένα εκτελείται για ένα κβάντο
– Τα κβάντα είναι πλήθη χτύπων ρολογιού (jiffies)
52
Χρονοπρογραμματισμός (2 από 6)
• Δεν είναι βέβαια πραγματικού χρόνου
– Απλά έχουν υψηλότερη προτεραιότητα!
– Επίπεδα από 0 (υψηλότερο) έως 99 (χαμηλότερο)
• Τέλος εκτελούνται οι άλλες εργασίες
– Έχουν προτεραιότητα 100 έως 139
– Η βασική προτεραιότητα είναι 20 (δηλαδή 120)
– Οι χρήστες μπορούν να προσθέσουν 1-19
• Με την κλήση nice
– Ο υπερχρήστης μπορεί να αφαιρέσει 1-20
53
Χρονοπρογραμματισμός (3 από 6)
54
Χρονοπρογραμματισμός (4 από 6)
• Χρήση της ουράς εκτέλεσης
– Επιλογή εργασιών από τον ενεργό πίνακα
– Επιλέγεται αυτή με την υψηλότερη προτεραιότητα
– Αν λήξει το κβάντο της πηγαίνει στον ληγμένο πίνακα
• Αν μπλοκαριστεί, παραμένει στον ενεργό
• Μπορεί να εκτελεστεί για το υπόλοιπο του κβάντου της
– Όταν αδειάσει, ο ενεργός αλλάζει με τον ληγμένο
– Έτσι όλες οι διεργασίες τελικά θα εκτελεστούν
55
Χρονοπρογραμματισμός (5 από 6)
• Καθορισμός προτεραιοτήτων
– Μικρότερο κβάντο σε χαμηλότερες προτεραιότητες
– Κάθε εργασία έχει μία μεταβλητή sleep_avg (+/-5)
• Αύξηση όταν εκτελείται, μείωση όταν τελειώνει το κβάντο
– Αλλαγή προτεραιότητας όταν αλλάζει πίνακα
• Χρονοπρογραμματισμός συγγένειας (affinity)
– Προσπαθούμε η εργασία να μην αλλάζει επεξεργαστή
• Αυτός είναι ο λόγος που έχουμε πολλές ουρές εκτέλεσης
• Περιοδικά κάνουμε και εξισορρόπηση φόρτου
56
Χρονοπρογραμματισμός (6 από 6)
• Ουρές αναμονής (wait queues)
– Μία ανά συμβάν όπου αναμένουν εργασίες
– Εκεί βρίσκονται οι μπλοκαρισμένες εργασίες
– Χρήση spinlock για παράλληλη πρόσβαση
• Από πυρήνα και κώδικα διακοπών
• Παλιότερα μεγάλο κλείδωμα πυρήνα (BKL)
– Η πολυεπεξεργασία απαιτεί παραλληλισμό
– Οι δομές προστατεύθηκαν με spinlocks
57
Εκκίνηση (1 από 6)
• Εκκίνηση του πυρήνα
– Το BIOS εκτελεί το διαγνωστικό εκκίνησης (POST)
– Εντοπίζονται και διευθετούνται οι βασικές συσκευές
– Διαβάζεται η κύρια εγγραφή εκκίνησης (MBR)
– Η MBR διαβάζει το boot από συσκευή εκκίνησης
• Παράδειγμα: GRUB (grand unified bootloader)
– Το boot διαβάζει τον βασικό κατάλογο
– Στη συνέχεια διαβάζει τον πυρήνα
– Τέλος μεταβιβάζει τον έλεγχο στον πυρήνα
58
Εκκίνηση (2 από 6)
• Πρώτο μέρος εκκίνησης (σε assembly)
– Εξαρτάται πολύ από τον επεξεργαστή
– Δημιουργία στοίβας πυρήνα
– Αναγνώριση επεξεργαστή
– Υπολογισμός μεγέθους μνήμης
– Ενεργοποίηση MMU
– Απενεργοποίηση διακοπών
– Κλήση της συνάρτησης main (στη C)
59
Εκκίνηση (3 από 6)
• Δεύτερο μέρος εκκίνησης (σε C)
– Δέσμευση χώρου για μηνύματα εκκίνησης
– Δέσμευση χώρου για δομές πυρήνα
– Διερεύνηση και διευθέτηση συσκευών
– Στατική φόρτωση οδηγών
• Σε μεγάλες και ασφαλείς εγκαταστάσεις
– Δυναμική φόρτωση οδηγών
• Σε απλούστερες εγκαταστάσεις
– Δημιουργία διεργασίας 0 και εκτέλεσή της
60
Εκκίνηση (4 από 6)
• Διεργασία 0
– Ρύθμιση ρολογιού πραγματικού χρόνου
– Ανάρτηση βασικού συστήματος αρχείων
– Δημιουργία διεργασίας 1 (init) και 2 (page daemon)
• Διεργασία 1 (init)
– Μονοχρηστικό: θυγατρική για κέλυφος
– Πολυχρηστικό: θυγατρική για διάρθρωση
• Εκτελεί το σενάριο /etc/rc για αρχικοποίηση
• Ξεκινάει δαίμονες, αναρτά συστήματα αρχείων, κλπ
61
Εκκίνηση (5 από 6)
• Διεργασία 1 (init)
– Διαβάζεται το /etc/ttys (στοιχεία τερματικών)
– Για κάθε τερματικό εκτελείται η getty
– Η getty ρυθμίζει το τερματικό και εμφανίζει login:
– Όταν δώσουμε όνομα χρήστη εκτελείται η /bin/login
– Η login διαβάζει και ελέγχει τον κωδικό πρόσβασης
– Αν είναι σωστός, εκτελείται το κέλυφος του χρήστη
– Το κέλυφος κάνει τη δική του αρχικοποίηση
– Τελικά εμφανίζει το σύμβολο προτροπής στο χρήστη
62
Εκκίνηση (6 από 6)
63
65
66
Θεμελιώδεις έννοιες μνήμης (3 από 5)
67
68
Θεμελιώδεις έννοιες μνήμης (5 από 5)
69
Κλήσεις μνήμης
70
Υλοποίηση μνήμης (1 από 10)
• Στις μηχανές 32 bit ο χώρος διευθύνσεων είναι 3 GB
– Το άνω 1 GB περιέχει πυρήνα και πίνακες σελίδων
– Ο χώρος διευθύνσεων δημιουργείται με την clone
• Αντικαθίσταται όταν καλείται η exec
• Το Linux διακρίνει τρεις ζώνες στη φυσική μνήμη
– ZONE_DMA: σελίδες κατάλληλες για DMA
– ZONE_NORMAL: κανονικές σελίδες
– ZONE_HIGHMEM: σελίδες στην υψηλή μνήμη
– Ανεξάρτητη διαχείριση κάθε ζώνης της μνήμης
– Παράδειγμα: με 1GB μνήμης η ZONE_DMA είναι 16 MB
71
72
Υλοποίηση μνήμης (3 από 10)
74
Υλοποίηση μνήμης (5 από 10)
• Η περισσότερη μνήμη κατανέμεται δυναμικά
– Σελίδες χρηστών και κρυφές μνήμες
– Κρυφή μνήμη σελίδων: πρόσφατα μπλοκ αρχείων
– Κρυφή μνήμη σελιδοποίησης: υποψήφιες για αφαίρεση
– Μία ενιαία κρυφή μνήμη για όλες τις σελίδες
• Η κρυφή μνήμη καταλαμβάνει όσο χώρο περισσεύει
• Δυναμική φόρτωση υπομονάδων
– Συνήθως οδηγοί συσκευών
– Απαιτούν συνεχόμενη μνήμη στον πυρήνα
75
77
78
Υλοποίηση μνήμης (9 από 10)
• Υλοποίηση αντιγραφής με την εγγραφή (copy on write)
– Μετά το fork οι διεργασίες δείχνουν στις ίδιες σελίδες
– Οι σελίδες σημειώνονται μόνο για ανάγνωση
– Οι περιοχές σημειώνονται για ανάγνωση/εγγραφή
– Σε απόπειρα εγγραφής ο πυρήνας αντιγράφει τη σελίδα
• H vm_area_struct δείχνει και στον χώρο στο δίσκο
– Ο εκτελέσιμος κώδικας δείχνει στο εκτελέσιμο αρχείο
– Τα χαρτογραφημένα αρχεία δείχνουν στο αρχείο
– Στοίβα και σωρός δείχνουν στην περιοχή ανταλλαγής
79
80
Σελιδοποίηση (1 από 6)
• Διαχείριση μνήμης μόνο σε επίπεδο σελίδων
– Οι σελίδες προσκομίζονται όταν χρειάζονται
– Δεν γίνεται προκαταβολική προσκόμιση σελίδων
– Αρκεί η δομή χρήστη και ο πίνακας σελίδων στη μνήμη
• Υλοποίηση: πυρήνας και δαίμονας σελιδοποίησης
– Η διεργασία 2 είναι ο page daemon
• Εναλλαγή σελίδων στο δίσκο
– Κώδικας και χαρτογραφημένα αρχεία: αντίστοιχα αρχεία
– Δεδομένα: περιοχή εναλλαγής (swap area)
• Διαμέρισμα δίσκου ή/και αρχεία σταθερού μήκους
81
Σελιδοποίηση (2 από 6)
• Το διαμέρισμα δίσκου είναι πιο αποδοτικό
– Δεν χρειάζεται μετάφραση διευθύνσεων
– Χρησιμοποιεί οποιοδήποτε μέγεθος μπλοκ
– Οι σελίδες είναι συνεχόμενες στο δίσκο
– Έχει υψηλότερη προτεραιότητα από τα αρχεία
• Κατανομή σελίδων στην περιοχή εναλλαγής
– Χρήση χάρτη bit για τις ελεύθερες σελίδες
– Όποτε χρειάζεται εναλλαγή, δεσμεύεται σελίδα
– Η σελίδα γράφεται στο δίσκο
– Ενημερώνεται ο πίνακας σελίδων
82
Σελιδοποίηση (3 από 6)
• Αλγόριθμος επαναδιεκδίκησης πλαισίων (PFRA)
– Προσπαθεί να διατηρεί μερικές σελίδες ελεύθερες
• Όταν χρειαστούν σελίδες θα είναι άμεσα διαθέσιμες
– Καλείται περιοδικά για να απελευθερώσει σελίδες
• Οι σελίδες διακρίνονται σε τέσσερις κατηγορίες
– Μη διεκδικήσιμες: δεν αφαιρούνται από τη μνήμη
• Δεσμευμένες και κλειδωμένες, μέρη του πυρήνα
– Εναλλάξιμες: πρέπει να γραφτούν σε περιοχή εναλλαγής
– Συγχρονίσιμες: πρέπει να γραφτούν σε αρχείο
– Απορρίψιμες: μπορούν να διατεθούν αμέσως
83
Σελιδοποίηση (4 από 6)
• Η init ξεκινάει μία kswapd ανά κόμβο μνήμης
– Ξυπνάει περιοδικά ή όταν έχουμε λίγες σελίδες
– Ο έλεγχος μνήμης γίνεται ανά ζώνη
– Αν υπάρχει διαθέσιμη μνήμη μπλοκάρεται ξανά
– Αν η μνήμη πέσει κάτω από όριο, αρχίζει ο PFRA
– Ο PFRA προσπαθεί να ελευθερώσει 32 σελίδες
• Το πλήθος μπορεί να ρυθμιστεί
– Προσπάθεια να αποφύγουμε την υπερβολική Ε/Ε
84
Σελιδοποίηση (5 από 6)
• Ο PFRA ξεκινάει με τις πιο εύκολες σελίδες
– Απορρίψιμες και χωρίς αναφορά
– Με εφεδρική αποθήκευση χωρίς πρόσφατες αναφορές
– Κοινόχρηστες σελίδες χωρίς πρόσφατες αναφορές
• Αν ελευθερωθούν αλλάζουν πολλοί πίνακες σελίδων
– Σελίδες που πρέπει να γραφτούν σε περιοχή εναλλαγής
– Οι άκυρες, απούσες, κλειδωμένες παραλείπονται
• Ο PFRA χρησιμοποιεί έναν αλγόριθμο τύπου ρολογιού
– Προσπαθεί ανάλογα με την κατάσταση επείγοντος
– Οι σελίδες είναι σε ενεργές και ανενεργές λίστες
85
Σελιδοποίηση (6 από 6)
86
Είσοδος / έξοδος στο Linux
88
Θεμελιώδεις έννοιες Ε/Ε (2 από 2)
• Ειδικά αρχεία μπλοκ (block special files)
– Αποτελούνται από ακολουθία αριθμημένων μπλοκ
– Διαβάζουμε/γράφουμε κάθε μπλοκ ξεχωριστά
• Ειδικά αρχεία χαρακτήρων (character special files)
– Παράγουν ή καταναλώνουν ρεύματα χαρακτήρων
– Δεν μπορούμε να αναζητήσουμε τυχαίες θέσεις
• Έλεγχος ειδικών αρχείων χαρακτήρων
– Το τερματικό αναγνωρίζει ειδικούς χαρακτήρες
– Ο χρήστης μπορεί να επιλέξει τους δικούς του
• Χρήση ειδικής κλήσης συστήματος
89
Δικτύωση (1 από 3)
90
Δικτύωση (2 από 3)
• Αξιόπιστο συνδεσμοστρεφές ρεύμα byte
– Παρόμοιο με αγωγούς αλλά μεταξύ μηχανών
– Συνήθως βασίζεται στο TCP
• Αξιόπιστο συνδεσμοστρεφές ρεύμα πακέτων
– Παρόμοια με ρεύμα byte αλλά με όρια πακέτων
– Μπορεί να υλοποιηθεί με το (πειραματικό) SCTP
• Αναξιόπιστη μετάδοση πακέτων
– Απευθείας μετάδοση πακέτων στο δίκτυο
– Η εφαρμογή ασχολείται με την αξιοπιστία
– Συνήθως βασίζεται σε UDP
91
Δικτύωση (3 από 3)
• Κάθε υποδοχή πρέπει να έχει μία διεύθυνση
– Συνήθως: τομέας διευθύνσεων Διαδικτύου
– Αριθμοί 32 bit για τα άκρα (διευθύνσεις IP)
– Αριθμοί 16 bit για την εφαρμογή (θύρες TCP ή UDP)
– Απόδοση διεύθυνση με την κλήση bind
– Αναμονή για αίτηση με listen
– Αίτηση σύνδεσης με connect
– Αποδοχή αίτησης με accept
– Τερματισμός σύνδεσης με close
92
Κλήσεις Ε/Ε
93
94
Υλοποίηση Ε/Ε (2 από 5)
• Οι οδηγοί αποτελούνται από δύο τμήματα
– Και τα δύο εκτελούνται σε κατάσταση πυρήνα
– Το άνω μέρος εκτελείται για λογαριασμό του καλούντα
– Το κάτω μέρος αλληλεπιδρά με τη συσκευή
• Διασύνδεση οδηγού-πυρήνα
– Ο πυρήνας διαθέτει σύνολο κλήσεων στις συσκευές
– Κατανομή μνήμης, έλεγχος DMA, χρονόμετρα κλπ
• Υποσύστημα χειρισμού ειδικών αρχείων μπλοκ
– Αξιοποιεί κρυφή μνήμη (cache) για μπλοκ και σελίδες
– Πάνω τους βρίσκεται το γενικό (generic) επίπεδο μπλοκ
95
96
Υλοποίηση Ε/Ε (4 από 5)
• Υποσύστημα χειρισμού ειδικών αρχείων μπλοκ
– Και οι εγγραφές αποθηκεύονται στην κρυφή μνήμη
– Ο δαίμονας pdflush γράφει μπλοκ περιοδικά στο δίσκο
– Χρονοπρογραμματιστής ελαχιστοποίησης αναζητήσεων
• Στη βασική του μορφή είναι αλγόριθμος ανελκυστήρα
• Αρχικά ταξινομούνται οι αιτήσεις με τη σειρά
• Μετά συγχωνεύονται οι γειτονικές αιτήσεις
– Χρήση δύο πρόσθετων λιστών για αποφυγή λιμοκτονίας
• Αναγνώσεις και εγγραφές ταξινομημένες κατά προθεσμία
• Μετά από κάποιο όριο καθυστέρησης, εξυπηρετούνται πρώτες
97
98
Υπομονάδες
• Στο UNIX οι οδηγοί συσκευών συνδέονται στατικά
• Το Linux κάνει (και) για προσωπικούς υπολογιστές
• Φορτώσιμες υπομονάδες (loadable modules)
– Κώδικας που φορτώνεται κατά την εκτέλεση στον πυρήνα
• Οδηγοί συσκευών, συστήματα αρχείων, πρωτόκολλα δικτύου
– Κατά τη φόρτωση οι υπομονάδες επανατοποθετούνται
– Ελέγχεται η διαθεσιμότητα των πόρων
– Ενεργοποιούνται τα κατάλληλα διανύσματα διακοπών
– Ενημερώνεται ο κατάλληλος πίνακας οδηγών
– Τέλος ο οδηγός προετοιμάζει τη συσκευή
99
101
102
Θεμελιώδεις έννοιες αρχείων (3 από 6)
103
104
Θεμελιώδεις έννοιες αρχείων (5 από 6)
105
• Κλείδωμα (locking)
– Καθορίζεται το αρχείο, το πρώτο byte και το πλήθος byte
– Κοινόχρηστα κλειδώματα και αποκλειστικά κλειδώματα
106
Κλήσεις αρχείων (1 από 5)
108
Κλήσεις αρχείων (3 από 5)
• Δημιουργία αγωγών (pipe)
– Οι αγωγοί μοιάζουν με προσωρινά αρχεία
– Επιστρέφονται δύο περιγραφείς
• Ένας κατάλληλος για εγγραφή στον αγωγό
• Ένας κατάλληλος για ανάγνωση από τον αγωγό
• Μεταδεδομένα αρχείων
– Για κάθε αρχείο το σύστημα καταγράφει πληροφορίες
– stat: διαβάζει πληροφορίες αρχείου με βάση το όνομα
– fstat: διαβάζει πληροφορίες ανοιχτού αρχείου (μέσω fd)
109
• Μεταδεδομένα αρχείων
– Πληροφορίες που επιστρέφουν οι stat/fstat
• Στοιχεία του αρχείου, προστασία
• Στοιχεία χρήστη / ομάδας, χρόνοι
110
Κλήσεις αρχείων (5 από 5)
111
113
114
Υλοποίηση αρχείων (4 από 13)
115
116
Υλοποίηση αρχείων (6 από 13)
• Δομή κόμβων i
– Περιέχουν επιπλέον δείκτες προς τα μπλοκ του αρχείου
– Πρόσθετα πεδία για καταλόγους και ειδικά αρχεία
• Ο πυρήνας διατηρεί έναν πίνακα ανοιχτών κόμβων i
• Υλοποίηση των πράξεων ανάγνωσης/εγγραφής
– Οι κλήσεις περιέχουν τον περιγραφέα του αρχείου
– Τι περιέχει ο πίνακας περιγραφέων της διεργασίας;
– Έστω ότι περιέχει έναν δείκτη στον πίνακα κόμβων i
• Αν ο δείκτης τρέχουσας θέσης περιέχεται στον πίνακα κόμβων i;
• Τότε δύο διεργασίες δεν μπορούν να διαβάζουν ανεξάρτητα
117
118
Υλοποίηση αρχείων (8 από 13)
• Πίνακας περιγραφής ανοιχτών αρχείων
– Ο πίνακας περιγραφέων δείχνει σε αυτόν
– Εκεί αποθηκεύεται ο δείκτης θέσης του αρχείου
– Ο πίνακας αυτός δείχνει στον πίνακα κόμβων i
– Έστω ότι δημιουργούμε τις p1 και p2 με fork
• Ο πίνακας περιγραφέων αντιγράφεται
• Δείχνουν στην ίδια θέση του πίνακα ανοικτών αρχείων
• Δύο τυχαίες διεργασίες δείχνουν διαφορετικές θέσεις
119
121
122
Υλοποίηση αρχείων (12 από 13)
• Συσκευή μπλοκ ημερολογίου (JBD)
– Η συσκευή JBD υποστηρίζει τρεις κύριες δομές
– Εγγραφή καταγραφής (log record)
• Mία λειτουργία που αλλάζει κάποιο μπλοκ στο δίσκο
– Χειριστήριο αδιαίρετης λειτουργίας (atomic op handle)
• Ομαδοποιεί μία σειρά σχετικών λειτουργιών
• Παράδειγμα: ένα write μπορεί να αλλάζει πολλά μπλοκ
– Συναλλαγή (transaction)
• Ομαδοποιεί πολλές αδιαίρετες λειτουργίες
• Όταν εκτελεστεί η συναλλαγή, διαγράφεται από τη JBD
123
125
126
Δικτυακή αποθήκευση (3 από 4)
• Πρωτόκολλο προσπέλασης
– Μηνύματα διαχείρισης καταλόγων και αρχείων
– Δεν υπάρχουν μηνύματα ανοίγματος / κλεισίματος
• Αντί για άνοιγμα αρχείου έχουμε μήνυμα lookup
• Επιστρέφει ένα χειριστήριο για το αρχείο
– Στα επόμενα μηνύματα ο πελάτης στέλνει το χειριστήριο
– Επιπλέον αναφέρει από πού θέλει να διαβάσει/γράψει
• Υλοποίηση του NFS
– Οι κόμβοι v του VFS δείχνουν σε κόμβους r του NFS
– Οι κόμβοι r περιέχουν χειριστήρια και δείκτες αρχείων
127
131
132
Θεμελιώδεις έννοιες ασφάλειας (4 από 4)
133
134
Κλήσεις ασφάλειας (2 από 2)
• Η chmod αλλάζει τα δικαιώματα προσπέλασης
• Κλήσεις ελέγχου πραγματικού/ενεργού UID/GID
• Η access ελέγχει αν επιτρέπεται η πρόσβαση
– Χρησιμοποιεί το πραγματικό UID/GID
• Η chown αλλάζει το UID και το GID ενός αρχείου
• Οι setuid/setgid θέτουν τα αντίστοιχα bit
135
Υλοποίηση ασφάλειας
• Όταν συνδέεται ένας χρήστης εκτελείται η login
– Της μεταβιβάζεται το όνομα του χρήστη από την getty
– Διαβάζει και κατακερματίζει τον κωδικό πρόσβασης
– Είναι UID/GID root οπότε διαβάζει το αρχείο κωδικών
– Αν ταιριάζει ο κωδικός, διαβάζει UID/GID/κέλυφος χρήστη
– Η login αλλάζει στα UID / GID του χρήστη με setuid/setgid
– Εκτελεί με exec το κέλυφος του χρήστη
• Έλεγχος κατά το άνοιγμα/δημιουργία αρχείων
– Ελέγχεται αν το UID / GID επιτρέπουν πρόσβαση
– Στη συνέχεια δεν γίνεται ξανά έλεγχος
136
Ενότητα # 9: Το ΛΣ Windows
Σκοποί ενότητας
• Κατανόηση της ιστορικής εξέλιξης των Windows
και της διαφοροποίησής τους από το UNIX
• Εισαγωγή στη βασική δομή, σχεδίαση και
μοντέλο προγραμματισμού των Windows
• Κατανόηση του τρόπου με τον οποίο οι γενικές
αρχές ΛΣ εφαρμόζονται στα Windows στους
τομείς των διεργασιών, διαχείρισης μνήμης,
εισόδου / εξόδου, συστήματος αρχείων και
ασφάλειας
4
Περιεχόμενα ενότητας
• Ιστορία
• Προγραμματισμός
• Δομή συστήματος
• Διεργασίες και νήματα
• Διαχείριση μνήμης
• Είσοδος / έξοδος
• Σύστημα αρχείων
• Ασφάλεια
5
Ιστορία
Ιστορία των Windows (1 από 2)
• Τρεις γενιές ΛΣ της Microsoft
• MS-DOS
– Γραμμή διαταγών και ένας χρήστης
• Windows με βάση το MS-DOS
– Γραφικό περιβάλλον αλλά ίδιο εσωτερικό
• Windows NT
– Νέα σχεδίαση που εξελίσσεται ως σήμερα
MS-DOS (2 από 2)
• Χαρακτηριστικά του MS-DOS
– Σύστημα 16 bit με διευθύνσεις 20 bit
• Λόγω των επεξεργαστών 8088/8086
– Διεπαφή γραμμής διαταγών (όπως στο CP/M)
– Κατάλληλο για έναν χρήστη
• Δεν παρείχε καμία έννοια προστασίας
– Εξελίχθηκε για νέους επεξεργαστές
– Κατά βάση όμως ήταν το ίδιο σύστημα
10
Windows σε MS-DOS (1 από 2)
• Windows 1, 2 και 3
– Γραφική διεπαφή πάνω από το MS-DOS
• Επιρροές από SRI, PARC και Apple
– Τα Windows 1 και 2 είχαν μικρό αντίκτυπο
– Τα Windows 3 είχαν μεγάλη επιτυχία
• Εκμετάλλευση χαρακτηριστικών του 80386
• Περιορισμένος πολυπρογραμματισμός
• Η έκδοση 3.11 είχε αρκετές δυνατότητες δικτύωσης
11
12
Windows NT (1 από 8)
• Ανάγκη ανασχεδιασμού των Windows
– Υπέρβαση περιορισμών του MS-DOS
– Ανταγωνιστικό με συστήματα UNIX
– Δυνατότητα εκτέλεσης σε συστήματα RISC
• Δημιουργία ομάδας New Technology (NT)
– Επικεφαλής ο Dave Cutler από τη DEC
– Σχεδίαση συστήματος 32 bit
– Φορητότητα, αξιοπιστία και ασφάλεια
13
Windows NT (2 από 8)
• Ομοιότητες NT με VMS/Mica
– Ο David Cutler είχε μεγάλη εμπειρία στην DEC
– Εμπλοκή DEC και Microsoft στα δικαστήρια
• Κατηγορίες παραβίασης πνευματικής ιδιοκτησίας
• Τελικά έγινε εξωδικαστικός συμβιβασμός
• Τα NT απέκτησαν υποστήριξη για DEC Alpha
14
Windows NT (3 από 8)
• Διαφορές Windows NT από UNIX
– Το UNIX εξελίχθηκε τη δεκαετία του 70
• Μηχανές 16 bit χωρίς εικονική μνήμη
• Εναλλαγή διεργασιών μεταξύ δίσκου/μνήμης
– Τα NT σχεδιάστηκαν τη δεκαετία του 90
• Μηχανές 32 bit με υλικό προστασίας
• Χρονοπρογραμματισμός νημάτων
• Δυναμική σύνδεση με βιβλιοθήκες
15
Windows NT (4 από 8)
• Windows NT 3.1 για x86, Alpha, MIPS
– Ίδιος αριθμός έκδοσης με Windows 3.1
– Χρήση API Win32 (αντί για Win32s)
– Προβλήματα: πιο βαριά, λιγότερο συμβατά
• Τα Windows 95 είχαν API Win32 και συμβατότητα
– NT 3.51: Καλύτερη δικτύωση και PowerPC
• Windows NT 4.0
– Ίδια γραφική διασύνδεση με Windows 95
16
Windows NT (5 από 8)
• Συμβατότητα εφαρμογών
– Κοινή διεπαφή για όλες τις εφαρμογές 32 bit
• Τα Windows 3.x είχαν περιορισμένη έκδοση
– Εύκολη μεταφορά από Windows 95 σε NT
• Για την ίδια αρχιτεκτονική επεξεργαστή
17
Windows NT (6 από 8)
• Windows 2000: μόνο για x86
– Στόχος: συνένωση Windows NT και 98
• Τελικά κυκλοφόρησαν και τα Windows Me
– Διευθέτηση και άμεση λειτουργία (PnP)
– Δικτυακή υπηρεσία καταλόγου (AD)
• Windows XP: το τέλος του MS-DOS
– Πιο φιλική διεπαφή, μεγαλύτερη συμβατότητα
– Μεταγενέστερη έκδοση διακομιστών (Server 2003)
• Υποστήριξη IA-64 και x64
18
Windows NT (7 από 8)
19
Windows NT (8 από 8)
20
Προγραμματισμός
• Υποσυστήματα - προσωπικότητες
– Αρχικά είχαμε OS/2, POSIX και Win32
• Το OS/2 καταργήθηκε, το POSIX σχεδόν
• Η βασική προσωπικότητα είναι το Win32
23
• Δομή υποσυστήματος
– Διεργασία και βιβλιοθήκες υποσυστήματος
– Υποστήριξη χρόνου εκτέλεσης και πυρήνα
24
Δομή API (4 από 5)
• Συστατικά υποσυστήματος
– Οι βιβλιοθήκες έχουν κλήσεις υψηλού επιπέδου
– Τοπικές κλήσεις προς διεργασία υποσυστήματος
• Διεκπεραίωση LPC μέσω του πυρήνα
– Η CreateProcess εντοπίζει το υποσύστημα
• Εκκίνηση διεργασίας υποσυστήματος (αν χρειάζεται)
• Το υποσύστημα φορτώνει τη διεργασία
– Η διεργασία υποσυστήματος καλεί το NT API
25
• Προγραμματιστικά μοντέλα
– Το Win32 είναι πολύ περίπλοκο
– Τα .NET/WinFX είναι πιο χρηστικά
• Κρύβουν το Win32 πίσω από βιβλιοθήκη τάξεων
• Προσθέτουν τις δυνατότητες του CLR
26
Το NT API (1 από 4)
27
Το NT API (2 από 4)
• Αντικείμενα του NT API
– Η δημιουργία τους επιστρέφει ένα χειριστήριο
– Το χειριστήριο γενικά είναι ιδιωτικό
• Μεταβιβάζεται μόνο με προστατευμένο τρόπο
– Κάθε χειριστήριο έχει περιγραφέα ασφάλειας
• Περιγράφει τις επιτρεπόμενες λειτουργίες
– Τα αντικείμενα έχουν τύπο, λειτουργίες και μνήμη
• Ουσιαστικά παρέχουν διεπαφές χαμηλού επιπέδου
28
Το NT API (3 από 4)
29
Το NT API (4 από 4)
• Χειριστήρια και ονόματα
– Κεντρικός διαχειριστής αντικειμένων του NT
– Υποστηρίζει χώρο ονομάτων αντικειμένων
• Από το όνομα μπορούμε να πάρουμε χειριστήριο
• Ιεραρχική δομή καταλόγου για αντικείμενα
– Ο χώρος ονομάτων δημιουργείται στη μνήμη
• Συμπληρώνεται όπως εκτελείται το σύστημα
• Μόνιμα αντικείμενα για συγχρονισμό και κοινή μνήμη
30
Το Win32 API (1 από 5)
31
32
Το Win32 API (3 από 5)
• Φιλοσοφία του Win32
– Συνεχής προσθήκη λειτουργικότητας
– Πολλοί τρόποι να κάνεις το ίδιο πράγμα
– Ανάμιξη κλήσεων χαμηλού και υψηλού επιπέδου
• Χαρτογράφηση αρχείων στη μνήμη
– Δέσμευση διευθύνσεων για μεταγενέστερη χρήση
– Δημιουργία χαρτογραφήσεων αρχείων ή μνήμης
• Μπορούν να μοιράζονται από διεργασίες
– Αντιστοίχιση όψεων χαρτογραφήσεων σε διευθύνσεις
33
34
Το Win32 API (5 από 5)
• Μοντέλο ασφάλειας
– Κάθε νήμα έχει μία σκυτάλη με προνόμια
– Κάθε αντικείμενο έχει μία ACL για έλεγχο
• Χώρος ονομάτων του Win32
– Παρόμοιος με το MS-DOS (π.χ. C:\)
– Τα NT έχουν πιο εκτεταμένο χώρο ονομάτων
• \Device\HarddiskVolume1 = \DosDevices\C:
• Πάρα πολλές κλήσεις για το GUI
35
Μητρώο (1 από 3)
• Μητρώο (registry) των Windows
– Ειδική μορφή συστήματος αρχείων
– Μέρος του χώρου ονομάτων των NT
– Αποτελείται από ανεξάρτητες κυψέλες
• Κάθε κυψέλη αποθηκεύεται στο δίσκο εκκίνησης
– Η κυψέλη SYSTEM φορτώνεται με την εκκίνηση
• Βασικοί οδηγοί και λογισμικό εκκίνησης
– Οι υπόλοιπες κυψέλες φορτώνονται στη συνέχεια
36
Μητρώο (2 από 3)
Μητρώο (3 από 3)
• Το μητρώο είναι εξαιρετικά περίπλοκο
– Περιέχει πληροφορίες διάρθρωσης για τα πάντα
– Εύκολο να δημιουργήσει προβλήματα
• Κλήσεις χειρισμού του μητρώου
38
Δομή συστήματος
Δομή ΛΣ (1 από 3)
Επίπεδα του ΛΣ
40
Δομή ΛΣ (2 από 3)
• Ο βασικός κώδικας είναι στο ntoskrnl.exe
• Διακρίνεται σε δύο επίπεδα
– Εκτελεστικό (executive): όλες οι υπηρεσίες
– Πυρήνας (kernel): λειτουργίες χαμηλού επιπέδου
– Υπόλοιπες υπηρεσίες σε επίπεδο χρήστη
• Είσοδος στον πυρήνα μέσω ntdll.dll
– Παρέχει υπηρεσίες και για τον πυρήνα
– Περιέχεται στην εικονική μνήμη των διεργασιών
41
Δομή ΛΣ (3 από 3)
• Επίπεδο αφαίρεσης υλικού (HAL)
– Ενιαίος τρόπος χειρισμού συσκευών και DMA
– Απόκρυψη διαφορών BIOS και chipset
• Οδηγοί συσκευών
– Συσκευές και άλλα συμπληρώματα του πυρήνα
• Συστήματα αρχείων και πρωτόκολλα
• Αντιβιοτικά και διαχείριση δικαιωμάτων
– Δυναμική φόρτωση και σύνδεση με πυρήνα
42
Αφαίρεση υλικού (1 από 2)
• Πόσο φορητά είναι τα Windows;
– Μόνο 1-2% του κώδικα είναι assembly
– Ο κώδικας σε C όμως δεν είναι πάντα φορητός
– Πολλές λεπτομέρειες δεν αποκρύπτονται
• Μορφή πίνακα σελίδων
• Διαθέσιμες λειτουργίες συγχρονισμού
– Το HAL κρύβει λεπτομέρειες σε μία αρχιτεκτονική
• Διαφορές σε chipset και έκδοση επεξεργαστή
43
44
Επίπεδο πυρήνα
• Αφαιρέσεις για διαχείριση του επεξεργαστή
– Διακοπές, παγίδες και εξαιρέσεις
– Νήματα: χρονοπρογραμματισμός, συγχρονισμός
• Οι δομές δεδομένων υλοποιούνται στο εκτελεστικό
• Επιλογή επόμενου νήματος προς εκτέλεση
• Αλλαγή συμφραζομένων αν χρειάζεται
– Αντικείμενα ελέγχου (control)
– Αντικείμενα διεκπεραίωσης (dispatcher)
45
46
Καθυστερημένες κλήσεις (2 από 2)
• Καθυστερημένη κλήση διαδικασίας (DPC)
– Ολοκληρώνει την επεξεργασία μίας διακοπής
– Αντιστοιχεί σε διακοπή προτεραιότητας 2
• Εξυπηρετείται όταν τελειώσουν όλες οι άλλες ISR
• Η ISR επιπέδου 2 εκτελεί όλη την ουρά των DPC
– Παράδειγμα: πληκτρολόγιο
• Η ISR αντιγράφει τον κωδικό πλήκτρου
• Η DPC επεξεργάζεται τους κωδικούς αργότερα
47
48
Ασύγχρονες κλήσεις (2 από 2)
• APC σε επίπεδο χρήστη
– Η εφαρμογή ορίζει την APC που επιθυμεί
– Στη συνέχεια μπλοκάρει σε Ε/Ε
– Όταν ολοκληρωθεί η Ε/Ε καλείται η APC
– Παρόμοια με επανάκληση από τον πυρήνα
• Χρήση APC από τον πυρήνα
– Παράδειγμα: ελεγχόμενος τερματισμός νημάτων
• Η APC παραδίδεται μόνο εκτός κρίσιμων περιοχών
49
50
Αντικείμενα διεκπεραίωσης (2 από 2)
• Αναμονή σε αντικείμενα διεκπεραίωσης
– Ενιαίος μηχανισμός για συγχρονισμό
• Όταν συμβεί κάτι, ξυπνάει το νήμα
– Κλήση WaitForMultipleObjects
• Επιτρέπει αναμονή σε πολλά χειριστήρια
• Δύο είδη αντικειμένων διεκπεραίωσης
– Γνωστοποίησης: ξυπνάνε όλα τα νήματα
– Συγχρονισμού: ξυπνάει μόνο το πρώτο νήμα
51
52
Εκτελεστικό επίπεδο (2 από 4)
• Διαχειριστής αντικειμένων
– Διαχείριση μνήμης αντικειμένων
• Μετρητές χρήσης αντικειμένων
– Χειριστήρια και ονόματα αντικειμένων
• Διαχειριστής Ε/Ε
– Βασικές υπηρεσίες συσκευών και οδηγών
• Υποστήριξη οδηγών επιπέδου χρήστη
– Συνεργασία με διαχειριστή PnP επιπέδου χρήστη
• Εντοπισμός και φόρτωση του κατάλληλο οδηγού
53
54
Εκτελεστικό επίπεδο (4 από 4)
• Ελεγκτής αναφορών ασφαλείας
– Υλοποιεί κεντρικά τους ελέγχους αναφορών
• Διαχειριστής διευθέτησης
– Υλοποιεί το μητρώο
• Τοπικές κλήσεις διαδικασιών (LPC)
– Επικοινωνία διεργασιών στο ίδιο σύστημα
• Χρήση και για τοπικές RPC
• Επικοινωνία βιβλιοθήκης με διεργασία υποσυστήματος
55
56
Οδηγοί συσκευών (2 από 2)
57
Εκκίνηση (1 από 2)
• Βήματα εκκίνησης
– Το BIOS φορτώνει το MBR του βασικού δίσκου
– Το MBR φορτώνει το BootMgr από το δίσκο
– Μετά από αδράνεια/αναμονή WinResume.exe
– Για νέα εκκίνηση WinLoad.exe
– Φόρτωση πυρήνα/εκτελεστικού και HAL
– Φόρτωση κυψέλης SYSTEM και βασικού Win32
– Φόρτωση οδηγών εκκίνησης (στην SYSTEM)
58
Εκκίνηση (2 από 2)
• Αρχικοποίηση λειτουργικού
– Αρχικοποίηση HAL, πυρήνα, εκτελεστικού
– Σύνδεση οδηγών και ενημέρωση SYSTEM
– Δημιουργία διεργασίας smss.exe
• Ειδικές μορφές εκκίνησης
– Με τελευταία λειτουργική διάρθρωση
– Με ασφαλή τρόπο λειτουργίας
– Με κονσόλα ανάκαμψης (γραμμή διαταγών)
59
60
Διαχειριστής αντικειμένων (2 από 3)
• Δομή αντικειμένων
– Κοινή κεφαλίδα αντικειμένων
– Δεδομένα αντικειμένου
61
62
Χειριστήρια (1 από 3)
63
Χειριστήρια (2 από 3)
65
70
Ονόματα αντικειμένων (6 από 10)
71
73
74
Ονόματα αντικειμένων (10 από 10)
75
76
Επίπεδο χρήστη (2 από 3)
• Υλοποίηση DLL
– Ο μεταγλωττιστής δεν εισάγει άμεσες κλήσεις
• Παραγωγή Πίνακα Διευθύνσεων Εισαγωγής (IAT)
– Συμπλήρωση IAT με τη φόρτωση του κώδικα
• Δημιουργία γράφου εξαρτήσεων των DLL
• Εκτέλεση κώδικα αρχικοποίησης του DLL
• Κίνδυνος αδιεξόδου λόγω κυκλικών αναφορών
– Δυνατότητα συνύπαρξης εκδόσεων DLL
77
78
Διεργασίες και νήματα
80
Έννοιες διεργασιών (2 από 5)
• Κοινόχρηστα δεδομένα χρήστη
– Κοινή σε πυρήνα και όλες τις διεργασίες
– Μόνο ο πυρήνας την γράφει
• Πληροφορίες ώρας, έκδοσης, φυσικής μνήμης
• Διεργασίες
– Ο δημιουργός έχει χειριστήριο για τη διεργασία
• Δυνατότητα αλλαγής μνήμης, αντιγραφής χειριστηρίων
• Ρητός χειρισμός διεργασίας σε αντίθεση με τη fork()
81
• Εργασίες (jobs)
– Ομαδοποίηση διεργασιών σε εργασίες
– Χρήση για κοινή διαχείριση πόρων
• Κατάλληλες για επεξεργασία δέσμης
82
Έννοιες διεργασιών (4 από 5)
• Ίνες (fibers)
– Τα νήματα απεικονίζονται σε ίνες
– Αλλαγή ίνας σε επίπεδο χρήστη
• Ο πυρήνας και οι βιβλιοθήκες τις αγνοούν
• Χρήση για μεταφορά κώδικα από άλλα συστήματα
83
84
Δημιουργία διεργασιών
• Δημιουργία διεργασίας: CreateProcess
– Εκτελέσιμο αρχείο, γραμμή διαταγών, περιβάλλον
• Τα Win32 δεν επεκτείνουν τη γραμμή διαταγών
– Και πολλές άλλες παράμετροι
• Ασφάλεια, χρονοπρογραμματισμός, χειριστήρια, GUI
• Ρητός χειρισμός των ρυθμίσεων της διεργασίας
– Επιστρέφει χειριστήρια/ID για διεργασία/νήμα
– Υλοποιείται με απλούστερες κλήσεις των NT
85
Επικοινωνία διεργασιών
• Αγωγοί (pipes): είτε byte είτε μηνυμάτων
– Υπάρχουν και επώνυμοι αγωγοί
• Ταχυδρομικές θυρίδες (mailslots)
– Αγωγοί αλλά με πολλούς παραλήπτες
• Υποδοχές τύπου Berkeley
• Απομακρυσμένες κλήσεις διαδικασιών (RPC)
– Χρήση και στην ίδια μηχανή μέσω LPC
• Καταμερισμένα αντικείμενα: κοινή μνήμη
86
Συγχρονισμός (1 από 4)
• Σηματοφόροι: CreateSemaphore
– Κοινή χρήση είτε με χειριστήριο είτε με όνομα
– ReleaseSemaphore αντί για up
– WaitForSingleObject αντί για down
• Εναλλακτικά, WaitForMultipleObjects
• Mutex: σηματοφόροι χωρίς μετρητές
– ReleaseMutex για απελευθέρωση
– Ίδιες κλήσεις με σηματοφόρους για αναμονή
87
Συγχρονισμός (2 από 4)
• Κρίσιμες περιοχές
– Χρήση μόνο μέσα σε μία διεργασία
– EnterCriticalSection και LeaveCriticalSection
• Χρήση κλειδωμάτων περιστροφής
• Μπλοκάρισμα στον πυρήνα όταν είναι απαραίτητο
• Συμβάντα (events)
– Σηματοδοτημένα ή μη σηματοδοτημένα
– SetEvent για σηματοδότηση
– WaitForSingleObject για αναμονή
88
Συγχρονισμός (3 από 4)
• Δύο είδη συμβάντων
– Διαφέρουν στο τι γίνεται όταν σηματοδοτηθούν
– Γνωστοποίησης: ελευθερώνονται όλα τα νήματα
– Συγχρονισμού: ελευθερώνεται ένα νήμα
• Δύο είδη σηματοδότησης
– PulseEvent: αν δεν περιμένει κανείς, χάνεται
– SetEvent: η σηματοδότηση παραμένει ενεργή
89
Συγχρονισμός (4 από 4)
90
Υλοποίηση διεργασιών (1 από 3)
• Κλήση CreateProcess στο Win32
• Μετατροπή ονόματος αρχείου σε όνομα NT
• Κλήση της NtCreateUserProcess
• Δημιουργία αντικειμένου ενότητας με εικόνα
• Δημιουργία αντικειμένου διεργασίας
• Δημιουργία χώρου διευθύνσεων
• Δημιουργία πίνακα χειριστηρίων
91
94
Χρονοπρογραμματισμός (2 από 10)
• Περιπτώσεις κλήσεις χρονοπρογραμματιστή
– Ολοκλήρωση λειτουργίας Ε/Ε
– Λήξη προθεσμίας αναμονής
• Η ISR προσθέτει μία DPC στην ουρά
• Η DPC θα καλέσει τον χρονοπρογραμματιστή
• Έλεγχος για νήμα υψηλότερης προτεραιότητας
• Αλγόριθμος χρονοπρογραμματισμού
– Δύο είδη προτεραιοτήτων
95
96
Χρονοπρογραμματισμός (4 από 10)
99
100
Χρονοπρογραμματισμός (8 από 10)
• Αντιστροφή προτεραιοτήτων
– Η 8 εκτελείται πριν την 12 λόγω της 4
101
102
Χρονοπρογραμματισμός (10 από 10)
• Μέγεθος κβάντου
– Στους πελάτες είναι 20 msec
– Στους διακομιστές είναι 120 msec
– Μπορεί να πολλαπλασιαστεί από τον διαχειριστή
• Προτεραιότητα διεργασίας προσκηνίου
– Έστω ότι ένα παράθυρο έρχεται στο προσκήνιο
– Όλα του τα νήματα έχουν αυξημένο κβάντο
• Βελτίωση της εμπειρίας του χρήστη
103
Διαχείριση μνήμης
Χώροι διευθύνσεων (1 από 2)
• Χώρος διευθύνσεων διεργασίας
– 32 bit: 2 GB χρήστης + 2 GB πυρήνας
• 3 GB χρήστης στις εκδόσεις διακομιστή
– 64 bit: 4 GB και σε διεργασίας 32 bit (WOW64)
– Μέγεθος σελίδας 4 KB ή (σπάνια) 4 MB
– Δεν χρησιμοποιούνται 64+64KB στα άκρα
• Εντοπισμός συνήθως προβλημάτων με δείκτες
– Ο πυρήνας είναι κοινός σε όλες τις διεργασίες
105
107
108
Αρχεία σελιδοποίησης (2 από 2)
• Υποστήριξη έως 16 αρχείων
– Σε διαφορετικούς δίσκους για απόδοση
– Καλύτερα να δεσμεύεται χώρος από την αρχή
• Παρακολούθηση μέσω πίνακα σελίδων
• Δεν χρησιμοποιείται για όλες τις σελίδες
– Προγράμματα και DLL διαβάζονται από το δίσκο
– Τα χαρτογραφημένα αρχεία είναι στο δίσκο
109
110
Κλήσεις διαχείρισης μνήμης
112
Υλοποίηση μνήμης (2 από 2)
115
117
118
Σφάλματα σελίδας (6 από 6)
• Αφαίρεση σελίδων από πίνακα
– Μπορεί να πάει σε τρεις διαφορετικές λίστες
– Ελεύθερες: δεν θα χρειαστεί ξανά
• Στοίβα διεργασίας που τερμάτισε
– Τροποποιημένες: πρέπει να γραφτεί στο δίσκο
– Αναμονής: δεν χρειάζεται να γραφτεί στο δίσκο
• Οι τροποποιημένες πάνε εκεί όταν γραφούν
– Οι δύο τελευταίες λειτουργούν ως κρυφή μνήμη
119
121
122
Φυσική μνήμη (2 από 4)
124
Φυσική μνήμη (4 από 4)
• Νήματα συστήματος για διαχείριση μνήμης
– Διαχειριστής συνόλου ισορροπίας
• Ψάχνει για αδρανείς διεργασίες
– Εγγραφέας χαρτογραφημένων σελίδων
• Μπορεί να χρειαστεί να μεγαλώσει το αρχείο
– Εγγραφές τροποποιημένων σελίδων
• Χρησιμοποιεί τα αρχεία σελιδοποίησης
– Νήμα μηδενισμού σελίδων
125
126
Κρυφή μνήμη ΛΣ (2 από 3)
• Λειτουργία διαχειριστή κρυφής μνήμης
– Έστω ότι γίνεται αναφορά σε ένα αρχείο
– Χαρτογράφηση 256 KB στη μνήμη
• Αν το μπλοκ ζητηθεί, διαβάζεται από το δίσκο
• Αυτό είναι αρμοδιότητα του διαχειριστή μνήμης
– Χρήση και για κανονικά χαρτογραφημένα αρχεία
– Δυνατότητα παράκαμψης της κρυφής μνήμης
• Αφήνει 3 GB εικονικής μνήμης στις εφαρμογές
127
128
Είσοδος / έξοδος
130
Έννοιες Ε/Ε (2 από 4)
• Φόρτωση υπόλοιπων οδηγών
– Οδηγοί που δεν αντιστοιχούν σε συσκευές
• Συστήματα αρχείων, αντιβιοτικά
• Δεν μπορούν να φορτωθούν με PnP
– Φόρτωση κατά την εκκίνηση
• Χρήση αρχείων διάρθρωσης
– Φόρτωση όταν χρειαστούν
• Παράδειγμα: με την ανάρτηση συστήματος αρχείων
131
132
Έννοιες Ε/Ε (4 από 4)
• Ασύγχρονη Ε/Ε: πολλοί τρόποι αναμονής
– Αναμονή σε αντικείμενο συμβάντος
– Προσθήκη συμβάντος ολοκλήρωσης σε ουρά
– Διαδικασία επανάκλησης στο τέλος
– Παρακολούθηση θέσης στη μνήμη
• Προτεραιότητες Ε/Ε
– Υψηλή: διαχειριστής μνήμης
– Χαμηλή: αντιβιοτικά, συντήρηση δίσκου
133
134
Κλήσεις Ε/Ε (2 από 3)
• Ιδιαιτερότητες κλήσεων Ε/Ε
– Ίδια κλήση για δημιουργία/άνοιγμα αρχείου
– Ανάγνωση/εγγραφή ορίζουν το δείκτη στο αρχείο
– Ειδικές κλήσεις για παροχή πληροφοριών
• Πιθανόν και για αλλαγή πληροφοριών
– Δυνατότητα ειδοποίησης σε αλλαγές
• Απλή επέκταση των ασύγχρονων κλήσεων
– Κλείδωμα περιοχών αρχείων με κλειδί
135
136
Οδηγοί συσκευών (1 από 3)
• Μοντέλο οδηγών των Windows (WDM)
– Συμβατό με Windows 98 και 2000
• Επέτρεπε χρήση οδηγών και στα δύο συστήματα
– Βοήθημα επαλήθευσης οδηγών (verifier.exe)
• Χρήσιμο στους διαχειριστές για έλεγχο οδηγών
• Θεμελίωση οδηγών των Windows (WDF)
– Απλοποιημένο μοντέλο πάνω από το WDM
– UMDF για οδηγούς επιπέδου χρήστη
– KMDF για οδηγούς επιπέδου πυρήνα
137
138
Οδηγοί συσκευών (3 από 3)
139
140
Πακέτα αιτήσεων Ε/Ε (2 από 2)
• Δεδομένα στοίβας οδηγών
– Χώρος δεδομένων για κάθε οδηγό της στοίβας
• Παράδειγμα: ρουτίνα που θα κληθεί στην ολοκλήρωση
– Στην ολοκλήρωση ανεβαίνουμε στη στοίβα
• Κλήση ρουτίνας ολοκλήρωσης σε κάθε επίπεδο
– Ο διαχειριστής γνωρίζει το μέγεθος της στοίβας
• Απαραίτητο για εκχώρηση αρκετής μνήμης στο IRP
143
144
Στοίβες συσκευών (4 από 4)
• Διαχειριστής ισχύος
– Κλείνει ή υποβαθμίζει μέρη του συστήματος
• Μείωση συχνότητας λειτουργίας επεξεργαστή
• Διακοπή λειτουργίας πυρήνων/επεξεργαστών
– Κατάσταση αδράνειας (hibernation)
• Αντιγραφή μνήμης στο δίσκο
• Ελαχιστοποίηση κατανάλωσης ενέργειας
– Κατάσταση αναμονής (standby)
• Ενέργεια μόνο για ανανέωση δυναμικής μνήμης
• Κίνδυνος απώλειας αν τελειώσει η μπαταρία
145
Σύστημα αρχείων
Έννοιες αρχείων (1 από 3)
• Συστήματα αρχείων των Windows
– FAT-16/FAT-32: χωρίς προστασία, για συμβατότητα
– NTFS: το σύστημα αρχείων των NT
• Μεγάλοι δίσκοι, ασφάλεια, λειτουργικότητα
• Ονόματα αρχείων
– Έως 255 χαρακτήρες Unicode
– Διαδρομές έως 32767 χαρακτήρες
– Διακρίνει και διατηρεί πεζά-κεφαλαία
• Το Win32 διατηρεί αλλά δεν διακρίνει πεζά-κεφαλαία
147
148
Έννοιες αρχείων (3 από 3)
• Ιεραρχικός χώρος ονομάτων
– Διαχωρισμός με \ αντί για /
– Τα ευρετήρια «.» και «..» είναι συμβάσεις
– Σκληροί σύνδεσμοι για το σύστημα POSIX
– Συμβολικοί σύνδεσμοι για διαχειριστές
• Σημεία συντακτικής επανανάλυσης
– Συμπίεση, κρυπτογράφηση, αραιά αρχεία
– Ανοχή σε σφάλματα, τήρηση ημερολογίου
149
150
Δομή συστήματος αρχείων (2 από 8)
• Κύριος πίνακας αρχείων (MFT)
– Γραμμική ακολουθία εγγραφών 1 KB
– Κάθε εγγραφή περιγράφει ένα αρχείο ή κατάλογο
• Χαρακτηριστικά αρχείου και διευθύνσεις μπλοκ
• Πρόσθετες εγγραφές για πολύ μεγάλα αρχεία
– Χάρτης bit για παρακολούθηση θέσεων MFT
– Αποθηκεύεται οπουδήποτε στο δίσκο
– Μεγαλώνει μέχρι 248 εγγραφές
151
152
Δομή συστήματος αρχείων (4 από 8)
154
Δομή συστήματος αρχείων (6 από 8)
155
156
Δομή συστήματος αρχείων (8 από 8)
• Παραπομπή σε άλλο αρχείο για ασφάλεια
– Επιτρέπει την επαναχρησιμοποίηση πολιτικών
• Αποθήκευση καταλόγων με μορφή λίστας
– Οι μεγάλοι κατάλογοι αλλάζουν σε Β+ δένδρα
• Προεπιλεγμένο ρεύμα δεδομένων: ανώνυμο
– Πρόσθετα ρεύματα δεδομένων έχουν όνομα
• Ακολουθούν οι διευθύνσεις των μπλοκ
• Μικρά ρεύματα αποθηκεύονται στο ίδιο το MFT
157
158
Κατανομή χώρου (2 από 6)
159
160
Κατανομή χώρου (4 από 6)
162
Κατανομή χώρου (6 από 6)
• Σημεία συντακτικής επανανάλυσης (reparse)
– Ειδική σημείωση σε αρχείο/κατάλογο
• Συνοδεύεται από κάποια δεδομένα
– Επιστρέφουν αποτυχία κατά την ανάλυση
• Στο IRP επιστρέφονται τα δεδομένα
– Ο διαχειριστής αντικειμένων ξεκινά ξανά
• Χρήση των δεδομένων ως νέο όνομα
– Υλοποίηση ανάρτησης, συμβολικών συνδέσμων
163
164
Συμπίεση αρχείων (2 από 2)
165
Τήρηση ημερολογίου
• Δύο τρόποι παρακολούθησης αλλαγών
• Κλήση NtNotifyChangeDirectoryFile
– Περνάμε μια περιοχή μνήμης και ένα αρχείο
– Επιστρέφει τις αλλαγές στο αρχείο
• Ελπίζουμε να χωράνε όλες στην περιοχή
• Ημερολόγιο αλλαγών του NTFS
– Λίστα όλων των αλλαγών σε αρχεία
– Αποθήκευση σε πολύ μεγάλο αρχείο ημερολογίου
166
Ασφάλεια
168
Απαιτήσεις ασφάλειας (2 από 2)
• Διακριτικοί έλεγχοι πρόσβασης
– Ο ιδιοκτήτης επιλέγει τρόπο πρόσβασης
• Έλεγχοι προνομιακής πρόσβασης
– Ο υπερχρήστης μπορεί να παρακάμψει ελέγχους
• Προστασία χώρου διευθύνσεων διεργασίας
• Μηδενισμός νέων σελίδων
• Ελεγκτική παρακολούθηση ασφάλειας
– Αρχείο καταγραφής συμβάντων
169
170
Έννοιες ασφάλειας (2 από 4)
• Δημιουργία σκυτάλης στη σύνδεση
– Οι διεργασίες την κληρονομούν
– Όλα τα νήματα έχουν την ίδια
• Μηχανισμός μίμησης (impersonation)
– Δυνατότητα απόκτησης άλλης σκυτάλης
• Το νήμα αποκτά διαφορετικά προνόμια
– Παράδειγμα: πελάτης περνά σκυτάλη σε διακομιστή
• Δυνατότητα προσπέλασης αρχείων πελάτη
171
172
Έννοιες ασφάλειας (4 από 4)
Κλήσεις ασφάλειας
174
Υλοποίηση ασφάλειας (1 από 3)
• Αρχικοποίηση ασφάλειας
– Σύνδεση με διεργασία winlogon
– Πιστοποίηση ταυτότητας με διεργασία lsass
– Δημιουργία νέου φλοιού GUI (explorer)
• Χρήση της κατάλληλης σκυτάλης πρόσβασης
• Έλεγχος ασφάλειας στο άνοιγμα αντικειμένων
– Κεντρικός ελεγκτής αναφορών ασφάλειας
– Σύγκριση ζητούμενων με επιτρεπτά δικαιώματα
• Ισχύει η πρώτη καταχώριση της ACL που ταιριάζει
175
176
Υλοποίηση ασφάλειας (3 από 3)
• Απαγόρευση εκτέλεσης (NX)
– Σελίδες με απαγόρευση εκτέλεσης κώδικα
• Αποφυγή προβλημάτων υπερχείλισης στοίβας
• Υπογραφή κώδικα πυρήνα (για οδηγούς)
• Φόρτωση κώδικα σε τυχαίες διευθύνσεις
• Έλεγχος λογαριασμού χρήστη (UAC)
– Εμφάνιση ειδικής οθόνης για το διαχειριστή
• Ο χρήστης πρέπει να εγκρίνει την πρόσβαση
177
Περιεχόμενα ενότητας
• Εισαγωγή
• Διεργασίες
• Επικοινωνία διεργασιών
• Νήματα
• Νήματα POSIX
5
Προγραμματισμός UNIX (1 από 2)
• Έχουμε καλύψει διάφορες όψεις των ΛΣ
– Και του Linux ως μελέτης περίπτωσης
– Σε καθαρά θεωρητικό επίπεδο όμως
– Ο προγραμματισμός είναι πιο πρακτικός
• Γιατί UNIX και όχι Linux;
– Το Linux παρέχει πολλές επεκτάσεις στο UNIX
– Οι κοινές κλήσεις όμως λειτουργούν παντού
• Και σε παραλλαγές BSD και System V
8
Διεργασίες
10
Διεργασίες (1 από 6)
• Δημιουργία: pid_t fork(void);
– Ακριβές αντίγραφο της εκτελούμενης διεργασίας
• Η εκτελούμενη διεργασία είναι ο γονέας
• Η νέα διεργασία είναι το παιδί
– Επιστρέφει 0 στο παιδί και pid παιδιού στο γονέα
– Ο κώδικας παραμένει κοινός
– Τα δεδομένα είναι τα ίδια μόνο αρχικά
• Κάθε διεργασία έχει το δικό της αντίγραφο
– Ίδια ανοιχτά αρχεία, σήματα και περιβάλλον
11
Διεργασίες (2 από 6)
• Τερματισμός: void exit(int status);
– Επιστρέφει κωδικό εξόδου στον πατέρα
– Ο πατέρας λαμβάνει και σήμα SIGCHLD
• Αναμονή τερματισμού παιδιού
– pid_t wait(int *status);
– Επιστρέφει αμέσως αν έχει τερματίσει παιδί
– Επιστρέφει το pid του παιδιού και έναν κωδικό
• Περιλαμβάνει τρόπο εξόδου και κωδικό εξόδου
12
Διεργασίες (3 από 6)
• Σύνθετη αναμονή τερματισμού παιδιού
• pid_t waitpid(pid_t pid, int *status,
int options);
• Συμπεριφέρεται ανάλογα με pid
– < -1: περιμένει παιδί από συγκεκριμένη ομάδα
– -1: περιμένει οποιοδήποτε παιδί
– 0: περιμένει παιδί που ανήκει στην τρέχουσα ομάδα
– > 0: περιμένει παιδί με συγκεκριμένο pid
• Οι επιλογές επιτρέπουν και άμεση επιστροφή
13
Διεργασίες (4 από 6)
• Αντικατάσταση κώδικα: κλήσεις exec
– Φόρτωση νέου κώδικα και δεδομένων
– Δεν αλλάζει το PID της διεργασίας
– Τα ανοιχτά αρχεία παραμένουν
– Τυπικός κύκλος ζωής διεργασίας
14
Διεργασίες (5 από 6)
• Παραλλαγές της exec με λίστα
– int execl(const char *path, const
char *arg, ...);
– int execlp(const char *file, const
char *arg, ...);
– int execle(const char *path, const
char *arg , ..., char * const
envp[]);
– Όνομα αρχείου, παράμετροι εισόδου, περιβάλλον
15
Διεργασίες (6 από 6)
• Παραλλαγές της exec με πίνακα
– int execv(const char *path, char
*const argv[]);
– int execvp(const char *file, char
*const argv[]);
– int execve(const char *file, char
*const argv [], char *const
envp[]);
– Οι παράμετροι εισόδου είναι σε πίνακα
16
Επικοινωνία διεργασιών
18
Μηχανισμοί επικοινωνίας (2 από 2)
• Ουρές μηνυμάτων
– Επικοινωνία μέσω γραμματοκιβωτίων
– Παρέχουν αρκετές πρόσθετες δυνατότητες
• Κοινή μνήμη και σηματοφορείς
– Δεν παρεμβαίνει ο πυρήνας
– Σηματοφορείς για συγχρονισμό
• Υποδοχές
– Χρησιμοποιούνται κυρίως στο δίκτυο
– Κατάλληλες και για τοπική επικοινωνία
19
Σήματα (1 από 5)
• Σήματα (signals): διακοπές λογισμικού
– Ο παραλήπτης τα αγνοεί ή τα αντιμετωπίζει
• Ορισμένα (SIGKILL/SIGSTOP) δεν αγνοούνται
– Αλλιώς σκοτώνουν τον παραλήπτη
• Αντιμετώπιση σημάτων
– Η διεργασία δηλώνει συνάρτηση χειρισμού
– Όταν συμβεί το σήμα, διακόπτεται η εκτέλεση
– Εκτελείται η συνάρτηση χειρισμού (handler)
– Επιστροφή στο σημείο που διακόπηκε η εκτέλεση
20
Σήματα (2 από 5)
• Άμεση αποστολή σημάτων
– int kill(pid_t pid, int sig);
– Στέλνει το σήμα sig στη διεργασία pid
– Πρέπει να ανήκουν στην ίδια ομάδα διεργασιών
• Έμμεση παραγωγή σημάτων
– SIGALRM: λήξη χρονομέτρου alarm()
• Παραγωγή σημάτων από το σύστημα
– Σήματα εξαιρέσεων (διαίρεση με το μηδέν)
– Συνδυασμοί πλήκτρων (CTRL-C)
21
Σήματα (3 από 5)
• Ορισμός χρονομέτρων
– unsigned int alarm(unsigned int
sec);
– Το χρονόμετρο θα σημάνει σε sec δεύτερα
– Ακυρώνει τυχόν προηγούμενο χρονόμετρο
• Με παράμετρο μηδέν απλά το ακυρώνει
• Επιστρέφει χρόνο που είχε μείνει
– Στην εκπνοή στέλνει SIGALRM στη διεργασία
22
Σήματα (4 από 5)
• Χειρισμός σημάτων
– int sigaction(int signum, const
struct sigaction *act, struct
sigaction *oldact);
– To signum προσδιορίζει ένα σήμα
– Το act δείχνει τον τρόπο αντιμετώπισης
• Δομή με πολλά πεδία (και χειριστή)
– Το oact δείχνει τον παλιό τρόπο αντιμετώπισης
23
Σήματα (5 από 5)
• Χειριστές σημάτων
– Ο χειριστής δίνεται στο πεδίο sa_handler
– Δείκτης στη συνάρτηση χειρισμού
– Ο χειριστής είναι void handler(int sig);
– Όταν καλείται βλέπει και το σήμα
– Επιτρέπεται και SIG_DFL ή SIG_IGN
• Τα σήματα δεν έχουν μνήμη
– Αν δεν τα αντιμετωπίσουμε, απλά χάνονται!
24
Αγωγοί (1 από 9)
• (Ανώνυμοι) Αγωγοί (pipes)
– Μονόδρομη ροή byte μεταξύ διεργασιών
– Μοιάζουν με ακολουθιακά αρχεία
• Λειτουργούν σαν ενταμιευτές
• Συνήθως μικρή χωρητικότητα (π.χ. 4096 bytes)
– Αυτόματος έλεγχος ροής
• Όταν γεμίσουν εμποδίζεται ο συγγραφέας
• Όταν αδειάσουν εμποδίζεται ο αναγνώστης
25
Αγωγοί (2 από 9)
• Δημιουργία αγωγού
– int pipe(int filedes[2]);
– Επιστρέφει δύο περιγραφητές αρχείου
• filedes[0] για ανάγνωση, filedes[1] για εγγραφή
26
Αγωγοί (3 από 9)
• Επικοινωνία διεργασιών με αγωγούς
– Οι αγωγοί είναι «ανώνυμοι»
• Η pipe() δεν παίρνει κάποιο όνομα
– Δεν «ανοίγουν» από πολλές διεργασίες
– Μπορούν μόνο να «κληρονομηθούν»
– Με fork() το παιδί κληρονομεί τους σωλήνες
– Κλείσιμο άκρων που δεν χρειάζονται
– Μονόδρομη ή αμφίδρομη επικοινωνία
27
Αγωγοί (4 από 9)
• Μονόδρομη επικοινωνία
– Ο γονέας δημιουργεί το σωλήνα με pipe()
– Ο γονέας κλωνοποιείται με την κλήση fork()
– Ο γονέας κλείνει το άκρο ανάγνωσης
– Το παιδί κλείνει το άκρο εγγραφής
28
Αγωγοί (5 από 9)
• Αμφίδρομη επικοινωνία
– Ο πατέρας ανοίγει δύο σωλήνες
– Ο πατέρας κλείνει το άκρο ανάγνωσης 1
– Ο πατέρας κλείνει το άκρο εγγραφής 2
– Το παιδί κάνει το ανάποδο
29
Αγωγοί (6 από 9)
• Πολλαπλοί αγωγοί
– Ο φλοιός διαβάζει το who | sort | lpr
– Δημιουργεί όσους σωλήνες χρειάζονται
– Κλωνοποιείται για κάθε διεργασία
– Κλείνει τα περιττά άκρα των σωλήνων
– Εκτελεί τα προγράμματα των διεργασιών
30
Αγωγοί (7 από 9)
• Σύνδεση αγωγών με stdin / stdout
– Στο φλοιό έχουμε ανακατεύθυνση
• Η είσοδος / έξοδος συνδέεται με αγωγό
– Αρχικά κλείνουμε το stdin / stdout
– Μετά αντιγράφουμε εκεί τον αγωγό
– int dup(int oldfd);
• Ο oldfd αντιγράφεται στον πρώτο διαθέσιμο
– int dup2(int oldfd, int newfd);
• Ο oldfd αντιγράφεται στον newfd
31
Αγωγοί (8 από 9)
• Οι αγωγοί είναι ροές byte χωρίς όρια
– Μπορούμε να γράψουμε 10 byte και μετά άλλα 5
– Στην ανάγνωση φαίνεται ότι γράφτηκαν 15 byte
• Οι σωλήνες δεν έχουν «τέλος»
– Όσο ο σωλήνας είναι ανοικτός, μπορεί να γραφτεί
– Οι αναγνώσεις επιστρέφουν ή εμποδίζονται
– Η ροή κλείνει όταν κλείσει το άκρο εγγραφής
• Αρχικά διαβάζονται όσα δεδομένα εκκρεμούν
• Στην επόμενη ανάγνωση θα επιστραφεί 0
32
Αγωγοί (9 από 9)
• (Επώνυμοι) Αγωγοί (FIFO)
– int mkfifo(const char *pathname,
mode_t mode);
– Λειτουργούν όπως οι απλοί αγωγοί
• Δεν περνάνε δεδομένα μέσω αρχείων
– Έχουν όνομα στο σύστημα αρχείων
• Και δικαιώματα προσπέλασης
– Μπορούν να ανοίξουν από πολλές διεργασίες
• Κάθε άκρο ανοίγει χωριστά
33
34
Ουρές μηνυμάτων (2 από 10)
• Δομή msqid με βασικά στοιχεία ουράς
– Κεφαλή/ ουρά λίστας, μηνύματα / max bytes
– Pid/χρόνοι τελευταίου αναγνώστη / συγγραφέα
• Ουρά μηνυμάτων με σύνδεση μίας κατεύθυνσης
– Επόμενο μήνυμα, τύπος, μήκος, δεδομένα
35
36
Ουρές μηνυμάτων (4 από 10)
• Άνοιγμα ουράς
– int msgget(key_t key, int msgflag);
– Επιστρέφει τοπικό αναγνωριστικό ουράς
– Οι σημαίες ορίζουν πώς θα ανοίξει η ουρά
• Χωρίς σημαία: άνοιγμα ουράς ή αποτυχία
• IPC_CREAT: άνοιγμα ουράς ή δημιουργία της
• IPC_CREAT|IPC_EXCL: δημιουργία ουράς ή αποτυχία
– Οι σημαίες δίνουν και τα δικαιώματα πρόσβασης
• Ίδια κωδικοποίηση με κλήσεις open() και creat()
37
38
Ουρές μηνυμάτων (6 από 10)
• Τύπος μηνυμάτων: struct msgbuf
– Περιέχει δύο πεδία: τύπο και περιεχόμενο
– Ο τύπος (mtype) είναι long και > 0
• 0 και αρνητικές τιμές έχουν ειδική σημασία
– Τα δεδομένα (mtext) είναι πίνακας χαρακτήρων
• Η διεργασία τα κωδικοποιεί όπως θέλει
– Ο πυρήνας προσθέτει μήκος και άλλα στοιχεία
• Χρήση μόνο για εσωτερική οργάνωση της ουράς
39
40
Ουρές μηνυμάτων (8 από 10)
• Λήψη μηνυμάτων από ουρά
– ssize_t msgrcv(int msqid, struct
msgbuf *msgp, size_t msgsz, long
msgtyp, int msgflg);
– Επιστρέφεται μήκος μηνύματος (χωρίς τον τύπο)
– Σημαία IPC_NOWAIT
• Επιστροφή αν δεν υπάρχει μήνυμα
• Αλλιώς εμποδισμός μέχρι να εμφανιστεί μήνυμα
– Σημαία MSG_NOERROR
• Αποκοπή δεδομένων αν είναι > msgsz
41
42
Ουρές μηνυμάτων (10 από 10)
• Οι ουρές δεν έχουν «τέλος»
– Η ουρά δεν κλείνει, μόνο διαγράφεται
• Αν γίνει αυτό, χάνονται τα εκκρεμή μηνύματα
– Όσο υπάρχει, μπορεί να την ανοίξει κάποιος
• Δεν μπορούμε να δείξουμε «τέλος αρχείου»
– Χρειαζόμαστε μηνύματα τερματισμού
• Με χωριστό τύπο ή με μηδενικό μήκος
– Η τελευταία διεργασία διαγράφει την ουρά
43
Νήματα
Έννοια του νήματος
• Ανεξάρτητη ροή ελέγχου σε μία διεργασία
– Μέρος μίας διεργασίας
• Κοινή μνήμη, αρχεία, δικαιώματα
– Ανεξάρτητη κατάσταση εκτέλεσης
• Μετρητής προγράμματος, καταχωρητές
– Ανεξάρτητος χρονοπρογραμματισμός
• Πολλά νήματα μπορεί να εκτελούνται παράλληλα
– Οι κλασικές διεργασίες έχουν ένα νήμα
45
47
Νήματα POSIX
Pthreads API
• Τυποποιημένο API νημάτων για C
– Μέρος των προτύπων POSIX (POSIX threads)
– Υλοποιείται στα περισσότερα συστήματα UNIX
• Πιθανόν παράλληλα με άλλα API νημάτων
– Διαχείριση νημάτων
– Mutexes για αμοιβαίο αποκλεισμό
– Μεταβλητές συνθήκης για συγχρονισμό
– Κλειδώματα και φράγματα
49
50
Διαχείριση νημάτων (2 από 4)
• Δημιουργία / καταστροφή ιδιοτήτων
– int pthread_attr_destroy(pthread_attr_t
*attr);
– int pthread_attr_init(pthread_attr_t
*attr);
– Μεταβιβάζονται κατά τη δημιουργία του νήματος
– Μπορούν να τροποποιηθούν / διαβαστούν αργότερα
• Μπορούμε να την περιμένουμε με join() ή όχι
• Πολιτική / παράμετροι χρονοπρογραμματισμού
• Μέγεθος / διεύθυνση / υπερχείλιση στοίβας
51
52
Διαχείριση νημάτων (4 από 4)
• Αναμονή τερματισμού νήματος
– int pthread_join(pthread_t thread, void
**value_ptr);
– Μπλοκάρισμα μέχρι να τερματίσει ένα νήμα
– Μπορούμε να δούμε την κατάσταση τερματισμού
• Αποσύνδεση νήματος (δεν γίνεται join())
– int pthread_detach(pthread_t thread);
• Θανάτωση άλλου νήματος
– int pthread_cancel(pthread_t thread);
53
54
Αμοιβαίος αποκλεισμός (2 από 3)
• Δημιουργία mutex: δήλωση μεταβλητής
• Αρχικοποίηση mutex
– int
pthread_mutex_init(pthread_mutex_t
*mutex, const pthread_mutexattr_t
*attr);
– Αρχικά το mutex είναι ξεκλείδωτο
• Καταστροφή mutex
– int
pthread_mutex_destroy(pthread_mutex_
t *mutex);
55
56
Μεταβλητές συνθήκης (1 από 5)
• Συγχρονισμός νημάτων
– Τα mutex επιτρέπουν αμοιβαίο αποκλεισμό
– Πρόβλημα παραγωγού / καταναλωτή
• Έστω ότι έχουμε έναν κυκλικό χώρο αποθήκευσης
• Ο παραγωγός εμποδίζεται όταν ο χώρος γεμίσει
• Ο καταναλωτής εμποδίζεται όταν ο χώρος αδειάσει
• Πρέπει να περιμένουμε για μία συνθήκη
• Πρέπει να απελευθερώσουμε το mutex
57
58
Μεταβλητές συνθήκης (3 από 5)
• Δημιουργία μεταβλητής συνθήκης
– Δήλωση μεταβλητής p_thread_t
• Αρχικοποίηση μεταβλητής συνθήκης
– int pthread_cond_init(pthread_cond_t
*cond, const pthread_condattr_t
*attr);
• Καταστροφή μεταβλητής συνθήκης
– int
pthread_cond_destroy(pthread_cond_t
*cond);
59
60
Μεταβλητές συνθήκης (5 από 5)
• Σήμα σε μεταβλητή συνθήκης
– int
pthread_cond_broadcast(pthread_cond_
t *cond);
• Ξεμπλοκάρει όλα τα νήματα της συνθήκης
– int
pthread_cond_signal(pthread_cond_t
*cond);
• Ξεμπλοκάρει ένα (τυχαίο) νήμα της συνθήκης
– Πρέπει το νήμα να έχει κλειδώσει ήδη το mutex
– Τελικά το νήμα πρέπει να ξεκλειδώσει το mutex
61
Περιεχόμενα ενότητας
• Το πρόβλημα σχεδίασης
• Σχεδίαση διασυνδέσεων
• Υλοποίηση
• Απόδοση
• Διαχείριση έργων
• Σχεδιαστικές τάσεις
5
Το πρόβλημα σχεδίασης
Στόχοι (1 από 5)
• Ποιος είναι ο στόχος ενός νέου ΛΣ;
– Ένα μάθημα από τις γλώσσες προγραμματισμού
– Κακό παράδειγμα: PL/I
• Θα αντικαθιστούσε FORTRAN, COBOL και Algol
• Εξαφανίστηκε πριν από όλες αυτές
• Δεν υπήρχε ένα ενιαίο όραμα σχεδίασης
– Καλό παράδειγμα: C
• Δημιουργήθηκε μόνο για προγραμματισμό ΛΣ
• Επιβίωσε περισσότερο από τις σύγχρονές της
7
Στόχοι (2 από 5)
• Στόχοι ενός ΛΣ γενικής χρήσης
– Ορισμός αφαιρέσεων
– Παροχή πρωτογενών λειτουργιών
– Εξασφάλιση της απομόνωσης
– Διαχείριση του υλικού
• Μπορεί να υπάρχουν και πιο ειδικοί στόχοι
– Παράδειγμα: ΛΣ πραγματικού χρόνου
Στόχοι (3 από 5)
• Ορισμός αφαιρέσεων
– Οι βασικές αφαιρέσεις είναι γνωστές
– Διεργασίες, χώροι διευθύνσεων, αρχεία
– Αλλά και νήματα, συγχρονισμός, επικοινωνία
– Ο ακριβής ορισμός δεν είναι προφανής
• Παράδειγμα: χειρισμός νημάτων μετά από fork()
• Αντιγράφονται τα νήματα;
• Αντιγράφονται τα εκκρεμή σήματα;
9
Στόχοι (4 από 5)
• Παροχή πρωτογενών λειτουργιών
– Χειρίζονται τις αφαιρέσεις
• Για την ακρίβεια, τις δομές που τις παριστάνουν
• Δημιουργία, διαγραφή, τροποποίηση
– Υλοποιούνται ως κλήσεις συστήματος
• Διαχείριση του υλικού
– Έλεγχος υλικού σε χαμηλό επίπεδο
– Περιβάλλον λειτουργίας οδηγών συσκευών
10
Στόχοι (5 από 5)
• Εξασφάλιση της απομόνωσης
– Διάκριση των εργασιών των διάφορων χρηστών
• Χρήση διεργασιών για ομαδοποίηση πόρων
• Προστασία αρχείων και δομών δεδομένων
– Ελεγχόμενος καταμερισμός πόρων
• Επικοινωνία και συγχρονισμός διεργασιών
– Απομόνωση των αστοχιών
• Κάθε διεργασία αποτυγχάνει αυτόνομα
• Ιδανικό, το ίδιο ισχύει και για τα τμήματα του ΛΣ
11
Δυσκολίες (1 από 4)
• Γιατί τα ΛΣ δεν βελτιώνονται όπως το υλικό;
– Επιθυμία για συμβατότητα με προβληματικά ΛΣ
– Κακή σχεδίαση και ανεπαρκής συντήρηση
– Υπάρχουν όμως και θεμελιώδεις δυσκολίες
• Τα ΛΣ είναι τεράστια
– Πολλά εκατομμύρια γραμμές κώδικα
– Αδύνατον να τα κατανοήσει ένας σχεδιαστής
– Τα τμήματά τους δεν απομονώνονται εύκολα
12
Δυσκολίες (2 από 4)
• Ο ταυτοχρονισμός είναι περίπλοκος
– Σε κάθε στιγμή μπορεί να έχουμε διακοπές
– Κίνδυνος αδιεξόδων και αγώνων δρόμου
• Οι χρήστες μπορεί να είναι εχθρικοί
– Κλοπή ή αλλοίωση στοιχείων άλλων χρηστών
– Κάθε χρήστης πρέπει να θεωρείται επικίνδυνος
• Πρέπει να επιτρέπεται ο καταμερισμός πόρων
– Παρά το ότι οι χρήστες μπορεί να είναι εχθρικοί!
13
Δυσκολίες (3 από 4)
• Μεγάλη διάρκεια ζωής
– Τα Windows (NT) έκλεισαν 2 δεκαετίες
– Οι παραλλαγές του UNIX ακόμη περισσότερες
– Κανείς δεν μπορεί να προβλέψει το μέλλον
• Ο τρόπος χρήσης είναι απρόβλεπτος
– Windows και UNIX δεν σχεδιάστηκαν για WWW
– Οι ανάγκες και οι κίνδυνοι αλλάζουν συνεχώς
• Δεν βοηθάει και η μακροβιότητα των συστημάτων
14
Δυσκολίες (4 από 4)
• Ανάγκη συμβατότητας με υλικό
– Χιλιάδες συσκευές εισόδου / εξόδου
– Αλλαγή του βασικού υλικού του συστήματος
– Μόνο η Apple ελέγχει στενά το υλικό
• Εν μέρει, αυτό εξηγεί τη σταθερότητα του OS X
• Ανάγκη αναδρομικής συμβατότητας
– Υποστήριξη παρωχημένων αφαιρέσεων
– Αύξηση μεγέθους και πολυπλοκότητας
15
Σχεδίαση διασυνδέσεων
Διασυνδέσεις
• Το ΛΣ καθορίζεται από τις διασυνδέσεις του
– Διασυνδέσεις για προγραμματιστές
• Η γραφική διεπαφή δεν περιλαμβάνεται
• Μπορεί να αλλάζει ανάλογα με τον χρήστη
– Διασυνδέσεις υψηλού επιπέδου
• Παράδειγμα: glibc, Win32, DirectX
– Διασυνδέσεις οδηγών συσκευών
• Παράδειγμα: VxD, WDM
17
Καθοδηγητικές αρχές
• Απλότητα
– Βοηθούν την κατανόηση και την υλοποίηση
• Πληρότητα
– Καλύπτουν όλες τις ανάγκες των χρηστών
– Αλλά: με τον ελάχιστον δυνατό μηχανισμό
• Υπάρχουν και βιβλιοθήκες επιπέδου χρήστη!
• Αποδοτικότητα
– Μόνο λειτουργίες με αποδοτική υλοποίηση
18
Υποδείγματα
• Δύο κατηγορίες πελατών
– Χρήστες προγραμμάτων εφαρμογών
– Προγραμματιστές εφαρμογών
• Σχεδίαση με βάση γραφική διεπαφή (Mac OS)
– Ξεκινάμε από τις λειτουργίες του χρήστη
• Καταλήγουμε σε μοντέλο οδηγούμενο από γεγονότα
• Σχεδίαση με βάση κλήσεις συστήματος (UNIX)
– Ξεκινάμε από τις ανάγκες των προγραμματιστών
19
Υποδείγματα διασυνδέσεων χρήστη
• Ποιο είναι το βασικό παράδειγμα/μεταφορά;
– Πρέπει να υποστηρίζεται από βιβλιοθήκες
• Ώστε όλες οι εφαρμογές να το υπηρετούν
• Διασύνδεση επιφάνειας γραφείου
– Υλοποιείται με το μοντέλο WIMP
– Βασίζεται στο ποντίκι
• Διασύνδεση αφής
• Διασύνδεση φωνής
20
21
Υποδείγματα εκτέλεσης (2 από 2)
• Οδηγούμενο από συμβάντα υπόδειγμα
– Αρχικοποίηση, αναμονή, εξυπηρέτηση
– Το ΛΣ παρέχει τα συμβάντα
22
Υποδείγματα δεδομένων
• Ταινίες με εγγραφές (FORTRAN)
– Αντιστοίχιση συσκευών σε λογικές ταινίες
• Αρχεία byte (UNIX)
– Σωληνώσεις, συσκευές, αρχεία
• Αντικείμενα (Windows)
– Χειριστήρια αντικειμένων με μεθόδους
• Έγγραφα (Παγκόσμιος Ιστός)
– Προσδιορίζονται με URL
23
Διασύνδεση κλήσεων (1 από 2)
• Το υπόδειγμα δεδομένων είναι σημαντικό
– Αν τα πάντα είναι αρχεία, χρειαζόμαστε μία read
• Πρέπει να είναι οι ελάχιστες δυνατές
– Η βιβλιοθήκη μπορεί να παρέχει παραλλαγές
• Οι execl/lp/le/v/vp/ve υλοποιούνται από την exec
– Γιατί να μην είναι περισσότερες;
• Παραπάνω κώδικας σημαίνει παραπάνω σφάλματα
– Αν είναι πολύ περίπλοκες, πρέπει να σπάσουν
• CreateProcess ή fork()/exec();
24
25
Υλοποίηση
• Πολυεπίπεδα συστήματα
– Ποια πρέπει να είναι τα επίπεδα;
– Οδηγοί συσκευών ως ανεξάρτητα νήματα
– Αρχεία πάνω από εικονική μνήμη
27
Δομή συστήματος (2 από 4)
• Εξωπυρήνες
– Βασίζονται στο επιχείρημα των άκρων
• Αν κάτι θα γίνει από τα άκρα, μην το κάνεις ενδιάμεσα
• Εκτός αν έτσι κερδίζεις σε απόδοση
– Το ΛΣ αρκεί να κατανέμει τους πόρους
• Παράδειγμα: να δίνει μπλοκ δίσκου στους χρήστες
– Οι αφαιρέσεις παρέχονται από βιβλιοθήκες
• Παράδειγμα: σύστημα αρχείων επιπέδου χρήστη
28
• Μικροπυρήνας
– Ο πυρήνας παρέχει ελάχιστη λειτουργικότητα
– Όλες οι υπηρεσίες παρέχονται από διεργασίες
• Οι οποίες λειτουργούν σε επίπεδο χρήστη για ασφάλεια
– Το πρόβλημα είναι η μείωση της απόδοσης
• Πολλές εναλλαγές περιεχομένου
29
Δομή συστήματος (4 από 4)
• Επεκτάσιμα συστήματα
– Προσθήκη υπομονάδων στον πυρήνα
• Το ΛΣ εξειδικεύεται σε συγκεκριμένη εφαρμογή
– Απαιτείται προστατευμένος τρόπος εκτέλεσης
• Αμμοπαγίδες ή υπογραφή κώδικα
• Νήματα πυρήνα
– Δεν ανήκουν σε διεργασίες χρήστη
– Επιτρέπουν καλύτερη δόμηση του πυρήνα
• Κατάλληλα για πολλά μοντέλα οργάνωσης
30
31
Μηχανισμός και πολιτική (2 από 2)
• Σελιδοποίηση
– Μηχανισμός: διαχείριση σφαλμάτων και δομών
– Πολιτική: αλγόριθμος αντικατάστασης
• Τοπικός ή καθολικός, LRU, FIFO, …
• Υπομονάδες
– Μηχανισμός: τρόπος φόρτωσης στον πυρήνα
– Πολιτική: ποιος μπορεί να φορτώσει μονάδες
• Και ποιες μονάδες μπορεί να φορτώσει
32
Ορθογωνικότητα
• Ελεύθερος συνδυασμός ανεξάρτητων εννοιών
– Παράδειγμα: βασικοί και δομημένοι τύποι
• Κλήση clone() στο Linux
– Ορίζουμε χωριστά τι θα γίνει για κάθε δομή
• Διεργασίες και νήματα στα Windows
– Διεργασία: πόροι, Νήμα: εκτέλεση
• Fork() και exec() στο UNIX
– Δημιουργία νέου και φόρτωση χώρου διευθύνσεων
33
Ονομασία (1 από 2)
• Οι περισσότερες δομές έχουν κάποιο όνομα
– Αρχεία, διεργασίες, συσκευές
• Εξωτερικά ονόματα: συμβολοσειρές
– Παράδειγμα: /usr/home/xgeorge
• Εσωτερικά ονόματα: αριθμοί
– Παράδειγμα: κόμβος i του /usr/home/xgeorge
– Τυπικά δείχνουν σε έναν πίνακα δομών
34
Ονομασία (2 από 2)
35
Χρόνος δέσμευσης
• Πότε δεσμεύεται το όνομα με αντικείμενο;
– Παράδειγμα: μεταβλητές στη C
• Καθολικές: πρώιμη, τοπικές: όψιμη
• Κατανομή μνήμης
– Παλιά κάθε πρόγραμμα δέσμευε στατικά μνήμη
– Με τη σελιδοποίηση η δέσμευση είναι δυναμική
• Παραθυρικά συστήματα
– Οι συντεταγμένες σχεδίασης είναι σχετικές
36
37
Στατικές ή δυναμικές δομές; (2 από 2)
• Στοίβα πυρήνα
– Πρέπει να καταχωρηθεί εκ των προτέρων
– Καταναλώνει χώρο μνήμης πυρήνα
• Χρονοπρογραμματισμός διεργασιών
– Στατικός σε συστήματα πραγματικού χρόνου
– Δυναμικός σε όλα τα άλλα
• Δομή πυρήνα
– Δυναμική προσθήκη ενοτήτων
– Εισάγει πρόσθετη πολυπλοκότητα
38
39
Χρήσιμες τεχνικές (1 από 6)
• Απόκρυψη του υλικού
– Πώς κάνουμε το υλικό να φαίνεται πιο απλό;
• Διαχείριση διακοπών
– Δημιουργία αναδυόμενου νήματος σε διακοπή
– Μετατροπή διακοπής σε mutex unlock
– Μετατροπή διακοπής σε μήνυμα προς νήμα
– Στόχος: χειρισμός διακοπών από σωστά νήματα
• Όχι από ό,τι έτυχε να εκτελείται εκείνη τη στιγμή
40
41
Χρήσιμες τεχνικές (3 από 6)
42
43
Χρήσιμες τεχνικές (5 από 6)
• Δυνατότητα επαναχρησιμοποίησης
– Η διαχείριση χαρτών bit χρειάζεται παντού
• Διαχείριση μπλοκ δίσκου, σελίδων μνήμης, κόμβων i
• Δυνατότητα επανεισόδου
– Ορθή ταυτόχρονη εκτέλεση του ίδιου κώδικα
• Απαιτεί προστασία των κοινών δομών
• Ελαχιστοποίηση απενεργοποίησης διακοπών
– Διευκολύνει την εκτέλεση με πολλούς πυρήνες
44
45
Απόδοση
47
Τι να βελτιστοποιήσουμε; (1 από 2)
• Αρχικά, μόνο τα προφανή!
– Παράδειγμα: να έχουμε κρυφή μνήμη μπλοκ
• Όταν λειτουργεί το σύστημα το μετράμε
– Πόσο γρήγορο και πόσο αποδοτικό είναι;
– Πόσο δύσκολο είναι να βελτιωθεί;
– Πόση βελτίωση περιμένουμε;
– Παράδειγμα: μορφοποίηση σκληρού δίσκου
• Εκτελείται τόσο σπάνια, που δεν αξίζει βελτιστοποίηση
48
Τι να βελτιστοποιήσουμε; (2 από 2)
• Υπάρχουν σημεία βελτιστοποίησης
– Χρονοπρογραμματιστής
• Εκτελείται μετά από κάθε διακοπή
– Αλγόριθμος προσκόμισης σελίδων
• Εκτελείται σε κάθε σφάλμα σελίδας
– Αλγόριθμος αντικατάστασης σελίδων
• Εκτελείται περιοδικά (όχι σε κάθε σφάλμα!)
– Αν είναι αρκετά καλοί, αυτό αρκεί
49
Χώρος έναντι χρόνου (1 από 4)
50
51
Χώρος έναντι χρόνου (3 από 4)
52
53
Κρυφή μνήμη (1 από 2)
54
55
Υποδείξεις
• Σαν κρυφή μνήμη, αλλά χωρίς συντήρηση
– Δεν είναι εγγυημένα σωστές
– Αν είναι όμως, γλυτώνουμε χρόνο
– Παράδειγμα: σύνδεσμοι σε ιστοσελίδες
• Αν αλλάξει μια ιστοσελίδα, δεν αλλάζουν οι σύνδεσμοι
• Σε κάποια στιγμή θα παρατηρήσουμε το πρόβλημα
• Θα το επιδιορθώσουμε με το χέρι
56
57
Βελτιστοποίηση πιθανού (1 από 2)
• Πόσο πιθανό είναι κάθε αποτέλεσμα;
– Αξίζει να βελτιστοποιήσουμε το πιο πιθανό
– Τα ελάχιστα πιθανά δεν αξίζουν τον κόπο
• Κρίσιμες περιοχές σε Windows
– Κλήση EnterCriticalSection σε Win32
• Τις περισσότερες φορές πετυχαίνει άμεσα
• Αρχικά κάνει έλεγχο σε επίπεδο χρήστη με TSL
• Αν δεν πετύχει, κάνει down σε σηματοφόρο
58
59
Διαχείριση έργων
61
Ο μυθικός ανθρωπομήνας (2 από 3)
• Κατανομή χρόνου υλοποίησης ΛΣ
– 1/3 σχεδίαση
– 1/6 κωδικοποίηση
– 1/4 έλεγχος μονάδων
– 1/4 έλεγχος συστήματος
– Το κόστος δεν είναι η κωδικοποίηση!
• Ο χρόνος δεν είναι εναλλάξιμος με ανθρώπους
– Έστω ότι ένα έργο θέλει 10 άτομα για 2 χρόνια
– Δεν σημαίνει ότι γίνεται με 20 άτομα σε 1 χρόνο
62
64
65
Ο ρόλος της πείρας (1 από 2)
66
67
Όχι ασημένιες σφαίρες
• Κλασικό άρθρο του Fred Brooks
– Συνέχεια προτείνονται «λύσεις» για το λογισμικό
• Γλώσσες υψηλότερου επιπέδου
• Αντικειμενοστρεφής προγραμματισμός
• Επαλήθευση λογισμικού
– Καμία δεν έχει βελτιώσει θεαματικά τα πράγματα
• Δεν είναι ασημένια σφαίρα που θα σκοτώσει το τέρας!
– Οι βελτιώσεις είναι πολύ πιο σταδιακές
• Αυτό δεν σημαίνει ότι δεν τις θέλουμε!
68
Σχεδιαστικές τάσεις
Εικονικοποίηση
• Η εικονικοποίηση κυριαρχεί
– Μεγάλη εξέλιξη σε υπερεπόπτες γυμνού υλικού
– Τροποποίηση των ΛΣ ώστε να εικονικοποιούνται
– Προσθήκη υλικού ειδικά για εικονικοποίηση
70
Πολυπύρηνοι επεξεργαστές
• Τα παραδοσιακά ΛΣ υποθέτουν έναν πυρήνα
– Κλειδώνουν μεγάλα μέρη του ΛΣ
– Δεν είναι επανεισαγόμενα σε μεγάλο βαθμό
– Χρειάζεται πολύ δουλειά για να βελτιωθούν
• Αξιοποίηση πυρήνων για εικονικοποίηση
– Ένα ΛΣ είναι δύσκολο να αξιοποιήσει 64 πυρήνες
– Μπορούν να καταμεριστούν σε εικονικές μηχανές
71
Μεγάλοι χώροι διευθύνσεων
• Τι μπορεί να γίνει με διευθύνσεις 64 bit;
– Κατάργηση του συστήματος αρχείων
• Όλα τα δεδομένα είναι στην εικονική μνήμη
• Η αποθήκευση είναι μόνο χώρος ανταλλαγής
– Μόνιμη αποθήκη αντικειμένων
• Διατήρηση όλων στην εικονική μνήμη
• Διαγραφή όταν δεν αναφέρονται πια
– Χρειάζονται όμως και νέες υλοποιήσεις
• Όπως οι ανεστραμμένοι πίνακες σελίδων
72
Δικτύωση
• Η δικτύωση προστίθεται εκ των υστέρων
– Σαφής διάκριση τοπικών/μη τοπικών δεδομένων
• Ανάγκη χρήσης διαφορετικών πρωτοκόλλων
• Θα μπορούσαμε να έχουμε δικτυακά ΛΣ
– Που δεν θα λειτουργούν χωρίς δίκτυο
– Ενιαίος χειρισμός όλων των δεδομένων
– Απευθείας πρόσβαση σε όλο τον ιστό
– Οργάνωση των δεδομένων ως ιστοσελίδες
73
Παράλληλα και κατανεμημένα
• Παράλληλα συστήματα
– Τα πολυπύρηνα συστήματα είναι παράλληλα
– Ακόμη πιο σύνθετη η διαχείριση πολλών ΚΜΕ
– Χρειάζεται δουλειά σε ΛΣ και εφαρμογές
• Κατανεμημένα συστήματα
– Καταμερισμός έργου σε πολλές μηχανές
– Απόκρυψη καθυστερήσεων και σφαλμάτων
– Ενσωμάτωση κατανεμημένων μηχανισμών στο ΛΣ
74
Πολυμέσα
• Οι συσκευές πολυμέσων γίνονται έξυπνες
– Τηλεοράσεις, media players
• Αλλά και οι υπολογιστές γίνονται πολυμεσικοί
– Home theater PCs
• Και τα δύο θέλουν δουλειά
– Διαχείριση τεράστιων όγκων δεδομένων
– Μικτός χρονοπρογραμματισμούς
• Πραγματικού και μη πραγματικού χρόνου
– Βελτίωση αξιοπιστίας και ανθεκτικότητας
75
Υπολογιστές με μπαταρία
• ΛΣ για πραγματικά φορητές συσκευές
– Android, iOS, Chrome OS
– Παρόμοια αλλά όχι ίδια με Linux και OS X
– Διαφορετικά μοντέλα λειτουργίας
• Μία ενεργή εφαρμογή στην οθόνη
• Γρήγορο πάγωμα και ξεπάγωμα εργασιών
• Υποβάθμιση λειτουργίας για οικονομία
• Λειτουργία με ή χωρίς δίκτυο
76
Ενσωματωμένα συστήματα
• Συστήματα με συγκεκριμένο σκοπό
– Δεν επεκτείνονται με συσκευές
– Δεν εκτελούν τυχαίες διεργασίες
– Χαμηλό κόστος αλλά προβλέψιμη απόδοση
• Πώς θα διευκολυνθεί η συγγραφή τους;
– Εξωπυρήνες: πολύ ελαφρά ΛΣ
– Επεκτάσιμα συστήματα με βάση μικροπυρήνες
77
Κόμβοι αισθητήρων
• Εξαιρετικά απλά συστήματα
• Ανάγκη για μεγάλη διάρκεια μπαταρίας
• Χρησιμοποιούν πολύ απλά ΛΣ
– Εξειδικευμένα ΛΣ αισθητήρων (Tiny OS)
• Σταδιακά θα περάσουν σε άλλα ΛΣ
– Πιθανόν εξωπυρήνες και επεκτάσιμα ΛΣ
– Ιδέες από ενσωματωμένα και φορητά ΛΣ
78