forked from saksoo/TlbSimulation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreadme.txt
33 lines (28 loc) · 4.46 KB
/
readme.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
ΝΙΚΟΛΑΟΣ ΛΙΑΠΠΑΣ
1115200800092
Η εργασία υλοποιήθηκε σε c++. Σκοπός της εργασίας είναι η σχεδίαση ενός διαχειριστή εικονικής μνήμης.
Η εργασία μεταφράζει λογικές διευθύνσεις σε φυσικές. Αποτελείται από ένα Virtual Table (VM) και από
ένα TLB 16 θέσεων καθώς και από την φυσική μνήμη. Η υλοποίηση σε c++ έγινε ως εξής: 1 κλάση για τον tlb,
1 κλάση για την μνήμη μας, 1 κλάση για την εικονική μνήμη , 1 κλάση για το binary αρχείο
και μια κλάση που προσομοιώνει την εκτέλεση του διαχειριστή. Η κλάση προσομοίωση περιλαμβάνει όλες τις υπόλοιπες κλάσεις
(εκτός από την κλάση BackingSote) και η κλάση της φυσικής μνήμης περιλαμβάνει την κλάση Backingstore αφού η φυσική μνήμη
θα έχει πρόσβαση στο αρχείο και θα το χρησιμοποιεί όταν χρειαστεί. Η λογική που ακολουθήσαμε είναι η εξής:
Αφού έχουμε την εικονικη διεύθυνση (λογική) βρίσκουμε τον αριθμό σελίδας και το offset με bitwise and και ολισθήσεις κατάλληλα.
Αφού έχουμε τον αριθμό σελίδας ελέγχουμε με την σειρά αν υπάρχει στον tlb πίνακα, αν υπάρχει στον VM πίνακα και αν δεν υπάρχει
σε κανένα το φέρνουμε στη φυσική μνήμη από το binary αρχείο και ενημερώνουμε τους tlb και VM table αντίστοιχα.
Αν υπάρχει στο VM και δεν υπάρχει στον tlb την εισάγουμε και στον tlb να είναι ενημερωμένος.
Ακολουθούμε πολιτική αντικατάστασης lru στον tlb μόνο αφού μετά από διευκρύνιση του
κ. Χατζηευθυμιάδη έχουμε άπειρη φυσική μνήμη και επειδή στο VM έχουμε επαρκή χώρο αποθήκευσης.
Η υλοποίηση του lru γίνεται με μετρητή age και διώχνουμε πάντα το page με την μικρότερη ηλικία.
Η φυσική διεύθυνση προκύπτει από το frame*PAGE_SIZE + το offset.
Το κάθε page έχει μέγεθος 256bytes αφου 65536/256(2^8 μέγιστοι αριθμοί σελίδας #pages) .
Αντίστοιχα το frame που διαβάζουμε έχει μέγεθος 256bytes (από εκφώνηση).
φού υπολογίσουμε την φυσική διεύθυνση επιστρέφουμε την τιμή του byte (προσημασμένη) και εκτυπώνουμε
τα στατιστικά που μας ζητάει η εκφώνηση. Αναφέρουμε σαν page faults όταν η σελίδα δεν υπάρχει ούτε στον
πίνακα tlb ούτε στον πίνακα vm και αναγκαζόμαστε να το φέρουμε στη μνήμη και επιπλέον το εισάγουμε στους
tlb και vm αντίστοιχα. Η οργάνωση των αρχείων είναι η εξής: 1 αρχείο .cpp με όλες τις κλάσεις και την main
καθώς ο κώδικας δεν είναι πολύπλοκος και είναι πλήρως ευανάγνωστος και δομημένος.
Εκτυπώνουμε τα βασικά που ζητάει: λογική διεύθυνση, φυσική διεύθυνση και τιμή byte ,τα στατιστικά πουζητάει:
ρυθμό σφαλμάτων σελίδας και ρυθμό επιτυχίας tlb καθώς και ρυθμό αποτυχίας tlb και ρυθμό επιτυχίας vm.
Τέλος, έχουμε ορίσει με define στην αρχή του προγράμματος μας όλα τα μεγέθη: PAGE_SIZE, FRAME_SIZE, VIRTUAL_MEMORY_SIZE, MEMORY_SIZE, TLB_SIZE.
Ενδεικτική μεταγλώττιση και εκτέλεση του προγράμματος: make && ./main