Διδακτικά Βιβλία του Παιδαγωγικού Ινστιτούτου
Εικονικές διευθύνσεις
Η πρώτη και πιο απλή σκέψη που μπορεί να γίνει για να λυθεί το πρόβλημα της επικάλυψης των διευθύνσεων είναι να γράφονται έτσι τα προγράμματα ώστε καθένα να χρησιμοποιεί διαφορετικές διευθύνσεις μνήμης. Με τον τρόπο αυτό δεν υπάρχει περίπτωση η μια διεργασία να επηρεάσει την άλλη. Αυτή η λύση όμως δεν είναι στην πράξη και πολύ αποτελεσματική για δυο λόγους: - Τα προγράμματα γράφονται συνήθως ανεξάρτητα από διάφορους ανθρώπους, και δεν είναι δυνατό να βρεθεί ένας τρόπος συνεννόησης και συντονισμού τους. - Το πλήθος των διαθέσιμων διευθύνσεων κύριας μνήμης είναι πεπερασμένο και μάλλον μικρό, οπότε αρκετά γρήγορα θα εξαντληθούν.
Θέλουμε λοιπόν μια λύση που να επιτρέπει στα προγράμματα να χρησιμοποιούν ελεύθερα οποιεσδήποτε διευθύνσεις, και να εξασφαλίζεται από το ΛΣ ότι δε θα υπάρχει επικάλυψη μεταξύ τους. Η λύση αυτή είναι εκείνη των εικονικών διευθύνσεων (virtual addresses): κάθε πρόγραμμα μεταφράζεται σε γλώσσα μηχανής σαν να έχει όλο το χώρο διευθύνσεων στη διάθεσή του, και αναφέρεται στα δεδομένα του χρησιμοποιώντας εικονικές -δηλαδή όχι πραγματικές- διευθύνσεις· όταν το πρόγραμμα φορτώνεται για εκτέλεση, το ΛΣ επιλέγει θέσεις μνήμης που είναι ελεύθερες και τις αντιστοιχίζει στις εικονικές διευθύνσεις.
Κατά την εκτέλεση του προγράμματος, κάθε αναφορά σε μια εικονική διεύθυνση μεταφράζεται από το ΛΣ στην αντίστοιχη φυσική διεύθυνση, η οποία τελικά προσπελάζεται. Η διαδικασία αυτή της μετάφρασης εικονικής διεύθυνσης σε φυσική συνήθως γίνεται πολύ γρήγορα, γιατί οι ΚΜΕ περιέχουν ειδικά κυκλώματα για αυτή.
Ο χώρος εικονικών διευθύνσεων (virtual address space), που πολλές φορές αναφέρεται και ως εικονική μνήμη (virtual memory), έχει συνήθως μεγαλύτερο μέγεθος από το χώρο φυσικών διευθύνσεων για να έχουν οι διεργασίες περισσότερο «χώρο μνήμης» στη διάθεσή τους. Οι εικονικές διευθύνσεις που δεν έχουν αντίστοιχες στη φυσική μνήμη, συνήθως αντιστοιχίζονται σε κάποια διεύθυνση της δευτερεύουσας μνήμης. Με τον τρόπο αυτό η δευτερεύουσα μνήμη συμβάλλει στην αύξηση της διαθέσιμης κύριας μνήμης του συστήματος.
Ο τρόπος αντιστοίχισης των διευθύνσεων για διαφορετικά προγράμματα μπορεί να γίνει με διάφορους τρόπους, δηλαδή με διάφορες στρατηγικές διαχείρισης εικονικής μνήμης. Οι βασικές στρατηγικές είναι δύο, η σελιδοποίηση (paging) και η κατάτμηση (segmentation), και υπάρχει ένας συνδυασμός των δύο, η κατατμημένη σελιδοποίηση (segmented paging). Αυτές οι στρατηγικές έχουν την ιδιότητα να επιτρέπουν πολλές διεργασίες να χρησιμοποιούν από κοινού μνήμη, όπως π.χ. διεργασίες που εκτελούν ταυτόχρονα το ίδιο πρόγραμμα χρησιμοποιούν από κοινού τη μνήμη στην οποία είναι αυτό αποθηκευμένο.