Εισαγωγή στα Λειτουργικά Συστήματα Ενότητα 6: Διαχείριση Μνήμης Ι Γεώργιος Φ. Φραγκούλης Τμήμα Ηλεκτρολόγων Μηχανικών
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και στην Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί ενότητας Η κύρια μνήμη (RAM). Ιεραρχία Μνήμης. Διαχείριση Μνήμης. Διαχείριση μνήμης χωρίς αφαίρεση μνήμης. Εναλλαγή. Εικονική μνήμη. Σελιδοποίηση. 4
Περιεχόμενα ενότητας Η κύρια μνήμη (RAM). Ιεραρχία Μνήμης. Διαχείριση Μνήμης. Διαχείριση μνήμης χωρίς αφαίρεση μνήμης. Εναλλαγή. Εικονική μνήμη. Σελιδοποίηση. 5
Η κύρια μνήμη (RAM) Ιδεατά, ένας Η/Υ θα έπρεπε να έχει μία απείρως μεγάλη και πολύ γρήγορη μνήμη. Στην πράξη δεν είναι εφικτό και χρησιμοποιείται μία ιεραρχία μνήμης (registers, cache, RAM, δίσκος κτλ. Το Λ.Σ. είναι υπεύθυνο να διαχειριστεί αυτή την ιεραρχία μνήμης. Το τμήμα του Λ.Σ. που κάνει αυτή τη διαχείριση λέγεται διαχειριστής μνήμης (memory manager). Ποια τμήματα της μνήμης χρησιμοποιούνται; Ποιες διεργασίες χρειάζονται μνήμη; Ποιες διεργασίες δεν την χρειάζονται πλέον; Για τη διαχείριση της μνήμης χρησιμοποιούνται διάφορα αφαιρετικά μοντέλα (abstractions). 6
Ιεραρχία Μνήμης Γρήγορη μνήμη αλλά ακριβή. Μεγάλη χωρητικότητας μνήμη φτηνή αλλά και πιο αργή. Εικόνα 1: Ιεραρχία Μνήμης. Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 7
Διαχείριση Μνήμης (1/2) Σήμερα οι Η/Υ έχουν χιλιάδες φορές περισσότερη μνήμη από τους Η/Υ τη δεκαετία του 60. Τα προγράμματα τείνουν να καταλαμβάνουν τόσο χώρο στη μνήμη όσο τους προσφέρεται. Η μνήμη είναι ένας πόρος ζωτικής σημασίας και η διαχείριση πρέπει να γίνεται προσεκτικά. 8
Διαχείριση Μνήμης (2/2) Ο Διαχειριστής Μνήμης (memory manager) είναι το τμήμα του OS που διαχειρίζεται τη μνήμη. Παρακολουθεί ποια τμήματα της μνήμης είναι σε χρήση και ποια όχι Χορηγεί μνήμη σε διεργασίες όποτε τη χρειάζονται και την αποδίδει στο σύστημα όταν αυτές ολοκληρώσουν το έργο τους Διαχειρίζεται την εναλλαγή διεργασιών (swapping) μεταξύ κύριας μνήμης και δίσκου όταν η κύρια μνήμη δεν είναι αρκετή για να εξυπηρετήσει όλες τις διεργασίες 9
Διαχείριση μνήμης χωρίς αφαίρεση μνήμης (no memory abstraction) 10
Χωρίς αφαίρεση μνήμης (1/2) Η απλούστερη λύση η οποία εφαρμόστηκε στα πρώτα συστήματα. Κάθε πρόγραμμα βλέπει όλη τη διαθέσιμη φυσική μνήμη. Η εντολή MOV REGISTER1, 1000 αντέγραφε τα περιεχόμενα του register στην πραγματική θέση 1000 τηςμνήμης. Δεν ήταν δυνατό να βρίσκονται ταυτόχρονα 2 ή περισσότερα προγράμματα στη μνήμη! Χωρίς προστασία της μνήμης, κάθε πρόγραμμα θα μπορούσε να διαβάσει ή να γράψει σε μία φυσική θέση που χρησιμοποιεί κάποιο άλλο πρόγραμμα. 11
Χωρίς αφαίρεση μνήμης (2/2) Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. Και στις τρεις περιπτώσεις, όταν ο χρήστης εκτελέσει ένα πρόγραμμα, αυτό φορτώνεται στην κύρια μνήμη από το Λ.Σ.. Όταν τερματίσει, ο χρήστης μπορεί να δώσει μία νέα διαταγή. Στις περιπτώσεις (α) και (γ) υπάρχει περίπτωση ένα πρόβλημα στο πρόγραμμα του χρήστη να δημιουργήσει σφάλμα στο Λ.Σ. (εφόσον βρίσκεται στη RAM). 12
Εκτέλεση πολλών προγραμμάτων χωρίς αφαίρεση μνήμης (1/3) Προσθήκη ειδικού υλικού προστασίας (h/w protection) της πρόσβασης στη μνήμη. Η μνήμη διαιρείται σε block (των 2 ΚΒ). Σε κάθε μπλοκ αντιστοιχίζεται ένα κλειδί προστασίας (4 bit) το οποίο αποθηκεύεται σε καταχωρητές της CPU. Για 1 ΜΒ μνήμης απαιτούνται μόλις 256 byte αποθηκευτικού χώρου! (512 καταχωρητές 4 bit) Ο καταχωρητής PSW περιείχε επίσης ένα κλειδί των 4 bit. Το υλικό προστασίας εμπόδιζε την πρόσβαση σε μία λέξη μνήμης, εάν το κλειδί του PSW ήταν διαφορετικό από το κλειδί προστασίας του μπλοκ μνήμης. Μόνο το ΛΣ είχε δυνατότητα να αλλάξει τις τιμές των κλειδιών προστασίας. Ο PSW περιλαμβάνει πληροφορίες όπως η κατάσταση (πυρήνα ή χρήστη), η προτεραιότητα της διεργασίας και διάφορα bit προστασίας (π.χ το κλειδί των 4 bit για την πρόσβαση στη μνήμη). 13
Εκτέλεση πολλών προγραμμάτων χωρίς αφαίρεση μνήμης (2/3) Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 14
Εκτέλεση πολλών προγραμμάτων χωρίς αφαίρεση μνήμης (3/3) Και τα δύο προγράμματα είναι φορτωμένα στη μνήμη, με διαφορετικό κλειδί προστασίας. Όμως τα προγράμματα χρησιμοποιούν απόλυτες και όχι σχετικές διευθύνσεις. Αν εκτελεστεί η εντολή JMP 28 του 2ου προγράμματος, θα προκαλέσει άλμα στη θέση μνήμης 28 που βρίσκεται το 1ο πρόγραμμα! Λύση: Στατική επανατοποθέτηση (static re-allocation). Με το που τοποθετείται το πρόγραμμα στη μνήμη στη θέση Χ, το ΛΣ πρόσθετε κατά τη φόρτωση του προγράμματος, την τιμή Χ σε κάθε εντολή που είχε αναφορά σε άλλη θέση μνήμης. Αργή λύση εφόσον επιβραδύνει τη φόρτωση. Επιπλέον, θα πρέπει να διαχωριστεί με κάποιο τρόπο, ποιες είναι αναφορές στη μνήμη και ποιες είναι απλές αριθμητικές τιμές. 15
Χώροι διευθύνσεων (address space) Χώρος διευθύνσεων (address space): ο χώρος που έχει στη μνήμη ένα πρόγραμμα. Με τις διεργασίες το Λ.Σ. θεωρεί ότι κάθε πρόγραμμα έχει τη δική του CPU. Με τους χώρους μνήμης, το Λ.Σ. θεωρεί ότι κάθε πρόγραμμα έχει τη δική του RAM, ανεξάρτητη από τη μνήμη των άλλων προγραμμάτων (εκτός από ειδικές περιπτώσεις). 1η λύση: Δυναμική επανατοποθέτηση (dynamic relocation) Χρήση δύο registers στη CPU. Καταχωρητής βάσης (base register): από πού ξεκινάει το πρόγραμμα. Καταχωρητής ορίου (limit register): το μήκος του προγράμματος. 16
Καταχωρητές βάσης και ορίου (1/2) Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 17
Καταχωρητές βάσης και ορίου (2/2) Για κάθε πρόσβαση στη μνήμη, το υλικό της CPU προσθέτει τον καταχωρητή βάσης (επανατοποθέτηση). Ταυτόχρονα, ελέγχει εάν το αποτέλεσμα είναι μεγαλύτερο ή ίσο από την τιμή του καταχωρητή ορίου (προστασία). Μειονέκτημα της χρήσης των καταχωρητών: πρέπει να γίνεται κάθε φορά μία πρόσθεση και μία σύγκριση. 18
Εναλλαγή (swapping) (1/4) Εάν η διαθέσιμη μνήμη δεν επαρκεί για όλα τα προγράμματα, τότε η λύση των καταχωρητών base και limit δεν επαρκεί. 2η λύση: Εναλλαγή (swapping). Το Λ.Σ. μεταφέρει κάποιες διεργασίες στη μνήμη για να μπορούν να εκτελεστούν στη CPU. Μετά από κάποιο χρονικό διάστημα, τις μεταφέρει στο δίσκο. Οι αδρανείς διεργασίες θα πρέπει να βρίσκονται στο δίσκο ώστε να μην καταλαμβάνουν μνήμη. Περιοδικά γίνεται έλεγχος ώστε να έχουν μεταφερθεί κάποια στιγμή, όλες οι διεργασίες στη μνήμη. Κάθε διεργασία θα είναι είτε ολόκληρη στη μνήμη είτε ολόκληρη στο δίσκο. 19
Εναλλαγή (swapping) (2/4) Οι αλλαγές στην κατανομή της μνήμης δημιουργούν κενά. Ο συνδυασμός των κενών αυτών λέγεται σύμπτυξη μνήμης (memory compaction). Είναι όμως αρκετά χρονοβόρος. Εικόνα 2: Εναλλαγή. Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 20
Εναλλαγή (swapping) (3/4) Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 21
Εναλλαγή (swapping) (4/4) Εάν το μέγεθος των διεργασιών στη μνήμη είναι σταθερό, η κατανομή των διεργασιών στη μνήμη είναι πολύ απλή. Όμως σε πολλές γλώσσες, τα προγράμματα αυξάνουν το χώρο των δεδομένων τους, λαμβάνοντας δυναμικά χώρο από τη σωρό (heap). Αν μία διεργασία θέλει να επεκταθεί στη μνήμη αλλά ο χώρος γύρω της είναι κατειλημμένος, θα πρέπει: 1. Να αλλάξει θέση, ή 2. Να μεταφερθεί στο δίσκο, ή 3. Να τερματιστεί. 22
Παράδειγμα (1/2) Εικόνα 3: Παράδειγμα. Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 23
Παράδειγμα (2/2) Αν τώρα έρθει ένα process P5 που χρειάζεται 4ΜΒ, δεν μπορεί να γίνει δεκτό, παρότι υπάρχει 4ΜΒ ελεύθερος χώρος στη ΚΜ. Αυτό το φαινόμενο ονομάζεται εξωτερικός κατακερματισμός (external fragmentation). Μια λύση στο πρόβλημα του external fragmentation είναι η σύμπτυξη μνήμης (storage compaction). Sυνδέει όλους τους άδειους χώρους της ΚΜ σ' ένα συνεχόμενο διαμέρισμα της ΚΜ. Σπάνια όμως χρησιμοποιείται επειδή απαιτεί χρονοβόρο memorytomemory copying (CPU time). Εικόνα 4: Παράδειγμα. Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 24
Διαχείριση ελεύθερης μνήμης Για τη δυναμική εκχώρηση της μνήμης, θα πρέπει το Λ.Σ. να έχει κάποιο μηχανισμό για τη διαχείρισή της. Τεχνικές διαχείριση ελεύθερης μνήμης 1. Με χάρτες bit (bitmaps). 2. Με συνδεδεμένες λίστες (free lists). 25
Διαχείριση μνήμης με χάρτες bit (1/2) H μνήμη διαιρείται σε μονάδες κατανομής (allocation units). Σε κάθε allocation unit αντιστοιχεί ένα bit στον χάρτη bit. bit = 0: η μονάδα είναι ελεύθερη. bit = 1: η μονάδα είναι κατειλημμένη. Μέγεθος της μονάδας κατανομής. Μικρό allocation unit: μεγάλος χάρτης bit. Μεγάλο allocation unit: σπατάλη μνήμης στο τελευταίο unit που χρησιμοποιεί κάθε διεργασία. 26
Διαχείριση μνήμης με χάρτες bit (2/2) (a) Ένα τμήμα της μνήμης με πέντε διεργασίες και τρεις οπές. Οι διαβαθμίσεις δείχνουν τις μονάδες κατανομής. Οι γραμμοσκιασμένες περιοχές (που συμβολίζονται με (0) στο χάρτη bit) είναι ελεύθερες. (b) Ο αντίστοιχος χάρτης bit. Εικόνα 5: Διαχείριση μνήμης με χάρτες bit. Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 27
Διαχείριση μνήμης με συνδεδεμένες λίστες (1/3) H συνδεδεμένη λίστα περιέχει πληροφορίες για το ποια και πόσα units είναι γεμάτα ή είναι ελεύθερα. Κάθε καταχώρηση στη λίστα έχει 4 πεδία: Μία ένδειξη για το εάν το τμήμα της μνήμης περιέχει μία (Δ)ιεργασία ή ένα (Κ)ενό (είναι άδειο). Τη διεύθυνση εκκίνησης. Το μέγεθος του τμήματος. Ένα δείκτη στην επόμενη καταχώρηση. Μόλις ολοκληρωθεί μία διεργασία, μπορεί η λίστα να ενημερωθεί πολύ εύκολα. 28
Διαχείριση μνήμης με συνδεδεμένες λίστες (2/3) Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 29
Διαχείριση μνήμης με συνδεδεμένες λίστες (3/3) Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 30
Εικονική μνήμη (virtual memory) 31
Εικονική Μνήμη (virtual memory) (1) Ανάγκη εκτέλεσης μεγάλων προγραμμάτων (μεγαλύτερων από τη διαθέσιμη μνήμη). Η εναλλαγή (swapping) ολόκληρων των προγραμμάτων δεν είναι αποδοτική (λόγω της ταχύτητας του δίσκου). Η εικονική μνήμη (virtual memory) επιλύει το πρόβλημα, διαιρώντας τα προγράμματα σε σελίδες μνήμης (pages). Δεν χρειάζεται να βρίσκονται ταυτόχρονα όλες οι σελίδες μνήμης ενός προγράμματος στη φυσική μνήμη. Όταν χρειάζεται πρόσβαση σε ένα τμήμα του προγράμματος που δεν βρίσκεται στη μνήμη, θα φορτωθεί δυναμικά η αντίστοιχη σελίδα. 32
Σελιδοποίηση (paging) Οι διευθύνσεις που δημιουργούνται από τα προγράμματα είναι εικονικές διευθύνσεις (virtual addresses). Άθροισμα όλων των εικονικών διευθύνσεων = χώρος εικονικών διευθύνσεων (virtual address space). Οι εικονικές διευθύνσεις μεταφέρονται από το δίσκο στη μνήμη μέσω της Μονάδας Διαχείρισης Μνήμης (Memory Management Unit MMU). 33
Σελιδοποίηση (1/4) Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 34
Σελιδοποίηση (2/4) Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 35
Σελιδοποίηση (3/4) Χώρος εικονικών διευθύνσεων (virtual address space): 0 64Κ. Χώρος φυσικών διευθύνσεων (physical memory): 0 32Κ. O χώρος εικονικών διευθύνσεων διαιρείται σε σελίδες (pages) των 4KB. Ο χώρος των φυσικών διευθύνσεων διαιρείται σε πλαίσια σελίδας (page frames) των 4KB. Πραγματικό μέγεθος σελίδων και πλαισίων: από 512 Byte 64 KB. Παράδειγμα: MOV REG, 0 Η εικονική διεύθυνση 0 στέλνεται στην MMU. H MMU βλέπει σε ποια σελίδα βρίσκεται η εικονική διεύθυνση 0 (στο παράδειγμά μας, βρίσκεται στη σελίδα 0). Μετά βλέπει σε ποιο πλαίσιο σελίδας έχει φορτωθεί η σελίδα 0 (στο πλαίσιο 2, δηλ. 8192-12287). Άρα η (εικονική διεύθυνση) 0 = (φυσική θέση) 0+8192 = 8192. 36
Σελιδοποίηση (4/4) Εάν ζητηθεί πρόσβαση σε μία εικονική μνήμη που εκείνη τη στιγμή δεν έχει χαρτογραφηθεί στη φυσική μνήμη θα συμβεί ένα σφάλμα σελίδας (page fault). Η ΜΜU κάνει μία παγίδευση (trap) στον πυρήνα του Λ.Σ. To Λ.Σ. επιλέγει ένα πλαίσιο σελίδας από τη φυσική μνήμη που έχει χρησιμοποιηθεί λίγο και το μεταφέρει στο δίσκο. Μετά φέρνει στο πλαίσιο αυτό την σελίδα για την οποία ζητήθηκε πρόσβαση και αλλάζει το χάρτη της μνήμης. Τέλος επανεκκινεί την εντολή που προκάλεσε το σφάλμα σελίδας. 37
Πίνακες σελίδων Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 38
Δομή μιας καταχώρισης πίνακα σελίδων Πηγή: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 39
Επιτάχυνση της σελιδοποίησης (1/2) Ζητήματα υλοποίησης που αφορούν τη σελιδοποίηση: Η χαρτογράφηση από την εικονική διεύθυνση στη φυσική πρέπει να είναι γρήγορη. Διαφορετικά η χαρτογράφηση της μνήμης θα αποτελέσει σημείο συμφόρησης του συστήματος. Αν ο χώρος των εικονικών διευθύνσεων είναι μεγάλος, ο πίνακας σελίδων μπορεί να είναι μεγάλος. Με σελίδες των 4 ΚΒ και σελίδες των 32 bit, περίπου 1.000.000 εικονικές διευθύνσεις άρα και 1.000.000 εγγραφές στον πίνακα σελίδων. 40
Επιτάχυνση της σελιδοποίησης (2/2) 1η λύση: Χρήση γρήγορων καταχωρητών υλικού. Σε αυτούς τους καταχωρητές φορτώνεται μία φορά ο πίνακας σελίδων κάθε εκτελούμενης διεργασίας. Γρήγορη εκτέλεση, αργή φόρτωση του πίνακα. 2η λύση: Τοποθέτηση του πίνακα σελίδων στη RAM. Χρειάζεται μόνο ένας καταχωρητής για να δείχνει στην αρχή του πίνακα σελίδων. Απαιτούνται μία ή περισσότερες αναφορές στη μνήμη για την εκτέλεση κάθε εντολής. 41
Βιβλιογραφία 1. Tanenbaum κεφάλαιο 3 Πηγή των διαφανειών τα slides από τα βιβλία και τα online-tutorials των : 1. Α. Tanenbaum. 2. W. Stallings. Καθώς και οι online σημειώσεις των 1. Π. Κοτζανικολάου. 2. Κ. Λαμπρινουδάκη. 3. Κ. Μαργαρίτη. 4. Γ. Παπαδόπουλου. 5. Χ. Μανιφάβα. Αll material copyright 1996-2012 All Rights Reserved..42
Τέλος Ενότητας
Σημείωμα Αναφοράς Copyright ΤΕΙ Δυτικής Μακεδονίας, Φραγκούλης Γεώργιος. «Εισαγωγή στα Λειτουργικά Συστήματα». Έκδοση: 1.0. Κοζάνη 2015. Διαθέσιμο από τη δικτυακή διεύθυνση: URL.
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο. που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο. που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο. Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. 45
Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς. το Σημείωμα Αδειοδότησης. τη δήλωση Διατήρησης Σημειωμάτων. το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει). μαζί με τους συνοδευόμενους υπερσυνδέσμους. 46
Σημείωμα Χρήσης Έργων Τρίτων Το Έργο αυτό κάνει χρήση των ακόλουθων έργων: Εικόνες/Σχήματα/Διαγράμματα/Φωτογραφί ες: Tanenbaum, A.: Σύγχρονα Λειτουργικά Συστήματα, Εκδόσεις Κλειδάριθμος. 47