You are on page 1of 580

Λειτουργικά Συστήματα

Διδάσκων: Γεώργιος Ξυλωμένος


Τμήμα: Πληροφορικής

Ενότητα # 1: Εισαγωγή
Σκοποί ενότητας
• Κατανόηση των στόχων και της ιστορικής
εξέλιξης των λειτουργικών συστημάτων (ΛΣ)
• Επισκόπηση του υλικού υπολογιστών
• Κατανόηση των τύπων των ΛΣ
• Παρουσίαση των βασικών εννοιών και των
τυπικών κλήσεων των ΛΣ
• Παρουσίαση των τρόπων δόμησης ΛΣ
• Εισαγωγή στη γλώσσα C
4

Περιεχόμενα ενότητας
• Tι είναι το λειτουργικό σύστημα (ΛΣ);
• Ιστορία ΛΣ
• Υλικό υπολογιστών
• Είδη ΛΣ
• Έννοιες ΛΣ
• Κλήσεις συστήματος
• Δομή ΛΣ
• Η γλώσσα C
5
Τι είναι το λειτουργικό σύστημα;

Τι είναι το ΛΣ (1 από 3);


• Ένας υπολογιστής έχει πολλούς πόρους
– Επεξεργαστές, μνήμες, δίσκους, εκτυπωτές, …
• Λειτουργικό σύστημα (ΛΣ)
– Διαχείριση των πόρων του υπολογιστή
• Χρονοπρογραμματισμός, έλεγχος πρόσβασης, …
– Παροχή διεπαφής προς τον προγραμματιστή
• Όχι προς τον απλό χρήστη!
– Το ίδιο ΛΣ μπορεί να έχει πολλές διεπαφές

7
Τι είναι το ΛΣ (2 από 3);

• Καταστάσεις λειτουργίας υπολογιστή


– Κατάσταση πυρήνα ή επόπτη: λειτουργικό σύστημα
– Κατάσταση χρήστη: διεπαφή χρήστη και εφαρμογές
• Δεν επιτρέπεται η εκτέλεση ορισμένων εντολών

Τι είναι το ΛΣ (3 από 3);


• Τι ακριβώς περιλαμβάνει το λειτουργικό σύστημα;
– Βασικό λογισμικό που εκτελείται σε κατάσταση πυρήνα
– Πιθανόν και προνομιούχο λογισμικό επιπέδου χρήστη
• Γιατί μελετάμε τα λειτουργικά συστήματα χωριστά;
– Πολύ πιο περίπλοκα από τα προγράμματα εφαρμογών
– Δύσκολο να γραφτούν νέα λόγω πολυπλοκότητας
• Κύρια λειτουργικά συστήματα
– UNIX και απόγονοι: Linux, xBSDy, OSX
– MS-DOS και απόγονοι έως Windows ME
– Windows NT και απόγονοι έως Windows 8

9
Η επεκτεταμένη μηχανή (1 από 2)
• Όψη του λειτουργικού συστήματος από πάνω
– Μετατροπή μιας άσχημης εικόνας σε πιο όμορφη
• Το υλικό των υπολογιστών είναι περίπλοκο
– Κάθε συσκευή έχει τις δικές τις ιδιαιτερότητες

10

Η επεκτεταμένη μηχανή (2 από 2)


• Το λειτουργικό σύστημα παρέχει λογικές αφαιρέσεις
– Κάθε είδος δίσκου είναι πολύ διαφορετικό
– Το λειτουργικό σύστημα μας παρουσιάζει λογικά αρχεία
– Μετατροπή εντολών αρχείων σε εντολές προς το δίσκο
• Σε ποιον παρέχεται η λογική αφαίρεση;
– Κυρίως στους προγραμματιστές των εφαρμογών
• Πρόκειται για διεπαφή προγραμματισμού
– Οι χρήστες συνήθως βλέπουν τη διεπαφή χρήστη
• Πρόκειται για γραμμή εντολών ή γραφικό περιβάλλον

11
Ο διαχειριστής πόρων
• Όψη του λειτουργικού συστήματος από κάτω
– Διαχείριση των διάφορων πόρων ενός συστήματος
– Μας ενδιαφέρει η αποδοτική διαχείριση των πόρων
• Δυνατότητα ταυτόχρονης εκτέλεσης προγραμμάτων
– Κάθε πρόγραμμα θεωρεί ότι έχει τη δική του μηχανή
• Διαχείριση και προστασία μνήμης και συσκευών
• Πολύπλεξη πόρων σε δύο άξονες
– Χρόνος: διαδοχική χρήση ΚΜΕ από τα προγράμματα
– Χώρος: συνύπαρξη προγραμμάτων στη μνήμη

12

Ιστορία ΛΣ
Ιστορία ΛΣ (1 από 10)
• Πρώτη γενιά (1945-1955): λυχνίες κενού
– Παράδειγμα: ENIAC, UNIVAC
– Προγραμματισμός από τους σχεδιαστές
– Απόλυτη γλώσσα μηχανής ή πίνακες καλωδιώσεων
– Σχετικά απλές μηχανές με απλές λειτουργίες
– Δεν υπήρχε λειτουργικό σύστημα
• Χρήση διάτρητων καρτών για προγραμματισμό
– Αρχικά χρήση για είσοδο δεδομένων
– Αντικατέστησε τους πίνακες καλωδιώσεων

14

Ιστορία ΛΣ (2 από 10)


• Δεύτερη γενιά (1955-1965): τρανζίστορ
– Μηχανές αρκετά αξιόπιστες έτσι ώστε να πωλούνται
– Οι προγραμματιστές δεν είναι πια οι σχεδιαστές
– Μεγάλα υπολογιστικά συστήματα (mainframes)
• Υποβολή και εκτέλεση εργασιών (jobs)
– Κάθε εργασία αποτελείται από μια σειρά κάρτες
– Ο προγραμματιστής δίνει τις κάρτες στο χειριστή
– Ο χειριστής υποβάλει τις εργασίες με τη σειρά
– Σημαντικός χρόνος αδράνειας του υπολογιστή

15
Ιστορία ΛΣ (3 από 10)
• Αυτοματοποίηση συστημάτων δέσμης
– Αντιγραφή εργασιών σε ταινίες σε μικρό υπολογιστή
– Υποβολή ταινίας με εργασίες στον μεγάλο υπολογιστή
– Έξοδος αποτελεσμάτων σε άλλη ταινία
– Εκτύπωση αποτελεσμάτων σε μικρό υπολογιστή

16

Ιστορία ΛΣ (4 από 10)


• Λειτουργικά συστήματα δέσμης
– Ειδικές κάρτες ελέγχου μιας εργασίας ($)
– Κάρτες προγράμματος και δεδομένων

17
Ιστορία ΛΣ (5 από 10)
• Τρίτη γενιά (1965-1980): ολοκληρωμένα κυκλώματα
– Αντικατάσταση τρανζίστορ με κυκλώματα SSI
– Προσανατολισμός σε συγκεκριμένες εφαρμογές
• Οικογένεια υπολογιστών
– Ιδέα της IBM με το System/360
– Μηχανές με ίδια αρχιτεκτονική και σύνολο εντολών
– Διαφορετικές δυνατότητες και κόστος
– Ίδια προγράμματα (εντός λογικών πλαισίων)
– Χρειάζεται και το ίδιο λειτουργικό σύστημα
– Εξαιρετικά περίπλοκο λόγω των διαφορετικών μηχανών

18

Ιστορία ΛΣ (6 από 10)


• Πολυπρογραμματισμός
– Ψευδοταυτόχρονη λειτουργία πολλών εργασιών
– Κάθε εργασία βρίσκεται σε χωριστό μέρος τη μνήμης
– Όταν μια εργασία περιμένει, εκτελείται κάποια άλλη
– Ταυτόχρονη επεξεργασία και είσοδος/έξοδος (spooling)
– Χρειάζεται ειδικό υλικό προστασίας των εργασιών

19
Ιστορία ΛΣ (7 από 10)
• Χρονομερισμός
– Βασίζεται στην πολυπρογραμματισμό
– Κάθε χρήστης έχει το δικό του τερματικό
– Το σύστημα εξυπηρετεί τους χρήστες ψευδοταυτόχρονα
• Το σύστημα MULTICS
– Παροχή υπολογιστικής ισχύος από κεντρικό υπολογιστή
– Όπως το cloud computing αλλά με έναν υπολογιστή!
• Τα συστήματα DEC PDP
– Μικροί και (σχετικά οικονομικοί) υπολογιστές
– Μεγάλη εξάπλωση σε περισσότερους οργανισμούς

20

Ιστορία ΛΣ (8 από 10)


• MULTICS+PDP = UNIX
– Επηρέασε όλα τα μεταγενέστερα συστήματα
– Το UNIX εξελίχθηκε σε System V και BSD
– Το MINIX γράφτηκε για εκπαιδευτικούς σκοπούς
• Μικροπυρήνας και έμφαση στην απλότητα
• Στόχος: ένα UNIX που να το καταλαβαίνουν οι φοιτητές
– Το Linux γράφτηκε ως πρακτική έκδοση του MINIX
• Μονολιθικός πυρήνας και έμφαση στη λειτουργικότητα
• Στόχος: ένα UNIX που να κάνει οποιαδήποτε δουλειά

21
Ιστορία ΛΣ (9 από 10)
• Τέταρτη γενιά (1980-): προσωπικοί υπολογιστές
– Χρήση κυκλωμάτων VLSI με τεράστιες δυνατότητες
– Δυνατότητα τοποθέτησης ΚΜΕ σε ένα κύκλωμα
– Εμφάνιση προσωπικών υπολογιστών
• ΛΣ προσωπικών υπολογιστών
– Το CP/M γράφτηκε για τον 8080 και μετά τον Z80
– Το MS-DOS γράφτηκε για τον 8088/8086
• Αρχικά σαν το CP/M, μετά με ιδέες από το UNIX
– Εμφάνιση υπολογιστών με γραφικές διεπαφές

22

Ιστορία ΛΣ (10 από 10)


• Τα παλιά Microsoft Windows
– Γραφική διεπαφή πάνω από το MS-DOS
– Windows 3, 95, 98, Me
• Τα νέα Microsoft Windows
– Υλοποίηση από την αρχή ξεκινώντας από τα Windows NT
– Windows 2000, XP, 7
• Τα συστήματα UNIX
– Προσθήκη γραφικής διεπαφής: X Window System
– Πολύ μεγάλη εξάπλωση του Linux
– Το UNIX (τύπου BSD) αντικατέστησε και το αρχικό Mac OS

23
Υλικό υπολογιστών

ΛΣ και υλικό

• Λειτουργικό σύστημα και υλικό


– Το λειτουργικό σύστημα παρέχει εκτεταμένη μηχανή
– Πρέπει όμως να κατανοεί την πραγματική μηχανή
– Βασική δομή υπολογιστικού συστήματος
25
Επεξεργαστής (1 από 4)
• Επεξεργαστής
– Βασικός κύκλος λειτουργίας
• Προσκόμιση, αποκωδικοποίηση, τελεστές, εκτέλεση
– Καταχωρητές δεδομένων
• Αποθήκευση δεδομένων για γρήγορη πρόσβαση
– Καταχωρητές ελέγχου
• Μετρητής προγράμματος, δείκτης στοίβας, κατάσταση
– Αποθήκευση καταχωρητών κατά την εναλλαγή
• Λειτουργία με αρκετά μεγάλο κόστος

26

Επεξεργαστής (2 από 4)

• Σωλήνωση
– Χωριστές μονάδες για κάθε στάδιο εκτέλεσης
– Εκτέλεση διαφορετικής εντολής σε κάθε ομάδα
• Υπερβαθμωτοί επεξεργαστές
– Πολλαπλές μονάδες εκτέλεσης
– Προσκόμιση και αποκωδικοποίηση πολλών εντολών
– Εκτέλεση εντολών και εκτός σειράς
27
Επεξεργαστής (3 από 4)
• Καταστάσεις λειτουργίας επεξεργαστή
– Κατάσταση χρήστη και κατάσταση πυρήνα
– Σε κατάσταση χρήστη επιτρέπεται υποσύνολο εντολών
• Κλήσεις συστήματος
– Εντολές που προκαλούν παγίδα υλικού
– Μετάβαση σε κατάσταση πυρήνα με ελεγχόμενο τρόπο
• Πολυνηματικοί και πολυπύρηνοι επεξεργαστές
– Πολλοί τρόποι αξιοποίησης διαθέσιμων τρανζίστορ
– Κρυφή μνήμη, πολλαπλές μονάδες εκτέλεσης
– Γιατί όχι και πολλές μονάδες ελέγχου;

28

Επεξεργαστής (4 από 4)

• Πολυνηματικοί και πολυπύρηνοι επεξεργαστές


– Πολυνημάτωση: εκτέλεση πολλών νημάτων
– Πολυπύρηνος επεξεργαστής: ανεξάρτητες CPU
• Κανονική πολυεπεξεργασία σε ένα ολοκληρωμένο
29
Μνήμη (1 από 2)

• Μνήμη και ιεραρχία μνήμης


– Κάθε τύπος μνήμης παρέχει έναν συμβιβασμό
– Ταχύτητα έναντι κόστους (άρα και μεγέθους)
– Μνήμη ROM (ή EEPROM και Flash) για βασικό λογισμικό
– Μνήμη CMOS για διάρθρωση συστήματος
30

Μνήμη (2 από 2)
• Κρυφές μνήμες
– Οργανώνονται και αυτές ιεραρχικά
– Γενικά θέματα οργάνωσης κρυφών μνημών
– Πολιτικές προσκόμισης, τοποθέτησης, αντικατάστασης
• Κρυφή μνήμη επιπέδου 1 (L1)
– Στο εσωτερικό του επεξεργαστή
– Συνήθως χωριστή για εντολές και δεδομένα
• Κρυφή μνήμη επιπέδου 2 (L2)
– Εντός ή εκτός επεξεργαστή
– Κοινή ή καταμεριζόμενη ανάμεσα στους πυρήνες

31
Αποθήκευση

• Μαγνητικοί δίσκοι
– Τροχιές/κύλινδροι, επιφάνειες, τομείς
– Αρκετός χρόνος μέχρι να βρεθεί το σωστό σημείο
– Αποθήκευση δεδομένων και προγραμμάτων
32

Είσοδος / Έξοδος (1 από 2)


• Συσκευές εισόδου/εξόδου
– Ελεγκτής και πραγματική συσκευή
– Ο ελεγκτής παρουσιάζει απλούστερη διεπαφή
– Οδηγός συσκευής: λογισμικό για τον ελεγκτή
– Επικοινωνία με τους ελεγκτές των συσκευών
• Απεικόνιση καταχωρητών στη μνήμη
• Χωριστές εντολές εισόδου/εξόδου
– Έλεγχος συσκευών: polling, interrupts, DMA
33
Είσοδος / Έξοδος (2 από 2)

• Είσοδος/έξοδος με διακοπές
– Ο ελεγκτής διακόπτει την CPU όταν ολοκληρώσει
– Μεταφορά ελέγχου στο κατάλληλο σημείο της μνήμης
• Είσοδος/έξοδος με DMA
– Ο ελεγκτής μεταφέρει ο ίδιος τα δεδομένα στη μνήμη
34

Δίαυλοι (1 από 2)

• Λεωφόροι (δίαυλοι) συστήματος


35
Δίαυλοι (2 από 2)
• Δίαυλοι συστήματος
– Επικοινωνία με κρυφή μνήμη με ειδικό δίαυλο
– Τοπικός δίαυλος για επικοινωνία με το σύστημα
– Γέφυρα PCI για επικοινωνία με μνήμη ή συσκευές
– Δίαυλος PCI/PCI Express για τις περισσότερες συσκευές
– Γέφυρα ISA για χρήση διαύλου ISA (παλιές συσκευές)
– Δίαυλος USB για (αργές) σειριακές συσκευές
– Δίαυλος SCSI για (γρήγορους) δίσκους
– Δίαυλος SATA για πιο οικονομικούς δίσκους
– Τοποθέτηση και άμεση λειτουργία (plug and play)

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)

• Παράδειγμα δενδρικής οργάνωσης αρχείων


47
Αρχεία (3 από 4)

• Όνομα διαδρομής αρχείου


– Απόλυτο: ξεκινάει από τη ρίζα
– Σχετικό: ξεκινάει από τον κατάλογο εργασίας
• Ανάρτηση συστημάτων αρχείων
– Εκκίνηση με το βασικό σύστημα αρχείων
– Ανάρτηση πρόσθετων συστημάτων ανάλογα με τις ανάγκες
48

Αρχεία (4 από 4)

• Ειδικά αρχεία
– Απεικόνιση των συσκευών σε αρχεία
– Ειδικά αρχεία μπλοκ ή ομάδων
• Συσκευές με τυχαία προσπελάσιμα μπλοκ (π.χ. δίσκοι)
– Ειδικά αρχεία χαρακτήρων
• Συσκευές με ρεύματα χαρακτήρων (π.χ. πληκτρολόγια)
• Αγωγοί ή σωληνώσεις (pipes)
– Ψευδοαρχείο ανάμεσα σε δύο διεργασίες
– Επιτρέπει την επικοινωνία των διεργασιών
49
Άλλες έννοιες
• Είσοδος/έξοδος
– Υποσύστημα διαχείρισης συσκευών εισόδου/εξόδου
– Οδηγοί συσκευών ανά κατηγορία συσκευής
• Προστασία
– Μηχανισμός που προστατεύει τα στοιχεία των διεργασιών
– Παράδειγμα: bit προστασίας στο UNIX
• Κέλυφος
– Δεν είναι μέρος του λειτουργικού (αλλάζει «εύκολα»)
– Επιτρέπει στον χρήση να επικοινωνεί με το λειτουργικό
– Γραμμή εντολών ή γραφική διεπαφή

50

Ανακύκλωση ιδεών (1 από 3)


• Υπολογιστές και ΛΣ ανακυκλώνουν ιδέες
– Οι αλλαγές στην τεχνολογία οδηγούν σε νέες ιδέες
– Οι παλιές ιδέες επανέρχονται μετά από άλλες αλλαγές
– Δεν υπάρχουν απαρχαιωμένες, μόνο μη επίκαιρες ιδέες
• Υλοποίηση CPU
– Αρχικά καλωδιωμένη (πιο απλή)
– Στη συνέχεια μικροπρογραμματιζόμενη (πιο ευέλικτη)
– Μετά πάλι καλωδιωμένη (πιο αποδοτική)
– Η Java μοιάζει με την μικροπρογραμματιζόμενη εκτέλεση

51
Ανακύκλωση ιδεών (2 από 3)
• Μεγάλες μνήμες
– Οι μεγάλοι υπολογιστές ξεκίνησαν με πολύ μικρές μνήμες
– Όλα τα προγράμματα σε συμβολική γλώσσα
– Η αύξηση μνήμης οδήγησε στους μεταγλωττιστές
– Οι μίνι/μίκρο-υπολογιστές γύρισαν σε συμβολική γλώσσα
• Υλικό προστασίας
– Οι μεγάλοι υπολογιστές δεν είχαν υλικό προστασίας
– Τα ΛΣ δεν είχαν πολυπρογραμματισμό
– Το υλικό προστασίας επέτρεψε πολυπρογραμματισμό
– Το ίδιο έγινε με μίνι/μίκρο-υπολογιστές

52

Ανακύκλωση ιδεών (3 από 3)


• Δίσκοι
– Οι δίσκοι έφεραν τα συστήματα αρχείων
– Αρχικά ενιαίος κατάλογος για όλο το σύστημα
– Στη συνέχεια ένας κατάλογος ανά χρήστη
– Τελικά δενδρικές και άλλες δομές
– Ίδια ακριβώς εξέλιξη σε μίνι/μίκρο-υπολογιστές
• Εικονική μνήμη
– Έγινε δυνατή με ειδικό υλικό απεικόνισης και προστασίας
– Αρχικά μόνο σε μεγάλους υπολογιστές
– Στη συνέχεια σε μίνι/μίκρο-υπολογιστές

53
Κλήσεις συστήματος

Κλήσεις συστήματος (1 από 3)


• Οι δύο σκοποί των λειτουργικών συστημάτων
– Διαχείριση πόρων: αόρατη στις διεργασίες
– Παροχή αφαιρέσεων: (πολύ) ορατή στα προγράμματα
• Διασύνδεση προγραμμάτων με το ΛΣ
– Χρήση του POSIX (UNIX) ως παράδειγμα
– Περιγράφεται με μία σειρά κλήσεων βιβλιοθήκης
• Τα δύο είδη κλήσεων δεν έχουν απόλυτη αντιστοιχία
– Οι κλήσεις αυτές ενθυλακώνουν τις κλήσεις συστήματος
• Μετάβαση από κατάσταση χρήστη σε κατάσταση συστήματος
• Εκτέλεση εργασίας και επιστροφή σε κατάσταση χρήστη

55
Κλήσεις συστήματος (2 από 3)

• Παράδειγμα: count=read(fd,&buffer,nbytes);
56

Κλήσεις συστήματος (3 από 3)


• Βήματα 1-3: τοποθέτηση παραμέτρων στη στοίβα
• Βήμα 4: κλήση διαδικασίας read
• Βήμα 5: προετοιμασία παραμέτρων κλήσης
• Βήμα 6: χρήση εντολής TRAP για την κλήση
• Βήμα 7: μετάβαση σε χειριστή κλήσης
• Βήμα 8: εκτέλεση ζητούμενης εργασίας
• Βήμα 9: επιστροφή στην εντολή μετά την TRAP
• Βήμα 10: επιστροφή στον καλούντα
• Βήμα 11: καθάρισμα στοίβας

57
Διαχείριση διεργασιών (1 από 3)

• Κλήσεις διαχείρισης διεργασιών


– fork(): δημιουργεί αντίγραφο της τρέχουσας διεργασίας
• Επιστρέφει τον αριθμό του παιδιού στον πατέρα και 0 στο παιδί
– waitpid(): αναμονή μέχρι να τερματίσει ένα παιδί
• Επιστρέφει αριθμό διεργασίας και κατάσταση εξόδου
– execve(): αντικαθιστά τον κώδικα μιας διεργασίας
– exit (): τερματισμός τρέχουσας διεργασίας
58

Διαχείριση διεργασιών (2 από 3)

• Παράδειγμα: ένας απλός φλοιός (shell)


– Ανάγνωση εντολής, δημιουργία παιδιού για εκτέλεση
– Ο πατέρας περιμένει το παιδί επαναλαμβάνει
59
Διαχείριση διεργασιών (3 από 3)

• Χάρτης μνήμης διεργασίας στο UNIX


– Κώδικας, δεδομένα και στοίβα
• Παράμετροι εκτέλεσης διεργασιών (argc, argv, envp)
– argc, argv: πλήθος παραμέτρων και δείκτες σε αυτές
– envp: δείκτες σε μεταβλητές περιβάλλοντος
60

Διαχείριση αρχείων (1 από 4)

• Κλήσεις διαχείρισης αρχείων


– open(): άνοιγμα ή δημιουργία αρχείου
– close(): κλείσιμο αρχείου
– read()/write(): ανάγνωση/εγγραφή αρχείου
– lseek(): μετακίνηση σημείου ανάγνωσης/εγγραφής
– stat(): ανάγνωση μεταδεδομένων αρχείου
61
Διαχείριση αρχείων (2 από 4)

• Διαχείριση καταλόγων
– mkdir(): δημιουργία νέου καταλόγου
– rmdir(): διαγραφή καταλόγου (πρέπει να είναι κενός)
– link(): δημιουργία συνδέσμου προς αρχείο/κατάλογο
– unlink(): διαγραφή συνδέσμου ή αρχείου
– (u)mount(): ανάρτηση/απομάκρυνση συστήματος αρχείων
62

Διαχείριση αρχείων (3 από 4)

• Λειτουργία των συνδέσεων


– Παράδειγμα: link(“/usr/jim/memo”,“/usr/ast/note”);
– Στον /usr/ast εμφανίζεται το αρχείο /usr/jim/memo
– Στο UNIX κάθε αρχείο αντιπροσωπεύεται από έναν κόμβο i
– Η link() εισάγει δείκτη προς υπάρχοντα κόμβο i
– Το αρχείο διαγράφεται όταν γίνει unlink() από παντού
63
Διαχείριση αρχείων (4 από 4)

• Λειτουργία της ανάρτησης


– mount(“/dev/hda”,“/mnt”,0);
– Ανάρτηση του σκληρού δίσκου /dev/hda κάτω από το /mnt
– Το σύστημα αρχείων του δίσκου είναι ορατό
– Το σύστημα ξεκινάει με ένα ριζικό σύστημα αρχείων
– Στη συνέχεια αναρτώνται πρόσθετα συστήματα αρχείων
64

Διάφορες κλήσεις

• chdir(): αλλαγή καταλόγου εργασίας


• chmod(): αλλαγή προνομίων πρόσβασης
– Read/write/execute για user/group/others
• kill(): αποστολή σήματος σε διεργασία
– Τα σήματα που δεν συλλαμβάνονται σκοτώνουν τον
παραλήπτη
• time(): επιστρέφει την τρέχουσα ώρα
– Χρονικό διάστημα από μια σταθερή χρονική στιγμή
65
Windows και UNIX
• Το μοντέλο προγραμματισμού Windows διαφέρει
– Επικεντρώνεται στα γεγονότα από το περιβάλλον
• Η βασική διεπαφή είναι το Win32 API
– Η διεπαφή χρησιμοποιείται σε πολλές εκδόσεις Windows
– Η ανάγκη συμβατότητας κάνει τη διεπαφή ασυνεπή
– Τα Windows έχουν πολλά API και χιλιάδες κλήσεις
• Πολλές κλήσεις δεν αντιστοιχούν σε κλήσεις συστήματος
• Ορισμένες διαφορές των Windows από το UNIX
– Η δημιουργία νέας διεργασίας θέλει ένα μόνο βήμα
– Παρέχεται μία κλήση για αναμονή πολλών συμβάντων

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)

• Η επιστροφή: εικονικοποίηση χωρίς ειδικό υλικό


– VMware: δυαδική μετάφραση κώδικα του λειτουργικού
– XEN: τροποποίηση του κώδικα του λειτουργικού
• Δύο τύποι υπερεπόπτη
– Τύπου 1: εκτελείται απευθείας πάνω στο υλικό
– Τύπου 2: εκτελείται μέσα σε ένα λειτουργικό σύστημα
73
Δομή ΛΣ (7 από 7)
• Εικονική μηχανή Java
– Εικονικοποίηση σε επίπεδο λογισμικού
– Ο κώδικας της Java εκτελείται σε μια εικονική μηχανή
• Εξωπυρήνες
– Διαμέριση των πόρων ανάμεσα σε εικονικές μηχανές
• Κάθε χρήστης παίρνει μέρος του δίσκου και της μνήμης
– Κάθε εικονική μηχανή γνωρίζει ότι έχει μέρος των πόρων
• Στην εικονικοποίηση νομίζει ότι έχει ολόκληρη τη μηχανή
– Πολύ απλούστερη υλοποίηση του εξωπυρήνα
• Δεν χρειάζεται μετάφραση εικονικών σε φυσικούς πόρους

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

Ενότητα # 2: Διεργασίες και Νήματα


Σκοποί ενότητας
• Κατανόηση της έννοιας της διεργασίας και
του νήματος εκτέλεσης
• Κατανόηση των διακριτών ρόλων των
διεργασιών και των νημάτων
• Εξοικείωση με τους μηχανισμούς
διαδιεργασιακής επικοινωνίας
• Κατανόηση των βασικών αλγορίθμων
χρονοπρογραμματισμού του επεξεργαστή
4

Περιεχόμενα ενότητας
• Διεργασίες
• Νήματα
• Διαδιεργασιακή επικοινωνία
• Χρονοπρογραμματισμός
• Κλασικά προβλήματα

5
Διεργασίες

Το μοντέλο της διεργασίας (1 από 3)


• Διεργασία (process)
– Σε κάθε ΛΣ έχουμε πολλές διεργασίες ταυτόχρονα
• Εξυπηρετητής: πολλές διεργασίες εξυπηρέτησης
• Πελάτης: φυλλομετρητής, αντι-ιικό, εκτύπωση
– Ψευδο-ταυτόχρονη εκτέλεση σε μία ΚΜΕ
• Γρήγορη εναλλαγή διεργασιών
• Ο προγραμματιστής δεν ασχολείται με τον ταυτοχρονισμό
– Μοντέλο ακολουθιακής διεργασίας
• Εκτελούμενο πρόγραμμα: δεδομένα, καταχωρητές, μετρητής
• Η εναλλαγή διεργασιών ονομάζεται πολυπρογραμματισμός

7
Το μοντέλο της διεργασίας (2 από 3)

• Μοντέλο διεργασίας
– Οι διεργασίες φαίνεται ότι εκτελούνται ανεξάρτητα
– Κάθε ΚΜΕ όμως ασχολείται με μία διεργασία τη φορά
– Η ταχύτητα εκτέλεσης των διεργασιών είναι απρόβλεπτη
• Εξαρτάται από τον τρόπο εναλλαγής των διεργασιών
• Μπορεί να αλλάζει σε κάθε εκτέλεση
8

Το μοντέλο της διεργασίας (3 από 3)


• Παρενέργειες της ψευδο-ταυτόχρονης εκτέλεσης
– Δεν κάνουμε ποτέ υποθέσεις για την ταχύτητα εκτέλεσης
• Το εκτελούμενο πρόγραμμα μπορεί να αλλάξει οποτεδήποτε
• Διάκριση προγράμματος και διεργασίας
– Το πρόγραμμα είναι μία συνταγή, η διεργασία η εκτέλεση
– Το ίδιο πρόγραμμα μπορεί να εκτελείται ταυτόχρονα
• Ο φλοιός εκτελείται από πολλούς χρήστες ταυτόχρονα
• Δημιουργία διεργασιών
– Σε κλειστά συστήματα οι διεργασίες δημιουργούνται μαζί
– Γενικά όμως οι διεργασίες δημιουργούνται δυναμικά

9
Δημιουργία διεργασίας (1 από 2)
• Αρχικοποίηση του συστήματος
– Διεργασίες προσκηνίου όπως η διεργασία σύνδεσης
– Διεργασίες παρασκηνίου όπως ο έλεγχος για e-mail
• Δημιουργία διεργασίας από εκτελούμενη διεργασία
– Καταμερισμός εργασίας (σωληνωτά ή παράλληλα)
• Αίτηση χρήστη για δημιουργία διεργασίας
– Από το φλοιό ή από γραφική διεπαφή
• Εκκίνηση διεργασίας δέσμης
– Ξεκινάει όταν έρθει η σειρά της (επιλεγεί προς εκτέλεση)

10

Δημιουργία διεργασίας (2 από 2)


• Πώς δημιουργούνται οι διεργασίες;
– Στο UNIX γίνεται με την κλήση fork()
• Δημιουργία αντιγράφου της εκτελούμενης διεργασίας
• Ίδια μνήμη, περιβάλλον και ανοιχτά αρχεία
– Αλλαγή εικόνας μνήμης με την κλήση exec()
• Μέχρι τότε εκτελείται η αρχική διεργασία
• Μπορεί να φροντίσει π.χ. για ανακατεύθυνση αρχείων
– Στα Windows όλα γίνονται με την κλήση CreateProcess
• Μπορεί να έχει διαφορετικά χαρακτηριστικά ασφάλειας
– Η νέα διεργασία έχει πάντα ανεξάρτητο χώρο μνήμης
11
Τερματισμός διεργασίας
• Κανονική έξοδος (εκούσια)
– Το πρόγραμμα ολοκληρώνει την εκτέλεσή του
– Exit στο UNIX, ExitProcess στα Windows
• Έξοδος που προκλήθηκε από σφάλμα (εκούσια)
– Παράδειγμα: οι παράμετροί του είναι λανθασμένες
• Μοιραίο σφάλμα (ακούσια)
– Παράδειγμα: διαίρεση με το μηδέν, δείκτης εκτός ορίων
• Θανάτωση από άλλη διεργασία (ακούσια)
– Αποστολή σήματος θανάτωσης από άλλη διεργασία

12

Ιεραρχίες διεργασιών
• Ομάδα διεργασιών στο UNIX: διεργασία και απόγονοι
– Μπορούν να σταλούν σήματα σε όλη την ομάδα
– Κάθε διεργασία αποφασίζει πώς θα τα χειριστεί
• Όλες οι διεργασίες στο UNIX είναι απόγονοι της init
– Δημιουργεί διεργασίες για κάθε τερματικό
– Οι διεργασίες αυτές τελικά δημιουργούν έναν φλοιό
– Ο φλοιός εκτελείται για λογαριασμό του χρήστη
• Στα Windows δεν υπάρχει ιεραρχία διεργασιών
– Η πατρική διεργασία έχει χειριστήριο προς το παιδί
– Μπορεί όμως να μεταβιβαστεί και σε άλλες διεργασίες

13
Καταστάσεις διεργασιών (1 από 4)

• Ενδογενής εμποδισμός εκτελούμενης διεργασίας


– Η διεργασία δεν προχωρά μέχρι να συμβεί κάτι
• Παράδειγμα: είσοδος από συσκευή, σήμα από άλλη διεργασία
• Εξωγενής εμποδισμός εκτελούμενης διεργασίας
– Η διεργασία σταματά να εκτελείται λόγω του συστήματος
• Παράδειγμα: εξάντληση κβάντου, προτεραιότητα σε άλλη
• Η μπλοκαρισμένη διεργασία μπορεί να γίνει έτοιμη
• Η έτοιμη διεργασία μπορεί να γίνει εκτελούμενη
14

Καταστάσεις διεργασιών (2 από 4)

• Λειτουργία συστήματος πολυπρογραμματισμού


– Το σύστημα εναλλάσσει πολλές διεργασίες
– Οι διεργασίες μπλοκάρονται όταν περιμένουν γεγονός
• Από εκτελούμενες γίνονται μπλοκαρισμένες
• Θα γίνουν έτοιμες μετά από διακοπή ή σήμα
• Θα εκτελεστούν όταν τις επιλέξει ο χρονοπρογραμματιστής
– Ο χρονοπρογραμματιστής αποκρύπτει την εναλλαγή
• Διακοπές, εκκίνηση και διακοπή εκτέλεσης δεν είναι ορατά
15
Καταστάσεις διεργασιών (3 από 4)

• Υλοποίηση διεργασιών
– Πίνακας διεργασιών: μία δομή ανά διεργασία
– Επιτρέπει την διακοπή και συνέχιση των διεργασιών
16

Καταστάσεις διεργασιών (4 από 4)


• Υλοποίηση πολυπρογραμματισμού
– Σε σταθερό σημείο της μνήμης υπάρχει πίνακας διακοπών
– Ο πίνακας περιέχει ένα διάνυσμα διακοπής ανά διακοπή
– Όταν συμβαίνει μία διακοπή
• Αποθηκεύεται μετρητής και κατάσταση επεξεργαστή
• Ο μετρητής φορτώνεται από το διάνυσμα διακοπής
• Η διαδικασία εξυπηρέτησης αποθηκεύει την κατάσταση
• Η διαδικασία εξυπηρέτησης δημιουργεί μια νέα στοίβα
• Διεκπεραίωση της διακοπής (μπορεί να ελευθερώσει διεργασία)
• Ο χρονοπρογραμματιστής επιλέγει την επόμενη διεργασία

17
Μοντελοποίηση
πολυπρογραμματισμού

• Μοντελοποίηση του πολυπρογραμματισμού


– Έστω ότι μία διεργασία καταναλώνει p σε είσοδο/έξοδο
– Αν έχουμε n διεργασίες ο βαθμός αξιοποίησης είναι 1-pn
• pn: Πιθανότητα όλες οι διεργασίες να είναι σε αναμονή
– Όσο μεγαλώνει το p, θέλουμε περισσότερες διεργασίες
18

Νήματα
Χρήση των νημάτων (1 από 6)

• Νήματα ελέγχου: ροές εκτέλεσης στην ίδια διεργασία


– Τα νήματα μοιράζονται τη μνήμη της ίδιας διεργασίας
– Επικοινωνία μέσω της κοινής μνήμης
– Πιο οικονομική διαχείριση από τις διεργασίες
– Παράδειγμα: επεξεργαστής κειμένου
20

Χρήση των νημάτων (2 από 6)

• Οργάνωση νημάτων
– Παράδειγμα: εξυπηρετητής Ιστού
– Το νήμα-διεκπεραιωτής δέχεται αιτήσεις από το δίκτυο
– Τα νήματα-εργάτες εκτελούν τις αιτήσεις
– Όλα τα νήματα έχουν πρόσβαση στην κρυφή μνήμη
21
Χρήση των νημάτων (3 από 6)

• Δομή κώδικα εξυπηρετητή


– Ο διεκπεραιωτής απλά μεταβιβάζει δουλειές
– Οι εργάτες εξυπηρετούν μία αίτηση κάθε φορά
– Πολλοί εργάτες εκτελούνται ταυτόχρονα
– Ο εμποδισμός κρύβεται από τα νήματα
22

Χρήση των νημάτων (4 από 6)


• Εναλλακτική λύση: ασύγχρονες κλήσεις
– Χρησιμοποιεί διεργασίες αντί για νήματα
– Κάθε κλήση γίνεται ασύγχρονα
• Οι κλήσεις Ε/Ε δεν εμποδίζουν τη διεργασία
• Τα αποτελέσματα διακόπτουν τη διεργασία
– Η διεργασία παρακολουθεί όλες τις κλήσεις
• Ξεκινάει και σταματάει αιτήσεις
• Ουσιαστικά προσομοιώνει τα νήματα

23
Χρήση των νημάτων (5 από 6)
• Τα νήματα απλοποιούν τον κώδικα
– Συνδυάζουν πολυπρογραμματισμό με κοινή μνήμη
– Οι κλήσεις εισόδου/εξόδου οδηγούν σε εμποδισμό
• Τα υπόλοιπα νήματα συνεχίζουν να εκτελούνται κανονικά
– Η επικοινωνία μεταξύ των νημάτων είναι γρήγορη
• Γίνεται μέσω κοινής μνήμης
• Δεν χρειάζεται παρέμβαση του πυρήνα

24

Χρήση των νημάτων (6 από 6)

Μοντέλο Γνωρίσματα
Παράλληλα κλήσεις συστήματος που
Νήματα
μπλοκάρουν (ανασταλτικές)
Δεν υπάρχει παραλληλία, κλήσεις
Διεργασία με ένα
συστήματος που μπλοκάρουν
νήμα
(ανασταλτικές)
Μηχανή
Παραλληλία, κλήσεις συστήματος που δεν
πεπερασμένων
μπλοκάρουν (μη ανασταλτικές), διακοπές
καταστάσεων

25
Κλασικό μοντέλο νημάτων (1 από 5)

• Η διεργασία ομαδοποιεί ένα σύνολο πόρων


– Κώδικας, δεδομένα, αρχεία, σήματα
• Κάθε νήμα είναι μία ροή εκτέλεσης μέσα στη διεργασία
– Μετρητής, καταχωρητές, στοίβα
• Τα νήματα μοιράζονται τους πόρους της ίδιας διεργασίας
26

Κλασικό μοντέλο νημάτων (2 από 5)

Στοιχεία ανά διεργασία Στοιχεία ανά νήμα


Χώρος διευθύνσεων Μετρητής προγράμματος
Καθολικές μεταβλητές Καταχωρητές
Ανοιχτά αρχεία Στοίβα
Θυγατρικές διεργασίες Κατάσταση
Εκκρεμή σήματα συναγερμού
Σήματα και χειριστές σημάτων
Διαχειριστικές πληροφορίες

27
Κλασικό μοντέλο νημάτων (3 από 5)
• Τα νήματα δεν προστατεύονται
– Δεν απομονώνονται όπως οι διεργασίες
– Οι πόροι είναι κοινοί σε όλα τα νήματα
• Τα νήματα μπορούν εύκολα να ανταλλάσσουν δεδομένα
• Μπορούν όμως και να καταστρέφουν το ένα το άλλο
• Είναι ευθύνη του προγραμματιστή να προσέχει

• Καταστάσεις νημάτων: όπως των διεργασιών


– Εκτελούμενο, έτοιμο, μπλοκαρισμένο

28

Κλασικό μοντέλο νημάτων (4 από 5)

• Κάθε νήμα έχει τη δική του στοίβα


– Η στοίβα περιέχει ένα πλαίσιο για κάθε εκκρεμή κλήση
– Το πλαίσιο περιέχει τις τοπικές μεταβλητές της κλήσης
– Κάθε νήμα βρίσκεται σε διαφορετικό σημείο εκτέλεσης
29
Κλασικό μοντέλο νημάτων (5 από 5)
• Δημιουργία και καταστροφή νημάτων
– Κάθε διεργασία ξεκινάει με ένα μόνο νήμα
– Κάθε νήμα μπορεί να δημιουργήσει άλλα
• Πρέπει να προσδιορίζεται το σημείο εκκίνησης του νέου νήματος
– Τα νήματα μπορεί να οργανώνονται ιεραρχικά
– Ο τερματισμός είναι παρόμοιος με των διεργασιών
– Τα νήματα μπορούν να παραδίδουν την ΚΜΕ οικειοθελώς
• Προβλήματα του μοντέλου των νημάτων
– Όταν κάνουμε fork αντιγράφονται και όλα τα νήματα;
– Όταν κλείνει ένα αρχείο κλείνει για όλα τα νήματα;

30

Νήματα στο POSIX (1 από 3)

Κλήση νήματος Περιγραφή


Pthread_create Δημιουργία νήματος.
Pthread_exit Τερματισμός του καλούντος νήματος.
Pthread_join Αναμονή για έξοδο.
Pthread_yield Αποδέσμευση της CPU ώστε να μπορεί να
ξεκινήσει ένα άλλο νήμα.
Pthread_attr_init Δημιουργία και απόδοση αρχικών τιμών στη
δομή χαρακτηριστικών ενός νήματος.
Pthread_attr_destroy Διαγραφή της δομής χαρακτηριστικών ενός
νήματος.

31
Νήματα στο POSIX (2 από 3)
• Νήματα στο POSIX (πακέτο pthreads)
– Κάθε νήμα περιγράφεται από τυποποιημένη δομή
• Μεταβιβάζεται κατά τη δημιουργία του νήματος
• Μπορούμε να αφήσουμε προεπιλεγμένες τιμές
– Η δημιουργία νήματος επιστρέφει ένα αναγνωριστικό
• Παρόμοιο με το αναγνωριστικό διεργασίας
• Ο πατέρας μπορεί να περιμένει τον τερματισμό του παιδιού
– Το νήμα μπορεί να παραχωρήσει τον επεξεργαστή

32

Νήματα στο POSIX (3 από 3)

Παράδειγμα χρήσης νημάτων (πακέτο pthreads).


33
Υλοποίηση νημάτων

• Υλοποίηση νημάτων επιπέδου χρήστη


• Υλοποίηση νημάτων επιπέδου πυρήνα
• Υβριδική υλοποίηση
34

Στο χώρο του χρήστη


• Υλοποίηση επιπέδου χρήστη
– Τα νήματα υλοποιούνται μέσω μιας βιβλιοθήκης
– Το λειτουργικό σύστημα δεν εμπλέκεται καθόλου
• Υλοποίηση σε συστήματα που δεν υποστηρίζουν νήματα
– Κάθε διεργασία υλοποιεί χρονοπρογρογραμματιστή
– Το μπλοκάρισμα ενός νήματος μπλοκάρει τη διεργασία
• Παράκαμψη του προβλήματος με ελεγχόμενες κλήσεις
– Τα νήματα δεν μπορούν να διακοπούν από το σύστημα
• Πρέπει να παραδώσουν οικειοθελώς τον έλεγχο
– Δυστυχώς τα νήματα χρησιμεύουν στο μπλοκάρισμα!

35
Στο χώρο του πυρήνα
• Υλοποίηση επιπέδου πυρήνα
– Όλοι οι πίνακες και κλήσεις εμπλέκουν τον πυρήνα
– Ο πυρήνας αντιμετωπίζει το μπλοκάρισμα
• Μπορεί να επιλέξει άλλο νήμα της ίδιας διεργασίας
– Μεγάλο κόστος για τη δημιουργία νέων νημάτων
• Παράκαμψη με διατήρηση νημάτων σε ανενεργή κατάσταση
– Πώς λειτουργεί η fork και τα σήματα;
• Υβριδικές υλοποιήσεις
– Υλοποίηση νημάτων στον πυρήνα
– Πολλά νήματα χρήστη πάνω σε κάθε νήμα πυρήνα

36

Ενεργοποιήσεις χρονοπρογραμματιστή

• Κάθε διεργασία έχει μερικά νήματα πυρήνα


– Όταν κάποιο μπλοκάρεται ο πυρήνας καλεί τον χρήστη
– Το ίδιο συμβαίνει και όταν ένα νήμα αφυπνίζεται
• Ουσιαστικά δίνει τον έλεγχο στον χρονοπρογραμματιστή

37
Αναδυόμενα νήματα

• Αναδυόμενα νήματα
– Δημιουργούνται όταν έρχεται ένα νέο αίτημα
– Κατάλληλα για κατανεμημένα και δικτυακά συστήματα
38

Μετατροπή κώδικα (1 από 3)

• Οι καθολικές μεταβλητές δημιουργούν προβλήματα


– Παράδειγμα: μεταβλητή errno στο UNIX
– Μπορεί να διαβάσουμε τιμή από άλλο νήμα
– Ορισμένες πρέπει να είναι καθολικές σε ένα νήμα!

39
Μετατροπή κώδικα (2 από 3)

• Ιδιωτικές καθολικές μεταβλητές (ανά νήμα)


– Δεν υποστηρίζονται από τις γλώσσες προγραμματισμού
– Υλοποίηση μέσω βιβλιοθήκης νημάτων
– Ουσιαστικά προσθήκη ενός επιπέδου εμβέλειας
40

Μετατροπή κώδικα (3 από 3)


• Μη επανεισαγόμενες βιβλιοθήκες
– Αν κληθούν από δύο νήματα μπορεί να αποτύχουν
– Συγγραφή νέων βιβλιοθηκών ή χρήση χιτωνίων κλήσεων
• Χειρισμός σημάτων
– Κάποια σήματα είναι ανά νήμα, κάποια ανά διεργασία
• Διαχείριση στοίβας
– Πώς χειριζόμαστε τη στοίβα χωρίς γνώση των νημάτων;
• Γενική παρατήρηση: η πολυνημάτωση θέλει δουλειά
– Τροποποιήσεις σε βιβλιοθήκες και κλήσεις συστήματος

41
Διαδιεργασιακή επικοινωνία

Επικοινωνία διεργασιών
• Επικοινωνία διεργασιών
– Κανονικά οι διεργασίες είναι απομονωμένες
– Επικοινωνούν μόνο με αυστηρά ελεγχόμενο τρόπο
• Τρεις παραλλαγές επικοινωνίας διεργασιών
– Μεταβίβαση πληροφοριών μεταξύ τους
• Παράδειγμα: σωλήνωση στο φλοιό του UNIX
– Αποφυγή συγκρούσεων για πόρους
• Παράδειγμα: δέσμευση θέσεων σε σύστημα κρατήσεων
– Εξαρτήσεις ανάμεσα στις διεργασίες
• Παράδειγμα: παραγωγή και κατανάλωση δεδομένων

43
Συνθήκες ανταγωνισμού (1 από 2)

• Συνθήκες ανταγωνισμού (παράδειγμα)


– Αποστολή αρχείων σε διαχειριστή εκτυπώσεων
– Αποθήκευση ονομάτων αρχείων προς εκτύπωση σε πίνακα
– Χρήση δύο μεταβλητών για πρώτο και τελευταίο στοιχείο
44

Συνθήκες ανταγωνισμού (2 από 2)


• Έστω ότι οι Α και Β έχουν αρχεία προς εκτύπωση
– Η Α διαβάζει τη μεταβλητή in=7 και διακόπτεται
– Η Β διαβάζει και αυτή τη μεταβλητή in=7
– Η Β αποθηκεύει το αρχείο στη θέση 7
– Η Β αποθηκεύει την τιμή 8 στην in και διακόπτεται
– Η Α αποθηκεύει και αυτή το αρχείο στη θέση 7
– Η Α αποθηκεύει την τιμή 8 στην in
– Η εκτύπωση της διεργασίας Β έχει εξαφανιστεί!
• Το αποτέλεσμα εξαρτάται από τη σειρά εκτέλεσης
– Έχουμε συνθήκες ανταγωνισμού (race conditions)

45
Κρίσιμες περιοχές (1 από 2)
• Αμοιβαίος αποκλεισμός
– Βασική τεχνική αποφυγής συνθηκών ανταγωνισμού
• Γενική μορφή του αμοιβαίου αποκλεισμού
– Κάθε διεργασία περιέχει ορισμένες κρίσιμες περιοχές
– Οι κρίσιμες περιοχές εκτελούνται με αποκλεισμό
– Γενικότερα έχουμε 4 συνθήκες για αποδοτική λύση
• Μόνο μία διεργασία μπορεί να είναι στην κρίσιμη περιοχή
• Δεν βασιζόμαστε σε ταχύτητα εκτέλεσης ή πλήθος ΚΜΕ
• Διεργασίες εκτός κρίσιμης περιοχής δεν εμποδίζουν τις άλλες
• Δεν επιτρέπεται οι διεργασίες να περιμένουν επ’ αόριστον

46

Κρίσιμες περιοχές (2 από 2)

• Παράδειγμα αμοιβαίου αποκλεισμού


– Η Α εισέρχεται στην κρίσιμη περιοχή
– Η Β προσπαθεί να εισέλθει αλλά μπλοκάρεται
– Η Α εξέρχεται και μόνο τότε εισέρχεται η Β
47
Αναμονή με απασχόληση (1 από 7)
• Αναμονή με απασχόληση
– Υλοποίηση αμοιβαίου αποκλεισμού με αναμονή
• Απενεργοποίηση διακοπών
– Απενεργοποίηση κατά την είσοδο στην κρίσιμη περιοχή
– Ενεργοποίηση κατά την έξοδο από την κρίσιμη περιοχή
– Είναι αδύνατον να αλλάξει η τρέχουσα διεργασία!
– Η απενεργοποίηση των διακοπών είναι επικίνδυνη
– Δεν λειτουργεί σε περιβάλλον πολλών επεξεργαστών
• Μεταβλητές κλειδώματος
– Η μεταβλητή αλλάζει ανάμεσα σε ανάγνωση και χρήση

48

Αναμονή με απασχόληση (2 από 7)

• Αυστηρή εναλλαγή
– Χρήση μεταβλητής που δείχνει ποιος έχει σειρά
• Ονομάζεται και κλείδωμα περιστροφής
• Η μεταβλητή αλλάζει στο τέλος της κρίσιμης περιοχής
– Το πρόβλημα είναι ότι παραβιάζονται οι συνθήκες
• Έστω ότι η διεργασία θέλει να ξαναμπεί στην κρίσιμη περιοχή
• Πρέπει να περιμένει να μπει πρώτα η άλλη διεργασία
49
Αναμονή με απασχόληση (3 από 7)

Η λύση του Peterson


50

Αναμονή με απασχόληση (4 από 7)


• Η λύση του Peterson
– Η διεργασία γράφει στον πίνακα ότι ενδιαφέρεται
– Επιπλέον θέτει τη μεταβλητή turn
– Τι γίνεται αν προσπαθήσουν ταυτόχρονα;
• Και οι δύο εξετάζουν τον πίνακα interested
• Όποια έγραψε την turn τελευταία θα περιμένει
• Θα απελευθερωθεί όταν η άλλη βγει από την περιοχή
• Τότε θα σταματήσει να ενδιαφέρεται

51
Αναμονή με απασχόληση (5 από 7)
• Η εντολή TSL
– Απαιτεί μια νέα εντολή υλικού: TSL register, lock
• Αντιγράφει τη θέση μνήμης lock στον register
• Αποθηκεύει την τιμή 1 στη θέση μνήμης lock
• Οι δύο λειτουργίες γίνονται ατομικά
• Ο δίαυλος κλειδώνεται όσο διαρκεί η εντολή
• Το κλείδωμα επηρεάζει όλους τους επεξεργαστές
– Η TSL προσπαθεί να «κλειδώσει» τη θέση lock
• Αν το πέτυχε, θα το εξετάσει η επόμενη εντολή

52

Αναμονή με απασχόληση (6 από 7)

• Χρήση της εντολής TSL


– Για κάθε κρίσιμη περιοχή έχουμε μία θέση μνήμης lock
– Η TSL διαβάζει και αλλάζει την τιμή της lock
– Αν η τιμή ήταν 0 προχωράμε, αλλιώς περιμένουμε
– Στην έξοδο θέτουμε πάλι την τιμή σε 0
– Το πρόγραμμα μπορεί να διακοπεί μεταξύ δύο εντολών
53
Αναμονή με απασχόληση (7 από 7)

• Η εντολή XCHG
– Παραλλαγή της ίδιας ιδέας με την TSL
– Η XCHG ανταλλάσει τις τιμές των register και lock
• Η ανταλλαγή γίνεται πάλι ατομικά
– Πάλι έχουμε δύο πράξεις σε ένα βήμα
• Ανάγνωση και αλλαγή της θέσης lock
– Χρησιμοποιείται στους επεξεργαστές x86
54

Λήθαργος και αφύπνιση (1 από 4)


• Μειονεκτήματα αναμονής με απασχόληση
– Σπαταλά πόρους του επεξεργαστή κατά την αναμονή
– Κίνδυνος αντιστροφής προτεραιοτήτων
• Έστω ότι η Y έχει υψηλή και η X χαμηλή προτεραιότητα
• Η X εκτελείται και μπαίνει στην κρίσιμη περιοχή
• Εν τω μεταξύ η Y ξυπνάει και αρχίζει να εκτελείται
• Η Y θα περιμένει (για πάντα;) να βγει η X από κρίσιμη περιοχή
• Κλήσεις sleep και wakeup
– Η sleep βάζει την καλούσα διεργασία σε λήθαργο
– Η wakeup αφυπνίζει μία διεργασία από το λήθαργο

55
Λήθαργος και αφύπνιση (2 από 4)
• Πρόβλημα παραγωγού-καταναλωτή
– Δύο διεργασίες μοιράζονται μια περιορισμένη μνήμη
– Παραγωγός: τοποθετεί αντικείμενα στην περιοχή
• Δεν μπορεί να προχωρήσει αν δεν υπάρχουν κενές θέσεις
– Καταναλωτής: αφαιρεί αντικείμενα από την περιοχή
• Δεν μπορεί να προχωρήσει αν δεν υπάρχουν πλήρεις θέσεις
– Έστω ότι έχουμε n θέσεις μνήμης και count μη κενές
• Ο παραγωγός μπλοκάρεται όταν count=n
• Ο παραγωγός ξυπνά τον καταναλωτή όταν count=1
• Ο καταναλωτής μπλοκάρεται όταν count=0
• Ο καταναλωτής ξυπνά τον παραγωγό όταν count=n-1

56

Λήθαργος και αφύπνιση (3 από 4)

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)

Κλήση νήματος Περιγραφή


Pthread_mutex_init Δημιουργία ενός mutex.
Pthread_mutex_destroy Καταστροφή ενός υπάρχοντος mutex.
Pthread_mutex_lock Απόκτηση κλειδώματος ή μπλοκάρισμα.
Pthread_mutex_trylock Απόκτηση κλειδώματος ή αποτυχία.
Pthread_mutex_unlock Απελευθέρωση κλειδώματος.

66

Τα mutex (5 από 9)
• Mutex στο πακέτο νημάτων pthreads
– Δημιουργία και καταστροφή mutex
– Κλείδωμα (με μπλοκάρισμα ή αποτυχία)
– Ξεκλείδωμα mutex
• Μεταβλητές συνθήκης
– Τα mutex δεν επαρκούν για πιο σύνθετες συνθήκες
– Παράδειγμα: πρόβλημα παραγωγού καταναλωτή
• Το mutex μπορεί μόνο να κλειδώσει την κοινή μνήμη
• Δεν αρκεί για ειδικότερες συνθήκες μπλοκαρίσματος

67
Τα mutex (6 από 9)

Κλήση νήματος Περιγραφή


Pthread_cond_init Δημιουργία μίας μεταβλητής συνθήκης.
Pthread_cond_destroy Καταστροφή μίας μεταβλητής συνθήκης.
Pthread_cond_wait Μπλοκάρισμα και αναμονή σήματος.
Pthread_cond_signal Σήμα σε άλλο νήμα και αφύπνισή του.
Pthread_cond_broadcast Σήμα σε πολλά νήματα και αφύπνιση όλων.

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)

• Παραγωγός-καταναλωτής: νήματα της Java


– Δεν ασχολούνται με αμοιβαίο αποκλεισμό
• Ελεγκτής: τάξη της Java
– Περιέχει μεθόδους synchronized
76

Ελεγκτές (6 από 6)

• Ελεγκτής σε Java
– Οι διαδικασίες παραγωγού/ καταναλωτή είναι synchronized
– Δεν υπάρχουν διακριτές μεταβλητές συνθήκης
• Υπάρχει μία μόνο ανώνυμη συνθήκη για όλο τον ελεγκτή
• Η εντολή wait() οδηγεί σε μπλοκάρισμα
• Πρέπει να εκτελείται σε βρόχο γιατί δεν ξέρουμε γιατί ξυπνήσαμε!
• Η εντολή notify() ξυπνάει ένα άλλο νήμα (τυχαία)
77
Μεταβίβαση μηνυμάτων (1 από 3)
• Μεταβίβαση μηνυμάτων
– Οι σηματοφόροι είναι τεχνική χαμηλού επιπέδου
• Μπορεί όμως να χρησιμοποιηθεί μέσω βιβλιοθήκης
– Οι ελεγκτές είναι τεχνική υψηλού επιπέδου
• Απαιτεί όμως υποστήριξη από γλώσσα προγραμματισμού
– Η μεταβίβαση μηνυμάτων είναι μια πιο γενική τεχνική
• Και η μόνη κατάλληλη για κατανεμημένα συστήματα
– Η send(dest, &msg) στέλνει το msg στον dest
– Η receive(src, &msg) παραλαμβάνει το msg από τον src
• Μπορεί να προκαλεί μπλοκάρισμα ή να επιστρέφει αμέσως

78

Μεταβίβαση μηνυμάτων (2 από 3)

• Παραγωγός-καταναλωτής με μεταβίβαση μηνυμάτων


– Ο παραγωγός περιμένει κενά μηνύματα
– Τα γεμίζει και τα στέλνει στον καταναλωτή
– Ο καταναλωτής στέλνει αρχικά N κενά μηνύματα
– Μετά περιμένει γεμάτα μηνύματα και τα καταναλώνει
79
Μεταβίβαση μηνυμάτων (3 από 3)

• Παραλλαγές μεταβίβασης μηνυμάτων


– Χρήση γραμματοκιβωτίων επικοινωνίας
• Παρεμβάλλονται ανάμεσα σε αποστολείς και παραλήπτες
• Έχουν περιορισμένο χώρο αποθήκευσης μηνυμάτων
– Χρήση ραντεβού: ο αποστολέας μπλοκάρεται
• Δεν χρειάζεται προσωρινή μνήμη, τα δύο άκρα συγχρονίζονται
80

Φράγματα

• Φράγματα
– Οι διεργασίες διαιρούνται σε φάσεις
• Στο τέλος κάθε φάσης εκτελούμε μια κλήση barrier
• Οι διεργασίες μπλοκάρονται μέχρι να φτάσουν όλες εκεί
• Μόλις συμβεί αυτό, απελευθερώνονται όλες
– Επιτρέπει συγχρονισμό παράλληλων υπολογισμών
81
Χρονοπρογραμματισμός

Χρονοπρογραμματισμός (1 από 6)
• Έννοια του χρονοπρογραμματισμού
– Ποια διεργασία θα εκτελεστεί μετά από κάποια διακοπή;
• Ιστορική εξέλιξη χρονοπρογραμματισμού
– Στα συστήματα δεσμίδων εκτελούσαμε επόμενη εργασία
– Στα συστήματα πολυπρογραμματισμού υπάρχει επιλογή
• Και στα σύγχρονα μικτά συστήματα υπάρχει ζήτημα επιλογής
– Οι προσωπικοί υπολογιστές δεν δίνουν μεγάλη έμφαση
• Η ταχύτητα των επεξεργαστών είναι πολύ μεγάλη
• Ελάχιστες διεργασίες είναι πραγματικά χρονοβόρες
– Οι εξυπηρετητές προσέχουν τον χρονοπρογραμματισμό

83
Χρονοπρογραμματισμός (2 από 6)
• Εναλλαγή διεργασιών
– Η αλλαγή της εκτελούμενης διεργασίας έχει κόστος
• Αποθήκευση κατάστασης προηγούμενης διεργασίας
• Φόρτωση κατάστασης νέας διεργασίας
• Αλλαγή χώρου διευθύνσεων και ακύρωση κρυφής μνήμης
• Συμπεριφορά των διεργασιών
– Οι διεργασίες εναλλάσσουν Ε/Ε και επεξεργασία
– Οι διεργασίες χωρίζονται σε δύο κατηγορίες
• Εξαρτημένες από την ΚΜΕ
• Εξαρτημένες από είσοδο/έξοδο

84

Χρονοπρογραμματισμός (3 από 6)

• Συμπεριφορά των διεργασιών


– Ο σημαντικός παράγοντας είναι η διάρκεια επεξεργασίας
– Οι επεξεργαστές βελτιώνονται πιο γρήγορα από δίσκους
• Οι περισσότερες διεργασίας εξαρτώνται από είσοδο/έξοδο
• Πρέπει να εκτελούνται έτσι ώστε να ξεκινάνε νέα είσοδο/έξοδο
85
Χρονοπρογραμματισμός (4 από 6)
• Πότε γίνεται ο χρονοπρογραμματισμός;
– Όταν δημιουργείται / τερματίζεται μια διεργασία
– Όταν μια διεργασία μπλοκάρεται για κάποιο λόγο
– Όταν προκύπτει μία διακοπή εισόδου/εξόδου
– Όταν προκύπτει διακοπή χρονομέτρου (ή n διακοπές)
• Μη προεκτοπιστικοί αλγόριθμοι
– Η τρέχουσα διεργασία εκτελείται μέχρι να μπλοκαριστεί
• Προεκτοπιστικοί αλγόριθμοι
– Η τρέχουσα διεργασία εκτελείται μέχρι κάποιο όριο

86

Χρονοπρογραμματισμός (5 από 6)
• Κατηγορίες αλγορίθμων χρονοπρογραμματισμού
– Συστήματα δέσμης
• Μη προεκτοπιστική ή προεκτοπιστική με μεγάλο διάστημα
• Λιγότερες εναλλαγές διεργασιών για αύξηση επίδοσης
– Συστήματα αλληλεπίδρασης
• Υποχρεωτικά προεκτοπιστική για αποφυγή καθυστερήσεων
• Όλες οι διεργασίες πρέπει να εκτελούνται από λίγο
– Συστήματα πραγματικού χρόνου
• Δεν είναι απαραίτητη η προεκτοπιστική εκτέλεση
• Εκτελούνται μόνο συγκεκριμένες διεργασίες στο σύστημα

87
Χρονοπρογραμματισμός (6 από 6)
• Στόχοι αλγορίθμων χρονοπρογραμματισμού
– Δίκαιη κατανομή ΚΜΕ, επιβολή πολιτικής, ισορροπία
– Συστήματα δέσμης
• Μεγάλη διεκπεραιωτική ικανότητα και μικρός μέσος χρόνος
• Υψηλή αξιοποίηση επεξεργαστή
– Συστήματα αλληλεπίδρασης
• Χαμηλός χρόνος απόκρισης σε αιτήσεις
• Τήρηση αναλογιών (οι «απλές» εξυπηρετούνται γρήγορα)
– Συστήματα πραγματικού χρόνου
• Τήρηση των προθεσμιών των διεργασιών
• Προβλεψιμότητα και ομαλότητα χρονοπρογραμματισμού

88

Συστήματα δέσμης
• Εξυπηρέτηση με βάση τη σειρά άφιξης
– Οι νέες διεργασίες μπαίνουν στο τέλος μιας ουράς
– Οι διεργασίες εκτελούνται με τη σειρά της ουράς
– Οι μπλοκαρισμένες διεργασίες βγαίνουν από την ουρά
• Όταν απελευθερωθούν μπαίνουν στο τέλος της ουράς
• Εξυπηρέτηση με βάση τη μικρότερη διάρκεια
– Όλες οι διεργασίες πρέπει να είναι διαθέσιμες μαζί
– Εκτελούμε πάντα την μικρότερη διεργασία που απομένει
• Εξυπηρέτηση με βάση το μικρότερο υπόλοιπο
– Κατάλληλη για προεκτοπιστικό χρονοπρογραμματισμό

89
Συστήματα αλληλεπίδρασης (1 από 6)

• Χρονοπρογραμματισμός αλληλεπίδρασης
– Προγραμματισμός εκ περιτροπής
• Σε κάθε διεργασία εκχωρείται χρονικό διάστημα εκτέλεσης
• Αν εξαντληθεί το διάστημα αυτό, η διεργασία αλλάζει
• Η διεργασία αλλάζει κι αν μπλοκαριστεί για κάποιο λόγο
• Υλοποιείται με κυκλική λίστα

90

Συστήματα αλληλεπίδρασης (2 από 6)

• Καθορισμός διαστήματος εκτέλεσης (κβάντου)


– Αρκετά μεγαλύτερο από το χρόνο εναλλαγής διεργασιών
• Αλλιώς μεγάλο ποσοστό του χρόνου σπαταλιέται σε εναλλαγές
– Αρκετά μικρό ώστε να έχουμε χαμηλό χρόνο απόκρισης
• Αλλιώς χρειάζεται πολύς χρόνος για κάθε κύκλο στην ουρά
– Λίγο μεγαλύτερο από το μέσο χρόνο εκτέλεσης
• Το διάστημα ανάμεσα σε δύο λειτουργίες εισόδου/εξόδου
• Χρονοπρογραμματισμός με βάση την προτεραιότητα
– Εκτελείται η έτοιμη με υψηλότερη προτεραιότητα

91
Συστήματα αλληλεπίδρασης (3 από 6)

• Ομαδοποίηση σε κλάσεις προτεραιοτήτων


– Εκτέλεση εκ περιτροπής μέσα σε κάθε κλάση
• Ανάθεση προτεραιοτήτων
– Στατική: ανάλογα με τη σημασία της διεργασίας
• Ορίζονται προκαταβολικά με εξωτερικά κριτήρια
– Δυναμική: ανάλογα με τον τρόπο εκτέλεσης
• Αύξηση προτεραιότητας στις διεργασίες εισόδου/εξόδου
92

Συστήματα αλληλεπίδρασης (4 από 6)

• Συστήματα πολλαπλών ουρών


– Οι σταθερές προτεραιότητες έχουν κίνδυνο υποσιτισμού
– Σταδιακή ελάττωση προτεραιότητας εκτελούμενης
• Επιτρέπει σε όλες τις διεργασίες να εκτελούνται κάποτε
– Ανάθεση μεγαλύτερου κβάντου σε μικρές προτεραιότητες
• Για παράδειγμα, 1 κβάντο στην υψηλή και 2 κβάντα στη χαμηλή
• Όταν μια διεργασία εξαντλεί το κβάντο, υποβιβάζεται
– Ανάθεση προτεραιότητας ανάλογα με τη συμπεριφορά
• Υψηλότερη προτεραιότητα αν χρησιμοποιεί τερματικό
• Χαμηλότερη προτεραιότητα αν εξαντλεί το κβάντο

93
Συστήματα αλληλεπίδρασης (5 από 6)
• Εξυπηρέτηση με βάση τη μικρότερη διάρκεια
– Βασίζεται στον αντίστοιχο αλγόριθμο συστημάτων δέσμης
– Θεωρούμε κάθε διάστημα εκτέλεσης ως νέα εργασία
– Πρέπει να μαντέψουμε πόσο θα εκτελεστεί η διεργασία
– Παράδειγμα: στάθμιση προηγούμενων χρόνων εκτέλεσης
• Tn=Tn-1/2+Tn-2/4+Tn-3/8+…
• Εγγυημένος χρονοπρογραμματισμός
– Αν έχουμε n χρήστες, ο καθένας παίρνει το 1/n της ΚΜΕ
• Υπολογίζεται ο λόγος χρόνου εκτέλεσης προς αναλογούντα
• Εκτελείται η διεργασία με τον μικρότερο τέτοιο λόγο

94

Συστήματα αλληλεπίδρασης (6 από 6)

• Χρονοπρογραμματισμός με λοταρία
– Κάθε διεργασία έχει ορισμένους λαχνούς
– Διαφορετικοί λαχνοί για κάθε πόρο
– Για κάθε πόρο γίνεται κλήρωση λαχνών
– Οι πιο σημαντικές διεργασίες έχουν περισσότερους
• Ο πελάτης μπορεί να παραχωρήσει λαχνούς στον εξυπηρετητή
• Χρονοπρογραμματισμός δίκαιης διανομής
– Οι πόροι ανατίθενται ανά χρήστη
– Οι διεργασίες αξιοποιούν μόνο τους πόρους του χρήστη

95
Συστήματα πραγματικού χρόνου
• Χρονοπρογραμματισμός πραγματικού χρόνου
– Οι διεργασίες πρέπει να εκτελούνται μέσα σε προθεσμίες
– Περιοδικά: τα ίδια γεγονότα εμφανίζονται περιοδικά
– Απεριοδικά: τα γεγονότα προκύπτουν απρόβλεπτα
– Έστω ένα περιοδικό σύστημα
• Το συμβάν i εμφανίζεται κάθε Pi και απαιτεί χρόνο Ci
• Το σύστημα είναι χρονοπρογραμματίσιμο αν ΣCi/Pi<=1
• Αν είναι παραπάνω, είναι αδύνατον να χρονοπρογραμματιστεί
– Στατικοί αλγόριθμοι: οι αποφάσεις λαμβάνονται αρχικά
– Δυναμικοί αλγόριθμοι: λήψη αποφάσεων δυναμικά

96

Πολιτικές και μηχανισμοί


• Πολιτικές και μηχανισμοί χρονοπρογραμματισμού
– Βασικός παραμετροποιήσιμος μηχανισμός
– Παράμετροι από το χειριστή ή / και τον χρήστη
– Ο μηχανισμός υλοποιεί μια επιθυμητή πολιτική
• Παράδειγμα: συστήματα πολλών ουρών
– Ο μηχανισμός διαλέγει την επόμενη διεργασία
• Η πρώτη της ανώτερης ουράς
– Η πολιτική κατατάσσει τις διεργασίες
• Ανάθεση σε ουρές και κβάντα

97
Χρονοπρογραμματισμός νημάτων (1 από 2)

• Χρονοπρογραμματισμός νημάτων
– Σε επίπεδο χρήστη περιορίζονται στο κβάντο διεργασίας
• Ο ακριβής αλγόριθμος είναι θέμα του πακέτου χρήστη
– Στο επίπεδο πυρήνα μπορούν να αγνοούνται οι διεργασίες
• Προκύπτουν διαφορετικές ακολουθίες εκτέλεσης
98

Χρονοπρογραμματισμός νημάτων (2 από 2)


• Νήματα επιπέδου χρήστη
– Η εναλλαγή έχει γενικά πολύ χαμηλό κόστος
– Συνήθως εκτέλεση εκ περιτροπής ή με προτεραιότητες
– Μπορεί να εξαρτάται από την εφαρμογή
– Παράδειγμα: προτεραιότητες με βάση τις εξαρτήσεις
• Νήματα επιπέδου πυρήνα
– Ο χρονοπρογραμματιστής είναι πάντα ο ίδιος
– Η εναλλαγή έχει μεγάλο κόστος
– Συμφέρει να επιλέξουμε νήματα της ίδιας διεργασίας
• Αποφεύγουμε την αλλαγή χάρτη μνήμης

99
Κλασικά προβλήματα

Το δείπνο των φιλοσόφων (1 από 4)

• Το πρόβλημα του δείπνου των φιλοσόφων


– Έχουμε n πιάτα και n πιρούνια σε ένα τραπέζι
– Για να φάει κάποιος χρειάζεται τα δύο γειτονικά πιρούνια
• Ουσιαστικά χρειαζόμαστε κλείδωμα χωρίς αδιέξοδα
101
Το δείπνο των φιλοσόφων (2 από 4)

• Το πρόβλημα του δείπνου των φιλοσόφων


– Αν όλοι πάρουν το αριστερό πιρούνι έχουμε αδιέξοδο
– Αν κάνουμε πίσω όταν το δεξί δεν είναι διαθέσιμο;
• Μπορεί να μην πάρουμε ποτέ τα πιρούνια
– Αν έχουμε τυχαίο διάστημα αναμονής;
• Πάλι μπορεί να μην πάρουμε ποτέ τα πιρούνια
102

Το δείπνο των φιλοσόφων (3 από 4)

• Λύση με σηματοφόρους
– Ο φιλόσοφος μπορεί να φάει αν δεν τρώνε οι γείτονες
– Κεντρικός σηματοφόρος και πίνακας σηματοφόρων
103
Το δείπνο των φιλοσόφων (4 από 4)

104

Πρόβλημα αναγνωστών-γραφέων (1 από 3)

• Το πρόβλημα αναγνωστών-γραφέων
– Μοντελοποιεί πρόσβαση σε βάσεις δεδομένων
– Πολλοί μπορούν να διαβάζουν τη βάση
• Επιτρέπεται ταυτόχρονη ανάγνωση χωρίς όριο
– Μόνο ένας όμως μπορεί να γράφει στη βάση
• Όταν η βάση γράφεται, απαγορεύεται η ανάγνωση
• Δεν επιτρέπεται η ταυτόχρονη εγγραφή
– Ποιος έχει προτεραιότητα;
• Περιμένει ο γραφέας ή οι αναγνώστες;

105
Πρόβλημα αναγνωστών-γραφέων (2 από 3)

• Το πρόβλημα αναγνωστών-γραφέων
– Πολλοί αναγνώστες αλλά μόνο ένας γραφέας
106

Πρόβλημα αναγνωστών-γραφέων (3 από 3)

• Λύση με σηματοφόρους
– Ο db επιτρέπει είτε έναν γραφέα, είτε πολλούς αναγνώστες
• Αλλάζει τιμή από τον πρώτο/τελευταίο αναγνώστη
– Οι αναγνώστες συγχρονίζονται μέσω του mutex
• Προστατεύει τη μεταβλητή rc
– Ο γραφέας μπορεί να μην εκτελεστεί ποτέ!
• Εκτός αν οι νέοι αναγνώστες εμποδίζονται όταν περιμένει γραφέας
107
Ενότητα # 3: Διαχείριση Μνήμης

Σκοποί ενότητας
• Κατανόηση της ανάγκης αφαίρεσης μνήμης
• Εξοικείωση με τις βασικές τεχνικές
οργάνωσης της εικονικής μνήμης:
σελιδοποίηση και τμηματοποίηση
• Κατανόηση των βασικών αλγορίθμων
αντικατάστασης σελίδων
• Εξοικείωση με τα βασικά ζητήματα
σχεδιασμού και υλοποίησης εικονικής μνήμης
4
Περιεχόμενα ενότητας
• Χωρίς αφαίρεση μνήμης
• Χώροι διευθύνσεων
• Εικονική μνήμη
• Αλγόριθμοι αντικατάστασης σελίδων
• Θέματα σχεδιασμού
• Ζητήματα υλοποίησης
• Τμηματοποίηση
5

Εισαγωγή (1 από 2)
• Η μνήμη είναι μόνιμα κρίσιμος πόρος
– Η διαθέσιμη μνήμη αυξάνεται συνεχώς
– Δυστυχώς μεγαλώνουν και τα προγράμματα!
– Ιδανικά: μόνιμη, γρήγορη, άπειρη, φτηνή μνήμη
• Ιεραρχία μνήμης
– Από την κρυφή μνήμη του επεξεργαστή
– Μέχρι τους μαγνητικούς δίσκους
– Διαφορετικοί συμβιβασμοί ταχύτητας / κόστους

7
Εισαγωγή (2 από 2)
• Διαχειριστής μνήμης
– Διαχειρίζεται την ιεραρχία μνήμης
– Ποια τμήματα της μνήμης χρησιμοποιούνται;
– Πόση μνήμη παραχωρείται σε κάθε διεργασία;
– Ποια μνήμη έχει κάθε διεργασία;
– Λογισμικό που αξιοποιεί εξειδικευμένο υλικό
• Υλικό που παρακολουθεί τις προσπελάσεις
• Υλικό που επιβάλλει κανόνες προστασίας

Χωρίς αφαίρεση μνήμης


Χωρίς αφαίρεση μνήμης (1 από 5)

• Όλοι βλέπουν απευθείας τη μνήμη


– Σύνολο διευθύνσεων από 0 έως n
– Ένα μόνο πρόγραμμα σε κάθε στιγμή
– Λειτουργικό σύστημα σε RAM ή ROM
10

Χωρίς αφαίρεση μνήμης (2 από 5)


• Λειτουργία συστημάτων με μία διεργασία
– Το λειτουργικό δίνει προτροπή (prompt) στο χρήστη
– Ο χρήστης πληκτρολογεί το όνομα του προγράμματος
– Το πρόγραμμα φορτώνεται στη μνήμη και εκτελείται
– Στο τέλος επιστρέφουμε στο λειτουργικό
– Χρήση σε πρωτόλεια ή πολύ απλά συστήματα
– Δυνατότητα χρήσης πολλών νημάτων
– Πολυπρογραμματισμός με εναλλαγή
• Φόρτωση και αποθήκευση ολόκληρων διεργασιών

11
Χωρίς αφαίρεση μνήμης (3 από 5)
• Πολυπρογραμματισμός χωρίς αφαίρεση μνήμης
– Η συνύπαρξη στη μνήμη απαιτεί πρόσθετο υλικό
– Παράδειγμα: ΙΒΜ 360 με κλειδιά προστασίας
• Κάθε μπλοκ μνήμης των 2 KB έχει ένα κλειδί προστασίας
• Το εκτελούμενο πρόγραμμα έχει ένα κλειδί προστασίας
– Η ανάγκη της επανατοποθέτησης (relocation)
• Έστω ότι έχουμε δύο προγράμματα που χωράνε στη μνήμη
• Τα προγράμματα δεν ξέρουν πού θα τοποθετηθούν
– Στατική επανατοποθέτηση στον IBM 360
• Οι αναφορές σε διευθύνσεις αλλάζουν κατά τη φόρτωση

12

Χωρίς αφαίρεση μνήμης (4 από 5)

• Παράδειγμα: δύο προγράμματα στη μνήμη


– Θα πρέπει το ένα να επανατοποθετηθεί
13
Χωρίς αφαίρεση μνήμης (5 από 5)
• Υλοποίηση της επανατοποθέτησης
– Η επανατοποθέτηση επηρεάζει ορισμένες εντολές
• Όσες αναφέρονται σε απόλυτες διευθύνσεις μνήμης
– Ο φορτωτής πρέπει να διακρίνει αυτές τις εντολές
• Είτε θα ελέγχει το πρόγραμμα κατά τη φόρτωση
• Είτε το πρόγραμμα θα περιέχει αυτές τις πληροφορίες
– Εναλλακτικά, μεταγλώττιση στις σωστές θέσεις
• Εφικτό μόνο σε ενσωματωμένα συστήματα
– Γενικότερες λύσεις απαιτούν πρόσθετο υλικό
• Δυνατότητα δυναμικής επανατοποθέτησης προγραμμάτων

14

Χώροι διευθύνσεων
Χώροι διευθύνσεων (1 από 3)
• Γιατί τα προγράμματα να μην βλέπουν τη μνήμη;
– Μπορούν να διαγράψουν ακόμη και το λειτουργικό
– Είναι δύσκολο να έχουμε πολλά ταυτόχρονα
• Χώροι διευθύνσεων
– Λογική αφαίρεση της μνήμης μιας διεργασίας
– Αποτελείται από το σύνολο των διευθύνσεών της
– Διάφοροι τρόποι υλοποίησης χώρων διευθύνσεων
• Καταχωρητές βάσης και ορίου
– Μορφή δυναμικής επανατοποθέτησης
– Αρχικά σε CDC 6600, παραλλαγή σε 8088/8086

16

Χώροι διευθύνσεων (2 από 3)


• Καταχωρητές βάσης και ορίου
– Φόρτωση προγράμματος σε διαδοχικές θέσεις
– Αρχική διεύθυνση: καταχωρητής βάσης
– Μέγιστη διεύθυνση: καταχωρητής ορίου
– Η διεύθυνση δεν πρέπει να περνά το όριο
• Προστασία μνήμης
– Η διεύθυνση προστίθεται στη βάση
• Δυναμική επανατοποθέτηση
• Κόστος πράξεων σε κάθε προσπέλαση
– Σύγκριση και πρόσθεση
17
Χώροι διευθύνσεων (3 από 3)

• Παράδειγμα με δύο διεργασίες


– Οι καταχωρητές αλλάζουν μαζί με τη διεργασία

18

Εναλλαγή (1 από 4)

• Εναλλαγή διεργασιών
– Aν δεν χωράνε όλα τα προγράμματα στη μνήμη;
– Χρήση δίσκου για αποθήκευση αδρανών διεργασιών
– Εναλλαγή (swapping) των διεργασιών στη μνήμη
19
Εναλλαγή (2 από 4)
• Η εναλλαγή δημιουργεί «τρύπες» στη μνήμη
– Μία διεργασία που φεύγει αφήνει ένα κενό
– Στη θέση της μπαίνει ίση ή μικρότερη διεργασία
– Αν είναι μικρότερη, δημιουργείται «τρύπα»
• Περιοδικά χρειάζεται σύμπτυξη μνήμης
– Μεταφορά διεργασιών για να μην έχουμε κενά
– Μεγάλο κόστος για την αντιγραφή της μνήμης

20

Εναλλαγή (3 από 4)
• Διεργασίες με δυναμικό μέγεθος
– Οι στοίβες και οι σωροί επεκτείνονται δυναμικά
– Αν περάσουμε την αρχική κατανομή;
– Θα πρέπει αναγκαστικά να επεκταθούμε
– Αν η γειτονική περιοχή είναι κενή, ΟΚ
– Αλλιώς πρέπει να μεταφερθούμε αλλού
– Γενικά κατανέμουμε χώρο από την αρχή
• Ο χώρος μπορεί να μείνει αναξιοποίητος

21
Εναλλαγή (4 από 4)

• Εκχώρηση μνήμης για αύξηση μεγέθους


– Τα κενά τμήματα δεν μεταφέρονται από/προς το δίσκο
22

Διαχείριση ελεύθερης μνήμης (1 από 7)

• Το σύστημα παρακολουθεί τη διαθέσιμη μνήμη


• Διαχείριση μνήμης με χάρτες bit
– Διαίρεση της μνήμης σε ισομεγέθη τμήματα
– Ένα bit ανά τμήμα δείχνει αν είναι διαθέσιμο
23
Διαχείριση ελεύθερης μνήμης (2 από 7)

• Διαχείριση μνήμης με χάρτες bit


– Το μέγεθος της μονάδας κατανομής έχει σημασία
– Μεγάλη->μικρός χάρτης/μεγάλη σπατάλη
• Μέρος της τελευταίας μονάδας μπορεί να είναι κενό
– Μικρή->μεγάλος χάρτης/μικρή σπατάλη
– Χρονοβόρα αναζήτηση στο χάρτη bit
• Έστω ότι θέλουμε μια περιοχή k τμημάτων
• Πρέπει να ψάξουμε σειριακά το χάρτη bit

24

Διαχείριση ελεύθερης μνήμης (3 από 7)

• Διαχείριση μνήμης με συνδεδεμένες λίστες


– Λίστα με στοιχεία για κάθε τμήμα μνήμης
• Τύπος, αρχική διεύθυνση, μήκος
• Ο τύπος μπορεί να είναι διεργασία ή οπή

• Ταξινόμηση λίστας με διάφορους τρόπους


– Ταξινόμηση σύμφωνα με τις διευθύνσεις
• Εύκολη ενημέρωση όταν ελευθερώνεται η μνήμη
• Γενικά συγχωνεύονται τα γειτονικά στοιχεία

25
Διαχείριση ελεύθερης μνήμης (4 από 7)

• Διαχείριση μνήμης με συνδεδεμένες λίστες


– Συνήθως η λίστα είναι διπλά συνδεδεμένη
• Ενημέρωσή της ξεκινώντας από το τμήμα
• Η θέση του τμήματος φαίνεται στον πίνακα διεργασιών
– Διάφορες τεχνικές επιλογής τμήματος προς χρήση
26

Διαχείριση ελεύθερης μνήμης (5 από 7)

• Επιλογή τμήματος με συνδεδεμένες λίστες


– Πρώτη προσαρμογή (first fit)
• Χρησιμοποιείται η πρώτη οπή που ταιριάζει
– Επόμενη προσαρμογή (next fit)
• Όπως παραπάνω αλλά συνεχίζει από το τελευταίο σημείο
– Βέλτιστη προσαρμογή (best fit)
• Ψάχνουμε όλη τη λίστα για την μικρότερη δυνατή οπή
– Χειρότερη προσαρμογή (worst fit)
• Ψάχνουμε όλη τη λίστα για την μεγαλύτερη δυνατή οπή

27
Διαχείριση ελεύθερης μνήμης (6 από 7)

• Επιλογή τμήματος με συνδεδεμένες λίστες


– Χρήση χωριστών λιστών για οπές και διεργασίες
• Πιο γρήγορη αναζήτηση στη λίστα οπών
– Η λίστα οπών ταξινομείται με το μέγεθος
• Πιο γρήγορη αναζήτηση της κατάλληλης οπής
• Βέλτιστη προσαρμογή = πρώτη προσαρμογή
– Δεν χρειάζεται εξωτερική λίστα οπών
• Οι δείκτες αποθηκεύονται στις ίδιες τις οπές
– Πιο δύσκολη ενημέρωση στην αποδέσμευση
• Πρέπει να δούμε πού θα μπει η διαθέσιμη μνήμη

28

Διαχείριση ελεύθερης μνήμης (7 από 7)

• Γρήγορη προσαρμογή (quick fit)


– Διατήρηση λιστών οπών με διάφορα μεγέθη
– Πολύ γρήγορος εντοπισμός κατάλληλης οπής
– Πιο δύσκολη ενημέρωση στην αποδέσμευση
• Πρέπει να ψάξουμε για γειτονικές οπές
• Δεν ξέρουμε όπως σε ποιες λίστες είναι!

29
Εικονική μνήμη

Εικονική μνήμη (1 από 2)


• Γιατί χρειάζεται η εικονική μνήμη;
– Εκτέλεση τεράστιων προγραμμάτων
– Εκτέλεση πολλών προγραμμάτων ταυτόχρονα
– Η εναλλαγή είναι πολύ ακριβή λύση
• Υπερθέματα (overlays)
– Επιτρέπει εκτέλεση μεγάλων προγραμμάτων
– Κάθε πρόγραμμα χωρίζεται σε υπερθέματα
• Αρχικά φορτώνεται ο διαχειριστής υπερθεμάτων
• Ο διαχειριστής φορτώνει το αρχικό υπέρθεμα
• Τα άλλα υπερθέματα φορτώνονται όταν χρειάζονται

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)

• Δομή καταχώρισης πίνακα σελίδων


– Η ακριβής μορφή εξαρτάται από τη μηχανή
– Bit προστασίας: τι είδους πρόσβαση επιτρέπεται
• Μπορεί να είναι RO/RW ή R/W/X
– Bit τροποποίησης: η σελίδα έχει τροποποιηθεί πρόσφατα
• Πρέπει να γραφτεί στη μνήμη πριν απομακρυνθεί
– Bit αναφοράς: η σελίδα έχει χρησιμοποιηθεί πρόσφατα
– Bit κρυφής μνήμης: όχι αποθήκευση στην κρυφή μνήμη
37
Επιτάχυνση σελιδοποίησης (1 από 4)
• Η χαρτογράφηση πρέπει να είναι πολύ γρήγορη
– Κάθε αναφορά στη μνήμη απαιτεί χαρτογράφηση
– Μία εντολή μπορεί να περιέχει πολλές αναφορές
• Ο πίνακας σελίδων μπορεί να είναι πολύ μεγάλος
– Εξαρτάται από μέγεθος μνήμης και σελίδας
• Πού βρίσκεται ο πίνακας σελίδων;
– Σε καταχωρητές: γρήγορη χαρτογράφηση
• Μεγάλος χρόνος μεταγωγής και πολύ μεγάλο κόστος
– Στη μνήμη: γρήγορη μεταγωγή (αλλαγή καταχωρητή)
• Πολύ χαμηλή επίδοση λόγω αναφορών στη μνήμη

38

Επιτάχυνση σελιδοποίησης (2 από 4)

• Κρυφή μνήμη αναζήτησης μετάφρασης (TLB)


– Όλοι οι πίνακες σελίδων αρχικά βρίσκονται στη μνήμη
• Είναι ανέφικτο να έχουμε όλο τον πίνακα σε καταχωρητές
• Τα προγράμματα χρησιμοποιούν λίγες σελίδες σε κάθε περίοδο
– Αποθήκευση των μεταφράσεων σε κρυφή μνήμη
• Ονομάζεται και συνειρμική (associative) μνήμη
• Αποτελείται από λίγους καταχωρητές μέσα στην MMU
39
Επιτάχυνση σελιδοποίησης (3 από 4)
• Έστω ότι μια εικονική διεύθυνση στέλνεται στην MMU
– Η MMU συγκρίνει τον αριθμό σελίδας με την TLB
• Οι συγκρίσεις γίνονται παράλληλα με όλους τους καταχωρητές
• Προφανώς αυτό ανεβάζει σημαντικά το κόστος της TLB
– Αν η σελίδα βρεθεί σχηματίζεται η φυσική διεύθυνση
• Εκτός αν υπάρχει σφάλμα προστασίας
– Αν η σελίδα δεν βρεθεί καταφεύγουμε σε πίνακα σελίδων
• Αντικαθιστά μια από τις υπάρχουσες καταχωρίσεις
– Όλη η διαδικασία γίνεται μέσω του υλικού της MMU
• Σε ορισμένα συστήματα (RISC) εμπλέκεται και το λογισμικό

40

Επιτάχυνση σελιδοποίησης (4 από 4)


• Διαχείριση αστοχιών TLB με λογισμικό
– Το λειτουργικό σύστημα αντιμετωπίζει την αστοχία
• Διαβάζει πίνακα σελίδων και δημιουργεί νέα καταχώριση
• Επιλέγει την καταχώριση που θα αντικατασταθεί
– Σημαντική απλοποίηση της MMU
– Επιτρέπει στο λειτουργικό ορισμένες βελτιστοποιήσεις
• Φόρτωση καταχωρίσεων πριν χρειαστούν οι σελίδες
– Δύο είδη αστοχιών σελίδων στη διαχείριση με λογισμικό
• Ήπια αστοχία: η σελίδα είναι στη μνήμη αλλά όχι στην TLB
• Αυστηρή αστοχία: η σελίδα δεν υπάρχει ούτε στη μνήμη

41
Πολύ μεγάλες μνήμες (1 από 4)
• Πίνακες σελίδων για μεγάλες μνήμες
– Παράδειγμα: εικονικές διευθύνσεις 32 bit και σελίδες 4 K
– Ο πίνακας σελίδων έχει 1 εκατομμύριο καταχωρίσεις!
• Πολυεπίπεδοι πίνακες σελίδων
– Παράδειγμα: εικονικές διευθύνσεις 32 bit και σελίδες 4 K
• Τα πρώτα 10 bit αναφέρονται στον πίνακα πρώτου επιπέδου
• Ο πίνακας χωράει ακριβώς σε μία σελίδα των 4 K
• Τα επόμενα 10 bit αναφέρονται στον δεύτερο πίνακα
• Και αυτός ο πίνακας χωράει σε μία σελίδα των 4 K
• Η απόσταση επισυνάπτεται για να βγει η τελική διεύθυνση

42

Πολύ μεγάλες μνήμες (2 από 4)

Παράδειγμα πίνακα δύο επιπέδων


43
Πολύ μεγάλες μνήμες (3 από 4)
• Πολυεπίπεδοι πίνακες σελίδων
– Τα περισσότερα προγράμματα θέλουν λίγη μνήμη
– Αρκούν λίγοι πίνακες σελίδων στη μνήμη
• Πίνακες που δείχνουν σε στοίβα, σωρό και κώδικα
• Ανεστραμμένοι πίνακες σελίδων
– Οι πολυεπίπεδοι δεν φτάνουν για διευθύνσεις 64 bit
– Αντί για πίνακα σελίδων, έχουμε πίνακα πλαισίων
• Δείχνει ποια διεργασία / σελίδα είναι σε κάθε πλαίσιο
• Ανάλογος με το μέγεθος της φυσικής μνήμης
• Ανεξάρτητος από το πλήθος των διεργασιών

44

Πολύ μεγάλες μνήμες (4 από 4)

• Ανεστραμμένοι πίνακες σελίδων


– Χρήση TLB για τις συχνά χρησιμοποιούμενες σελίδες
– Χρήση πίνακα κατακερματισμού
• Κατακερματίζουμε την εικονική διεύθυνση
45
Αλγόριθμοι αντικατάστασης
σελίδων

Αλγόριθμοι αντικατάστασης
• Αντικατάσταση σελίδας στη μνήμη
– Απαιτείται μετά από σφάλμα σελίδας
– Επιλέγεται μία σελίδα προς απομάκρυνση από τη μνήμη
– Αν έχει τροποποιηθεί, γράφεται στο δίσκο
– Στη συνέχεια φορτώνεται στη θέση της η νέα σελίδα
• Αλγόριθμοι αντικατάστασης σελίδων
– Στόχος: απομάκρυνση μιας «αχρησιμοποίητης» σελίδας
– Παρόμοιοι αλγόριθμοι με άλλα είδη αντικατάστασης
– Η χρονική κλίμακα είναι σχετικά μεγάλη
• Η νέα σελίδα πρέπει να φορτωθεί από το δίσκο

47
Ο βέλτιστος αλγόριθμος
• Βέλτιστος αλγόριθμος αντικατάστασης (OPT)
– Επιλέγεται η σελίδα που θα χρησιμοποιηθεί πιο αργά
– Ο αλγόριθμος είναι ο θεωρητικά βέλτιστος
– Δεν ξέρουμε πότε θα ξαναχρησιμοποιηθεί κάθε σελίδα
– Μπορούμε να τον δοκιμάσουμε με ένα πρόγραμμα
• Σημειώνουμε όλες τις αναφορές σε σελίδες
• Προσομοιώνουμε τον βέλτιστο αλγόριθμο
• Χρησιμοποιούμε τα αποτελέσματα ως μέτρο σύγκρισης
• Ένας αλγόριθμος 1% χειρότερος είναι αρκετά καλός
• Τα αποτελέσματα ισχύουν για τη συγκεκριμένη εκτέλεση

48

Αλγόριθμος NRU (1 από 3)


• Αλγόριθμος NRU
– Αξιοποίηση bit κατάστασης Α και Τ
• Συνήθως το υλικό ενημερώνει αυτόματα αυτά τα bit
– Προσομοίωση με λογισμικό
• Αρχικά όλες οι σελίδες σημειώνονται ως απούσες
• Όταν γίνει αναφορά σε σελίδα έχουμε σφάλμα σελίδας
• Το λειτουργικό σύστημα θέτει το bit Α
• Η σελίδα σημειώνεται ως ανάγνωσης μόνο
• Όταν γίνει εγγραφή στη σελίδα έχουμε σφάλμα σελίδας
• Το λειτουργικό σύστημα θέτει το bit Τ
• Η σελίδα σημειώνεται ως ανάγνωσης/εγγραφής

49
Αλγόριθμος NRU (2 από 3)
• Αλγόριθμος NRU
– Κατανομή σελίδων σε 4 κατηγορίες
• 0: δεν έγινε αναφορά, δεν τροποποιήθηκε
• 1: δεν έγινε αναφορά, τροποποιήθηκε
• 2: έγινε αναφορά, δεν τροποποιήθηκε
• 4: έγινε αναφορά, τροποποιήθηκε
– Ο NRU επιλέγει σελίδα από τη χαμηλότερη
• Προτεραιότητα σε παλιές σελίδες
• Δευτερευόντως σε «καθαρές» σελίδες

50

Αλγόριθμος NRU (3 από 3)


• Αλγόριθμος NRU
– Πώς μπορεί να υπάρχει η κατηγορία 1;
• 1: δεν έγινε αναφορά, τροποποιήθηκε
– Το λειτουργικό περιοδικά μηδενίζει τα bit Α
• Μας ενδιαφέρουν μόνο οι πρόσφατες αναφορές
– Τα bit Τ μηδενίζονται αν γραφτεί η σελίδα
• Αυτό μπορεί να γίνει στο παρασκήνιο
• Μία σελίδα μπορεί έτσι να γίνει καθαρή

51
Αλγόριθμος FIFO
• Αλγόριθμος FIFO
– Ταξινόμηση σελίδων με τη σειρά φόρτωσης
• Αρκεί μια γραμμική λίστα των σελίδων
• Κάθε νέα σελίδα μπαίνει στο τέλος
• Η παλιότερη σελίδα βρίσκεται στην αρχή
– Επιλέγεται η σελίδα που φορτώθηκε πρώτη
• Η σελίδα που είναι περισσότερη στη μνήμη
• Η σελίδα αυτή μπορεί να χρησιμοποιείται πολύ!

52

Αλγόριθμος δεύτερης ευκαιρίας

• Αλγόριθμος δεύτερης ευκαιρίας


– Αρχικά επιλέγει την παλιότερη σελίδα (όπως ο FIFO)
– Αν το bit A είναι 1, μηδενίζουμε και την βάζουμε στο τέλος
– Αλλιώς η σελίδα επιλέγεται για αντικατάσταση
– Ψάχνει για μια παλιά και αχρησιμοποίητη σελίδα
– Αν όλες έχουν χρησιμοποιηθεί, εκφυλίζεται σε FIFO
53
Αλγόριθμος του ρολογιού

• Αλγόριθμος του ρολογιού


– Δεύτερη ευκαιρία με κυκλική λίστα
– Σε κάθε σφάλμα ελέγχουμε τη σελίδα του δείκτη
• Αν έχει χρησιμοποιηθεί, μηδενίζουμε το bit Α και προχωράμε
• Αν όχι, η σελίδα επιλέγεται για αντικατάσταση
54

Αλγόριθμος LRU (1 από 2)


• Αλγόριθμος LRU
– Επιλογή της σελίδας που προσπελάστηκε παλιότερα
– Η ακριβής υλοποίηση έχει απαγορευτικό κόστος
• Απαιτεί συνεχή ενημέρωση μιας λίστας
• Προσεγγιστικές υλοποιήσεις του LRU
– Το υλικό έχει έναν μετρητή των 64 bit
– Ο μετρητής αυξάνεται κατά 1 μετά από κάθε εντολή
– Σε κάθε αναφορά στη μνήμη ο μετρητής αποθηκεύεται
• Στην καταχώριση στον πίνακα σελίδων
• Για λογικό κόστος, θα πρέπει να γίνεται στο TLB

55
Αλγόριθμος LRU (2 από 2)

• Προσεγγιστικές υλοποιήσεις του LRU


– Για n σελίδες έχουμε πίνακα n x n bit, αρχικά μηδενισμένο
– Αναφορά στην k: γραμμή k γίνεται 1 και στήλη k γίνεται 0
– Η στήλη με τα πιο πολλά 1 χρησιμοποιήθηκε πιο παλιά
56

Προσομοίωση LRU (1 από 3)


• Προσομοίωση του αλγόριθμου LRU με λογισμικό
– Οι υπολογιστές δεν διαθέτουν υλικό για τον LRU
• Αλγόριθμος NFU
– Κάθε σελίδα έχει έναν μετρητή, αρχικά μηδενισμένο
– Σε κάθε διακοπή του ρολογιού σαρώνονται οι σελίδες
• Το bit Α προστίθεται στον μετρητή και μηδενίζεται
– Αρκετά καλή προσέγγιση του LRU
– Το πρόβλημα είναι ότι ο NFU δεν ξεχνάει τίποτα!
• Οι μετρητές δεν μειώνονται με το χρόνο

57
Προσομοίωση LRU (2 από 3)

• Γήρανση (aging) των μετρητών


– Οι μετρητές ολισθαίνουν δεξιά πριν από κάθε πρόσθεση
– Το bit Α προστίθεται στο αριστερό και όχι στο δεξί άκρο
58

Προσομοίωση LRU (3 από 3)


• Αλγόριθμος NFU
– Με την γήρανση οι μετρητές σταδιακά μηδενίζονται
– Η τελευταία τιμή έχει πολύ μεγαλύτερο βάρος
• Αποκλίσεις NFU από LRU
– Οι μετρητές είναι προσεγγιστικοί
• Έστω δύο σελίδες που χρησιμοποιήθηκαν στο ίδιο διάστημα
• Δεν φαίνεται ποια χρησιμοποιήθηκε πιο πρόσφατα
– Οι μετρητές έχουν περιορισμένη μνήμη
• Μετά από λίγη ώρα μηδενίζονται όλοι
– Συνήθως αυτά δεν έχουν μεγάλη σημασία

59
Σύνολο εργασίας (1 από 4)
• Σελιδοποίηση κατ’απαίτηση
– Όταν ξεκινά η διεργασία, δεν έχει καμία σελίδα στη μνήμη
– Οι σελίδες φορτώνονται όταν συμβεί σφάλμα σελίδας
• Σύνολο εργασίας διεργασίας
– Οι σελίδες που χρησιμοποιεί την τρέχουσα περίοδο
– Περιορισμένο λόγω της τοπικότητας των αναφορών
• Σε κάθε φάση της μια διεργασία χρησιμοποιεί λίγες σελίδες
– Αρκεί το σύνολο εργασίας να είναι στη μνήμη
– Αλλιώς θα έχει συνεχώς σφάλματα σελίδες
• Σε αυτή την περίπτωση λέμε ότι η διαδικασία «αλωνίζει»

60

Σύνολο εργασίας (2 από 4)


• Οι διεργασίες πρέπει ενίοτε να πηγαίνουν στο δίσκο
– Ώστε να υπάρχει αρκετός χώρος για άλλες διεργασίες
• Τι θα γίνει όταν επανέλθει μια διεργασία στη μνήμη;
– Η απλούστερη λύση είναι να μην γίνει τίποτα
• Η διεργασία σταδιακά θα φορτώσει το σύνολο εργασίας της
• Αυτό όμως θα έχει ως κόστος πολλά σφάλματα σελίδων
– Σε μερικά ΛΣ παρακολουθείται το σύνολο εργασίας
– Προσελιδοποίηση: φόρτωση του συνόλου εργασίας
• Όταν επανέρχεται στη μνήμη η διεργασία
• Αποφυγή των υπερβολικών σφαλμάτων σελίδων

61
Σύνολο εργασίας (3 από 4)

• Μοντελοποίηση συνόλου εργασίας


– Ορίζουμε το σύνολο εργασίας τη στιγμή t ως w(k,t)
• Περιλαμβάνει τις σελίδες των τελευταίων k αναφορών
• Μη φθίνουσα συνάρτηση του k, τείνει προς μέγεθος διεργασίας
• Μικρότερο αν δεν χρησιμοποιούνται όλες οι σελίδες
– Η καμπύλη αυξάνεται απότομα και μετά ομαλοποιείται
• Οι διεργασίες αναφέρονται σε λίγες σελίδες κάθε στιγμή
• Οι σελίδες αλλάζουν αργά με την πρόοδο του προγράμματος
62

Σύνολο εργασίας (4 από 4)


• Συμπέρασμα: το σύνολο εργασίας βοηθάει
– Προσελιδοποίηση σελίδων που είναι στο σύνολο εργασίας
– Επιλογή σελίδων εκτός συνόλου για αντικατάσταση
• Παρακολούθηση συνόλου εργασίας
– Παρακολούθηση των τελευταίων k αναφορών
– Η ακριβής παρακολούθηση έχει απαγορευτικό κόστος
– Συνήθως χρησιμοποιούμε κάποια προσέγγιση
• Παράδειγμα: αναφορές στα τελευταία 100 ms
– Μιλάμε πάντα για εικονικό και όχι πραγματικό χρόνο
• Δηλαδή τον χρόνο πραγματικής εκτέλεσης της διεργασίας

63
Αλγόριθμος συνόλου εργασίας (1 από 2)

• Αλγόριθμος αντικατάστασης συνόλου εργασίας


– Δύο πεδία: bit A και τελευταία προσπέλαση
• Aν Α == 1 σημειώνουμε τον τρέχοντα εικονικό χρόνο
• Αν A == 0 τότε δεν έχει γίνει αναφορά στο τελευταίο διάστημα

64

Αλγόριθμος συνόλου εργασίας (2 από 2)

• Αλγόριθμος αντικατάστασης συνόλου εργασίας


– Υπολογίζουμε την ηλικία της σελίδας
• Τρέχων χρόνος μείον χρόνος τελευταίας προσπέλασης
– Αν η ηλικία είναι πάνω από t τότε αντικαθίσταται
• Συνεχίζουμε μέχρι να αντικαταστήσουμε όλες τις σελίδες
– Αν η ηλικία είναι κάτω από t τότε
• Σημειώνουμε την παλιότερη τέτοια σελίδα
• Αν δεν αντικατασταθεί άλλη, τότε αντικαθίσταται αυτή

65
Αλγόριθμος WSClock (1 από 2)
• Αλγόριθμος WSClock
– Οι σελίδες οργανώνονται σε κυκλική λίστα
– Σε κάθε σφάλμα ξεκινάμε από εκεί που είχαμε μείνει
– Αν η σελίδα έχει Α == 1 μηδενίζουμε και προχωράμε
– Αν έχει Α == 0 τότε συγκρίνουμε την ηλικία με το t
• Αν είναι μεγαλύτερη από t τότε η σελίδα επιλέγεται
– Αν είναι καθαρή, επιλέγεται και αντικαθίσταται
• Αν δεν είναι καθαρή, προγραμματίζεται για εγγραφή
• Προχωράμε στην επόμενη αφού η εγγραφή θα αργήσει

66

Αλγόριθμος WSClock (2 από 2)


• Αλγόριθμος WSClock
– Αν σταλθούν n σελίδες στο δίσκο, σταματάμε
• Δεν θέλουμε να καλείται συνέχεια ο αλγόριθμος
• Αλλά δεν θέλουμε και να αδειάσουμε τη μνήμη
– Αν δεν έχει βρεθεί σελίδα σε έναν κύκλο
• Αν έχουν σταλθεί σελίδες στο δίσκο συνεχίζουμε
– Τελικά κάποια θα αδειάσει και θα αντικατασταθεί
• Αν δεν έχουν σταλθεί σελίδες στο δίσκο
– Επιλέγουμε μία καθαρή σελίδα στην τύχη!

67
Αλγόριθμος WSClock (3)

Παράδειγμα αλγόριθμου WSClock


68

Σύνοψη αλγορίθμων

• Κόστος υλοποίησης και αποτελεσματικότητα


– Ορισμένοι απαιτούν ειδικό υλικό (π.χ. LRU)
– Οι αλγόριθμοι γήρανσης και WSClock είναι πιο πρακτικοί
• Προσεγγίσεις LRU και συνόλου εργασίας, αντίστοιχα
69
Θέματα σχεδιασμού

Τοπικές και καθολικές πολιτικές (1 από 3)

• Πώς πρέπει να κατανέμεται η μνήμη στις διεργασίες;


– Τοπικά: αντικατάσταση σελίδων της ίδιας διεργασίας
– Καθολικά: αντικατάσταση οποιονδήποτε σελίδων
– Η καθολική πολιτική κατανέμει τη μνήμη δυναμικά
71
Τοπικές και καθολικές πολιτικές (2 από 3)
• Γενικά οι καθολικές πολιτικές λειτουργούν καλύτερα
– Έστω ότι η διεργασία αλλάζει μέγεθος συνόλου εργασίας
– Αν μεγαλώσει, η τοπική θα οδηγήσει σε αλώνισμα
– Αν μικρύνει, η τοπική πολιτική θα σπαταλά μνήμη
• Πώς όμως θα κατανείμουμε τη μνήμη;
– Καταμερισμός διαθέσιμων πλαισίων στα ίσα
• Η κατανομή αλλάζει με το πλήθος των διεργασιών
– Καταμερισμός διαθέσιμων πλαισίων αναλόγως μεγέθους
• Πρέπει να δίνεται όμως ένας ελάχιστος αριθμός σε όλες
– Αρχική κατανομή και μετά δυναμική προσαρμογή

72

Τοπικές και καθολικές πολιτικές (3 από 3)

• Αλγόριθμος Συχνότητας Σφαλμάτων Σελίδας (PFF)


– Συνήθως το PFF μειώνεται με πρόσθετη μνήμη
– Παρακολούθηση συχνότητας σφαλμάτων ανά διεργασία
• Μπορεί να χρησιμοποιεί σταθμισμένους μέσους
– Αν ανέβει πολύ θέλουμε περισσότερη μνήμη
– Αν πέσει πολύ μπορούμε να παραχωρήσουμε μνήμη
73
Έλεγχος φορτίου
• Αν δεν χωράνε όλα τα σύνολα εργασίας;
– Τότε έχουμε αλώνισμα (συνεχή αλλαγή σελίδων)
– Ο PFF δείχνει ότι όλες οι διεργασίες θέλουν μνήμη
• Πρέπει να εξαλειφθούν μερικές διεργασίες
– Μεταφέρονται στο δίσκο οι σελίδες τους
• Χρονοπρογραμματισμός σε δύο επίπεδα
– Έλεγχος φορτίου με μεταφορά στο δίσκο
– Καταμερισμός μνήμης με σελιδοποίηση
– Πρέπει να φροντίζουμε να έχουμε αρκετές στη μνήμη

74

Μέγεθος σελίδας (1 από 2)


• Το υλικό παρέχει κάποιο βασικό μέγεθος σελίδας
– Το λογισμικό μπορεί να λειτουργεί με πολλαπλάσια
• Το μέγεθος σελίδας αποτελεί συμβιβασμό
– Οι μεγάλες σελίδες αυξάνουν την εσωτερική κατάτμηση
• Ένα τμήμα δεν θα χωράει ακριβώς σε σελίδες
• Η τελευταία σελίδα θα είναι κατά μέσο όρο μισογεμάτη
– Οι μικρές σελίδες απαιτούν μεγάλο πίνακα σελίδων
• Περισσότερος χρόνος κατά την αλλαγή διεργασίας
• Το κόστος μεταφοράς ανά σελίδα είναι σταθερό
• Συμφέρει να μεταφέρουμε λίγες μεγάλες σελίδες

75
Μέγεθος σελίδας (2 από 2)
• Μοντελοποίηση της επιβάρυνσης
– μ byte ανά διεργασία
– σ byte ανά σελίδα
– κ byte ανά καταχώριση στον πίνακα σελίδων
– Κάθε σελίδα απαιτεί μ/σ σελίδες
– Άρα ο πίνακας σελίδων έχει μέγεθος μκ/σ
– Η εσωτερική κατάτμηση είναι σ/2
– Η επιβάρυνση ανά διεργασία είναι μκ/σ+σ/2
– Η βέλτιστη τιμή του σ είναι ρίζα του 2μκ
– Παράδειγμα: μ = 1 MB και κ = 8 byte, βέλτιστο σ = 4 KB

76

Εντολές και δεδομένα

• Διαχωρισμός χώρων εντολών και δεδομένων


– Συνήθως δεδομένα και εντολές είναι σε ενιαίο χώρο
– Σε ορισμένα συστήματα διαχωρίζονται
• Οι εντολές αναφέρονται σε άλλη μνήμη από τα δεδομένα
– Δύο ανεξάρτητες εικονικές μνήμες
• Χρησιμοποιήθηκε στο PDP-11 για μεγάλα προγράμματα
77
Κοινόχρηστες σελίδες (1 από 3)
• Κοινόχρηστες σελίδες
– Το πρόγραμμα μπορεί να εκτελείται σε πολλές διεργασίες
– Θα μπορούσαν οι σχετικές σελίδες να καταμερίζονται
• Επιτρέπεται στις σελίδες ανάγνωσης μόνο
• Στην πράξη, είναι οι σελίδες κώδικα
– Υλοποίηση με χωριστούς χώρους διευθύνσεων
• Πίνακας σελίδων δεδομένων και κώδικα ανά διεργασία
• Ο πίνακας σελίδων κώδικα μπορεί να καταμερίζεται
– Λίγο πιο περίπλοκη με ενιαίο χώρο διευθύνσεων
– Τι γίνεται αν μία από τις διεργασίες φύγει από τη μνήμη;

78

Κοινόχρηστες σελίδες (2 από 3)

• Παράδειγμα καταμερισμού σελίδων


– Δύο διεργασίες έχουν τον ίδιο κώδικα
– Τα δεδομένα όμως διαφοροποιούνται
79
Κοινόχρηστες σελίδες (3 από 3)
• Αντιγραφή κατά την εγγραφή
– UNIX: μετά το fork οι διεργασίες μοιράζονται δεδομένα
– Κάθε διεργασία έχει άλλο πίνακα αλλά τις ίδιες σελίδες
– Οι σελίδες όμως σημειώνονται ως μόνο ανάγνωσης
– Όταν τροποποιηθεί μία σελίδα έχουμε παγίδα
– Το λειτουργικό δημιουργεί αντίγραφο της σελίδας
• Κάθε διεργασία διαθέτει τώρα το δικό της αντίγραφο
– Τα αντίγραφα γίνονται ανάγνωσης/εγγραφής
– Όποιες σελίδες δεν τροποποιηθούν δεν θα αντιγραφούν

80

Κοινόχρηστες βιβλιοθήκες (1 από 3)


• Κοινόχρηστες βιβλιοθήκες
– Οι διεργασίες συχνά χρησιμοποιούν μεγάλες βιβλιοθήκες
• Για παράδειγμα, τις βιβλιοθήκες γραφικών του GUI
– Με στατική σύνδεση είναι δύσκολο να τις μοιραστούμε
• Κάθε διεργασία έχει διαφορετικά τμήμα σε διαφορετικά μέρη
– Συμφέρει να έχουμε δυναμική σύνδεση
– Windows: Dynamic Link Libraries (DLL)
• Το πρόγραμμα συνδέεται με ρουτίνες στελέχους
• Αυτές δεσμεύονται με τη βιβλιοθήκη στο χρόνο εκτέλεσης

81
Κοινόχρηστες βιβλιοθήκες (2 από 3)
• Λειτουργία DLL στα Windows
– Οι DLL φορτώνονται ολόκληρες στη μνήμη
• Δεν φορτώνονται μόνο οι συναρτήσεις που χρησιμοποιούνται
• Στην πραγματικότητα σελιδοποιούνται και αυτές
• Φόρτωση είτε με το πρόγραμμα είτε με την πρώτη κλήση
– Όλα τα προγράμματα έχουν πρόσβαση στις DLL
– Τα DLL επιτρέπουν τη διόρθωση σφαλμάτων
• Έστω ότι βρέθηκε κάποιο πρόγραμμα ασφάλειας σε ένα DLL
• Μπορεί να αντικατασταθεί με νέα έκδοση
• Οι διεργασίες βλέπουν τις ίδιες ακριβώς κλήσεις

82

Κοινόχρηστες βιβλιοθήκες (3 από 3)

• Κοινόχρηστες βιβλιοθήκες
– Κάθε διεργασία φορτώνει τη βιβλιοθήκη αλλού
– Η βιβλιοθήκη πρέπει να είναι ανεξάρτητη θέσης
• Να εκτελείται οπουδήποτε στη μνήμη
• Άρα να χρησιμοποιεί μόνο σχετικά άλματα και αναφορές
83
Χαρτογραφημένα αρχεία
• Χαρτογραφημένα αρχεία στη μνήμη
– Παρέχονται σε ορισμένα συστήματα
– Αρχείο που φαίνεται να έχει φορτωθεί στη μνήμη
• Χρήση με λειτουργίες μνήμης αντί εισόδου/εξόδου
• Το αρχείο μπορεί να σελιδοποιείται όπως όλη η μνήμη
• Έτσι μπορούν να φορτώνονται και τα DLL
– Επιτρέπει και επικοινωνία διεργασιών
• Πολλές διεργασίες χαρτογραφούν το ίδιο αρχείο

84

Πολιτική καθαρισμού (1 από 2)


• Πολιτική καθαρισμού
– Οι τροποποιημένες σελίδες δεν είναι διαθέσιμες
• Πρέπει να περιμένουμε να γραφτούν στο δίσκο
• Καθυστέρηση όταν θέλουμε να φορτώσουμε νέες σελίδες
– Δαίμονας σελιδοποίησης
• Φροντίζει να υπάρχουν πάντα διαθέσιμες σελίδες
– Ο δαίμονας ξυπνάει περιοδικά
• Αν έχουμε λίγες διαθέσιμες επιλέγει μερικές για αφαίρεση
• Αν είναι τροποποιημένες τις στέλνει και για εγγραφή

85
Πολιτική καθαρισμού (2 από 2)
• Πολιτική καθαρισμού
– Ο δαίμονας δεν διώχνει τις σελίδες που επιλέγει
• Αν ζητηθούν ξανά, είναι ακόμα διαθέσιμες
• Τώρα όμως θα είναι και καθαρές
• Άρα μπορούν να χρησιμοποιηθούν άμεσα
• Πολιτική ρολογιού με δύο δείκτες
– Ο εμπρός δείκτης επιλέγει σελίδες για εγγραφή
– Φροντίζει να υπάρχουν διαθέσιμες σελίδες αν χρειαστούν
– Ο πίσω δείκτης επιλέγει σελίδες προς αντικατάσταση
– Χρησιμοποιεί τις διαθέσιμες σελίδες για φόρτωση νέων

86

Διασύνδεση εικονικής μνήμης


• Η κλασική διασύνδεση είναι αυτή που περιγράψαμε
– Μπορεί όμως να επιτρέπονται και αποκλίσεις
• Παράδειγμα: κοινή μνήμη
– Απόδοση ονόματος σε ορισμένες περιοχές
– Χρήση ονόματος για σύνδεση με διαφορετικές διεργασίες
– Η κοινή μνήμη επιτρέπει γρήγορη επικοινωνία διεργασιών
• Παράδειγμα: κατανεμημένη κοινόχρηστη μνήμη
– Κοινός χώρος διευθύνσεων σε χωριστές μηχανές
– Σφάλμα σελίδας όταν μια μηχανή δεν έχει τη σελίδα
– Οι σελίδες στέλνονται από μηχάνημα σε μηχάνημα

87
Ζητήματα υλοποίησης

Ρόλος του ΛΣ (1 από 2)


• Λειτουργικό σύστημα και σελιδοποίηση
– Δημιουργία νέας διεργασίας
• Εκτίμηση μεγέθους προγράμματος και δεδομένων
• Δημιουργία και αρχικοποίηση πίνακα σελίδων
• Δέσμευση χώρου στην περιοχή εναλλαγής
• Ενημέρωση πίνακα διεργασιών
– Χρονοπρογραμματισμός διεργασίας
• Καθαρισμός MMU και TLB
• Αλλαγή πίνακα σελίδων
• Προαιρετικά φόρτωση ορισμένων σελίδων

89
Ρόλος του ΛΣ (2 από 2)
• Λειτουργικό σύστημα και σελιδοποίηση
– Σφάλμα σελίδας
• Εντοπισμός ζητούμενης σελίδας στο δίσκο
• Φόρτωση σελίδας σε διαθέσιμο πλαίσιο
• Επαναφορά μετρητή προγράμματος και επανεκτέλεση
– Τερματισμός διεργασίας
• Αποδέσμευση πίνακα σελίδων
• Αποδέσμευση χώρου στην περιοχή εναλλαγής
• Αποδέσμευση μη καταμεριζόμενων σελίδων

90

Χειρισμός σφαλμάτων σελίδας (1 από 3)

• Χειρισμός σφαλμάτων σελίδας


– Το υλικό προκαλεί παγίδα στον πυρήνα
• Ο μετρητής προγράμματος αποθηκεύεται στη στοίβα
– Εκτέλεση βασικού χειριστή διακοπής
• Αποθήκευση υπόλοιπων καταχωρητών στη στοίβα
• Κλήση του χειριστή σφαλμάτων σελίδας
– Χειριστής σφαλμάτων σελίδας
• Καθορισμός ζητούμενης σελίδας
• Μπορεί να απαιτεί ανάλυση της εντολής που διακόπηκε

91
Χειρισμός σφαλμάτων σελίδας (2 από 3)

• Χειρισμός σφαλμάτων σελίδας


– Έλεγχος εγκυρότητας και πρόσβασης
• Αν υπάρχει πρόβλημα στέλνεται μήνυμα στη διεργασία
• Επιλέγεται ένα ελεύθερο πλαίσιο ή εκτελείται η αντικατάσταση
– Καθαρισμός πλαισίου σελίδας (αν είναι «βρώμικο»)
• Χρονοπρογραμματίζεται η εγγραφή της σελίδας στο δίσκο
• Η διεργασία αναστέλλεται
– Φόρτωση της σελίδας στη μνήμη
• Χρονοπρογραμματίζεται η ανάγνωση της σελίδας από το δίσκο
• Η διεργασία αναστέλλεται (αν δεν είναι ήδη σε αναστολή)

92

Χειρισμός σφαλμάτων σελίδας (3 από 3)

• Χειρισμός σφαλμάτων σελίδας


– Ενημέρωση πίνακα σελίδων
• Μόλις ολοκληρωθεί η μεταφορά της σελίδας
– Επαναφορά μετρητή στην εντολή που διακόπηκε
– Χρονοπρογραμματισμός της διεργασίας
• Θα ξεκινήσει με την εντολή που διακόπηκε
– Επαναφορά των καταχωρητών
• Στην κατάσταση που ήταν πριν τη διακοπή

93
Αντίγραφα ασφαλείας εντολών (1 από 2)
• Αντίγραφα ασφαλείας εντολών
– Η επανεκτέλεση της εντολής δεν είναι πάντα απλή
– Παράδειγμα: MOVE.L #6(A1),2(A0) [Motorola 68K]
– Εντολή 6 byte με 2 σχετικές διευθύνσεις
– Η αιτία του σφάλματος σελίδας δεν είναι προφανής
• Το σφάλμα μπορεί να συμβεί κατά τις τρεις προσκομίσεις
• Επιπλέον μπορεί να συμβεί στις δύο αναφορές στη μνήμη

94

Αντίγραφα ασφαλείας εντολών (2 από 2)

• Χρήση ειδικών καταχωρητών στον επεξεργαστή


– Καταχωρητής αρχικής διεύθυνσης τρέχουσας εντολής
• Χρήσιμος αν έχουμε εντολές με διάφορα μεγέθη
– Καταχωρητής αλλαγών σε καταχωρητές
– Βοηθούν στον εντοπισμό της αιτίας του σφάλματος
– Χρησιμοποιούνται για αναίρεση όλων των αλλαγών
– Η εντολή μπορεί να ξεκινήσει από την αρχή
• Με τις ίδιες συνθήκες όπως στην αρχική εκτέλεση

95
Κλείδωμα σελίδων στη μνήμη
• Κλείδωμα σελίδων στη μνήμη
– Έστω ότι μια διεργασία ξεκινά ανάγνωση του δίσκου
• Η διεργασία μπλοκάρεται περιμένοντας τα δεδομένα
– Τι θα γίνει αν η σελίδα δεδομένων αντικατασταθεί;
• Αν χρησιμοποιούμε DMA θα γράψουμε στο λάθος σημείο!
– Οι σελίδες για είσοδο-έξοδο κλειδώνονται
• Καρφίτσωμα (pinning) σελίδων στη μνήμη
– Εναλλακτικά είσοδος-έξοδος μόνο μέσω πυρήνα

96

Δευτερεύουσα μνήμη (1 από 4)


• Διαμέριση ή δίσκος εναλλαγής (swap)
– Ο δίσκος έχει μεγαλύτερη ταχύτητα προσπέλασης
– Η περιοχή εναλλαγής δεν περιέχει σύστημα αρχείων
• Το ΛΣ αναφέρεται απευθείας στα μπλοκ στο δίσκο
– Κατά την εκκίνηση η περιοχή είναι κενή
– Σε κάθε διεργασία εκχωρείται μέρος της περιοχής
– Συνεχόμενη περιοχή ανάλογα με μέγεθος διεργασίας
• Απαιτεί διαχείριση ελεύθερων περιοχών

97
Δευτερεύουσα μνήμη (2 από 4)
• Διαμέριση ή δίσκος εναλλαγής (swap)
– Για κάθε διεργασία θυμόμαστε πού ξεκινά η περιοχή της
• Αποθήκευση στην καταχώριση του πίνακα διεργασιών
• Εύκολη αντιστοίχιση σελίδων σε μπλοκ του δίσκου
– Αρχικοποίηση της περιοχής ανταλλαγής
• Είτε αντιγραφή της εικόνας στην περιοχή πρώτα
• Είτε αντιγραφή της εικόνας στη μνήμη πρώτα
– Τι γίνεται αν η διεργασία μεγαλώσει;
• Δέσμευση ξεχωριστών περιοχών για κώδικα και δεδομένα
• Δέσμευση πολλών τμημάτων για τα δεδομένα

98

Δευτερεύουσα μνήμη (3 από 4)

• Εναλλακτικά, δυναμική δέσμευση χώρου


– Χρησιμοποιούμε χώρο μόνο όταν μια σελίδα εκτοπίζεται
– Απαιτεί πίνακα με διευθύνσεις σελίδων στη μνήμη
– Πιο οικονομική και ευέλικτη από τη σταθερή περιοχή
– Απαιτεί διαχείριση του πίνακα διευθύνσεων στο δίσκο
99
Δευτερεύουσα μνήμη (4 από 4)
• Χρήση αρχείων ως περιοχών ανταλλαγής
– Χρησιμοποιούνται στα Windows
• Επιτρέπονται και διαμερίσεις
– Πιο ευέλικτη διαχείριση χώρου
– Πιο αργή αντιστοίχιση
• Δεν παρακάμπτεται το σύστημα αρχείων
– Χρήση αρχείου προγράμματος για τον κώδικα
• Βρίσκεται ήδη αποθηκευμένο στο δίσκο
• Αυτό επιτρέπεται και με διαμερίσεις

100

Πολιτική και μηχανισμός (1 από 3)


• Διαχωρισμός πολιτικής και μηχανισμού
– Εκτέλεση διαχειριστή μνήμης σε επίπεδο χρήστη
• Ο πυρήνας παρέχει το μηχανισμό
• Ο διαχειριστής παρέχει την πολιτική
• Χρησιμοποιήθηκε στο σύστημα Mach
– Χειριστής χαμηλού επιπέδου της MMU (πυρήνας)
• Γράφεται σε assembly ανάλογα με τη μηχανή
– Χειριστής σφαλμάτων σελίδας (πυρήνας)
• Γράφεται σε C ανάλογα με το λειτουργικό σύστημα

101
Πολιτική και μηχανισμός (2 από 3)

• Εξωτερικός σελιδοποιητής (επίπεδο χρήστη)


– Δημιουργεί τον πίνακα σελίδων και δεσμεύει χώρο
– Ενημερώνεται από τον χειριστή σφαλμάτων σελίδας
– Διαβάζει τις σελίδες από το δίσκο στη μνήμη του
– Ενημερώνει χειριστή MMU όταν ολοκληρωθεί η φόρτωση
– Ο χειριστής MMU απεικονίζει τις σελίδες στην διεργασία
102

Πολιτική και μηχανισμός (3 από 3)


• Πού βρίσκεται ο αλγόριθμος αντικατάστασης;
– Στον εξωτερικό σελιδοποιητή
• Πρέπει να του μεταφέρονται τα bit Α και Τ με κάποιο τρόπο
– Στον πυρήνα
• Επιλέγει τη σελίδα προς αντικατάσταση
• Απεικονίζει τη σελίδα στο χώρο του σελιδοποιητή
• Ο σελιδοποιητής γράφει τη σελίδα στο δίσκο (αν χρειάζεται)
• Ο σελιδοποιητής διαβάζει τη ζητούμενη σελίδα
• Ο εξωτερικός σελιδοποιητής παρέχει μεγάλη ευελιξία
– Μπορεί να εκτελεί αλγόριθμους ανάλογα με τη διεργασία

103
Τμηματοποίηση

Τμηματοποίηση (1 από 4)

• Πολλοί εικονικοί χώροι διευθύνσεων


– Παράδειγμα: μεταγλωττιστής
• Περιέχει πολλούς δυναμικούς πίνακες
• Κάποιοι πίνακες μπορεί να γεμίσουν ενώ άλλοι όχι
105
Τμηματοποίηση (2 από 4)

• Τμηματοποίηση (segmentation)
– Κάθε διεργασία αποτελείται από τμήματα (segments)
– Κάθε τμήμα είναι μια γραμμική ακολουθία διευθύνσεων
– Τα τμήματα έχουν διαφορετικό και μεταβλητό μέγεθος
– Λογικός καταμερισμός της μνήμης σε τμήματα
106

Τμηματοποίηση (3 από 4)
• Πλεονεκτήματα τμηματοποίησης
– Απλούστερη σύνδεση διαδικασιών
• Κάθε διαδικασία είναι διαφορετικό τμήμα
• Δεν χρειάζεται επανατοποθέτηση κώδικα κατά τη σύνδεση
– Διευκόλυνση κοινής χρήσης βιβλιοθηκών
• Κάθε βιβλιοθήκη είναι διαφορετικό τμήμα
• Όλες οι διεργασίες τη βλέπουν με τον ίδιο τρόπο
– Προστασία μνήμης σε επίπεδο τμήματος
• Τα τμήματα είναι λογικές οντότητες (όχι όπως οι σελίδες)
• Μπορούν να προστατεύονται ανάλογα με τη φύση τους

107
Τμηματοποίηση (4 από 4)

Σύγκριση σελιδοποίησης και τμηματοποίησης


108

Υλοποίηση τμηματοποίησης

• Υλοποίηση αμιγούς τμηματοποίησης


– Τα τμήματα έχουν μεταβλητό μέγεθος
– Η φόρτωση / αφαίρεση τμημάτων αφήνει κενά στη μνήμη
• Εξωτερική κατάτμηση: κενά ανάμεσα στα τμήματα μνήμης
– Ίδια προβλήματα όπως με τους καταχωρητές βάσης
109
Υλοποίηση: MULTICS (1 από 6)
• Τμηματοποίηση με σελιδοποίηση: MULTICS
– Κάθε τμήμα μπορεί να σελιδοποιείται
• Φόρτωση μέρους μεγάλων τμημάτων στη μνήμη
• Απλούστευση της διαχείρισης μνήμης με τις σελίδες
– Το MULTICS σχεδιάστηκε στα Honeywell 6000
• 218 τμήματα με 216 λέξεις των 36 bit ανά διεργασία
– Κάθε διεργασία διαθέτει πίνακα τμημάτων
• Ένας περιγραφέας (descriptor) ανά τμήμα
• Ο πίνακας είναι κι αυτός τμήμα που σελιδοποιείται

110

Υλοποίηση: MULTICS (2 από 6)

• Τμηματοποίηση με σελιδοποίηση: MULTICS


– Ο περιγραφέας δείχνει στον πίνακα σελίδων τμήματος
• Ο δείκτης έχει μέγεθος 18 bit ενώ οι διευθύνσεις 24 bit
• Στο τέλος του δείκτη προστίθεται το 000000
• Ουσιαστικά οι σελίδες ευθυγραμμίζονται ανά 64 byte
111
Υλοποίηση: MULTICS (3 από 6)

• Τμηματοποίηση με σελιδοποίηση: MULTICS


– Μέγεθος σελίδας: 1024 ή 64 λέξεις (μικρά τμήματα)
– Σελιδοποίηση ή όχι (ορισμένα τμήματα του MULTICS)
– Bit προστασίας τμήματος
– Η διεύθυνση στη δευτερεύουσα μνήμη δεν περιέχεται
• Βρίσκεται σε πίνακα του χειριστή σφαλμάτων τμήματος
112

Υλοποίηση: MULTICS (4 από 6)

• Τμηματοποίηση με σελιδοποίηση: MULTICS


– Οι διευθύνσεις αποτελούνται από δύο μέρη
– Η απόσταση χωρίζεται και αυτή σε δύο μέρη
– Μετάφραση εικονικών σε φυσικές διευθύνσεις
• Εντοπισμός περιγραφέα τμήματος από τον αριθμό του
• Έλεγχος πρόσβασης και παρουσίας τμήματος στη μνήμη
• Έλεγχος αν η σελίδα βρίσκεται στη μνήμη
• Πρόσθεση απόστασης στην αρχή της σελίδας
113
Υλοποίηση: MULTICS (5 από 6)

• Τμηματοποίηση με σελιδοποίηση: MULTICS


– Και ο πίνακας τμημάτων είναι σελιδοποιημένος
• Ένας καταχωρητής δείχνει στην αρχή του
– Στη διεργασία μπορούν να συμβούν διάφορα σφάλματα
• Προστασίας, τμήματος ή σελίδας
114

Υλοποίηση: MULTICS (6 από 6)

• Τμηματοποίηση με σελιδοποίηση: MULTICS


– Χρήση TLB 16 λέξεων για επιτάχυνση των μεταφράσεων
– Αν βρεθεί το τμήμα/σελίδα πάμε απευθείας στη μνήμη
– Αν δεν βρεθεί η καταχώριση, καταφεύγουμε στους πίνακες
• Η καταχώριση φορτώνεται στο TLB στη θέση της παλιότερης
• Πεδίο ηλικίας που δείχνει πόσο παλιά είναι κάθε καταχώριση
115
Υλοποίηση: Pentium (1 από 8)
• Τμηματοποίηση με σελιδοποίηση: Intel Pentium
– Λιγότερα τμήματα (214), μεγαλύτερο μέγεθος (220 ή 232)
– Κάθε διεργασία βλέπει δύο πίνακες τμημάτων
• Πίνακας τοπικών περιγραφέων (LDT) ανά διεργασία
• Περιέχει τον κώδικα και τα δεδομένα της διεργασίας
• Πίνακας καθολικών περιγραφέων (GDT) για όλες τις διεργασίες
• Περιέχει το λειτουργικό και τη μνήμη του συστήματος
– Ο Pentium διαθέτει έξι καταχωρητές τμημάτων
• CS: τμήμα κώδικα, DS: τμήμα δεδομένων, SS: τμήμα στοίβας
• Φορτώνονται με επιλογείς (selectors) τμημάτων των 16 bit

116

Υλοποίηση: Pentium (2 από 8)

• Τμηματοποίηση με σελιδοποίηση: Intel Pentium


– Περιεχόμενα επιλογέα τμήματος
• Τοπικό ή καθολικό τμήμα (δηλαδή, LDT ή GDT)
• Θέση στον πίνακα (13 bit, άρα 213 τμήματα ανά πίνακα)
– Μαζί με τον επιλογέα φορτώνεται και ο περιγραφέας
• Αποθηκεύεται σε έναν εσωτερικό καταχωρητή
• Οι περιγραφείς έχουν μήκος 8 byte ο καθένας
• Αντιγράφεται από τον LDT ή τον GDT
• Χρήση του επιλογέα με μηδενισμένα τα 3 τελευταία bit
117
Υλοποίηση: Pentium (3 από 8)

• Τμηματοποίηση με σελιδοποίηση: Intel Pentium


– Ο περιγραφέας είναι περίεργος για λόγους συμβατότητας
• Τα τμήματα μπορεί να αρχίζουν οπουδήποτε στη μνήμη
– Το όριο ερμηνεύεται διαφορετικά ανάλογα με το πεδίο G
– Το πεδίο P δείχνει αν το τμήμα είναι στο μνήμη
– Το πεδίο S δείχνει αν το τμήμα ανήκει στο σύστημα
– Το πεδίο DPL περιέχει το πεδίο προστασίας τμήματος
118

Υλοποίηση: Pentium (4 από 8)

• Μετάφραση λογικής διεύθυνσης σε φυσική


– Επιλογή περιγραφέα με βάση τον καταχωρητή τμήματος
– Σφάλμα τμήματος αν το τμήμα δεν είναι στη μνήμη
– Σύγκριση απόστασης με όριο τμήματος
– Πρόσθεση απόστασης στη βάση του τμήματος
– Προκύπτει μια γραμμική (linear) διεύθυνση των 32 bit
• Μπορεί να είναι σελιδοποιημένη ή όχι
119
Υλοποίηση: Pentium (5 από 8)
• Τμηματοποίηση με σελιδοποίηση: Intel Pentium
– Πόσο μεγάλα είναι τα τμήματα;
• Εξαρτάται από το πεδίο G του περιγραφέα
• Είτε 220 byte (όπως στον 8086/8088) είτε 220 σελίδες
– Οι πίνακες σελίδων είναι δύο επιπέδων
– Κάθε διεργασία έχει έναν κατάλογο σελίδων
• Κάθε θέση του δείχνει σε πίνακα δεύτερου επιπέδου
• Κάθε πίνακας είναι μία σελίδα με 210 καταχωρήσεις των 32 bit
– Τα 20 bit κάθε καταχώρισης δείχνουν ένα πλαίσιο σελίδας
• Τα υπόλοιπα bit δείχνουν την κατάσταση της σελίδας

120

Υλοποίηση: Pentium (6 από 8)

• Οι γραμμικές διευθύνσεις χωρίζονται σε τρία μέρη


– Δείκτης στον κατάλογο σελίδων(10 bit)
– Δείκτης στον πίνακα σελίδων δεύτερου επιπέδου (10 bit)
– Απόσταση μέσα στη σελίδα (12 bit)
121
Υλοποίηση: Pentium (7 από 8)
• Τμηματοποίηση με σελιδοποίηση: Intel Pentium
– Χρήση TLB για παράκαμψη των πινάκων σελίδων
– Η τμηματοποίηση μπορεί να απενεργοποιηθεί
• Όλοι οι καταχωρητές τμημάτων ορίζονται ίδιοι
• Μηχανισμός προστασίας του Pentium
– Τέσσερα επίπεδα προνομίων, το 0 είναι πιο προνομιούχο
– Κάθε τμήμα μνήμης ανήκει σε ένα επίπεδο
• Σύμφωνα με επιλογέα και περιγραφέα
– Η εκτελούμενη διεργασία ανήκει και αυτή σε ένα επίπεδο
• Ειδικό πεδίο στον καταχωρητή κατάστασης

122

Υλοποίηση: Pentium (8 από 8)

• Μηχανισμός προστασίας του Pentium


– Ελεγχόμενη πρόσβαση σε κώδικα χαμηλότερου επιπέδου
• Οι εντολές κλήσης αναφέρονται σε επιλογέα/περιγραφέα
• Επιτρέπεται να μεταβούμε μόνο σε πύλες κλήσης (call gates)
• Οι πύλες κλήσης επιλέγονται από το κατώτερο επίπεδο
– Ίδιος μηχανισμός και για παγίδες και διακοπές
123
Ενότητα # 4: Συστήματα Αρχείων

Σκοποί ενότητας
• Κατανόηση της έννοιας των αρχείων και των
καταλόγων αρχείων
• Εξοικείωση με τις βασικές τεχνικές
υλοποίησης συστημάτων αρχείων
• Εισαγωγή στις τεχνικές διαχείρισης και
βελτιστοποίησης των συστημάτων αρχείων
• Εξοικείωση με τον τρόπο υλοποίησης
πραγματικών συστημάτων αρχείων
4
Περιεχόμενα ενότητας
• Αρχεία
• Κατάλογοι
• Υλοποίηση συστήματος αρχείων
• Διαχείριση και βελτιστοποίηση
• Παραδείγματα συστημάτων αρχείων

Εισαγωγή (1 από 3)
• Γιατί χρειάζονται τα μέσα αποθήκευσης;
– Αποθήκευση μεγάλου όγκου πληροφοριών
• Μεγαλύτερου από την μνήμη μιας διεργασίας
– Ανεξαρτητοποίηση πληροφοριών από διεργασίες
• Οι πληροφορίες παραμένουν μόνιμα
• Ακόμη κι αν η διεργασία αποτύχει ή τερματιστεί
– Ταυτόχρονη προσπέλαση πληροφοριών
• Η εικονική μνήμη είναι ιδιωτική σε κάθε διεργασία

7
Εισαγωγή (2 από 3)
• Τα μέσα αποθήκευσης για το ΛΣ
– Γραμμική αλληλουχία μπλοκ σταθερού μεγέθους
– Δύο βασικές λειτουργίες
• Ανάγνωση του μπλοκ k
• Εγγραφή του μπλοκ k
– Πώς βρίσκουμε το κατάλληλο μπλοκ;
– Πώς προστατεύονται τα δεδομένα;
– Πώς ξέρουμε ποια μπλοκ είναι διαθέσιμα;
8

Εισαγωγή (3 από 3)
• Αρχεία: λογική αφαίρεση της αποθήκευσης
– Λογικές μονάδες πληροφοριών
– Οι πληροφορίες στα αρχεία είναι μόνιμες
• Σύστημα αρχείων (file system)
– Υποστηρίζει λειτουργίες επί των αρχείων
• Όψη χρήστη – εικονική μηχανή
– Υλοποιεί αλγόριθμους διαχείρισης των μέσων
• Όψη συστήματος – διαχειριστής πόρων
9
Αρχεία

Ονομασία αρχείων (1 από 3)


• Κάθε αρχείο είναι ένα αντικείμενο με όνομα
– Οι διεργασίες αναφέρονται σε ονόματα αρχείων
– Συμβολοσειρές τουλάχιστον 1-8 γραμμάτων/ψηφίων
• Διάκριση μεταξύ πεζών και κεφαλαίων
– Στο UNIX maria != Maria, στο MS-DOS είναι το ίδιο
• Τύποι συστημάτων αρχείων
– Πολλές επιλογές στο UNIX
– FAT-16/32 σε DOS και Windows 95-98
– NTFS σε Windows NT και μεταγενέστερα
11
Ονομασία αρχείων (2 από 3)

• Προέκταση αρχείου: μετά την τελεία


– Προσδιορίζει το είδος του αρχείου
12

Ονομασία αρχείων (3 από 3)


• Προέκταση αρχείου
– Μέχρι 3 χαρακτήρες στο MS-DOS (κανόνας 8+3)
• Κάποιες προεκτάσεις έχουν σημασία (π.χ. .EXE)
– Η προέκταση είναι απλή σύμβαση στο UNIX
• Ορισμένα προγράμματα περιμένουν προεκτάσεις
• Το λειτουργικό σύστημα δεν τις επιβάλλει
• Μπορεί να έχουμε πολλές ή και καμία
– Στα Windows έχει ρυθμιζόμενη σημασία
• Οι χρήστες/διεργασίες τις συνδέουν με εφαρμογές
13
Δομή των αρχείων (1 από 2)

• Έχουν προταθεί διάφορες δομές


– Ακολουθία byte χωρίς εσωτερική δομή
– Ακολουθία εγγραφών σταθερού μήκους
– Δένδρα εγγραφών με κλειδιά
14

Δομή των αρχείων (2 από 2)


• Ακολουθία byte χωρίς εσωτερική δομή
– Χρησιμοποιείται στο UNIX και στα Windows
– Παρέχει μέγιστη ευελιξία στα προγράμματα
• Ακολουθία εγγραφών σταθερού μήκους
– Εγγραφές εισόδου 80 χαρακτήρων (κάρτες)
– Εγγραφές εξόδου 132 χαρακτήρων (εκτυπωτής)
• Δένδρα εγγραφών με κλειδιά
– Αναζήτηση εγγραφών με συγκεκριμένο κλειδί
– Τοποθέτηση εγγραφών στο «σωστό» σημείο

15
Τύποι αρχείων (1 από 4)
• Τύποι αρχείων
– Κανονικά αρχεία: περιέχουν πληροφορίες χρηστών
– Κατάλογοι: αρχεία ειδικής μορφής για οργάνωση
– Ειδικά αρχεία χαρακτήρων: σειριακές συσκευές
– Ειδικά αρχεία μπλοκ: συσκευές αποθήκευσης
• Αρχεία κειμένου ASCII
– Αποτελούνται από γραμμές κειμένου ASCII
– Τερματισμός γραμμών με CR, LF ή CR+LF
– Εμφανίζονται και εκτυπώνονται όπως είναι

16

Τύποι αρχείων (2 από 4)


• Δυαδικά αρχεία
– Εσωτερική δομή ανάλογα με το πρόγραμμα
• Παράδειγμα: εκτελέσιμο αρχείο UNIX
– Κεφαλίδα: βασικά στοιχεία του αρχείου
– Κώδικας, δεδομένα, bit επανατοποθέτησης
– Πίνακας συμβόλων για εκσφαλμάτωση
• Παράδειγμα: αρχειοθήκη UNIX
– Κεφαλίδα με βασικές πληροφορίες υπομονάδας
– Κώδικας και δεδομένα υπομονάδας

17
Τύποι αρχείων (3 από 4)

Παραδείγματα δυαδικών αρχείων στο UNIX


18

Τύποι αρχείων (4 από 4)


• Πρέπει το ΛΣ να γνωρίζει τους τύπους;
– Πρέπει να αναγνωρίζει τα εκτελέσιμα
• Αλλιώς δεν μπορεί να τα φορτώσει / εκτελέσει
• Η κεφαλίδα περιέχει βασικές πληροφορίες
– Η αναγνώριση άλλων τύπων είναι προβληματική
• Μπορεί να είναι βολική για τους αρχάριους
• Παράδειγμα: αυτόματο άνοιγμα με εφαρμογή
• Δυσκολεύει όμως τους πιο έμπειρους χρήστες

19
Πρόσβαση στα αρχεία
• Σειριακή προσπέλαση: με τη σειρά
– Μπορεί να γίνεται ανά byte ή ανά εγγραφή
– Το αρχείο μπορεί να επαναφερθεί στην αρχή
• Τυχαία προσπέλαση: με οποιαδήποτε σειρά
– Απαραίτητη για πολλές εφαρμογές
– Εφικτή στους δίσκους, όχι στις ταινίες
– Είτε κάθε εγγραφή/ανάγνωση δίνει τη θέση
– Είτε χρησιμοποιείται κάποια λειτουργία seek

20

Χαρακτηριστικά αρχείων (1 από 3)


• Χαρακτηριστικά ή μεταδεδομένα αρχείων
– Τυποποιημένες πληροφορίες για το αρχείο
– Διαφέρουν από σύστημα σε σύστημα
– Πληροφορίες προστασίας
– Σημαίες κατάστασης
– Στοιχεία εγγραφών (μόνο με εγγραφές)
– Χρονικά πεδία
– Μέγεθος αρχείου

21
Χαρακτηριστικά αρχείων (2 από 3)

Χαρακτηριστικά ή μεταδεδομένα αρχείων


22

Χαρακτηριστικά αρχείων (3 από 3)

Χαρακτηριστικά ή μεταδεδομένα αρχείων


23
Λειτουργίες αρχείων (1 από 3)
• Λειτουργίες διαχείρισης αρχείων
– Create: δημιουργία κενού αρχείου
– Delete: διαγραφή αρχείου, απελευθερώνει χώρο
– Open: άνοιγμα αρχείου
• Προσκόμιση χαρακτηριστικών αρχείου στη μνήμη
• Ανάγνωση διευθύνσεων μπλοκ στο δίσκο
– Close: κλείσιμο αρχείου
• Απελευθέρωση χώρου στους εσωτερικούς πίνακες
• Εγγραφή εκκρεμών μπλοκ (αν χρειάζεται)

24

Λειτουργίες αρχείων (2 από 3)


• Λειτουργίες τροποποίησης αρχείων
– Read: ανάγνωση δεδομένων
• Συνήθως από την τρέχουσα θέση προς μνήμη
– Write: εγγραφή δεδομένων
• Συνήθως από μνήμη προς την τρέχουσα θέση
– Append: προσάρτηση στο τέλος
• Όπως η write, αλλά στο τέλος του αρχείου
• Δεν είναι απαραίτητη, καλύπτεται από τη write

25
Λειτουργίες αρχείων (3 από 3)
• Seek: αλλαγή θέσης ανάγνωσης/εγγραφής
– Τοποθετεί το δείκτη αρχείου σε συγκεκριμένη θέση
• Get attributes: λήψη χαρακτηριστικών
– Παράδειγμα: το make διαβάζει χρόνους τροποποίησης
• Set attributes: καθορισμός χαρακτηριστικών
– Μόνο για όσα έχει νόημα/επιτρέπεται να αλλάξουν
– Παράδειγμα: το μέγεθος δεν αλλάζει, η προστασία ναι
• Rename: μετονομασία αρχείου
– Μπορεί να αντικατασταθεί από αντιγραφή + διαγραφή

26

Παράδειγμα προγράμματος (1 από 4)

Απλό πρόγραμμα αντιγραφής στο UNIX


27
Παράδειγμα προγράμματος (2 από 4)
• Απλό πρόγραμμα αντιγραφής στο UNIX
– #include: ενσωμάτωση ορισμών στο πρόγραμμα
– #define: ορισμός σταθερών
– main: κύριο πρόγραμμα, παίρνει δύο ορίσματα
• argc: πλήθος παραμέτρων (πρέπει να είναι 3)
• argv: πίνακας δεικτών προς παραμέτρους
– in_fd, out_fd: περιγραφείς αρχείων (ακέραιοι)
• Επιστρέφονται μετά το άνοιγμα του αρχείου
• Χρησιμοποιούνται για αναφορά στο αρχείο
• Απελευθερώνονται όταν κλείσει το αρχείο

28

Παράδειγμα προγράμματος (3 από 4)

• Απλό πρόγραμμα αντιγραφής στο UNIX


– Κλήσεις ανάγνωσης και εγγραφής
• Περιγραφέας, πλήθος byte, περιοχή μνήμης
• Η θέση του αρχείου μετακινείται αυτόματα
29
Παράδειγμα προγράμματος (4 από 4)
• Απλό πρόγραμμα αντιγραφής στο UNIX
– read: διαβάζει δεδομένα, επιστρέφει πλήθος
• Μπορεί να διαβάσει λιγότερα από όσα ζητήθηκαν
• Όταν επιστρέψει 0, το αρχείο έχει τελειώσει
– write: γράφει όσα δεδομένα διάβασε η read
• Αρνητική/μηδενική τιμή δείχνει σφάλμα
– Κλείσιμο αρχείων (close) και έξοδος (exit)
• Η τιμή εξόδου δείχνει αν είχαμε σφάλμα

30

Κατάλογοι
Κατάλογοι ενός επιπέδου

• Κατάλογοι (directories) ή φάκελοι (folders)


– Αρχεία ειδικής μορφής
– Οργανώνουν τα αρχεία σε ομάδες
• Συστήματα καταλόγων ενός επιπέδου
– Ο κατάλογος λέγεται και βασικός κατάλογος
– Λογική λύση όταν υπάρχει ένας μόνο χρήστης
– Χρησιμοποιείται σε ενσωματωμένες συσκευές
32

Ιεραρχικοί κατάλογοι

• Ιεραρχικά συστήματα καταλόγων


– Κάθε χρήστης έχει τον δικό του βασικό κατάλογο
– Πολλοί κατάλογοι κάτω από τον βασικό
– Ουσιαστικά έχουμε ένα δένδρο καταλόγων
33
Ονόματα διαδρομών (1 από 3)
• Καθορισμός ονομάτων σε δένδρα καταλόγων
• Απόλυτο όνομα διαδρομής (absolute path name)
– Διαδρομή από τον βασικό κατάλογο ως το αρχείο
– Μοναδικό όνομα για κάθε αρχείο
– UNIX: /usr/ast/mailbox, Windows: \usr\ast\mailbox
– Ο πρώτος χαρακτήρας δείχνει απόλυτη διαδρομή
• Σχετικό όνομα διαδρομής (relative path name)
– Συνδυάζεται με τον τρέχοντα κατάλογο εργασίας
– Ο τρέχων κατάλογος ορίζεται από τον χρήστη

34

Ονόματα διαδρομών (2 από 3)


• Απόλυτα ή σχετικά ονόματα;
– Τα απόλυτα ονόματα λειτουργούν παντού
– Ανεξάρτητα από τον κατάλογο εργασίας
– Οι βιβλιοθήκες χρησιμοποιούν απόλυτα ονόματα
– Σχετικά ονόματα κυρίως για τοπικές εργασίες
– Πολλές αναφορές σε ονόματα στην ίδια περιοχή
• Οι καταχωρίσεις . και ..
– .: ο τρέχων κατάλογος
– .: ο γονικός κατάλογος

35
Ονόματα διαδρομών (3 από 3)

• Παράδειγμα δένδρου καταλόγων


– Κοινοί και προσωπικοί κατάλογοι
36

Λειτουργίες καταλόγων (1 από 3)


• Create: δημιουργία κενού καταλόγου
• Delete: διαγραφή κενού καταλόγου
– Μπορεί να περιέχει μόνο . και ..
• Opendir: άνοιγμα καταλόγου για ανάγνωση
• Closedir: κλείσιμο καταλόγου
– Όπως στα κανονικά αρχεία
• Readdir: ανάγνωση επόμενης καταχώρισης
– Κρύβει τις λεπτομέρειες από τον προγραμματιστή
– Επιστρέφει τυποποιημένη δομή

37
Λειτουργίες καταλόγων (2 από 3)
• Rename: αλλαγή ονόματος καταλόγου
• Link: σύνδεση αρχείου με κατάλογο
– Το αρχείο εμφανίζεται σε πολλούς καταλόγους
– Όλα τα ονόματα δείχνουν στην ίδια δομή
• Unlink: αποσύνδεση αρχείου από κατάλογο
– Αφαίρεση αρχείου από κατάλογο
– Αν υπάρχει μόνο σε έναν διαγράφεται
– Στο UNIX αυτή είναι η κλήση διαγραφής αρχείων

38

Λειτουργίες καταλόγων (3 από 3)


• Πραγματικοί σύνδεσμοι (hard links)
– Σύνδεσμοι από διάφορα ονόματα στην ίδια δομή
• Συμβολικοί σύνδεσμοι (symbolic links)
– Ονόματα που δείχνουν σε ένα ειδικό αντικείμενο
– Το ειδικό αντικείμενο δείχνει σε άλλο αρχείο
– Ανακατεύθυνση της αναζήτησης αρχείων
– Λιγότερο αποδοτικό από πραγματικούς συνδέσμους
– Πιο ευέλικτο όμως από αυτούς

39
Υλοποίηση συστήματος αρχείων

Διάταξη συστήματος αρχείων (1 από 2)

• Διάταξη συστήματος αρχείων


– Ο δίσκος χωρίζεται σε διαμερίσματα (partitions)
– Τομέας 0: βασική εγγραφή εκκίνησης (MBR)
– Μετά το MBR βρίσκεται ο πίνακας διαμερισμάτων
• Τομείς ανά διαμέρισμα και ενεργό διαμέρισμα
– Το MBR φορτώνει το μπλοκ εκκίνησης του λειτουργικού

41
Διάταξη συστήματος αρχείων (2 από 2)

• Παράδειγμα: σύστημα αρχείων τύπου UNIX


– Αρχικά έχουμε μπλοκ εκκίνησης (πιθανόν κενό)
• Χρησιμοποιείται όταν περιέχεται λειτουργικό
– Το υπερμπλόκ περιέχει βασικές πληροφορίες
• Τύπος συστήματος, πλήθος μπλοκ, κλπ
– Πληροφορίες για τα ελεύθερα μπλοκ
– Κόμβοι i: δομές δεδομένων, μία ανά αρχείο
– Βασικός κατάλογος συστήματος αρχείων
– Υπόλοιποι κατάλογοι και αρχεία

42

Υλοποίηση των αρχείων (1 από 5)

• Συνεχής κατανομή μπλοκ


– Αρκεί να ξέρουμε αρχικό μπλοκ και μήκος
• Το τελευταίο μπλοκ γενικά δεν είναι γεμάτο
– Εύκολος υπολογισμός θέσης μπλοκ σε τυχαία προσπέλαση

43
Υλοποίηση των αρχείων (2 από 5)
• Συνεχής κατανομή μπλοκ
– Διαχείριση κενών περιοχών με λίστα κενών
– Σταδιακά οδηγεί σε κατάτμηση του ελεύθερου χώρου
• Η συμπύκνωση των αρχείων απαιτεί πάρα πολύ χρόνο
– Πρέπει να γνωρίζουμε μεγέθη αρχείων από την αρχή
• Γενικά ανέφικτο σε συστήματα αρχείων για δίσκους
• Χρήση στα CD-ROM και τα DVD-ROM
• Γνωρίζουμε τα μεγέθη όλων των αρχείων από την αρχή
– Το DVD περιπλέκει λίγο τα πράγματα
• Τα αρχεία είναι μέχρι 1 GB άρα οι ταινίες σπάνε σε τμήματα

44

Υλοποίηση των αρχείων (3 από 5)

• Κατανομή μπλοκ με συνδεδεμένη λίστα


– Ο κατάλογος δείχνει στο πρώτο μπλοκ του αρχείου
– Δείκτες προς επόμενο μπλοκ στην αρχή κάθε μπλοκ
– Δεν έχουμε προβλήματα κατάτμησης ελεύθερου χώρου
– Η τυχαία προσπέλαση γίνεται διασχίζοντας τη λίστα
45
Υλοποίηση των αρχείων (4 από 5)

• Πίνακας κατανομής αρχείων (FAT): μία θέση ανά μπλοκ


– Οι λίστες αποθηκεύονται στον πίνακα αντί στα μπλοκ
– Πιο γρήγορη διάσχιση, όχι επιβάρυνση μέσα στα μπλοκ
– Μέγεθος FAT ανάλογο με το πλήθος των μπλοκ του δίσκου
46

Υλοποίηση των αρχείων (5 από 5)

• Κόμβοι i (i nodes = index nodes)


– Σε κάθε αρχείο αντιστοιχεί ένας κόμβος i
– Στον κατάλογο έχουμε τον αριθμό του κόμβου i
– Περιέχει χαρακτηριστικά και δείκτες προς τα μπλοκ
– Χρήση πρόσθετων μπλοκ δεικτών για μεγάλα αρχεία
47
Υλοποίηση των καταλόγων (1 από 4)

• Κατάλογος: από ονόματα σε στοιχεία αρχείων


– Βασικά στοιχεία καταχωρίσεων
• Αρχικό μπλοκ (MS-DOS) ή αριθμός κόμβου i (UNIX)
– Αποθήκευση των χαρακτηριστικών του αρχείου
• Στην ίδια την καταχώριση καταλόγου (MS-DOS)
• Στον κόμβο i του αρχείου (UNIX)

48

Υλοποίηση των καταλόγων (2 από 4)


• Περιορισμένου μήκους ονόματα
– Χρήση δομών σταθερού μήκους
– 8+3 χαρακτήρες στο MS-DOS
– 14 χαρακτήρες στο UNIX (Version 7)
• Μεγάλα ονόματα: δομές μεταβλητού μήκους
– Στο σταθερό τμήμα έχουμε βασικές πληροφορίες
– Στο μεταβλητό τμήμα έχουμε το όνομα
– Τερματισμός ονομάτων με ειδικούς χαρακτήρες
– Χαρακτήρες συμπλήρωσης για ευθυγράμμιση
– Η διαγραφή απαιτεί αναδιοργάνωση του καταλόγου
49
Υλοποίηση των καταλόγων (3 από 4)

• Υλοποίηση των καταλόγων


– Αποθήκευση ολόκληρων των καταχωρίσεων με τη σειρά
– Αποθήκευση καταχωρίσεων σε δύο μέρη
50

Υλοποίηση των καταλόγων (4 από 4)


• Αναζήτηση ονομάτων στους καταλόγους
– Συνήθως οι κατάλογοι δεν είναι ταξινομημένοι
– Γραμμική αναζήτηση
• Πρέπει να διαβάζονται μέχρι το τέλος
• Πολύ αργή σε μεγάλους καταλόγους
– Κατακερματισμός: μεγάλοι κατάλογοι
• Πιο σύνθετη διαχείριση
– Κρυφή μνήμη για αποφυγή αναζητήσεων

51
Κοινόχρηστα αρχεία (1 από 4)
• Κοινόχρηστα αρχεία
– Εμφανίζονται σε πολλούς καταλόγους χρηστών
– Προσανατολισμένος ακυκλικός γράφος (DAG)
– Υλοποίηση των κοινόχρηστων αρχείων
• Πρόβλημα όταν οι δείκτες είναι στον κατάλογο
• Κάθε αλλαγή επηρεάζει όλους τους καταλόγους
– Συμβολικοί σύνδεσμοι (symbolic links)
• Ειδικά αρχεία που περιέχουν ένα νέο όνομα
• Μόνο ένας κατάλογος περιέχει το πραγματικό αρχείο

52

Κοινόχρηστα αρχεία (2 από 4)

• (Απλοί) σύνδεσμοι
– Απλή λύση όταν οι δείκτες βρίσκονται σε κόμβο i
– Όλες οι καταχωρίσεις είναι ισοδύναμες
– Ο κόμβος i καταγράφει πόσοι σύνδεσμοι υπάρχουν
– Όταν μηδενιστούν, το αρχείο διαγράφεται
53
Κοινόχρηστα αρχεία (3 από 4)
• Απλοί ή συμβολικοί σύνδεσμοι;
– Απλοί σύνδεσμοι: προβλήματα χρέωσης
• Τι γίνεται αν διαγράψει το αρχείο ο ιδιοκτήτης;
• Το αρχείο δεν διαγράφεται
• Ο ιδιοκτήτης όμως το χρεώνεται
• Οι συμβολικοί σύνδεσμοι απλά θα γίνουν άκυροι
– Συμβολικοί σύνδεσμοι: επιβάρυνση
• Δύο διασχίσεις καταλόγων για εντοπισμό αρχείου
• Επιπλέον κόμβοι i και μπλοκ στο δίσκο

54

Κοινόχρηστα αρχεία (4 από 4)

• Κοινόχρηστα αρχεία
– Οι σύνδεσμοι περιπλέκουν τα πράγματα
• Κάποια αρχεία εμφανίζονται σε πολλούς καταλόγους
• Προσοχή στη δημιουργία εφεδρικών αντιγράφων
55
Καταγραφικά συστήματα (1 από 3)
• Συστήματα αρχείων με καταγραφική δομή
– Οι δίσκοι γίνονται φτηνότεροι αλλά όχι ταχύτεροι
• Περιστροφική - χρόνος αναζήτησης αλλάζουν αργά
– Οι κρυφές μνήμες αυξάνονται συνεχώς
• Οι περισσότερες αναγνώσεις γίνονται από εκεί
• Στο δίσκο καταφεύγουμε κυρίως για τις εγγραφές
– Οι εγγραφές κοστίζουν περισσότερο από αναγνώσεις
• Οι αναγνώσεις γίνονται ομαδικά (πολλά μπλοκ μαζί)
• Οι εγγραφές γίνονται σε μικρά κομμάτια
• Οι εγγραφές γίνονται άμεσα (μην χάσουμε δεδομένα)

56

Καταγραφικά συστήματα (2 από 3)


• Καταγραφικά συστήματα αρχείων (LFS)
– Εγγραφή όλων των αλλαγών μαζί
• Αρχεία, κατάλογοι, κόμβοι i
– Όλες οι αλλαγές μαζεύονται σε μεγάλα μπλοκ
• Όταν γεμίζει το μπλοκ γράφεται όλο στο δίσκο
• Στην αρχή έχουμε περίληψη των περιεχομένων
• Στη συνέχεια έχουμε όλες τις αλλαγές
– Οι κόμβοι i είναι διάσπαρτοι στο δίσκο
• Χρήση πίνακα στη μνήμη με δείκτες στους κόμβους i
• Ο πίνακας περιοδικά γράφεται στο δίσκο

57
Καταγραφικά συστήματα (3 από 3)
• Τι γίνεται όταν γεμίσει ο δίσκος;
– Νήμα καθαρισμού σαρώνει διαρκώς το αρχείο
– Εξετάζονται τα παλιά μπλοκ
– Διαβάζονται κόμβοι i και ενεργά δεδομένα
– Προστίθενται στο τρέχον μπλοκ προς εγγραφή
– Το παλιό μπλοκ απελευθερώνεται για χρήση
– Ο δίσκος λειτουργεί σαν κυκλική ουρά μπλοκ
– Περίπλοκη διαχείριση αλλά αύξηση της ταχύτητας

58

Ημερολογιακά συστήματα (1 από 2)


• Ημερολογιακά συστήματα αρχείων
– Διατήρηση ημερολογίου των αλλαγών
– Επιτρέπει ανάκαμψη από αποτυχίες
• Χρησιμοποιείται στα NTFS, ext3 και ReiserFS
– Παράδειγμα: διαγραφή αρχείου στο UNIX
• Διαγραφή αρχείο από τον κατάλογο
• Αποδέσμευση κόμβου i
• Αποδέσμευση των μπλοκ του αρχείου
• Αν το σύστημα αποτύχει σε κάποιο σημείο;
• Κάποια μπλοκ μένουν στο αέρα!

59
Ημερολογιακά συστήματα (2 από 2)
• Ημερολογιακά συστήματα αρχείων
– Καταγραφή λειτουργιών που θα γίνουν
– Στη συνέχεια εκτελούνται οι λειτουργίες
– Στο τέλος διαγράφονται
– Απαιτεί αδύναμες (idempotent) λειτουργίες
• Η επανάληψή τους δεν δημιουργεί προβλήματα
• Η εγγραφή σε συγκεκριμένη θέση στο δίσκο είναι αδύναμη
• Η εγγραφή στο τέλος μιας λίστας δεν είναι αδύναμη
– Το σύστημα οργανώνεται με τέτοιες λειτουργίες
• Όλες οι δομές πρέπει να λειτουργούν με αυτό τον τρόπο

60

Εικονικά συστήματα (1 από 4)

• Εικονικά συστήματα αρχείων


– Ενοποίηση διαφορετικών συστημάτων
• Προέρχεται από τη δουλειά της SUN για το NFS
• Συνύπαρξη FAT, UFS, ext3 στο ίδιο δένδρο
61
Εικονικά συστήματα (2 από 4)
• Διάκριση υλοποίησης σε δύο μέρη
– Κοινό μέρος σε όλα τα συστήματα (διεπαφή)
– Μέρος που εξαρτάται από το σύστημα (υλοποίηση)
• Το εικονικό σύστημα λαμβάνει όλες τις κλήσεις χρήστη
• Οι κλήσεις μεταβιβάζονται στα διάφορα συστήματα
– Υλοποιούνται κατάλληλα από κάθε σύστημα αρχείων
• Αντικειμενοστρεφής υλοποίηση (ακόμη και σε C)
– Αντικείμενα όπως υπερμπλόκ, κόμβος v, κατάλογος
– Λειτουργίες (μέθοδοι) για κάθε τύπο αντικειμένου

62

Εικονικά συστήματα (3 από 4)


• Λειτουργία κλήσεων σε εικονικό σύστημα
– Αρχικοποίηση εικονικού συστήματος αρχείων
• Καταχώριση βασικού συστήματος αρχείων στο VFS
• Καταχώριση αναρτώμενων συστημάτων αρχείων στο VFS
• Σύνδεση του VFS με τις μεθόδους κάθε συστήματος
– Κατά το άνοιγμα αρχείου δημιουργούνται κόμβοι v
• Κάθε κόμβος v αντιστοιχεί σε έναν κόμβο i
• Ο κόμβος v δείχνει στις μεθόδους και στο μπλοκ
– Κατά την ανάγνωση/εγγραφή χρήση κόμβου v
• Χρήση δεικτών και μεθόδων για υλοποίηση λειτουργιών
63
Εικονικά συστήματα (4 από 4)

Λειτουργία κλήσεων σε εικονικό σύστημα


64

Διαχείριση και βελτιστοποίηση


Διαχείριση χώρου δίσκου (1 από 7)
• Συνεχόμενη κατανομή ή κατανομή σε μπλοκ;
– Παρόμοια επιλογή με τεμαχισμό και σελιδοποίηση
– Σχεδόν όλα τα συστήματα έχουν κατανομή σε μπλοκ
• Μέγεθος μπλοκ
– Προφανείς επιλογές: τομέας, τροχιά, κύλινδρος, σελίδα
– Μεγάλο μπλοκ: ταχύτερες λειτουργίες
– Μικρό μπλοκ: μικρότερη σπατάλη χώρου
• Μελέτη μεγεθών αρχείου
– Πανεπιστήμιο Vrije το 1984 και το 2005
– Αθροιστική κατανομή πιθανότητας μεγέθους

66

Διαχείριση χώρου δίσκου (2 από 7)

• Διαχείριση χώρου δίσκου


– Μπλοκ 1 KB: 30-50% των αρχείων χωράνε σε ένα μπλοκ
– Μπλοκ 4 KB: το 93% των μπλοκ ανήκει στο 10% των αρχείων
• Η σπατάλη χώρου στα μικρά αρχεία δεν έχει σημασία!
67
Διαχείριση χώρου δίσκου (3 από 7)

• Θεωρητική μελέτη της απόδοσης


– 1 MB/τροχιά, 8.33 ms περιστροφή, 5 ms αναζήτηση
– Ο χρόνος ανάγνωσης k byte είναι 5+4.165+(k/106)x8.33
– Συνεχής καμπύλη: αξιοποίηση χώρου με αρχεία 4 KB
– Διακεκομμένη καμπύλη: ρυθμός μεταφοράς δεδομένων
– Στα 64 KB έχουμε μόλις 6.6 MB/sec και 7% αξιοποίηση!
68

Διαχείριση χώρου δίσκου (4 από 7)

• Παρακολούθηση ελεύθερων μπλοκ


– Συνδεδεμένη λίστα ελεύθερων μπλοκ
– Χάρτης bit ελεύθερων και δεσμευμένων μπλοκ
69
Διαχείριση χώρου δίσκου (5 από 7)
• Συνδεδεμένη λίστα ελεύθερων μπλοκ
– Χρησιμοποιούνται μερικά ελεύθερα μπλοκ
– Σε κάθε μπλοκ έχουμε πολλές διευθύνσεις
– Δεν χρησιμοποιούμε τη λίστα των μπλοκ (αργή!)
• Χάρτης bit
– Σταθερό μέγεθος ανεξάρτητα της χρήσης
– Πολύ μεγάλο σε μεγάλους δίσκους
• Συνδεδεμένη λίστα ελεύθερων περιοχών
– Αποθηκεύουμε πρώτο μπλοκ και μετρητή μπλοκ
70

Διαχείριση χώρου δίσκου (6 από 7)

• Μόνο ένα μπλοκ της λίστας είναι στη μνήμη


– Έστω ότι έχουμε χώρο για δύο ακόμη μπλοκ
• Αν απελευθερωθούν τρία μπλοκ γράφουμε το μπλοκ στο δίσκο
• Αν σε λίγο δεσμευτούν τρία μπλοκ πρέπει να ξαναγράψουμε
• Εναλλακτικά σπάμε το γεμάτο μπλοκ σε δύο μισοάδεια
– Αποφεύγουμε παλινδρόμηση ανάμεσα στις καταστάσεις
• Παρόμοια τεχνική με χάρτη bit: ένα μπλοκ στη μνήμη

71
Διαχείριση χώρου δίσκου (7 από 7)

• Ποσόστωση χρήσης δίσκου (quota)


– Κάθε χρήστης έχει περιορισμένο πλήθος αρχείων/μπλοκ
– Ο πίνακας ανοιχτών αρχείων δείχνει στον πίνακα quota
– Ο χρήστης μπορεί να ξεπεράσει το ελαστικό όριο
– Δεν μπορεί όμως να ξεπεράσει το αυστηρό όριο
– Η προειδοποίηση δίνεται κατά τη σύνδεση στο σύστημα
72

Αντίγραφα ασφαλείας (1 από 7)


• Το σύστημα αρχείων είναι πολύ κρίσιμο
– Ο υπολογιστής αντικαθίσταται με μικρό κόστος
– Τα αρχεία στο δίσκο όμως δεν αντικαθίστανται
– Μπορεί να γλυτώσει ο δίσκος αν καεί ο υπολογιστής;
• Αντίγραφα ασφαλείας (backups)
– Αντιγραφή αρχείων σε ταινία ή άλλο μέσο
– Ανάκαμψη από καταστροφές
– Ανάκαμψη από σφάλματα του χρήστη

73
Αντίγραφα ασφαλείας (2 από 7)
• Ποια αρχεία χρειάζονται εφεδρικά αντίγραφα;
– Τα προγράμματα μπορεί να υπάρχουν σε CD/DVD
– Τα προσωρινά αρχεία γενικά δεν χρειάζονται
– Τα ειδικά αρχεία συσκευών δεν αντιγράφονται
– Μόνο συγκεκριμένοι κατάλογοι του χρήστη
• Πότε πρέπει να αντιγράφονται τα αρχεία;
– Αυξητικά αντίγραφα: αντιγραφή αλλαγμένων αρχείων
– Περιοδικά παίρνουμε ένα πλήρες αντίγραφο
– Στο μεσοδιάστημα αντιγράφουμε αλλαγμένα αρχεία
74

Αντίγραφα ασφαλείας (3 από 7)


• Πρέπει να συμπιέζονται τα αρχεία;
– Μεγάλη οικονομία σε χώρο αποθήκευσης
– Κίνδυνος απώλειας αν αλλοιωθεί μέρος του αντιγράφου
• Πώς αντιγράφονται τα ενεργά συστήματα αρχείων;
– Συνήθως το σύστημα λειτουργεί κατά την αντιγραφή
– Κίνδυνος να καταλήξουμε σε ασυνεπή αντίγραφα
– Αλγόριθμοι για γρήγορη δημιουργία στιγμιότυπων
• Πού πρέπει να διατηρούνται τα αντίγραφα;
– Αν είναι δίπλα στον υπολογιστή, θα καούν μαζί του!
– Πρέπει να έχουμε αντίγραφα σε διαφορετικούς χώρους

75
Αντίγραφα ασφαλείας (4 από 7)
• Φυσική αντιγραφή δίσκου
– Γράφονται όλα τα μπλοκ με τη σειρά σε ταινία
– Μπορούμε να παραλείψουμε τα ελεύθερα μπλοκ
• Πρέπει να σημειώνουμε όμως ότι υπάρχουν!
– Πρέπει να αποφεύγουμε τα χαλασμένα μπλοκ
• Είτε μέσω επαναχαρτογράφησης στο υλικό
• Είτε μέσω παράκαμψης του αρχείου χαλασμένων μπλοκ
– Πολύ γρήγορη και απλή διαδικασία
– Δεν μπορεί να αντιγράψει επιλεκτικά καταλόγους
– Κατάλληλη για διαμερίσματα με δεδομένα χρήστη
76

Αντίγραφα ασφαλείας (5 από 7)

• Λογική αντιγραφή δίσκου


– Αναδρομική αντιγραφή από ορισμένα σημεία
– Μόνο όσα έχουν τροποποιηθεί πρόσφατα (σκιασμένα)
– Αλλά και οι κατάλογοι που οδηγούν σε τροποποιημένα
– Επιτρέπει επαναφορά αρχείων σε διαγραφές καταλόγων
77
Αντίγραφα ασφαλείας (6 από 7)

• Χρήση ενός χάρτη bit για τους κόμβους I


– Σημειώνονται οι κόμβοι i που πρέπει να αντιγραφούν
• 1η φάση: τροποποιημένα αρχεία και όλοι οι κατάλογοι
• 2η φάση: φεύγουν οι κατάλογοι που δεν οδηγούν σε αλλαγές
• 3η φάση: αντιγράφονται όλοι οι σημειωμένοι κατάλογοι
• 4η φάση: αντιγράφονται όλα τα σημειωμένα αρχεία

78

Αντίγραφα ασφαλείας (7 από 7)


• Επαναφορά αρχείων
– Ξεκινάμε από το τελευταίο πλήρες αντίγραφο
– Συνεχίζουμε με ένα ή περισσότερα αυξητικά αντίγραφα
• Ιδιαιτερότητες της λογικής αντιγραφής
– Η λίστα των ελεύθερων μπλοκ κατασκευάζεται χωριστά
– Τα συνδεδεμένα αρχεία αντιγράφονται μία μόνο φορά
– Τα ειδικά αρχεία δεν πρέπει να αντιγράφονται ποτέ
• Πού πάνε τα αντίγραφα ασφαλείας;
– Παραδοσιακά σε ταινίες
– Τελευταία όλο και περισσότερο σε εφεδρικούς δίσκους
79
Συνέπεια συστήματος αρχείων (1 από 3)
• Έστω ότι αποτυγχάνουμε στη μέση μιας λειτουργίας
– Μπορεί να παραμορφωθούν δεδομένα
– Μπορεί να παραμορφωθεί η δομή του συστήματος
• Χρήση ειδικών προγραμμάτων ελέγχου συνέπειας
• Έλεγχος συνέπειας των μπλοκ
– Κατασκευή δύο πινάκων μπλοκ με μετρητές, αρχικά 0
• Πόσες φορές εμφανίζεται ένα μπλοκ σε αρχεία;
• Πόσες φορές εμφανίζεται ένα μπλοκ σε λίστες ελευθέρων;
– Διάβασμα όλων των κόμβων i για χρησιμοποιημένα μπλοκ
– Διάβασμα της λίστας ελευθέρων για τα ελεύθερα μπλοκ

80

Συνέπεια συστήματος αρχείων (2 από 3)

• Συνέπεια συστημάτων αρχείων


– Παντού 0: προστίθενται στα ελεύθερα
– >1 στα ελεύθερα: διόρθωση λίστας ελεύθερων
– >1 στα χρησιμοποιημένα: αντιγραφή όσες φορές χρειάζεται
• Κάθε κόμβος i πρέπει να δείχνει σε διαφορετικό αντίγραφο
81
Συνέπεια συστήματος αρχείων (3 από 3)
• Έλεγχος συνέπειας των καταλόγων
– Αναδρομική διάσχιση του συστήματος αρχείων
– Μέτρηση των φορών που εμφανίζεται κάθε αρχείο
– Πρέπει να ταυτίζεται με πλήθος συνδέσμων σε κόμβους i
– Αν δεν ταυτίζονται, τροποποιείται το πλήθος στον κόμβο i
• Άλλοι έλεγχοι συνέπειας
– Άκυροι δείκτες σε μπλοκ ή κόμβους i (εκτός ορίων)
– Παράξενες καταστάσεις αρχείων
• Προστασία χρήστη από λάθη
– Τα διαγραμμένα αρχεία πηγαίνουν σε κάδο ανακύκλωσης

82

Επιδόσεις συστημάτων αρχείων (1 από 4)

• Κρυφή μνήμη μπλοκ (block cache)


– Χώρος μνήμης για προσωρινή αποθήκευση μπλοκ του δίσκου
– Αν το ζητούμενο μπλοκ υπάρχει εκεί, δεν διαβάζεται
– Αλλιώς διαβάζεται από δίσκο και προστίθεται σε κρυφή μνήμη
– Χρήση πίνακα κατακερματισμού για εντοπισμό των μπλοκ
– Αλυσίδες για διαχείριση των συγκρούσεων

83
Επιδόσεις συστημάτων αρχείων (2 από 4)
• Επιλογή μπλοκ που θα αντικατασταθούν
– Δεν θέλουμε καθαρό LRU (αν και είναι εφικτό)
• Τα μπλοκ ελέγχου πρέπει να γράφονται γρήγορα στο δίσκο
– Εκτιμούμε αν θα χρειαστεί ξανά ένα μπλοκ
• Τα μπλοκ που θα χρειαστούν ξανά μπαίνουν στο τέλος
• Περιοδική εγγραφή όλων των μπλοκ στο δίσκο
– Στο UNIX κάθε 30 sec γράφονται όλα τα μπλοκ στο δίσκο
• Ομαδοποίηση μικρών εγγραφών στο ίδιο μπλοκ
– Στα Windows τα τροποποιημένα μπλοκ γράφονταν άμεσα
• Η πολιτική άλλαξε στις πιο πρόσφατες εκδόσεις

84

Επιδόσεις συστημάτων αρχείων (3 από 4)


• Γιατί διαφορετικές προσεγγίσεις;
– Τα Windows προέρχονται από συστήματα με δισκέτες
• Όταν αφαιρείται η δισκέτα δεν πρέπει να χάνονται δεδομένα
– Στο UNIX χάνονται οι αλλαγές μετά το τελευταίο sync
• Ενοποίηση κρυφής μνήμης μπλοκ και σελίδων
– Θα πρέπει τα μεγέθη μπλοκ και σελίδας να είναι ίδια
– Όλα τα αρχεία χαρτογραφούνται στη μνήμη
• Προανάγνωση των μπλοκ
– Σε κάθε ανάγνωση διαβάζουμε και μερικά επόμενα μπλοκ
– Αν γίνονται seek, τότε απενεργοποιείται η προανάγνωση

85
Επιδόσεις συστημάτων αρχείων (4 από 4)

• Μείωση κίνησης του βραχίονα του δίσκου


– Προσπαθούμε να βάζουμε τα μπλοκ του αρχείου συνεχόμενα
– Ή τουλάχιστον σε κοντινές θέσεις
– Μπορούμε να βάζουμε και του κόμβους i κοντά στα αρχεία
– Διαίρεση του δίσκου σε περιοχές με κόμβους i ανά ομάδα
86

Ανασυγκρότηση δίσκων
• Αρχικά ο δίσκος είναι μια συνεχόμενη κενή περιοχή
• Σταδιακά τα αρχεία διασπείρονται στο δίσκο
– Οι διαγραφές δημιουργούν συνεχώς νέες κενές περιοχές
• Η ανασυγκρότηση ομαδοποιεί τα μπλοκ
– Απαιτείται συνεχόμενη ελεύθερη περιοχή στο δίσκο
– Τα αρχεία ανασυγκροτούνται απελευθερώνοντας χώρο
– Στον κενό χώρο ανασυγκροτούνται και άλλα αρχεία
• Ορισμένα αρχεία δεν πρέπει να μετακινούνται
– Αρχεία σελιδοποίησης, αδρανοποίησης και ημερολογίου
– Συνήθως σταθερού μεγέθους, δεν μετακινούνται ποτέ

87
Παραδείγματα συστημάτων
αρχείων

Συστήματα αρχείων CD-ROM (1 από 5)


• Χρησιμοποιούνται για μέσα που γράφονται μία φορά
– Δεν χρειάζεται να παρακολουθούν τον ελεύθερο χώρο
– Ακόμη και όταν προστίθενται αρχεία, πάνε στο τέλος
• Το σύστημα ISO 9660
– Τα CD-ROM έχουν μία μόνο σπειροειδή τροχιά
– Στην τροχιά γράφεται ακολουθία μπλοκ των 2352 byte
• Το καθαρό μέγεθος είναι 2048 byte
– Αρχικά έχουμε 16 μπλοκ εκτός προτύπου
– Ακολουθεί μπλοκ με κύριο περιγραφέα μονάδας
• Πλήθος μπλοκ, μπλοκ βασικού καταλόγου

89
Συστήματα αρχείων CD-ROM (2 από 5)

• Κατάλογοι στα CD-ROM


– Kαταχωρίσεις καταλόγου μεταβλητού μήκους
• Η τελευταία περιέχει ένα bit τερματισμού
– Δυαδικά πεδία και σε little και σε big endian
– Το πρώτο πεδίο δείχνει το μήκος της καταχώρισης
– Πρώτο μπλοκ αρχείου και πλήθος μπλοκ αρχείου
– Ώρα και ημερομηνία εγγραφής αρχείου
• Από το 1900, με ζώνη ώρας

90

Συστήματα αρχείων CD-ROM (3 από 5)

• Κατάλογοι στα CD-ROM


– Σημαίες: κρυφό αρχείο, αρχείο ή κατάλογος
– CD που ανήκει το αρχείο (σε ένα σύνολο CD)
– Μήκος ονόματος αρχείου
– Όνομα, τελεία, προέκταση, ερωτηματικό, έκδοση
• Επιτρέπονται κεφαλαία γράμματα, αριθμοί και _
– Κανόνας 8+3 για όνομα και προέκταση (MS-DOS)
– Συμπλήρωμα ώστε η καταχώριση να έχει άρτιο μήκος
– Προαιρετικό πεδίο για χρήση από κάθε σύστημα
– Αλφαβητική ταξινόμηση εκτός από «.» και «..»
91
Συστήματα αρχείων CD-ROM (4 από 5)
• Επίπεδα συμβατότητας ISO 9660
– Μέχρι 8 επίπεδα καταλόγων σε όλα τα επίπεδα
– Επίπεδο 1: ονόματα 8+3, κατάλογοι 8+0
– Επίπεδο 2: ονόματα μέχρι 31 χαρακτήρες
– Επίπεδο 3: Επιτρέπει μη συνεχή αρχεία
– Χρήση κοινών τμημάτων για εξοικονόμηση χώρου
• Επεκτάσεις Joliet
– Χρήση πεδίου συστήματος για επεκτάσεις Windows
– Μεγάλα ονόματα αρχείων (64 χαρακτήρες) σε Unicode
– Πάνω από 8 επίπεδα καταλόγων, ονόματα με προεκτάσεις

92

Συστήματα αρχείων CD-ROM (5 από 5)


• Επεκτάσεις Rock Ridge
– Χρήση πεδίου συστήματος για επεκτάσεις του UNIX
– Υπάρχουν 8 πεδία επεκτάσεων
– PX: bit δικαιωμάτων rwx και κατάστασης του UNIX
– PN: αριθμοί αρχείων συσκευών (major και minor)
– SL: συμβολικός σύνδεσμος
– NM: μεγαλύτερο όνομα αρχείου (τύπου UNIX)
– CL/PL/RE: παράκαμψη 8 επιπέδων στους καταλόγους
– TF: χρονοσφραγίδες αρχείου
• Δημιουργίας, τροποποίησης, προσπέλασης

93
Σύστημα αρχείων MS-DOS (1 από 3)

• Οι επεκτάσεις του χρησιμοποιούνται ευρέως


• Μεταβλητό πλήθος καταχωρίσεων ανά κατάλογο
– Καταχωρίσεις σταθερού μεγέθους (32 byte)
– Όνομα και προέκταση αρχείου (8+3)
– Χαρακτηριστικά: μόνο ανάγνωση, κρυφό, σύστημα, αρχειοθέτηση
– Ημερομηνία/ώρα τελευταίας τροποποίησης (από το 1980)
• Πεδία για ώρα/λεπτά/δευτερόλεπτα και μέρα/μήνα χρόνο
– Πρώτο μπλοκ του αρχείου
– Μέγεθος σε byte (έως 232, πρακτικά μικρότερο)
94

Σύστημα αρχείων MS-DOS (2 από 3)


• Πίνακας κατανομής αρχείων στη μνήμη (FAT)
– Ο κατάλογος δείχνει στην πρώτη θέση
– Οι υπόλοιπες θέσεις είναι δείκτες μέσα στον πίνακα
– Συστοιχίες: πολλαπλάσια του 512 (ένας τομέας)
• FAT-12 με συστοιχίες των 512 byte
– Μέγεθος συστήματος αρχείων έως 2 MB
– FAT με 4 K καταχωρίσεις των 2 byte (16 bit για ταχύτητα)
• FAT-16 με συστοιχίες έως 32 KB
– FAT με 64 Κ καταχωρίσεις των 2 byte
– Έως 2 GB ανά διαμέρισμα δίσκου

95
Σύστημα αρχείων MS-DOS (3 από 3)

• FAT-32 με συστοιχίες έως 32 KB


– Στην πραγματικότητα δείκτες των 28 bit
– Θεωρητικά υποστηρίζει διαμερίσματα μέχρι 8 TB
– Στην πράξη μέχρι 2 TB γιατί το μέγεθος είναι σε τομείς!
• Παρακολούθηση ελεύθερων συστοιχιών μέσω του FAT
– Ειδικός κωδικός για τις ελεύθερες συστοιχίες

96

Σύστημα αρχείων UNIX V7 (1 από 3)

• Βασική μορφή δένδρου


– Μετατρέπεται σε ακυκλικό γράφο με τους συνδέσμους
• Ονόματα αρχείων έως 14 χαρακτήρες
– Επιτρέπεται το σύνολο ASCII εκτός από το / και το NUL
• Ο κατάλογος περιέχει καταχωρίσεις 16 byte
– Αριθμός κόμβου i και όνομα αρχείου
– Μέχρι 216 αρχεία ανά διαμέρισμα
97
Σύστημα αρχείων UNIX V7 (2 από 3)

• Περιεχόμενα κόμβου i
– Μέγεθος αρχείου, χρόνοι,
– Ιδιοκτήτης, ομάδα, bit προστασίας
– Μετρητής συνδέσμων προς τον κόμβο
– Οι πρώτες 10 διευθύνσεις αποθηκεύονται στον κόμβο
• Τρεις δείκτες σε μπλοκ πρόσθετων δεικτών
98

Σύστημα αρχείων UNIX V7 (3 από 3)

• Αναζήτηση αρχείου /usr/ast/mbox


– Ξεκινάμε από τον κόμβο i του βασικού καταλόγου
– Από εκεί διαβάζουμε τα δεδομένα του καταλόγου
– Σε κάθε στάδιο διαβάζουμε κόμβο i και μετά τα δεδομένα
– Οι κατάλογοι περιέχουν και καταχωρίσεις «.» και «..»
99
Ενότητα # 5: Είσοδος / Έξοδος

Σκοποί ενότητας
• Κατανόηση των βασικών αρχών του υλικού
και του λογισμικού Ε/Ε
• Εξοικείωση με τον τρόπο οργάνωσης του
λογισμικού Ε/Ε σε επίπεδα
• Εισαγωγή στο λογισμικό βασικών συσκευών
Ε/Ε και διασυνδέσεων με το χρήστη
• Κατανόηση των βασικών τεχνικών διαχείρισης
ισχύος στα σύγχρονα ΛΣ
4
Περιεχόμενα ενότητας
• Αρχές υλικού Ε/Ε
• Αρχές λογισμικού Ε/Ε
• Επίπεδα λογισμικού Ε/Ε
• Δίσκοι
• Ρολόγια
• Διασυνδέσεις με το χρήστη
• Διαχείριση ισχύος
5

Ρόλος του ΛΣ
• Μόνο το ΛΣ έχει πρόσβαση στις συσκευές
– Οι εντολές εισόδου/εξόδου είναι προνομιούχες
• Ρόλος ΛΣ στη διαχείριση συσκευών
– Παροχή απλής και εύχρηστης διασύνδεσης
• Ομοιόμορφης ανάμεσα στις συσκευές
– Ανίχνευση και χειρισμός διακοπών
• Προνομιούχες λειτουργίες χαμηλού επιπέδου
– Αντιμετώπιση σφαλμάτων

7
Αρχές υλικού Ε/Ε

Συσκευές Ε/Ε (1 από 3)


• Συσκευές μπλοκ (block devices)
– Αποθήκευση πληροφορίας σε ισομεγέθη μπλοκ
– Κάθε μπλοκ έχει τη δική του διεύθυνση
– Ανεξάρτητη εγγραφή/ανάγνωση κάθε μπλοκ
– Παράδειγμα: δίσκοι
• Συσκευές χαρακτήρων (character devices)
– Αποστολή ή λήψη ρευμάτων χαρακτήρων
– Δεν υπάρχει διευθυνσιοδότηση ή αναζήτηση
– Παράδειγμα: εκτυπωτές, ποντίκια, πληκτρολόγια

9
Συσκευές Ε/Ε (2 από 3)
• Κάποιες συσκευές δεν είναι τόσο απλές
– Οι ταινίες αποθηκεύουν μπλοκ σειριακά
• Τα μπλοκ έχουν σταθερό μέγεθος
• Δεν υπάρχει δυνατότητα αναζήτησης
– Οι κάρτες δικτύου χειρίζονται μπλοκ
• Τα μπλοκ δεν έχουν σταθερό μέγεθος
• Δεν υπάρχει δυνατότητα αναζήτησης
– Τα ρολόγια παράγουν σήματα διακοπών

10

Συσκευές Ε/Ε (3 από 3)

Μεγάλη ποικιλία ταχυτήτων


11
Ελεγκτές συσκευών (1 από 2)
• Οι συσκευές αποτελούνται από δύο μέρη
– Μηχανικό και ηλεκτρονικό
• Ελεγκτής (controller) ή προσαρμογέας (adapter)
– Κύκλωμα ελέγχου και διασύνδεσης συσκευής
– Σύνδεση με σύστημα μέσω διαύλου Ε/Ε (π.χ. PCI)
– Σύνδεση με συσκευή μέσω συζευκτήρα (π.χ. SATA)
– Υπάρχουν πολλές τυποποιημένες συνδέσεις
• IDE, SATA, eSATA, USB, FireWire, …

12

Ελεγκτές συσκευών (2 από 2)


• Ελεγκτής: βλέπει τη συσκευή σε χαμηλό επίπεδο
– Παράδειγμα: μπλοκ ενός δίσκου
– Προοίμιο (preamble), δεδομένα, άθροισμα ελέγχου
– Το μπλοκ αποθηκεύεται σε προσωρινή μνήμη
– Ελέγχεται το άθροισμα ελέγχου
– Τα δεδομένα αντιγράφονται στην κύρια μνήμη
– Παράδειγμα: ελεγκτής οθόνης
– Μεταφέρει δεδομένα και ελέγχει την οθόνη

13
Χαρτογράφηση στη μνήμη (1 από 6)
• Επικοινωνία με συσκευές
– Καταχωρητές ελέγχου συσκευής
• Εκεί γράφονται εντολές προς τη συσκευή
• Από εκεί διαβάζεται η κατάσταση της συσκευής
– Προσωρινή μνήμη δεδομένων συσκευής
• Ανάγνωση ή εγγραφή δεδομένων στη συσκευή

• Δύο βασικές τεχνικές επικοινωνίας


– Εντολές Ε/Ε ή χαρτογράφηση στη μνήμη
14

Χαρτογράφηση στη μνήμη (2 από 6)


• Επικοινωνία μέσω εντολών Ε/Ε
– Κάθε καταχωρητής είναι μία θύρα Ε/Ε
• Παραδοσιακή μέθοδος Ε/Ε (IBM 360)
– Χρήση εντολών IN REG, PORT ή OUT REG,PORT
• Αντιγραφή του REG στη θύρα PORT και αντίστροφα
– Ο υπολογιστής έχει δύο χώρους διευθύνσεων
• Χώρος διευθύνσεων μνήμης και χώρος θυρών Ε/Ε
• Άλλο IN R0,4 και άλλο MOV R0,4

15
Χαρτογράφηση στη μνήμη (3 από 6)
• Επικοινωνία με χαρτογράφηση στη μνήμη
– Κάθε καταχωρητής είναι μια διεύθυνση μνήμης
– Χρήση εντολών διαχείρισης μνήμης (PDP-11)
– Υβριδική λύση (Pentium): χαρτογράφηση+θύρες
• Οι προσωρινές μνήμες είναι χαρτογραφημένες στη μνήμη
• Οι καταχωρητές απεικονίζονται σε θύρες Ε/Ε

16

Χαρτογράφηση στη μνήμη (4 από 6)


• Επικοινωνία με συσκευή
– Η διεύθυνση τοποθετείται στο δίαυλο
• Στις γραμμές διευθύνσεων του διαύλου
– Ενεργοποιείται το σήμα READ ή WRITE
– Ενεργοποιείται σήμα μνήμης ή Ε/Ε
• Στη χαρτογραφημένη λύση υπάρχει μόνο μνήμη
– Η κατάλληλη συσκευή ανταποκρίνεται
• Ανάλογα με τη διεύθυνση και το σήμα

17
Χαρτογράφηση στη μνήμη (5 από 6)
• Πλεονεκτήματα χαρτογραφημένης Ε/Ε
– Δεν χρειάζονται ειδικές εντολές Ε/Ε
• Χρήση γλωσσών υψηλού επιπέδου
• Δεδομένα και καταχωρητές ελέγχου
– Προστασία συσκευών μέσω προστασίας μνήμης
• Χαρτογράφηση σε πυρήνα ή διεργασία
• Προσοχή: αποφυγή κρυφής μνήμης!
– Ανάγνωση/εγγραφή πρέπει να φτάνει στη συσκευή
– Απενεργοποίηση κρυφής μνήμης για τις συσκευές

18

Χαρτογράφηση στη μνήμη (6 από 6)


• Μειονεκτήματα χαρτογραφημένης Ε/Ε
– Ο χωριστός δίαυλος μνήμης μας δυσκολεύει
• Αποστολή αναπάντητων αιτήσεων σε δίαυλο Ε/Ε
• Γέφυρα που φιλτράρει τις διευθύνσεις Ε/Ε (Pentium)

19
Άμεση προσπέλαση μνήμης (1 από 4)
• Άμεση προσπέλαση μνήμης (DMA)
– Κύκλωμα υλικού μαζικής μεταφοράς από/προς τη μνήμη
• Είτε στη μητρική πλακέτα, είτε σε κάθε συσκευή
– «Προγραμματίζεται» από τον επεξεργαστή
• Εκτελεί σειρά από μεταφορές απευθείας από/προς τη μνήμη
– Στο τέλος διακόπτει τον επεξεργαστή
• Απλοί και πολύπλοκοι ελεγκτές DMA
– Οι ελεγκτές ανά συσκευή αναλαμβάνουν μία μεταφορά
– Οι ελεγκτές στη μητρική μπορεί να έχουν πολλά κανάλια

20

Άμεση προσπέλαση μνήμης (2 από 4)

• Καταχωρητές ελεγκτή DMA


– Ο επεξεργαστής ορίζει διεύθυνση και πλήθος λέξεων
– Γράφει σε καταχωρητή ελέγχου λειτουργία και θύρα Ε/Ε
– Ο επεξεργαστής ξεκινάει τη μεταφορά

21
Άμεση προσπέλαση μνήμης (3 από 4)
• Αντιγραφή λέξη-λέξη ή ανά μπλοκ
– Λέξη-λέξη: ο ελεγκτής κλέβει κύκλους μνήμης
– Ανά μπλοκ: ο ελεγκτής εκτελεί ριπές μεταφορών
• Μεταφορά στη μνήμη ή στον ελεγκτή DMA
– Αρχικά μεταφορά στον ελεγκτή
– Στη συνέχεια μεταφορά σε μνήμη ή άλλη συσκευή
• Συνήθως χρήση φυσικών διευθύνσεων για DMA
– Αλλιώς θα πρέπει να χρησιμοποιείται η MMU
22

Άμεση προσπέλαση μνήμης (4 από 4)


• Γιατί ο ελεγκτής DMA δεν διαβάζει τη συσκευή;
– Τα δεδομένα πρώτα αποθηκεύονται στον ελεγκτή
• Η μεταφορά γίνεται με την ταχύτητα της συσκευής
• Δεν χρειάζεται συγχρονισμός με δίαυλο μνήμης
– Ελέγχεται αν η μεταφορά ολοκληρώθηκε σωστά
– Μόνο τότε ξεκινάει ο ελεγκτής DMA
• Λόγοι μη χρήσης DMA
– Απλοί υπολογιστές (μειωμένο κόστος συστήματος)
– Γρήγορες συσκευές (αύξηση ταχύτητας μεταφοράς)
23
Διακοπές (1 από 7)

• Η συσκευή προκαλεί διακοπή όταν τελειώσει


• Ο ελεγκτής βλέπει αν εγκρίνεται η διακοπή
– Αν εκκρεμούν σημαντικότερες, δεν θα την εγκρίνει
– Η διακοπή θα παραμείνει ενεργοποιημένη
• Θα την εγκρίνει (ελπίζουμε!) αργότερα
24

Διακοπές (2 από 7)

• Ο ελεγκτής στέλνει σήμα διακοπής


– Μαζί με το σήμα στέλνεται η διεύθυνση διακοπής
• Χρησιμοποιείται ως δείκτης σε διάνυσμα διακοπών
– Από εδώ και πέρα διακοπή ~ παγίδα
• Π.χ. διαίρεση με το μηδέν ή κλήση συστήματος
25
Διακοπές (3 από 7)
• Ρουτίνα εξυπηρέτησης: επιβεβαιώνει τη διακοπή
– Ο ελεγκτής διακοπών μπορεί να στείλει νέα διακοπή
• Ο επεξεργαστής αποθηκεύει κάποια κατάσταση
– Μετρητής προγράμματος, ίσως και καταχωρητές
– Παλιότερα: σε ειδικές θέσεις μνήμης/καταχωρητές
• Αδυναμία χειρισμού φωλιασμένων διακοπών
– Σήμερα: σε στοίβα πυρήνα ή διεργασίας
• Στον πυρήνα δεν έχουμε κίνδυνο σφάλματος σελίδας
• Στη διεργασία δεν χρειάζεται να αλλάξουμε χάρτη μνήμης

26

Διακοπές (4 από 7)

• Ακριβείς και ανακριβείς διακοπές


– Οι διακοπές εκτελούνταν παλιά ανάμεσα στις εντολές
• Όλες οι εντολές πριν τον PC είχαν εκτελεστεί (και μόνο αυτές)
– Παροχέτευση: εκτελούνται πολλές εντολές μαζί
– Υπερβαθμωτές: οι εντολές εκτελούνται με άλλη σειρά
– Ιδανικά θέλουμε να βλέπουμε το παραδοσιακό μοντέλο
• Αν ισχύει αυτό έχουμε ακριβείς (precise) διακοπές
27
Διακοπές (5 από 7)
• Οι ακριβείς διακοπές έχουν τέσσερις ιδιότητες
– Ο PC αποθηκεύεται σε γνωστή θέση
– Όλες οι εντολές πριν τον PC έχουν ολοκληρωθεί
– Δεν έχει εκτελεστεί καμία εντολή μετά τον PC
– Η εντολή που δείχνει ο PC έχει γνωστή κατάσταση
• Πρέπει να αναιρούνται οι μερικές εκτελέσεις
– Η εντολή που δείχνει ο PC μπορεί να έχει εκτελεστεί
– Εναλλακτικά, μπορεί να μην έχει εκτελεστεί
– Απλά, πρέπει να ξέρουμε τι από τα δύο ισχύει

28

Διακοπές (6 από 7)
• Ανακριβείς διακοπές: κρατάμε κατάσταση
– Όλη η κατάστασης στέλνεται στη στοίβα
– Μεγάλο κόστος μεταφοράς στοιχείων
– Το ΛΣ πρέπει να καταλάβει τι έχει γίνει
– Ο κώδικας μπορεί να είναι πολύ περίπλοκος
• Ακριβείς και ανακριβείς διακοπές μαζί
– Οι διακοπές Ε/Ε θέλουμε να είναι ακριβείς
– Οι παγίδες διαίρεσης με το μηδέν ας μην είναι
• Η διεργασία θα τερματιστεί έτσι κι αλλιώς!

29
Διακοπές (7 από 7)
• Κατ’επιλογή ακριβείς διακοπές
– Μέσω ενεργοποίησης ενός bit ελέγχου
– Αύξηση της επιβάρυνσης του επεξεργαστή
• Οι ακριβείς διακοπές έχουν κόστος
– Περίπλοκοι μηχανισμοί στον επεξεργαστή
– Καταλαμβάνουν χώρο στο ολοκληρωμένο κύκλωμα
• Ο συμβιβασμός είναι δύσκολος
– Ανακριβείς διακοπές: περίπλοκο λειτουργικό
– Ακριβείς διακοπές: περίπλοκος επεξεργαστής

30

Αρχές λογισμικού Ε/Ε


Στόχοι λογισμικού Ε/Ε (1 από 3)
• Ανεξαρτησία από τη συσκευή
– Ανάγνωση όλων των αρχείων με τις ίδιες εντολές
– Ανεξάρτητα από τον τύπο συσκευής αποθήκευσης
• Ομοιόμορφη ονομασία
– Συμβολοσειρά ή ακέραιος ανεξάρτητα από συσκευή
– Στο UNIX ενσωματώνονται στην ιεραρχία αρχείων
• Χειρισμός σφαλμάτων
– Όσο το δυνατόν πλησιέστερα στο υλικό
– Το ΛΣ μπορεί να ανακάμπτει από κάποια σφάλματα

32

Στόχοι λογισμικού Ε/Ε (2 από 3)


• Σύγχρονες ή ασύγχρονες μεταφορές;
– Οι σύγχρονες λειτουργίες μπλοκάρουν τον καλούντα
– Οι ασύγχρονες εξελίσσονται ανεξάρτητα του καλούντα
– Μετατροπή ασύγχρονων σε σύγχρονες κλήσεις
• Κοινόχρηστες και αποκλειστικές συσκευές
– Ορισμένες συσκευές είναι κοινόχρηστες (π.χ. δίσκοι)
– Άλλες είναι αποκλειστικές (π.χ. εκτυπωτής)
– Οι αποκλειστικές πρέπει να δεσμεύονται πριν τη χρήση
– Η δέσμευση εισάγει τον κίνδυνο των αδιεξόδων

33
Στόχοι λογισμικού Ε/Ε (3 από 3)
• Προσωρινή αποθήκευση
– Τα πακέτα δικτύου δεν πάνε στον παραλήπτη
• Πρέπει να εξεταστεί η επικεφαλίδα του πακέτου
– Οι συσκευές ήχου είναι πραγματικού χρόνου
• Το ΛΣ χρησιμοποιεί προσωρινές μνήμες
– Η προσωρινή αποθήκευση οδηγεί σε αντιγραφές
• Μεγάλο κόστος αντιγραφής λόγω αργής μνήμης
• Αποφυγή προσωρινής αποθήκευσης όπου μπορούμε

34

Προγραμματισμένη Ε/Ε (1 από 2)

• Ο επεξεργαστής ελέγχει πλήρως την Ε/Ε


– Ο χρήστης παίρνει τον έλεγχο του εκτυπωτή
– Στέλνει τα δεδομένα με μια κλήση συστήματος
– Το ΛΣ στέλνει χαρακτήρα προς χαρακτήρα τα δεδομένα
– Σε κάθε βήμα ελέγχει αν είναι έτοιμος ο εκτυπωτής
35
Προγραμματισμένη Ε/Ε (2 από 2)

• Ο επεξεργαστής ελέγχει συνέχεια τη συσκευή


– Αναμονή με απασχόληση ή περιόδευση (polling)
– Όταν είναι έτοιμη, στέλνει τον επόμενο χαρακτήρα
• Απλή και οικονομική λύση
• Αποδοτική μόνο με πολύ γρήγορες συσκευές
• Παράδειγμα: εκτυπωτής ταχύτητας 100 cps
– Δέχεται έναν χαρακτήρα ανά 10 ms
– Πόσες εντολές εκτελεί ένας επεξεργαστής στο 1 GHz;
36

Ε/Ε οδηγούμενη από διακοπές

• Ο επεξεργαστής στέλνει και ασχολείται με κάτι άλλο


– Καλεί το χρονοπρογραμματιστή
– Όταν ολοκληρωθεί η εργασία συμβαίνει μία διακοπή
– Η διαδικασία εξυπηρέτησης ελέγχει τι έγινε
• Αν είναι όλα εντάξει, στέλνονται τα επόμενα δεδομένα
• Στο τέλος απελευθερώνεται η διεργασία χρήστη
37
Ε/Ε με χρήση DMA

• Η μεταφορά εκτελείται από τον ελεγκτή DMA


– Λαμβάνουμε μία μόνο διακοπή στο τέλος
– Γλυτώνουμε το κόστος διαχείρισης των διακοπών
• Ελεγκτής DMA: πιο αργός από τον επεξεργαστή
– Για πολύ γρήγορες συσκευές δεν επαρκεί
– Τότε συμφέρει η χρήση του ίδιου του επεξεργαστή
– Για αργές συσκευές απελευθερώνει τον επεξεργαστή
38

Επίπεδα λογισμικού Ε/Ε


Χειριστές διακοπών (1 από 2)

• Χειριστές διακοπών
– Οι οδηγοί ξεκινούν τις μεταφορές και μπλοκάρουν
– Όταν συμβεί μια διακοπή ενεργοποιείται ο χειριστής
• Διαχείριση διακοπών μέχρι την ολοκλήρωση λειτουργίας
• Παράδειγμα: αποστολή πρόσθετων χαρακτήρων στη συσκευή
– Ξεμπλοκάρισμα του οδηγού συσκευής στο τέλος
• Αποστολή σήματος, signal σε σηματοφόρο ή κάτι ανάλογο
40

Χειριστές διακοπών (2 από 2)


• Γενική λειτουργία χειριστή διακοπής
– Αποθήκευση υπόλοιπων καταχωρητών
– Καθορισμός περιβάλλοντος εκτέλεσης (αλλαγές MMU)
– Δημιουργία στοίβας για τη διαδικασία εξυπηρέτησης
– Αποστολή επιβεβαίωσης στον ελεγκτή διακοπών
– Αντιγραφή καταχωρητών στον πίνακα διεργασιών
– Εκτέλεση του κώδικα εξυπηρέτησης διακοπής
– Επιλογή της επόμενης διεργασίας προς εκτέλεση
– Καθορισμός περιβάλλοντος εκτέλεσης (αλλαγές MMU)
– Φόρτωση καταχωρητών και μεταφορά ελέγχου

41
Οδηγοί συσκευών (1 από 5)
• Εξειδικευμένος κώδικας για κάθε είδος συσκευής
– Γνωρίζει εντολές και κώδικες σφαλμάτων της συσκευής
– Χειρίζεται τη συσκευή μέσω των καταχωρητών της
– Μπορεί να χειρίζεται πολλές παρόμοιες συσκευές
• Εκτέλεση συνήθως μέσα στον πυρήνα
– Άμεση πρόσβαση στο υλικό, άρα και στη συσκευή
– Σφάλματα στον οδηγό επηρεάζουν το σύστημα
– Σε ορισμένα ΛΣ εκτελούνται σε επίπεδο χρήστη
– Ακριβή επικοινωνία αλλά μεγαλύτερη αξιοπιστία

42

Οδηγοί συσκευών (2 από 5)

Οδηγοί συσκευών: στο κάτω άκρο του ΛΣ


43
Οδηγοί συσκευών (3 από 5)
• Συνήθως διακρίνονται σε γενικές κατηγορίες
– Συσκευές μπλοκ και συσκευές χαρακτήρων
– Πρότυπη διασύνδεση με το ΛΣ για κάθε κατηγορία
– Επιτρέπει στο ΛΣ να χειρίζεται ποικιλία συσκευών
• Σύνδεση συσκευών με το λειτουργικό σύστημα
– Παλιότερα στατική σύνδεση με πυρήνα
• Υποθέτει ότι η μηχανή έχει συγκεκριμένες συσκευές
– Φόρτωση οδηγών στην εκκίνηση ή με τη σύνδεση
• Κατάλληλη για προσωπικούς υπολογιστές

44

Οδηγοί συσκευών (4 από 5)


• Τυπική δομή οδηγού συσκευής
– Κώδικας αρχικοποίησης συσκευής
– Έλεγχος παραμέτρων κλήσεων
– Μετάφραση εντολών σε παραμέτρους συσκευής
– Αναμονή μέχρι να γίνει διαθέσιμη η συσκευή
– Αποστολή εντολών και δεδομένων στη συσκευή
– Προγραμματισμένη Ε/Ε ή αναμονή για διακοπή
– Έλεγχος λειτουργίας για σφάλματα
– Επιστροφή αποτελεσμάτων σε ανώτερο επίπεδο

45
Οδηγοί συσκευών (5 από 5)
• Επανεισαγόμενοι οδηγοί (reentrant)
– Διακοπή τρέχουσας εκτέλεσης από νέα κλήση οδηγού
– Ο οδηγός πρέπει να εκτελείται από πολλές διεργασίες
• Υποστήριξη εν θερμώ σύνδεσης (hot plugging)
– Αντιμετώπιση απομάκρυνσης συσκευών
– Πρέπει να αποφεύγεται η ζημιά στον πυρήνα
– Ρύθμιση συσκευών κατά τη σύνδεσή τους
• Επικοινωνία οδηγών με τον πυρήνα
– Χρήση διαδικασιών που διαθέτει ο πυρήνας
– Παράδειγμα: διαχείριση χρονομέτρων, DMA, διακοπών

46

Ανεξάρτητο από τη συσκευή (1 από 6)

• Λογισμικό Ε/Ε ανεξάρτητο από τη συσκευή


– Λειτουργίες που εκτελούνται έξω από τους οδηγούς
• Ομοιόμορφη διασύνδεση για οδηγούς συσκευών
– Αποφυγή τροποποίησης ΛΣ για κάθε τύπο συσκευής
– Υλοποιείται από τους προγραμματιστές των οδηγών
– Παρέχει υλοποιήσεις συγκεκριμένων μεθόδων
– Παράδειγμα: ανάγνωση μπλοκ k από συσκευή μπλοκ
– Ο οδηγός έχει πίνακα με δείκτες προς τις υλοποιήσεις
47
Ανεξάρτητο από τη συσκευή (2 από 6)

• Ομοιόμορφη διασύνδεση για οδηγούς συσκευών


– Ομοιόμορφη ονομασία συσκευών
– Παράδειγμα: μείζων/ελάσσων αριθμός στο UNIX
– Ο μείζων αριθμός επιλέγει έναν οδηγό συσκευής
– Ο ελάσσων αριθμός επιλέγει μία από τις συσκευές
48

Ανεξάρτητο από τη συσκευή (3 από 6)

• Προσωρινή αποθήκευση
– Οι διεργασίες χρησιμοποιούν ομάδες χαρακτήρων
– Αν η ομάδα είναι στον πυρήνα, κλειδώνεται στη μνήμη
– Προσθήκη δεύτερης ομάδας για παράλληλη επικοινωνία
– Εναλλακτικά, χρήση κυκλικής προσωρινής μνήμης

49
Ανεξάρτητο από τη συσκευή (4 από 6)

• Προσωρινή αποθήκευση
– Στην έξοδο επιτρέπει στη διεργασία να συνεχίσει
– Αρκεί τα δεδομένα να έχουν αντιγραφεί στον πυρήνα
• Προσοχή όμως στο κόστος των αντιγραφών!
– Οι αντιγραφές επιβραδύνουν τα προγράμματα

50

Ανεξάρτητο από τη συσκευή (5 από 6)

• Αναφορές σφαλμάτων
– Ορισμένα σφάλματα αντιμετωπίζονται από τον οδηγό
– Άλλα σφάλματα είναι ανεξάρτητα από τη συσκευή
– Παράδειγμα: παράμετροι εκτός ορίων
– Το σφάλμα μπορεί να παρουσιάζεται στο χρήστη
– Ο χρήστης επιλέγει πώς θέλει να αντιμετωπιστεί
• Μέγεθος μπλοκ ανεξάρτητο από τη συσκευή
– Απόκρυψη των διαφορετικών τομέων των συσκευών
– Μετατροπή διάφορων φυσικών σε ένα λογικό μπλοκ

51
Ανεξάρτητο από τη συσκευή (6 από 6)

• Εκχώρηση και αποδέσμευση συσκευών


– Ορισμένες συσκευές δεν καταμερίζονται
• Μόνο μία διεργασία μπορεί να γράφει στο CD-R
– Το ΛΣ πρέπει να έχει μία μέθοδο δέσμευσης
• Παράδειγμα: άνοιγμα ειδικού αρχείου συσκευής
– Σε περίπτωση αποτυχίας;
• Νέα δοκιμή αργότερα ή προσθήκη σε ουρά
– Προσοχή στα αδιέξοδα (χωριστή ενότητα)
52

Χώρου χρήστη (1 από 2)


• Απλούστερη περίπτωση: κλήσεις συστήματος
– Παράδειγμα: count = read(fd, &buffer, nbytes);
• Συνήθως: κλήσεις μορφοποιημένης εισόδου/εξόδου
– Παράδειγμα: printf(“The square of %d is %6d\n”,j,j*j);
– Μετατρέπεται από τη βιβλιοθήκη σε κλήσεις συστήματος
• Διεργασία χειρισμού συσκευών επιπέδου χρήστη
– Τα αρχεία προς εκτύπωση γράφονται σε ειδικό κατάλογο
– Ο δαίμονας εκτύπωσης ελέγχει περιοδικά τον κατάλογο
– Εκτυπώνει νέα αρχεία αφού έχει άδεια χρήσης εκτυπωτή
– Αποτελεί μέρος του ΛΣ αν και δεν είναι στον πυρήνα

53
Χώρου χρήστη (2 από 2)

• Επίπεδα συστήματος Ε/Ε: ανάγνωση δεδομένων


– Κλήση συστήματος από διεργασία μέσω βιβλιοθήκης
– Το ανεξάρτητο λογισμικό ψάχνει την κρυφή μνήμη
– Ο οδηγός συσκευής διαβάζει το μπλοκ από το δίσκο
– Ο χειριστής διακοπών ενημερώνει τον οδηγό στο τέλος
54

Δίσκοι
Υλικό των δίσκων
• Τύποι δίσκων
– Μαγνητικοί: δίσκοι και δισκέτες
• Ανάγνωση και εγγραφή στην ίδια ταχύτητα
• Σελιδοποίηση, συστήματα αρχείων
– Οπτικοί δίσκοι: CD, DVD, Blu-Ray
• Διανομή προγραμμάτων και μέσων
• Μη εγγράψιμοι, εγγράψιμοι, επανεγγράψιμοι
– Δίσκοι μνήμης flash: πιο γρήγορη ανάγνωση

56

Μαγνητικοί δίσκοι (1 από 7)


• Οργάνωση σε κυλίνδρους, τροχιές, τομείς
• Οι IDE και SATA περιέχουν μικροελεγκτή
– Κρυφή μνήμη, αντικατάσταση χαλασμένων μπλοκ
• Ελεγκτές με προχωρημένες δυνατότητες
– Παράλληλη λειτουργία πολλών δίσκων
– Επικαλυπτόμενες αναζητήσεις
– Παράλληλη ανάγνωση/αναζήτηση/εγγραφή
– Μία μόνο μεταφορά από/προς τη μνήμη

57
Μαγνητικοί δίσκοι (2 από 7)

• Βασικές παράμετροι δισκέτας πρώτου IBM PC


• Παράμετροι σκληρού δίσκου 20 χρόνια μετά
– Τα μηχανικά μέρη δεν έχουν βελτιωθεί τόσο πολύ!
58

Μαγνητικοί δίσκοι (3 από 7)

• Η γεωμετρία έχει αλλάξει από τους πρώτους δίσκους


– Οι κύλινδροι χωρίζονται σε ζώνες
– Οι εξωτερικές ζώνες έχουν περισσότερους τομείς
• Ο ελεγκτής μετατρέπει φυσική σε εικονική γεωμετρία
• Διευθυνσιοδότηση λογικών μπλοκ (LBA)
– Όλοι οι τομείς αριθμούνται από 0 έως n
59
Μαγνητικοί δίσκοι (4 από 7)
• RAID (Redundant Array of Inexpensive Disks)
– Εναλλακτικά Independent αντί Inexpensive
– Η συστοιχία φαίνεται σαν ένας δίσκος
– Κατανομή δεδομένων με διάφορους τρόπους
• RAID 0 (striping)
– Κάθε δίσκος χωρίζεται σε ζώνες (strips) k τομέων
– Τα δεδομένα γράφονται κυκλικά στις ζώνες των δίσκων
– Κατάλληλο για παράλληλη Ε/Ε μεγάλων ομάδων
– Καμία βελτίωση για αιτήσεις μεγέθους έως 1 ζώνη
– Χειρότερη αξιοπιστία από τους απλούς δίσκους!

60

Μαγνητικοί δίσκοι (5 από 7)

• RAID 1: RAID 0 με δύο αντίγραφα κάθε δίσκου


– Η ανάγνωση γίνεται από οποιοδήποτε αντίγραφο
– Αυξημένη αξιοπιστία αλλά διπλασιασμός κόστους
• RAID 2: παράλληλη εγγραφή bit μαζί με ECC
– Χρειάζεται γρήγορο ελεγκτή, έχει μεγάλη επιβάρυνση

61
Μαγνητικοί δίσκοι (6 από 7)

• RAID 3: RAID 2 με 1 bit ισοτιμίας


– Διόρθωση ενός σφάλματος ανά λέξη
• Γνωρίζουμε τη θέση του χαλασμένου δίσκου
• RAID 4: RAID 3 αλλά με ζώνες και όχι ανά bit
– Η εγγραφή απαιτεί ανάγνωση όλων των ζωνών
– Μετά υπολογίζουμε και γράφουμε τη νέα ισοτιμία

62

Μαγνητικοί δίσκοι (7 από 7)

• RAID 5: RAID 4 με διάσπαρτη ισοτιμία


– Στο RAID 4 ο δίσκος ισοτιμίας έχει μεγάλο φόρτο
• Πρέπει να γράφεται σε κάθε εγγραφή ζώνης
– Στο RAID 5 ο φόρτος κατανέμεται
• Συνήθως: ελεγκτές RAID 0, 1 και 5
– Το RAID 5 απαιτεί >=3 δίσκους

63
Οπτικοί δίσκοι (1 από 7)

• CD-ROM: οπτικός δίσκος αποθήκευσης δεδομένων


• Η επιφάνεια έχει κοιλώματα και πεδιάδες
– Στη μία πλευρά έχουμε ανακλαστική επίστρωση
– Το φως του λέιζερ ανακλάται διαφορετικά
• Εγγραφή των δεδομένων σε σπειροειδή μορφή
– Σταθερή γραμμική πυκνότητα εγγραφής στη σπείρα
64

Οπτικοί δίσκοι (2 από 7)


• Κίτρινο βιβλίο: το κλασικό CD-ROM για δεδομένα
– Κόκκινο βιβλίο: το CD μουσικής (CD-Audio)
– Πολύ ισχυρή διόρθωση σφαλμάτων
– Προοίμιο: σημαία (13), αριθμός τομέα (3), mode (1)
– Mode 1: 2048 byte δεδομένων και ECC 288 byte
– Mode 2: 2336 byte δεδομένων χωρίς ECC

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

Οπτικοί δίσκοι (4 από 7)

• Εγγράψιμα CD
– Βαφή ανάμεσα στο πολυμερές και το ανακλαστικό
– Κατά την εγγραφή η βαφή «καίγεται» επιλεκτικά
– Προχαραγμένο αυλάκι για καθοδήγηση εγγραφής
67
Οπτικοί δίσκοι (5 από 7)
• Πορτοκαλί βιβλίο: CD-R και CD-ROM XA
– Επιτρέπει την εγγραφή σε τροχιές (tracks)
– Οι τροχιές ομαδοποιούνται σε εγγραφές (sessions)
• Οι εγγραφές απαιτούν νέους πίνακες περιεχομένων
– Κάθε τροχιά έχει το δικό της πίνακα περιεχομένων
– Μπορεί να περιέχει ή όχι τα αρχεία παλιότερων τροχιών
• Επανεγγράψιμα CD
– Παρόμοια με CD-R αλλά επιτρέπουν διαγραφή δεδομένων
• Η ακτίνα λέιζερ μπορεί να φέρει τη βαφή στην αρχική κατάσταση
• Έχουμε τρία επίπεδα ισχύος: εγγραφή, διαγραφή, ανάγνωση

68

Οπτικοί δίσκοι (6 από 7)

• DVD: Digital Video Disk


– Εναλλακτικά, Digital Versatile Disk
– Βελτιωμένη μορφή του CD
• Μικρότερα κοιλώματα, στενότερες σπείρες
• Κόκκινο αντί για υπέρυθρο λέιζερ

69
Οπτικοί δίσκοι (7 από 7)

– Χωρητικότητα 4.7 GB και ρυθμός 1.4 MB/sec


• Ή πολλαπλάσιος ρυθμός
– DVD δύο στρώσεων: 8.5 GB ανά επιφάνεια
• Η δεύτερη στρώση έχει ημιανακλαστική επιφάνεια
– DVD δύο πλευρών: διπλασιασμός χωρητικότητας

70

Διαμόρφωση δίσκου (1 από 5)


• Διαμόρφωση χαμηλού επιπέδου μαγνητικού δίσκου
– Δημιουργία τομέων που χωρίζονται με μικρά χάσματα (gaps)
– Προοίμιο με στοιχεία τομέα και δεδομένα (π.χ. 512 byte)
– Κώδικας ανίχνευσης/διόρθωσης σφαλμάτων (ECC, π.χ. 16 byte)
– Εφεδρικοί τομείς για αντικατάσταση των χαλασμένων
• Στρέβλωση κυλίνδρου (cylinder skew)
– Ο τομέας 0 κάθε τροχιάς μετακινείται από τροχιά σε τροχιά
– Όσο χρειάζεται για να κινηθεί η κεφαλή στην επόμενη
– Επιτρέπει τη συνεχή ανάγνωση από τροχιά σε τροχιά
– Εξαρτάται από τις ταχύτητες περιστροφής και αναζήτησης

71
Διαμόρφωση δίσκου (2 από 5)

• Στρέβλωση κεφαλής για κίνηση σε επόμενη επιφάνεια


– Πολύ μικρότερη από τη στρέβλωση κυλίνδρου

72

Διαμόρφωση δίσκου (3 από 5)


• Η διαμόρφωση μειώνει τη χωρητικότητα του δίσκου
– Αφαιρούνται χάσματα, προοίμια, ECC, εφεδρικοί τομείς
– Μπορεί να είναι 20% μικρότερη μετά τη διαμόρφωση
• Γιατί διαφέρουν τόσο πολύ οι χωρητικότητες;
– Ορισμένοι δίνουν χωρητικότητα χωρίς διαμόρφωση
– Άλλοι δίνουν χωρητικότητα σε δυνάμεις 10 και όχι 2
• Ταχύτητα μεταφοράς δεδομένων
– Έστω ελεγκτής με προσωρινή μνήμη ενός τομέα
– Αφού διαβάσει τον τομέα τον ελέγχει πριν τον παραδώσει
– Περιμένει μία περιστροφή για τον επόμενο τομέα!

73
Διαμόρφωση δίσκου (4 από 5)

• Παρεμβολή (interleaving) στη διαμόρφωση


– Οι τομείς γράφονται με ένα ή δύο κενά
– Ο ελεγκτής προλαβαίνει να διαβάσει τον επόμενο
– Εναλλακτικά, διαβάζει ολόκληρη την τροχιά
– Προσοχή: άλλο παρεμβολή, άλλο στρέβλωση
• Αν και έχουν παρόμοιο λόγο ύπαρξης
74

Διαμόρφωση δίσκου (5 από 5)


• Δημιουργία διαμερισμάτων (partitions)
– Κάθε διαμέρισμα φαίνεται σαν ξεχωριστός δίσκος
– Χρήση για λειτουργικό ή ανταλλαγή (swapping)
• Πίνακας διαμερισμάτων: συνήθως στο MBR
– Μεγέθη διαμερισμάτων και ενεργό διαμέρισμα
– Για κάθε διαμέρισμα τι σύστημα αρχείων έχει
• Διαμόρφωση υψηλού επιπέδου
– Εξαρτάται από το σύστημα αρχείων
– Εκκίνηση, λίστα/χάρτης ελεύθερων, κατάλογος ρίζας

75
Χρονοπρογραμματισμός (1 από 5)
• Αλγόριθμοι χρονοπρογραμματισμού βραχίονα
– Χρόνος ανάγνωσης/εγγραφής ενός μπλοκ:
• Χρόνος αναζήτησης: μετακίνηση κεφαλής σε κύλινδρο
• Καθυστ. περιστροφής: το μπλοκ φτάνει στην κεφαλή
• Χρόνος μεταφοράς δεδομένων
– Ο χρόνος αναζήτησης κυριαρχεί των άλλων
• Μείωση με χρονοπρογραμματισμό βραχίονα δίσκου
• Στην απλούστερη περίπτωση έχουμε FCFS
• Δεν εκμεταλλευόμαστε τη θέση των αναζητήσεων

76

Χρονοπρογραμματισμός (2 από 5)

• Όλες οι αιτήσεις ταξινομούνται ανάλογα με κύλινδρο


– Ποια αίτηση θα εξυπηρετηθεί αμέσως μετά;
• Αλγόριθμος συντομότερης αναζήτησης πρώτα (SSF)
– Εξυπηρέτησε την πιο κοντινή αίτηση
– Μειώνει τις κινήσεις του βραχίονα σημαντικά
– Κίνδυνος υποσιτισμού αιτήσεων σε μεγάλο φόρτο

77
Χρονοπρογραμματισμός (3 από 5)

• Αλγόριθμος ανελκυστήρα (elevator algorithm ή SCAN)


– Σε κάθε φάση ο βραχίονας κινείται προς μία κατεύθυνση
– Στο τέλος αλλάζει κατεύθυνση
• Παραλλαγή: σάρωση σε μία κατεύθυνση (C-SCAN)
– Όταν τελειώσει η σάρωση ξεκινάμε πάλι από την αρχή
– Μικρότερη διακύμανση στους χρόνους εξυπηρέτησης

78

Χρονοπρογραμματισμός (4 από 5)
• Βελτιστοποιήσεις ανά κύλινδρο
– Εξυπηρέτηση τομέων όπως έρχονται στην κεφαλή
– Εξυπηρέτηση των τροχιών του ίδιου κυλίνδρου
• Ομαδική ανάγνωση τομέων
– Όταν ζητείται ένας τομέας διαβάζεται όλη η τροχιά
– Αποθηκεύεται στην κρυφή μνήμη του ελεγκτή
– Αποφυγή καθυστέρησης αναζήτησης/περιστροφής
– Κατανομή κρυφής μνήμης σε αναγνώσεις/εγγραφές

79
Χρονοπρογραμματισμός (5 από 5)
• Κρυφή μνήμη ελεγκτή ή λειτουργικού;
– Ο ελεγκτής αποθηκεύει τους τομείς που διαβάζει
– Το λειτουργικό αποθηκεύει τους τομείς που ζήτησε
• Παράλληλες λειτουργίες με πολλούς δίσκους
– Επικαλυπτόμενες αναζητήσεις
• Πού εκτελούνται οι αλγόριθμοι αυτοί;
– Παλιότερα: στο λειτουργικό σύστημα
– Σήμερα: οι δίσκοι αποκρύπτουν τη γεωμετρία τους
– Οι αλγόριθμοι μπορούν να εκτελούνται στον ελεγκτή

80

Χειρισμός σφαλμάτων (1 από 4)


• Οι δίσκοι δεν είναι ποτέ τέλειοι
– Πιο οικονομικό να δεχόμαστε μερικά ελαττώματα
– Πώς αντιμετωπίζονται τα ελαττωματικά σημεία;
– Μικρά σφάλματα: αρκεί ο κώδικας ECC
– Μεγάλα σφάλματα: παρακάμπτεται ο τομέας
• Παράκαμψη τομέων από τον ελεγκτή
– Γίνεται κατά την αρχική μορφοποίηση
– Σημειώνονται οι ελαττωματικοί τομείς
– Αντικαθίστανται από εφεδρικούς τομείς

81
Χειρισμός σφαλμάτων (2 από 4)

• Παράκαμψη τομέων από τον ελεγκτή


– Είτε αντικατάσταση από εφεδρικό σε άλλο σημείο
– Είτε παράκαμψη ελαττωματικού με ολίσθηση τομέων
• Πώς σημειώνονται οι εφεδρικοί τομείς;
– Χρήση πίνακα αντικατάστασης ανά τροχιά
– Εγγραφή διαφορετικών προοιμίων στους τομείς

82

Χειρισμός σφαλμάτων (3 από 4)


• Παράκαμψη τομέων από το λειτουργικό
– Εντοπισμός από ελεγκτή ή έλεγχος με λογισμικό
– Οι ελαττωματικοί τομείς μπαίνουν σε κρυφό αρχείο
– Δεν εμφανίζονται στη λίστα ελευθέρων
– Πρέπει να παρακάμπτονται σε αντίγραφα ασφαλείας
• Σφάλματα αναζήτησης
– Ο ελεγκτής στέλνει σειρά παλμών στο βραχίονα
– Ο βραχίονας μπορεί να μην βρεθεί στο σωστό κύλινδρο
– Έλεγχος των προοιμίων για να δούμε πού βρίσκεται
– Διόρθωση με πρόσθετους παλμούς

83
Χειρισμός σφαλμάτων (4 από 4)
• Οι ελεγκτές μπορούν να κάνουν και reset
– Ειδικός ακροδέκτης reset σε περίπτωση ανάγκης
• Το πρόβλημα της επαναβαθμονόμησης
– Χρειάζεται όταν έχουμε σφάλματα αναζήτησης
– Ο βραχίονας οδηγείται στο άκρο του δίσκου
– Δημιουργείται σημαντική καθυστέρηση
– Πρόβλημα στις εφαρμογές πολυμέσων
– Οι δίσκοι AV αποφεύγουν την επαναβαθμονόμηση

84

Ευσταθής αποθήκευση (1 από 3)


• Η ευσταθής αποθήκευση διατηρεί το δίσκο συνεπή
– Βασίζεται στη χρήση ενός ζεύγους ίδιων δίσκων
– Απίθανο ο ίδιος τομέας να χαλάσει και στους δύο
• Ευσταθείς εγγραφές
– Το μπλοκ γράφεται στη μονάδα 1 και ελέγχεται
– Αν αποτύχει n φορές, επαναχαρτογραφείται
– Επαναλαμβάνουμε το ίδιο στη μονάδα 2
• Ευσταθείς αναγνώσεις
– Ανάγνωση μπλοκ μέχρι n φορές από μονάδα 1
– Αν αποτύχει επαναλαμβάνουμε με μονάδα 2

85
Ευσταθής αποθήκευση (2 από 3)

• Ανάκαμψη από κατάρρευση


– Αν τα μπλοκ διαφέρουν χρησιμοποιείται η μονάδα 1
• (α) δεν έχει γίνει καθόλου εγγραφή (παλιά κατάσταση)
• (β) δεν έχει ολοκληρωθεί η εγγραφή στην 1 (παλιά κατάσταση)
• (γ) έχει ολοκληρωθεί η εγγραφή στην 1 (νέα κατάσταση)
• (δ) δεν έχει ολοκληρωθεί η εγγραφή στην 2 (νέα κατάσταση)
• (ε) έχουν ολοκληρωθεί και οι δύο εγγραφές (νέα κατάσταση)
86

Ευσταθής αποθήκευση (3 από 3)


• Αξιοποίηση μη πτητικής RAM (NVRAM) για επιτάχυνση
– Η NVRAM περιέχει την τρέχουσα τιμή του ρολογιού
– Πριν την εγγραφή γράφουμε τον αριθμό μπλοκ στην NVRAM
– Αν ολοκληρωθεί η εγγραφή γράφουμε -1 στην NVRAM
– Μετά από κατάρρευση ελέγχουμε την NVRAM
• Εναλλακτικά χρήση «ημερολογίου»
– Πρώτα γράφουμε σε κάθε μονάδα τον αριθμό μπλοκ
– Μετά γράφουμε τα ίδια τα μπλοκ
– Στο τέλος γράφουμε -1 και στις δύο μονάδες
• Περιοδική σάρωση των δίσκων για σφάλματα

87
Ρολόγια

Υλικό των ρολογιών (1 από 3)

• Ρολόγια (clocks) ή χρονόμετρα (timers)


– Περιοδική παραγωγή διακοπών
– Τήρηση ώρας και χρονοπρογραμματισμός
– Παλιότερα: διακοπές σε κάθε κύκλο ρεύματος
– Σήμερα: βασίζονται σε ταλαντωτή (oscillator)
• Σε κάθε ταλάντωση μειώνεται ο μετρητής κατά 1
• Όταν μηδενιστεί ο μετρητής παράγεται μία διακοπή
• Στην αρχή φορτώνεται από τον καταχωρητή υποδοχής
89
Υλικό των ρολογιών (2 από 3)
• Κατάσταση απλής λειτουργίας (one-shot)
– Μετά την διακοπή το λειτουργικό αποφασίζει
– Μπορεί να ξεκινήσει ξανά το ρολόι
• Κατάσταση τετραγωνικού παλμού (square-wave)
– Μετά τη διακοπή φορτώνεται αυτόματα ο μετρητής
– Παραγωγή περιοδικών χτύπων ρολογιού (ticks)
• Ορισμός συχνότητας μέσω του καταχωρητή
– Έστω ότι ο κρύσταλλος πάλλεται στα 500 MHz
– Με καταχωρητή 32 bit έχουμε περίοδο 2 ns - 8.6 s

90

Υλικό των ρολογιών (3 από 3)


• Διατήρηση ώρας και ημερομηνίας
– Χρήση ρολογιού με χωριστή μπαταρία
– Το ρολόι αυτό διαβάζεται κατά την εκκίνηση
– Σε κάθε διακοπή αυξάνεται ο χρόνος
• Ανάλογα με τη συχνότητα των διακοπών
– Αποθήκευση του χρόνου από κάποιο σημείο
• 1/1/1970 στο UNIX
• 1/1/1980 στα Windows

91
Λογισμικό των ρολογιών (1 από 5)
• Τήρηση ημερομηνίας και ώρας
– 32 bit δεν φτάνουν για χτύπους από το 1970!
– Είτε χρήση μετρητή 64 bit
– Είτε χρήση μετρητή δευτερολέπτων
• Αύξηση δευτερολέπτων μετά από n χτύπους
– Είτε χρήση μετρητή χτύπων από την ώρα εκκίνησης
• Πρόσθεση μετρητή στην ώρα εκκίνησης του συστήματος

92

Λογισμικό των ρολογιών (2 από 5)


• Χρέωση της ΚΜΕ
– Χρήση χρονομέτρου που ξεκινάει με τη διεργασία
• Σε κάθε διακοπή χρονομέτρου η τιμή αυξάνεται
• Αποθήκευση στον πίνακα διεργασιών όταν διακόπτεται
• Η διεργασία χρεώνεται τον πραγματικό χρόνο εκτέλεσης
– Εναλλακτικά χρήση ενός μετρητή ανά διεργασία
• Σε κάθε διακοπή βλέπουμε ποια διεργασία εκτελείται
• Αυξάνουμε τον αντίστοιχο μετρητή
• Η διεργασία χρεώνεται και τις (άσχετες) διακοπές

93
Λογισμικό των ρολογιών (3 από 5)

• Χειρισμός της κλήσης alarm των διεργασιών


– Όλες οι αιτήσεις μπαίνουν σε μία ουρά
– Ταξινόμηση με βάση τη στιγμή διακοπής
– Η πρώτη αίτηση δείχνει πόσοι χτύποι απομένουν
– Οι υπόλοιπες δείχνουν χτύπους μετά την προηγούμενη
– Σε κάθε διακοπή μειώνεται ο μετρητής της κεφαλής
– Όταν μηδενιστεί στέλνεται ένα σήμα στη διεργασία
– Η επόμενη αίτηση γίνεται κεφαλή της ουράς

94

Λογισμικό των ρολογιών (4 από 5)


• Περιορισμός χρόνου εκτέλεσης εργασιών
– Αρχική τιμή στο μετρητή κβάντου στην εκκίνηση
– Σε κάθε διακοπή μειώνεται ο μετρητής κβάντου
– Όταν μηδενιστεί καλείται ο χρονοπρογραμματιστής
• Χρονόμετρα επαγρύπνησης (watchdog timers)
– Παράδειγμα: διακοπή λειτουργίας δίσκου
– Ίδιος μηχανισμός με τα χρονόμετρα των χρηστών
– Αντί να στέλνονται σήματα, καλούνται διαδικασίες
• Είναι στον ίδιο χώρο διευθύνσεων με τον οδηγό

95
Λογισμικό των ρολογιών (5 από 5)
• Ανάλυση (profiling) του συστήματος
– Δημιουργία ιστογράμματος χρήσης προγράμματος
– Ενεργοποιείται όταν ζητείται από πρόγραμμα χρήστη
– Σε κάθε διακοπή εξετάζεται η τρέχουσα τιμή του PC
– Αντιστοίχιση του PC σε περιοχή διευθύνσεων
– Αύξηση του μετρητή της περιοχής κατά 1
– Οι περιοχές αντιστοιχούν σε μεθόδους/συναρτήσεις
– Βλέπουμε που ξοδεύει το χρόνο του το πρόγραμμα

96

Χρονόμετρα λογισμικού
• Διάφορα μέρη του συστήματος χρειάζονται ρολόγια
– Παράδειγμα: ο κώδικας των δικτυακών πρωτοκόλλων
• Πώς μπορούν να υλοποιηθούν χωρίς μεγάλη επιβάρυνση;
– Η χρήση διακοπών έχει μεγάλο κόστος σε χρόνο
• Χρονόμετρα λογισμικού: χρήση polling
– Όποτε ο πυρήνας τελειώνει κάποια λειτουργία τα ελέγχει
– Αν κάποιο έχει λήξει εκτελούμε την κατάλληλη λειτουργία
– Αποφεύγουμε διακοπή και αλλαγή περιβάλλοντος
– Πρέπει όμως ο πυρήνας να εκτελείται αρκετά συχνά
– Επιπλέον χρησιμοποιούμε και τις διακοπές ρολογιού

97
Διασυνδέσεις με το χρήστη

Λογισμικό εισόδου (1 από 6)


• Τερματικό (terminal)
– Συσκευή διασύνδεσης με υπολογιστή
– Παλιότερα ενιαία (οθόνη και πληκτρολόγιο)
– Σήμερα χωριστές (και περισσότερες) συσκευές
• Λογισμικό εισόδου
– Κυρίως για πληκτρολόγιο και ποντίκι
• Πληκτρολόγιο
– Περιέχει ενσωματωμένο επεξεργαστή
– Σύνδεση μέσω USB ή άλλης σειριακής θύρας (PS/2)
– Πάτημα και απελευθέρωση πλήκτρου: διακοπή

99
Λογισμικό εισόδου (2 από 6)
• Λογισμικό πληκτρολογίου
– Το πληκτρολόγιο παράγει κωδικούς 7 bit
– Το 8ο bit του κωδικού είναι
• 0 για πάτημα πλήκτρου
• 1 για απελευθέρωση πλήκτρου
– Ο οδηγός γνωρίζει ποιο 5 πατήσαμε
• Άνω σειρά πλήκτρων ή αριθμητικό
– Ο οδηγός αποφασίζει το συνδυασμό πλήκτρων
• Συνδυασμός πλήκτρων που έχουν πατηθεί (π.χ. CTRL-A)
• Αρκεί η παρακολούθηση των πλήκτρων

100

Λογισμικού εισόδου (3 από 6)


• Τι παράγει ο οδηγός πληκτρολογίου;
– Ο χρήστης πληκτρολογεί d s t a < < < a t e CR
• Ουσιαστικά διορθώνει το dsta σε date
– Είτε παραδίδονται όλοι οι χαρακτήρες
• Ανεπεξέργαστη (raw) ή μη κανονική κατάσταση
– Είτε παραδίδονται οι τελικές γραμμές
• Επεξεργασμένη (cooked) ή κανονική κατάσταση
– Η επιλογή γίνεται από το πρόγραμμα στο UNIX
101
Λογισμικό εισόδου (4 από 6)
• Προσωρινή αποθήκευση χαρακτήρων
– Κανονική: παραδίδονται ολόκληρες γραμμές
– Mη κανονική: αποθήκευση χαρακτήρων όσο χρειάζεται
– Είτε κάθε διεργασία έχει τη δική της προσωρινή μνήμη
– Είτε χρησιμοποιείται μια δεξαμενή προσωρινής μνήμης
• Αντήχηση (echo) χαρακτήρων στην οθόνη
– Διάκριση εξόδου με αντήχηση εισόδου
– Χειρισμός γραμμών μεγαλύτερων από την οθόνη
– Χειρισμός στηλοθετών (tabs)

102

Λογισμικό εισόδου (5 από 6)

• Το POSIX ορίζει μια σειρά ειδικών χαρακτήρων


– Επηρεάζουν την είσοδο στην κανονική κατάσταση
– Μπορούν να απεικονιστούν σε άλλους χαρακτήρες
– Το LNEXT είναι ο χαρακτήρα διαφυγής
– Τα INTR/QUIT διαφέρουν στην παραγωγή εικόνας μνήμης
103
Λογισμικό εισόδου (6 από 6)
• Ισοδυναμία συσκευών (device equivalence)
– Οι αλλαγές γραμμής στο UNIX αποθηκεύονται ως LF
– Στα Windows αποθηκεύονται ως CR+LF
– Το λογισμικό εισόδου κάνει τις μετατροπές
• Λογισμικό ποντικιού
– Το ποντίκι στέλνει μηνύματα σε αλλαγές κατάστασης
• Περιοδική αποστολή (π.χ. το πολύ 40 φορές ανά sec)
• Μήνυμα της μορφής (Δx, Δy, κατάσταση πλήκτρων)
• Η απόλυτη θέση δεν είναι γνωστή στο ποντίκι
• Ρυθμιζόμενες μονάδες απόστασης και χρόνος διπλού κλικ

104

Λογισμικό εξόδου (1 από 4)


• Λογισμικό εξόδου
– Παράθυρα κειμένου ή γραφικές διεπαφές
• Παράθυρα κειμένου
– Απλά τερματικά: γραμμές κειμένου
• Εμφανίζονται η μία μετά την άλλη
– Σύνθετα τερματικά: γράφουν οπουδήποτε
• Χρήση ακολουθιών διαφυγής (escape sequences)
• Διαφέρουν από τερματικό σε τερματικό

105
Λογισμικό εξόδου (2 από 4)

• Τυποποιημένες ακολουθίες διαφυγής


– Αρχικά εμφανίστηκαν στο Berkeley UNIX (βάση termcap)
– Μετατρέπονται από το λογισμικό για κάθε τερματικό
106

Λογισμικό εξόδου (3 από 4)


• Διασυνδέσεις γραφικών με το χρήστη (GUI)
– Επινοήθηκαν στο SRI, εξελίχθηκαν στο Xerox PARC
– WIMP: Windows, Icons, Menus, Pointing
• Έξοδος σε παράθυρο της οθόνης
• Η οθόνη μπορεί να έχει πολλά παράθυρα ταυτόχρονα
• Τα εικονίδια αντιπροσωπεύουν ενέργειες
• Επιλογή ενεργειών από μενού
• Συσκευή κατάδειξης για επιλογές (ποντίκι ή ιχνόσφαιρα)
• Χαρτογραφημένη (bitmap) οθόνης για έξοδο
– Το λογισμικό για τα GUI εξαρτάται από το σύστημα

107
Λογισμικό εξόδου (4 από 4)

• Παράθυρο: ορθογώνια περιοχή της οθόνης


– Συντεταγμένες άνω αριστερού άκρου και μέγεθος
– Περιλαμβάνει τίτλο, ράβδους κύλισης, μενού, εργαλεία
– Μπορεί να αλλάζει μέγεθος ή να κυλίεται

108

Σύστημα X Window (1 από 5)

• Σύστημα X Window
– Πελάτης X: ένα πρόγραμμα εφαρμογής
– Εξυπηρετητής X: λογισμικό που χειρίζεται το τερματικό
– Εκτέλεση στο ίδιο ή σε διαφορετικά μηχανήματα
– Επικοινωνία μέσω του πρωτοκόλλου X (πάνω από TCP)
109
Σύστημα X Window (2 από 5)
• Το X δεν είναι πλήρες σύστημα παραθύρων
– Χρειάζεται πολύ ακόμη λογισμικό!
– Xlib: βιβλιοθήκη βασικών διαδικασιών
– Intrinsics: εργαλειοθήκη αντικειμένων
• Widget: στοιχείο διασύνδεσης (π.χ. εικονίδιο)
– Motif: διασύνδεση με ενιαία εμφάνιση
• Εναλλακτικά Gnome (GTK+) και KDE (Qt)
– Window manager: διαχειριστής παραθύρων
110

Σύστημα X Window (3 από 5)


• Βασικά στοιχεία του Xlib
– Άνοιγμα σύνδεσης με διακομιστή X (TCP)
• Διαταγές σχεδίασης προς σταθμό εργασίας
• Αποκρίσεις από σταθμό σε ερωτήματα
• Ανακοινώσεις από πληκτρολόγιο ή ποντίκι
• Μηνύματα σφαλμάτων
– Προγραμματισμός οδηγούμενος από συμβάντα
• Το πρόγραμμα είναι ένας βρόχος χειρισμού συμβάντων

111
Σύστημα X Window (4 από 5)

• Πόρος (resource): δομή δεδομένων με πληροφορίες


– Δημιουργούνται στους σταθμούς εργασίας
– Γραμματοσειρές, παράθυρα, παλέτες χρωμάτων
– Θεματικά πλαίσια: συσχετίζουν ιδιότητες με παράθυρα
112

Σύστημα X Window (5 από 5)

• Παράδειγμα προγράμματος X
– Δέσμευση πόρων παραθύρου, ανακοίνωση σε διαχειριστή
– Δημιουργία θεματικού πλαισίου με ιδιότητες παραθύρου
– Επιλογή συμβάντων εισόδου και εμφάνιση παραθύρου
– Βρόχος αντιμετώπισης επόμενου γεγονότος
– Αποδέσμευση πόρων από το πρόγραμμα
113
Σύστημα MS Windows (1 από 6)

• Παράδειγμα προγράμματος Win32


– Χειριστήριο προγράμματος, γραμμή εντολών, παράθυρο
– Αντικείμενο κλάσης WNDCLASS για χειρισμό παραθύρου
• Εικονίδιο, κέρσορας, τίτλος, συνάρτηση χειρισμού μηνυμάτων
114

Σύστημα MS Windows (2 από 6)

• Παράδειγμα προγράμματος Win32


– Εγγραφή, δέσμευση, εμφάνιση, σχεδιασμός παραθύρου
– Βρόχος λήψης γεγονότων από το σύστημα
– Κάθε μήνυμα οδηγεί στην εκτέλεση κάποιας ενέργειας
115
Σύστημα MS Windows (3 από 6)
• Γεγονότα του Win32
– Δημιουργία και καταστροφή παραθύρου
– Σχεδιασμός παραθύρου όταν αλλάζει το τι φαίνεται
• Επικοινωνία Windows με προγράμματα
– Αποστολή μηνυμάτων για συμβάντα στο πρόγραμμα
– Απευθείας αποστολή μηνυμάτων στο παράθυρο
• Διασύνδεση συσκευής γραφικών (GDI)
– Κλήσεις σχεδίασης στην οθόνη
• Ευθείες και καμπύλες, σχεδίαση και γέμισμα περιοχών
• Διαχείριση ψηφιογραφικών (bitmap), εμφάνιση κειμένου

116

Σύστημα MS Windows (4 από 6)

• Διανυσματικά γραφικά
– Η σχεδίαση σχημάτων είναι διανυσματικά γραφικά
– Η τελική μορφή είναι ανεξάρτητη από τη συσκευή
– WMF: ένα αρχείο διανυσματικών εντολών
• Ψηφιογραφικά
– Κάθε διανυσματικό γραφικό μπορεί να γίνει bitmap
– Έτοιμες εικόνες και φωτογραφίες μπορεί να είναι bitmap
– BMP: ψηφιογραφικό «ανεξάρτητο» από συσκευή
117
Σύστημα MS Windows (5 από 6)

• Ψηφιογραφικά
– Χρήση διαδικασιών bitblt για αντιγραφή περιοχών bitmap
– Ορίζεται η περιοχή προέλευσης και το σημείο αντιγραφής
– Μπορεί να είναι σε διαφορετικά παράθυρα
– Μπορεί να έχουμε και συνδυασμό των δύο περιοχών
118

Σύστημα MS Windows (6 από 6)

• Γραμματοσειρές
– Παλιότερα αναπαράσταση με ψηφιογραφικά
– Διαφορετικό αρχείο για κάθε μέγεθος και ανάλυση
– Τώρα χρησιμοποιούνται περιγράμματα γραμματοσειρών
– Κάθε χαρακτήρας είναι σύνολο καμπυλών και υποδείξεων
119
Μικροπελάτες (1 από 2)
• Από τους κεντρικούς υπολογιστές περάσαμε στα PC
– Κάθε χρήστης έχει τον δικό του υπολογιστή
• Πλεονεκτήματα κεντρικών υπολογιστών
– Δεν χρειάζεται διάσπαρτη ενημέρωση λογισμικού
– Κεντρική διαχείριση και τήρηση αντιγράφων αρχείων
– Καλύτερη αξιοποίηση πόρων (δεν έχουμε αδρανή PC)
• Οι χρήστες θέλουν GUI αλλά όχι διαχείριση
– Μικροπελάτες (thin clients): τερματικά για GUI
– Παλιότερα υπήρχαν τα τερματικά X
– Το κόστος τους όμως δεν ήταν ανταγωνιστικό με τα PC

120

Μικροπελάτες (2 από 2)

• Σύστημα THINC
– Ο υπολογιστής είναι απλά μια οθόνη
– Η προετοιμασία των γραφικών γίνεται στον διακομιστή
– Το πρόγραμμα στον διακομιστή σχεδιάζει την οθόνη
– Το THINC δημιουργεί τις εντολές του πρωτοκόλλου
– Οι εντολές στέλνονται στον μικροπελάτη
– Ο μικροπελάτης τις σχεδιάζει στην οθόνη
121
Διαχείριση ισχύος

Ζητήματα υλικού (1 από 3)


• Η διαχείριση ισχύος δεν μας απασχολούσε πάντα
– Η κατανάλωση ρεύματος είναι πια πολύ μεγάλη
• Δισεκατομμύρια υπολογιστές σε όλο τον κόσμο
– Οι φορητοί πρέπει να εξοικονομούν ενέργεια
• Οι μπαταρίες εξελίσσονται πιο αργά από τους επεξεργαστές
• Προσεγγίσεις στην διαχείριση ισχύος
– Δημιουργία πιο αποδοτικών ηλεκτρονικών
– Απενεργοποίηση τμημάτων υπολογιστή από το ΛΣ
– Υποβάθμιση λειτουργίας υπολογιστή από το ΛΣ
123
Ζητήματα υλικού (2 από 3)
• Ζητήματα υλικού
– Υλικό που λειτουργεί σε διαφορετικές καταστάσεις
• Ενεργή, αναμονή, αδρανοποίηση, ανενεργή
– Μείωση κατανάλωσης->καθυστέρηση ενεργοποίησης
– Η κατάσταση μπορεί να επιλέγεται από το χρήστη
– Ποιες συσκευές πρέπει να ελέγχονται;
– Πόσο καταναλώνουν σε κάθε κατάσταση;
– Πόσο δύσκολο είναι να πάμε σε άλλη κατάσταση;

124

Ζητήματα υλικού (3 από 3)

• Κατανάλωση τμημάτων συστήματος


– Οθόνη, ΚΜΕ και δίσκος τα πιο σημαντικά
– Με τα χρόνια οι τιμές αλλάζουν (σημαντικά!)
– Παράδειγμα: οθόνες
• Οι TFT έχουν πολύ μικρότερη κατανάλωση από τις CRT
125
Ζητήματα ΛΣ (1 από 5)

• Πότε πρέπει να απενεργοποιηθεί μία συσκευή;


– Εξαρτάται σε μεγάλο βαθμό από τον χρήστη
• Η οθόνη
– Απενεργοποίηση φωτισμού (TFT) ή οθόνης (Plasma)
– Η οθόνη μπορεί να επανέλθει πολύ/αρκετά γρήγορα
– Ρύθμιση του διαστήματος από το χρήστη
– Απενεργοποίηση οθόνης σε ζώνες (ερευνητική πρόταση)
126

Ζητήματα ΛΣ (2 από 5)
• Ο σκληρός δίσκος
– Σταμάτημα περιστροφής μετά από αρκετή αδράνεια
– Η κρυφή μνήμη βοηθάει στην αποφυγή ενεργοποίησης
– Τα προγράμματα μπορούν να βοηθήσουν και αυτά
• Η ΚΜΕ
– Αδρανοποίηση επεξεργαστή για οικονομία ενέργειας
– Ενεργοποιείται ξανά όταν συμβεί κάποια διακοπή
– Πολλές φορές η ταχύτητα εξαρτάται από την τάση
• Κατανάλωση ανάλογη με το τετράγωνο της τάσης

127
Ζητήματα ΛΣ (3 από 5)

• Παράδειγμα: εμφάνιση πλαισίων στην οθόνη


– Σε πλήρη ταχύτητα το πλαίσιο εμφανίζεται σε T/2
– Συμφέρει να μειώσουμε την ταχύτητα στο μισό
• Δεν χάνουμε την προθεσμία των πλαισίων
• Η κατανάλωση όμως μειώνεται στο 1/4
• Συνολικά η κατανάλωση μειώνεται στο μισό
128

Ζητήματα ΛΣ (4 από 5)
• Η μνήμη
– Καθάρισμα και μετά απενεργοποίηση κρυφής μνήμης
– Θα έχουμε αστοχίες στην κρυφή μνήμη
– Εγγραφή κύριας μνήμης στο δίσκο και απενεργοποίηση
– Αρκετός χρόνος για επαναφορά της μνήμης από δίσκο
• Ασύρματη επικοινωνία
– Ενημερώνουμε τη βάση για την απενεργοποίηση
– Η βάση αποθηκεύει τα μηνύματα προς το σταθμό
– Ο σταθμός αποθηκεύει τα μηνύματα προς τη βάση
– Ενεργοποίηση περιοδική ή όταν γεμίσει η μνήμη

129
Ζητήματα ΛΣ (5 από 5)
• Θερμική διαχείριση
– Οι ανεμιστήρες καταναλώνουν αρκετή ενέργεια
– Ενεργοποιούνται όταν ανεβαίνει η θερμοκρασία
• Διαχείριση μπαταρίας
– Οι σύγχρονες μπαταρίες δίνουν πληροφορίες στο ΛΣ
– Το ΛΣ μπορεί να ρυθμίζει την κατάσταση ανάλογά
• Διασύνδεση οδηγών
– Προηγμένη διασύνδεση διευθέτησης και ισχύος (ACPI)
– Το ΛΣ ζητά από οδηγούς δυνατότητες και κατάσταση
– Μπορεί να τους ζητήσει να αλλάξουν κατάσταση

130

Ζητήματα εφαρμογών
• Έστω ότι τα προγράμματα ενημερώνονται από το ΛΣ
• Παράδειγμα: πρόγραμμα εμφάνισης βίντεο
– Αφαίρεση πληροφορίας χρώματος (ασπρόμαυρη εικόνα)
– Μείωση του αριθμού πλαισίων ανά δευτερόλεπτο
– Μείωση της ανάλυσης της οθόνης ή του μεγέθους της
• Παράδειγμα: πρόγραμμα αναγνώρισης φωνής
– Χρήση μικρότερου λεξιλογίου
– Χρήση απλούστερου μοντέλου φωνής
• Παράδειγμα: πρόγραμμα εμφάνισης χαρτών
– Παράλειψη των μικρότερων δρόμων από το χάρτη

131
Ενότητα # 6: Αδιέξοδα

Σκοποί ενότητας
• Κατανόηση της έννοιας των πόρων και του
προβλήματος των αδιεξόδων κατά τη χρήση
των πόρων
• Εξοικείωση με τις βασικές τεχνικές
διαχείρισης αδιεξόδων: αγνόηση, εντοπισμός
και ανάκαμψη, αποφυγή, αποτροπή
• Κατανόηση των πρακτικών προβλημάτων στη
διαχείριση αδιεξόδων

4
Περιεχόμενα ενότητας
• Πόροι
• Αδιέξοδα
• Αντιμετώπιση αδιεξόδων
• Εντοπισμός και ανάκαμψη
• Αποφυγή αδιεξόδων
• Αποτροπή αδιεξόδων
• Άλλα θέματα
5

Πόροι
Τύποι πόρων (1 από 3)
• Ορισμένοι πόροι του ΛΣ δεν είναι κοινόχρηστοι
– Πόροι υλικού: εκτυπωτής
– Πόροι λογισμικού: πίνακας διεργασιών
• Η δέσμευση πόρων μπορεί να δώσει αδιέξοδο
– Η Α δεσμεύει το σαρωτή και ζητά τον εκτυπωτή
– Η Β δεσμεύει τον εκτυπωτή και ζητά το σαρωτή
• Τα αδιέξοδα είναι πολύ πιο γενικό πρόβλημα
– Συμβαίνουν με πολλές διεργασίες (κυκλική αναμονή)
– Συμβαίνουν σε βάσεις (κλειδώματα εγγραφών)

Τύποι πόρων (2 από 3)


• Πόρος (resource)
– Γενικός όρος για οντότητες που δεσμεύουμε
– Πόροι υλικού (ταινίες) ή πληροφοριών (βάση)
– Μπορούμε να έχουμε πολλούς πόρους ενός τύπου
• Προεκτοπίσιμοι πόροι: αποσπώνται εύκολα
– Παράδειγμα: μνήμη
• Η διεργασία Α δεσμεύει όλη τη μνήμη και τον εκτυπωτή
• Η Β δεσμεύει όλη τη μνήμη αλλά όχι τον εκτυπωτή
• Δεν έχουμε αδιέξοδο: παίρνουμε τη μνήμη της Β

8
Τύποι πόρων (3 από 3)
• Μη προεκτοπίσιμοι πόροι: δεν αποσπώνται εύκολα
– Παράδειγμα: εγγραφέας CD
• Τα αδιέξοδα αφορούν μη προεκτοπίσιμους πόρους
• Ο τρόπος δέσμευσης εξαρτάται από το ΛΣ
– Δέσμευση πόρου με κλήση συστήματος request
– Δέσμευση πόρου με άνοιγμα αρχείου συσκευής
• Τι γίνεται όταν ένας πόρος δεν είναι διαθέσιμος;
– Είτε η διεργασία μπλοκάρεται και περιμένει
– Είτε επιστρέφει σφάλμα και ξαναπροσπαθεί

Απόκτηση πόρων (1 από 2)

• Δέσμευση επιπέδου χρήστη (π.χ. για βάσεις)


– Χρήση δυαδικού σηματοφόρο με αρχική τιμή 1 (α)
• Εναλλακτικά, μεταβλητή τύπου mutex
– Λειτουργεί και με δύο ή περισσότερους πόρους (β)
– Αποδέσμευση αντίστροφα από τη δέσμευση
10
Απόκτηση πόρων (2 από 2)

• Πρέπει όλοι να συμφωνούν στη σειρά (α)


– Αλλιώς, έχουμε κίνδυνο αδιεξόδου (β)
11

Αδιέξοδα
Ορισμός αδιεξόδου (1 από 2)
• Τυπικός ορισμός αδιεξόδου
– Έστω ένα σύνολο μπλοκαρισμένων διεργασιών
– Όλες οι διεργασίες περιμένουν κάποιο συμβάν
– Τα συμβάντα αυτά παράγονται μόνο εσωτερικά
– Αφού όλες περιμένουν κάποια άλλη του συνόλου…
– ..καμία δεν μπορεί να προχωρήσει!
– Με ορισμένες υποθέσεις
• Υποθέτουμε ένα νήμα ανά διεργασία
• Υποθέτουμε ότι δεν αφυπνίζονται από διακοπές

13

Ορισμός αδιεξόδου (2 από 2)


• Αδιέξοδο πόρων
– Σύνολο μπλοκαρισμένων διεργασιών
– Περιμένουν να απελευθερωθεί κάποιος πόρος
– Οι πόροι κατέχονται από αυτές τις διεργασίες
– Ανεξάρτητα από πλήθος και είδος πόρων
– Η πιο συνηθισμένη μορφή αδιεξόδου
• Όχι όμως και η μοναδική

14
Συνθήκες του Coffman (1 από 3)
• Συνθήκες του Coffman
– Πρέπει να ισχύουν όλες για αδιέξοδο πόρων
1. Αμοιβαίος αποκλεισμός
• Κάθε πόρος είτε είναι εκχωρημένος σε μία διεργασία είτε
είναι διαθέσιμος
• Δεν επιτρέπεται καταμερισμός των πόρων
2. Δέσμευση και αναμονή
• Μια διεργασία με εκχωρημένους πόρους μπορεί να ζητάει
κι άλλους
• Δεν ζητάει υποχρεωτικά όλους τους πόρους μαζί

15

Συνθήκες του Coffman (2 από 3)


3. Μη προεκτόπιση
• Δεν μπορούμε να αφαιρέσουμε εκχωρημένους πόρους
4. Κυκλική αναμονή
• Κυκλική αλυσίδα διεργασιών που περιμένουν η μία την
άλλη
– Κάθε συνθήκη εκφράζει μία πολιτική συστήματος
• Ένα σύστημα μπορεί να την εφαρμόζει ή όχι
– Αρκεί να μην ισχύει μία από αυτές
– Τότε είναι αδύνατον να έχουμε αδιέξοδα
16
Μοντελοποίηση αδιεξόδων (1 από 3)

• Μοντελοποίηση αδιεξόδων με γράφους


– Διεργασίες: κύκλοι, πόροι: τετράγωνα
– Τόξο από πόρο σε διεργασία: κατοχή πόρου
– Τόξο από διεργασία σε πόρο: αίτηση για πόρο
– Κύκλος στο γράφο σημαίνει αδιέξοδο
– Παράδειγμα
• Η διεργασία Δ κατέχει τον πόρο Σ και ζητάει τον πόρο Τ
• Η διεργασία Γ κατέχει τον πόρο Τ και ζητάει τον πόρο Σ
17

Μοντελοποίηση αδιεξόδων (2 από 3)

• Παράδειγμα χρήσης γράφου διεργασιών και πόρων


– Αν εκτελεστούν ακολουθιακά, δεν έχουμε πρόβλημα
– Αν εκτελεστούν εκ περιτροπής όμως, έχουμε πρόβλημα
18
Μοντελοποίηση αδιεξόδων (3 από 3)

• Παράδειγμα χρήσης γράφου διεργασιών και πόρων


– Το ΛΣ μπορεί να εκτελέσει εκ περιτροπής τις Α και Γ
– Η Β θα εκτελεστεί σε επόμενο στάδιο
– Ο γράφος μας δείχνει αν κινδυνεύουμε από αδιέξοδο
19

Αντιμετώπιση αδιεξόδων
Αγνόηση αδιεξόδων (1 από 2)
• Τέσσερις γενικές στρατηγικές αντιμετώπισης
– Αγνοούμε το πρόβλημα
• Ελπίζουμε ότι δεν θα συμβούν
– Εντοπίζουμε τα αδιέξοδα και ανακάμπτουμε
• Απαιτεί ακύρωση ενεργειών και σπατάλη πόρων
– Αποφεύγουμε τα αδιέξοδα
• Απαιτεί προσεκτική κατανομή των πόρων
– Αποτρέπουμε τα αδιέξοδα
• Άρση των συνθηκών του Coffman

21

Αγνόηση αδιεξόδων (2 από 2)


• Ο αλγόριθμος της στρουθοκαμήλου
– Απλά αγνοούμε το πρόβλημα των αδιεξόδων
– Θεωρητικά, απαράδεκτη προσέγγιση
– Ρεαλιστικά, έχουμε έναν συμβιβασμό:
• Πόσο συχνά συμβαίνουν αδιέξοδα;
• Πόσο κοστίζει στο σύστημα η αντιμετώπιση;
– Πολλά συστήματα θέλουν τακτική επανεκκίνηση
• Σφάλματα ΛΣ, αστοχίες υλικού, σφάλματα εφαρμογών
• Δεν έχει νόημα να ασχολούμαστε ειδικά με τα αδιέξοδα

22
Εντοπισμός και ανάκαμψη

Με έναν πόρο (1 από 3)

• Εντοπισμός αδιεξόδων με έναν πόρο ανά είδος


– Παράδειγμα: 7 διεργασίες (Α-Η) και 6 πόροι (Π-Φ)
• Η Α κατέχει τον Π και ζητάει τον Ρ, η Β ζητάει τον Σ
• Η Γ ζητάει τον Ρ, η Δ κατέχει τον Τ και ζητάει τους Ρ και Σ
• Η Ε κατέχει τον Σ και ζητάει τον Υ, η Ζ κατέχει τον Φ και ζητάει τον Ρ
• Η Η κατέχει τον Υ και ζητάει τον Τ
• Κατασκευάζουμε τον γράφο (α) και εντοπίζουμε τον κύκλο (β)
24
Με έναν πόρο (2 από 3)
• Για κάθε κόμβο K εκτελούμε τα επόμενα βήματα
από τον K
1. Αρχικά Λ = κενή λίστα και όλα τα τόξα είναι
ασημείωτα
2. Προσθέτουμε τον τρέχοντα κόμβο στο τέλος της Λ
3. Αν ο κόμβος εμφανίζεται δύο φορές στη Λ, η Λ
περιέχει κύκλο
4. Αν δεν υπάρχουν ασημείωτα τόξα από τον κόμβο
πάμε στο 7

25

Με έναν πόρο (3 από 3)


5. Επιλέγουμε και σημειώνουμε ένα ασημείωτο
εξερχόμενο τόξο
6. Χρησιμοποιούμε τον νέο κόμβο ως τρέχοντα και
πάμε στο 2
7. Αν ο τρέχων κόμβος είναι ο αρχικός, τέλος χωρίς
κύκλο
8. Αλλιώς, αφαιρούμε τον κόμβο από τη λίστα
9. Κάνουμε τον προηγούμενο της λίστας τρέχοντα
και πάμε στο 2

26
Με πολλούς πόρους (1 από 4)

• Εντοπισμός αδιεξόδων με πολλούς πόρους ανά είδος


– Το διάνυσμα υπαρχόντων Y δείχνει πόσοι υπάρχουν
– Το διάνυσμα διαθέσιμων Θ δείχνει πόσοι είναι διαθέσιμοι
– Το μητρώο κατανομής Τ δείχνει πού εκχωρήθηκαν
– Το μητρώο αιτήσεων Α δείχνει πόσοι μπορεί να ζητηθούν

27

Με πολλούς πόρους (2 από 4)


n

T
k 1
kl  l  Yl

• Βασική συνθήκη πόρων


– Κατανεμημένοι και διαθέσιμοι = υπάρχοντες
– Οι αιτήσεις δείχνουν πόσοι ακόμη χρειάζονται
• Υποθέσεις αλγόριθμου εντοπισμού αδιεξόδων
– Α<=Β αν όλα τα στοιχεία του A <= των αντίστοιχων του Β
– Κάθε διεργασία διατηρεί τους πόρους της μέχρι τέλους
– Αρχικά όλες ο διεργασίες είναι ασημείωτες
– Όσες παραμείνουν ασημείωτες βρίσκονται σε αδιέξοδο

28
Με πολλούς πόρους (3 από 4)
• Αλγόριθμος εντοπισμού αδιεξόδων
1. Ψάξε μία ασημείωτη διεργασία k με Ak<=Θ
2. Αν βρεθεί τέτοια, πρόσθεσε το Tk στο Θ
3. Μετά σημείωσε τη διεργασία και πήγαινε στο 1
4. Αν δεν υπάρχει, ο αλγόριθμος τερματίζεται
• Ψάχνουμε μια διεργασία που μπορεί να ολοκληρωθεί
– Θεωρούμε ότι δεσμεύει όλους τους πόρους που θέλει
– Μετά εκτελείται ως το τέλος και τους απελευθερώνει
– Άρα ψάχνουμε μια ασφαλή ακολουθία εκτέλεσης

29

Με πολλούς πόρους (4 από 4)

• Παράδειγμα αλγόριθμου εντοπισμού αδιεξόδων


– Πρώτα μπορεί να εκτελεστεί η διεργασία 3
• Υπόλοιπο πόρων (2,2,2,0)
– Μετά μπορεί να εκτελεστεί η διεργασία 2
• Υπόλοιπο πόρων (4,2,2,1)
– Τέλος μπορεί να εκτελεστεί η διεργασία 1
30
Ανάκαμψη από αδιέξοδα (1 από 4)
• Πότε ελέγχουμε για αδιέξοδα;
– Είτε όποτε ζητείται κάποιος πόρος
• Μεγάλη επιβάρυνση
– Είτε περιοδικά
• Κάθε k χτύπους του ρολογιού
– Είτε όταν ο φόρτος πέσει πολύ
• Μπορεί να οφείλεται σε αδιέξοδο

31

Ανάκαμψη από αδιέξοδα (2 από 4)


• Ανάκαμψη μέσω προεκτόπισης
– Παράδειγμα: αδιέξοδο που εμπλέκει τον εκτυπωτή
• Διακόπτουμε τη διεργασία που έχει τον εκτυπωτή
• Μαζεύουμε την έξοδό της και παραχωρούμε τον εκτυπωτή
• Όταν τελειώσει, ενεργοποιούμε ξανά την αρχική διεργασία
– Γενικά αυτό δεν είναι πάντα εφικτό
• Παράδειγμα: εγγραφέας CD που γράφει ένα CD-R

32
Ανάκαμψη από αδιέξοδα (3 από 4)
• Ανάκαμψη μέσω ανασκευής (rollback)
– Περιοδική δημιουργία σημείων ελέγχου
• Λέγονται και checkpoints
• Εγγραφή κατάστασης διεργασίας σε αρχείο
• Περιλαμβάνει εικόνα μνήμης και πόρους
– Εντοπίζουμε τη διεργασία που εμπλέκεται
– Εντοπίζουμε τον πόρο που έχει πρόβλημα
– Επανεκκίνηση από προηγούμενο σημείο ελέγχου
• Πρέπει να μην έχει δεσμευθεί ακόμα ο πόρος

33

Ανάκαμψη από αδιέξοδα (4 από 4)


• Ανάκαμψη μέσω εξάλειψης διεργασιών
– Σκοτώνουμε μία διεργασία του κύκλου
• Ελπίζουμε ότι ο κύκλος θα σπάσει
– Σκοτώνουμε μία διεργασία με κατάλληλους πόρους
• Αυτούς που ζητούνται στον κύκλο
– Ο στόχος είναι να σπάσει ο κύκλος αναμονής
– Προτιμάμε διεργασίες που τερματίζονται εύκολα
• Κατάλληλη: μεταγλώττιση
• Ακατάλληλη: βάση δεδομένων

34
Αποφυγή αδιεξόδων

Γιατί αποφυγή αδιεξόδων;


• Είναι ρεαλιστικός ο εντοπισμός αδιεξόδων;
– Απαιτεί γνώση που σπάνια έχουμε
• Πρέπει να γνωρίζουμε τις απαιτήσεις πόρων!
– Είναι πολύ συντηρητικός
• Υποθέτει ότι η διεργασία θα τους ζητήσει όλους μαζί
– Χρειαζόμαστε πιο ρεαλιστική προσέγγιση

36
Τροχιές πόρων (1 από 2)
• Τροχιές πόρων
– Έστω ότι έχουμε δύο διεργασίες και δύο πόρους
– Κάθε διεργασία χρειάζεται τους πόρους για
κάποιο διάστημα
– Άξονας: εξέλιξη μίας διεργασίας στο χρόνο
– Η τεθλασμένη δείχνει την εξέλιξη των διεργασιών
– Κίνηση μόνο προς τα πάνω ή τα δεξιά

37

Τροχιές πόρων (2 από 2)

• Δεν μπορούμε να μπούμε στις σκιασμένες περιοχές


– Αν το σύστημα μπει στην (Ε1,Ε5)-(Ε2,Ε6) έχουμε πρόβλημα
– Από το ε θα πρέπει να κινηθούμε δεξιά για αποφυγή
– Άρα στο ε δεν πρέπει να δώσουμε τον πόρο στην B

38
Ασφαλείς καταστάσεις (1 από 2)

• Ασφαλείς και ανασφαλείς καταστάσεις


– Ίδια κατάσταση με τον αλγόριθμο εντοπισμού
• Διανύσματα υπαρχόντων Y και διαθέσιμων Θ
• Μητρώα κατανομής Τ και αιτήσεων Α
– Μία κατάσταση είναι ασφαλής (safe) εάν
• Δεν είμαστε σε αδιέξοδο
• Υπάρχει κάποια σειρά ολοκλήρωσης των διεργασιών
– Παράδειγμα με έναν πόρο και τρεις διεργασίες
• Αρχικά εκτελείται η Β και μετά η Γ μέχρι τέλους
39

Ασφαλείς καταστάσεις (2 από 2)

• Παράδειγμα με έναν πόρο και τρεις διεργασίες


– Έστω ότι η Α ζητάει ένα ακόμη αντίγραφο του πόρου
– Αρχικά εκτελείται η Β μέχρι τέλους
– Μετά όμως δεν μπορεί να εκτελεστεί ούτε η Α ούτε η Γ
– Άρα η κατάσταση δεν είναι ασφαλής
• Προσοχή: ανασφαλής κατάσταση <> αδιέξοδο
– Οι διεργασίες δεν ζητάνε απαραίτητα όλους τους πόρους
– Απλά δεν είναι εγγυημένο ότι δεν θα έχουμε αδιέξοδο

40
Αλγόριθμος τραπεζίτη (1 από 3)

• Ο αλγόριθμος του τραπεζίτη για έναν πόρο


– Επέκταση του αλγορίθμου εντοπισμού (Dijkstra)
• Πριν δώσουμε πόρο, βλέπουμε αν πάμε σε ασφαλή κατάσταση
• Αν όχι, τότε δεν παραχωρούμε τον πόρο
– Παράδειγμα με έναν πόρο
• (α) αρχική κατάσταση με μέγιστες απαιτήσεις
• (β) ασφαλής κατάσταση (σειρά ολοκλήρωσης Γ, Δ, Β, Α)
• (γ) ανασφαλής κατάσταση (δεν υπάρχει σειρά ολοκλήρωσης)

41

Αλγόριθμος τραπεζίτη (2 από 3)


• Ο αλγόριθμος του τραπεζίτη για πολλούς πόρους
– Μητρώο εκχώρησης και πρόσθετων αιτήσεων
– Διανύσματα πόρων (Υ), εκχωρημένων (Κ), διαθεσίμων (Θ)
1. Βρες μία διεργασία R που μπορεί να ολοκληρωθεί
• Η γραμμή της R πρέπει να είναι μικρότερη ή ίση του Θ
• Θεωρούμε ότι δεσμεύονται οι πόροι και μετά τερματίζει η R
2. Απελευθέρωσε τους πόρους προσθέτοντάς τους στο Θ
3. Επανέλαβε τα βήματα 1 και 2
• Είτε τερματίζουν όλες οι διεργασίες
• Είτε η κατάσταση ήταν ανασφαλής

42
Αλγόριθμος τραπεζίτη (3 από 3)

• Ο αλγόριθμος του τραπεζίτη για πολλούς πόρους


– Στο παράδειγμα η κατάσταση είναι ασφαλής
• Σειρά τερματισμού Δ, Α, Ε, …
– Έστω ότι η Β ζητάει έναν εκτυπωτή
• Πάλι σειρά τερματισμού Δ, Α, Ε, …
– Έστω ότι η Ε ζητάει τον τελευταίο εκτυπωτή
• Η κατάσταση είναι ανασφαλής

43

Αποτροπή αδιεξόδων
Γιατί πρόληψη αδιεξόδων
• Πόσο ρεαλιστική είναι η αποφυγή αδιεξόδων;
– Λίγο καλύτερη από τον εντοπισμό
• Ελέγχουμε τους πόρους μόνο όταν ζητούνται
– Οι υποθέσεις όμως πάλι δεν είναι ρεαλιστικές
• Οι απαιτήσεις των διεργασιών δεν είναι γνωστές
– Νέες διεργασίες μπορεί να έρχονται στο σύστημα

45

Προσβολή των συνθηκών


• Προσβολή των συνθηκών του Coffman
– Φροντίζουμε τα αδιέξοδα να είναι αδύνατα
• Αρκεί να μην ισχύει ποτέ μία συνθήκη του Coffman
• Πρέπει να ισχύουν όλες για να έχουμε αδιέξοδα
– Πιο πρακτική λύση σε σχέση με την αποφυγή
– Απαιτεί όμως επιβολή περιορισμών στο σύστημα

46
Συνθήκη αμοιβαίου αποκλεισμού
• Προσβολή συνθήκης αμοιβαίου αποκλεισμού
– Ορισμένοι πόροι απαιτούν αμοιβαίο αποκλεισμό
• Παράδειγμα: ο εκτυπωτής
– Κρύβουμε τον εκτυπωτή πίσω από μια διεργασία
• Μόνο η διεργασία αυτή μπορεί να τυπώσει
• Οι άλλες διεργασίες της στέλνουν δεδομένα για εκτύπωση
• Η ίδια η διεργασία δεσμεύει μόνο τον εκτυπωτή
• Προσοχή όμως για να αποφύγουμε άλλα αδιέξοδα
• Παράδειγμα: αδιέξοδο στην ουρά εκτύπωσης!

47

Συνθήκη δέσμευσης και αναμονής


• Προσβολή συνθήκης δέσμευσης και αναμονής
– Γιατί να μην δεσμεύονται οι πόροι από την αρχή;
• Είτε η διεργασία θα λάβει όλους τους πόρους
• Είτε δεν θα είναι διαθέσιμοι και θα περιμένει
– Πώς μπορούμε να ξέρουμε τι θα χρειαστούμε;
• Το ίδιο πρόβλημα με την αποφυγή αδιεξόδων
– Κακή χρήση των πόρων
• Έστω ότι ξέρουμε τις μέγιστες απαιτήσεις της διεργασίας
• Δεν χρειάζονται όλοι οι πόροι ταυτόχρονα
• Δεσμεύουμε πόρους που δεν χρειαζόμαστε

48
Συνθήκη μη προεκτόπισης
• Προσβολή συνθήκης μη προεκτόπισης
– Γενικά μη εφικτό σε ορισμένες συσκευές
• Παράδειγμα: εκτυπωτής (χάνουμε χαρτί)
• Παράδειγμα: εγγραφέας CD (χάνουμε το CD)
– Xρήση διαχειριστών πόρων
• Διαχειριστής εκτυπώσεων
• Αποκρύπτει την ακολουθιακή χρήση των πόρων
– Ίδια προσέγγιση με τον αμοιβαίο αποκλεισμό

49

Συνθήκη κυκλικής αναμονής (1 από 2)

• Προσβολή συνθήκης κυκλικής αναμονής


– Αρίθμηση όλων των πόρων του συστήματος
– Οι διεργασίες ζητούν πόρους μόνο με αύξουσα σειρά
• Παράδειγμα: αν έχεις τον σαρωτή, μπορείς να ζητήσεις ταινία
– Ουσιαστικά απαγορεύουμε τους κύκλους
• Κάθε αλυσίδα πόρων περιλαμβάνει πόρους σε αύξουσα σειρά
• Άρα δεν μπορεί να υπάρξει κύκλος!
– Περιορίζουμε τον τρόπο λειτουργίας των διεργασιών
50
Συνθήκη κυκλικής αναμονής (2 από 2)

• Προσβολή συνθήκης κυκλικής αναμονής


– Παραλλαγή: δεν ζητάς «μικρότερους» πόρους
• Πρώτα απελευθέρωση «μεγαλύτερων» πόρων
• Ζητάμε τον σαρωτή όταν αφήσουμε την ταινία
• Πάλι οι αλυσίδες δεν μπορούν να γίνουν κύκλοι
– Ποια είναι η σωστή αρίθμηση των πόρων;
• Δεν είναι καθόλου προφανές!
• Κάθε πρόγραμμα προτιμάει διαφορετική σειρά
• Με πολλούς πόρους είναι δύσκολο να βρεθεί σειρά

51

Σύγκριση

• Τέσσερις συνθήκες του Coffman


– Μόνο δύο προσεγγίσεις λειτουργούν καλά
• Διαχειριστές αμοιβαία αποκλειόμενων πόρων
• Διατεταγμένη εκχώρηση πόρων
– Αλλιώς έχουμε σπατάλη πόρων
• Αφαίρεση ή πλήρης δέσμευση των πόρων

52
Άλλα θέματα

Κλείδωμα σε δύο φάσεις (1 από 2)


• Κλείδωμα σε δύο φάσεις
– Χρησιμοποιείται σε βάσεις δεδομένων
– Φάση 1: προσπαθούμε να κλειδώσουμε τις
εγγραφές
• Αν αποτύχουμε, ξεκλειδώνουμε τα πάντα και
ξαναπροσπαθούμε
– Φάση 2: ενημερώνουμε τις εγγραφές
• Μετά απελευθερώνουμε όλα τα κλειδώματα

54
Κλείδωμα σε δύο φάσεις (2 από 2)
– Δέσμευση όλων των πόρων από την αρχή
• Για κάθε ομάδα ενημερώσεων εγγραφών όμως
– Το κλείδωμα μπορεί να καθυστερήσει πάρα πολύ
– Πρέπει το πρόγραμμα να μπορεί να κάνει πίσω
• Απαιτείται κατάλληλη σχεδίαση του προγράμματος

55

Αδιέξοδα επικοινωνίας (1 από 3)


• Αδιέξοδα επικοινωνίας
– Η διεργασία Α στέλνει ένα μήνυμα στη Β
– Η διεργαία Α μπλοκάρει περιμένοντας απάντηση
– Αν χαθεί η απάντηση η Α θα μείνει
μπλοκαρισμένη
– Η Β θα περιμένει για ένα νέο μήνυμα από την Α
– Έχουμε αδιέξοδο σύμφωνα με τον συνήθη ορισμό
• Όλες οι διεργασίες περιμένουν άλλες της ομάδας

56
Αδιέξοδα επικοινωνίας (2 από 3)
– Η διαχείριση αδιεξόδων πόρων δεν λειτουργεί
– Υπάρχει μια άλλη λύση: τα χρονόμετρα
• Όταν στέλνεται ένα μήνυμα, ξεκινάει ένα χρονόμετρο
• Αν λήξει χωρίς απάντηση, επαναλαμβάνουμε
• Τι θα γίνει όμως αν το μήνυμα απλά άργησε;

57

Αδιέξοδα επικοινωνίας (3 από 3)

• Αδιέξοδο πόρων σε δίκτυα


– Οι υπολογιστές υπηρεσίες ανήκουν στους χρήστες
– Οι κόμβοι του δικτύου είναι δρομολογητές
– Οι δρομολογητές έχουν πεπερασμένο χώρο αποθήκευσης
– Στο παράδειγμα έχουν γεμίσει όλοι οι χώροι
– Κανένας δρομολογητής δεν μπορεί να στείλει μήνυμα!

58
Ενεργό αδιέξοδο (1 από 2)

• Ενεργό αδιέξοδο σε κρίσιμες περιοχές


– Έστω ότι χρησιμοποιούμε αναμονή με απασχόληση
• Για αποφυγή της επιβάρυνσης από το μπλοκάρισμα
– Οι δύο διεργασίες προσπαθούν να αποκτήσουν πόρους
• Με διαφορετική σειρά, οπότε αποκτούν από έναν πόρο
– Οι διεργασίες εκτελούνται χωρίς να κάνουν πρόοδο
– Η κατάσταση αυτή λέγεται ενεργό αδιέξοδο (livelock)
• Δεν έχουμε μπλοκάρισμα, αλλά δεν έχουμε και πρόοδο

59

Ενεργό αδιέξοδο (2 από 2)


• Πολλοί τρόποι να συμβεί ενεργό αδιέξοδο
• Συνήθως εξαντλείται κάποιος πεπερασμένος πόρος
– Παράδειγμα: πίνακας διεργασιών
• Ο πίνακας είναι γεμάτος και τα fork() αποτυγχάνουν
– Παράδειγμα: πίνακας αρχείων
• Δεν μπορούν να ανοίξουν αρχεία και τα open() αποτυγχάνουν
– Τα περισσότερα συστήματα αγνοούν το πρόβλημα
• Είναι απίθανο να συμβεί με λογικό φόρτο
• Αρκεί να έχουμε διαστασιολογήσει σωστά τους πίνακες
– Οι διεργασίες μπορούν να είναι προετοιμασμένες
• Αν δεν δεσμευτεί ο πόρος n φορές, αποτυχία και τερματισμός

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)
• Συνήθως εναντίον ομάδων και όχι χρηστών

• Αποκλεισμός εισβολέων (intruder exclusion)


– Αποφυγή κατάληψης του συστήματος
• Προσπάθειες μετατροπής του σε ζόμπι
• Παράδειγμα: συμμετοχή σε spam botnet

10
Δύσκολα θέματα
• Προσωπικό απόρρητο (privacy)
– Τι πρόσβαση έχει ο Χ στα δεδομένα μου;
– Όπου Χ = κράτος/εργοδότης/οικογένεια
• Εγείρονται μη τεχνικά ζητήματα
– Νομικά
– Πολιτικά
– Ηθικά

11

Εισβολείς (1 από 2)
• Εισβολείς (intruders) ή εχθροί (adversaries)
– Παθητικοί (passive): διαβάζουν δεδομένα
– Ενεργητικοί (active): τροποποιούν δεδομένα
• Απλοί χρήστες χωρίς τεχνικές γνώσεις
– Διαβάζουν απροστάτευτα δεδομένα
– Κίνητρό τους η περιέργεια
• Εσωτερικοί χρήστες με τεχνικές γνώσεις
– Διαχειριστές, φοιτητές, προγραμματιστές
– Αντιμετωπίζουν την προστασία ως πρόκληση

12
Εισβολείς (2 από 2)
• Επαγγελματίες με στόχο το κέρδος
– Εκμεταλλεύονται κενά του συστήματος
• Εμπορικοί ή στρατιωτικοί κατάσκοποι
– Χρηματοδότηση και προχωρημένα μέσα
• Ιοί και παρόμοιο λογισμικό
– Προσπαθούν να κάνουν ζημιές
– Δεν έχουν συγκεκριμένο στόχο
– Μπορεί να έρχονται από οπουδήποτε

13

Απώλεια δεδομένων
• Απώλεια δεδομένων από ατύχημα
– Δεν υπάρχουν μόνο κακόβουλοι εισβολείς
– Θεομηνίες: πλημμύρες, σεισμοί, φωτιές
– Σφάλματα υλικού/λογισμικού: αλλοίωση
– Ανθρώπινα λάθη: διαγραφή αρχείων κατά λάθος
– Αντιμετωπίζονται με αντίγραφα ασφαλείας
• Κατά προτίμηση μακριά από το σύστημα
– Πιο σοβαρό πρόβλημα από τις παραβιάσεις!

14
Αρχές κρυπτογραφίας

Βασικές αρχές (1 από 3)


• Κρυπτογραφία: απόκρυψη δεδομένων
– Ξεκινάμε με το απλό κείμενο (P, plaintext)
– Εφαρμόζουμε έναν μετασχηματισμό
– Παράγουμε το κρυπτοκείμενο (C, ciphertext)
– Για τους τρίτους είναι ακατανόητο
• Αλγόριθμοι κρυπτογράφησης: P->C
• Αλγόριθμοι αποκρυπτογράφησης: C->P

16
Βασικές αρχές (2 από 3)
• Αρχή του Kerchoff (Kerchoff’s principle)
– Οι αλγόριθμοι κρυπτογραφίας είναι δημόσιοι
– Τα κλειδιά (keys) τους είναι μυστικά
– Τελικά οι αλγόριθμοι θα μαθευτούν
– Τα κλειδιά όμως αλλάζουν τακτικά
• Εναλλακτικά: ασφάλεια μέσω κάλυψης
– Κρατάμε μυστικά τα πάντα
– Ρεαλιστικά, κάποτε θα διαρρεύσουν

17

Βασικές αρχές (3 από 3)

• Δομή συστημάτων κρυπτογραφίας


– Έστω P το απλό κείμενο και C το κρυπτοκείμενο
– Έστω Ε/D οι αλγόριθμοι (απο)κρυπτογράφησης
– Έστω KE/KD τα κλειδιά (απο)κρυπτογράφησης
– C=E(P,KE) και P=D(C,KD)

18
Μυστικού κλειδιού (1 από 2)
• Κρυπτογραφία μυστικού κλειδιού
• Μονοαλφαβητική υποκατάσταση
– Κάθε γράμμα αντικαθίσταται (1 προς 1)
– Απλό κείμενο:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
– Κρυπτοκείμενο:
QWERTYUIOPASDFGHJKLZXCVBNM
– Το κλειδί είναι η συμβολοσειρά αντικατάστασης
– Παρόμοια κρυπτογράφηση / αποκρυπτογράφηση

19

Μυστικού κλειδιού (2 από 2)


• Μονοαλφαβητική υποκατάσταση
– Απλές επιθέσεις για αποκρυπτογράφηση
• Αξιοποίηση στατιστικών χαρακτήρων
• Προσθήκη στατιστικών διγραμμάτων

• Κρυπτογραφία συμμετρικού κλειδιού


– Τα δύο κλειδιά είναι τα ίδια
• Ή το ένα παράγεται εύκολα από το άλλο
– Σύνηθες στην κρυπτογραφία μυστικού κλειδιού
20
Δημόσιου κλειδιού (1 από 2)
• Κρυπτογραφία δημόσιου κλειδιού
• Τα μυστικά κλειδιά έχουν πρόβλημα διανομής
– Το κλειδί δεν πρέπει ναι διαρρεύσει
• Αντιμετώπιση με ζεύγη κλειδιών
– Το ιδιωτικό διατηρείται μυστικό στον παραλήπτη
– Το δημόσιο διανέμεται ανοιχτά σε όλους
– Το δημόσιο χρησιμοποιείται για κρυπτογράφηση
– Το ιδιωτικό χρησιμοποιείται για αποκρυπτογράφηση
21

Δημόσιου κλειδιού (2 από 2)


• Κρυπτογραφία δημόσιου κλειδιού
– Τα κλειδιά δημιουργούνται μαζί
– Η συσχέτισή τους είναι εξαιρετικά δύσκολη
• Δεν βγαίνει εύκολα το ιδιωτικό από το δημόσιο
– Βασίζεται σε δύσκολα αντιστρέψιμες πράξεις
• 314159265358979 στο τετράγωνο
• Ρίζα 3912571506419387090594828508241
• Αντίστροφες αλλά όχι αντιστρέψιμες πράξεις

22
Μονόδρομες συναρτήσεις
• Μία συνάρτηση y=f(x) είναι μονόδρομη όταν
– Ο υπολογισμός του y από το x είναι απλός
– Ο υπολογισμός του x από το y δεν είναι
• Αντίθετα, είναι εξαιρετικά δύσκολος
• Κρυπτογραφική συνάρτηση κατακερματισμού
– Μονόδρομη συνάρτηση με πρόσθετες ιδιότητες
– Δεν είναι συνάρτηση κρυπτογραφησης
• Δεν υπάρχει συνάρτηση αποκρυπτογράφησης

23

Ψηφιακές υπογραφές (1 από 3)


• Σύνδεση αρχείου με ένα κλειδί
– Συνήθως, το ιδιωτικό κλειδί του δημιουργού
– Περνάμε το αρχείο από μονόδρομη συνάρτηση
• Κρυπτογραφική συνάρτηση κατακερματισμού
– Παράγεται συμβολοσειρά σταθερού μήκους
– Κρυπτογράφησή της με το ιδιωτικό κλειδί
• Το οποίο γνωρίζει μόνο ο δημιουργός
– Το αποτέλεσμα είναι η ψηφιακή υπογραφή
24
Ψηφιακές υπογραφές (2 από 3)

• Χρήση ψηφιακής υπογραφής


– Η υπογραφή επισυνάπτεται στο αρχείο
– Έστω ότι παραλαμβάνεται αρχείο και υπογραφή
• Με το δημόσιο κλειδί αποκρυπτογραφείται η υπογραφή
• Ελέγχεται αν ταιριάζει η τιμή κατακερματισμού
– Προσοχή: υποθέτει συμμετρία στις συναρτήσεις
• E(D(x))=x πέραν του D(E(x))=x

25

Ψηφιακές υπογραφές (3 από 3)


• Πιστοποιητικά (certificates)
– Πώς γνωρίζουμε το δημόσιο κλειδί κάποιου;
• Πώς ξέρουμε ότι δεν έχει αλλαχτεί στη διαδρομή;
– Μπορεί κάποιος έμπιστος να το υπογράψει ψηφιακά
• Αρκεί να γνωρίζουμε το κλειδί του έμπιστου
• Αρχή πιστοποίησης (certification authority)
– Οργανισμός που υπογράφει κλειδιά άλλων
– Το δημόσιο κλειδί του περιέχεται παντού
– Εναλλακτικά, υποδομή δημόσιου κλειδιού (PKI)
26
Μηχανισμοί προστασίας

Τομείς προστασίας (1 από 5)


• Το ΛΣ επιβλέπει πολλά αντικείμενα
• Σε κάθε αντικείμενο εφαρμόζονται μέθοδοι
• Πώς μπορεί να οριστεί ποιος μπορεί να κάνει τι;
• Τομέας: σύνολο (αντικείμενο, δικαιώματα)
• Δικαίωμα: άδεια εκτέλεσης λειτουργίας
– Ο τομέας αναφέρεται σε χρήστη ή ομάδα χρηστών
• Αρχή ελάχιστης εξουσίας
– Ο τομέας διαθέτει τα ελάχιστα δυνατά δικαιώματα

28
Τομείς προστασίας (2 από 5)

• Παράδειγμα με τρεις τομείς (1, 2 και 3)


– Τα δικαιώματα είναι Read, Write και Execute
• Μία διεργασία εκτελείται πάντα σε κάποιον τομέα
– Συγκεκριμένα δικαιώματα σε συγκεκριμένα αντικείμενα
• Η διεργασία μπορεί να αλλάζει τομείς
– Το πώς γίνεται αυτό εξαρτάται από το σύστημα

29

Τομείς προστασίας (3 από 5)


• Παράδειγμα: UNIX
– Ο τομέας μίας διεργασίας ορίζεται από τα UID/GID
– Το κέλυφος παίρνει τα UID/GID του χρήστη
• Περιέχονται στο αρχείο /etc/passwd
– Κάθε αντικείμενο αντιπροσωπεύεται από ένα αρχείο
• Κάθε αρχείο έχει δικαιώματα για UID, GID και όλους
– Δύο διεργασίες με ίδια UID/GID είναι στον ίδιο τομέα
– Οι κλήσεις συστήματος αλλάζουν τομέα
• Η διεργασία εκτελείται στο τμήμα πυρήνα
– Η εκτέλεση προγράμματος SETUID/SETGID αλλάζει τομέα

30
Τομείς προστασίας (4 από 5)

• Πώς παρακολουθεί το σύστημα τα αντικείμενα;


• Μητρώο προστασίας (protection matrix)
– Οι γραμμές αντιστοιχούν σε τομείς
– Οι στήλες αντιστοιχούν σε αντικείμενα
– Σε κάθε κελί περιέχονται τα δικαιώματα

31

Τομείς προστασίας (5 από 5)

• Μοντελοποίηση της εναλλαγής τομέων


– Στις στήλες έχουμε και τομείς ως αντικείμενα
– Το δικαίωμα enter σημαίνει αλλαγή τομέα
– Στην πράξη δεν αποθηκεύουμε το μητρώο
• Είναι πολύ μεγάλο αλλά πολύ αραιό
• Αποθήκευση ανά γραμμές ή ανά στήλες

32
Λίστες ελέγχου πρόσβασης (1 από 4)

• Λίστα δικαιωμάτων που αντιστοιχούν σε αντικείμενο


– Ουσιαστικά, μια στήλη του μητρώου προστασίας
– Κάθε στοιχείο δίνει τομέα και δικαιώματα
• Γενικά: καταστροφή ή αντιγραφή αντικειμένου
• Ειδικά: προσάρτηση μηνύματος, εκτέλεση αρχείου

33

Λίστες ελέγχου πρόσβασης (2 από 4)

• Σε τι αντιστοιχούν οι τομείς;
• Τουλάχιστον σε μεμονωμένους χρήστες
– Λέγονται και υποκείμενα (subjects)
– Εναλλακτικά, κύριοι (principals)
• Συνήθως έχουμε και ομάδες (groups) χρηστών
– Ένας χρήστης μπορεί να ανήκει σε διάφορες
ομάδες

34
Λίστες ελέγχου πρόσβασης (3 από 4)
• Δικαιώματα ανά UID/GID
– Ο συνδυασμός UID/GID είναι ένας ρόλος (role)
• Παράδειγμα: η georgia είναι και sysadm και pigfan
– Τα δικαιώματα εξαρτώνται από τρέχουσα ομάδα
• Δικαιώματα ανεξαρτήτως ομάδας
– Παράδειγμα: tana,*: RW

35

Λίστες ελέγχου πρόσβασης (4 από 4)


• Επιλεκτικός αποκλεισμός ή αρνητικά προνόμια
– Παράδειγμα: virgil,*:none; *,*:RW
– Ισχύει η πρώτη καταχώριση της ACL που ταιριάζει
• Τα προνόμια μπορεί να δίνονται ανά GID ή UID
– UNIX: δικαιώματα για UID, για GID, για όλους
• Πότε ελέγχεται η ACL;
– Συνήθως κατά το «άνοιγμα» του αντικειμένου
– Ο αποκλεισμός ισχύει αφού «κλείσει» το αντικείμενο
36
Δυνατότητες (1 από 3)

• Σε κάθε διεργασία αντιστοιχεί λίστα δικαιωμάτων


– Ουσιαστικά, μία γραμμή του μητρώου προστασίας
– Κάθε στοιχείο δίνει αντικείμενο και δικαιώματα
• Οι λίστες δυνατοτήτων είναι και αυτές αντικείμενα

37

Δυνατότητες (2 από 3)
• Προστασία δυνατοτήτων
– Οι δυνατότητες σχετίζονται με μια διεργασία
– Η διεργασία δεν πρέπει να τις αλλάζει!
• Αρχιτεκτονικές με ετικέτες (tagged architectures)
– Κάθε λέξη της μνήμης έχει μία ετικέτα (tag)
– Αν είναι 1, η λέξη αλλάζει μόνο από το ΛΣ
• Διατήρηση δυνατοτήτων μέσα στο λειτουργικό
– Οι διεργασίες αναφέρονται σε θέσεις στη λίστα
38
Δυνατότητες (3 από 3)
• Κρυπτογράφηση των δυνατοτήτων
– Στη δημιουργία παράγεται τυχαίο πεδίο ελέγχου
• Ο δημιουργός κρατάει τοπικά το πεδίο ελέγχου
– Ο ιδιοκτήτης λαμβάνει ένα ειδικό αντικείμενο
• Περιέχει κρυπτογραφική σύνοψη των στοιχείων
– Ο χρήστης στέλνει το αντικείμενο για χρήση
• Ο διακομιστής ελέγχει αν τα δικαιώματα είναι ίδια
• Αν όχι, τότε η κρυπτογραφική σύνοψη δεν ταιριάζει

39

Δυνατότητες (4 από 4)
• Γενικά δικαιώματα για όλα τα αντικείμενα
– Αντιγραφή ή διαγραφή δυνατότητας / αντικειμένου
• Ανάκληση δικαιωμάτων πρόσβασης
– Χρήση έμμεσων αντικειμένων για τις διεργασίες
– Τα έμμεσα δείχνουν στα πραγματικά
– Η διαγραφή του έμμεσου ανακαλεί τα πάντα
• Δυνατότητες ή λίστες ελέγχου πρόσβασης;
– Οι δυνατότητες επιτρέπουν πιο γρήγορο έλεγχο
– Οι λίστες ελέγχου επιτρέπουν επιλεκτική ανάκληση

40
Έμπιστα συστήματα
• Γιατί τα σύγχρονα ΛΣ έχουν προβλήματα ασφάλειας;
– Ο τρόπος κατασκευής ασφαλών ΛΣ είναι γνωστός
• Συμβατότητα: ένα νέο ΛΣ θέλει νέες εφαρμογές
– Δεν θα εκτελεί τα υπάρχοντα προγράμματα
• Πολυπλοκότητα: ένα ασφαλές ΛΣ θα είναι απλό
– Δεν θα δέχεται ενεργό περιεχόμενο στο e-mail
– Δεν θα δέχεται ενεργό περιεχόμενο στις ιστοσελίδες
– Ζητάνε πραγματικά οι χρήστες αυτές τις δυνατότητες;
• Ή μήπως προστίθενται από τις εταιρείες για λόγους μαρκετινγκ;

41

Έμπιστη υπολογιστική βάση

• Ορισμένοι οργανισμοί χρειάζονται ασφαλή συστήματα


• Έμπιστη υπολογιστική βάση (trusted computing base)
– Μικρό τμήμα υλικού και λογισμικού του συστήματος
• Υλικό και συσκευές που επηρεάζουν την ασφάλεια
• Πυρήνας και προγράμματα με προνόμια υπερχρήστη
• Ο ελεγκτής αναφορών (reference monitor) ελέγχει τις κλήσεις
42
Τυπικά μοντέλα (1 από 3)
• Τα μητρώα προστασίας αλλάζουν δυναμικά
– Προσθαφαίρεση αντικειμένων, χρηστών, δικαιωμάτων
• Μοντελοποίηση προστασίας με 6 λειτουργίες
– Create object, delete object
– Create domain, delete domain
– Create right, delete right
• Οι λειτουργίες συνδυάζονται σε διαταγές προστασίας
– Οι εφαρμογές εκτελούν διαταγές, όχι λειτουργίες
– Παράδειγμα: δημιουργία νέου αρχείου
• Συνδυάζει create object και create right

43

Τυπικά μοντέλα (2 από 3)

• Το μητρώο λέει τι μπορεί να κάνει μία διεργασία


– Αντιστοιχεί αυτό στην πολιτική του συστήματος;
– Μήπως η διεργασία τροποποίησε το μητρώο;
• Παράδειγμα: αρχικό και πειραγμένο μητρώο
– Ο Robert πρόσθεσε Ανάγνωση στο Mailbox7
44
Τυπικά μοντέλα (3 από 3)
• Έστω ένα ΛΣ με κάποιες διαταγές προστασίας
• Έστω μια εξουσιοδοτημένη κατάσταση μητρώου
• Μπορούμε να αποδείξουμε ότι δεν θα πάμε σε
μη εξουσιοδοτημένη κατάσταση;
– Ρωτάμε αν οι διαταγές προστασίας είναι επαρκείς
– Αν όχι, το σύστημα δεν είναι θεωρητικά ασφαλές
– Το γενικό πρόβλημα είναι απροσδιόριστο
– Μπορεί να βρεθεί απόδειξη για συγκεκριμένο ΛΣ

45

Πολυεπίπεδη ασφάλεια (1 από 3)


• Μοντέλα ασφάλειας
– Επιλεκτικός έλεγχος πρόσβασης (discretionary)
• O χρήστης αποφασίζει ποιος θα βλέπει τι
• Συνηθισμένος στα συστήματα γενικής χρήσης
– Υποχρεωτικός έλεγχος πρόσβασης (mandatory)
• Επιβολή κανόνων πρόσβασης από το σύστημα
• Συνηθισμένος σε ευαίσθητα συστήματα

46
Πολυεπίπεδη ασφάλεια (2 από 4)
• Μοντέλο Bell-La Padula
– Σχεδιάστηκε για στρατιωτικά συστήματα
– Διατεταγμένα επίπεδα διεργασιών / αντικειμένων
– Απλή ιδιότητα ασφάλειας
• Μία διεργασία στο επίπεδο k μπορεί να διαβάσει <=k
– Ιδιότητα *
• Μια διεργασία στο επίπεδο k μπορεί να γράψει >=k
– Οι διεργασίες διαβάζουν κάτω & γράφουν πάνω
• Μπορώ να στείλω στον ανώτερο
• Μπορώ να λάβω από τον κατώτερο

47

Πολυεπίπεδη ασφάλεια (3 από 4)

• Παράδειγμα με 4 επίπεδα ασφάλειας


– Τα συμπαγή βέλη (ανάγνωση) δεν πάνε κάτω
• Διαβάζουμε χαμηλότερα αντικείμενα
– Τα διακεκομμένα βέλη (εγγραφή) δεν πάνε κάτω
• Γράφουμε υψηλότερα αντικείμενα

48
Πολυεπίπεδη ασφάλεια (4 από 4)
• Μοντέλο Biba
– Το Bell-La Padula έχει σχεδιαστεί για να κρατάει μυστικά
• Ενημέρωση από κάτω και αναφορές προς τα πάνω
– Το Biba εγγυάται την ακεραιότητα των δεδομένων
– Απλή ιδιότητα ακεραιότητας
• Μία διεργασία στο επίπεδο k μπορεί να γράψει <=k
– Ιδιότητα * ακεραιότητας
• Μια διεργασία στο επίπεδο k μπορεί να διαβάσει >=k
– Εφαρμογή σε εταιρικό περιβάλλον
• Ενημέρωση από πάνω και οδηγίες προς τα κάτω

49

Συγκεκαλυμμένα κανάλια (1 από 5)

• Το πρόβλημα του περιορισμού (containment problem)


– Ο πελάτης ζητάει από τον διακομιστή κάποια εργασία
– Για να γίνει η εργασία του αποκαλύπτει πληροφορίες
– Ο διακομιστής θέλει να τις αποκαλύψει στον συνεργάτη
– Το μητρώο προστασίας απαγορεύει την επικοινωνία
– Δυνατότητα επικοινωνίας με συγκεκαλυμμένα κανάλια

50
Συγκεκαλυμμένα κανάλια (2 από 5)

• Ο διακομιστής σε κάθε διάστημα είναι σε μία κατάσταση


– Η μία κατάσταση σημαίνει 1 και η άλλη 0
• Παράδειγμα: υπολογίζει πολύ ή υπολογίζει λίγο
– Ο συνεργάτης στέλνει μηνύματα, βλέπει το χρόνο απόκρισης
• Παράδειγμα: κλειδώνει ή ξεκλειδώνει ένα αρχείο
– Ο συνεργάτης ελέγχει αν το αρχείο είναι κλειδωμένο

51

Συγκεκαλυμμένα κανάλια (3 από 5)


• Τα κανάλια αυτά είναι γενικά θορυβώδη
– Χρήση κώδικα διόρθωσης σφαλμάτων
– Χρήση επιβεβαιώσεων (αντίστροφη ροή)
• Στεγανογραφία (steganography)
– Κρύψιμο εμπιστευτικών σε μη εμπιστευτικές
• Είναι μία μορφή συγκεκαλυμμένου καναλιού
• Τροποποίηση πληροφοριών με μη εμφανή τρόπο

52
Συγκεκαλυμμένα κανάλια (4 από 5)
• Παράδειγμα: εικόνα με 24 bit χρώματος
– Κάθε εικονοστοιχείο έχει 3 κανάλια χρώματος
– Κάθε κανάλι έχει 8 bit
– Χρησιμοποιούμε το λιγότερο σημαντικό bit
• Αλλάζει ανάλογα με την πληροφορία
– Ανεπαίσθητες αλλαγές στο χρώμα

53

Συγκεκαλυμμένα κανάλια (5 από 5)

• Παράδειγμα με πραγματική εικόνα


– Η αριστερή εικόνα είναι η αρχική
– Η δεξιά περιέχει και 5 έργα του Σαίξπηρ
• Χρήση για εισαγωγή υδατογραφημάτων (watermarks)
– Απόκρυψη πληροφοριών για τον ιδιοκτήτη της εικόνας
– Αν χρησιμοποιηθεί η εικόνα, δείχνουμε το υδατογράφημα

54
Πιστοποίηση ταυτότητας

Κωδικοί πρόσβασης (1 από 11)


• Πώς ξέρουμε ποιος είναι ο χρήστης;
– Δεν πρέπει να μπορεί να παραστήσει άλλον
– Χρειάζεται μέθοδος πιστοποίησης ταυτότητας
– Τρεις γενικές μέθοδοι
• Κάτι που γνωρίζει ο χρήστης
• Κάτι που κατέχει ο χρήστης
• Κάτι που είναι ο χρήστης
– Σε ορισμένα ΛΣ έχουμε συνδυασμό μεθόδων
56
Κωδικοί πρόσβασης (2 από 11)
• Χάκερ ή κράκερ;
– Χάκερ είναι ο επιδέξιος προγραμματιστής
• Μπορεί να λύσει δύσκολα προβλήματα
– Κράκερ είναι αυτός που διεισδύει σε συστήματα
• Σπάει την ασφάλεια των συστημάτων
– Λέμε και white-hat ή black-hat hacker
• White-hat είναι ο (μάλλον) καλοπροαίρετος
• Black-hat είναι ο (σίγουρα) κακοπροαίρετος

57

Κωδικοί πρόσβασης (3 από 11)

• Πιστοποίηση με χρήση κωδικών πρόσβασης


– Πληκτρολόγηση ονόματος και κωδικού πρόσβασης
• Το σύστημα διατηρεί μια λίστα με τέτοια ζεύγη
– Οι κωδικοί πρόσβασης δεν πρέπει να εμφανίζονται
• Αλλιώς μπορούν να τους μάθουν όσοι βρίσκονται κοντά
– Το σύστημα πρέπει να δίνει τις ελάχιστες πληροφορίες
• Στο (β) ο κράκερ μαθαίνει ότι το όνομα σύνδεσης είναι λάθος
• Στο (γ) μαθαίνει μόνο ότι ο συνδυασμός δεν είναι σωστός

58
Κωδικοί πρόσβασης (4 από 11)
• Πώς διεισδύουν οι κράκερ;
– Τα ονόματα χρήστη είναι συνήθως προφανή
• Παράδειγμα: όνομα.επώνυμο
– Αλλά και οι (απλοί) κωδικοί δεν είναι δύσκολοι
• Οι χρήστες συνήθως χρησιμοποιούν κοινές λέξεις
• Με ένα μικρό λεξικό ανοίγουν πολλοί λογαριασμοί
– Το πρόβλημα είναι πιο μεγάλο λόγω δικτύων
• Ένας χρήστης μπορεί να έχει πολλούς λογαριασμούς
• Συνήθως χρησιμοποιεί τον ίδιο κωδικό παντού

59

Κωδικοί πρόσβασης (5 από 11)


• Πώς διεισδύουν οι κράκερ;
– Τηλεφωνητής πολέμου (war dialer)
• Σύστημα που καλεί τυχαία τηλέφωνα μέσω μόντεμ
• Πολλοί υπολογιστές δέχονται κλήσεις χωρίς έλεγχο!
– Παραλλαγή της μεθόδου για το Διαδίκτυο
• Δοκιμή τυχαίων διευθύνσεων IP με ping και telnet
– Αντίμετρα από τα συστήματα
• Απενεργοποίηση του ping
• Αποσύνδεση του telnet μετά από μερικές αποτυχίες
– Η επίθεση θέλει περισσότερο χρόνο
– Οι υπολογιστές όμως έχουν μεγάλη υπομονή!

60
Κωδικοί πρόσβασης (6 από 11)
• Πώς διεισδύουν οι κράκερ;
– Σάρωση θυρών (port scan)
• Δοκιμή σύνδεσης με διάφορες θύρες UDP και TCP
• Αποκάλυψη υπηρεσιών που τρέχουν σε ένα σύστημα
• Στη συνέχεια επίθεση στις υπηρεσίες αυτές
– Χρήση προεπιλεγμένων κωδικών
• Σε πολλά ΛΣ υπάρχουν λογαριασμοί ειδικού σκοπού
• Οι κωδικοί είναι προεπιλεγμένοι από τον κατασκευαστή
• Πολλοί διαχειριστές δεν τους αλλάζουν ποτέ

61

Κωδικοί πρόσβασης (7 από 11)

• Παράδειγμα από τον Clifford Stoll (The cuckoo’s egg)


– Ο κράκερ δοκιμάζει τους τυπικούς λογαριασμούς
• Πρόγραμμα εξέτασης πακέτων (packet sniffer)
– Εγκαθίσταται από τον κράκερ στο σπασμένο σύστημα
– Παρακολουθεί το δίκτυο και καταγράφει τους κωδικούς

62
Κωδικοί πρόσβασης (8 από 11)
• Τα σεναριόπαιδα (script kiddies)
– Αδαείς χρήστες που χρησιμοποιούν έτοιμα σενάρια
• Αξιοποίηση είτε γνωστών προβλημάτων είτε επαναλήψεων
• Ασφάλεια κωδικών πρόσβασης στο UNIX
– Η διατήρηση κωδικών σε αρχείο είναι επικίνδυνη
– Στο UNIX αποθηκεύονται κρυπτογραφημένοι
• Χρήση μονόδρομης συνάρτησης στον κωδικό
• Σε κάθε σύνδεση ο κωδικός κρυπτογραφείται και συγκρίνεται
– Ο εισβολέας μπορεί όμως να κάνει κι αυτός το ίδιο
• Κρυπτογράφηση βάσης των κοινών λέξεων και σύγκριση

63

Κωδικοί πρόσβασης (9 από 11)

• Ασφάλεια κωδικών πρόσβασης στο UNIX


– Η τεχνική του αλατιού (salt)
• Σε κάθε κωδικό αντιστοιχεί ένας τυχαίος αριθμός
• Ο τυχαίος αριθμός αποθηκεύεται στο αρχείο κωδικών
• Ο κωδικός κρυπτογραφείται μαζί με τον τυχαίο αριθμό
• Η σύγκριση με έτοιμο αρχείο κωδικών δεν δουλεύει
– Για τυχαίο αριθμό n bit έχουμε 2n παραλλαγές του κωδικού
– Στο UNIX η ανάγνωση γίνεται μέσω προγράμματος
• Το οποίο καθυστερεί επίτηδες τις απαντήσεις του

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

Κωδικοί πρόσβασης (11 από 11)


• Πιστοποίηση ταυτότητας με ερωταποκρίσεις
– Ο χρήστης δημιουργεί μία λίστα ερωτήσεων/απαντήσεων
• Οι απαντήσεις αποθηκεύονται σε κρυπτογραφημένη μορφή
– Σε κάθε σύνδεση ο διακομιστής επιλέγει μία ερώτηση
– Ο χρήστης πρέπει να δώσει τη σωστή απάντηση
• Παραλλαγή: ερωταπόκριση (challenge-response)
– Ο χρήστης επιλέγει έναν αλγόριθμο f και ένα κλειδί k
– Σε κάθε σύνδεση ο διακομιστής του στέλνει μία τιμή x
– Ο χρήστης απαντά με την y=f(x,k)
– Ο εισβολέας πρέπει να ξέρει f (εύκολο) και k (δύσκολο)

66
Φυσικά αντικείμενα (1 από 2)
• Πιστοποίηση με χρήση φυσικού αντικειμένου
– Στα ATM έχουμε αντικείμενο (κάρτα) και κωδικό (PIN)
– Οι απλούστερες κάρτες έχουν μία μαγνητική λωρίδα
• Οικονομικές, αλλά διαβάζονται και αντιγράφονται εύκολα
– Οι πιο σύνθετες κάρτες περιέχουν τσιπ μνήμης
• Η αποθηκευμένη τιμή αλλάζει από τη συσκευή ανάγνωσης
• Παράδειγμα: τηλεκάρτες με αποθηκευμένο χρόνο ομιλίας
– Ακόμη πιο σύνθετες είναι οι έξυπνες κάρτες (smart cards)
• Tο τσιπ περιέχει επεξεργαστή (μπορεί να εκτελεί αλγόριθμους)
• Το τσιπ περιέχει μνήμη (μπορεί να αποθηκεύει και χρήματα)

67

Φυσικά αντικείμενα (2 από 2)

• Πιστοποίηση ταυτότητας με έξυπνες κάρτες


– Ο διακομιστής στέλνει τυχαίο αριθμό r στον χρήστη
– Η κάρτα υπολογίζει f(r,k) με βάση το μυστικό κλειδί k
– Η κάρτα περιέχει και το κλειδί και τον αλγόριθμο
• Ο αλγόριθμος μπορεί να μην είναι σταθερός
– Αν βρεθεί ότι είναι ευάλωτος, αντικαθίσταται
68
Βιομετρία (1 από 3)
• Πιστοποίηση ταυτότητας με χρήση βιομετρίας
– Αξιοποιεί μοναδικά χαρακτηριστικά του χρήστη
• Πρέπει να υπάρχει μεγάλη ποικιλία στους ανθρώπους
• Πρέπει να μην αλλοιώνονται εύκολα με τον χρόνο
– Υποσυστήματα εγγραφής και αναγνώρισης
• Στην εγγραφή αναλύονται τα χαρακτηριστικά
• Στην αναγνώριση συγκρίνονται με αυτά της βάσης
• Τυπικά χαρακτηριστικά για βιομετρικό έλεγχο
– Ίριδα: διαφέρει ακόμη και στους δίδυμους
– Μήκη δακτύλων χεριού

69

Βιομετρία (2 από 3)

• Πολλές τεχνικές βιομετρίας σπάνε εύκολα


– Εκμαγείο του χεριού για μήκη δακτύλων
– Φωτογραφία της ίριδας για αναγνώριση
70
Βιομετρία (3 από 3)
• Ανάλυση υπογραφής
– Ο χρήστης γράφει το όνομά του στο τερματικό
• Αντί για έλεγχο του αποτελέσματος, ελέγχονται οι κινήσεις
• Η υπογραφή πλαστογραφείται, αλλά οι κινήσεις όχι
• Βιομετρία φωνής
– Ο χρήστης επαναλαμβάνει μια φράση που του δίνεται
• Το σύστημα αναλύει τα χαρακτηριστικά της φωνής
• Δεν μπορεί να χρησιμοποιηθεί μια έτοιμη ηχογράφηση
• Γιατί να μην κάνουμε ανάλυση αίματος;
– Οι τεχνικές πρέπει να είναι αποδεκτές από τους χρήστες

71

Εσωτερικές επιθέσεις
Λογικές βόμβες
• Επιθέσεις από χρήστες του συστήματος
– Η πιστοποίηση ταυτότητας κρατάει τους τρίτους εκτός
– Πολλές επιθέσεις όμως ξεκινάνε από μέσα
• Λογικές βόμβες (logic bombs)
– Κώδικας που κρύβεται από προγραμματιστή
– Όσο δουλεύει στην εταιρεία δεν γίνεται τίποτα
– Όταν φύγει η βόμβα «εκρήγνυται»
• Μπορεί να αλλοιώνει αρχεία ή προγράμματα
– Έτσι ο προγραμματιστής εκβιάζει την εταιρεία

73

Καταπακτές

• Καταπακτές (trap doors)


– Κώδικας που παρακάμπτει ελέγχους ασφάλειας
– Επιτρέπει ειδική σύνδεση στον προγραμματιστή
• Παράδειγμα: ο zzzzz μπαίνει χωρίς έλεγχο στο σύστημα
– Αντιμετωπίζεται με επιθεωρήσεις κώδικα (code reviews)

74
Παραπλανητική σύνδεση

• Παραπλανητική σύνδεση (login spoofing)


– Πρόγραμμα που παριστάνει τη διαδικασία σύνδεσης
• Χρησιμοποιείται σε δημόσιους υπολογιστές
– Ο χρήστης δίνει όνομα και κωδικό ανυποψίαστος
• Το πρόγραμμα αποθηκεύει τα στοιχεία
• Εμφανίζει μήνυμα λάθος κωδικού και τερματίζει
– Στα Windows αποφεύγεται με χρήση CTRL-ALT-DEL
• Ο κωδικός δεν παγιδεύεται από προγράμματα χρήστη

75

Αξιοποίηση σφαλμάτων κώδικα


Σφάλματα κώδικα
• Σφάλματα που οδηγούν σε παραβιάσεις ασφάλειας
– Κάθε σφάλμα είναι διαφορετικό
• Υπάρχουν όμως ορισμένα πολύ κοινά
– Αξιοποίηση των σφαλμάτων κώδικα
• Εκτέλεση σάρωσης θυρών για telnet
• Δοκιμή σύνδεσης μαντεύοντας όνομα και κωδικό
• Εκτέλεση προβληματικού προγράμματος με κατάλληλη είσοδο
• Δημιουργία κελύφους με προνόμια διαχειριστή
• Προσκόμιση προγράμματος ζόμπι που περιμένει εντολές
• Αυτόματη ενεργοποίηση του προγράμματος ζόμπι

77

Υπερχείλιση μνήμης (1 από 3)


• Υπερχείλιση προσωρινής μνήμης
– Η C δεν ελέγχει τα όρια των πινάκων κατά την πρόσβαση
– Ένα πρόγραμμα μπορεί να γράψει μνήμη εκτός ορίων
• Λειτουργία επίθεσης μέσω υπερχείλισης;
– Έστω ότι ζητάμε κάποια παράμετρο από το χρήστη
– Το πρόγραμμα έχει πίνακα 1024 byte για την είσοδο
– Ο εισβολέας όμως στέλνει 2000 byte
– Αν δεν γίνει έλεγχος, αυτά γράφονται εκτός ορίων
• Αντικαθιστούν τη διεύθυνση επιστροφής της συνάρτησης
• Περιλαμβάνουν και τον κώδικα στον οποίο επιστρέφουμε

78
Υπερχείλιση μνήμης (2 από 3)

• Παράδειγμα επίθεσης με υπερχείλιση μνήμης


– Η παράμετρος γράφεται σε όλη την γκρι περιοχή
• Αλλάζει η διεύθυνση επιστροφής από τη συνάρτηση
• Το πρόγραμμα μεταβαίνει σε κώδικα στη γκρι περιοχή
• Τελικά παίρνει τον έλεγχο ο κώδικας του εισβολέα

79

Υπερχείλιση μνήμης (3 από 3)


• Λειτουργεί με είσοδο οποιασδήποτε μορφής
– Αρκεί ο εισβολέας να φτιάξει την σωστή συμβολοσειρά
– Ο εισβολέας ουσιαστικά εκτελείται με ξένα προνόμια
• Μπορεί να έχει πάρει προνόμια διαχειριστή
• Σε αυτή την περίπτωση κάνει ό,τι θέλει
– Δυστυχώς η gets() δεν ελέγχει το μήκος της εισόδου!
• Εντοπισμός των προβλημάτων υπερχείλισης
– Δίνουμε μεγάλη είσοδο στο πρόγραμμα
– Αν καταρρεύσει εξετάζουμε την εικόνα μνήμης του
– Βρίσκουμε το πρόβλημα στον πηγαίο κώδικα

80
Συμβολοσειρές μορφοποίησης
• Παρόμοια ιδέα με υπερχείλιση μνήμης
– Η printf() μπορεί να αλλάξει τα ορίσματά της
• Ο κωδικός %n υπολογίζει πόσοι χαρακτήρες τυπώνονται
• Ο αριθμός τοποθετείται στο επόμενο όρισμα της printf
• Παράδειγμα: printf(“Hello %nworld\n”,&i);
– Έστω το εξής σενάριο
• Το πρόγραμμα διαβάζει μια συμβολοσειρά s
• Στη συνέχεια την τυπώνει με printf(s) αντί printf(“%s”,s);
• Ο εισβολέας περιλαμβάνει κωδικούς μορφοποίησης στην s
• Έτσι καταφέρνει να τροποποιήσει τη μνήμη

81

Επιστροφή στη libc (1 από 2)


• Νέα συστήματα δεν επιτρέπουν εκτέλεση δεδομένων
– Η στοίβα σημειώνεται ως read/write αλλά όχι execute
– Το ΛΣ μπορεί να αποφύγει τις προηγούμενες επιθέσεις
• Η διεύθυνση επιστροφής μπορεί να αντικατασταθεί
– Δεν μπορεί να εκτελεστεί κώδικας από τη στοίβα
– Μπορεί να εκτελεστεί όμως ο κώδικας της libc
• Συγκεκριμένα, μπορεί να εκτελεστεί η strcpy()
– Το κέλυφος αντιγράφεται στη στοίβα με υπερχείλιση
– Η strcpy() το αντιγράφει στο τμήμα δεδομένων

82
Επιστροφή στη libc (2 από 2)

• Επίθεση με επιστροφή στη libc


– Αρχικά «επιστρέφουμε» στην strcpy()
– Αυτή κάνει την αντιγραφή από το src στο dst
– Στο τέλος επιστρέφει στον αντιγραμμένο κώδικα

83

Υπερχείλιση ακεραίων
• Όλοι οι τύποι αριθμών έχουν σταθερά μεγέθη
• Η C όμως δεν ελέγχει για υπερχειλίσεις
– Οι απρόσημοι αναδιπλώνονται από το μηδέν
– Οι προσημασμένοι μπορεί να αλλάξουν πρόσημο
• Ο εισβολέας μπορεί να προκαλέσει υπερχείλιση
– Παράδειγμα: ζητάμε ύψος και πλάτος εικόνας
– Ο εισβολέας προκαλεί υπερχείλιση ακεραίου
– Το πρόγραμμα δεσμεύει πολύ λίγη μνήμη
– Δυνατότητα επίθεσης υπερχείλισης προσωρινής μνήμης

84
Παρεμβολή κώδικα

• Επιθέσεις με παρεμβολή κώδικα


– Έστω ένα πρόγραμμα που χρησιμοποιεί τη system()
– Θέλουμε είναι ο χρήστης να δώσει δύο ονόματα αρχείων
– Ο εισβολέας όμως δίνει “abc” και “xyz; rm –rf /”
– Ουσιαστικά εκτελείται μια δεύτερη εντολή!

85

Κλιμάκωση προνομίων
• Ο εισβολέας ξεγελάει το ΛΣ για να πάρει προνόμια
• Ο cron εκτελεί περιοδικές εργασίες για τους χρήστες
– Εκτελείται με δικαιώματα διαχειριστή
– Διαβάζει προγραμματισμένες εργασίες από κατάλογο
• Οι χρήστες δεν μπορούν να γράψουν στον κατάλογο
• Ο εκτελεί το πρόγραμμά του στον κατάλογο του cron
– Καταρρέει αφήνοντας την εικόνα της μνήμης του
– Η εικόνα γράφεται στον τρέχοντα κατάλογο
• Τελικά καταλήγει στον κατάλογο του cron
– Η εικόνα έχει τη μορφή εντολών cron

86
Κακόβουλο λογισμικό

Είδη κακόβουλου λογισμικού (1 από 2)


• Κακόβουλο λογισμικό (malware)
– Κάποτε φτιαχνόταν από κακόβουλους ερασιτέχνες
– Τώρα φτιάχνεται από κακόβουλους επαγγελματίες
• Μπορεί να εγκαθιστά κερκόπορτα στο σύστημα
– Επιτρέπει τον έλεγχο της μηχανής από τρίτους
• Μια τέτοια μηχανή λέγεται ζόμπι ή bot
– Τα δίκτυα bot ενοικιάζονται για μαζικές εργασίες
• Παράδειγμα: μαζική αποστολή spam
• Μπορεί να εγκαθιστά καταγραφέα πληκτρολογήσεων
– Κωδικοί / αριθμοί πιστωτικών καρτών στέλνονται αλλού

88
Είδη κακόβουλου λογισμικού (2 από 2)
• Μπορεί να κάνει υποκλοπή ταυτότητας (identity theft)
– Συλλογή δεδομένων χρήστη με keylogger και αναζήτηση
– Ο εισβολέας μπορεί μετά να παραστήσει τον χρήστη
• Και πολλές άλλες παραλλαγές…
– Μεταφορά χρημάτων από το λογαριασμό του χρήστη
– Βιομηχανική κατασκοπεία ή σαμποτάζ
• Γιατί υπάρχει τόσο πολύ κακόβουλο λογισμικό;
– Υπάρχουν λίγα λειτουργικά συστήματα – στόχοι
– Πολλά θυσιάζουν την ασφάλεια χάρη της ευχρηστίας
• Επιτρέπουν σύνδεση χωρίς ή με προφανείς κωδικούς

89

Δούρειοι ίπποι (1 από 2)


• Δούρειοι ίπποι (trojan horses)
– Κακόβουλο λογισμικό κρυμμένο σε χρήσιμο πρόγραμμα
• Οι χρήστες εγκαθιστούν οι ίδιοι το πρόγραμμα
• Εναλλακτικά, το εκτελούν κατά λάθος
– Στα περισσότερα ΛΣ υπάρχει μία μεταβλητή PATH
• Ο εισβολέας βάζει το πρόγραμμα σε εκτελέσιμο κατάλογο
– Πληκτρολόγηση λάθος ονόματος εντολής
• Παράδειγμα: ο χρήστης γράφει “la” αντί για “ls”
– Χρήση τοπικού προγράμματος σε ξένο κατάλογο
• Σε πολλά συστήματα πρώτα ψάχνεται ο τρέχων κατάλογος

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)

• Παρασιτικοί ιοί (parasitic viruses)


– Μπαίνει σε αρχή, μέση ή τέλος του προγράμματος
• Στην αρχή: ίσως να χρειαζόμαστε μετάθεση κώδικα
• Στο τέλος: αρκεί να είναι μόνο ο ιός μεταθέσιμος
• Σε αρχή ή τέλος, ο ιός αλλάζει το μέγεθος του αρχείου
• Mπορεί να κρύβεται στα κενά στο τέλος των τμημάτων
95

Ιοί (5 από 9)
• Ιοί τομέα εκκίνησης (boot sector viruses)
– Γράφεται στον τομέα εκκίνησης του λειτουργικού
– Εκτελείται κατά την εκκίνηση του συστήματος
• Τη στιγμή αυτή έχει τα προνόμια του υπερχρήστη
• Καταλαμβάνει διάνυσμα διακοπών
• Καλείται αυτόματα σε κάθε διακοπή
• Αφού κάνει τη δουλειά του εκκινεί και το λειτουργικό

96
Ιοί (6 από 9)

• Ιοί τομέα εκκίνησης (boot sector viruses)


– Πώς αποφεύγει τη διαγραφή από το λειτουργικό;
• Αρχικά καταλαμβάνει όλα τα διανύσματα
• Όπως φορτώνονται οι οδηγοί χάνει κάποια διανύσματα
• Όποτε καλείται καταλαμβάνει ξανά τα διανύσματα που έχασε

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

Λογισμικό κατασκοπίας (1 από 3)


• Φορτώνεται σε υπολογιστή κρυφά από το χρήστη
– Κρύβεται ώστε να μην μπορεί να εντοπιστεί
– Συγκεντρώνει στοιχεία για τον χρήστη
– Μεταδίδει τα στοιχεία αυτά κάπου αλλού
– Προσπαθεί να αποφύγει την αφαίρεσή του
• Μπορεί να έχει διάφορους στόχους
– Μάρκετινγκ: παρακολουθεί προτιμήσεις του χρήστη
– Παρακολούθηση: παρακολουθεί ενέργειες του χρήστη
– Botnet: κάνει τη μηχανή ζόμπι

102
Λογισμικό κατασκοπίας (2 από 3)
• Τρόποι εξάπλωσης
– Συνήθως κρύβεται σε χρήσιμα προγράμματα
– Μπορεί να κατεβαίνει αυτόματα από ιστοσελίδα
– Σπάνια οι χρήστες καταλαβαίνουν τι λογισμικό είναι
– Μερικές φορές βάζει το χρήστη να το αποδεχθεί!
• Τι κάνει το λογισμικό κατασκοπείας;
– Πειρατεία φυλλομετρητή (browser hijacking)
• Αλλαγή αρχικής σελίδας φυλλομετρητή
• Τροποποίηση σελιδοδεικτών φυλλομετρητή
• Προσθήκη νέων γραμμών εργαλείων στο φυλλομετρητή

103

Λογισμικό κατασκοπίας (3 από 3)


• Τι κάνει το λογισμικό κατασκοπείας;
– Αλλαγή προγράμματος αναπαραγωγής μέσων
– Αλλαγή μηχανής αναζήτησης χρήστη
– Προσθήκη νέων εικονιδίων στην επιφάνεια εργασίας
– Αντικατάσταση διαφημίσεων σε ιστοσελίδες
– Εισαγωγή διαφημίσεων σε πλαίσια διαλόγου
– Εμφάνιση αναδυόμενων (pop up) διαφημίσεων
– Κλείσιμο τείχους προστασίας ή προστασίας από ιούς
– Δεν είναι το ίδιο με το διαφημιστικό λογισμικό (adware)

104
Rootkit (1 από 3)
• Προσπαθεί να αποφύγει την αφαίρεσή του
– Συνήθως, κάποιας μορφής κακόβουλο λογισμικό
• Rootkit υλικολογισμικού (firmware)
– Κρύβεται στο BIOS σε μνήμη flash
• Rootkit υπερεπόπτη (hypervisor)
– Εκτελεί το κανονικό ΛΣ ως υπερεπόπτης
• Rootkit πυρήνα (kernel) – πιο συνηθισμένο
– Κρύβεται σε οδηγό συσκευής ή μέρος του πυρήνα
• Rootkit βιβλιοθήκης (library)
• Rootkit εφαρμογής (application)

105

Rootkit (2 από 3)

• Τα rootkit υπερεπόπτη είναι δύσκολα στον εντοπισμό


– Είναι αόρατα στο εκτελούμενο λειτουργικό σύστημα
• Η συμπεριφορά τους αποκλίνει από αυτή της μηχανής
• Οι προνομιούχες εντολές είναι αργές λόγω προσομοίωσης
• Ο υπερεπόπτης χρησιμοποιεί ορισμένους πόρους (π.χ. TLB)

106
Rootkit (3 από 3)
• Τα rootkit πυρήνα εντοπίζονται με εκκίνηση από USB
– Σάρωση των αρχείων για περίεργες αλλαγές
– Μπορεί να συγκρίνονται τα αθροίσματα ελέγχου τους
• Απομάκρυνση του rootkit
– Είτε προσεκτική αναίρεση των αλλαγών
– Είτε επανεγκατάσταση του συστήματος
• Το rootkit της Sony BMG
– Εκτελούνταν αυτόματα από τα CD μουσικής της εταιρείας
– Μπλόκαρε προγράμματα ανάγνωσης και αντιγραφής
– Η εταιρεία αναγκάστηκε να πληρώσει αποζημιώσεις

107

Τρόποι άμυνας
Τείχη προστασίας (1 από 4)
• Ασφάλεια σε βάθος: πολλά επίπεδα ασφάλειας
– Για να εισβάλλει κάποιος θα πρέπει να τα περάσει όλα
• To Διαδίκτυο εκθέτει το σύστημα σε κινδύνους
– Εισερχόμενους: κράκερ, κακόβουλο λογισμικό
– Εξερχόμενους: διαρροή πληροφοριών και κωδικών
• Το τείχος προστασίας προσπαθεί να τους μειώσει
– Εφαρμογή πολιτικής ασφάλειας στην κίνηση
• Όλη η κίνηση από/προς το σύστημα ελέγχεται από το τείχος
• Μόνο η εγκεκριμένη κίνηση επιτρέπεται να περάσει
• Υλοποίηση με υλικό ή λογισμικό

109

Τείχη προστασίας (2 από 4)

• Τείχη προστασίας υλικού


– Προστατεύει τη σύνδεση με το Διαδίκτυο
• Όλη η κίνηση περνάει από το τείχος προστασίας
• Συνήθως παρέχονται και άλλες λειτουργίες
• Παράδειγμα: δρομολόγηση
– Το τι επιτρέπεται να περάσει ορίζεται με κανόνες
• Μπορεί να ορίζονται μέσω διασύνδεσης Ιστού

110
Τείχη προστασίας (3 από 4)
• Μη καταστασιακό (stateless) τείχος προστασίας
– Ελέγχεται η κεφαλίδα των πακέτων και οι κανόνες
• Παράδειγμα: αποδοχή θύρας 80 για διεύθυνση 207.68.160.190
• Επιτρέπει επικοινωνία με τον διακομιστή ιστοσελίδων μόνο
– Ο τελευταίος κανόνας πάντα απαγορεύει οτιδήποτε άλλο
• Το τείχος προστασίας δεν λύνει όλα τα προβλήματα
– Δεν επιτρέπει τις μη εξουσιοδοτημένες υπηρεσίες
– Δεν λύνει προβλήματα με εξουσιοδοτημένες υπηρεσίες
• Παράδειγμα: σφάλμα υπερχείλισης σε διακομιστή
• Όσο λιγότερες θύρες ανοίγουμε, τόσο το καλύτερο

111

Τείχη προστασίας (4 από 4)


• Καταστασιακό (stateful) τείχος προστασίας
– Παρακολουθεί και την κατάσταση των συνδέσεων
– Αντιμετωπίζει επιθέσεις κατά την εγκαθίδρυση
• Σύστημα ανίχνευσης εισβολής (IDS)
– Ελέγχει το περιεχόμενο των πακέτων
– Ψάχνει για ύποπτα πακέτα
• Τείχη προστασίας λογισμικού
– Συνδέονται με κώδικα δικτύωσης του πυρήνα
– Κατάλληλα για προστασία ενός συστήματος

112
Προστασία από ιούς (1 από 5)
• Τεχνικές εναντίων των ιών
– Συνήθως μιλάμε για αντιβιοτικά (antivirus)
• Για ιούς, σκουλήκια και λογισμικό κατασκοπίας
– Για κάθε τεχνική αντιβιοτικών, υπάρχει αντίμετρο
• Συνεχής αγώνας με τα αντιβιοτικά
• Σαρωτές ιών (virus scanners)
– Οι κατασκευαστές μελετούν συνεχώς νέους ιούς
– Καταγράφουν σε μία βάση τα χαρακτηριστικά του ιού
– Αντιπαραβολή προγραμμάτων με τη βάση
• Πρέπει να ενημερώνονται τακτικά (μέσω δικτύου)

113

Προστασία από ιούς (2 από 5)

• Ορισμένοι σαρωτές ελέγχουν τα μήκη των αρχείων


• Αντίμετρα από τους ιούς
– Συμπίεση προγράμματος για να μην αλλάξει μέγεθος
– Κρυπτογράφηση κώδικα για να μην μοιάζει με τη βάση
– Ο σαρωτής ψάχνει για τον κώδικα αποκρυπτογράφησης!
114
Προστασία από ιούς (3 από 5)

• Πολυμορφικός ιός: αλλάζει λίγο σε κάθε αντιγραφή


• Χρησιμοποιεί μηχανή μετάλλαξης (mutation engine)
– Προσθήκη κενών εντολών (NOP) (β)
– Προσθήκη εντολών που δεν έχουν αποτέλεσμα (γ)
– Προσθήκη περιττών εντολών (δ)
– Αντιμετάθεση εντολών (ε)
115

Προστασία από ιούς (4 από 5)


• Ο σαρωτής ελέγχει τομέα εκκίνησης και μνήμη
– Τι γίνεται όμως αν υπάρχει ένας ισχυρός ιός στη μνήμη;
• Μπορεί να επιστρέφει τον αρχικό τομέα εκκίνησης
• Μπορεί να επιστρέφει λάθος στοιχεία για τα αρχεία
– Η λύση είναι εκκίνηση από άλλο μέσο και έλεγχος
• Ελεγκτές ακεραιότητας (integrity checkers)
– Υπολογίζουν αθροίσματα ελέγχου των προγραμμάτων
• Σε κάθε εκτέλεση γίνεται σύγκριση με το αρχείο στο δίσκο
– Ο ελεγκτής μπορεί να υπογράψει ψηφιακά το αρχείο
• Ιδανικά χρήση κλειδιού σε εξωτερικό μέσο (έξυπνη κάρτα)

116
Προστασία από ιούς (5 από 5)
• Ελεγκτές συμπεριφοράς (behavioral checkers)
– Το αντιβιοτικό είναι συνεχώς στη μνήμη
– Αναχαιτίζει όλες τις κλήσεις συστήματος
– Παγιδεύει περίεργη συμπεριφορά
• Παράδειγμα: εγγραφή τομέα εκκίνησης ή flash
– Δεν είναι προφανές τι είναι κακό και τι όχι
• Έγκυρη συμπεριφορά μπορεί να φαίνεται ύποπτη
• Εγκατάσταση νέας έκδοσης προγράμματος
• Μακροεντολές χρήστη σε αρχείο

117

Αποφυγή ιών (1 από 2)


• Οι εταιρείες μπορούν να βοηθήσουν αρκετά
– Τα απλά ΛΣ είναι πιο ασφαλή
– Το ενεργό περιεχόμενο είναι γενικά επικίνδυνο
– Ο βασικός τομέας πρέπει να προστατεύεται
– Η μνήμη flash πρέπει να προστατεύεται
• Ιδανικά, με φυσικό διακόπτη
• Οι χρήστες πρέπει να προσέχουν τι κάνουν
• Προτιμάμε τα ασφαλή λειτουργικά συστήματα
– Πρέπει να διακρίνουν κατάσταση χρήστη και πυρήνα
– Ο πυρήνας πρέπει να είναι όσο γίνεται μικρός

118
Αποφυγή ιών (2 από 2)
• Εγκαθιστούμε λογισμικό από αξιόπιστες πηγές
• Χρησιμοποιούμε και ενημερώνουμε το αντιβιοτικό
• Δεν ανοίγουμε αρχεία με ενεργό περιεχόμενο
– Απενεργοποιούμε μακροεντολές
• Παίρνουμε συχνά αντίγραφα ασφαλείας
– Κρατάμε περισσότερα από ένα
• Αλλιώς μπορεί να είναι μολυσμένο και το αντίγραφο
• Δεν εκτελούμε λογισμικό από άγνωστες πηγές
– Κλασική μέθοδος διανομής ιών

119

Υπογραφή κώδικα

• Πώς ξέρουμε ότι κάποιο λογισμικό είναι σωστό;


– Ψηφιακή υπογραφή του από τον κατασκευαστή
• Υπογράφεται η σύνοψη κώδικα με το ιδιωτικό κλειδί
• Ο χρήστης επιβεβαιώνει την υπογραφή
• Απαιτεί μία μέθοδο διανομής κλειδιών

120
Φυλάκιση

• Το πρόγραμμα εκτελείται υπό έλεγχο (φυλακισμένος)


– Παρακολουθείται από έμπιστη διεργασία (δεσμοφύλακα)
– Οι κλήσεις συστήματος ελέγχονται από τον δεσμοφύλακα
– Ο δεσμοφύλακας επιτρέπει μόνο τις ασφαλείς κλήσεις
• Δίνονται συγκεκριμένα προνόμια στον φυλακισμένο
– Υλοποιείται σαν πρόγραμμα εκσφαλμάτωσης

121

Ανίχνευση εισβολής (1 από 3)


• Υλοποιείται από συστήματα IDS
– Πιο προχωρημένα από τα IDS δικτύου
• Στατική ανίχνευση εισβολής με βάση μοντέλο
– Υλοποιείται με την τεχνική φυλάκισης
– Το πρόγραμμα μοντελοποιείται με γράφο κλήσεων
– Ο γράφος παράγεται από τον μεταγλωττιστή
– Ο γράφος καθορίζει ορισμένες ακολουθίες κλήσεων
– Ο δεσμοφύλακας ελέγχει αν ακολουθείται
– Αν έχουμε υπερχείλιση ή ιό, η ακολουθία αλλάζει
– Ο δεσμοφύλακας εντοπίζει το πρόβλημα

122
Ανίχνευση εισβολής (2 από 3)

Παράδειγμα: πρόγραμμα και γράφος κλήσεων

123

Ανίχνευση εισβολής (3 από 3)


• Δοχείο μελιού (honeypot)
– Σύστημα ελάχιστα προστατευμένο
• Επίτηδες αφήνουμε ανοιχτό το σύστημα
– Φαίνεται να έχει «ενδιαφέρον» περιεχόμενο
• Προσωπικά ή οικονομικά δεδομένα
• Προφανώς, είναι ψεύτικα!
– Περιμένουμε να δεχτεί επιθέσεις
– Το IDS μελετάει έτσι τους επιτιθέμενους
124
Ενθυλάκωση κινητού κώδικα (1 από 5)

• Διάφορα είδη κινητού κώδικα (mobile code)


– Μικροεφαρμογές (applets) σε ιστοσελίδες
– Πράκτορες (agents) που κινούνται στις μηχανές
– Αρχεία σε γλώσσα PostScript
• Μπορεί να εκτελεστεί ο κώδικας με ασφάλεια;
– Ναι, αλλά όχι εύκολα
– Στην τρέχουσα διεργασία θα έχει τα ίδια προνόμια
– Σε χωριστή διεργασία μπορεί να μην λειτουργεί
• Χρειάζεται γενική μέθοδος ασφαλούς εκτέλεσης

125

Ενθυλάκωση κινητού κώδικα (2 από 5)

• Αμμοπαγίδα (sandbox)
– Περιορισμός προγράμματος στη μνήμη
• Όλες οι διευθύνσεις πρέπει να έχουν το ίδιο πρόθεμα
– Χρήση συγκεκριμένων περιοχών διευθύνσεων
• Εκτέλεση κώδικα σε αμμοπαγίδα κώδικα
• Προσπέλαση δεδομένων σε αμμοπαγίδα δεδομένων
– Ελεγκτής αναφορών για κλήσεις συστήματος
• Αλλαγή κλήσεων έτσι ώστε να δείχνουν στον ελεγκτή
• Αρχείο διάρθρωσης για το τι επιτρέπεται να κληθεί

126
Ενθυλάκωση κινητού κώδικα (3 από 5)

• Κάθε περιοχή έχει διευθύνσεις με κοινό πρόθεμα


– Παράδειγμα: διαίρεση 256 ΜΒ σε 16 περιοχές των 16 MB

127

Ενθυλάκωση κινητού κώδικα (4 από 5)

• Αμμοπαγίδα (sandbox)
– Ο κώδικας ελέγχεται εν μέρει στατικά
• Οι απόλυτες διευθύνσεις πρέπει να είναι έγκυρες
– Ορισμένα σημεία πρέπει να ελέγχονται δυναμικά
• Εντολές με σχετικές διευθύνσεις (με βάση τον PC)
– Προσθήκη κώδικα ελέγχου πριν κάθε αναφορά
• Αντιγραφή διεύθυνσης σε καταχωρητή ελέγχου 1
• Απομόνωση του προθέματος με ολίσθηση
• Σύγκριση με πρόθεμα στον καταχωρητή ελέγχου 2
• Αν δεν ταιριάζει, παγίδευση της αναφοράς

128
Ενθυλάκωση κινητού κώδικα (5 από 5)

• Διερμηνεία (interpretation)
– Οι εντολές ελέγχονται κατά τη διερμηνεία τους
• Αυτός είναι ο τρόπος που δουλεύει κανονικά η Java
– Οι έμπιστες εφαρμογές εκτελούνται ελεύθερα
– Οι μη έμπιστες βρίσκονται σε αμμοπαγίδα

129

Ασφάλεια στην Java (1 από 3)


• Η Java ελέγχει αυστηρά τους τύπους
– Δεν επιτρέπει αυτόματες μετατροπές τύπων
– Δεν επιτρέπει πρόσβαση σε δομές μέσω δεικτών
– Ελέγχει πλήρως την κατανομή μνήμης
• Εκτέλεση προγραμμάτων σε εικονική μηχανή
– Μεταγλωττίζονται αρχικά σε ενδιάμεσο κώδικα
– Ο ενδιάμεσος κώδικας μπορεί
• Είτε να διερμηνευτεί (δυναμικός έλεγχος)
• Είτε να μεταγλωττιστεί (στατικός έλεγχος)

130
Ασφάλεια στην Java (2 από 3)
• Οι εφαρμογές επαληθεύονται πριν εκτελεστούν
– Έλεγχος του ενδιάμεσου κώδικα (bytecode verifier)
– Δεν πρέπει να φτιάχνουν δείκτες
– Δεν πρέπει να βλέπουν ιδιωτικά μέλη κλάσεων
– Δεν πρέπει να χρησιμοποιούν τύπους λανθασμένα
– Δεν πρέπει να υπερχειλίζουν/υποχειλίζουν τη στοίβα
– Δεν πρέπει να κάνουν τυχαίες μετατροπές τύπων
• Οι κλήσεις συστήματος είναι ειδική περίπτωση
131

Ασφάλεια στην Java (3 από 3)

• JDK 1.0: έμπιστες και μη μικροεφαρμογές


– Οι έμπιστες έκαναν τα πάντα, οι άλλες τίποτα!
• JDK 1.1: υπογραφή κώδικα
– Αν έχει υπογραφεί από έμπιστή οντότητα, είναι έμπιστη
• JDK 1.2: πιο λεπτομερές μοντέλο ασφάλειας
– Χρήση πίνακα με προνόμια προσπέλασης
– Προέλευση εφαρμογής και οντότητα που υπέγραψε
– Αντικείμενο και τρόπος προσπέλασης

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 δεν μπορούσε να μπει στην αγορά
– Έδινε άδειες (με πηγαίο κώδικα) σχεδόν δωρεάν

Φορητό UNIX (1 από 2)


• To UNIX Version 6 ήταν ένα μικρό σύστημα
– 8200 γραμμές C και 900 γραμμές assembly
• Το Version 7 ήταν το πρώτο φορητό UNIX
– 18800 γραμμές C και 2100 γραμμές assembly
– Βάση για πάρα πολλές παραλλαγές (π.χ. XENIX)
– Εκτός από PDP-11 έτρεχε και σε Interdata 8/32
• Το Interdata ήταν σύστημα 32 bit
• Αποκάλυψε πολλές εξαρτήσεις από το PDP-11
• Το UNIX έτσι έγινε πολύ πιο φορητό

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

Πρότυπο UNIX (2 από 2)


• Το πρότυπο POSIX
– Προσπάθεια υπό την αιγίδα της IEEE
– Προδιαγράφει σειρά κλήσεων βιβλιοθήκης
– Αφήνει στις υλοποιήσεις τις κλήσεις συστήματος
– Περιέχει τον κοινό πυρήνα System V και BSD
– Μοιάζει αρκετά με το UNIX Version 7
– Επιπλέον πρότυπα για προγράμματα και δικτύωση
– Δεν περιγράφει ένα πλήρες σύστημα UNIX

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

Γενικά για το Linux


Στόχοι του Linux (1 από 2)
• Σύστημα αλληλεπίδρασης
• Πολλών χρηστών και πολλών διεργασιών
• Σχεδιάστηκε για προγραμματιστές
– Πολλά εργαλεία ανάπτυξης λογισμικού
– Υποστήριξη ανάπτυξης σε ομάδες
– Διευκόλυνση έμπειρων χρηστών
• Απλό, κομψό και συνεπές
– Ένα μόνο είδος αρχείων (ακολουθία byte)
– ls A* έχει παρόμοια σημασία με rm A* (ομοιομορφία)

21

Στόχοι του Linux (2 από 2)


• Συγκεκριμένη φιλοσοφία προγραμμάτων
– Κάθε πρόγραμμα κάνει μία απλή εργασία
– Συνδυασμός για σύνθετες εργασίες
• Ισχυρές μέθοδοι συνδυασμού προγραμμάτων
– Σύντομα ονόματα προγραμμάτων (cp, όχι copy)
• Λήψη πληροφοριών από γραμμή εντολών
– Λίγες ερωτήσεις προς το χρήστη
• Θεωρούν ότι ο χρήστης ξέρει τι κάνει

22
Διασυνδέσεις του Linux (1 από 2)

• Λειτουργικό: κλήσεις συστήματος


– Ορίσματα σε καταχωρητές ή στοίβα
– Εντολή TRAP για είσοδο στον πυρήνα
• Πρότυπη βιβλιοθήκη: υπερσύνολο κλήσεων POSIX

23

Διασυνδέσεις του Linux (2 από 2)


• Βοηθητικά προγράμματα: εν μέρει στο POSIX
– Κέλυφος, μεταγλωττιστές, διορθωτές, χειρισμός αρχείων
• Γραφικές διεπαφές: αντικαθιστούν τη γραμμή εντολών
– GNOME: GNU Network Object Model Environment
– KDE: K Desktop Environment
– Βασίζονται στο X Window System (ή X11 ή X)
• Ο διακομιστής X ελέγχει τις συσκευές
• Τα προγράμματα είναι οι πελάτες X
– Επεκτείνεται από τον διαχειριστή παραθύρων
• Συνήθως εκτελείται αυτόματα στην εκκίνηση του συστήματος

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

Βοηθητικά προγράμματα (1 από 2)


• Βοηθητικά προγράμματα του Linux
– Το POSIX περιγράφει περίπου 100
• Σύνταξη και σημασιολογία
– Χειρισμός αρχείων και καταλόγων
– Διαχείριση συστήματος
– Ανάπτυξη προγραμμάτων
– Επεξεργασίας κειμένου
– Φίλτρα μετασχηματισμού δεδομένων

28
Βοηθητικά προγράμματα (2 από 2)

Βοηθητικά προγράμματα του Linux


29

Δομή πυρήνα (1 από 3)

• Κατώτερο επίπεδο και τρία συστατικά


– Διεργασίες, μνήμη, είσοδος / έξοδος
30
Δομή πυρήνα (2 από 3)
• Διακοπές και διεκπεραιωτής διεργασιών
– Κατώτερο επίπεδο πυρήνα
– Χειρισμός διακοπών (και) σε γλώσσα μηχανής
• Συστατικό διαχείρισης εισόδου-εξόδου
– Εικονικό σύστημα αρχείων στο υψηλότερο επίπεδο
– Οδηγοί συσκευών στο χαμηλότερο επίπεδο
– Συσκευές χαρακτήρων: κανόνες γραμμής
– Συσκευές δικτύου: πρωτόκολλα, υποδοχές
– Συσκευές μπλοκ: συστήματα αρχείων

31

Δομή πυρήνα (3 από 3)


• Συστατικό διαχείρισης μνήμης
– Απεικόνιση διευθύνσεων, κρυφή μνήμη σελίδων
• Συστατικό διαχείρισης διεργασιών
– Δημιουργία/τερματισμός διεργασιών
– Χρονοπρογραμματισμός, σήματα
• Αλληλεξαρτήσεις μεταξύ συστατικών
• Δυναμικά φορτώσιμες υπομονάδες
• Διασύνδεση κλήσεων συστήματος
32
Διεργασίες στο Linux

Θεμελιώδεις έννοιες διεργασιών (1 από 5)

• Κάθε διεργασία εκτελεί ένα μόνο πρόγραμμα


• Αρχικά έχει ένα νήμα ελέγχου
– Μπορεί στη συνέχεια να φτιάξει άλλα νήματα
• Πολλές ταυτόχρονες διεργασίες ανά χρήση
• Διεργασίες δαίμονες
– Παράδειγμα: το cron ξυπνάει κάθε 1 λεπτό
• Ελέγχει αν υπάρχουν προγραμματισμένες εργασίες
• Υπενθυμίσεις χρηστών ή περιοδικές συντηρήσεις

34
Θεμελιώδεις έννοιες διεργασιών (2 από 5)

• Δημιουργία νέων διεργασιών με fork


– Η καλούσα διεργασία η γονική (parent)
– Η νέα διεργασία είναι η θυγατρική (child)
– Αρχικά έχουν τις ίδιες εικόνες στη μνήμη
• Κώδικας και δεδομένα
• Αλλαγές στη μία δεν επηρεάζουν την άλλη
– Κοινά ανοιχτά αρχεία στις δύο διεργασίες
• Μοιράζονται και τον δείκτη τρέχουσας θέσης

35

Θεμελιώδεις έννοιες διεργασιών (3 από 5)

• Κάθε διεργασία έχει μία ταυτότητα (PID)


– H fork επιστρέφει το PID της θυγατρικής
• Στη θυγατρική διεργασία επιστρέφει 0
– Μια διεργασία μαθαίνει το PID μέσω της getpid
– Με το PID η διεργασία διακρίνει τα παιδιά της
• Επιστρέφεται στη γονική και κατά τον τερματισμό

36
Θεμελιώδεις έννοιες διεργασιών (4 από 5)

• Επικοινωνία διεργασιών με αγωγούς (pipes)


– Μονόδρομη ροή byte ανάμεσα σε δύο διεργασίες
– Μπλοκάρισμα συγγραφέα σε γεμάτο αγωγό
– Μπλοκάρισμα αναγνώστη σε άδειο αγωγό
• Επικοινωνία διεργασιών μέσω σημάτων (signals)
– Ουσιαστικά πρόκειται για διακοπές λογισμικού
• Είτε από άλλες διεργασίες είτε από το σύστημα
– Η διεργασία ορίζει τι θα κάνει σε κάθε σήμα
• Τερματισμός, αγνόηση, χειρισμός με διαδικασία
• Η διαδικασία χειρισμού καλείται όταν συμβεί το σήμα

37

Θεμελιώδεις έννοιες διεργασιών (5 από 5)

• Ομάδα διεργασιών (process group)


– Οι απόγονοι μίας διεργασίας
– Σήματα στέλνονται μόνο μέσα στην ομάδα
– Δυνατότητα αποστολής σε όλη την ομάδα
• Σήματα POSIX
– Το POSIX ορίζει σειρά τυποποιημένων σημάτων
– Σήματα που στέλνονται από διεργασίες (SIGUSR)
– Σήματα ελέγχου της διεργασίας (SIGHUP)
– Σφάλματα προγράμματος (SIGILL, SIGSEGV, SIGFPE)
– Σήματα που προέρχονται από το πρόγραμμα (SIGALRM)

38
Κλήσεις διεργασιών (1 από 4)

• Δημιουργία αντιγράφων διεργασιών με fork


• Αναμονή τερματισμού θυγατρικής με waitpid
– Συγκεκριμένη ή οποιαδήποτε θυγατρική
• Εκτέλεση νέου προγράμματος με exec
39

Κλήσεις διεργασιών (2 από 4)

• Παράδειγμα: ένας απλός φλοιός


– Εκτύπωση προτροπής και ανάγνωση εντολών
– Δημιουργία θυγατρικής διεργασίας
– Η θυγατρική εκτελεί την εντολή του χρήστη
40
Κλήσεις διεργασιών (3 από 4)
• Η exec παίρνει τρεις παραμέτρους
– Όνομα προγράμματος προς εκτέλεση
– Μεταβλητές προγράμματος: παράμετροι κλήσης
– Μεταβλητές περιβάλλοντος: π.χ. τύπος τερματικού
– Ο καλούμενος ξεκινάει με main(argc, argv, envp)
• Έξοδος από διεργασία με την exit
– Παράμετρος που ορίζεται από το χρήστη (0-255)
• Επιστρέφεται στο υψηλό byte της status στην waitpid
• Στο χαμηλό byte επιστρέφεται ένας κωδικός εξόδου
• Μια διεργασία πρέπει να περιμένει τα παιδιά της

41

Κλήσεις διεργασιών (4 από 4)


• Διαχείριση σημάτων με την sigaction
– Σήμα που θέλουμε να χειριστούμε
– Δομή με δείκτη προς χειριστή σήματος και σημαίες
– Επιστρέφεται παλιός χειριστής και σημαίες
• Αποστολή σημάτων με την kill
– Αν δεν συλληφθεί, τερματίζει τον παραλήπτη
• Ρύθμιση “ξυπνητηριών” με την alarm
– Ορίζουμε σε πόση ώρα θέλουμε το SIGALARM
• Αναμονή μέχρι να συμβεί κάτι με την pause

42
Διεργασίες και νήματα (1 από 9)
• Διεργασία: τμήμα χρήστη και τμήμα πυρήνα
– Τμήμα χρήστη: εκτελεί το πρόγραμμα του χρήστη
– Τμήμα πυρήνα: χρήση σε κλήσεις συστήματος
• Στις κλήσεις συστήματος εκτελείται κώδικας πυρήνα
• Ανεξάρτητη στοίβα και μετρητής προγράμματος
• Επιτρέπει διακοπή της διεργασίας μέσα στον πυρήνα
• Στο Linux νήματα=διεργασίες=εργασίες (tasks)
– Κάθε εργασία αντιστοιχεί σε μία δομή εργασίας
– Μια πολυνηματική διεργασία έχει πολλές δομές
– Και ο πυρήνας είναι πολυνηματικός

43

Διεργασίες και νήματα (2 από 9)


• Κάθε εργασία έχει μία δομή μόνιμα στη μνήμη
– Οργανώνονται σε διπλά συνδεδεμένη λίστα
– Κάθε εργασία έχει ένα PID
• Περιεχόμενα δομής εργασίας στο Linux
– Παράμετροι χρονοπρογραμματισμού (χρόνος CPU)
– Εικόνα μνήμης (δείκτες σε πίνακες σελίδων ή δίσκο)
– Σήματα (μάσκες και κατάσταση σημάτων)
– Καταχωρητές μηχανής (όταν η διεργασία σταματάει)

44
Διεργασίες και νήματα (3 από 9)
• Περιεχόμενα δομής εργασίας στο Linux
– Κατάσταση κλήσης συστήματος (τρέχουσα κλήση)
– Πίνακας περιγραφέων αρχείων (ανοιχτά αρχεία)
– Λογιστικές πληροφορίες
– Στοίβα πυρήνα (για το τμήμα πυρήνα)
– Διάφορα (κατάσταση, συμβάν που αναμένεται, PID)
• Μέρος της δομής μπορεί να πηγαίνει στο δίσκο
– Τα σήματα πρέπει να είναι συνέχεια στη μνήμη
– Οι περιγραφείς αρχείων μπορούν να είναι στο δίσκο

45

Διεργασίες και νήματα (4 από 9)


• Υλοποίηση κλήσης fork (πρώτο μέρος)
– Δημιουργία νέας δομής εργασίας
– Δημιουργία πληροφοριών νήματος
• Περιέχει δείκτη προς τη δομή εργασίας
– Δημιουργία στοίβας κατάστασης πυρήνα
– Συμπλήρωση δομών από τη μητρική διεργασία
– Εισαγωγή PID σε πίνακα κατακερματισμού
• Μπορούμε από το PID να βρούμε άμεσα τη διεργασία
– Σύνδεση δομής εργασίας στη λίστα των εργασιών

46
Διεργασίες και νήματα (5 από 9)
• Υλοποίηση κλήσης fork (δεύτερο μέρος)
– Ορισμός τμήματος κώδικα ως κοινόχρηστου
– Δημιουργία πίνακα σελίδων για τμήμα δεδομένων
– Σημείωση σελίδων δεδομένων ανάγνωσης μόνο
• Ανεξάρτητα από το αν είναι όντως ανάγνωσης μόνο
– Όταν γραφτούν, δημιουργείται παγίδα
• Η σελίδα αντιγράφεται σε νέο πλαίσιο
• Οι σελίδες σημειώνονται ως ανάγνωσης και εγγραφής
• Ουσιαστικά αντιγράφονται μόνο αν τροποποιηθούν

47

Διεργασίες και νήματα (6 από 9)

• Υλοποίηση κλήσης exec


– Εντοπισμός και επαλήθευση του κώδικα προς εκτέλεση
– Αντιγραφή ορισμάτων και περιβάλλοντος στον πυρήνα
– Απελευθέρωση μνήμης και δημιουργία νέου χάρτη
• Με απεικόνιση του αρχείου κώδικα στη μνήμη
– Αντιγραφή ορισμάτων και περιβάλλοντος σε στοίβα
– Μηδενισμός σημάτων και καταχωρητών
48
Διεργασίες και νήματα (7 από 9)
• Τα νήματα στο Linux
– Τα νήματα περιπλέκουν αρκετά το μοντέλο του UNIX
– Πρέπει η fork να αντιγράφει τα νήματα μιας διεργασίας;
– Πρέπει να δέχονται τα νήματα τα σήματα της διεργασίας;
• Η κλήση clone στο Linux
– Η clone είναι μια εξελιγμένη μορφή της fork
– pid=clone(function, stack_ptr, sharing_flags, arg);
• Ανάλογα με τη sharing_flags έχουμε ή όχι κοινό χώρο μνήμης
– Η νέα εργασία ξεκινά στη function με παράμετρο arg
– Η στοίβα της νέας εργασίας ξεκινά στην stack_ptr

49

Διεργασίες και νήματα (8 από 9)

• Η sharing_flags (χάρτης bit) δείχνει τι θα συμβεί


– CLONE_VM: κοινή μνήμη ή αντίγραφο μνήμης
– CLONE_FS: κοινοί κατάλογοι και μάσκα αρχείων ή όχι
– CLONE_FILES: κοινά αρχεία ή αντίγραφα περιγραφέων
– CLONE_SIGHAND: κοινός πίνακας σημάτων ή αντίγραφο
– CLONE_PID: αντιγραφή PID (μόνο για την εκκίνηση)
– CLONE_PARENT: ίδιος γονέας ή ο καλών είναι ο γονέας

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)

• Μία ουρά εκτέλεσης ανά επεξεργαστή (runqueue)


– Πίνακες ενεργών (active) / ληγμένων (expired) εργασιών
• Κάθε πίνακας περιέχει δείκτες σε εργασίες ανά προτεραιότητα

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)

• Παράδειγμα δένδρου διεργασιών με 3 τερματικά


– Οι getty/login/sh είναι παιδιά της init
• Από εκεί ξεκινά η ομάδα διεργασιών ενός τερματικού

63

Διαχείριση μνήμης στο Linux


Θεμελιώδεις έννοιες μνήμης (1 από 5)

• Ο χώρος διευθύνσεων χωρίζεται σε τρία τμήματα


– Τμήμα κώδικα (text): εκτελέσιμος κώδικας
• Σταθερό μέγεθος, δεν τροποποιείται
– Τμήμα δεδομένων (data): δεδομένα προγράμματος
– Τμήμα στοίβας (stack): στοίβα επιπέδου χρήστη

65

Θεμελιώδεις έννοιες μνήμης (2 από 5)

• Το τμήμα δεδομένων χωρίζεται σε δύο μέρη


• Αρχικοποιημένα: μεταβλητές / σταθερές με τιμές
– Αποθηκεύονται στο δίσκο οι αρχικές τιμές
• Μη αρχικοποιημένα (BSS): μηδενικές τιμές
– Σημειώνεται ο χώρος που καταλαμβάνουν
– Κατά τη φόρτωση παραχωρείται χώρος
• Αρχικά εκχωρείται μία δεσμευμένη σελίδα
• Η σελίδα είναι μηδενισμένη αλλά προστατευμένη
• Στην πρώτη εγγραφή εκχωρείται κανονική σελίδα

66
Θεμελιώδεις έννοιες μνήμης (3 από 5)

• Δυναμική εκχώρηση μνήμης


– Το τμήμα δεδομένων μεγαλώνει με την brk
• Η malloc την χρησιμοποιεί για δυναμικές δομές
– Η δυναμική μνήμη ονομάζεται σωρός (heap)
• Το τμήμα στοίβας επίσης αλλάζει μέγεθος
– Συνήθως αρχίζει από το άνω άκρο
– Όταν γεμίσει η τρέχουσα σελίδα κατανέμεται άλλη
– Η στοίβα αρχικά περιέχει παραμέτρους κλήσης
• Μεταβλητές περιβάλλοντος και ορίσματα γραμμής εντολών

67

Θεμελιώδεις έννοιες μνήμης (4 από 5)

• Κοινόχρηστα τμήματα κώδικα


– Πολλές διεργασίες με τον ίδιο κώδικα
• Ένα τμήμα που απεικονίζεται στις ίδιες σελίδες μνήμης
– Τα δεδομένα και η στοίβα δεν είναι κοινόχρηστα
• Μετά τη fork φαίνεται ότι έχουμε κοινές σελίδες
• Όταν τροποποιηθούν αντιγράφονται σε χωριστές σελίδες
• Χωριστοί χώροι κώδικα / δεδομένων
– Υποστηρίζονται σε μηχανές με τέτοια διάκριση
– Οι προσπελάσεις πάνε στον κατάλληλο χώρο

68
Θεμελιώδεις έννοιες μνήμης (5 από 5)

• Αρχεία χαρτογραφημένα στη μνήμη


– Πολλές διεργασίες βλέπουν ταυτόχρονα το αρχείο
– Κάθε διεργασία μπορεί να το έχει σε διαφορετικό σημείο
– Πολύ γρήγορη μέθοδος ανταλλαγής δεδομένων

69

Κλήσεις μνήμης

• Το POSIX δεν ορίζει κλήσεις διαχείρισης μνήμης


– Προτείνει τη χρήση των συναρτήσεων της C (malloc)
• brk: ορίζει πού σταματάει το τμήμα δεδομένων
– Χρήση και για αύξηση και για μείωση του μεγέθους του
• mmap: χαρτογράφηση αρχείου σε θέση μνήμης
– Χαρτογράφηση σε αρχή σελίδας, ακέραιο πλήθος σελίδων
– Μπορούμε να χαρτογραφήσουμε μέρος του
• unmap: κατάργηση χαρτογράφησης αρχείου
– Μπορεί να αφορά μέρος μόνο του αρχείου

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

Υλοποίηση μνήμης (2 από 10)


• Πυρήνας και χάρτης μνήμης καρφιτσώνονται (pinned)
• Πίνακας περιγραφέων σελίδων
– Κάθε καταχώρηση περιγράφει μία φυσική σελίδα
• Δείκτες για διπλή σύνδεση ελεύθερων πλαισίων
• Δείκτης σε χώρο διευθύνσεων για κατειλημμένες σελίδες
• Για κάθε ζώνη έχουμε ένα περιγραφέα ζώνης
– Πλήθος ενεργών και ελεύθερων σελίδων
– Υψηλό και χαμηλό υδατογράφημα
– Δείκτες προς λίστες ελεύθερων πλαισίων
• Περιγραφέας κόμβου: περιγράφει μνήμη ενός κόμβου

72
Υλοποίηση μνήμης (3 από 10)

Δομές διαχείρισης μνήμης


73

Υλοποίηση μνήμης (4 από 10)

• Μηχανισμός σελιδοποίησης τεσσάρων επιπέδων


– Η διεύθυνση χωρίζεται σε πέντε πεδία
– Μπορεί να χρησιμοποιηθεί και με λιγότερα επίπεδα
• Χρήση πινάκων με ένα μόνο στοιχείο

74
Υλοποίηση μνήμης (5 από 10)
• Η περισσότερη μνήμη κατανέμεται δυναμικά
– Σελίδες χρηστών και κρυφές μνήμες
– Κρυφή μνήμη σελίδων: πρόσφατα μπλοκ αρχείων
– Κρυφή μνήμη σελιδοποίησης: υποψήφιες για αφαίρεση
– Μία ενιαία κρυφή μνήμη για όλες τις σελίδες
• Η κρυφή μνήμη καταλαμβάνει όσο χώρο περισσεύει
• Δυναμική φόρτωση υπομονάδων
– Συνήθως οδηγοί συσκευών
– Απαιτούν συνεχόμενη μνήμη στον πυρήνα

75

Υλοποίηση μνήμης (6 από 10)

• Χρήση του συστήματος φίλων (buddy system)


– Οι ελεύθερες περιοχές οργανώνονται σε λίστες
– Κάθε λίστα έχει περιοχές με 1, 2, 4, … πλαίσια
• Κάθε αίτηση στρογγυλεύεται σε δύναμη του 2
– Δεσμεύεται μία περιοχή από την αντίστοιχη λίστα
– Αν δεν υπάρχει, σπάει μία μεγαλύτερη περιοχή
– Το ελεύθερο κομμάτι πάει στην κατάλληλη λίστα
76
Υλοποίηση μνήμης (7 από 10)
• Το σύστημα φίλων οδηγεί σε εσωτερική κατάτμηση
– Ζητάμε 65 σελίδες αλλά δεσμεύουμε 128!
• Ο κατανεμητής πλακιδίων κατανέμει τα υπόλοιπα
– Χρησιμοποιεί τα υπόλοιπα των κατανομών μνήμης
– Ο πυρήνας χρησιμοποιεί κρυφές μνήμες αντικειμένων
• Δείκτες προς πλακίδια με όμοια αντικείμενα
• Το πλακίδιο μπορεί να είναι άδειο, μισογεμάτο ή γεμάτο
• Ψάχνουμε αρχικά για μισογεμάτο πλακίδιο
• Αν δεν υπάρχει χρησιμοποιούμε άδειο πλακίδιο
• Κατανομή συνεχόμενης εικονικής μνήμης με vmalloc

77

Υλοποίηση μνήμης (8 από 10)


• Ο χώρος διευθύνσεων χωρίζεται σε περιοχές
– Συνεχόμενες σελίδες με την ίδια προστασία
– Αναφορές μεταξύ περιοχών δίνουν μοιραίο σφάλμα
– Οι σελίδες είναι 4 KB στον Pentium
• Με επέκταση φυσικής διεύθυνσης (PAE) είναι 4 MB
• Κάθε περιοχή περιγράφεται με δομή vm_area_struct
– Bit προστασίας, καρφιτσωμένη, προς τα πού μεγαλώνει
– Οι περιοχές μίας διεργασίας συνδέονται σε μία λίστα
– Αν είναι πάρα πολλές, η λίστα γίνεται δένδρο

78
Υλοποίηση μνήμης (9 από 10)
• Υλοποίηση αντιγραφής με την εγγραφή (copy on write)
– Μετά το fork οι διεργασίες δείχνουν στις ίδιες σελίδες
– Οι σελίδες σημειώνονται μόνο για ανάγνωση
– Οι περιοχές σημειώνονται για ανάγνωση/εγγραφή
– Σε απόπειρα εγγραφής ο πυρήνας αντιγράφει τη σελίδα
• H vm_area_struct δείχνει και στον χώρο στο δίσκο
– Ο εκτελέσιμος κώδικας δείχνει στο εκτελέσιμο αρχείο
– Τα χαρτογραφημένα αρχεία δείχνουν στο αρχείο
– Στοίβα και σωρός δείχνουν στην περιοχή ανταλλαγής

79

Υλοποίηση μνήμης (10 από 10)


• Για κάθε χώρο διευθύνσεων μία δομή mm_struct
– Πληροφορίες για τα τμήματα εικονικής μνήμης
– Χρήστες που μοιράζονται το χώρο διευθύνσεων
– Δείκτες προς τις δομές vm_area_struct
– Οι δομές οργανώνονται σε διπλά συνδεδεμένη λίστα
• Κατάλληλη για σάρωση όλου του χώρου διευθύνσεων
– Επιπλέον οργανώνονται σε δένδρο κόκκινο-μαύρο
• Κατάλληλη για άμεσο εντοπισμό περιοχής μνήμης
– Κάθε λειτουργία χρησιμοποιεί την κατάλληλη μέθοδο

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)

• Ενεργός/ανενεργός και αναφορά/όχι αναφορά


– Οι ανενεργές και μη αναφερθείσες είναι οι καλύτερες
– Μπορούν να επιλεγούν και άλλες σελίδες (αναγόμωση)
• Ο pdflush γράφει λερωμένες σελίδες στο δίσκο
– Πολλά νήματα για επικάλυψη των εγγραφών στο δίσκο
– Εκτελείται περιοδικά ή όταν υπάρχει έλλειψη μνήμης

86
Είσοδος / έξοδος στο Linux

Θεμελιώδεις έννοιες Ε/Ε (1 από 2)


• Οι συσκευές αντιστοιχούν σε ειδικά αρχεία
– Συνήθως βρίσκονται στον κατάλογο /dev
• Παράδειγμα: /dev/sda (πρώτος δίσκος), /dev/lp (εκτυπωτής)
– Χρήση ίδιων κλήσεων και εντολών με τα αρχεία
• Παράδειγμα: cp file /dev/lp (εκτύπωση file)
• Κάθε συσκευή χαρακτηρίζεται από δύο αριθμός
– Μείζων (major) αριθμός: επιλέγει οδηγό συσκευής
– Ελάσσων (minor) αριθμός: επιλέγει συσκευή του οδηγού
– Οδηγοί για πολλαπλές συσκευές
• Τερματικό: πληκτρολόγιο και οθόνη

88
Θεμελιώδεις έννοιες Ε/Ε (2 από 2)
• Ειδικά αρχεία μπλοκ (block special files)
– Αποτελούνται από ακολουθία αριθμημένων μπλοκ
– Διαβάζουμε/γράφουμε κάθε μπλοκ ξεχωριστά
• Ειδικά αρχεία χαρακτήρων (character special files)
– Παράγουν ή καταναλώνουν ρεύματα χαρακτήρων
– Δεν μπορούμε να αναζητήσουμε τυχαίες θέσεις
• Έλεγχος ειδικών αρχείων χαρακτήρων
– Το τερματικό αναγνωρίζει ειδικούς χαρακτήρες
– Ο χρήστης μπορεί να επιλέξει τους δικούς του
• Χρήση ειδικής κλήσης συστήματος

89

Δικτύωση (1 από 3)

• Βασική αφαίρεση: υποδοχή επικοινωνίας


– Προέρχεται από το Berkeley UNIX
– Η υποδοχή είναι ένα άκρο επικοινωνίας
– Οι διεργασίες επικοινωνούν μέσω υποδοχών
– Η δημιουργία τους επιστρέφει περιγραφέα αρχείου

90
Δικτύωση (2 από 3)
• Αξιόπιστο συνδεσμοστρεφές ρεύμα byte
– Παρόμοιο με αγωγούς αλλά μεταξύ μηχανών
– Συνήθως βασίζεται στο TCP
• Αξιόπιστο συνδεσμοστρεφές ρεύμα πακέτων
– Παρόμοια με ρεύμα byte αλλά με όρια πακέτων
– Μπορεί να υλοποιηθεί με το (πειραματικό) SCTP
• Αναξιόπιστη μετάδοση πακέτων
– Απευθείας μετάδοση πακέτων στο δίκτυο
– Η εφαρμογή ασχολείται με την αξιοπιστία
– Συνήθως βασίζεται σε UDP

91

Δικτύωση (3 από 3)
• Κάθε υποδοχή πρέπει να έχει μία διεύθυνση
– Συνήθως: τομέας διευθύνσεων Διαδικτύου
– Αριθμοί 32 bit για τα άκρα (διευθύνσεις IP)
– Αριθμοί 16 bit για την εφαρμογή (θύρες TCP ή UDP)
– Απόδοση διεύθυνση με την κλήση bind
– Αναμονή για αίτηση με listen
– Αίτηση σύνδεσης με connect
– Αποδοχή αίτησης με accept
– Τερματισμός σύνδεσης με close

92
Κλήσεις Ε/Ε

• Ίδιες κλήσεις με αυτές των αρχείων


• Επιπλέον κλήσεις ελέγχου για ειδικές λειτουργίες
– Παλιότερα κάθε συσκευή δεχόταν κλήσεις ioctl
– Οι κλήσεις αυτές διέφεραν από σύστημα σε σύστημα
– Στο POSIX ορίστηκαν γενικές κλήσεις βιβλιοθήκης
• Ορισμός/ανάγνωση ταχύτητας τερματικού
• Ορισμός/ανάγνωση παραμέτρων τερματικών

93

Υλοποίηση Ε/Ε (1 από 5)

• Προσπέλαση συσκευών μέσω ειδικών αρχείων


– Διαβάζονται ο μείζων και ο ελάσσων αριθμός συσκευής
– Διακρίνουμε αν η συσκευή είναι μπλοκ ή χαρακτήρων
– Ο μείζων αριθμός δείχνει (κατακερματισμός) σε μία δομή
• Η δομή δείχνει στις μεθόδους ανοίγματος, ανάγνωσης, εγγραφής
• Οι διαδικασίες καταχωρούνται με την φόρτωση του οδηγού
– Ο ελάσσων αριθμός χρησιμοποιείται ως παράμετρος

94
Υλοποίηση Ε/Ε (2 από 5)
• Οι οδηγοί αποτελούνται από δύο τμήματα
– Και τα δύο εκτελούνται σε κατάσταση πυρήνα
– Το άνω μέρος εκτελείται για λογαριασμό του καλούντα
– Το κάτω μέρος αλληλεπιδρά με τη συσκευή
• Διασύνδεση οδηγού-πυρήνα
– Ο πυρήνας διαθέτει σύνολο κλήσεων στις συσκευές
– Κατανομή μνήμης, έλεγχος DMA, χρονόμετρα κλπ
• Υποσύστημα χειρισμού ειδικών αρχείων μπλοκ
– Αξιοποιεί κρυφή μνήμη (cache) για μπλοκ και σελίδες
– Πάνω τους βρίσκεται το γενικό (generic) επίπεδο μπλοκ

95

Υλοποίηση Ε/Ε (3 από 5)

• Υποσύστημα χειρισμού ειδικών αρχείων μπλοκ


– Πρώτα ελέγχεται αν τo μπλοκ είναι στην κρυφή μνήμη
– Αλλιώς διαβάζεται και προστίθεται στην κρυφή μνήμη
• Αντικατάσταση μπλοκ με τον αλγόριθμο PFRA

96
Υλοποίηση Ε/Ε (4 από 5)
• Υποσύστημα χειρισμού ειδικών αρχείων μπλοκ
– Και οι εγγραφές αποθηκεύονται στην κρυφή μνήμη
– Ο δαίμονας pdflush γράφει μπλοκ περιοδικά στο δίσκο
– Χρονοπρογραμματιστής ελαχιστοποίησης αναζητήσεων
• Στη βασική του μορφή είναι αλγόριθμος ανελκυστήρα
• Αρχικά ταξινομούνται οι αιτήσεις με τη σειρά
• Μετά συγχωνεύονται οι γειτονικές αιτήσεις
– Χρήση δύο πρόσθετων λιστών για αποφυγή λιμοκτονίας
• Αναγνώσεις και εγγραφές ταξινομημένες κατά προθεσμία
• Μετά από κάποιο όριο καθυστέρησης, εξυπηρετούνται πρώτες

97

Υλοποίηση Ε/Ε (5 από 5)


• Ανεπεξέργαστα αρχεία μπλοκ (raw block files)
– Άμεση προσπέλαση χωρίς σύστημα αρχείων
– Χρησιμοποιούνται για σελιδοποίηση και συντήρηση
• Υποσύστημα χειρισμού ειδικών αρχείων χαρακτήρων
– Δεν χρησιμοποιείται κρυφή μνήμη (δεν έχει νόημα)
– Χρήση προαιρετικών κανόνων γραμμής (line disciplines)
• Υποσύστημα χειρισμού συσκευών δικτύου
– Παρόμοιες (αλλά όχι ίδιες) με συσκευές χαρακτήρων
– Παράγουν και καταναλώνουν πακέτα με κεφαλίδες
– Χρήση δομών προσωρινής μνήμης υποδοχής (skbuff)

98
Υπομονάδες
• Στο UNIX οι οδηγοί συσκευών συνδέονται στατικά
• Το Linux κάνει (και) για προσωπικούς υπολογιστές
• Φορτώσιμες υπομονάδες (loadable modules)
– Κώδικας που φορτώνεται κατά την εκτέλεση στον πυρήνα
• Οδηγοί συσκευών, συστήματα αρχείων, πρωτόκολλα δικτύου
– Κατά τη φόρτωση οι υπομονάδες επανατοποθετούνται
– Ελέγχεται η διαθεσιμότητα των πόρων
– Ενεργοποιούνται τα κατάλληλα διανύσματα διακοπών
– Ενημερώνεται ο κατάλληλος πίνακας οδηγών
– Τέλος ο οδηγός προετοιμάζει τη συσκευή

99

Σύστημα αρχείων στο Linux


Θεμελιώδεις έννοιες αρχείων (1 από 6)

• Στο Linux έχουμε πολλά συστήματα αρχείων


– Αρχικά χρησιμοποιήθηκε το σύστημα του MINIX
• Παρόμοιο με UNIX Version 7 (14 χαρακτήρες, 64 MB)
– Το σύστημα ext επέτρεπε 255 χαρακτήρες, 2 GB
• Ήταν όμως πιο αργό από το σύστημα του MINIX
– Το σύστημα ext2 ήταν το πρώτο «καλό» σύστημα
• Εξελίχθηκε σε ext3/ext4
– Υποστηρίζονται και πολλά άλλα συστήματα
• UFS, NFS, FAT, NTFS, ISO9660, …

101

Θεμελιώδεις έννοιες αρχείων (2 από 6)

• Βασική δομή αρχείων στο Linux


– Τα αρχεία είναι απλώς ακολουθίες από byte
– Ονόματα έως 255 χαρακτήρες
• Επιτρέπονται όλοι οι χαρακτήρες εκτός του NUL
• Μπορεί να χρησιμοποιηθεί και η τελεία
– Το σύστημα δεν αναγνωρίζει προεκτάσεις
• Πολλά προγράμματα όμως τις αναμένουν
• Τα αρχεία ομαδοποιούνται σε καταλόγους
– Και οι κατάλογοι αποθηκεύονται σαν αρχεία

102
Θεμελιώδεις έννοιες αρχείων (3 από 6)

• Η ρίζα του συστήματος καταλόγων είναι το /


– Το / χρησιμοποιείται και για διαχωρισμό καταλόγων
– Οι βασικοί κατάλογοι είναι (σχετικά) τυποποιημένοι
– Κάθε διεργασία έχει τρέχοντα κατάλογο εργασίας
– Απόλυτες και σχετικές διαδρομές
– Οι κατάλογοι περιέχουν ειδικές καταχωρίσεις . και ..

103

Θεμελιώδεις έννοιες αρχείων (4 από 6)

• Σύνδεσμοι (links) προς αρχεία/καταλόγους


– Δείκτες προς άλλα αρχεία/καταλόγους
• Ενοποίηση συστημάτων αρχείων
– Μπορεί να έχουμε πολλά διαμερίσματα και δίσκους
– Σε κάθε διαμέρισμα υπάρχει χωριστό σύστημα αρχείων

104
Θεμελιώδεις έννοιες αρχείων (5 από 6)

• Ενοποίηση συστημάτων αρχείων


– Στο MS-DOS κάθε σύστημα είναι ανεξάρτητο
• Παράδειγμα: a:\command.com ή c:\command.com
– Στο Linux όλα τα συστήματα γίνονται ένα δένδρο
• Η ρίζα του ενός αναρτάται σε έναν κατάλογο του άλλου

105

Θεμελιώδεις έννοιες αρχείων (6 από 6)

• Κλείδωμα (locking)
– Καθορίζεται το αρχείο, το πρώτο byte και το πλήθος byte
– Κοινόχρηστα κλειδώματα και αποκλειστικά κλειδώματα

106
Κλήσεις αρχείων (1 από 5)

• Κλήσεις που αφορούν μεμονωμένα αρχεία


– Δημιουργία και άνοιγμα αρχείου για εγγραφή (creat)
– Άνοιγμα αρχείου για ανάγνωση ή/και εγγραφή (open)
• Επιστρέφουν περιγραφέα αρχείου για τις επόμενες κλήσεις
– Οι περιγραφείς 0, 1 και 2 είναι ανοιχτοί από την αρχή
107

Κλήσεις αρχείων (2 από 5)


• Κλήσεις που αφορούν μεμονωμένα αρχεία
– Κλείσιμο του αρχείου όταν δεν χρειάζεται (close)
– Ανάγνωση (read) και εγγραφή δεδομένων (write)
• Δίνεται περιοχή μνήμης για τα δεδομένα και μήκος
• Κάθε αρχείο έχει έναν δείκτη τρέχουσα θέσης
• Ο δείκτης αλλάζει μετά από κάθε ανάγνωση / εγγραφή
– Ρητή μετακίνηση δείκτη τρέχουσας θέσης (lseek)
• Ως προς την αρχή, το τέλος ή την τρέχουσα θέση
– Κλείδωμα αρχείων και λειτουργίες ελέγχου (fcntl)

108
Κλήσεις αρχείων (3 από 5)
• Δημιουργία αγωγών (pipe)
– Οι αγωγοί μοιάζουν με προσωρινά αρχεία
– Επιστρέφονται δύο περιγραφείς
• Ένας κατάλληλος για εγγραφή στον αγωγό
• Ένας κατάλληλος για ανάγνωση από τον αγωγό
• Μεταδεδομένα αρχείων
– Για κάθε αρχείο το σύστημα καταγράφει πληροφορίες
– stat: διαβάζει πληροφορίες αρχείου με βάση το όνομα
– fstat: διαβάζει πληροφορίες ανοιχτού αρχείου (μέσω fd)

109

Κλήσεις αρχείων (4 από 5)

• Μεταδεδομένα αρχείων
– Πληροφορίες που επιστρέφουν οι stat/fstat
• Στοιχεία του αρχείου, προστασία
• Στοιχεία χρήστη / ομάδας, χρόνοι

110
Κλήσεις αρχείων (5 από 5)

• Κλήσεις που αφορούν καταλόγους


– Δημιουργία (mkdir) και διαγραφή καταλόγων (rmdir)
– Δημιουργία (link) και διαγραφή συνδέσμων (unlink)
– Αλλαγή τρέχοντος καταλόγου (chdir)
– Άνοιγμα (opendir), κλείσιμο (closedir), αρχή (rewinddir)
– Διάβασμα επόμενης εγγραφής καταλόγου (readdir)

111

Υλοποίηση αρχείων (1 από 13)

• Το Εικονικό Σύστημα Αρχείων (VFS)


– Βασικές αφαιρέσεις για όλα τα συστήματα αρχείων
• Υπερμπλόκ (superblock): βασικές πληροφορίες συστήματος
• Κόμβοι i (i-nodes): στοιχεία ενός αρχείου ή (συσκευής)
• Καταχώριση καταλόγου (dentry): στοιχεία ενός καταλόγου
• Δομή αρχείου (file): στοιχεία ενός ανοιχτού αρχείου
• Το σύστημα αρχείων μεταφράζει τις δομές του σε αυτές του VFS
112
Υλοποίηση αρχείων (2 από 13)

• Το σύστημα αρχείων ext2


– Το μπλοκ 0 (boot) δεν χρησιμοποιείται από το ext2
– Τα υπόλοιπα διαιρούνται σε ανεξάρτητες ομάδες
– Κάθε ομάδα περιέχει μία σειρά από δομές
– Υπερμπλόκ: βασικές πληροφορίες όλης της διαμέρισης
– Περιγραφέας ομάδας: βασικές πληροφορίες ομάδας
– Χάρτες bit για ελεύθερα μπλοκ και κόμβους i
– Κόμβοι i και μπλοκ δεδομένων

113

Υλοποίηση αρχείων (3 από 13)


• Τοποθετούμε γειτονικά αρχεία στην ίδια ομάδα
– Αρχεία στην ίδια ομάδα με τον γονικό τους κατάλογο
– Μπλοκ αρχείων στην ίδια ομάδα με τον κόμβο i
– Προκατανομή 8 μπλοκ όποτε μεγαλώνει ένα αρχείο
• Άνοιγμα αρχείων
– Αρχίζουμε από κόμβο i τρέχοντα καταλόγου ή ρίζας
• Κόμβος i ρίζας: σε προκαθορισμένο σημείο στο δίσκο
• Κόμβος i τρέχοντα καταλόγου: σε περιγραφέα διεργασίας
– Από εκεί διαβάζουμε τα δεδομένα του καταλόγου
– Αυτά δείχνουν σε έναν νέο κόμβο i, και ούτω καθεξής

114
Υλοποίηση αρχείων (4 από 13)

• Δομή αρχείων καταλόγων


– Ακέραιο πλήθος μπλοκ δίσκου (συμπλήρωση με NUL)
– Συνεχόμενες αλλά όχι ταξινομημένες εγγραφές
– Αριθμός κόμβου i, μήκος, τύπος, μήκος ονόματος, όνομα

115

Υλοποίηση αρχείων (5 από 13)

• Δομή αρχείων καταλόγων


– Η αναζήτηση μπορεί να πάρει αρκετό χρόνο
– Το Linux χρησιμοποιεί κρυφή μνήμη καταλόγων
• Δομή κόμβων i
– Περιέχουν τουλάχιστον τα πεδία των stat/fstat

116
Υλοποίηση αρχείων (6 από 13)
• Δομή κόμβων i
– Περιέχουν επιπλέον δείκτες προς τα μπλοκ του αρχείου
– Πρόσθετα πεδία για καταλόγους και ειδικά αρχεία
• Ο πυρήνας διατηρεί έναν πίνακα ανοιχτών κόμβων i
• Υλοποίηση των πράξεων ανάγνωσης/εγγραφής
– Οι κλήσεις περιέχουν τον περιγραφέα του αρχείου
– Τι περιέχει ο πίνακας περιγραφέων της διεργασίας;
– Έστω ότι περιέχει έναν δείκτη στον πίνακα κόμβων i
• Αν ο δείκτης τρέχουσας θέσης περιέχεται στον πίνακα κόμβων i;
• Τότε δύο διεργασίες δεν μπορούν να διαβάζουν ανεξάρτητα

117

Υλοποίηση αρχείων (7 από 13)


• Υλοποίηση πράξεων ανάγνωσης/εγγραφής
– Έστω ότι ο δείκτης είναι σε πίνακα περιγραφέων
• Δεν μπορεί να συγχρονιστεί η θυγατρική με τη μητρική
• Έστω ένα σενάριο s με τις εντολές p1 και p2
• Έστω ότι εκτελούμε s > x
• H p2 πρέπει να βάλει την έξοδό της μετά από την p1
• Άρα πρέπει να μοιράζονται το δείκτη θέσης!
– Χρήση πίνακα περιγραφής ανοιχτών αρχείων

118
Υλοποίηση αρχείων (8 από 13)
• Πίνακας περιγραφής ανοιχτών αρχείων
– Ο πίνακας περιγραφέων δείχνει σε αυτόν
– Εκεί αποθηκεύεται ο δείκτης θέσης του αρχείου
– Ο πίνακας αυτός δείχνει στον πίνακα κόμβων i
– Έστω ότι δημιουργούμε τις p1 και p2 με fork
• Ο πίνακας περιγραφέων αντιγράφεται
• Δείχνουν στην ίδια θέση του πίνακα ανοικτών αρχείων
• Δύο τυχαίες διεργασίες δείχνουν διαφορετικές θέσεις

119

Υλοποίηση αρχείων (9 από 13)

Πίνακες αρχείων στο Linux


120
Υλοποίηση αρχείων (10 από 13)
• Εντοπισμός των μπλοκ ενός αρχείου
– Οι 12 πρώτοι δείκτες δείχνουν σε μπλοκ του αρχείου
– Ο δείκτης 13 δείχνει σε ένα απλό έμμεσο μπλοκ
• Περιέχει πολλούς δείκτες προς τα επόμενα μπλοκ του
αρχείου
– Ο δείκτης 14 δείχνει σε ένα διπλό έμμεσο μπλοκ
• Περιέχει πολλούς δείκτες προς απλά έμμεσα μπλοκ
– Ο δείκτης 15 δείχνει σε ένα τριπλό έμμεσο μπλοκ
• Περιέχει πολλούς δείκτες προς διπλά έμμεσα μπλοκ
– Μπορούν έτσι να υποστηριχθούν τεράστια αρχεία

121

Υλοποίηση αρχείων (11 από 13)


• Το σύστημα αρχείων ext3
– Το ext2 γράφει τα λερωμένα μπλοκ με καθυστέρηση
• Υπάρχει κίνδυνος απώλειας δεδομένων
– Το ext3 αντιμετωπίζει το πρόβλημα με ημερολόγιο
• Οι λειτουργίες γράφονται άμεσα σε εγγραφές ημερολογίου
• Στη συνέχεια γράφονται οι πραγματικές αλλαγές στο δίσκο
• Στο τέλος διαγράφονται οι εγγραφές ημερολογίου
– Το ext3 είναι απόλυτα συμβατό με το ext2
• Ίδια διάταξη και δομές, συν το ημερολόγιο
– Ημερολόγιο: κυκλική προσωρινή μνήμη

122
Υλοποίηση αρχείων (12 από 13)
• Συσκευή μπλοκ ημερολογίου (JBD)
– Η συσκευή JBD υποστηρίζει τρεις κύριες δομές
– Εγγραφή καταγραφής (log record)
• Mία λειτουργία που αλλάζει κάποιο μπλοκ στο δίσκο
– Χειριστήριο αδιαίρετης λειτουργίας (atomic op handle)
• Ομαδοποιεί μία σειρά σχετικών λειτουργιών
• Παράδειγμα: ένα write μπορεί να αλλάζει πολλά μπλοκ
– Συναλλαγή (transaction)
• Ομαδοποιεί πολλές αδιαίρετες λειτουργίες
• Όταν εκτελεστεί η συναλλαγή, διαγράφεται από τη JBD

123

Υλοποίηση αρχείων (13 από 13)


• Το σύστημα αρχείων /proc
– Κάθε διεργασία έχει κατάλογο στο σύστημα /proc
• Παράδειγμα: /proc/619 για τη διεργασία με PID 619
– Περιέχει αρχεία με στοιχεία για τη διεργασία
• Παράδειγμα: γραμμή διαταγής, περιβάλλον
– Οι πληροφορίες επιστρέφονται από τον πυρήνα
• Οι αναγνώσεις ανακατευθύνονται στον πυρηνα
– Αρχεία με άλλες πληροφορίες για το σύστημα
124
Δικτυακή αποθήκευση (1 από 4)

• Αρχιτεκτονική του NFS


– Κάθε μηχανή μπορεί να είναι διακομιστής ή/και πελάτης
– Διακομιστές: εξάγουν καταλόγους προς πρόσβαση
– Πελάτες: αναρτούν καταλόγους στο τοπικό τους δένδρο

125

Δικτυακή αποθήκευση (2 από 4)


• Πρωτόκολλα του NFS
– Διασφαλίζουν συμβατότητα πελατών και διακομιστών
• Πρωτόκολλο ανάρτησης καταλόγων
– Ο πελάτης στέλνει ένα μήνυμα ζητώντας έναν κατάλογο
– Ο διακομιστής επιστρέφει ένα χειριστήριο (file handle)
• Το χειριστήριο προσδιορίζει τον κατάλογο στο διακομιστή
– Ανάρτηση καταλόγων κατά την εκκίνηση
– Ανάρτηση καταλόγων όταν χρειαστούν
• Μπορούμε να έχουμε πολλούς διακομιστές
• Ο πρώτος που θα απαντήσει επιλέγεται για χρήση

126
Δικτυακή αποθήκευση (3 από 4)
• Πρωτόκολλο προσπέλασης
– Μηνύματα διαχείρισης καταλόγων και αρχείων
– Δεν υπάρχουν μηνύματα ανοίγματος / κλεισίματος
• Αντί για άνοιγμα αρχείου έχουμε μήνυμα lookup
• Επιστρέφει ένα χειριστήριο για το αρχείο
– Στα επόμενα μηνύματα ο πελάτης στέλνει το χειριστήριο
– Επιπλέον αναφέρει από πού θέλει να διαβάσει/γράψει
• Υλοποίηση του NFS
– Οι κόμβοι v του VFS δείχνουν σε κόμβους r του NFS
– Οι κόμβοι r περιέχουν χειριστήρια και δείκτες αρχείων

127

Δικτυακή αποθήκευση (4 από 4)

• Πελάτης: μηνύματα σε διακομιστή για δεδομένα


• Διακομιστής: επικοινωνεί με σύστημα αρχείων
128
Ασφάλεια στο Linux

Θεμελιώδεις έννοιες ασφάλειας (1 από 4)

• Κάθε χρήστης έχει μία ταυτότητα χρήστη (UID)


• Ομάδες χρηστών με ταυτότητα ομάδας (GID)
– Τα GID και UID είναι ακέραιοι (συνήθως 16 bit)
• Κάθε διεργασία διαθέτει το UID / GID του χρήστη της
• Κάθε αρχείο αναφέρει το UID / GID του δημιουργού του
– Δίνονται δικαιώματα χρήστη, ομάδας και άλλων
– Ανάγνωση/εγγραφή/εκτέλεση (rwx)
130
Θεμελιώδεις έννοιες ασφάλειας (2 από 4)

• Χρήστης με UID 0: υπερχρήστης (superuser)


– Ονομάζεται και βασικός χρήστης (root)
– Μπορεί να διαβάσει και να γράψει όλα τα αρχεία
– Οι διεργασίες του εκτελούν προνομιούχες κλήσεις
• Ίδιο μοντέλο δικαιωμάτων για καταλόγους
– Το δικαίωμα x σημαίνει αναζήτηση στον κατάλογο
• Ίδια δικαιώματα για ειδικά αρχεία συσκευών

131

Θεμελιώδεις έννοιες ασφάλειας (3 από 4)

• To bit προστασίας SETUID


– Η διεργασία έχει πραγματικό και ενεργό UID
– Αρχικά έχουν ίδια τιμή (το UID του χρήστη)
– Έστω εκτελέσιμο πρόγραμμα με ενεργό SETUID
• Με την εκτέλεση αλλάζει το UID της διεργασίας
• Η διεργασία παίρνει προσωρινά το UID του αρχείου
– Ένα πρόγραμμα μπορεί να ελέγχει και τα δύο UID

132
Θεμελιώδεις έννοιες ασφάλειας (4 από 4)

• To bit προστασίας SETUID


– Παράδειγμα: το passwd αλλάζει το συνθηματικό μας
• Το αρχείο με τα συνθηματικά ανήκει στον υπερχρήστη
• Το πρόγραμμα passwd έχει UID 0 και είναι SETUID
• Ο χρήστης προσωρινά γίνεται υπερχρήστης
• Εκτελεί όμως μόνο τον κώδικα του passwd
• Υπάρχει και bit προστασίας SETGID
– Δουλεύει όπως το SETUID για αλλαγή του GID
– Χρησιμοποιείται σπάνια όμως

133

Κλήσεις ασφάλειας (1 από 2)

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
– Νέα σχεδίαση που εξελίσσεται ως σήμερα

Ιστορία των Windows (2 από 2)

Ημερομηνίες κυκλοφορίας συστημάτων


8
MS-DOS (1 από 2)
• Λειτουργικό του πρώτου IBM PC
– Η IBM έφτιαξε τον PC πάνω στον 8088
– Ζήτησε από τη Microsoft τη γλώσσα BASIC
• Πολύ επιτυχημένη σε μηχανές 8080 και Z-80
– Το ΛΣ θα προερχόταν από την Digital Research
• Παραλλαγή του CP-M για 8088
– Τελικά η IBM στράφηκε πάλι στην Microsoft
• Η Microsoft αγόρασε ένα ΛΣ και το μετέφερε στον PC

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

Windows σε MS-DOS (2 από 2)


• Windows 95
– Πολλές νέες δυνατότητες
• Εικονική μνήμη
• Πραγματικός πολυπρογραμματισμός
• Διεπαφές προγραμματισμού 32 bit
– Περιορισμένη ασφάλεια λόγω MS-DOS
• Μικρή διάκριση χρήστη / συστήματος
– Εξελίχθηκε σε Windows 98 και Me

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)

• Windows Vista: νέα αλλαγή διεπαφής


– Ενίσχυση ασφάλειας και απόδοσης
– Μεταγενέστερη έκδοση διακομιστών (Server 2008)
• Ο πυρήνας είναι ο ίδιος
– Τα Windows 7/Server 2008R2 είναι πολύ παρόμοια

19

Windows NT (8 από 8)

• Θέματα με τα Windows Vista


– Πολύ φιλόδοξο εγχείρημα για να πετύχει
• 70 εκατομμύρια γραμμές κώδικα!
• Στην πορεία άλλαξαν βασικά στοιχεία σχεδίασης
– 1600 βιβλιοθήκες DLL και 400 EXE στο system32
• Και όλα τα προγράμματα από προηγούμενες εκδόσεις
– Έμφαση σε απόδοση και πρόσθετες λειτουργίες

20
Προγραμματισμός

Δομή API (1 από 5)

• Κλήσεις συστήματος των Windows


– Το βασικό επίπεδο είναι ο πυρήνας (ntoskrnl.exe)
– Χρησιμοποιείται μόνο εσωτερικά στη Microsoft
22
Δομή API (2 από 5)
• API των Windows
– Ορισμένα API υλοποιούνται από DLL
– Άλλα API είναι διεργασίες επιπέδου χρήστη
• Χρήση RPC για κλήση τους

• Υποσυστήματα - προσωπικότητες
– Αρχικά είχαμε OS/2, POSIX και Win32
• Το OS/2 καταργήθηκε, το POSIX σχεδόν
• Η βασική προσωπικότητα είναι το Win32

23

Δομή API (3 από 5)

• Δομή υποσυστήματος
– Διεργασία και βιβλιοθήκες υποσυστήματος
– Υποστήριξη χρόνου εκτέλεσης και πυρήνα
24
Δομή API (4 από 5)
• Συστατικά υποσυστήματος
– Οι βιβλιοθήκες έχουν κλήσεις υψηλού επιπέδου
– Τοπικές κλήσεις προς διεργασία υποσυστήματος
• Διεκπεραίωση LPC μέσω του πυρήνα
– Η CreateProcess εντοπίζει το υποσύστημα
• Εκκίνηση διεργασίας υποσυστήματος (αν χρειάζεται)
• Το υποσύστημα φορτώνει τη διεργασία
– Η διεργασία υποσυστήματος καλεί το NT API
25

Δομή API (5 από 5)


• Υποσύστημα Win32
– Υλοποιείται από τη διεργασία csrss.exe
• Ξεκινάει αυτόματα από τη διεργασία smss.exe

• Προγραμματιστικά μοντέλα
– Το Win32 είναι πολύ περίπλοκο
– Τα .NET/WinFX είναι πιο χρηστικά
• Κρύβουν το Win32 πίσω από βιβλιοθήκη τάξεων
• Προσθέτουν τις δυνατότητες του CLR

26
Το NT API (1 από 4)

• Κλήσεις συστήματος του NT


– Χρησιμοποιούνται σε πολύ χαμηλό επίπεδο
• Υπηρεσίες, υποσυστήματα και οδηγοί πυρήνα
– Ενεργούν σε αντικείμενα του πυρήνα
• Απόκρυψη υλοποίησης αλλά όχι κληρονομικότητα

27

Το NT API (2 από 4)
• Αντικείμενα του NT API
– Η δημιουργία τους επιστρέφει ένα χειριστήριο
– Το χειριστήριο γενικά είναι ιδιωτικό
• Μεταβιβάζεται μόνο με προστατευμένο τρόπο
– Κάθε χειριστήριο έχει περιγραφέα ασφάλειας
• Περιγράφει τις επιτρεπόμενες λειτουργίες
– Τα αντικείμενα έχουν τύπο, λειτουργίες και μνήμη
• Ουσιαστικά παρέχουν διεπαφές χαμηλού επιπέδου

28
Το NT API (3 από 4)

• Ορισμένες κλήσεις του NT API


– Δημιουργία διεργασίας με χειριστήριο μνήμης
– Δημιουργία νήματος με χειριστήριο διεργασίας
– Μπορούμε να επηρεάσουμε άλλες διεργασίες
• Αρκεί να έχουμε χειριστήριο προς αυτές

29

Το NT API (4 από 4)
• Χειριστήρια και ονόματα
– Κεντρικός διαχειριστής αντικειμένων του NT
– Υποστηρίζει χώρο ονομάτων αντικειμένων
• Από το όνομα μπορούμε να πάρουμε χειριστήριο
• Ιεραρχική δομή καταλόγου για αντικείμενα
– Ο χώρος ονομάτων δημιουργείται στη μνήμη
• Συμπληρώνεται όπως εκτελείται το σύστημα
• Μόνιμα αντικείμενα για συγχρονισμό και κοινή μνήμη

30
Το Win32 API (1 από 5)

• Το δημόσιο API των Windows


– Υπερκαλύπτει τη λειτουργικότητα του NT API

31

Το Win32 API (2 από 5)


• Μετατροπή από Win32 σε NT
– Μετατροπή ονομάτων συσκευών
– Μετατροπή ονομάτων αρχείων σε χειριστήρια
– Μετατροπή ANSI σε Unicode
• Windows σε Windows (WOW)
– Απεικόνιση κλήσεων για συμβατότητα
– WOW32: εκτέλεση κώδικα 16 bit σε 32 bit
– WOW64: εκτέλεση κώδικα 32 bit σε 64 bit

32
Το Win32 API (3 από 5)
• Φιλοσοφία του Win32
– Συνεχής προσθήκη λειτουργικότητας
– Πολλοί τρόποι να κάνεις το ίδιο πράγμα
– Ανάμιξη κλήσεων χαμηλού και υψηλού επιπέδου
• Χαρτογράφηση αρχείων στη μνήμη
– Δέσμευση διευθύνσεων για μεταγενέστερη χρήση
– Δημιουργία χαρτογραφήσεων αρχείων ή μνήμης
• Μπορούν να μοιράζονται από διεργασίες
– Αντιστοίχιση όψεων χαρτογραφήσεων σε διευθύνσεις

33

Το Win32 API (4 από 5)


• Ιδιαιτερότητες συστήματος αρχείων
– Πολλά ρεύματα δεδομένων ανά αρχείο
– Κρυπτογράφηση αρχείων και μονάδων
– Ενοποίηση μονάδων δίσκου
– Ενημέρωση σε αλλαγές αρχείων/καταλόγων
• Ασύγχρονο μοντέλο εισόδου / εξόδου
– Διάφοροι μέθοδοι συγχρονισμού μετά την Ε/Ε
– Δυνατότητα χρήσης σύγχρονης Ε/Ε

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)

Κυψέλες των Windows


37

Μητρώο (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

Αφαίρεση υλικού (2 από 2)


• Ε/Ε με θύρες ή με χαρτογράφηση στη μνήμη;
– Το HAL παρέχει ρουτίνες WRITE_PORT_UCHAR
– Απεικονίζονται σε κατάλληλες λειτουργίες
– Ο οδηγός συσκευής χρησιμοποιεί τις ρουτίνες αυτές
• Εμφάνιση συσκευών σε κοινό χώρο διευθύνσεων
• Ενιαίος χειρισμός διακοπών και DMA
• Διαχείριση ρολογιών και χρονομέτρων
• Υλοποίηση κλειδωμάτων περιστροφής

44
Επίπεδο πυρήνα
• Αφαιρέσεις για διαχείριση του επεξεργαστή
– Διακοπές, παγίδες και εξαιρέσεις
– Νήματα: χρονοπρογραμματισμός, συγχρονισμός
• Οι δομές δεδομένων υλοποιούνται στο εκτελεστικό
• Επιλογή επόμενου νήματος προς εκτέλεση
• Αλλαγή συμφραζομένων αν χρειάζεται
– Αντικείμενα ελέγχου (control)
– Αντικείμενα διεκπεραίωσης (dispatcher)
45

Καθυστερημένες κλήσεις (1 από 2)


• Αντικείμενα ελέγχου του πυρήνα
– Νήματα, διακοπές, χρονόμετρα, συγχρονισμός
– Αντικείμενα DPC και APC
• ISR: ρουτίνα εξυπηρέτησης διακοπής
– Εκτελείται με προτεραιότητα διακοπής 3 και άνω
– Υλοποιεί μόνο το κρίσιμο τμήμα της διακοπής
– Η υπόλοιπή επεξεργασία γίνεται μέσω DPC
• Προσθήκη αντικειμένου DPC σε ουρά επεξεργαστή

46
Καθυστερημένες κλήσεις (2 από 2)
• Καθυστερημένη κλήση διαδικασίας (DPC)
– Ολοκληρώνει την επεξεργασία μίας διακοπής
– Αντιστοιχεί σε διακοπή προτεραιότητας 2
• Εξυπηρετείται όταν τελειώσουν όλες οι άλλες ISR
• Η ISR επιπέδου 2 εκτελεί όλη την ουρά των DPC
– Παράδειγμα: πληκτρολόγιο
• Η ISR αντιγράφει τον κωδικό πλήκτρου
• Η DPC επεξεργάζεται τους κωδικούς αργότερα

47

Ασύγχρονες κλήσεις (1 από 2)


• Ασύγχρονη κλήση διαδικασίας (APC)
– Καλείται όταν ολοκληρωθεί η λειτουργία Ε/Ε
• Μπαίνει σε ουρά με αίτηση της DPC
• Η DPC εκτελείται σε όποιο νήμα είναι ενεργό
• Η APC εκτελείται για λογαριασμό του παραλήπτη
– Παρόμοια με χειριστή σημάτων στο UNIX
• Εκτελείται όμως σε επίπεδο πυρήνα
• Βλέπει τη μνήμη και του πυρήνα και του χρήστη

48
Ασύγχρονες κλήσεις (2 από 2)
• APC σε επίπεδο χρήστη
– Η εφαρμογή ορίζει την APC που επιθυμεί
– Στη συνέχεια μπλοκάρει σε Ε/Ε
– Όταν ολοκληρωθεί η Ε/Ε καλείται η APC
– Παρόμοια με επανάκληση από τον πυρήνα
• Χρήση APC από τον πυρήνα
– Παράδειγμα: ελεγχόμενος τερματισμός νημάτων
• Η APC παραδίδεται μόνο εκτός κρίσιμων περιοχών

49

Αντικείμενα διεκπεραίωσης (1 από 2)

• Αντικείμενο με δομή dispatcher_header


– Διάφορα αντικείμενα όπου έχουμε συγχρονισμό
• Σηματοφορείς, mutex, συμβάντα, χρονόμετρα
• Αλλά και αρχεία, διεργασίες, νήματα, θύρες IPC
– Σημαία κατάστασης, ουρά νημάτων σε αναμονή

50
Αντικείμενα διεκπεραίωσης (2 από 2)
• Αναμονή σε αντικείμενα διεκπεραίωσης
– Ενιαίος μηχανισμός για συγχρονισμό
• Όταν συμβεί κάτι, ξυπνάει το νήμα
– Κλήση WaitForMultipleObjects
• Επιτρέπει αναμονή σε πολλά χειριστήρια
• Δύο είδη αντικειμένων διεκπεραίωσης
– Γνωστοποίησης: ξυπνάνε όλα τα νήματα
– Συγχρονισμού: ξυπνάει μόνο το πρώτο νήμα

51

Εκτελεστικό επίπεδο (1 από 4)


• (Σχετικά) Φορητό τμήμα του λειτουργικού
– Βασίζεται στις υπηρεσίες του πυρήνα
– Αποτελείται από διάφορα συστατικά
• Διαχειριστής Ε/Ε, μνήμης, αντικειμένων
– Εκτελείται για λογαριασμό κάποιου νήματος
– Υπάρχουν και νήματα πυρήνα
• Νήμα που εκτελείται ανά δευτερόλεπτο
• Δεξαμενή νημάτων υψηλής προτεραιότητας

52
Εκτελεστικό επίπεδο (2 από 4)
• Διαχειριστής αντικειμένων
– Διαχείριση μνήμης αντικειμένων
• Μετρητές χρήσης αντικειμένων
– Χειριστήρια και ονόματα αντικειμένων
• Διαχειριστής Ε/Ε
– Βασικές υπηρεσίες συσκευών και οδηγών
• Υποστήριξη οδηγών επιπέδου χρήστη
– Συνεργασία με διαχειριστή PnP επιπέδου χρήστη
• Εντοπισμός και φόρτωση του κατάλληλο οδηγού

53

Εκτελεστικό επίπεδο (3 από 4)


• Διαχειριστής διεργασιών
– Διεργασία: μνήμη, νήματα και χειριστήρια
• Διαχειριστής μνήμης
– Εικονική μνήμη με σελιδοποίηση κατ’απαίτηση
– Υποστηρίζει και το αρχείο σελιδοποίησης
• Διαχειριστής κρυφής μνήμης
– Κρυφή μνήμη σελίδων από αρχεία
– Βασίζεται στην χαρτογράφηση αρχείων στη μνήμη

54
Εκτελεστικό επίπεδο (4 από 4)
• Ελεγκτής αναφορών ασφαλείας
– Υλοποιεί κεντρικά τους ελέγχους αναφορών
• Διαχειριστής διευθέτησης
– Υλοποιεί το μητρώο
• Τοπικές κλήσεις διαδικασιών (LPC)
– Επικοινωνία διεργασιών στο ίδιο σύστημα
• Χρήση και για τοπικές RPC
• Επικοινωνία βιβλιοθήκης με διεργασία υποσυστήματος

55

Οδηγοί συσκευών (1 από 2)


• Γενικός μηχανισμός επέκτασης πυρήνα
– Και τα συστήματα αρχείων είναι οδηγοί
• Κάθε συσκευή έχει μία στοίβα (device stack)
– Αποτελείται από ιδιωτικά αντικείμενα συσκευής
• Συνδέονται με οδηγούς κοινής χρήσης
• Ορισμένοι οδηγοί λειτουργούν ως φίλτρα
• Παράδειγμα: κρυπτογραφία, συμπίεση
• Οδηγός κλάσης (π.χ. USB) και μίνι θύρα (συσκευή)

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

Διαχειριστής αντικειμένων (1 από 3)


• Ενιαία διεπαφή διαχείρισης πόρων
– Αρχεία, διεργασίες, νήματα, …
• Δομές δεδομένων που παριστάνουν πόρους
• Δημιουργούνται δυναμικά στη μνήμη του πυρήνα
• Ακόμη και οι τύποι αντικειμένων είναι δυναμικοί
– Υποστήριξη χειριστηρίων και ονομάτων
• Τα χειριστήρια χρησιμοποιούνται στις κλήσεις
• Προαιρετικά μπορούμε να έχουμε και ονόματα

60
Διαχειριστής αντικειμένων (2 από 3)

• Δομή αντικειμένων
– Κοινή κεφαλίδα αντικειμένων
– Δεδομένα αντικειμένου
61

Διαχειριστής αντικειμένων (3 από 3)


• Μνήμη αντικειμένων
– Σελιδοποιήσιμη και μη σελιδοποιήσιμη
• Μη σελιδοποιήσιμη για χειριστές διακοπών
• Γενικά όπου δεν θέλουμε σφάλματα σελίδας
• Πεδίο χρέωσης (quota) στην κεφαλίδα
– Ο χρήστης έχει όρια χρεώσεων
• Μετρητής αναφορών στην κεφαλίδα
– Αποφυγή πρόωρης απελευθέρωσης αντικειμένου

62
Χειριστήρια (1 από 3)

• Χειριστήριο: αναφορά σε αντικείμενο πυρήνα


– Οι δείκτες είναι επικίνδυνοι
– Ο διαχειριστής αντικειμένων δημιουργεί αναφορές
– Κάθε διεργασία έχει πίνακα χειριστηρίων

63

Χειριστήρια (2 από 3)

• Πίνακες χειριστηρίων πολλών επιπέδων


– Για διεργασίες με πάρα πολλά χειριστήρια
• Χωριστός πίνακας για τον ίδιο τον πυρήνα
64
Χειριστήρια (3 από 3)
• Δημιουργία χειριστηρίων
– Η διεργασία εκτελεί κάποια κλήση Win32
– Τελικά εκτελείται μία κλήση συστήματος
– Παράγεται ένα χειριστήριο 64 bit
• Μπαίνει στον πίνακα χειριστηρίων της διεργασίας
• Ο χρήστης παίρνει τη θέση του χειριστηρίου (32 bit)
– Πρώτα 29 bit: δείκτης σε αντικείμενο
• Τα 3 τελευταία bit είναι σημαίες
– Επόμενα 32 bit: δικαιώματα στο αντικείμενο

65

Ονόματα αντικειμένων (1 από 10)


• Γιατί να έχουμε και ονόματα;
– Ευκολότερος καταμερισμός αντικειμένων
• Αλλιώς πρέπει να έχουμε χειριστήρια σε διεργασίες
– Διατήρηση αντικειμένων στη μνήμη
• Συσκευές και οδηγοί
– Μπορούμε να δίνουμε ονόματα σε αντικείμενα
– Ιεραρχικός χώρος ονομάτων
– Το αντικείμενο πρέπει να υποστηρίζει ονόματα
66
Ονόματα αντικειμένων (2 από 10)

• Διαδικασίες που ορίζει ένα αντικείμενο


– Επανακλήσεις από τον διαχειριστή αντικειμένων
– Διάκριση κλεισίματος και διαγραφής
67

Ονόματα αντικειμένων (3 από 10)


• Parse: επέκταση χώρου ονομάτων
– Ένα φύλλο της ιεραρχίας μπορεί να έχει parse
– Στην parse περνάμε το υπόλοιπο όνομα
• Παράδειγμα: αντικείμενα αρχείων
• Το φύλλο παριστάνει ένα σύστημα αρχείων
• Η parse χειρίζεται το όνομα του αρχείου
• Οδηγεί σε δημιουργία αντικειμένου αρχείου

• Γενικές κλήσεις για όλα τα αντικείμενα


68
Ονόματα αντικειμένων (4 από 10)

• Μέρος του χώρου ονομάτων των Windows


69

Ονόματα αντικειμένων (5 από 10)


• Χειριστήρια και δείκτες
– Κάθε αντικείμενο έχει δύο μετρητές αναφορών
– Κάθε χειριστήριο αντιστοιχεί σε έναν δείκτη
– Υπάρχουν και δείκτες χωρίς χειριστήρια
• Το αντικείμενο διατηρείται χωρίς αναφορές χρήστη
• Προβλήματα νημάτων με τα χειριστήρια
– Εύκολο να γίνουν σφάλματα
– Εκχώρηση χειριστηρίων με FIFO αντί για LIFO

70
Ονόματα αντικειμένων (6 από 10)

Παράδειγμα χρήσης αντικειμένου συσκευής

71

Ονόματα αντικειμένων (7 από 10)


• Δημιουργία αρχείου βήμα προς βήμα
– Κλήση CreateFile σε επίπεδο Win32
– Κλήση NtCreateFile στον πυρήνα
• Μετατροπή ονόματος σε μορφή NT (\??\...)
– Κλήση OpenObjectByName
• Το όνομα αντιστοιχεί σε αντικείμενο συσκευής
• Το αντικείμενο είναι φύλλο με διαδικασία parse
– Κλήση IopParseDevice με συσκευή και όνομα
72
Ονόματα αντικειμένων (8 από 10)
• Δημιουργία αρχείου βήμα προς βήμα
– Δημιουργία πακέτου αίτησης Ε/Ε (IRP)
– Αποστολή IRP στη στοίβα Ε/Ε
• Περνάει από φίλτρα, π.χ. αντιβιοτικό αρχείων
– Τελικά καλείται η NtfsCreateFile (για NTFS)
– Δημιουργία αντικειμένου αρχείου
– Αποστολή αντικειμένου στη στοίβα Ε/Ε
– Δημιουργία και επιστροφή χειριστηρίου στο χρήστη

73

Ονόματα αντικειμένων (9 από 10)

• Τύποι αντικειμένων Windows


– Μπορούν να προστεθούν νέοι

74
Ονόματα αντικειμένων (10 από 10)

• Τύποι αντικειμένων Windows (συνέχεια)

75

Επίπεδο χρήστη (1 από 3)


• Μέρος του ΛΣ είναι σε επίπεδο χρήστη
– Υποσυστήματα, DLL, υπηρεσίες χρήστη
• Υποσυστήματα περιβάλλοντος
– Επιτρέπουν διαφορετικές προσωπικότητες
– Τελικά μόνο η προσωπικότητα Win32 επιβίωσε
• Βιβλιοθήκες δυναμικής σύνδεσης (DLL)
– Επιτρέπουν καταμερισμό κώδικα
– Κίνδυνος από διαφορές στις εκδόσεις

76
Επίπεδο χρήστη (2 από 3)
• Υλοποίηση DLL
– Ο μεταγλωττιστής δεν εισάγει άμεσες κλήσεις
• Παραγωγή Πίνακα Διευθύνσεων Εισαγωγής (IAT)
– Συμπλήρωση IAT με τη φόρτωση του κώδικα
• Δημιουργία γράφου εξαρτήσεων των DLL
• Εκτέλεση κώδικα αρχικοποίησης του DLL
• Κίνδυνος αδιεξόδου λόγω κυκλικών αναφορών
– Δυνατότητα συνύπαρξης εκδόσεων DLL

77

Επίπεδο χρήστη (3 από 3)


• Υπηρεσίες επιπέδου χρήστη
– Συμπληρώνουν τον πυρήνα
• Παράδειγμα: lsass.exe για πιστοποίηση ταυτότητας
– Σημαντικό κόστος χρήσης
• Μεταγωγή συμφραζομένων δύο φορές
• Δύσκολη πρόσβαση στη μνήμη του χρήστη
– Δυνατότητα εκτέλεσης στην ίδια διεργασία
• Η svchost εκτελεί πολλές υπηρεσίες συστήματος
• Εκτελούνται με τα ίδια προνόμια και μοιράζονται νήματα

78
Διεργασίες και νήματα

Έννοιες διεργασιών (1 από 5)


• Διεργασίες: αποδέκτες προγραμμάτων
– Εικονικός χώρος μνήμης, χειριστήρια, νήματα
– Μπλοκ περιβάλλοντος διεργασίας (PEB)
• Λίστα φορτωμένου κώδικα
• Περιβάλλον, κατάλογος, σωροί
• Νήματα: χρονοπρογραμματισμός
– Στοίβα πυρήνα και χρήστη
– Μπλοκ περιβάλλοντος νήματος (TEB)
• Τοπική αποθήκευση νήματος

80
Έννοιες διεργασιών (2 από 5)
• Κοινόχρηστα δεδομένα χρήστη
– Κοινή σε πυρήνα και όλες τις διεργασίες
– Μόνο ο πυρήνας την γράφει
• Πληροφορίες ώρας, έκδοσης, φυσικής μνήμης

• Διεργασίες
– Ο δημιουργός έχει χειριστήριο για τη διεργασία
• Δυνατότητα αλλαγής μνήμης, αντιγραφής χειριστηρίων
• Ρητός χειρισμός διεργασίας σε αντίθεση με τη fork()

81

Έννοιες διεργασιών (3 από 5)

• Εργασίες (jobs)
– Ομαδοποίηση διεργασιών σε εργασίες
– Χρήση για κοινή διαχείριση πόρων
• Κατάλληλες για επεξεργασία δέσμης

82
Έννοιες διεργασιών (4 από 5)

• Ίνες (fibers)
– Τα νήματα απεικονίζονται σε ίνες
– Αλλαγή ίνας σε επίπεδο χρήστη
• Ο πυρήνας και οι βιβλιοθήκες τις αγνοούν
• Χρήση για μεταφορά κώδικα από άλλα συστήματα

83

Έννοιες διεργασιών (5 από 5)


• Νήματα
– Ίδιος χώρος αναγνωριστικών με διεργασίες (!)
– Χρήση στοίβας πυρήνα σε κλήσεις συστήματος
• Αποθήκευση καταχωρητών στη βάση της στοίβας
– Η διαχείριση πόρων είναι θέμα διεργασίας
• Όλα τα νήματα βλέπουν τα ίδια χειριστήρια
• Διεργασία συστήματος: νήματα πυρήνα
– Κώδικας πυρήνα ανεξάρτητος από χρήστες
• Παράδειγμα: νήματα διαχείρισης μνήμης

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

Υλοποίηση διεργασιών (2 από 3)


• Χαρτογράφηση ενότητας και κοινής σελίδας
• Δημιουργία PEB διεργασίας
• Εκχώρηση εικονικής μνήμης
• Εκχώρηση ταυτότητας διεργασίας
• Δημιουργία TEB νήματος
• Προσθήκη διεργασίας σε δομές πυρήνα
• Επιστροφή από NtCreateUserProcess
92
Υλοποίηση διεργασιών (3 από 3)
• Σε περίπτωση αποτυχίας
– Έλεγχος αν η διεργασία θέλει άλλο υποσύστημα
• Παράδειγμα: WOW64
• Εγγραφή διεργασίας στο υποσύστημα Win32
– Εμφάνιση δείκτη με κλεψύδρα στην οθόνη
• Τροποποίηση δικαιωμάτων (αν χρειάζεται)
• Προσθήκη βιβλιοθηκών συμβατότητας
• Κλήση NtResumeThread για εκκίνηση νήματος
93

Χρονοπρογραμματισμός (1 από 10)


• Περιπτώσεις κλήσεις χρονοπρογραμματιστή
– Μπλοκάρισμα εκτελούμενου νήματος
• Αναγκαστική κλήση του χρονοπρογραμματιστή
– Σηματοδότηση ενός αντικειμένου
• Έλεγχος για νήμα υψηλότερης προτεραιότητας
– Εξάντληση κβάντου
• Προκαλείται από διακοπή ρολογιού
• Μπορεί να συνεχίσει και η ίδια διεργασία

94
Χρονοπρογραμματισμός (2 από 10)
• Περιπτώσεις κλήσεις χρονοπρογραμματιστή
– Ολοκλήρωση λειτουργίας Ε/Ε
– Λήξη προθεσμίας αναμονής
• Η ISR προσθέτει μία DPC στην ουρά
• Η DPC θα καλέσει τον χρονοπρογραμματιστή
• Έλεγχος για νήμα υψηλότερης προτεραιότητας

• Αλγόριθμος χρονοπρογραμματισμού
– Δύο είδη προτεραιοτήτων
95

Χρονοπρογραμματισμός (3 από 10)


• Κατηγορία προτεραιότητας: SetPriorityClass
– Βασική προτεραιότητα νημάτων διεργασίας
– Πραγματικού χρόνου έως αδρανής
• Προτεραιότητα νήματος: SetThreadPriority
– Σχετική προτεραιότητα νημάτων διεργασίας
– Χρονικά κρίσιμη ως αδρανής
• Συνδυασμός για παραγωγή τιμής 1-31
– Βασική προτεραιότητα νήματος

96
Χρονοπρογραμματισμός (4 από 10)

Υπολογισμός βασικής προτεραιότητας


97

Χρονοπρογραμματισμός (5 από 10)

Σύστημα πολλαπλών ουρών Windows


98
Χρονοπρογραμματισμός (6 από 10)
• Υλοποίηση ουρών προτεραιότητας
– Εκτέλεση πάντα της υψηλότερης προτεραιότητας
– Εκ περιτροπής εκτέλεση σε κάθε προτεραιότητα
– Επίπεδα 16-31: πραγματικού χρόνου
• Τρέχουν αμέσως μετά από ISR και DPC
– Επίπεδα 1-15: διεργασίες χρηστών
– Επίπεδο 0: νήμα μηδενισμού σελίδων
– Επίπεδο -1: αδρανές νήμα

99

Χρονοπρογραμματισμός (7 από 10)


• Πραγματική προτεραιότητα νήματος
– Ξεκινάει από τη βασική προτεραιότητα
– Αύξηση σε κάθε τερματισμό λειτουργίας Ε/Ε
• +1 για δίσκο, +6 πληκτρολόγιο, +8 κάρτα ήχου
• Δεν περνάει ποτέ το 15 όμως
– Αύξηση μετά από αναμονή συγχρονισμού
• +2 στο προσκήνιο, +1 στο παρασκήνιο
– -1 σε κάθε λήξη κβάντου
• Μέχρι τη βασική προτεραιότητα όμως

100
Χρονοπρογραμματισμός (8 από 10)

• Αντιστροφή προτεραιοτήτων
– Η 8 εκτελείται πριν την 12 λόγω της 4

101

Χρονοπρογραμματισμός (9 από 10)


• Αντιμετώπιση αντιστροφής προτεραιοτήτων
– Παρακολούθηση χρόνου αναμονής νήματος
– Μετά από κάποιο όριο, πάει στο επίπεδο 15
• Μένει εκεί για δύο κβάντα
• Μετά επιστρέφει εκεί που ήταν
• Ιδανικός επεξεργαστής νήματος
– Χρήσιμο σε συστήματα NUMA
– Το νήμα εκτελείται εκεί που είναι η μνήμη του

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

Χώροι διευθύνσεων (2 από 2)

• Τυπικοί χάρτες μνήμης διεργασιών


– Ίδιος χάρτης μνήμης και σε κατάσταση πυρήνα
106
Εκχώρηση εικονικής μνήμης
• Τρεις καταστάσεις σελίδων
– Άκυρη: δεν αντιστοιχεί σε ενότητα μνήμης
– Κατακυρωμένη: αντιστοιχεί σε ενότητα
• Σφάλμα σελίδας οδηγεί σε προσκόμιση της σελίδας
• Ήπιο σφάλμα αν είναι διαθέσιμη στην κρυφή μνήμη
– Δεσμευμένη: θα χρειαστεί στο μέλλον
• Οι σελίδες στοίβας είναι δεσμευμένες
• Όσο μεγαλώνει η στοίβα γίνονται κατακυρωμένες

107

Αρχεία σελιδοποίησης (1 από 2)


• Χρήση για μη χαρτογραφημένες σελίδες
– Δέσμευση χώρου μόνο όταν εκτοπίζονται
• Με αρκετή μνήμη δεν χρειάζεται τέτοιο αρχείο
• Χρήσιμο σε ενσωματωμένα συστήματα
– Ομαδοποίηση εκτοπισμένων σελίδων
• Εκχώρηση γειτονικών θέσεων στο δίσκο
• Ομαδική εγγραφή των σελίδων
– Η εκχώρηση μένει μέχρι να γραφτεί η σελίδα
• Στη φόρτωση η σελίδα σημειώνεται ως μόνο ανάγνωσης

108
Αρχεία σελιδοποίησης (2 από 2)
• Υποστήριξη έως 16 αρχείων
– Σε διαφορετικούς δίσκους για απόδοση
– Καλύτερα να δεσμεύεται χώρος από την αρχή
• Παρακολούθηση μέσω πίνακα σελίδων
• Δεν χρησιμοποιείται για όλες τις σελίδες
– Προγράμματα και DLL διαβάζονται από το δίσκο
– Τα χαρτογραφημένα αρχεία είναι στο δίσκο

109

Πολύ μεγάλες μνήμες


• Εναλλαγή σειράς (bank switching)
– Εναλλαγή τμημάτων φυσικής μνήμης
• Φυσική μνήμη >> χώρου διευθύνσεων
– Συνηθισμένο σε συστήματα 16/20 bit
• 8088/8086 και συμβατοί επεξεργαστές
– Τελικά χρειάστηκε και σε συστήματα 32 bit
• PAE: διευθύνσεις 36 bit σε μηχανή 32 bit
• Λέγεται Επεκτάσεις Διευθύνσεων σε Παράθυρα (AWE)

110
Κλήσεις διαχείρισης μνήμης

• Λειτουργούν σε συνεχόμενες περιοχές


– Ακέραιο πλήθος σελίδων, αρχή σε όριο 64 KB
111

Υλοποίηση μνήμης (1 από 2)


• Ενιαίος γραμμικός χώρος διευθύνσεων
– Συνήθως σελίδες 4 ΚΒ
– Δυνατότητα σελίδων 4 MB
• Καλύτερη αξιοποίηση TLB
• Μικρότεροι πίνακες σελίδων ενός επιπέδου
• Κατάλληλο για πολύ μεγάλες εφαρμογές
– Για κάθε περιοχή έχουμε έναν VAD
• Διευθύνσεις, αρχείο και απόσταση, προνόμια
• Οργάνωση VAD σε ισορροπημένο δένδρο

112
Υλοποίηση μνήμης (2 από 2)

Κάθε διεργασία ορίζεται από τα VAD της


113

Σφάλματα σελίδας (1 από 6)


• Προσελιδοποίηση: τεχνολογία SuperFetch
– Το σύστημα παρακολουθεί τις αναφορές σελίδων
– Όταν ξεκινά μία διεργασία φορτώνει τις σελίδες
• Επιπλέον φορτώνουμε ένα ολόκληρο μπλοκ δίσκου
– Οι σελίδες μπαίνουν στη λίστα αναμονής
• Αν χρησιμοποιηθούν, μπαίνουν στον πίνακα σελίδων
• Σελίδες που είναι ήδη στη μνήμη
– Εκτελέσιμα αρχεία ή DLL
– Αντιγραφή κατά την εγγραφή για δεδομένα
114
Σφάλματα σελίδας (2 από 6)
• Μη χαρτογραφημένες σελίδες
– Οι σελίδες είναι πάντα μηδενισμένες
• Για να μην διαβάζουμε δεδομένα άλλων
• Διαχείριση σφάλματος σελίδας
– Ο πυρήνας δημιουργεί περιγραφή σφάλματος
– Ο διαχειριστής μνήμης ελέγχει την προσπέλαση
• Η σελίδα πρέπει να είναι κατακυρωμένη
– Εντοπισμός του VAD της σελίδας

115

Σφάλματα σελίδας (3 από 6)

Καταχωρίσεις πίνακα σελίδων


116
Σφάλματα σελίδας (4 από 6)
• Μέγεθος καταχωρίσεων σελίδων
– 32 ή 64 bit ανάλογα με αρχιτεκτονική
• 64 bit όταν χρησιμοποιείται PAE
• Πέντε είδη σφαλμάτων σελίδας
• Μοιραία σφάλματα
– Η σελίδα δεν είναι κατακυρωμένη
– Η σελίδα δεν είναι προσπελάσιμη
• Συνήθως τερματισμός διεργασίας

117

Σφάλματα σελίδας (5 από 6)


• Σελίδας αντιγραφής κατά την εγγραφή
– Δημιουργία αντιγράφου της σελίδας
• Αύξηση μεγέθους στοίβας
– Επιστρέφει μηδενισμένη σελίδα
– Αρκεί να έχουν δεσμευθεί αρκετές σελίδες
• Μη χαρτογραφημένης σελίδας
– Ήπιο σφάλμα: η σελίδα είναι στη μνήμη
– Αυστηρό σφάλμα: η σελίδα είναι στο δίσκο

118
Σφάλματα σελίδας (6 από 6)
• Αφαίρεση σελίδων από πίνακα
– Μπορεί να πάει σε τρεις διαφορετικές λίστες
– Ελεύθερες: δεν θα χρειαστεί ξανά
• Στοίβα διεργασίας που τερμάτισε
– Τροποποιημένες: πρέπει να γραφτεί στο δίσκο
– Αναμονής: δεν χρειάζεται να γραφτεί στο δίσκο
• Οι τροποποιημένες πάνε εκεί όταν γραφούν
– Οι δύο τελευταίες λειτουργούν ως κρυφή μνήμη
119

Αντικατάσταση σελίδων (1 από 2)


• Σύνολο εργασίας διεργασίας
– Σελίδες διεργασίας στη μνήμη
• Αλλάζει κατά την εκτέλεση της διεργασίας
– Ελάχιστο και μέγιστο μέγεθος
• Τα όρια είναι ελαστικά
– Αρχικά κάθε διεργασία έχει τα ίδια όρια
• 20-50 και 45-345 σελίδες ανάλογα με τη μνήμη
– Περιορισμός στα όρια σε έλλειψη μνήμης
120
Αντικατάσταση σελίδων (2 από 2)
• Ο αλγόριθμος εξαρτάται από το χώρο
• Αρκετή διαθέσιμη μνήμη
– Παρακολούθηση ηλικίας διεργασίας
• Μικρή πίεση μνήμης
– Οι μεγάλες διεργασίες δεν μεγαλώνουν
• Αντικατάσταση των σελίδων τους
• Μεγάλη πίεση μνήμης
– Οι διεργασίες περιορίζονται στα όριά τους

121

Φυσική μνήμη (1 από 4)


• Λίστα μηδενισμένων σελίδων
– Για σελίδες που δεν φορτώνονται με δεδομένα
• Μερικώς γεμάτες, σωρό, στοίβα
– Ο μηδενισμός γίνεται στο παρασκήνιο
• Βάση δεδομένων αριθμών πλαισίων σελίδας
– Πίνακας με όλα τα πλαίσια φυσικής μνήμης
– Σταθερό μήκος καταχωρίσεων
– Διαφορετικά στοιχεία σε κάθε καταχώρηση

122
Φυσική μνήμη (2 από 4)

• Βάση δεδομένων αριθμών πλαισίων σελίδας


– Οργάνωση των πλαισίων σε λίστες
123

Φυσική μνήμη (3 από 4)

Κύκλος ζωής σελίδων

124
Φυσική μνήμη (4 από 4)
• Νήματα συστήματος για διαχείριση μνήμης
– Διαχειριστής συνόλου ισορροπίας
• Ψάχνει για αδρανείς διεργασίες
– Εγγραφέας χαρτογραφημένων σελίδων
• Μπορεί να χρειαστεί να μεγαλώσει το αρχείο
– Εγγραφές τροποποιημένων σελίδων
• Χρησιμοποιεί τα αρχεία σελιδοποίησης
– Νήμα μηδενισμού σελίδων
125

Κρυφή μνήμη ΛΣ (1 από 3)


• Κρυφή μνήμη μπλοκ αρχείων
– Χρήση εικονικών διευθύνσεων μπλοκ
• Θέση μπλοκ στο αρχείο, όχι στη συσκευή
– Οι αποθηκευμένες περιοχές λέγονται όψεις
• Ο διαχειριστής κρυφής μνήμης επιλέγει όψεις
• Ο διαχειριστής μνήμης χειρίζεται τις σελίδες
– Χρήση μηδενικών σελίδων για κενά στα αρχεία
• Αποφυγή ανάγνωσης δεδομένων τρίτων

126
Κρυφή μνήμη ΛΣ (2 από 3)
• Λειτουργία διαχειριστή κρυφής μνήμης
– Έστω ότι γίνεται αναφορά σε ένα αρχείο
– Χαρτογράφηση 256 KB στη μνήμη
• Αν το μπλοκ ζητηθεί, διαβάζεται από το δίσκο
• Αυτό είναι αρμοδιότητα του διαχειριστή μνήμης
– Χρήση και για κανονικά χαρτογραφημένα αρχεία
– Δυνατότητα παράκαμψης της κρυφής μνήμης
• Αφήνει 3 GB εικονικής μνήμης στις εφαρμογές

127

Κρυφή μνήμη ΛΣ (3 από 3)


• Τεχνολογία ReadyBoost
– Χρήση μνήμης flash ως κρυφής μνήμης
– Συμπίεση και κρυπτογράφηση δεδομένων
– Αποθήκευση με ταυτόχρονη εγγραφή
• Αποφυγή προβλημάτων σε αφαίρεση flash
• Μπορεί να αποφευχθεί με ενσωματωμένη flash
• Τεχνολογία ReadyBoot
– Χρήση μνήμης flash για επιτάχυνση εκκίνησης

128
Είσοδος / έξοδος

Έννοιες Ε/Ε (1 από 4)


• Διαχειριστής τοποθέτησης και λειτουργίας (PnP)
– Απαρίθμηση διαύλου
• Είτε στην εκκίνηση (PCI) είτε δυναμικά (USB)
• Αποστολή αίτησης σε κάθε υποδοχή του διαύλου
• Κάθε συσκευή δίνει το αναγνωριστικό της
– Διάρθρωση συσκευών
• Κατανομή επιπέδων διακοπών
• Δημιουργία αντικειμένων οδηγών
• Δημιουργία αντικειμένων συσκευών

130
Έννοιες Ε/Ε (2 από 4)
• Φόρτωση υπόλοιπων οδηγών
– Οδηγοί που δεν αντιστοιχούν σε συσκευές
• Συστήματα αρχείων, αντιβιοτικά
• Δεν μπορούν να φορτωθούν με PnP
– Φόρτωση κατά την εκκίνηση
• Χρήση αρχείων διάρθρωσης
– Φόρτωση όταν χρειαστούν
• Παράδειγμα: με την ανάρτηση συστήματος αρχείων

131

Έννοιες Ε/Ε (3 από 4)


• Δυναμικοί δίσκοι και λογικές μονάδες
– Αποτελούνται από πολλά διαμερίσματα
• Ακόμη και σε διαφορετικούς δίσκους
• Σκιώδη αντίγραφα μονάδων
– Στιγμιότυπα μονάδων σε διάφορες στιγμές
– Επαναφορά παλιάς κατάστασης
– Εφεδρικά αντίγραφα σε συνεπή κατάσταση
• Οι εφαρμογές διακόπτουν την κατάλληλη στιγμή
• Λαμβάνεται στιγμιότυπο για το εφεδρικό αντίγραφο

132
Έννοιες Ε/Ε (4 από 4)
• Ασύγχρονη Ε/Ε: πολλοί τρόποι αναμονής
– Αναμονή σε αντικείμενο συμβάντος
– Προσθήκη συμβάντος ολοκλήρωσης σε ουρά
– Διαδικασία επανάκλησης στο τέλος
– Παρακολούθηση θέσης στη μνήμη
• Προτεραιότητες Ε/Ε
– Υψηλή: διαχειριστής μνήμης
– Χαμηλή: αντιβιοτικά, συντήρηση δίσκου

133

Κλήσεις Ε/Ε (1 από 3)


• Κλήσεις συστήματος διαχειριστή Ε/Ε
– Άνοιγμα, κλείσιμο, ανάγνωση, εγγραφή, ioctl
– Επιπλέον PnP και διαχείριση ισχύος
– Στο Win32 κλήσεις ανάλογα με τη συσκευή
• Απεικονίζονται σε απλούστερες κλήσεις NT
– Πολλές παράμετροι και παραλλαγές
• Παράδειγμα: τρόπος ενημέρωσης τέλους κλήσης
• Απαραίτητο για ασύγχρονες κλήσεις

134
Κλήσεις Ε/Ε (2 από 3)
• Ιδιαιτερότητες κλήσεων Ε/Ε
– Ίδια κλήση για δημιουργία/άνοιγμα αρχείου
– Ανάγνωση/εγγραφή ορίζουν το δείκτη στο αρχείο
– Ειδικές κλήσεις για παροχή πληροφοριών
• Πιθανόν και για αλλαγή πληροφοριών
– Δυνατότητα ειδοποίησης σε αλλαγές
• Απλή επέκταση των ασύγχρονων κλήσεων
– Κλείδωμα περιοχών αρχείων με κλειδί
135

Κλήσεις Ε/Ε (3 από 3)

136
Οδηγοί συσκευών (1 από 3)
• Μοντέλο οδηγών των Windows (WDM)
– Συμβατό με Windows 98 και 2000
• Επέτρεπε χρήση οδηγών και στα δύο συστήματα
– Βοήθημα επαλήθευσης οδηγών (verifier.exe)
• Χρήσιμο στους διαχειριστές για έλεγχο οδηγών
• Θεμελίωση οδηγών των Windows (WDF)
– Απλοποιημένο μοντέλο πάνω από το WDM
– UMDF για οδηγούς επιπέδου χρήστη
– KMDF για οδηγούς επιπέδου πυρήνα
137

Οδηγοί συσκευών (2 από 3)


• Αντικείμενα συσκευών
– Παριστάνουν συσκευές και όχι μόνο
• Συστήματα αρχείων, πρωτόκολλα, …
– Οργάνωση σε στοίβες συσκευών
• Κλήση της IoCallDriver από το διαχειριστή Ε/Ε
– Δίνεται αντικείμενο IRP και αντικείμενο συσκευής
• Το IRP αναφέρει τις λειτουργίες προς εκτέλεση
– Εντοπισμός αντικειμένου οδηγού

138
Οδηγοί συσκευών (3 από 3)

• Σε κάθε επίπεδο καλείται ο οδηγός


– Πίνακας διεκπεραίωσης στο αντικείμενο οδηγού
– Κλήση της λειτουργίας που αναφέρει το IRP
• Τρεις δυνατότητες στο τέλος της κλήσης
– Επόμενο επίπεδο, ολοκλήρωση ή εκκρεμότητα

139

Πακέτα αιτήσεων Ε/Ε (1 από 2)

Μορφή πακέτου αίτησης Ε/Ε (IRP)

140
Πακέτα αιτήσεων Ε/Ε (2 από 2)
• Δεδομένα στοίβας οδηγών
– Χώρος δεδομένων για κάθε οδηγό της στοίβας
• Παράδειγμα: ρουτίνα που θα κληθεί στην ολοκλήρωση
– Στην ολοκλήρωση ανεβαίνουμε στη στοίβα
• Κλήση ρουτίνας ολοκλήρωσης σε κάθε επίπεδο
– Ο διαχειριστής γνωρίζει το μέγεθος της στοίβας
• Απαραίτητο για εκχώρηση αρκετής μνήμης στο IRP

• MDL: φυσικές σελίδες για DMA


141

Στοίβες συσκευών (1 από 4)

Παράδειγμα στοίβας συσκευών


142
Στοίβες συσκευών (2 από 4)
• Η στοίβα είναι προαιρετική
– Μπορεί να υπάρχει ένας μόνος οδηγός
• Τυπικές δομές στοίβας οδηγών
– Διαχωρισμός διαύλου από συσκευή
• Ένας οδηγός για το δίαυλο PCI
• Άλλος οδηγός για την ίδια τη συσκευή
– Εισαγωγή φίλτρων στη στοίβα
• Συμπίεση και αποσυμπίεση δεδομένων

143

Στοίβες συσκευών (3 από 4)


• Προβλήματα με οδηγούς συσκευών
– Οι οδηγοί επιπέδου πυρήνα είναι επικίνδυνοι
• Μοιράζονται το χώρο διευθύνσεων του πυρήνα
• Εκτελούνται με προνόμια επόπτη
– Το μοντέλο Ε/Ε είναι ισχυρό αλλά περίπλοκο
• Ασύγχρονο μοντέλο σε πολυνηματικό σύστημα
• Δυναμική εισαγωγή/εξαγωγή συσκευών
• Δύσκολα οι προγραμματιστές αποφεύγουν τα λάθη

144
Στοίβες συσκευών (4 από 4)
• Διαχειριστής ισχύος
– Κλείνει ή υποβαθμίζει μέρη του συστήματος
• Μείωση συχνότητας λειτουργίας επεξεργαστή
• Διακοπή λειτουργίας πυρήνων/επεξεργαστών
– Κατάσταση αδράνειας (hibernation)
• Αντιγραφή μνήμης στο δίσκο
• Ελαχιστοποίηση κατανάλωσης ενέργειας
– Κατάσταση αναμονής (standby)
• Ενέργεια μόνο για ανανέωση δυναμικής μνήμης
• Κίνδυνος απώλειας αν τελειώσει η μπαταρία

145

Σύστημα αρχείων
Έννοιες αρχείων (1 από 3)
• Συστήματα αρχείων των Windows
– FAT-16/FAT-32: χωρίς προστασία, για συμβατότητα
– NTFS: το σύστημα αρχείων των NT
• Μεγάλοι δίσκοι, ασφάλεια, λειτουργικότητα
• Ονόματα αρχείων
– Έως 255 χαρακτήρες Unicode
– Διαδρομές έως 32767 χαρακτήρες
– Διακρίνει και διατηρεί πεζά-κεφαλαία
• Το Win32 διατηρεί αλλά δεν διακρίνει πεζά-κεφαλαία

147

Έννοιες αρχείων (2 από 3)


• Χαρακτηριστικά και ρεύματα
– Κάθε αρχείο αποτελείται από χαρακτηριστικά
– Κάθε χαρακτηριστικό είναι ένα ρεύμα byte
– Συνήθως τρία χαρακτηριστικά
• Όνομα, αναγνωριστικό, ανώνυμα δεδομένα
• Αναφορά με όνομα:ρεύμα
– Στα Mac τα αρχεία έχουν 2 ρεύματα δεδομένων
• Στα Windows τα πολλά ρεύματα χάνονται εύκολα

148
Έννοιες αρχείων (3 από 3)
• Ιεραρχικός χώρος ονομάτων
– Διαχωρισμός με \ αντί για /
– Τα ευρετήρια «.» και «..» είναι συμβάσεις
– Σκληροί σύνδεσμοι για το σύστημα POSIX
– Συμβολικοί σύνδεσμοι για διαχειριστές
• Σημεία συντακτικής επανανάλυσης
– Συμπίεση, κρυπτογράφηση, αραιά αρχεία
– Ανοχή σε σφάλματα, τήρηση ημερολογίου

149

Δομή συστήματος αρχείων (1 από 8)


• Μονάδα (volume) NTFS
– Αντιστοιχεί σε διαμέρισμα δίσκου
• Μπορεί να συνδέει πολλά διαμερίσματα
• Και σε διαφορετικούς δίσκους
– Γραμμική ακολουθία μπλοκ (συστοιχιών)
• Μέγεθος μπλοκ από 512 byte έως 64 KB
• Συνήθως χρήση μπλοκ 4 KB
– Διευθύνσεις μπλοκ 64 bit

150
Δομή συστήματος αρχείων (2 από 8)
• Κύριος πίνακας αρχείων (MFT)
– Γραμμική ακολουθία εγγραφών 1 KB
– Κάθε εγγραφή περιγράφει ένα αρχείο ή κατάλογο
• Χαρακτηριστικά αρχείου και διευθύνσεις μπλοκ
• Πρόσθετες εγγραφές για πολύ μεγάλα αρχεία
– Χάρτης bit για παρακολούθηση θέσεων MFT
– Αποθηκεύεται οπουδήποτε στο δίσκο
– Μεγαλώνει μέχρι 248 εγγραφές
151

Δομή συστήματος αρχείων (3 από 8)


• Εγγραφές MFT
– Ακολουθία ζευγών (κεφαλίδα, τιμή)
• Ζεύγη σταθερού και μεταβλητού μεγέθους
– Οι μικρές κεφαλίδες είναι μέσα στο MFT
– Οι μεγάλες αποθηκεύονται αλλού
• Οι πρώτες 16 εγγραφές είναι δεσμευμένες
– Αρχεία μεταδεδομένων του NTFS
– Αρχίζουν με $ για να διακρίνονται

152
Δομή συστήματος αρχείων (4 από 8)

Βασικές καταχωρήσεις του MFT


153

Δομή συστήματος αρχείων (5 από 8)


• $Mft: το ίδιο το αρχείο με το MFT
– Το πρώτο μπλοκ αναφέρεται στο μπλοκ εκκίνησης
– Από εκεί διαβάζουμε όλο το MFT
• Κωδικοποίηση εγγραφών MFT
– Μαγικός αριθμός για έλεγχο
– Αριθμός σειράς που αλλάζει σε νέα χρήση
– Μετρητής αναφορών στο αρχείο
– Μήκος χρησιμοποιημένης εγγραφής

154
Δομή συστήματος αρχείων (6 από 8)

Βασικά χαρακτηριστικά εγγραφών MFT

155

Δομή συστήματος αρχείων (7 από 8)


• Μορφή χαρακτηριστικών
– Αναγνωριστικό χαρακτηριστικού
– Μήκος χαρακτηριστικού
– Θέση τιμής χαρακτηριστικού
• Μη διαμένον χαρακτηριστικό: αποθηκεύεται αλλού
• Απαιτεί μεγαλύτερη κεφαλίδα
• Περιέχει τη διεύθυνση τις τιμής στο δίσκο
– Μπορεί να μην χωράνε ούτε οι κεφαλίδες
• Τότε χρησιμοποιούνται πρόσθετες εγγραφές MFT

156
Δομή συστήματος αρχείων (8 από 8)
• Παραπομπή σε άλλο αρχείο για ασφάλεια
– Επιτρέπει την επαναχρησιμοποίηση πολιτικών
• Αποθήκευση καταλόγων με μορφή λίστας
– Οι μεγάλοι κατάλογοι αλλάζουν σε Β+ δένδρα
• Προεπιλεγμένο ρεύμα δεδομένων: ανώνυμο
– Πρόσθετα ρεύματα δεδομένων έχουν όνομα
• Ακολουθούν οι διευθύνσεις των μπλοκ
• Μικρά ρεύματα αποθηκεύονται στο ίδιο το MFT

157

Κατανομή χώρου (1 από 6)


• Προσπάθεια κατανομής γειτονικών μπλοκ
– Αύξηση απόδοσης λόγω αποφυγής αναζητήσεων
• Ακολουθία εγγραφών περιγραφής ρεύματος
– Κάθε εγγραφή δείχνει λογικά συνεχόμενα μπλοκ
• Μπορεί να έχουμε κενά με μηδενικές τιμές
– Κεφαλίδα εγγραφής: αρχή ροής, τέλος ροής + 1
• Σχετικές διευθύνσεις από την αρχή του αρχείου
– Ζεύγη διευθύνσεων: πρώτο μπλοκ, πλήθος
• Σχετικές διευθύνσεις από την αρχή της μονάδας

158
Κατανομή χώρου (2 από 6)

• Παράδειγμα: αρχείο με 9 λογικά μπλοκ


– Λίστα με τρεις ακολουθίες φυσικών μπλοκ

159

Κατανομή χώρου (3 από 6)

• Παράδειγμα: πολύ μεγάλο αρχείο


– Η βασική εγγραφή (102) δείχνει άλλες δύο
– Οι δείκτες κατανέμονται σε τρεις εγγραφές

160
Κατανομή χώρου (4 από 6)

• Μορφή εγγραφής καταλόγου


– Ακολουθία καταχωρίσεων για αρχεία
• Δείκτης αρχείου στο MFT, μήκος ονόματος και όνομα
• Γραμμική αναζήτηση ονομάτων
• Οι μεγάλοι κατάλογοι οργανώνονται σε Β+ δένδρα
161

Κατανομή χώρου (5 από 6)


• Άνοιγμα αρχείου
– Έχουμε δει την ανάλυση ονόματος μέχρι το NTFS
– Το NTFS λαμβάνει ένα IRP με το όνομα \foo\bar
– Ανάγνωση ρίζας από MFT και εντοπισμός foo
– Ανάγνωση foo και εντοπισμός bar
– Έλεγχος αν επιτρέπεται η πρόσβαση
– Ολοκλήρωση αντικειμένου αρχείου
– Ο χρήστης παίρνει χειριστήριο για τη συνέχεια

162
Κατανομή χώρου (6 από 6)
• Σημεία συντακτικής επανανάλυσης (reparse)
– Ειδική σημείωση σε αρχείο/κατάλογο
• Συνοδεύεται από κάποια δεδομένα
– Επιστρέφουν αποτυχία κατά την ανάλυση
• Στο IRP επιστρέφονται τα δεδομένα
– Ο διαχειριστής αντικειμένων ξεκινά ξανά
• Χρήση των δεδομένων ως νέο όνομα
– Υλοποίηση ανάρτησης, συμβολικών συνδέσμων
163

Συμπίεση αρχείων (1 από 2)


• Δημιουργία συμπιεσμένων αρχείων
– Συμπίεση/αποσυμπίεση από το NTFS
– Δεν είναι εμφανής στις διεργασίες
– Λειτουργεί σε ομάδες 16 μπλοκ
• Εξετάζουμε 16 λογικά συνεχόμενα μπλοκ
• Δοκιμάζουμε να τα συμπιέσουμε
• Αν έχουμε <=15 μπλοκ, γράφονται συμπιεσμένα
• Επαναλαμβάνουμε μέχρι το τέλος του αρχείου

164
Συμπίεση αρχείων (2 από 2)

• Διάκριση συμπιεσμένων περιοχών


– Δεύτερη εγγραφή με απόσταση μηδέν

165

Τήρηση ημερολογίου
• Δύο τρόποι παρακολούθησης αλλαγών
• Κλήση NtNotifyChangeDirectoryFile
– Περνάμε μια περιοχή μνήμης και ένα αρχείο
– Επιστρέφει τις αλλαγές στο αρχείο
• Ελπίζουμε να χωράνε όλες στην περιοχή
• Ημερολόγιο αλλαγών του NTFS
– Λίστα όλων των αλλαγών σε αρχεία
– Αποθήκευση σε πολύ μεγάλο αρχείο ημερολογίου

166
Ασφάλεια

Απαιτήσεις ασφάλειας (1 από 2)


• Τα NT σχεδιάστηκαν για ασφάλεια C2
– Πρότυπο του DoD των ΗΠΑ
– Δεν υλοποιείται πια κατά 100%
• Ασφαλής σύνδεση χωρίς παραπλάνηση
– Όλοι οι χρήστες πρέπει να δώσουν συνθηματικό
– Χρήση CTRL-ALT-DEL πριν τη σύνδεση
• Ενεργοποιεί πάντα το λειτουργικό σύστημα
• Δεν απενεργοποιείται από εφαρμογές χρήστη

168
Απαιτήσεις ασφάλειας (2 από 2)
• Διακριτικοί έλεγχοι πρόσβασης
– Ο ιδιοκτήτης επιλέγει τρόπο πρόσβασης
• Έλεγχοι προνομιακής πρόσβασης
– Ο υπερχρήστης μπορεί να παρακάμψει ελέγχους
• Προστασία χώρου διευθύνσεων διεργασίας
• Μηδενισμός νέων σελίδων
• Ελεγκτική παρακολούθηση ασφάλειας
– Αρχείο καταγραφής συμβάντων
169

Έννοιες ασφάλειας (1 από 4)


• Κάθε ομάδα έχει ταυτότητα ασφάλειας (SID)
– Κεφαλίδα και τυχαίος αριθμός για μοναδικότητα
– Οι διεργασίες έχουν μία σκυτάλη πρόσβασης
• Περιέχει το SID του ιδιοκτήτη και άλλες πληροφορίες
• Προεπιλεγμένη ACL για νέα αντικείμενα
• Ειδικά προνόμια του χρήστη (τύπου υπερχρήστη)
• Δυνατότητα μίμησης και περιορισμένων προνομίων

170
Έννοιες ασφάλειας (2 από 4)
• Δημιουργία σκυτάλης στη σύνδεση
– Οι διεργασίες την κληρονομούν
– Όλα τα νήματα έχουν την ίδια
• Μηχανισμός μίμησης (impersonation)
– Δυνατότητα απόκτησης άλλης σκυτάλης
• Το νήμα αποκτά διαφορετικά προνόμια
– Παράδειγμα: πελάτης περνά σκυτάλη σε διακομιστή
• Δυνατότητα προσπέλασης αρχείων πελάτη

171

Έννοιες ασφάλειας (3 από 4)


• Περιγραφέας ασφάλειας αντικειμένου
– Περιορίζει την πρόσβαση στο αντικείμενο
– DACL: δικαιώματα χρήσης αντικειμένου
• Λίστα στοιχείων ελέγχου πρόσβασης (ACE)
• Κάθε ACE έχει SID και χάρτη δικαιωμάτων
• Μπορεί να είναι αποδοχής ή άρνησης
– SACL: ενέργειες που καταγράφονται
• Ίδια μορφή με την DACL

172
Έννοιες ασφάλειας (4 από 4)

Παράδειγμα περιγραφέα ασφάλειας


173

Κλήσεις ασφάλειας

• Κλήσεις διαχείρισης περιγραφέων ασφάλειας


– Αντιστοίχιση περιγραφέα κατά δημιουργία
– Αλλιώς κληρονομείται από τη διεργασία

174
Υλοποίηση ασφάλειας (1 από 3)
• Αρχικοποίηση ασφάλειας
– Σύνδεση με διεργασία winlogon
– Πιστοποίηση ταυτότητας με διεργασία lsass
– Δημιουργία νέου φλοιού GUI (explorer)
• Χρήση της κατάλληλης σκυτάλης πρόσβασης
• Έλεγχος ασφάλειας στο άνοιγμα αντικειμένων
– Κεντρικός ελεγκτής αναφορών ασφάλειας
– Σύγκριση ζητούμενων με επιτρεπτά δικαιώματα
• Ισχύει η πρώτη καταχώριση της ACL που ταιριάζει

175

Υλοποίηση ασφάλειας (2 από 3)


• Περιορισμένοι έλεγχοι στη συνέχεια
– Μόνο αν η λειτουργία είχε ελεγχθεί αρχικά
– Δεν ελέγχεται ξανά η DACL σε κάθε πρόσβαση
– Εγγραφή στο ημερολόγιο ανάλογα με SACL
• SID επιπέδου ακεραιότητας
– Περιέχονται σε σκυτάλη και SACL
– Δεν επιτρέπουν υπέρβαση δικαιωμάτων
• Ανεξάρτητα από το τι λέει η DACL

176
Υλοποίηση ασφάλειας (3 από 3)
• Απαγόρευση εκτέλεσης (NX)
– Σελίδες με απαγόρευση εκτέλεσης κώδικα
• Αποφυγή προβλημάτων υπερχείλισης στοίβας
• Υπογραφή κώδικα πυρήνα (για οδηγούς)
• Φόρτωση κώδικα σε τυχαίες διευθύνσεις
• Έλεγχος λογαριασμού χρήστη (UAC)
– Εμφάνιση ειδικής οθόνης για το διαχειριστή
• Ο χρήστης πρέπει να εγκρίνει την πρόσβαση

177

Ενότητα # 10: Προγραμματισμός UNIX


Σκοποί ενότητας
• Κατανόηση των διεργασιών και των νημάτων
σε προγραμματιστικό επίπεδο.
• Εξοικείωση με τους μηχανισμούς διαχείρισης
διεργασιών και νημάτων.
• Κατανόηση των βασικών μηχανισμών
επικοινωνίας διεργασιών.
• Κατανόηση των βασικών μηχανισμών
συγχρονισμού νημάτων.
4

Περιεχόμενα ενότητας
• Εισαγωγή
• Διεργασίες
• Επικοινωνία διεργασιών
• Νήματα
• Νήματα POSIX

5
Προγραμματισμός UNIX (1 από 2)
• Έχουμε καλύψει διάφορες όψεις των ΛΣ
– Και του Linux ως μελέτης περίπτωσης
– Σε καθαρά θεωρητικό επίπεδο όμως
– Ο προγραμματισμός είναι πιο πρακτικός
• Γιατί UNIX και όχι Linux;
– Το Linux παρέχει πολλές επεκτάσεις στο UNIX
– Οι κοινές κλήσεις όμως λειτουργούν παντού
• Και σε παραλλαγές BSD και System V

Προγραμματισμός UNIX (2 από 2)


• Προγραμματισμός διεργασιών και νημάτων
– Πολλές κλήσεις συστήματος αντικαθίστανται
• Όλες οι γλώσσες προγραμματισμού χειρίζονται αρχεία
– Ο χειρισμός διεργασιών και νημάτων όχι!
• Ελάχιστες γλώσσες «βλέπουν» αυτές τις οντότητες
– Ζητήματα επικοινωνίας και συγχρονισμού
• Διεργασίες/νήματα εκτελούνται παράλληλα
• Εισαγωγή στον ταυτόχρονο προγραμματισμό

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
Επικοινωνία διεργασιών

Μηχανισμοί επικοινωνίας (1 από 2)


• Οι διεργασίες είναι απομονωμένες
– Μπορούν να επικοινωνούν ελεγχόμενα
– Μηχανισμοί επικοινωνίας διεργασιών (IPC)
• Σήματα
– Κατάλληλα για πολύ απλή επικοινωνία
• Ανώνυμοι και επώνυμοι αγωγοί
– Απλά κανάλια παρόμοια με σειριακά αρχεία
– Ανώνυμοι: επικοινωνία διεργασιών ίδιας ομάδας
– Επώνυμοι: επικοινωνία τυχαίων διεργασιών

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

Ουρές μηνυμάτων (1 από 10)


• Ουρές μηνυμάτων (message queues)
– Ροή μηνυμάτων αυθαίρετης δομής
• Μόνο η επικεφαλίδα είναι τυποποιημένη
• Το υπόλοιπο ορίζεται από την εφαρμογή
– Επιτρέπονται πολλοί αναγνώστες / συγγραφείς
• Οι ουρές έχουν «όνομα» στο σύστημα
– Επιτρέπουν πλήρως ασύγχρονη επικοινωνία
• Τα μηνύματα αποθηκεύονται από το ΛΣ

34
Ουρές μηνυμάτων (2 από 10)
• Δομή msqid με βασικά στοιχεία ουράς
– Κεφαλή/ ουρά λίστας, μηνύματα / max bytes
– Pid/χρόνοι τελευταίου αναγνώστη / συγγραφέα
• Ουρά μηνυμάτων με σύνδεση μίας κατεύθυνσης
– Επόμενο μήνυμα, τύπος, μήκος, δεδομένα

35

Ουρές μηνυμάτων (3 από 10)


• Δομή ipc_perm με δικαιώματα ουράς
– Περιλαμβάνεται στη δομή msqid
– UID/GID δημιουργού
– UID/GID ιδιοκτήτη
– Χάρτης bit ανάγνωσης/εγγραφής
• Αναγνωριστικό τύπου key_t
– Προσδιορίζει μία ουρά στο ΛΣ
– Γνωστό στις διεργασίες που επικοινωνούν

36
Ουρές μηνυμάτων (4 από 10)
• Άνοιγμα ουράς
– int msgget(key_t key, int msgflag);
– Επιστρέφει τοπικό αναγνωριστικό ουράς
– Οι σημαίες ορίζουν πώς θα ανοίξει η ουρά
• Χωρίς σημαία: άνοιγμα ουράς ή αποτυχία
• IPC_CREAT: άνοιγμα ουράς ή δημιουργία της
• IPC_CREAT|IPC_EXCL: δημιουργία ουράς ή αποτυχία
– Οι σημαίες δίνουν και τα δικαιώματα πρόσβασης
• Ίδια κωδικοποίηση με κλήσεις open() και creat()

37

Ουρές μηνυμάτων (5 από 10)


• Έλεγχος της ουράς
– int msgctl(int msqid, int cmd,
struct msqid_ds *buf);
– Η εντολή cmd ορίζει τι θέλουμε να κάνουμε
– IPC_RMID: διαγραφή ουράς
– IPC_SET: αλλαγές σε δομή msqid
• Οι επιθυμητές τιμές είναι στη δομή buf
– IPC_STAT: επιστροφή δομής msqid στην buf

38
Ουρές μηνυμάτων (6 από 10)
• Τύπος μηνυμάτων: struct msgbuf
– Περιέχει δύο πεδία: τύπο και περιεχόμενο
– Ο τύπος (mtype) είναι long και > 0
• 0 και αρνητικές τιμές έχουν ειδική σημασία
– Τα δεδομένα (mtext) είναι πίνακας χαρακτήρων
• Η διεργασία τα κωδικοποιεί όπως θέλει
– Ο πυρήνας προσθέτει μήκος και άλλα στοιχεία
• Χρήση μόνο για εσωτερική οργάνωση της ουράς

39

Ουρές μηνυμάτων (7 από 10)


• Αποστολή μηνυμάτων σε ουρά
– int msgsnd(int msqid, struct
msgbuf *msgp, size_t msgsz, int
msgflg);
– Το μήκος (msgsz) δεν περιλαμβάνει τον τύπο
• Περιλαμβάνονται μόνο τα δεδομένα
– Σημαία IPC_NOWAIT
• Επιστροφή αν δεν υπάρχει χώρος
• Αλλιώς εμποδισμός μέχρι να αδειάσει χώρος

40
Ουρές μηνυμάτων (8 από 10)
• Λήψη μηνυμάτων από ουρά
– ssize_t msgrcv(int msqid, struct
msgbuf *msgp, size_t msgsz, long
msgtyp, int msgflg);
– Επιστρέφεται μήκος μηνύματος (χωρίς τον τύπο)
– Σημαία IPC_NOWAIT
• Επιστροφή αν δεν υπάρχει μήνυμα
• Αλλιώς εμποδισμός μέχρι να εμφανιστεί μήνυμα
– Σημαία MSG_NOERROR
• Αποκοπή δεδομένων αν είναι > msgsz

41

Ουρές μηνυμάτων (9 από 10)


• Επιλογή μηνυμάτων μέσω msgtype
– 0: πρώτο μήνυμα της ουράς
– >0: πρώτο μήνυμα με τύπο msgtype
– <0: πρώτο μήνυμα με μικρότερο τύπο
• Πρέπει να είναι <= |msgtype|
– Οι αρνητικοί τύποι επιβάλλουν προτεραιότητες
• Ζητάμε μηνύματα με ελάχιστη προτεραιότητα
• Από αυτά, επιλέγουμε το πιο σημαντικό

42
Ουρές μηνυμάτων (10 από 10)
• Οι ουρές δεν έχουν «τέλος»
– Η ουρά δεν κλείνει, μόνο διαγράφεται
• Αν γίνει αυτό, χάνονται τα εκκρεμή μηνύματα
– Όσο υπάρχει, μπορεί να την ανοίξει κάποιος
• Δεν μπορούμε να δείξουμε «τέλος αρχείου»
– Χρειαζόμαστε μηνύματα τερματισμού
• Με χωριστό τύπο ή με μηδενικό μήκος
– Η τελευταία διεργασία διαγράφει την ουρά
43

Νήματα
Έννοια του νήματος
• Ανεξάρτητη ροή ελέγχου σε μία διεργασία
– Μέρος μίας διεργασίας
• Κοινή μνήμη, αρχεία, δικαιώματα
– Ανεξάρτητη κατάσταση εκτέλεσης
• Μετρητής προγράμματος, καταχωρητές
– Ανεξάρτητος χρονοπρογραμματισμός
• Πολλά νήματα μπορεί να εκτελούνται παράλληλα
– Οι κλασικές διεργασίες έχουν ένα νήμα
45

Νήματα και διεργασίες


• Πλεονεκτήματα νημάτων
– Γρήγορη δημιουργία / τερματισμός / εναλλαγή
• Δεν χρειάζεται αλλαγή χάρτη μνήμης
– Πολύ γρήγορη επικοινωνία
• Μέσω της κοινής μνήμης
• Εφαρμογές νημάτων
– Επικάλυψη εισόδου / εξόδου / επεξεργασίας
– Μετατροπή ασύγχρονου κώδικα σε σύγχρονο
– Αξιοποίηση παραλληλισμού σε πολυπεξεργαστές
46
Συγχρονισμός νημάτων
• Τα νήματα μοιράζονται (σχεδόν) τα πάντα
– Επικοινωνούν μέσω κοινών δομών
• Δεν χρησιμοποιούν IPC για να αποφύγουν τον πυρήνα
– Η παράλληλη λειτουργία απαιτεί συγχρονισμό
– Αμοιβαίος αποκλεισμός
• Αποκλειστική χρήση κοινών δομών
– Μεταβλητές συνθήκης
• Για προβλήματα τύπου παραγωγού / καταναλωτή

47

Νήματα POSIX
Pthreads API
• Τυποποιημένο API νημάτων για C
– Μέρος των προτύπων POSIX (POSIX threads)
– Υλοποιείται στα περισσότερα συστήματα UNIX
• Πιθανόν παράλληλα με άλλα API νημάτων
– Διαχείριση νημάτων
– Mutexes για αμοιβαίο αποκλεισμό
– Μεταβλητές συνθήκης για συγχρονισμό
– Κλειδώματα και φράγματα

49

Διαχείριση νημάτων (1 από 4)


• Δημιουργία νήματος
– int pthread_create(pthread_t *thread,
const pthread_attr_t *attr, void
*(*start_routine)(void*), void *arg);
– Αρχικά η διεργασία έχει ένα μόνο νήμα
– Με την pthread create δημιουργείται ένα νέο
– thread: αναγνωριστικό νήματος
– attr: αντικείμενο ιδιοτήτων νήματος
– start_routine: συνάρτηση εκκίνησης
– arg: όρισμα για τη συνάρτηση εκκίνησης

50
Διαχείριση νημάτων (2 από 4)
• Δημιουργία / καταστροφή ιδιοτήτων
– int pthread_attr_destroy(pthread_attr_t
*attr);
– int pthread_attr_init(pthread_attr_t
*attr);
– Μεταβιβάζονται κατά τη δημιουργία του νήματος
– Μπορούν να τροποποιηθούν / διαβαστούν αργότερα
• Μπορούμε να την περιμένουμε με join() ή όχι
• Πολιτική / παράμετροι χρονοπρογραμματισμού
• Μέγεθος / διεύθυνση / υπερχείλιση στοίβας

51

Διαχείριση νημάτων (3 από 4)


• Τερματισμός νήματος: διάφοροι τρόποι
– void pthread_exit(void *value_ptr);
• Επιστρέφει κατάσταση τερματισμού
– Επιστροφή αρχικής συνάρτησης νήματος
– Κλήση της exit() για τερματισμό της διεργασίας
– Επιστροφή συνάρτησης main() στο βασικό νήμα
• Τερματίζει όλα τα νήματα άμεσα
• Εκτός αν καλέσει την pthread_exit() πριν τερματίσει

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

Αμοιβαίος αποκλεισμός (1 από 3)


• Χρήση μεταβλητών mutex
– Τύπος pthread_mutex_t
– Μόνο ένα νήμα μπορεί να κλειδώσει το mutex
• Τα υπόλοιπα μπλοκάρουν μέχρι να ξεκλειδωθεί
• Μπορούμε να έχουμε και δοκιμαστικό κλείδωμα

– Το mutex πρέπει να είναι ορατό σε όλους


• Ορισμός σε καθολικό επίπεδο

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

Αμοιβαίος αποκλεισμός (3 από 3)


• Κλείδωμα και ξεκλείδωμα mutex
– int pthread_mutex_lock(pthread_mutex_t
*mutex);
• Εμποδισμός μέχρι να είναι διαθέσιμο
– int
pthread_mutex_trylock(pthread_mutex_t
*mutex);
• Επιστροφή αν δεν είναι διαθέσιμο
– int pthread_mutex_unlock(pthread_mutex_t
*mutex);
• Ξεκλείδωμα του mutex

56
Μεταβλητές συνθήκης (1 από 5)
• Συγχρονισμός νημάτων
– Τα mutex επιτρέπουν αμοιβαίο αποκλεισμό
– Πρόβλημα παραγωγού / καταναλωτή
• Έστω ότι έχουμε έναν κυκλικό χώρο αποθήκευσης
• Ο παραγωγός εμποδίζεται όταν ο χώρος γεμίσει
• Ο καταναλωτής εμποδίζεται όταν ο χώρος αδειάσει
• Πρέπει να περιμένουμε για μία συνθήκη
• Πρέπει να απελευθερώσουμε το mutex

57

Μεταβλητές συνθήκης (2 από 5)


• Μεταβλητές συνθήκης
– Τύπος p_thread_t
– Χρησιμοποιείται μόνο σε συνδυασμό με mutex
• Πρέπει να έχουμε κλειδώσει πρώτα το mutex
– Ένα νήμα μπορεί να εμποδιστεί σε μία συνθήκη
• Αυτόματα ξεκλειδώνει το mutex
– Ένα άλλο νήμα μπορεί να το αφυπνίσει
• Θα συνεχίσει όταν κλειδώσει και το mutex

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

Μεταβλητές συνθήκης (4 από 5)


• Αναμονή σε μεταβλητή συνθήκης
– int
pthread_cond_wait(pthread_cond_t
*cond, pthread_mutex_t *mutex);
– Μπλοκάρει το νήμα μέχρι να έρθει σήμα
• Πρέπει να έχει ήδη κλειδωθεί το mutex
• Απελευθερώνει αυτόματα το mutex στον εμποδισμό
– Όταν ξεκινήσει κλειδώνει ξανά το mutex
• Θα πρέπει τελικά να ξεκλειδωθεί

60
Μεταβλητές συνθήκης (5 από 5)
• Σήμα σε μεταβλητή συνθήκης
– int
pthread_cond_broadcast(pthread_cond_
t *cond);
• Ξεμπλοκάρει όλα τα νήματα της συνθήκης
– int
pthread_cond_signal(pthread_cond_t
*cond);
• Ξεμπλοκάρει ένα (τυχαίο) νήμα της συνθήκης
– Πρέπει το νήμα να έχει κλειδώσει ήδη το mutex
– Τελικά το νήμα πρέπει να ξεκλειδώσει το mutex

61

Ενότητα # 11: Σχεδίαση λειτουργικών συστημάτων


Σκοποί ενότητας
• Κατανόηση των ιδιαιτεροτήτων της σχεδίασης
ΛΣ και των βασικών διασυνδέσεων που
πρέπει να σχεδιαστούν.
• Εξοικείωση με τα βασικά ζητήματα
υλοποίησης και τα κύρια προβλήματα
απόδοσης στα ΛΣ.
• Εισαγωγή στη διαχείριση έργων λογισμικού
μεγάλης κλίμακας και στις σχεδιαστικές
τάσεις των ΛΣ.
4

Περιεχόμενα ενότητας
• Το πρόβλημα σχεδίασης
• Σχεδίαση διασυνδέσεων
• Υλοποίηση
• Απόδοση
• Διαχείριση έργων
• Σχεδιαστικές τάσεις

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

Υποδείγματα εκτέλεσης (1 από 2)


• Αλγοριθμικό υπόδειγμα
– Είσοδος, επεξεργασία, έξοδος
– Κλήσεις συστήματος για επικοινωνία με ΛΣ

21
Υποδείγματα εκτέλεσης (2 από 2)
• Οδηγούμενο από συμβάντα υπόδειγμα
– Αρχικοποίηση, αναμονή, εξυπηρέτηση
– Το ΛΣ παρέχει τα συμβάντα

22

Υποδείγματα δεδομένων
• Ταινίες με εγγραφές (FORTRAN)
– Αντιστοίχιση συσκευών σε λογικές ταινίες
• Αρχεία byte (UNIX)
– Σωληνώσεις, συσκευές, αρχεία
• Αντικείμενα (Windows)
– Χειριστήρια αντικειμένων με μεθόδους
• Έγγραφα (Παγκόσμιος Ιστός)
– Προσδιορίζονται με URL
23
Διασύνδεση κλήσεων (1 από 2)
• Το υπόδειγμα δεδομένων είναι σημαντικό
– Αν τα πάντα είναι αρχεία, χρειαζόμαστε μία read
• Πρέπει να είναι οι ελάχιστες δυνατές
– Η βιβλιοθήκη μπορεί να παρέχει παραλλαγές
• Οι execl/lp/le/v/vp/ve υλοποιούνται από την exec
– Γιατί να μην είναι περισσότερες;
• Παραπάνω κώδικας σημαίνει παραπάνω σφάλματα
– Αν είναι πολύ περίπλοκες, πρέπει να σπάσουν
• CreateProcess ή fork()/exec();

24

Διασύνδεση κλήσεων (2 από 2)


• Δεν κρύβουμε την υπολογιστική ισχύ
– Οι αφαιρέσεις κρύβουν μόνο τα ανεπιθύμητα!
– Τα δυνατά χαρακτηριστικά πρέπει να εκτίθενται
• Συνδεσμοστρεφείς ή ασυνδεσμικές κλήσεις;
– Η χρήση συνδέσεων έχει κόστος
– Πρέπει να οδηγεί σε μεταγενέστερο κέρδος
• Παράδειγμα: άνοιγμα τοπικών αρχείων
• Επιτρέπει απλούστερες κλήσεις στη συνέχεια

25
Υλοποίηση

Δομή συστήματος (1 από 4)

• Πολυεπίπεδα συστήματα
– Ποια πρέπει να είναι τα επίπεδα;
– Οδηγοί συσκευών ως ανεξάρτητα νήματα
– Αρχεία πάνω από εικονική μνήμη
27
Δομή συστήματος (2 από 4)
• Εξωπυρήνες
– Βασίζονται στο επιχείρημα των άκρων
• Αν κάτι θα γίνει από τα άκρα, μην το κάνεις ενδιάμεσα
• Εκτός αν έτσι κερδίζεις σε απόδοση
– Το ΛΣ αρκεί να κατανέμει τους πόρους
• Παράδειγμα: να δίνει μπλοκ δίσκου στους χρήστες
– Οι αφαιρέσεις παρέχονται από βιβλιοθήκες
• Παράδειγμα: σύστημα αρχείων επιπέδου χρήστη

28

Δομή συστήματος (3 από 4)

• Μικροπυρήνας
– Ο πυρήνας παρέχει ελάχιστη λειτουργικότητα
– Όλες οι υπηρεσίες παρέχονται από διεργασίες
• Οι οποίες λειτουργούν σε επίπεδο χρήστη για ασφάλεια
– Το πρόβλημα είναι η μείωση της απόδοσης
• Πολλές εναλλαγές περιεχομένου

29
Δομή συστήματος (4 από 4)
• Επεκτάσιμα συστήματα
– Προσθήκη υπομονάδων στον πυρήνα
• Το ΛΣ εξειδικεύεται σε συγκεκριμένη εφαρμογή
– Απαιτείται προστατευμένος τρόπος εκτέλεσης
• Αμμοπαγίδες ή υπογραφή κώδικα
• Νήματα πυρήνα
– Δεν ανήκουν σε διεργασίες χρήστη
– Επιτρέπουν καλύτερη δόμηση του πυρήνα
• Κατάλληλα για πολλά μοντέλα οργάνωσης

30

Μηχανισμός και πολιτική (1 από 2)


• Η πολιτική πρέπει να μπορεί να αλλάξει
– Είτε αφήνεται στο επίπεδο χρήστη
– Είτε παραμετροποιείται από τον χρήστη
– Μεγαλύτερη ευελιξία και δυνατότητα εξέλιξης
• Χρονοπρογραμματισμός νημάτων
– Μηχανισμός: ουρές πολλών επιπέδων
– Πολιτική: προτεραιότητες χρηστών
• Αρχική προτεραιότητα και δυνατότητα αλλαγής της

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)

• Κατάλογοι: εξωτερικά σε εσωτερικά ονόματα


• Πολλαπλοί χώροι ονομάτων
– Windows: αρχεία, αντικείμενα, μητρώο
– UNIX: αρχεία, διεργασίες

35
Χρόνος δέσμευσης
• Πότε δεσμεύεται το όνομα με αντικείμενο;
– Παράδειγμα: μεταβλητές στη C
• Καθολικές: πρώιμη, τοπικές: όψιμη
• Κατανομή μνήμης
– Παλιά κάθε πρόγραμμα δέσμευε στατικά μνήμη
– Με τη σελιδοποίηση η δέσμευση είναι δυναμική
• Παραθυρικά συστήματα
– Οι συντεταγμένες σχεδίασης είναι σχετικές

36

Στατικές ή δυναμικές δομές; (1 από 2)

• Στατικός πίνακας διεργασιών


– Περιορίζει το πλήθος εκτελούμενων διεργασιών
• Πρέπει να έχουμε μια καλή ιδέα για το πλήθος τους
– Απλός και αποδοτικός κώδικας
• Δυναμικός πίνακας διεργασιών
– Λίστα πινάκων: δύσκολη αναζήτηση
– Διπλασιασμός πίνακα: ανάγκη αντιγραφής

37
Στατικές ή δυναμικές δομές; (2 από 2)
• Στοίβα πυρήνα
– Πρέπει να καταχωρηθεί εκ των προτέρων
– Καταναλώνει χώρο μνήμης πυρήνα
• Χρονοπρογραμματισμός διεργασιών
– Στατικός σε συστήματα πραγματικού χρόνου
– Δυναμικός σε όλα τα άλλα
• Δομή πυρήνα
– Δυναμική προσθήκη ενοτήτων
– Εισάγει πρόσθετη πολυπλοκότητα

38

Αναλυτική ή συνθετική υλοποίηση;


• Αναλυτική υλοποίηση
– Ξεκινάμε από κλήσεις συστήματος
– Καταλήγουμε στο υλικό
– Δύσκολο να δοκιμάσουμε οτιδήποτε
• Συνθετική υλοποίηση
– Ξεκινάμε από υλικό και διακοπές
– Προχωράμε σε πολυπρογραμματισμό
– Καταλήγουμε σε μνήμη και συστήματα αρχείων
– Δεν αντιστοιχεί στη μέθοδο σχεδίασης

39
Χρήσιμες τεχνικές (1 από 6)
• Απόκρυψη του υλικού
– Πώς κάνουμε το υλικό να φαίνεται πιο απλό;
• Διαχείριση διακοπών
– Δημιουργία αναδυόμενου νήματος σε διακοπή
– Μετατροπή διακοπής σε mutex unlock
– Μετατροπή διακοπής σε μήνυμα προς νήμα
– Στόχος: χειρισμός διακοπών από σωστά νήματα
• Όχι από ό,τι έτυχε να εκτελείται εκείνη τη στιγμή

40

Χρήσιμες τεχνικές (2 από 6)


• Χρήση ενιαίων αρχείων πηγαίου κώδικα
– Επιτρέπει τη διόρθωση σφαλμάτων μία φορά
– Ορισμένες διαφορές κρύβονται εύκολα
• Υπολογισμός μεγέθους μνήμης στην εκκίνηση
• Ρύθμιση δομών ανάλογα με τη μνήμη
– Άλλες είναι πιο δύσκολες
• Διάφοροι επεξεργαστές θέλουν διαφορετικό κώδικα
• Χρήση μεταγλώττισης υπό συνθήκη

41
Χρήσιμες τεχνικές (3 από 6)

• Παράδειγμα: Pentium και UltraSPARC


– Επιλογή με σημαία ή αρχείο config.h
• Διαφορετικός κώδικας αρχικοποίησης
• Ορισμός κατάλληλων βασικών τύπων
• Δεν μπλέκουμε το σύνολο εντολών με το μέγεθος λέξης!

42

Χρήσιμες τεχνικές (4 από 6)


• Εμμεσότητα
– Το πληκτρολόγιο παράγει κωδικό press/release
• Αντιστοίχιση σε διάφορα σετ χαρακτήρων
• Δυνατότητα αυθαίρετων συνδυασμών πλήκτρων
– Στην οθόνη στέλνουμε κωδικούς χαρακτήρων
• Το αποτέλεσμα εξαρτάται από τη γραμματοσειρά
– Αριθμοί συσκευών στο UNIX
• Δείχνουν σε πίνακα οδηγών (χαρακτήρων ή μπλοκ)
• Επιτρέπουν πολλές συσκευές του ίδιου τύπου

43
Χρήσιμες τεχνικές (5 από 6)
• Δυνατότητα επαναχρησιμοποίησης
– Η διαχείριση χαρτών bit χρειάζεται παντού
• Διαχείριση μπλοκ δίσκου, σελίδων μνήμης, κόμβων i

• Δυνατότητα επανεισόδου
– Ορθή ταυτόχρονη εκτέλεση του ίδιου κώδικα
• Απαιτεί προστασία των κοινών δομών
• Ελαχιστοποίηση απενεργοποίησης διακοπών
– Διευκολύνει την εκτέλεση με πολλούς πυρήνες
44

Χρήσιμες τεχνικές (6 από 6)


• Ωμή βία
– Οι κατάλογοι γενικά δεν είναι ταξινομημένοι
• Σε μικρούς καταλόγους συμφέρει γραμμική αναζήτηση
– Πολυπλοκότητα μόνο όπου αξίζει πραγματικά
• Πρώτα έλεγχος για σφάλματα
– Πρώτα ελέγχουμε αν η κλήση μπορεί να γίνει
– Μετά δεσμεύουμε τους απαιτούμενους πόρους
– Επιστροφή πόρων σε περίπτωση προβλήματος

45
Απόδοση

Γιατί είναι αργά τα ΛΣ;


• Γιατί το Linux είναι πιο αργό από το Unix V7;
– Γιατί κάνει πολύ περισσότερα πράγματα
– Είναι όμως όλα απαραίτητα;
• Το PnP ελέγχει για νέο υλικό σε κάθε εκκίνηση
• Δεν αρκεί να γίνεται έλεγχος μόνο όποτε το ζητάμε;
• Δυνατότητα που παρέχεται έτσι κι αλλιώς!
– Αξίζει να βάλουμε ένα νέο χαρακτηριστικό;
• Ή μήπως μπαίνει για να έχουμε νέα χαρακτηριστικά;
• Ενώ κάνει το σύστημα πιο αργό και επιρρεπή σε σφάλματα;

47
Τι να βελτιστοποιήσουμε; (1 από 2)
• Αρχικά, μόνο τα προφανή!
– Παράδειγμα: να έχουμε κρυφή μνήμη μπλοκ
• Όταν λειτουργεί το σύστημα το μετράμε
– Πόσο γρήγορο και πόσο αποδοτικό είναι;
– Πόσο δύσκολο είναι να βελτιωθεί;
– Πόση βελτίωση περιμένουμε;
– Παράδειγμα: μορφοποίηση σκληρού δίσκου
• Εκτελείται τόσο σπάνια, που δεν αξίζει βελτιστοποίηση

48

Τι να βελτιστοποιήσουμε; (2 από 2)
• Υπάρχουν σημεία βελτιστοποίησης
– Χρονοπρογραμματιστής
• Εκτελείται μετά από κάθε διακοπή
– Αλγόριθμος προσκόμισης σελίδων
• Εκτελείται σε κάθε σφάλμα σελίδας
– Αλγόριθμος αντικατάστασης σελίδων
• Εκτελείται περιοδικά (όχι σε κάθε σφάλμα!)
– Αν είναι αρκετά καλοί, αυτό αρκεί
49
Χώρος έναντι χρόνου (1 από 4)

• Κλασικό παράδειγμα: μακροεντολές


– Μέτρηση των bit ενός byte
• Συχνή χρήση όταν έχουμε χάρτες bit
– Ορίζουμε μία διαδικασία για τη μέτρηση
– Η διαδικασία χρησιμοποιεί έναν βρόχο
• Σε κάθε βήμα ελέγχει ένα bit

50

Χώρος έναντι χρόνου (2 από 4)

• Βήμα 1: αντικατάσταση με μακροεντολή


– Γλυτώνουμε την κλήση διαδικασίας
– Γλυτώνουμε την επιβάρυνση του βρόχου
• Βήμα 2: η μακροεντολή χρησιμοποιεί πίνακα
– Γλυτώνουμε όλους τους υπολογισμούς

51
Χώρος έναντι χρόνου (3 από 4)

• Πίνακες αναζήτησης χρωμάτων


– Έστω ότι θέλω χρώμα 24 bit
– Αποθηκεύω δείκτες στα χρώματα της εικόνας
– Τα χρώματα αποθηκεύονται σε χωριστό πίνακα

52

Χώρος έναντι χρόνου (4 από 4)


• Γλώσσα PostScript
– Αντί να στέλνω χάρτες bit, στέλνω πρόγραμμα
– Το πρόγραμμα περιγράφει την εικόνα
– Πρέπει όμως να εκτελείται στη συσκευή
• Πίνακες κατακερματισμού
– Πολύ γρήγορη δομή αναζήτησης
– Έχει όμως πάντα κενό χώρο

53
Κρυφή μνήμη (1 από 2)

• Αποθηκεύω τα αποτελέσματα που υπολογίζω


– Αν τα χρειαστώ ξανά, δεν τα υπολογίζω ξανά
– Παράδειγμα: ανάλυση ονομάτων καταλόγων
• Κάθε τμήμα του ονόματος κοστίζει 2 αναγνώσεις
• Διαβάζουμε και τον κόμβο i και το μπλοκ δεδομένων
• Χρήση κρυφής μνήμης μετάφρασης ονομάτων σε κόμβους i

54

Κρυφή μνήμη (2 από 2)


• Η κρυφή μνήμη θέλει διαχείριση
– Πρέπει να διαγράφουμε άκυρες τιμές
– Παράδειγμα: διαγραμμένοι κατάλογοι
• Ο κόμβος i μπορεί να χρησιμοποιηθεί αλλού
• Αν ξαναφτιαχτεί το όνομα, θα δείχνει σε άλλο κόμβο i
• Πολλές χρήσεις της κρυφής μνήμης στο ΛΣ
– Κρυφή μνήμη μπλοκ
– Κρυφή μνήμη κόμβων i

55
Υποδείξεις
• Σαν κρυφή μνήμη, αλλά χωρίς συντήρηση
– Δεν είναι εγγυημένα σωστές
– Αν είναι όμως, γλυτώνουμε χρόνο
– Παράδειγμα: σύνδεσμοι σε ιστοσελίδες
• Αν αλλάξει μια ιστοσελίδα, δεν αλλάζουν οι σύνδεσμοι
• Σε κάποια στιγμή θα παρατηρήσουμε το πρόβλημα
• Θα το επιδιορθώσουμε με το χέρι

56

Εκμετάλλευση της τοπικότητας


• Τοπικότητα εκτέλεσης
– Κάθε διεργασία χρησιμοποιεί μέρος των σελίδων
– Οι σελίδες αυτές είναι το σύνολο εργασίας
– Αρκεί να κρατάμε το σύνολο εργασίας στη μνήμη
• Τοπικότητα καταλόγων
– Συχνά δουλεύουμε σε έναν κατάλογο
– Συμφέρει τα αρχεία και οι κόμβοι i να είναι κοντά
– Αξιοποίηση με τις ομάδες κυλίνδρων

57
Βελτιστοποίηση πιθανού (1 από 2)
• Πόσο πιθανό είναι κάθε αποτέλεσμα;
– Αξίζει να βελτιστοποιήσουμε το πιο πιθανό
– Τα ελάχιστα πιθανά δεν αξίζουν τον κόπο
• Κρίσιμες περιοχές σε Windows
– Κλήση EnterCriticalSection σε Win32
• Τις περισσότερες φορές πετυχαίνει άμεσα
• Αρχικά κάνει έλεγχο σε επίπεδο χρήστη με TSL
• Αν δεν πετύχει, κάνει down σε σηματοφόρο

58

Βελτιστοποίηση πιθανού (2 από 2)


• Χρονόμετρα σε UNIX
– Κλήση alarm() για χρονόμετρο
– Αν εκκρεμεί ήδη, ακυρώνεται το παλιό
• Η κλήση δεν μας λέει αν εκκρεμεί
• Πρέπει να ψάξουμε όλη τη λίστα χρονομέτρων
– Τυπικά όμως δεν εκκρεμεί
• Προσθέτουμε σημαία στον πίνακα διεργασιών
• Σε κάθε alarm() θέτουμε τη σημαία
• Αν είναι ενεργή, ψάχνουμε για το εκκρεμές

59
Διαχείριση έργων

Ο μυθικός ανθρωπομήνας (1 από 3)


• Κλασικό βιβλίο του Fred Brooks
– Περιγράφει την εμπειρία υλοποίησης του OS/360
– Δείχνει τη δυσκολία των έργων με ΛΣ
• Πόσο κώδικα έγραφε ένας προγραμματιστής;
• 1000 γραμμές το χρόνο (ελεγμένες, τεκμηριωμένες)
– Τα μεγάλα έργα είναι εγγενώς δύσκολα
• Προδιαγραφές, σχεδίαση, τμηματοποίηση
• Έλεγχος κώδικα σε μονάδες και συνολικά
• Απρόσμενες αλληλεπιδράσεις μεταξύ τους

61
Ο μυθικός ανθρωπομήνας (2 από 3)
• Κατανομή χρόνου υλοποίησης ΛΣ
– 1/3 σχεδίαση
– 1/6 κωδικοποίηση
– 1/4 έλεγχος μονάδων
– 1/4 έλεγχος συστήματος
– Το κόστος δεν είναι η κωδικοποίηση!
• Ο χρόνος δεν είναι εναλλάξιμος με ανθρώπους
– Έστω ότι ένα έργο θέλει 10 άτομα για 2 χρόνια
– Δεν σημαίνει ότι γίνεται με 20 άτομα σε 1 χρόνο

62

Ο μυθικός ανθρωπομήνας (3 από 3)


• Γιατί δεν ισχύει η εναλλαξιμότητα;
– Το έργο δεν γίνεται όλο παράλληλα
• Δεν μπορούμε να γράψουμε κώδικα πριν τη σχεδίαση
– Τα καθήκοντα δεν παραλληλίζονται πλήρως
• Δεν μπορούμε να σπάσουμε τις ενότητες αυθαίρετα
– Η εκσφαλμάτωση είναι βασικά σειριακή
• Ο έλεγχος γίνεται με κάποια σειρά

• Η προσθήκη ανθρώπων, καθυστερεί το έργο


63
Δομή ομάδας (1 από 2)

• Υπάρχουν λίγο εξαιρετικοί προγραμματιστές


– Χρειαζόμαστε μια δομή που να τους υποστηρίζει
• Ο αρχιπρογραμματιστής είναι ο ένας αρχιτέκτονας

64

Δομή ομάδας (2 από 2)


• Η δομή αυτή ισχύει ακόμη
– Ίσως με κάπως μικρότερη ομάδα
• Λόγω αξιοποίησης αυτοματοποιημένων εργαλείων
• Γενίκευση σε μεγάλα έργα
– Οι ομάδες οργανώνονται ιεραρχικά
– Ο προϊστάμενος έχει έως 10 υφιστάμενους
• Ισχύει και στο ανοιχτό λογισμικό
– Ο Linus Torvalds ελέγχει τον πυρήνα του Linux
– Μικρές ομάδες ελέγχουν τους πυρήνες xBSD

65
Ο ρόλος της πείρας (1 από 2)

• Τα περισσότερα λάθη είναι στη σχεδίαση


– Και τα δυσκολότερα να εντοπιστούν
• Οι προγραμματιστές υλοποιούν το λάθος πράγμα
• Αλλά εντοπίζεται μόνο στον έλεγχο συστήματος
– Προτείνεται υλοποίηση ενδιάμεσων συστημάτων

66

Ο ρόλος της πείρας (2 από 2)


• Το πρόβλημα του δεύτερου συστήματος
– Ενίοτε το πρώτο σύστημα είναι καλό (CTSS)
• Οι σχεδιαστές είναι συγκρατημένοι
• Αποφεύγουν την πολυπλοκότητα
– Το δεύτερο όμως αποτυγχάνει (MULTICS)
• Η επιτυχία του πρώτου τους ενθαρρύνει
• Βάζουν στο δεύτερο τα πάντα
– Στο τρίτο έχουν μάθει το μάθημά τους (UNIX)

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

You might also like