Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης

Σχετικά έγγραφα
Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Κρυφές Μνήμες. (οργάνωση, λειτουργία και απόδοση)

Ιεραρχία Μνήμης. Ιεραρχία μνήμης και τοπικότητα. Σκοπός της Ιεραρχίας Μνήμης. Κρυφές Μνήμες

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

- Εισαγωγή - Επίπεδα μνήμης - Ολοκληρωμένα κυκλώματα μνήμης - Συσκευασίες μνήμης προσωπικών υπολογιστών

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access...9. Κεφάλαιο 2 Χειρισμός πινάκων... 25

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 8. Χειμερινό Εξάμηνο

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Ασκήσεις Caches

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

Εργασία «Διαχείριση Δικτύων» Ιούνιος 2014, Θεσ/νίκη

Κεφάλαιο 7 Ιεραρχία Μνήμης (Memory Hierarchy)

Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC


Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων ΙΙ Σύνολο- Περιεχόμενο Μαθήματος

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Θεωρία Παιγνίων και Αποφάσεων Διδάσκων: Ε. Μαρκάκης, Εαρινό εξάμηνο 2015

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού

Κατακερματισμός (Hashing)

Κεφάλαιο 3 Πολυπλεξία

Αρχές Δικτύων Επικοινωνιών. Επικοινωνίες Δεδομένων Μάθημα 4 ο

Ιεραρχία Μνήμης. Εικονική μνήμη (virtual memory) Επεκτείνοντας την Ιεραρχία Μνήμης. Εικονική Μνήμη. Μ.Στεφανιδάκης

Άσκηση 1η. Θεωρήστε ένα σύστημα μνήμης με μία cache: 4 way set associative μεγέθους 256ΚΒ,

Η εντολή «επανέλαβε Χ»

Μια από τις σημαντικότερες δυσκολίες που συναντά ο φυσικός στη διάρκεια ενός πειράματος, είναι τα σφάλματα.

Προγραμματιστικό Περιβάλλον

Κεφάλαιο 6: Προσομοίωση ενός συστήματος αναμονής

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

ΙΑ ΟΧΙΚΕΣ ΒΕΛΤΙΩΣΕΙΣ

Ασκήσεις Caches

i Στα σύγχρονα συστήματα η κύρια μνήμη δεν συνδέεται απευθείας με τον επεξεργαστή

ΚΕΦΑΛΑΙΟ 3ο ΤΥΧΑΙΟΙ ΑΡΙΘΜΟΙ ΕΛΕΓΧΟΣ ΤΥΧΑΙΟΤΗΤΑΣ

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Εικονική Μνήμη. (και ο ρόλος της στην ιεραρχία μνήμης)

SMPcache. Ένα εργαλείο για προσομοίωση-οπτικοποίηση κρυφής μνήμης (Cache)

ΑΣΚΗΣΗ. Δημιουργία Ευρετηρίων Συλλογής Κειμένων

Φροντιστήριο στο Mac Layer Καραγκούνης Δημήτρης

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΣΤΑΤΙΣΤΙΚΗ ΤΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ. Κεφάλαιο 7. Τυχαίες Μεταβλητές και Διακριτές Κατανομές Πιθανοτήτων

ΕΡΓΑΣΤΗΡΙΟ ΑΝΑΛΟΓΙΚΩΝ & ΨΗΦΙΑΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ. Εργαστήριο 8 ο. Αποδιαμόρφωση PAM-PPM με προσαρμοσμένα φίλτρα

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Επιπλέον διδακτικό υλικό κρυφών μνημών: set-associative caches, πολιτικές αντικατάστασης, χειρισμός εγγραφών

Δίκτυα Υπολογιστών I Εργαστήρια

ΚΕΦΑΛΑΙΟ 2ο ΠΡΟΣΟΜΟΙΩΣΗ ΔΙΑΚΡΙΤΩΝ ΓΕΓΟΝΟΤΩΝ

Τεχνολογίες Κύριας Μνήμης

Δίκτυα Υπολογιστών Εργαστήρια

Τεχνολογία μνημών Ημιαγωγικές μνήμες Μνήμες που προσπελαύνονται με διευθύνσεις:

1 Συστήματα Αυτοματισμού Βιβλιοθηκών

ΤΕΙ Κρήτης, Παράρτηµα Χανίων

Γ ΛΥΚΕΙΟΥ ΚΥΜΑΤΑ ΦΥΣΙΚΗ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ. Επιμέλεια: ΑΓΚΑΝΑΚΗΣ A.ΠΑΝΑΓΙΩΤΗΣ, Φυσικός.

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Μεταπτυχιακό Πρόγραμμα Φυσικού Τμήματος «Υπολογιστική Φυσική» Θέμα εργασίας στο A Μέρος του μαθήματος «Προσομοίωση Χαοτικών Συστημάτων»

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

ΔΕΟ13 - Επαναληπτικές Εξετάσεις 2010 Λύσεις

Δομή Ηλεκτρονικού υπολογιστή

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

Πρωτόκολλα Ελέγχου προσπέλασης μέσου

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο

Πατώντας την επιλογή αυτή, ανοίγει ένα παράθυρο που έχει την ίδια μορφή με αυτό που εμφανίζεται όταν δημιουργούμε μία μεταβλητή.

ΕΘΝΙKΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Ονοματεπώνυμο: ΑΜ:

Κεφάλαιο 9. Έλεγχοι υποθέσεων

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

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

Μάθημα 7: Αλγόριθμοι Χρονοδρομολόγησης

Οργάνωση Υπολογιστών

Η ΙΣΧΥΣ ΕΝΟΣ ΕΛΕΓΧΟΥ. (Power of a Test) ΚΕΦΑΛΑΙΟ 21

Πληροφορική 2. Αλγόριθμοι

Οι δυναμικές δομές δεδομένων στην ΑΕΠΠ

Υπόστρωμα Ελέγχου Πρόσβασης Μέσου. Medium Access Control Sub-layer.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΣΧΟΛΗ ΕΠΙΣΤΗΜΩΝ ΤΗΣ ΔΙΟΙΚΗΣΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΟΙΚΟΝΟΜΙΑΣ ΚΑΙ ΔΙΟΙΚΗΣΗΣ ΣΤΑΤΙΣΤΙΚΗ

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

Μάθημα 8: Διαχείριση Μνήμης

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΡΟΣΟΜΟΙΩΣΗ ΔΙΕΡΓΑΣΙΩΝ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΤΟ ΛΟΓΙΣΜΙΚΟ EXTEND. 1 ο εργαστήριο Διοίκησης και Παραγωγής Έργων

Ένα αναλογικό σήμα περιέχει άπειρες πιθανές τιμές. Για παράδειγμα ένας απλός ήχος αν τον βλέπαμε σε ένα παλμογράφο θα έμοιαζε με το παρακάτω:

Περιεχόμενα. Μέρος 1: Βασικές έννοιες της πληροφορικής Πρόλογος... 11

Ενότητα 5: ΜΕΤΑΒΛΗΤΕΣ

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ. Ηλεκτρονική Υποβολή Α.Π.Δ.

Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Γραμμικός Προγραμματισμός Μέθοδος Simplex

Η ιεραρχία της μνήμης

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Ψευδοκώδικας. November 7, 2011

Ασκήσεις Caches. Αρχιτεκτονική Υπολογιστών. 5ο εξάμηνο ΣΗΜΜΥ ακ. έτος: Νεκ. Κοζύρης

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Εργαστήριο Λειτουργικών Συστημάτων - Αλγόριθμοι Χρονοπρογραμματισμού. Εργαστηριακή Άσκηση

Ακαδημαϊκό Έτος , Χειμερινό Εξάμηνο Μάθημα: Εργαστήριο «Πληροφορική Υγείας» ΕΙΣΑΓΩΓΗ ΣΤΗΝ ACCESS

Συνοπτική Μεθοδολογία Ασκήσεων IP Fragmentation. Ασκήσεις στο IP Fragmentation

Μία μέθοδος προσομοίωσης ψηφιακών κυκλωμάτων Εξελικτικής Υπολογιστικής

ΔΙΟΙΚΗΣΗ ΤΕΧΝΙΚΩΝ ΕΡΓΩΝ

Συνοπτική Μεθοδολογία Ασκήσεων Κεφαλαίου 7. Ασκήσεις στο IP Fragmentation

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Διαχρονικές δομές δεδομένων

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Μάθημα 4ο. Προγράμματα

Τηλεπικοινωνιακά Συστήματα ΙΙ

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

ΙΚΤΥΑ ΕΠΙΚΟΙΝΩΝΙΩΝ Ασκήσεις για το φυσικό στρώμα. λ από τον ρυθμό μετάδοσής της. Υποθέτοντας ότι ο κόμβος A

Σ ΤΑΤ Ι Σ Τ Ι Κ Η. Statisticum collegium iv

Transcript:

Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης Τμήμα Πληροφορικής Περιγραφή του επιστημονικού άρθρου Dissemination-based Data Delivery Using Broadcast Disks Swarup Acharya, Dept. of Computer Science, Brown University, Michael Franklin, Dept. of Computer Science, University of Maryland Stanley Zdonik, Dept. of Computer Science, Brown University & Ανάπτυξη προσομοιωτή της μεθόδου Broadcast Disks - Έρευνα και βελτιώσεις Εργασία για το μάθημα Ανάλυση της Απόδοσης και Προσομοίωση Επικοινωνιακών Συστημάτων Ελευθέριος Τιάκας (ΑΕΜ:80) Στέφανος Ουγιάρογλου (ΑΕΜ:68) Φοιτητές της κατεύθυνσης «Πληροφοριακά Συστήματα» του Μεταπτυχιακού προγράμματος του τμήματος Πληροφορικής Ιανουάριος 2005

Περιεχόμενα ΚΕΦΑΛΑΙΟ 1: Dissemination-based Data Delivery Using Broadcast Disks 5 1.1 Περίληψη 5 1.2 Εισαγωγή 5 1.3 Εφαρμογές 6 1.4 Broadcast Disks 6 1.5 Server Broadcast Program 7 1.5.1 Ιδιότητες των Broadcast Programs 7 1.5.2 Διαδικασία παραγωγής των broadcast δίσκων 9 1.6 Client Cache Management 11 1.7 Prefetching 13 1.7.1 Η πολιτική Tag Team 14 1.7.2 Η πολιτική PT 14 1.8 The Read/Write Case 16 1.9 Πειράματα Μελέτη της απόδοσης των Broadcast Disks 16 1.9.1 No caching & 0% Noise 16 1.9.2 No caching & Noise 17 1.9.3 Caching & Noise 18 ΚΕΦΑΛΑΙΟ 2: Περιγραφή του προσομοιωτή Broadcast Disks 19 2.1 Εισαγωγή 19 2.2 Περιγραφή εικονιδίων της εφαρμογής 19 2..3 Οθόνη παραμέτρων προσομοίωσης 19 2.4 Οθόνη κατασκευής προγραμμάτων εκπομπής 21 2.5 Οθόνη στατιστικά client 23 2.6 Οθόνη προσομοίωσης 24 2.7 Οθόνη Σχετικά 26-2-

ΚΕΦΑΛΑΙΟ 3: Παραδείγματα εκτέλεσης του Broadcast Disks Simulator 27 3.1 Αναλυτική παρουσίαση παραδείγματος εκτέλεσης 27 3.2 Περισσότερα παραδείγματα εκτέλεσης 31 3.2.1 Πείραμα 1 31 3.2.2 Πείραμα 2 31 3.2.3 Πείραμα 3 31 3.2.4 Πείραμα 4 32 3.2.5 Πείραμα 5 32 3.2.6 Πείραμα 6 32 3.2.7 Πείραμα 7 33 3.2.8 Πείραμα 8 33 3.2.9 Σύνοψη αποτελεσμάτων 34 ΚΕΦΑΛΑΙΟ 4: Τεκμηρίωση του κώδικα του Broadcast Disks Simulator 37 4.1 Εισαγωγή 37 4.2 Περιγραφή δημοσίων μεταβλητών και πινάκων 37 4.3 Αλγόριθμος εύρεσης του βέλτιστου αριθμού δίσκων 38 4.4 Διαδικασία εισαγωγής πιθανοτήτων προσπέλασης 40 4.5 Διαδικασία εύρεσης των διαστημάτων των δίσκων 41 4.6 Διαδικασία υπολογισμού συχνοτήτων δίσκων 42 4.7 Διαδικασία δημιουργίας Chunks 44 4.8 Διαδικασία (Αλγόριθμος) δημιουργίας του προγράμματος chunks 46 4.9 Διαδικασία δημιουργίας flat προγράμματος 48 4.10 Αλγόριθμος δημιουργίας προγράμματος αποφεύγοντας το βήμα δημιουργίας chunks 48 4.11 Συνάρτηση εύρεσης του πλήθους σελίδων που ανήκουν σε ένα δίσκο 50 4.12 Διαδικασία δημιουργία προγράμματος indexes σελίδων 50 4.13 Βοηθητικές διαδικασίες και συναρτήσεις 50 4.14 Διαδικασίες ανάκτησης και αποθήκευσης των παραμέτρων στην Registry των Windows 52 4.15 Διαδικασίες αποθήκευσης πληροφοριών σε αρχεία κειμένου 53 4.16 Διαδικασία υπολογισμού μέσων καθυστερήσεων 55 4.17 Διαδικασία υπολογισμού καθυστέρησης 56 4.18 Συνάρτηση εύρεσης του δίσκου όπου βρίσκεται μια σελίδα 57 4.19 Αλγόριθμος προσομοίωσης πραγματικού χρόνου 58 4.20 Διαδικασίες Interface 60-3-

4.21 Διαδικασίες και Συναρτήσεις οθόνης εισαγωγής παραμέτρων 63 4.22 Διαδικασίες Οθόνης κατασκευής προγράμματος (Αρχική οθόνη) 66 4.23 Διαδικασίες Οθόνης στατιστικών Clients 67 4.24 Διαδικασίες οθόνης προσομοιωσης 68 4.25 Διαδικασίες δημιουργίας γραφημάτων οθόνης κατασκευής προγράμματος _69 4.26 Διαδικασίες δημιουργίας γραφημάτων οθόνης προσομοίωσης 70 4.27 Διαδικασίες δημιουργίας γραφημάτων οθόνης στατιστικών Clinet 71 Βιβλιογραφικές Αναφορές 73-4-

ΚΕΦΑΛΑΙΟ 1: Dissemination-based Data Delivery Using Broadcast Disks 1.1 Περίληψη Η τεχνολογία των φορητών υπολογιστών και των ασυρμάτων δικτύων υπόσχεται ότι στο μέλλον η χρήση των υπολογιστών και η πρόσβαση σε ασύρματα δίκτυα θα μπορεί να γίνεται οπουδήποτε, οποιαδήποτε στιγμή. Για να επιτευχθεί αυτό θα πρέπει οι φορητοί υπολογιστές (clients) να έχουν πρόσβαση στα δεδομένα του δικτύου σε οποιαδήποτε στιγμή και από οποιοδήποτε μέρος. Ωστόσο, για να γίνει αυτό υπάρχουν αντικειμενικές δυσκολίες: Οι φορητοί υπολογιστές πολλές φορές μπορεί, λόγω της θέσης τους ή της μετακίνησης τους, να είναι αποσυνδεμένοι από τον server που τους εξυπηρετούσε μέχρι την στιγμή της αποσύνδεσης. Οι φορητοί υπολογιστές είναι πολύ πιθανό σε κάποια σημεία να έχουν πολύ μικρό bandwidth και έτσι να μην επικοινωνούν με τον server. Ένα τέτοιο περιβάλλον είναι δύσκολο να υποστηρίξει εφαρμογές που απαιτούν συνεχή επικοινωνία με τον server εξαιτίας τριών λόγων: Η αδυναμία πρόβλεψης (με ακρίβεια 100%) των δεδομένων που θα απαιτηθούν μελλοντικά από τον client. Συνήθως οι δίσκοι των φορητών υπολογιστών είναι μικρής χωρητικότητας και έτσι είναι πολυτέλεια να «κατεβούν» στον client δεδομένα που δεν θα χρησιμοποιηθούν μελλοντικά. Η ανάγκη να κατεβάζουμε στους clients νέες εκδόσεις των δεδομένων που βρίσκονται στον server αφού αυτά μπορούν να γράφονται από άλλους clients. Ένας τρόπος για να επιτευχθεί ο παραπάνω στόχος είναι κάθε server του δικτύου να έχει ένα κανάλι επικοινωνίας με τους clients που είναι συνδεμένοι σε αυτόν, ώστε να κάνει broadcast τα δεδομένα στους clients και αυτοί να βρίσκουν κάτι που χρειάζονται σε αυτό το κανάλι. Ένας τέτοιος μηχανισμός, ονομάζεται broadcast disks και έχει στόχο την πρόσβαση από τους clients στις βάσεις δεδομένων του server σε ένα τέτοιο περιβάλλον. 1.2 Εισαγωγή Είναι γνωστό ότι σε πολλά συστήματα client-server, το «κατέβασμα» δεδομένων από τους servers στους clients είναι γρηγορότερο από ότι το «ανέβασμα». Για παράδειγμα ένας server σε ένα ασύρματο δίκτυο μπορεί να έχει ένα κανάλι με μεγάλο bandwidth για broadcast, ενώ οι clients δεν μπορούν να μεταδώσουν δεδομένα ή έχουν πολύ μικρό bandwidth για μετάδοση. Τέτοια συστήματα καλούνται ασύμμετρα περιβάλλοντα επικοινωνίας. Παρακάτω ακολουθούν κάποια παραδείγματα τέτοιων περιβαλλόντων: Ασύρματα δίκτυα με σταθερούς servers και φορητούς clients Πληροφοριακά Συστήματα για ευμετάβλητες, time-sensitive, πληροφορίες όπως τιμές προϊόντων, πληροφορίες καιρικών συνθηκών κ.α. Καλωδιακή ή δορυφορική τηλεόραση όπου οι συσκευές των τηλεθεατών επιτρέπουν την επικοινωνία με τους severs που κάνουν broadcast. Συστήματα ανάκτησης πληροφορίας όπου υπάρχει μεγάλος αριθμός clients (π.χ. υπηρεσίες καταλόγων και ηλεκτρονικού ταχυδρομείου, help-desk λογισμικού κ.α.) Ένα σύστημα Broadcast disks, εκμεταλλεύεται το βασικό πλεονέκτημα των servers σε τέτοια περιβάλλοντα, το οποίο δεν είναι άλλο από τα κανάλια μεγάλου bandwidth που διαθέτουν για να εκτελούν διαδικασίες broadcast. Έτσι, ένα περιβάλλον που χρησιμοποιεί τον μηχανισμό Broadcast disks, επανειλημμένα και συνεχόμενα κάνει broadcast τα δεδομένα στους clients. Σαν αποτέλεσμα, το κανάλι broadcast γίνεται ένας δίσκος από όπου οι clients μπορούν να βρίσκουν τα δεδομένα που χρειάζονται. Στο άρθρο αυτό, προτείνεται μια νέα έκδοση του παραπάνω μηχανισμού broadcast disks. Πιο συγκεκριμένα, η έκδοση αυτή επικεντρώνεται στην αύξηση της διαθεσιμότητας των δεδομένων που βρίσκονται στους servers. Έτσι έχουμε: Πολλούς δίσκους διαφορετικού μεγέθους και ταχύτητας Τα δεδομένα που είναι πιθανό να ζητηθούν από πολλούς clients γίνονται broadcast περισσότερες φορές από άλλα. -5-

Τα παραπάνω έχουν σαν αποτέλεσμα τη δημιουργία μιας ιεραρχίας μνήμης, η οποία εξαρτάται από την αναμενόμενη καθυστέρηση για να αποκτηθεί ένα αντικείμενο (δεδομένο) και από το πόσο συχνά αυτό γίνεται broadcast. Επίσης, η μελέτη αυτή επικεντρώνεται στο να αξιοποιείται η δευτερεύουσα μνήμη των clients για την αποθήκευση των δεδομένων και την μείωση της εξάρτησής τους από το τι θα κάνει broadcast ο server, και παράλληλα να επιτυγχάνεται perfecting από τους clients ώστε να μειώνεται η αναμενόμενη καθυστέρηση των αντικειμένων που αιτούνται. 1.3 Εφαρμογές Ένα από τα γνωστά προβλήματα στα ασύρματα περιβάλλοντα είναι η επιλεκτική αποσύνδεση: Πολλοί clients αποσυνδέονται από τον server επειδή το κόστος είναι πολύ μεγάλο ή επειδή δεν υπάρχει δυνατότητα σύνδεσης στην περιοχή προς την οποία κινείται ο χρήστης. Σε περίπτωση που δεν υπάρχει broadcast των δεδομένων από τον server, οι αποσυνδεμένοι χρήστες είναι αναγκασμένοι να εμπιστεύονται τα δεδομένα που βρίσκονται τοπικά στις συσκευές τους. Ωστόσο, τα δεδομένα αυτά μπορεί να είναι ανεπαρκή για διάφορους λόγους: Πολλές φορές δεν είναι εύκολο να προβλεφθεί με ακρίβεια ποια αντικείμενα θα απαιτηθούν στο μέλλον ώστε αυτά να γίνουν prefetching, και έτσι οι χρήστες θα εξακολουθούν μετά από την αποσύνδεση τους να έχουν πρόσβαση σε αυτά. Πολλά από τα δεδομένα που έχουν προβλεφθεί και έχουν γίνει prefetching πριν την αποσύνδεση του χρήστη, μπορεί να μην είναι πλέον έγκυρα αφού σε αυτά θα έχουν πρόσβαση για write πολλοί άλλοι clients. Τέλος, κάποια αντικείμενα που είναι χρήσιμα για έναν client μπορεί να έχουν δημιουργηθεί την στιγμή που ο client αυτός είναι αποσυνδεμένος από τον server. Πρέπει να αναφερθεί ότι η απόδοση του δικτύου που χρησιμοποιεί τον μηχανισμό broadcast disk δεν εξαρτάται από τον αριθμό των clients (όπως και στα τηλεοπτικά δίκτυα). Έτσι, συμπεραίνουμε ότι το broadcast disk είναι ένας μηχανισμός που διαδίδει τα αντικείμενα στους clients. Μια εφαρμογή των broadcast disk θα μπορούσε να είναι στο σύστημα πληροφοριών κίνησης «Advanced Traffic Information System - ATIS». Ένα τέτοιο σύστημα περιλαμβάνει κάποιους hosts σε μια περιοχή, ενώ οι οδηγοί των αυτοκινήτων έχουν στην διάθεση τους μια συσκευή η οποία τους βοηθάει στο να προσεγγίζουν τον προορισμό τους. Το broadcast μπορεί να σχεδιαστεί ώστε να αποστέλλονται στους οδηγούς πληροφορίες όπως οι σχηματισμοί των οδών ή περιοχές όπου υπάρχει μποτιλιάρισμα. Σε ένα τέτοιο σύστημα μπορεί να υπάρχουν 200000 αυτοκίνητα, ωστόσο πολλά από αυτά μπορεί να μην είναι συνδεδεμένα με τον server την περισσότερη ώρα. Από την στιγμή που τα δεδομένα τα οποία πιθανόν απαιτούνται από κάποιους clients είναι ευμετάβλητα, δεν μπορούν να γίνουν prefetching στους clients. Για να πάρουν οι clients κάποια δεδομένα που δεν διαθέτουν τοπικά έχουν δύο επιλογές: Να απαιτήσουν με ερώτημα προς τον server να στείλει αυτά τα δεδομένα Να ακούσουν το κανάλι broadcast ώστε να ανακτήσουν τα δεδομένα που χρειάζονται. Εύκολα γίνεται αντιληπτό ότι ένα σύστημα που βασίζεται στην εξυπηρέτηση των αιτήσεων των χρηστών έχει προβλήματα αυξομείωσης (scalability) aαφού όσο αυξάνεται ο αριθμός των αιτήσεων, τόσο η απόδοση του συστήματος χειροτερεύει. Αντίθετα, τέτοια προβλήματα δεν υπάρχουν κάνοντας broadcast. Τέλος, πρέπει να αναφερθεί ότι αν το bandwidth του καναλιού από όπου γίνεται το broadcast είναι περιορισμένο, τότε μόνο δυναμικές πληροφορίες, όπως μποτιλιαρίσματα, ατυχήματα κτλ θα πρέπει να μεταδίδονται από αυτό. Οι στατικές πληροφορίες, όπως ονόματα οδών, μπορούν να ανακτώνται από την τοπική δευτερεύουσα μνήμη της κάθε συσκευής. 1.4 Broadcast Disks Η κύρια πρόκληση στην τεχνική των broadcast disks όσον αφορά τη μεριά του server, είναι το πώς θα οργανωθούν τα δεδομένα στο broadcast, αφού αυτό έχει ως συνέπεια την μεγάλη (ή μικρή) απόδοση του δικτύου. Επιπλέον, εξαιτίας του γεγονότος ότι το bandwidth του καναλιού είναι περιορισμένο, το να αυξήσουμε την συχνότητα broadcast μερικών αντικειμένων συνεπάγεται και τη μείωση της συχνότητας κάποιων άλλων. Από τη μεριά των clients, η κύρια πρόκληση είναι το πώς θα γίνεται η αντικατάσταση σελίδων (page replacement), με ποιο τρόπο θα γίνεται το prefetching καθώς και ποια αντικείμενα θα γίνονται -6-

prefetching. Το τι θα γίνει prefetching είναι κρίσιμο αφού κάποια αντικείμενα γίνονται broadcast συχνότερα από κάποια άλλα. Έτσι, η απόφαση στο τι θα αποθηκευτεί τοπικά, θα πρέπει να λαμβάνεται έχοντας υπόψη: το κόστος της πιθανής επανάληψης της ανάκτησης του ίδιου αντικειμένου και την πιθανότητα να απαιτηθεί ξανά το αντικείμενο αυτό. 1.5 Server Broadcast Program 1.5.1 Ιδιότητες των Broadcast Programs Πρέπει να αναφερθεί ότι όταν σε κάποιον client εκτελείται μια εφαρμογή η οποία χρειάζεται κάποιο αντικείμενο, τότε αρχικά το αντικείμενο αυτό αναζητείται στην τοπική cache, και στην συνέχεια (αν δεν βρεθεί τοπικά) ανακτάται περιμένοντας το αντικείμενο αυτό να έρθει στο broadcast. Σε ένα broadcast based πληροφοριακό σύστημα, κάθε server πρέπει να κατασκευάζει ένα πρόγραμμα εκπομπής το οποίο να καλύπτει όσο το δυνατόν περισσότερο τις ανάγκες των clients. Π.χ. αν ξέρουμε ότι ένα σύνολο δεδομένων ζητείται από όλους τους clients, τότε απλά ο server αρκεί να ενώσει όλα αυτά τα δεδομένα και να τα εκπέμψει κυκλικά. Ένα τέτοιο flat πρόγραμμα παρουσιάζεται στο παρακάτω σχήμα. Αν χρησιμοποιηθεί ένα τέτοιο flat πρόγραμμα, η αναμονή για ένα αντικείμενο στο broadcast είναι ίδια για όλα τα αντικείμενα και συγκεκριμένα είναι η μισή περίοδος του broadcast. Ωστόσο, το πρόγραμμα αυτό δε λαμβάνει υπόψη το πόσο σημαντικό θεωρείται το κάθε αντικείμενο από τους clients. Σχήμα 1: flat Broadcast Program Στην προσέγγιση των πολλαπλών Broadcast Disks έχουμε διαφορετική οργάνωση στα αντικείμενα που εκπέμπονται. Έτσι, αντί να έχουμε έναν flat δίσκο, έχουμε πολλούς δίσκους διαφορετικού μεγέθους ο καθένας από τους οποίους έχει διαφορετική ταχύτητα περιστροφής. Φτιάχνοντας γρήγορους τους μικρούς δίσκους και αργούς τους μεγάλους δίσκους, έχουμε μια δομημένη ιεραρχία μνήμης. Άρα, τα αντικείμενα τα οποία αιτούνται πιο συχνά από όλα (hot items) θα τοποθετηθούν στον πιο γρήγορο δίσκο, ενώ τα αντικείμενα με τη λιγότερη ζήτηση (cold items) θα τοποθετηθούν στον πιο αργό δίσκο. Αυτή η οργάνωση θα έχει σαν αποτέλεσμα τη μικρότερη δυνατή καθυστέρηση στα δεδομένα που ζητούνται συχνότερα, αυξάνοντας με τον τρόπο αυτό, την απόδοση του δικτύου. Τέλος, η αναμονή για ένα «κρύο» αντικείμενο θα είναι μεγαλύτερη από την αντίστοιχη στο flat πρόγραμμα. Όπως είπαμε μπορούμε να έχουμε non-flat broadcast προγράμματα. Αυτό γίνεται ως εξής: έχοντας τις πιθανότητες πρόσβασης των clients σε κάθε αντικείμενο, ο server καθορίζει με έναν δίκαιο τρόπο, το bandwidth που θα δοθεί σε κάθε ένα από τα αντικείμενα αυτά. Το πρόγραμμα διάδοσης, λαμβάνοντας υπόψη την κατανομή του bandwidth, πρέπει να κατασκευάζεται με τέτοιο τρόπο ώστε ο μέσος χρόνος άφιξης δύο στιγμιότυπων του ιδίου αντικειμένου να αντιστοιχίζεται με τις ανάγκες των clients. Η τυχαία κατασκευή ενός προγράμματος (τέτοιο ώστε να λαμβάνει υπόψη την κατανομή του broadcast στα αντικείμενα σύμφωνα με τη ζήτηση τους) πιθανόν να μην έχει καλά αποτελέσματα, αφού δεν έχει ως σκοπό τη μείωση της αναμενόμενης καθυστέρησης. Τα παραπάνω, γίνονται πιο κατανοητά μελετώντας το παρακάτω: Παράδειγμα: έστω 3 διαφορετικά προγράμματα διάδοσης για ένα σύνολο δεδομένων που περιλαμβάνει 3 αντικείμενα ιδίου μεγέθους (σχήμα 2). Πρόγραμμα a: το πρώτο πρόγραμμα είναι flat. Πρόγραμμα b: το δεύτερο πρόγραμμα επαναλαμβάνει 2 φορές το αντικείμενο Α αφού αυτό έχει μεγαλύτερη πιθανότητα πρόσβασης από τους clients. Η επανάληψη αυτή γίνεται συνεχόμενη δηλαδή τα στιγμιότυπα του αντικειμένου Α ομαδοποιούνται και τοποθετούνται μαζί στο broadcast. -7-

Πρόγραμμα c: το τρίτο πρόγραμμα επαναλαμβάνει 2 φορές το αντικείμενο Α αλλά με τέτοιο τρόπο ώστε να μειώνεται η αναμενόμενη καθυστέρηση. Το πρόγραμμα αυτό αναφέρεται και ως multi-disk broadcast αφού είναι σαν να έχουμε το αντικείμενο A σε έναν μικρότερο δίσκο που περιστρέφεται 2 φορές πιο γρήγορα από ότι ο δίσκος με τα αντικείμενα B και C. Παρακάτω δίνονται σχηματικά τα 3 προγράμματα καθώς επίσης και οι πιθανότητες πρόσβασης (πίνακας 1) σε κάθε αντικείμενο. Σχήμα 2: προγράμματα διάδοσης Access probability Περίπτωση A B C 1 0.333 0.333 0.333 2 0.5 0.25 0.25 3 0.75 0.125 0.125 4 0.9 0.05 0.05 5 1 0 0 Πίνακας 1 Έχοντας τα προγράμματα και τον πίνακα πιθανοτήτων πρόσβασης των αντικειμένων, μπορούμε εύκολα να υπολογίσουμε τις μέσες καθυστερήσεις των αντικείμενων για κάθε πρόγραμμα: Πρόγραμμα a: PB(Α) = (0 + 2 + 1) / 3 + 1/2 = 1.5 PB(B) = (0 + 2 + 1) / 3 + 1/2 = 1.5 PB(C) = (0 + 2 + 1) / 3 + 1/2 = 1.5 Πρόγραμμα b: PB(A) = (0 + 0 + 2 + 1) / 4 + 1/2 = 1.25 PB(B) = (0 + 3 + 2 + 1) / 4 + 1/2 = 2 PB(C) = (0 + 3 + 2 + 1) / 4 + 1/2 = 2 Πρόγραμμα c: PB(A) = (0 + 1 + 0 + 1) / 4 + 1/2 = 1 PB(B) = (0 + 3 + 2 + 1) / 4 + 1/2 = 2 PB(C) = (0 + 3 + 2 + 1) / 4 + 1/2 = 2 A B C a 1.5 1.5 1.5 b 1.25 2 2 c 1 2 2 Πίνακας 2 Αφού έχουμε υπολογίσει και τις μέσες καθυστερήσεις για κάθε αντικείμενο, μπορούμε να υπολογίσουμε και τις αναμενόμενες καθυστερήσεις και γενικότερα την απόδοση του κάθε προγράμματος: Περίπτωση 1 Delay(a) = 0.333 * 1.5 + 0.333 * 1.5 + 0.333 * 1.5 = 1.5 Delay(b) = 0.333 * 1.25 + 0.333 * 2 + 0.333 * 2 = 1.75 Delay(c) = 0.333 * 1 + 0.333 * 2 + 0.333 * 2 = 1.67 Περίπτωση 2 Delay(a) = 0.5 * 1.5 + 0.25 * 1.5 + 0.25 * 1.5 = 1.5 Delay(b) = 0.5 * 1.25 + 0.25 * 2 + 0.25 * 2 = 1.63 Delay(c) = 0.5 * 1 + 0.25 * 2 + 0.25 * 2 = 1.5 Περίπτωση 3 Delay(a) = 0.75 * 1.5 + 0.125 * 1.5 + 0.125 * 1.5 = 1.5 Delay(b) = 0.75 * 1.25 + 0.125 * 2 + 0.125 * 2 = 1.44 Delay(c) = 0.75 * 1 + 0.125 * 2 + 0.125 * 2 = 1.25 Περίπτωση 4 Delay(a) = 0.9 * 1.5 + 0.05 * 1.5 + 0.05 * 1.5 = 1.5 Delay(b) = 0.9 * 1.25 + 0.05 * 2 + 0.05 * 2 = 1.33 Delay(c) = 0.9 * 1 + 0.05 * 2 + 0.05 * 2 = 1.1-8-

Περίπτωση 5 Delay(a) = 1 * 1.5 + 0 * 1.5 + 0 * 1.5 = 1.5 Delay(b) = 1 * 1.25 + 0 * 2+0 * 2 = 1.25 Delay(c) = 1 * 1 + 0 * 2 + 0 * 2 = 1 Expected delay Περίπτωση a (flat program) b (skewed program ) c (broadcast disks) 1 1.5 1.75 1.67 2 1.5 1.63 1.5 3 1.5 1.44 1.25 4 1.5 1.33 1.1 5 1.5 1.25 1 Πίνακας 3: Αναμενόμενη καθυστέρηση - Απόδοση προγραμμάτων Συμπεράσματα - σχολιασμός αποτελεσμάτων Το πρώτο σημείο το οποίο θα πρέπει να υπογραμμίσουμε είναι ότι: για ίδιες πιθανότητες προσπέλασης των αντικειμένων από τους clients, το flat πρόγραμμα έχει την καλύτερη απόδοση δηλαδή την λιγότερη μέση αναμονή. Το γεγονός αυτό είναι αποτέλεσμα του κανόνα που λέει ότι αυξάνοντας τον ρυθμό διάδοσης ενός αντικειμένου, ταυτόχρονα μειώνεται ο ρυθμός διάδοσης των άλλων αντικειμένων. Το δεύτερο σημείο όπου πρέπει να σταθούμε είναι ότι όσο οι πιθανότητες προσπέλασης των αντικειμένων «λοξεύουν», τόσο τα non-flat προγράμματα αποδίδουν καλύτερα. Το τελευταίο σημαντικό συμπέρασμα που βγαίνει μελετώντας τα παραπάνω αποτελέσματα είναι ότι σε καμία περίπτωση το skewed πρόγραμμα δεν αποδίδει καλύτερα από το πρόγραμμα broadcast disks. Επιπρόσθετα, εκτός από την υπεροχή στην απόδοση του προγράμματος broadcast disks σε σχέση με το skewed πρόγραμμα, το broadcast disks έχει και άλλα πλεονεκτήματα. Ένα από αυτά είναι ότι αν χρησιμοποιήσουμε ένα τυχαίο (skewed) πρόγραμμα, δυσκολεύουμε τις τεχνικές prefetching αφού πολλές από αυτές απαιτούν να γνωρίζουν πότε εκπέμπεται ένα αντικείμενο. Επίσης, ένα τέτοιο τυχαίο πρόγραμμα δεν επιτρέπει στους clients να αδρανοποιούνται ώστε να εξασφαλίζουν ενέργεια αφού είναι αναγκασμένοι να «ακούν» το κανάλι broadcast ώστε να βρουν το αντικείμενο που ψάχνουν. Αντίθετα, αν χρησιμοποιηθεί σαν broadcast τεχνική το πρόγραμμα broadcast disks, οι clients μπορούν να ενεργοποιούνται την στιγμή που περνάει το ποθητό αντικείμενο από το κανάλι broadcast. Για τους παραπάνω λόγους καταλήγουμε στο συμπέρασμα ότι το πρόγραμμα διάδοσης πρέπει να έχει τα εξής χαρακτηριστικά: Οι χρόνοι άφιξης των στιγμιότυπων των αντικειμένων στο κανάλι broadcast πρέπει να είναι σταθεροί. Δηλαδή τα αντικείμενα θα περνάνε σε σταθερά χρονικά σημεία στο κανάλι. Πρέπει να υπάρχει μικρός αριθμός ρυθμών μετάδοσης, δηλαδή δίσκων. Πρέπει να υπάρχει μια σταθερή περίοδος μετά την οποία το broadcast πρόγραμμα επαναλαμβάνεται. Προϋπόθεση για τα παραπάνω χαρακτηριστικά είναι ότι όσο γίνεται περισσότερο το διαθέσιμο bandwidth για broadcast, τόσο θα χρησιμοποιείται. 1.5.2 Διαδικασία παραγωγής των broadcast δίσκων Για να δημιουργήσουμε ένα πρόγραμμα broadcast disks πρέπει να καθορίσουμε τρεις παραμέτρους: Αριθμός των δίσκων: καθορίζει τον αριθμό των διαφορετικών συχνοτήτων κατά τις οποίες τα αντικείμενα εκπέμπονται Αριθμό των σελίδων σε κάθε δίσκο Την συχνότητα κατά την οποία εκπέμπονται τα αντικείμενα. Οι παράμετροι αυτοί καθορίζουν το μέγεθος του broadcast και τον ρυθμό άφιξης των αντικείμενων σε κάθε δίσκο. Για παράδειγμα τοποθετώντας μια σελίδα στον γρήγορο δίσκο θα αυξηθεί ταυτόχρονα η καθυστέρηση των σελίδων που βρίσκονται στους πιο αργούς δίσκους. Το σχήμα 3 παρουσιάζει την διαδικασία παραγωγής ενός προγράμματος διάδοσης broadcast disk. Έστω μια λίστα από σελίδες που διανέμονται σε 3 δίσκους σύμφωνα με τις πιθανότητες προσπέλασης στα αντικείμενα. Συγκεκριμένα οι σελίδες του δίσκου D1 θα εκπέμπονται με διπλάσια συχνότητα από αυτές του δίσκου D2 και τέσσερις φορές από τις σελίδες του δίσκου D3. Επομένως έχουμε: rel_freq(1) = 4, rel_freq(2) = 2, rel_freq(3) = 1. Οι δίσκοι αυτοί χωρίζονται σε έναν αριθμό από block σύμφωνα με τo LCM (Ελάχιστο κοινό πολλαπλάσιο) των συχνοτήτων broadcast των διάφορων δίσκων. -9-

Σχήμα 3: Διαδικασία παραγωγής προγράμματος Στο παράδειγμα μας (σχήμα 3) το LCM είναι 4 οπότε: ο δίσκος D3 χωρίζεται σε 4/1 = 4 blocks, ο δίσκος D2 χωρίζεται σε 4/2 = 2 blocks (αφού περιστρέφεται 2 φορές πιο γρήγορα από τον D3) και ο πρώτος δίσκος χωρίζεται σε 4/4 = 1 blocks (αφού αυτός περιστρέφεται 4 φορές πιο γρήγορα από τον D3). Το Broadcast πρόγραμμα είναι αποτέλεσμα τεσσάρων Minor Cycle. Minor cycle είναι η τοποθέτηση ενός block από κάθε δίσκο σε μία ακολουθία. Το πρόγραμμα του παραδείγματος μας, δημιουργεί μια ιεραρχία μνήμης τριών επιπέδων, όπου ο δίσκος D1 είναι το μικρότερο και γρηγορότερο επίπεδο ενώ ο δίσκος D3 είναι το μεγαλύτερο και πιο αργό επίπεδο. Αυτή η τεχνική παραγωγής έχει ως αποτέλεσμα ένα περιοδικό broadcast πρόγραμμα με σταθερούς χρόνους άφιξης. Συμπερασματικά, το πρόγραμμα εκπομπής είναι αποτέλεσμα του παρακάτω αλγόριθμου παραγωγής: 1. Ταξινόμησε τις σελίδες σύμφωνα με την πιθανότητα προσπέλασης (από τις πιο hot στις πιο cold) 2. Χώρισε την ταξινομημένη λίστα των σελίδων σε ομάδες σελίδων έτσι ώστε κάθε ομάδα να έχει όμοια πιθανότητα προσπέλασης. Οι ομάδες αυτές είναι οι δίσκοι εκπομπής. 3. Επίλεξε την συχνότητα (rel_freq) εκπομπής του κάθε δίσκου σύμφωνα με το παρακάτω τρόπο: Έστω οι πιθανότητες προσπέλασης π1,π2,π3, πκ των σελίδων, με π1>π2>π3> >πκ τότε η συχνότητα του j δίσκου για να έχουμε τη βέλτιστη απόδοση θα πρέπει να είναι: Παράδειγμα: d1 με πιθανότητα προσπέλασης 1/2 d2 και d3 πιθανότητα προσπέλασης 1/8 d4 d11 πιθανότητα προσπέλασης 1/32 Άρα έχουμε 3 broadcast disks D1={d1}, D2={d2,d3}, D3={d4,d5,d6,d7,d8,d9,d10,d11} Με συχνότητες: και f 3 = 1. 4. Υπολόγισε το LCM (ελάχιστο κοινό πολλαπλάσιο) των συχνοτήτων 5. Χώρισε των κάθε δίσκο σε έναν αριθμό από chunks (numofchunks = LCM / rel_freq(i)) Παράδειγμα: LCM=4. numofchunks(1)=4/4, numofchunks(2) = 4/2= 2 και numofchunks(3) = 4/1 = 4 6. Κατασκεύασε το πρόγραμμα εκπομπής σύμφωνα με τον παρακάτω αλγόριθμο: Για ι από 0 μέχρι LCM - 1 Για j από 1 μέχρι numofdisks Broadcast chunk (ι mod numofchunk(j)) from disk j Τέλος_επανάληψης Τέλος_Επανάληψης -10-

Υπάρχει περίπτωση ένας αριθμός από slots να μην συμπεριληφθούν κατά την διαδικασία παραγωγής, αφού δεν είναι δυνατό να διαιρέσουμε ένα δίσκο στον απαιτούμενο αριθμό blocks. Φυσικά, είναι απαραίτητο αυτά τα slots να μη χαθούν και μπορούν να χρησιμοποιηθούν ώστε: να γίνονται broadcast επιπρόσθετες πληροφορίες όπως indexes, ενημερώσεις κλπ, ή να γίνονται broadcast σελίδες οι οποίες θα ζητούνται από τους clients χρησιμοποιώντας to uplink κανάλι επικοινωνίας με τον server. Επιπλέον, αν είναι μικρός ο αριθμός των δίσκων και ο αριθμός των σελίδων είναι μεγαλύτερος, τότε τα slots που μένουν αχρησιμοποίητα είναι πολύ λίγα (μπορεί και κανένα) 1.6 Client Cache Management Παρόλο που όλα τα αντικείμενα εκπέμπονται από το broadcast, υπάρχει η ανάγκη οι clients να ακούν το κανάλι broadcast ώστε να αποθηκεύουν τοπικά τα αντικείμενα που κρίνουν αυτοί. Έτσι, αν κάποιο αντικείμενο εκπέμπεται σε μεγάλα χρονικά διαστήματα και το αντικείμενο αυτό έχει μεγάλη πιθανότητα προσπέλασης από έναν συγκεκριμένο client, θα είναι σωστό το αντικείμενο αυτό να αποθηκευτεί στην cache του client. Η τεχνική αυτή θα μειώσει και το εξής πρόβλημα: «αν αυξήσουμε το broadcast για ένα αντικείμενο, βλάπτουμε ταυτόχρονα το broadcast των άλλων αντικειμένων». Σε ένα συνηθισμένο μηχανισμό cached based, κάθε client αποθηκεύει στην cache του τα δεδομένα που είναι πιο hot για αυτόν. Μια τέτοια προσέγγιση θα χειροτέρευε την απόδοση ενός προγράμματος broadcast disks. Αυτό συμβαίνει επειδή σε ένα περιβάλλον broadcast disks, τα αντικείμενα δεν ισαπέχουν από τον client. Οι παρακάτω παράγοντες κάνουν ένα πρόγραμμα broadcast disks μη βέλτιστο για συγκεκριμένο client: Οι πιθανότητες προσπέλασης για κάποιο αντικείμενο που δίνει ο client στον server δεν είναι σωστές Οι πιθανότητες προσπέλασης μπορούν να αλλάζουν με την πάροδο του χρόνου O server δίνει υψηλότερη προτεραιότητα στις ανάγκες των άλλων clients Ο server ίσως θα πρέπει να μοιράσει το broadcast για να καλύψει τις ανάγκες ενός μεγάλου αριθμού clients, και έτσι ένας άλλος client να περιμένει ένα μεγάλο χρονικό διάστημα ώστε να βρει το αντικείμενο που χρειάζεται. Για τους παραπάνω λόγους, οι clients δεν πρέπει να αποθηκεύουν απλά μόνο τα πιο hot αντικείμενα, αλλά να αποθηκεύουν τα αντικείμενα για τα οποία η πιθανότητα προσπέλασης τους από τον συγκεκριμένο client να είναι αρκετά μεγαλύτερη από τον ρυθμό εμφάνισης του αντικείμενου στο broadcast. Για παράδειγμα, αν υπάρχει μια σελίδα Π που προσπελάζεται συχνά μόνο από τον client C, τότε η σελίδα αυτή θα κριθεί από τον server σαν μη σημαντική και έτσι ο C για να αποφύγει την μεγάλη καθυστέρηση, θα αποθηκεύσει τοπικά την σελίδα Π. Αντίθετα, μια σελίδα Ρ που προσπελάζεται συχνά από πολλούς clients, θα εκπέμπεται από έναν πολύ γρήγορο δίσκο και έτσι δεν υπάρχει λόγος η σελίδα P να αποθηκευτεί τοπικά. Έτσι, οδηγούμαστε στην ανάγκη υιοθέτησης ενός μοντέλου που βασίζεται στο κόστος αντικατάστασης σελίδων. Μια κλασική πολιτική αντικατάστασης σελίδων (πχ LRU) αντικαθιστά την σελίδα η οποία έχει τη μικρότερη πιθανότητα προσπέλασης και βρίσκεται στην cache. Μια απλή τεχνική αντικατάστασης σελίδων που βασίζεται στο κόστος είναι αυτή που αντικαθιστά την σελίδα η οποία έχει το μικρότερο λόγο μεταξύ της πιθανότητας προσπέλασής της και της συχνότητάς της στο κανάλι του broadcast. Ο λόγος αυτός καλείται PIX. Παράδειγμα PIX: Έστω μια σελίδα Α προσπελάζεται με 1% από έναν συγκεκριμένο client και καταλαμβάνει στο broadcast το 1% του χρόνου. Έστω μια σελίδα Β η οποία προσπελάζεται με 0.5% και η συγκεκριμένη σελίδα καταλαμβάνει το 0.1% του συνολικού χρόνου στο broadcast. Έχουμε PIX(A) = 1 και PIX(Β) = 5. Άρα θα αντικατασταθεί η σελίδα Α αφού έχει μικρότερη τιμή PIX. Αυτό συμβαίνει επειδή δεν έχει αξία να έχουμε τοπικά την σελίδα Α (παρόλο που προσπελάζεται πιο συχνά από ότι η B) αφού αυτή μπορεί να βρεθεί με μικρή καθυστέρηση στο broadcast. Αν και το PIX είναι μια ιδανική πολιτική, δεν είναι πρακτική αφού απαιτεί: α) Επακριβή γνώση σχετικά με τις πιθανότητες προσπέλασης, β) Σύγκριση των τιμών PIX για όλες τις σελίδες που βρίσκονται τοπικά την στιγμή της πιθανής αντικατάστασης. Έτσι, προτείνεται μια άλλη πολιτική που καλείται LIX η οποία είναι μια παραλλαγή της πολιτικής LRU. Θυμίζουμε ότι η πολιτική LRU -11-

διατηρεί την cache σαν μια συνδετική λίστα σελίδων και όταν μια σελίδα προσπελάζεται, τότε αυτή πηγαίνει στην κορυφή της λίστας, δηλαδή αντικαθίστανται οι σελίδες που έχουν πολύ ώρα να χρησιμοποιηθούν. Όταν έχουμε κάποιο miss, δηλαδή όταν ψάχνουμε κάτι στην cache και δεν το βρίσκουμε, τότε αντικαθιστούμε την τελευταία σελίδα της λίστας με τη νέα. Η πολιτική LIX διατηρεί έναν αριθμό από λίστες, μία για κάθε δίσκο. Όταν μια σελίδα έρχεται στην cache τότε η σελίδα αυτή εισέρχεται στον αντίστοιχο δίσκο. Η κάθε λίστα ταξινομείται με τρόπο όμοιο με αυτόν της LRU, δηλαδή την πιθανότητα προσπέλασης (L) των σελίδων που υπολογίζεται σύμφωνα με το ιστορικό των προσπελάσεων. Έτσι, όταν έχουμε hit, η σελίδα τοποθετείται στην αρχή της λίστας στην οποία ανήκει, ενώ όταν έχουμε miss, τότε υπολογίζονται οι τιμές lix μόνο για τις σελίδες που βρίσκονται τελευταίες στις λίστες και αντικαθίσταται η σελίδα με τη μικρότερη lix value. Η νέα σελίδα τοποθετείται στην κατάλληλη λίστα. Για το λόγο αυτό οι λίστες της πολιτικής αυτής δεν έχουν σταθερό μήκος. Για τον υπολογισμό των LIX values των υποψήφιων προς αντικατάσταση σελίδων, διαιρούμε το L με το X που είναι η συχνότητα broadcast της σελίδας. Παράδειγμα LIX: Αν έχουμε 2 δίσκους, τότε η cache διατηρείται σαν 2 λίστες. Παρακάτω ακολουθεί σχηματικά ένα παράδειγμα αντικατάστασης (Σχήμα 4): Σχήμα 4: παράδειγμα αντικατάστασης Για την μελέτη της απόδοσης των PIX και LIX πολιτικών, έχει υλοποιηθεί ένα σύστημα προσομοίωσης, το οποίο αποτελείται από έναν server, ο οποίος πραγματοποιεί το broadcast και έναν client, ο οποίος ζητάει σελίδες με τυχαίο τρόπο. Η σύγκριση πραγματοποιήθηκε με τις εξής παραμέτρους: Μέγεθος cache: 500 σελίδες Μέγεθος της βάσης δεδομένων σελίδων του server: 5000 σελίδες Στο σχήμα 5 παρουσιάζεται η σύγκριση της πολιτικής PIX με την πολιτική P η οποία βασίζεται απλά στην πιθανότητα προσπέλασης των σελίδων και όχι στην συχνότητα που αυτές γίνονται broadcast. Το σχήμα αυτό δείχνει τους χρόνους απόκρισης σε μονάδες broadcast, δηλαδή σε χρόνο broadcast μιας σελίδας (οι σελίδες έχουν ίδιο μέγεθος) για μια τυχαία αίτηση σελίδας από τον client. Τα αποτελέσματα της προσομοίωσής μας λαμβάνουν υπόψη τον θόρυβο, δηλαδή την πιθανότητα της σελίδας να τοποθετηθεί σε λάθος δίσκο (μια σελίδα τοποθετήθηκε σε αργό δίσκο ενώ θα έπρεπε να τοποθετηθεί σε ένα γρήγορο 0% θόρυβος όλα τα αντικείμενα έχουν τοποθετηθεί σωστά) και το Δ, το οποίο δείχνει πόσο γρήγορα περιστρέφονται οι δίσκοι. Πιο συγκεκριμένα, αν Δ=0, όλοι οι δίσκοι (D1,D2,D3) περιστρέφονται με την ίδια ταχύτητα (flat πρόγραμμα), αν Δ=5, τότε ο δίσκος D1 περιστρέφεται 2*Δ+1 = 2*5+1 = 11 φόρες πιο γρήγορα από τον D3. Βλέπουμε ότι το μοντέλο PIX έχει καλύτερη απόδοση από τον μοντέλο P όσο ο θόρυβος αυξάνεται, ενώ για Δ=0, το μοντέλα έχουν ίδια απόδοση. Επίσης, για μηδενικό θόρυβο, τα μοντέλα έχουν σχεδόν την ίδια απόδοση. Έτσι συμπεράνουμε ότι το PIX δεν επηρεάζεται τόσο πολύ από τον θόρυβο. Στο σχήμα 6 παρουσιάζεται η -12-

κατανομή των προσπελάσεων από τον client. Αξίζει να σημειωθεί ότι ο αργός δίσκος, δηλαδή ο δίσκος D3 προσπελάζεται ελάχιστα όταν χρησιμοποιείται το μοντέλο PIX. Σχήμα 6: Access locations Σχήμα 5: P vs PIX Στο σχήμα 5 παρουσιάζεται συγκριτικά οι αποδόσεις των PIX, LIX, LRU και L. Το μοντέλο L, συμπεριφέρεται ακριβώς όπως το LIX, χωρίς όμως να λαμβάνει υπόψη τις διαφορετικές συχνότητες broadcast των σελίδων. Η παράμετρος του θορύβου είναι 30% και είναι σταθερή. Όπως περιμέναμε, το μοντέλο PIX έχει καλύτερη απόδοση αφού έχει γνώση των πιθανοτήτων προσπέλασης των σελίδων. Επίσης, παρατηρούμε ότι για ένα flat πρόγραμμα (Δ=0), τα 3 μοντέλα έχουν παρόμοια απόδοση. Σε αυτό το σημείο παρατηρούμε ότι το LIX έχει καλύτερη απόδοση από τις άλλες 2 προσεγγίσεις οι οποίες φαίνονται ότι επηρεάζονται πάρα πολύ από τις αυξήσεις του Δ, πράγμα που δεν συμβαίνει με το LIX. Τέλος, στο σχήμα 6 παρατηρούμε την κατανομή προσπελάσεων των σελίδων από των client, δηλαδή από πού ανακτά τις σελίδες ο client. Σχήμα 5: Απόδοση μοντέλων Σχήμα 7: Page access location disk D5 1.7 Prefetching Το περιβάλλον των broadcast disks ευνοεί το prefetching αφού όλες οι σελίδες παρουσιάζονται στους clients μέσω του broadcast. Έτσι οι clients μπορούν να «κατεβάσουν» κάποιες από αυτές τις σελίδες ώστε να τις χρησιμοποιήσουν στο μέλλον. Ωστόσο, το prefetching είναι μια διαδικασία που εμπεριέχει ρίσκο στα παραδοσιακά συστήματα αφού αυτό φορτώνει επιπλέον του διαμοιραζόμενους πόρους και μπορεί να έχει επιπτώσεις στην απόδοση του δικτύου. Αντίθετα, όταν γίνεται prefetching σε ένα σύστημα όπως οι broadcast disks, η απόδοση δεν επηρεάζεται. -13-

1.7.1 Η πολιτική Tag Team Σε ένα περιβάλλον Broadcast Disk, ο σκοπός του prefetching είναι η βελτίωση του χρόνου απόκρισης των clients που «κατεβάζουν» αντικείμενα από το broadcast. Η βελτίωση αυτή μπορεί να πραγματοποιηθεί με δύο τρόπους: Βελτιώνοντας το hit rate των client Μειώνοντας το κόστος των cache misses Όπως έχουμε δει ήδη σε προηγούμενη παράγραφο τα μοντέλα PIX και LIX καταφέρνουν να διατηρούν μια ισορροπία σε αυτούς τους δύο παράγοντες. Συγκεκριμένα, και τα δύο μειώνουν το hit rate ώστε να αποφεύγουν την προσπέλαση στους αργούς δίσκους. Ωστόσο, τα PIX και LIX, αν αποθηκεύσουν μια σελίδα στην cache ενός client, τότε αυτό θα είναι αποτέλεσμα ενός miss. Το prefetching έχει ως αποτέλεσμα την αποθήκευση σελίδων στην cache χωρίς να αναζητηθεί το αντικείμενο και απλά αποβλέπει στην μελλοντική χρήση του αντικείμενου. Το όφελος του prefetching φαίνεται από το παρακάτω παράδειγμα: Έστω ότι κάποιος client θέλει πρόσβαση σε δύο σελίδες (x και y) με ίδια πιθανότητα (=0.5) και έχει μόνο ένα cache slot ελεύθερο ώστε να αποθηκεύσει μια από τις δύο σελίδες. Επίσης, υποθέτουμε ότι ο server τοποθετεί τις δυο αυτές σελίδες με 180 μοίρες διαφορά (όπως φαίνεται στο σχήμα 8). Σε μία στρατηγική η οποία αποθηκεύει στη cache σελίδες μόνο κατόπιν miss, μόνο μία σελίδα (για παράδειγμα η x) θα αποθηκευόταν τοπικά. Έτσι, μπορεί να χρησιμοποιηθεί μελλοντικά με μηδενική καθυστέρηση η σελίδα x αφού αυτή βρίσκεται στην cache. Αν κάποια στιγμή στη συνέχεια ο client χρειαστεί την y, τότε θα περιμένει στο broadcast την y και θα αντικαταστήσει την x με την y. Η y θα μείνει στην cache μέχρι να ζητηθεί ξανά η x. Με αυτή τη στρατηγική, η αναμενόμενη καθυστέρηση θα είναι το μισό το συνολικού κύκλου του δίσκου. Μπορούμε να μειώσουμε το παραπάνω κόστος με μια απλή στρατηγική η οποία καλείται tag-team και η οποία λειτουργεί ως εξής: γίνεται prefetching το x στην cache όταν αυτό φτάσει στο broadcast και παραμένει εκεί μέχρι να έρθει το y το οποίο όταν φτάσει αντικαθιστά το x. Αυτή η διαδικασία συνεχίζεται και έχει ως αποτέλεσμα το μέσο κόστος να μειωθεί και να γίνει το 1/8 του κύκλου του δίσκου και έτσι να έχουμε πολύ μεγαλύτερο hit rate. Επίσης, πρέπει να αναφερθεί ότι με την demanddriven στρατηγική, ένα miss μπορεί να γίνει σε οποιοδήποτε σημείο του broadcast. Αντίθετα, χρησιμοποιώντας την tag-team στρατηγική, miss μπορεί να γίνει στο μισό του broadcast. Για παράδειγμα, ένα miss του x μπορεί να συμβεί μόνο από τη στιγμή που έχει φτάσει το y, και έχει αντικαταστήσει το x μέχρι τη στιγμή που θα φτάσει ξανά το x, και θα αντικαταστήσει με την σειρά του το y. Έτσι μειώνεται αρκετά το κόστος του cache miss. Ο μηχανισμός αυτός μπορεί να γενικευτεί σε περισσότερους δίσκους και διαφορετικά μεγέθη cache 1.7.2 Η πολιτική PT Σχήμα 8 Μια ακόμη απλή πολιτική (heuristic prefetching) είναι η PT. Το heuristic PT έχει παρόμοια απόδοση με τη στρατηγική tag-team, ωστόσο είναι αρκετά πιο απλή (η πολιτική tag-team είναι δύσκολο να γενικευτεί για περισσότερους δίσκους). Η PT είναι μια δυναμική πολιτική, η οποία εκτελεί έναν υπολογισμό για κάθε σελίδα, όταν αυτή φτάσει στο broadcast. Με τον τρόπο αυτό, θα υπολογίσει αν αυτή η σελίδα έχει μεγαλύτερη αξία από αυτές που βρίσκονται στην cache. Η πολιτική αυτή χρησιμοποιεί μια μέτρηση για την αξιολόγηση των σελίδων η οποία ονομάζεται pt value. Η μέτρηση αυτή είναι αποτέλεσμα της πιθανότητας προσπέλασης της σελίδας σε συνάρτηση με τον χρόνο που θα χρειαστεί ώστε η σελίδα αυτή να εμφανιστεί ξανά στο broadcast. Αν η pt value της σελίδας (Α) που ήρθε στο broadcast είναι μεγαλύτερη από την μικρότερη pt value της σελίδας (Β) που βρίσκεται στην cache, τότε η σελίδα Α θα αντικαταστήσει στην cache την σελίδα B. -14-

Η PT value είναι όμοια με την pix value που περιγράφηκε πριν, ωστόσο η pt value αλλάζει δυναμικά μετά από κάθε «tick» του broadcast. Αν χρησιμοποιούσαμε σαν πολιτική prefetching την pix value, τότε η cache θα γέμιζε γρήγορα με τις πιο χρήσιμες σελίδες (σύμφωνα με το pix value) και στη συνέχεια θα παρέμενε αμετάβλητη. Αντίθετα, χρησιμοποιώντας το pt value, η κατάσταση της cache μπορεί να αλλάξει μετά από κάθε εκτέλεση ενός «tick» broadcast. Οι διαφορές μεταξύ του pt value και του pix value θα περιγραφούν καλύτερα με το παράδειγμα που ακολουθεί: Έστω οι σελίδες A,B,C και ότι η σελίδα Α έχει διπλάσια συχνότητα προσπέλασης από τις σελίδες Β και C. Επίσης, έστω ότι οι σελίδες A και Β γίνονται broadcast δύο φορές ανά περίοδο ενώ η σελίδα C μόνο μια φορά ανά περίοδο. Οι σελίδες Α και C θα έχουν ίδια pix value η οποία θα είναι διπλάσια από την pix value της σελίδας B (πίνακας 4). Αντίθετα, η pt value των σελίδων αλλάζει με την πάροδο του χρόνου. Το σχήμα 10 δείχνει τις διακυμάνσεις των pt values για τις τρεις σελίδες, ενώ η γραμμή που υπάρχει στο κάτω μέρος του σχήματος δείχνει το «θύμα» που αποχωρεί από την cache. Πίνακας 4 Σχήμα 10: pt values vs time Εξαιτίας αυτής της λειτουργίας, η πολιτική PT «διώχνει» από την cache τις σελίδες με μεγάλη πιθανότητα προσπέλασης, λίγο πριν αυτές ξαναεμφανιστούν στο broadcast. Στα πειράματα προσομοίωσης που πραγματοποιήθηκαν αποδείχτηκε ότι η πολιτική PT έχει την ίδια απόδοση με αυτή της πολιτικής tag-team. Το σχήμα 11 δείχνει τα αποτελέσματα εκτέλεσης των PIX και PT σε έναν flat disk που περιλαμβάνει 3000 σελίδες, από τις οποίες ο client προσπελάζει τις 1000 σύμφωνα με την κατανομή Zipf. Το μέγεθος της cache αυξάνεται από 1 (δεν μπορεί να γίνει prefetching) μέχρι 1000 σελίδες (δεν χρειάζεται prefetching αφού όλες οι σελίδες χωρούν στην cache). Στο σχήμα παρατηρούμε ότι όταν το μέγεθος της cache είναι 500 σελίδες, ο χρόνος απόκρισης του PT είναι μίσος από αυτόν του PIX Σχήμα 11: PT vs PIX για flat πρόγραμμα -15-

1.8 The Read/Write Case Ένα ερώτημα που πρέπει να απαντηθεί είναι το τι γίνεται στην περίπτωση που το broadcast πρέπει να αλλάξει. Έτσι πρέπει να ληφθούν υπόψη οι τρεις παρακάτω αλλαγές: Πιθανές αλλαγές στα αντικείμενα που γίνονται broadcast Αναδιοργάνωση του προγράμματος broadcast, είτε αλλάζοντας την κατανομή των σελίδων στους δίσκους είτε αλλάζοντας το σχήμα του δίσκου Πιθανές αλλαγές στα περιεχόμενα των δίσκων πρόσθεση κάποιων σελίδων, αφαίρεση κάποιον άλλων σελίδων Αλλαγές στα αντικείμενα μπορούν να πραγματοποιηθούν όταν ένας συνδεμένος client ενημερώνει το αντικείμενο (αν υπάρχει uplink κανάλι), ή όταν η εφαρμογή που εκτελεί το Broadcast παράγει νέα δεδομένα. Οι αλλαγές αυτές μπορεί να είναι χρήσιμες για άλλους clients (συνδεμένους και μη) οι οποίοι, στο παρελθόν έχουν αποθηκεύσει τοπικά το αντικείμενο το οποίο έχει ενημερωθεί. Έτσι υπάρχει η περίπτωση κάποιοι clients να έχουν παλιά έκδοση κάποιων αντικειμένων. Οι broadcast disks μπορούν να χρησιμοποιηθούν σαν μέσο διάδοσης των νέων εκδόσεων ή ακύρωσης των παλιών εκδόσεων. Επίσης, είναι πιθανό το περιεχόμενο ενός δίσκου να πρέπει να αλλάξει. Για παράδειγμα, έστω ότι μια τιμή ενός προϊόντος δεν γίνεται broadcast. Όταν η τιμή αλλάξει, είναι πιθανό αυτή να χρειαστεί τοποθέτηση στο broadcast, αφού θεωρείται πλέον πιο ενδιαφέρουσα από τους clients. Αντίστοιχα, αν κάποια τιμή εκπέμπεται ήδη από το broadcast και αυτή αλλάξει, είναι πιθανό να χρειαστεί να αλλάξει σημείο στο broadcast (π.χ. να τοποθετηθεί σε πιο γρήγορο δίσκο) αφού το ενδιαφέρον των clients έχει και αυτό αλλάξει. Επίσης, οι περιπτώσεις read και write εισάγουν ένα επιπλέον πρόβλημα στην συνέπεια των δεδομένων. Συγκεκριμένα, αν οι σελίδες που γίνονται broadcast ενημερώνονται σε ακαθόριστα σημεία του broadcast, πως γίνεται ο client να εγγυηθεί ποια σελίδα είναι έγκυρη από αυτές που βρίσκει στο broadcast; Οι τεχνικές concurrency control που χρησιμοποιούνται DBMSes δεν μπορούν να φανούν χρήσιμες σε ένα περιβάλλον broadcast disks. Έτσι, ανοίγει το θέμα υλοποίησης τεχνικών συνέπειας δεδομένων για δεδομένα που γίνονται broadcast. 1.9 Πειράματα Μελέτη της απόδοσης των Broadcast Disks Σε αυτή την παράγραφο παρουσιάζονται τα πειράματα που πραγματοποιήθηκαν ώστε να μελετηθεί η απόδοση των Broadcast Disks. Η μέτρηση που χρησιμοποιήθηκε στα πειράματα (που είναι και η ιδανική) είναι ο χρόνος απόκρισης των αιτήσεων του client ο οποίος μετριέται σε broadcast units. Πρέπει να αναφερθεί ότι το μέγεθος της βάσης δεδομένων του server ήταν 5000 αντικείμενα, ενώ υπήρχε μόνο ένας client ο οποίος ζητούσε 1000 από αυτά τα αντικείμενα. Επίσης στα πειράματα που έγιναν, χρησιμοποιήθηκε διαφορετικού μεγέθους cache (από 1 έως 500). Οι παράμετροι των πειραμάτων παρουσιάζονται παρακάτω: Think Time: 2.0 ServerDBSize: 5000 Access Range: 1000 Cache size: 50 (5%), 250 (25%), 500 (50%) Δ: 1,2,3,,7 Θ: 0.95 (Παράμετρο κατανομής Zipf) Offset: 0, Cache Size Noise: 0%,15%,30%,45%,60%,75% RegionSize: 50 1.9.1 No caching & 0% Noise Στο πρώτο πείραμα δεν υπήρχε cache στον client και δεν υπήρχε θόρυβος στις πιθανότητες προσπέλασης των αντικειμένων. Στο πείραμα αυτό συγκρίνονται 5 διαφορετικά προγράμματα εκπομπής: το πρώτο έχει 2 δίσκους όπου στον ένα (γρήγορο δίσκο) έχουν τοποθετηθεί τα 500 αντικείμενα ενώ τα υπόλοιπα 4500 αντικείμενα τοποθετήθηκαν στο δεύτερο (αργό) δίσκο (D1(500,4500)). Το δεύτερο πρόγραμμα εκπομπής είχε και αυτό 2 δίσκους με κατανομές αντικειμένων -16-

D2(900,4100), το τρίτο πρόγραμμα και αυτό 2 δίσκους με κατανομές αντικειμένων D3(2500, 2500) ενώ το τέταρτο και το 5 πρόγραμμα είχαν 3 δίσκους με κατανομές D4(300, 1200, 3500) και D5(500, 2000, 2500) αντίστοιχα.. Ο χρόνος απόκρισης σε σχέση με την παράμετρο Δ παρουσιάζεται στο σχήμα 12. Παρατηρώντας το σχήμα αυτό φαίνεται ότι το πρόγραμμα D4 έχει την καλύτερη απόδοση, δηλαδή το μικρότερο χρόνο απόκρισης. Επίσης παρατηρούμε ότι για Δ=0 ότι όλα τα προγράμματα έχουν την ίδια απόδοση, πράγμα απόλυτα λογικό αφού στην πραγματικότητα έχουμε μόνο έναν δίσκο (flat πρόγραμμα) Σχήμα 12: Delta vs Response Time 1.9.2 No caching & Noise Για αυτό το πείραμα παρουσιάζονται δυο σχήματα (σχήμα 13 & 14). Στο πρώτο σχήμα παρουσιάζεται το πρόγραμμα εκπομπής D3 (βλέπε παράγραφο 1.9.1) με διαφορετικά επίπεδα θορύβου (από 0% μέχρι 75%). Όμοια, στο σχήμα 14 παρουσιάζεται το πρόγραμμα D5. Στα δυο αυτά σχήματα βλέπουμε το πόσο επηρεάζεται η απόδοση αυξάνοντας το ποσοστό του θορύβου και το Δ. Εύκολα καταλαβαίνουμε ότι όταν υπάρχει θόρυβος, η αύξηση του Δ επηρεάζει την απόδοση. Όπως ήταν αναμενόμενο όσο λιγότερος θόρυβος τόσο καλύτερη απόδοση. Σχήμα 13 Σχήμα 14-17-

1.9.3 Caching & Noise Στο πείραμα αυτό χρησιμοποιήθηκε η πολιτική P η οποία αποθηκεύει στην cache τις σελίδες με τη μεγαλύτερη πιθανότητα προσπέλασης. Το μέγεθος της cache ήταν 500. Πρέπει να αναφερθεί ότι η πολιτική P δεν είναι υλοποιήσιμη σε πραγματικά συστήματα αφού απαιτεί γνώση των πιθανοτήτων προσπέλασης, ωστόσο η χρήση της είναι χρήσιμη για την μελέτη της απόδοσης. Η πολιτική P αγνοεί την ύπαρξη των δίσκων και το γεγονός ότι μπορεί να βρει κάτι που ψάχνει στο broadcast πολύ γρήγορα και αποθηκεύει στην cache απλά τις πιο hot σελίδες. Για περισσότερες λεπτομέρειες για την πολιτική P βλέπε παράγραφο 1.6. Στο σχήμα 15 φαίνονται τα αποτελέσματα του πειράματος χρησιμοποιώντας το πρόγραμμα εκπομπής D5. Το σχήμα αυτό έχει σημασία αν συγκριθεί με το σχήμα 14. Αρχικά, παρατηρούμε ότι οι χρόνοι απόκρισης στο σχήμα 15 είναι σε χαμηλότερα επίπεδα (απόλυτα λογικό αφού υπάρχει η cache), ωστόσο, με μια πιο προσεχτική ματιά στα δύο σχήματα, βλέπουμε ότι η περίπτωση χρήσης της cache με την πολιτική P είναι πιο ευαίσθητη στον θόρυβο. Σχήμα 15 Χρησιμοποιώντας την πολίτικη PIX αντί της P στο πείραμα «Caching & Noise» παρατηρούμε ότι τα πράγματα είναι πολύ καλύτερα. Η πολιτική PIX λαμβάνει υπόψη το ότι υπάρχουν σελίδες οι ο οποίες εμφανίζονται πολύ συχνά στο broadcast και έτσι δεν υπάρχει λόγος να τοποθετηθούν στην cache (για περισσότερες λεπτομέρειες βλέπε παράγραφο 1.6). Στο σχήμα 16 παρουσιάζονται τα αποτελέσματα χρησιμοποιώντας την πολίτική PIX. Παρατηρούμε ότι η απόδοση δεν επηρεάζεται από την αύξηση του Δ στις περιπτώσεις που υπάρχει θόρυβος. Φυσικά, σε καμία περίπτωση η ύπαρξη θορύβου δεν έχει σαν αποτέλεσμα την μείωση του χρόνου απόκρισης, ωστόσο το να χειροτερέψει η απόδοση δεν εξαρτάται από την αύξηση του Δ. Σχήμα 16-18-

ΚΕΦΑΛΑΙΟ 2: Περιγραφή του προσομοιωτή Broadcast Disks 2.1 Εισαγωγή Στα πλαίσια αυτής της εργασίας αναπτύχθηκε ένας προσομοιωτής της τεχνικής Broadcast Disks. Αυτή η εφαρμογή προσομοίωσης έχει γραφεί χρησιμοποιώντας τη γλώσσα προγραμματισμού Visual Basic 6 και περιλαμβάνει δύο τμήματα: α. Δημιουργία του προγράμματος εκπομπής και β. τη διαδικασία προσομοίωσης όπου ο client κάνει αιτήσεις προς το server. Στις επόμενες παραγράφους περιγράφονται οι οθόνες της εφαρμογής, έτσι ώστε ο αναγνώστης να είναι σε θέση να εκτελέσει τις δικές του δοκιμές. 2.2 Περιγραφή εικονιδίων της εφαρμογής 1 ο εικονίδιο: Δημιουργία νέας προσομοίωσης 2 ο εικονίδιο: Εισαγωγή των πιθανοτήτων προσπέλασης στο σύστημα. Η κατανομή των πιθανοτήτων προσπέλασης εξαρτάται από την επιλογή του χρήστη στην οθόνη εισαγωγής παραμέτρων 3 ο εικονίδιο: Δημιουργία του προγράμματος (ή προγραμμάτων) εκπομπής 4 ο εικονίδιο: Εμφάνιση της οθόνης εισαγωγής παραμέτρων στο προσκήνιο 5 ο εικονίδιο: Εμφάνιση της οθόνης στατιστικών client στο προσκήνιο 6 ο εικονίδιο: Εμφάνιση της οθόνης της προσομοίωσης στο προσκήνιο 7 ο εικονίδιο: Εμφάνιση των ραβδογραμμάτων της οθόνης κατασκευής προγράμματος 8 ο εικονίδιο: Αποθήκευση των πληροφοριών της οθόνης κατασκευής προγράμματος σε αρχείο 9 ο εικονίδιο: Έξοδος από το πρόγραμμα 2..3 Οθόνη παραμέτρων προσομοίωσης Σχήμα 16 Στην οθόνη εισαγωγής παραμέτρων προσομοίωσης, ο χρήστης του προσομοιωτή μπορεί εισάγει τις παραμέτρους της διαδικασίας δημιουργίας του προγράμματος εκπομπής και της διαδικασίας της προσομοίωσης. Ο χρήστης έχει πρόσβαση στην οθόνη αυτή επιλέγοντας από το βασικό μενού εργαλεία ιδιότητες (Ctrl + A). Συγκεκριμένα ο χρήστης μπορεί από την οθόνη αυτή: Να δηλώσει την κατανομή σύμφωνα με την οποία θα εισάγονται στον προσομοιωτή οι πιθανότητες προσπέλασης των σελίδων. Στην περίπτωση αυτή υπάρχουν τρείς επιλογές: Οι πιθανότητες προσπέλασης ακολουθούν τυχαία κατανομή Οι πιθανότητες προσπέλασης ακολουθούν την κατανομή Zipf. Σε περίπτωση χρήσης της κατανομής αυτής, ο χρήστης πρέπει να εισάγει την παράμετρο θ της συγκεκριμένης κατανομής Οι πιθανότητες προσπέλασης των σελίδων εισάγονται από αρχείο κειμένου. Ο χρήστης επιλέγει από το γνωστό open file dialog των Windows, το αρχείο κειμένου όπου υπάρχουν οι πιθανότητες προσπέλασης των σελίδων (μια σε κάθε γραμμή του αρχείου) Να δηλώσει τον αριθμό σελίδων που θα είναι διαθέσιμες στο πρόγραμμα εκπομπής που θα δημιουργηθεί Να δηλώσει την συχνότητα (ταχύτητα) του πιο αργού δίσκου Να δηλώσει την παράμετρο δέλτα της μεθόδου Broadcast Disks (Βλέπε παράγραφο1.6) Να δηλώσει το ποσοστό θορύβου σύμφωνα με το οποίο ο client, θα κάνει αιτήσεις προς τις σελίδες του προγράμματος. Αν το ποσοστό αυτό είναι 0% τότε οι πιθανότητες αιτήσεις σελίδων θα είναι ίδιες με τις πιθανότητες προσπέλασης των αντικειμένων σύμφωνα με τις οποίες έχει κατασκευαστεί το πρόγραμμα εκπομπής. Να επιλέξει τον αριθμό των δίσκων που θα περιλαμβάνει το πρόγραμμα εκπομπής. Υπάρχουν δύο διαθέσιμοι τρόποι: -19-

Ο χρήστης να δηλώσει ότι επιθυμεί την εύρεση του βέλτιστου αριθμού δίσκων. Ο βέλτιστος αριθμός δίσκων υπολογίζεται με έναν νέο αλγόριθμο που δεν περιλαμβάνεται στο paper του πρώτου κεφαλαίου, προέκυψε μετά από έρευνα και παρουσιάζεται αναλυτικά στο κεφάλαιο 4. Ο χρήστης να δηλώσει το πόσους δίσκους επιθυμεί να έχει το πρόγραμμα εκπομπής. Αυτή η περίπτωση περιλαμβάνει το ρίσκο (από τη μεριά του χρήστη), να υπάρχουν δίσκοι οι οποίοι δεν έχουν καμία σελίδα, ή να προκύψουν δίσκοι με την ίδια συχνότητα. Φυσικά μπορεί να μειώσει το πλήθος τους ανάλογα. Να επιλέξει ποια μέθοδος υπολογισμού συχνοτήτων δίσκων θα χρησιμοποιηθεί κατά τη διαδικασία παραγωγής των προγραμμάτων εκπομπής. Συγκεκριμένα υπάρχουν δύο τρόποι υπολογισμού συχνοτήτων: Ο πρώτος είναι ο βέλτιστος και περιγράφεται στην παράγραφο 1.5.2 όπου δεν υπήρχε στο ανάλογο paper αλλά είναι η δημοφιλέστερη μέθοδος που εντοπίσαμε σε πολλά άλλα paper συνήθως με το όνομα «Νόμος της Ρίζας». Ο δεύτερος είναι αυτός που χρησιμοποιεί την παράμετρο δέλτα και περιγράφεται στην παράγραφο 1.6. Να επιλέξει αν το πρόγραμμα θα κατασκευαστεί με τον αλγόριθμο που παρουσιάστηκε στην παράγραφο 1.5.2 (χρήση chunks) ή θα κατασκευαστεί χρησιμοποιώντας ένα νέο αλγόριθμο παραγωγής (χωρίς τη χρήση chunks) ο οποίος προέκυψε μετά από έρευνα και προτείνεται στο κεφάλαιο 4. Το κίνητρο της κατασκευής του ήταν η αποφυγή της δημιουργίας chunks αφού πολλές φορές αυτό το βήμα έχει ως αποτέλεσμα την δημιουργία chunks με μεγαλύτερο πλήθος σελίδων από τις διαθέσιμες και κατά συνέπεια τη προσθήκη κενών στα προγράμματα εκπομπής. Μάλιστα ο αλγόριθμος με χρήση chunks ακόμα και με λίγους δίσκους διαφορετικών αλλά μη διαιρετών μεταξύ τους συχνοτήτων μπορεί να δώσει πολύ μεγάλο πλήθος κενών. Ο χρήστης μπορεί να δηλώσει την κατασκευή και των δυο προγραμμάτων εκπομπής (με ή χωρίς chunks) Όλες οι παραπάνω παράμετροι αφορούν τη δημιουργία του προγράμματος εκπομπής. Ο χρήστης έχει τη δυνατότητα από την οθόνη αυτή να ορίσει και τις παραμέτρους της προσομοίωσης. Συγκεκριμένα, μπορεί: Να δηλώσει το πόσες φορές επιθυμεί να μεταδοθεί το πρόγραμμα εκπομπής κατά την προσομοίωση. Να δηλώσει το πόσο συχνά ο client θα παράγει αιτήσεις προς τον server. Να δηλώσει το θόρυβο και το ρυθμό αύξησής του στο διάστημα 0-100 επηρεάζοντας έτσι το πλήθος των καμπυλών που θα κατασκευαστούν στο γράφημα «μέσοι χρόνοι απόκρισης με θόρυβο». Για παράδειγμα αν δηλώσουμε την τιμή 50, η εφαρμογή θα μας δημιουργήσει τρεις καμπύλες για: α. 0% θόρυβο β. 50% θόρυβο γ.100% θόρυβο. Να δηλώσει ποιο πρόγραμμα εκπομπής θα χρησιμοποιηθεί κατά την προσομοίωση. Συγκεκριμένα υπάρχουν τρεις επιλογές: Σχήμα 17-20-

Χρήση του προγράμματος εκπομπής με chunks. Η επιλογή αυτή είναι διαθέσιμή μόνο όταν ο χρήστης έχει επιλέξει τη δημιουργία του προγράμματος εκπομπής με χρήση chunks Χρήση του προγράμματος εκπομπής χωρίς chunks. Η επιλογή αυτή είναι διαθέσιμή μόνο όταν ο χρήστης έχει επιλέξει τη δημιουργία του προγράμματος εκπομπής χωρίς chunks Χρήση flat προγράμματος εκπομπής (Υπάρχει μόνο ένας δίσκος) 2.4 Οθόνη κατασκευής προγραμμάτων εκπομπής Η οθόνη κατασκευής προγραμμάτων εκπομπής αποτελεί τη βασική οθόνη της εφαρμογής της προσομοίωσης. Εδώ υπάρχει το κύριο μενού από όπου ο χρήστης έχει πρόσβαση στις υπόλοιπες οθόνες της εφαρμογής. Για να δημιουργηθεί το πρόγραμμα εκπομπής (ή τα προγράμματα εκπομπής) απαιτούνται δύο βήματα: Την εισαγωγή πιθανοτήτων προσπέλασης επιλέγοντας βασικό μενού Πρόγραμμα εκπομπής Εισαγωγή πιθανοτήτων προσπέλασης (F5). Την κατασκευή του προγράμματος εκπομπής επιλέγοντας βασικό μενού Πρόγραμμα εκπομπής Κατασκευή προγράμματος εκπομπής (F6) Επίσης, αφού έχουμε κατασκευάσει το πρόγραμμα εκπομπής, μπορούμε να αποθηκεύσουμε τις πληροφορίες που παρουσιάζονται στην οθόνη αυτή σε αρχείο κειμένου επιλέγοντας βασικό μενού πρόγραμμα εκπομπής αποθήκευση αποτελεσμάτων (Ctrl + S) Πίνακας πιθανοτήτων προσπέλασης των σελίδων Πίνακας δίσκων εκπομπής Πρόγραμμα εκπομπής με chunks Πρόγραμμα εκπομπής χωρίς chunks Σχήμα 18 Όπως φαίνεται στο σχήμα 18, η οθόνη κατασκευής προγραμμάτων εκπομπής χωρίζεται σε τρία μέρη: -21-

Πίνακας πιθανοτήτων προσπέλασης των σελίδων: Στον πίνακα αυτό παρουσιάζεται μια σελίδα σε κάθε γραμμή του πίνακα. Η πρώτη στήλη του πίνακα παρουσιάζει το όνομα της σελίδας, η δεύτερη στήλη περιλαμβάνει τις πιθανότητες προσπέλασης σύμφωνα με τις οποίες θα κατασκευαστεί το πρόγραμμα εκπομπής, η τρίτη στήλη περιλαμβάνει τις κοινωνικοποιημένες πιθανότητες προσπέλασης (το άθροισμα τους δίνει μονάδα) και τέλος η τέταρτη στήλη παρουσιάζει τον δίσκο στον οποίο ανήκει η συγκεκριμένη σελίδα. Πίνακας δίσκων εκπομπής: Ο πίνακας αυτός διαθέτει μια γραμμή για κάθε δίσκο. Η πρώτη στήλη εμφανίζει το όνομα του δίσκου, η δεύτερη στήλη παρουσιάζει σε ποιο διάστημα πιθανοτήτων ανήκουν οι σελίδες αυτού του δίσκου, η τρίτη στήλη παρουσιάζει την συχνότητα (ταχύτητα) του δίσκου, η τέταρτη και η πέμπτη στήλη δείχνει πόσα chunks και πόσες σελίδες αντίστοιχα ανήκουν σε αυτόν το δίσκο και τέλος η τελευταία στήλη παρουσιάζει τα ονόματα των chunks που ανήκουν σε αυτό το δίσκο. Προγράμματα εκπομπής: Στο κάτω μέρος της οθόνης εμφανίζονται τα προγράμματα εκπομπής που έχουν κατασκευαστεί. Το αν θα δημιουργηθεί ένα πρόγραμμα εξαρτάται από τις παραμέτρους του χρήστη στην οθόνη εισαγωγής παραμέτρων. Έτσι, αν ο χρήστης έχει επιλέξει τη δημιουργία του προγράμματος εκπομπής με chunks στο κάτω μέρος της οθόνης εμφανίζονται δύο προγράμματα εκπομπής. Τα δύο αυτά προγράμματα, στην ουσία πρόκειται για το ίδιο πρόγραμμα, απλά το πρώτο είναι το πρόγραμμα των chunks και το δεύτερο είναι το πρόγραμμα των σελίδων που κατανέμονται σε chunks. Αν ο χρήστης έχει επιλέξει τη δημιουργία προγράμματος εκπομπής χωρίς την χρήση chunks, τότε στην οθόνη θα παρουσιαστεί και το πρόγραμμα εκπομπής που κατασκευάζεται με τον αλγόριθμο που αποφεύγει το βήμα δημιουργίας των chunks. Θα πρέπει να αναφερθεί ότι ο χρήστης μπορεί να δηλώσει ότι επιθυμεί τη δημιουργία και των δύο προγραμμάτων εκπομπής και έτσι στην οθόνη αυτή να παρουσιαστούν και τα δύο προγράμματα. Σε αυτό το σημείο πρέπει να αναφέρουμε τα εξής για το πρόγραμμα εκπομπής με chunks: (οι μεθοδολογίες αυτές έχουν προταθεί από διάφορα άρθρα και είναι οι κυρίαρχες για τη χρήση chunks, όμως από ότι παρατηρούμε παρουσιάζουν προβλήματα) Υπάρχει περίπτωση το πλήθος των chunks ενός δίσκου να είναι μεγαλύτερο από το πλήθος των σελίδων. Τότε θα υπάρχουν κάποια chunk τα οποία θα παραμένουν κενά. Ta chunk αυτά σημειώνονται στο πρόγραμμα εκπομπής με «SpcX» Όταν οι σελίδες είναι περισσότερες από τα chunks, τότε υπάρχει πάλι περίπτωση να υπάρχουν κενά chunk. Τα κενά αυτά είναι αποτέλεσμα της διαίρεσης του αριθμού των σελίδων με τον αριθμό των chunks η οποία απαιτείται για να βρούμε πόσες σελίδες θα καταχωρηθούν σε ένα chunk. Ωστόσο, η διαίρεση αυτή μπορεί να μην έχει αποτέλεσμα ακέραιο αριθμό. Έτσι, σε περίπτωση που δίνει δεκαδικό αριθμό, παίρνουμε το άνω όριο, πράγμα που συνεπάγεται και την ύπαρξη κάποιων κενών σελίδων σε κάποια chunks. Το άνω όριο μας εξασφαλίζει ότι όλες οι σελίδες θα καταχωρηθούν σε κάποιο chunk. Για παράδειγμα, αν έχουμε 50 chunks και 24 σελίδες, το αποτέλεσμα της διαίρεσης είναι 2,033. Επειδή, δε μπορούμε να καταχωρήσουμε 2,033 σελίδες σε ένα chunk, καταχωρούμε 3 σελίδες σε ένα chunk αλλά θα παραμείνουν 7 chunk κενά. Αυτού του είδους τα κενά σημειώνονται με «SpcY» Τέλος, επιλέγοντας βασικό μενού πρόγραμμα εκπομπής ραβδογράμματα, ο χρήστης μπορεί να δει με μορφή ραβδογραμμάτων τις πληροφορίες που παρουσιάζονται στον πίνακα των δίσκων. -22- Σχήμα 19

Σχήμα 20 Σχήμα 21 2.5 Οθόνη στατιστικά client Αφού έχουμε δημιουργήσει το πρόγραμμα εκπομπής στη βασική οθόνη, επιλέγοντας βασικό μενού simulation Στατιστικά client (F3), ο χρήστης έχει τη δυνατότητα να μελετήσει αποτελέσματα όμοια με αυτά που παρουσιάστηκαν στην παράγραφο 1.5.1. Η οθόνη «στατιστικά client» παρουσιάζεται στο σχήμα 22. Στην οθόνη αυτή, όπως φαίνεται και στο σχήμα 22, παρουσιάζεται ένας πίνακας που περιέχει τόσες γραμμές όσες και το πλήθος των σελίδων. Οι τρεις πρώτες στήλες αυτού του πίνακα είναι ίδιες με αυτές που παρουσιάζονται στον πίνακα πιθανοτήτων προσπέλασης της οθόνης της δημιουργίας του προγράμματος. Η τέταρτη στήλη, εμφανίζει τις πιθανότητες προσπέλασης των σελίδων μετά την επίδραση του θορύβου. Αν δεν υπάρχει θόρυβος στις αιτήσεις, κάθε κελί αυτής της στήλης θα έχει την ίδια τιμή με πριν και αυτό γιατί οι πιθανότητες προσπέλασης δεν επηρεάζονται. Αν το ποσοστό θορύβου που έχει δηλώσει ο χρήστης στην οθόνη εισαγωγής παραμέτρων είναι μεγαλύτερο του μηδέν, τότε στην τέταρτη στήλη παρουσιάζονται οι πιθανότητες προσπέλασης μετά την επίδραση του θορύβου αυτού. Πατώντας το κουμπί «Νέα επίδραση θορύβου» οι τιμές αυτής της στήλης αλλάζουν κάνοντας νέα -23-

εφαρμογή του αλγορίθμου. Το κατά πόσο θα επηρεαστούν οι πιθανότητες προσπέλασης εξαρτάται από το ποσοστό που επιλέγει ο χρήστης στην οθόνη εισαγωγής παραμέτρων. Σχήμα 22 Τέλος, από την οθόνη αυτή έχουμε την δυνατότητα να αποθηκεύσουμε τις πληροφορίες που παρουσιάζονται στον πίνακα σε αρχείο κειμένου. Η αποθήκευση του αρχείου γίνεται με την βοήθεια του γνωστού Save Dialog των Windows. Επίσης, ο χρήστης πατώντας το κουμπί «γραφήματα» μπορεί να δει τις καμπύλες που δημιουργούν οι μέσες καθυστερήσεις και οι πιθανότητες προσπέλασης (Σχήμα 23 και 24). 2.6 Οθόνη προσομοίωσης Σχήμα 23 Σχήμα 24 Η προσομοίωση και η μελέτη της απόδοσης της τεχνικής Broadcast disks γίνεται στην οθόνη της προσομοίωσης. Ο χρήστης έχει πρόσβαση στην οθόνη αυτή επιλέγοντας βασικό μενού simulation Time simulation (F4). Η προσομοίωση εκτελείται τόσες φορές όσες έχει δηλώσει ο χρήστης στην οθόνη εισαγωγής παραμέτρων. Η οθόνη της προσομοίωσης φαίνεται στο σχήμα 25. -24-

Συγκεκριμένα, στην οθόνη αυτή υπάρχει ένας πίνακας όπου κάθε γραμμή του είναι μια χρονική στιγμή της προσομοίωσης. Οι χρονικές στιγμές της προσομοίωσης παρουσιάζονται στην πρώτη στήλη. Στην δεύτερη στήλη φαίνεται ποια σελίδα του προγράμματος εκπομπής εκπέμπεται την συγκεκριμένη χρονική στιγμή. Στην τρίτη στήλη φαίνονται οι αιτήσεις του client. Το ανά πόσες χρονικές στιγμές ο client ζητάει μια σελίδα εξαρτάται από την τιμή που έχει δηλώσει ο χρήστης στην οθόνη εισαγωγής παραμέτρων. Στην περίπτωση του σχήματος 25, ο client ζητάει μια σελίδα ανά δύο χρονικές στιγμές. Σχήμα 25 Στην τέταρτη στήλη του πίνακα φαίνεται σε ποιο δίσκο απευθύνεται η συγκεκριμένη αίτηση, στην πέμπτη στήλη φαίνεται ο χρόνος απόκρισης του αντίστοιχου δίσκου και τέλος στην πέμπτη στήλη παρουσιάζεται το πόσες αιτήσεις έχουν γίνει μέχρι τη συγκεκριμένη χρονική στιγμή στον αντίστοιχο δίσκο. Επίσης, στην οθόνη αυτή υπάρχει και ένας δεύτερος πίνακας που στην ουσία αποτελεί μια σύνοψή του πρώτου πίνακα. Σε αυτό το δεύτερο πίνακα υπάρχουν τόσες γραμμές όσες και οι δίσκοι. Στην πρώτη στήλη υπάρχει το όνομα του δίσκου, στη δεύτερη στήλη φαίνεται το πόσες αιτήσεις έχει δεχτεί κάθε δίσκος. Στην τρίτη στήλη του πίνακα παρουσιάζεται ο χρόνος απόκρισης του κάθε δίσκου. Τέλος στην τέταρτη και τελευταία στήλη φαίνεται ο μέσος χρόνος απόκρισης. Στην πραγματικότητα, οι τιμές της στήλης αυτής είναι το αποτέλεσμα της διαίρεσης των τιμών της τρίτης στήλης με αυτές της δεύτερης στήλης. Όπως είναι φυσιολογικό, ο δίσκος D1 έχει το μικρότερο χρόνο απόκρισης ενώ ο πιο αργός δίσκος (στην περίπτωση του σχήματος 25 ο δίσκος D3) έχει τον μεγαλύτερο χρόνο απόκρισης. Τέλος, όπως και στις προηγούμενες οθόνες έτσι και εδώ υπάρχει η δυνατότητα αποθήκευσης των πληροφοριών των πινάκων σε αρχείο κειμένου, ενώ τα περιεχόμενα των πινάκων μπορούν να εμφανιστούν και με τη μορφή γραφημάτων. Συγκεκριμένα από την οθόνη αυτή είναι διαθέσιμα τρία γραφήματα: -25-

Το πρώτο γράφημα (σχήμα 27) παρουσιάζει για κάθε δίσκο το σύνολο των αιτήσεων που έχει δεχτεί και τον αντίστοιχο χρόνο απόκρισης. Το δεύτερο γράφημα παρουσιάζει τους μέσους χρόνους απόκρισης των δίσκων Σχήμα 27 Το τρίτο γράφημα παρουσιάζει τόσες καμπύλες όσες έχει δηλώσει ο χρήστης στην οθόνη εισαγωγή παραμέτρων. Στην περίπτωση του σχήματος 29, ο χρήστης έχει δηλώσει ότι επιθυμεί την εμφάνιση έντεκα γραφημάτων, ένα για κάθε ποσοστό θορύβου από 0% μέχρι 100%. Οι καμπύλες αυτές παρουσιάζουν το πόσο επηρεάζονται οι χρόνοι απόκρισης του κάθε δίσκου από την αύξηση του θορύβου. Σχήμα 28 Σχήμα 29 2.7 Οθόνη Σχετικά Από την επιλογή βασικό μενού Σχετικά, στο προσκήνιο εμφανίζεται μια οθόνη η οποία περιλαμβάνει κάποιες πληροφορίες σχετικά με την εφαρμογή και τους συγγραφείς της. Σχήμα 30-26-

ΚΕΦΑΛΑΙΟ 3: Παραδείγματα εκτέλεσης του Broadcast Disks Simulator 3.1 Αναλυτική παρουσίαση παραδείγματος εκτέλεσης Τιμές παραμέτρων Τρόπος εισαγωγής πιθανοτήτων προσπέλασης: Κατανομή Zipf με Θ=0.95 Αριθμός σελίδων που θα γίνονται broadcast: 50 Ποσοστό θορύβου: 10% Πλήθος δίσκων: Αυτόματη εύρεση του βέλτιστου αριθμού Τρόπος υπολογισμού των συχνοτήτων των δίσκων: Υπολογισμός των βέλτιστων συχνοτήτων Προγράμματα εκπομπής: Δημιουργία του προγράμματος εκπομπής με χρήση Chunks Δημιουργία του προγράμματος εκπομπής χωρίς chunks Αριθμός επαναλήψεων του προγράμματος: 10 Ρυθμός παραγωγής αιτήσεων από τον client: 2 Ρυθμός αύξησης θορύβου στο διάστημα 0-100: 10 Χρησιμοποίηση του προγράμματος εκπομπής με chunks κατά την προσομοίωση Εκτελώντας τη διαδικασία δημιουργίας των προγραμμάτων εκπομπής έχουμε ως αποτέλεσμα την δημιουργία 3 δίσκων. Ο ταχύτερος (D1) δίσκος έχει τρεις φορές μεγαλύτερη ταχύτητα από αυτή του πιο αργού δίσκου, ενώ ο δίσκος D2, έχει την διπλάσια ταχύτητα από τον πιο αργό δίσκο που είναι ο D3. Σχήμα 31 Στον δίσκο D1 έχει τοποθετηθεί μια σελίδα, στον δίσκο D2 έχουν τοποθετηθεί 2 σελίδες, ενώ οι υπόλοιπες 47 σελίδες έχουν τοποθετηθεί στο δίσκο D1. Αυτή η «περίεργη» κατανομή είναι αποτέλεσμα της χρησιμοποίησης της κατανομής Zipf. O δίσκος D1, παρόλο που έχει μόνο μια σελίδα, έχει δυο Chunks. Κάτι ανάλογο ισχύει και στο δίσκο D2. Αυτό είναι αποτέλεσμα της χρήσης του αλγορίθμου που περιγράφηκε στην παράγραφο 1.5.2 και συγκεκριμένα του σημείου όπου υπολογίζεται το ελάχιστο κοινό πολλαπλάσιο των συχνοτήτων των δίσκων ώστε να χρησιμοποιηθεί στην εύρεση του αριθμού chunks που θα χωριστεί ο κάθε δίσκος. Ο αλγόριθμος αυτός θα έχει ως αποτέλεσμα την εμφάνιση κενών στο πρόγραμμα broadcast. Σύμφωνα με το paper που παρουσιάστηκε στο πρώτο κεφάλαιο, αυτές οι κενές σελίδες μπορούν να χρησιμοποιηθούν για να γίνονται broadcast άλλου είδους πληροφορίες, ωστόσο αυτό δεν πείθει ότι δεν αποτελεί ένα μειονέκτημα της μεθοδολογίας κατασκευής του προγράμματος. Παρατηρώντας το κάτω μέρος της οθόνης, βλέπουμε ότι ο αλγόριθμος κατασκευής προγράμματος με χρήση chunks έχει ως αποτέλεσμα τη δημιουργία ενός προγράμματος που περιέχει πέντε κενά (συνολικό μέγεθος 59 σελίδες). Αντίθετα, η χρήση του αλγόριθμου εκπομπής που αποφεύγει τη -27-

δημιουργία των chunks, έχει ως αποτέλεσμα ένα πρόγραμμα που δεν περιέχει καμία κενή σελίδα (συνολικό μέγεθος 54 σελίδες). Τα ραβδογράμματα που εμφανίζονται επιλέγοντας Βασικό μενού πρόγραμμα εκπομπής ραβδογράμματα, είναι αυτά των σχημάτων 19,20,21. Επιλέγοντας Βασικό μενού πρόγραμμα εκπομπής στατιστικά client στο προσκήνιο έρχεται η οθόνη του σχήματος 32. Στην οθόνη αυτή βλέπουμε ότι ο συνολικός μέσος χρόνος καθυστέρησης του προγράμματος εκπομπής με θόρυβο 10% είναι 23,02. Ενώ βλέπουμε ότι η σελίδα P1 που ανήκει στον δίσκο D1 έχει μέση καθυστέρηση 10,110169, οι σελίδες P2 και P3 που ανήκουν στον δίσκο D2, έχουν μέση καθυστέρηση 14,957627 ενώ οι υπόλοιπες 47 σελίδες που είναι τοποθετημένες στο δίσκο D1 έχουν μέση καθυστέρηση 29,5. Τα γραφήματα αυτής της οθόνης φαίνονται στα σχήματα 33 και 34. Σχήμα 32 Σχήμα 33 Σχήμα 34 Εκτελώντας την προσομοίωση χρόνου επιλέγοντας Βασικό μενού Simulation Time Simulation, εμφανίζεται η οθόνη του σχήματος 35. Όπως έχουμε ήδη αναφέρει στο προηγούμενο κεφάλαιο, η οθόνη αυτή περιλαμβάνει πληροφορίες της προσομοίωσης ανά χρονική στιγμή. -28-

Σχήμα 36: Αιτήσεις Αποκρίσεις Σχήμα 35 Στην οθόνη της προσομοίωσης βλέπουμε ότι για την συγκεκριμένη προσομοίωση, ο δίσκος D1 δέχτηκε 122 αιτήσεις, ο D2 78 αιτήσεις και ο D3 95 αιτήσεις. Επίσης παρατηρούμε ότι ο D1 έχει μέσο χρόνο απόκρισης μικρότερο από τους άλλους δύο δίσκους. Συγκεκριμένα ο δίσκος D1 έχει μέσο χρόνο απόκρισης 8,557377, ο D2 14,205128 και ο D3 32,105263 Σχήμα 37: Μέση χρόνοι απόκρισης Τα γραφήματα αυτής της οθόνης φαίνονται στα σχήματα 36,37,38. Αν επιστρέψουμε στην οθόνη εισαγωγής παραμέτρων και δηλώσουμε ότι επιθυμούμε την χρησιμοποίηση του προγράμματος εκπομπής που δημιουργείται με τον Σχήμα 37: Χρόνος απόκρισης - Θόρυβος αλγόριθμο που αποφεύγει τη χρήση των chunks τα αποτελέσματα της προσομοίωσης θα είναι διαφορετικά (σχήματα 38, 39, 40). Συγκεκριμένα, στην οθόνη στατιστικά client παρατηρούμε ότι οι μέσες καθυστερήσεις είναι μικρότερες από τι στην περίπτωση της χρήσης του προγράμματος με chunks. Σε αυτή την περίπτωση η σελίδα του D1 έχει μέση καθυστέρηση 9, οι σελίδες του D2 έχουν μέση καθυστέρηση 13,518519 και τέλος ο D3 έχει μέση καθυστέρηση 27. Τα αποτελέσματα αυτά έχουν σημασία αν συγκριθούν με αυτά του σχήματος 32. Τα αποτελέσματα της προσομοίωσης χρόνου χρησιμοποιώντας το πρόγραμμα εκπομπής χωρίς chunks, φαίνονται στο σχήμα 41. Τα αποτελέσματα αυτά είναι επίσης καλύτερα από αυτά του σχήματος 35 (τα αποτελέσματα του time simulation εξαρτώνται από τις τυχαίες αιτήσεις του client). Είναι προφανές ότι η ύπαρξη κενών σελίδων στο πρόγραμμα εκπομπής εισάγει επιπρόσθετη καθυστέρηση χωρίς λόγο και έτσι ο αλγόριθμος κατασκευής προγράμματος χωρίς chunks έχει ως αποτέλεσμα τις περισσότερες φορές, (αν όχι όλες) μικρότερο πρόγραμμα εκπομπής. -29-

Σχήμα 39 Σχήμα 38 Σχήμα 40 Σχήμα 41-30-

3.2 Περισσότερα παραδείγματα εκτέλεσης Όπως έχουμε ήδη αναφέρει, κατά τη διάρκεια της εκπόνησης της εργασίας αυτής, αναπτύχθηκε μια νέα μέθοδος κατασκευής προγράμματος εκπομπής. Η μέθοδο αυτή έχει ως αποτέλεσμα την κατασκευή προγράμματος εκπομπής χωρίς κενά. Το γεγονός αυτό σημαίνει ότι το πρόγραμμα εκπομπής που προκύπτει από τη νέα μέθοδο είναι βέλτιστο αφού έχει το ελάχιστο μέγεθος. Έτσι, όπως φαίνεται και στα πειράματα που ακολουθούν, το πρόγραμμα που προκύπτει από την νέα μέθοδο έχει πάντα μικρότερο ή ίσο μέγεθος από αυτό που κατασκευάζεται με την μέθοδο που παρουσιάζεται στην παράγραφο 1.5.2. Στην παράγραφο αυτή παρουσιάζονται μερικά από τα πειράματα που εκτελέστηκαν. Ο αναγνώστης μπορεί να έχει και προσωπική άποψη για τις δύο μεθόδους κατασκευής προγραμμάτων εκπομπής εκτελώντας τα δικά του πειράματα μέσω του λογισμικού που συνοδεύει αυτή την εργασία. 3.2.1 Πείραμα 1 Τυχαία κατανομή Πλήθος σελίδων 50 Πλήθος δίσκων 3 Ελάχιστη συχνότητα δίσκων: 1 Μέθοδος υπολογισμού συχνοτήτων δίσκων με την παράμετρο δέλτα (Δ=2) Θόρυβος: 0% Χρήση προγράμματος με chunks: Μέγεθος προγράμματος: 159 Μέση καθυστέρηση 40,921611 Χρήση προγράμματος χωρίς chunks: Μέγεθος προγράμματος: 150 Μέση καθυστέρηση: 38,956024 3.2.2 Πείραμα 2 Τυχαία κατανομή Πλήθος σελίδων 100 Πλήθος δίσκων 4 Ελάχιστη συχνότητα δίσκων: 1 Μέθοδος υπολογισμού συχνοτήτων δίσκων με την παράμετρο δέλτα (Δ=2) Θόρυβος: 0% Χρήση προγράμματος με chunks: μέγεθος προγράμματος: 590 μέση καθυστέρηση 111,789385 Χρήση προγράμματος χωρίς chunks: Μέγεθος προγράμματος: 394 Μέση καθυστέρηση: 81,368039 3.2.3 Πείραμα 3 Τυχαία κατανομή Πλήθος σελίδων 150 Πλήθος δίσκων 5 Ελάχιστη συχνότητα δίσκων: 1 Μέθοδος υπολογισμού συχνοτήτων δίσκων με την παράμετρο δέλτα (Δ=2) Θόρυβος: 0% -31-

Χρήση προγράμματος με chunks: Μέγεθος προγράμματος: 4725 Μέση καθυστέρηση 802,212825 Χρήση προγράμματος χωρίς chunks: Μέγεθος προγράμματος: 394, Μέση καθυστέρηση: 103,979471 3.2.4 Πείραμα 4 Τυχαία κατανομή Πλήθος σελίδων 100 Εύρεση του βέλτιστου αριθμού δίσκων Ο αλγόριθμος εύρεσης πλήθος δίσκων επιστρέφει την τιμή 5 Ελάχιστη συχνότητα δίσκων: 1 Μέθοδος υπολογισμού βέλτιστων συχνοτήτων δίσκων Θόρυβος: 0% Χρήση προγράμματος με chunks: Μέγεθος προγράμματος: 660 Μέση καθυστέρηση 121,458561 Χρήση προγράμματος χωρίς chunks: Μέγεθος προγράμματος: 336 Μέση καθυστέρηση: 78,179736 3.2.5 Πείραμα 5 Τυχαία κατανομή Πλήθος σελίδων 200 Εύρεση του βέλτιστου αριθμού δίσκων Ο αλγόριθμος εύρεσης πλήθος δίσκων επιστρέφει την τιμή 6 Ελάχιστη συχνότητα δίσκων: 1 Μέθοδος υπολογισμού βέλτιστων συχνοτήτων δίσκων Θόρυβος: 0% Χρήση προγράμματος με chunks: Μέγεθος προγράμματος: 4320 Μέση καθυστέρηση 601,070398 Χρήση προγράμματος χωρίς chunks: Μέγεθος προγράμματος: 336 Μέση καθυστέρηση: 164,041037 3.2.6 Πείραμα 6 Κατανομή Zipf με παράμετρο θ = 0,95 Πλήθος σελίδων 100 Εύρεση του βέλτιστου αριθμού δίσκων Ο αλγόριθμος εύρεσης πλήθος δίσκων επιστρέφει την τιμή 4 Ελάχιστη συχνότητα δίσκων: 1 Μέθοδος υπολογισμού συχνοτήτων δίσκων με την παράμετρο δέλτα (Δ=2) Θόρυβος: 0% Χρήση προγράμματος με chunks: -32-

Μέγεθος προγράμματος: 420 Μέση καθυστέρηση 148,562354 Χρήση προγράμματος χωρίς chunks: Μέγεθος προγράμματος: 114 Μέση καθυστέρηση: 40,339447 3.2.7 Πείραμα 7 Κατανομή Zipf με παράμετρο θ = 0,95 Πλήθος σελίδων 100 Εύρεση του βέλτιστου αριθμού δίσκων Ο αλγόριθμος εύρεσης πλήθος δίσκων επιστρέφει την τιμή 4 Ελάχιστη συχνότητα δίσκων: 1 Μέθοδος υπολογισμού βέλτιστων συχνοτήτων δίσκων Θόρυβος: 0% Χρήση προγράμματος με chunks: Μέγεθος προγράμματος: 192 Μέση καθυστέρηση 71,953699 Χρήση προγράμματος χωρίς chunks: Μέγεθος προγράμματος: 108 Μέση καθυστέρηση: 40,364631 3.2.8 Πείραμα 8 Κατανομή Zipf με παράμετρο θ = 0,95 Πλήθος σελίδων 50 Εύρεση του βέλτιστου αριθμού δίσκων Ο αλγόριθμος εύρεσης πλήθος δίσκων επιστρέφει την τιμή 3 Ελάχιστη συχνότητα δίσκων: 1 Μέθοδος υπολογισμού βέλτιστων συχνοτήτων δίσκων Θόρυβος: 10% Χρήση προγράμματος με chunks: Μέγεθος προγράμματος: 59 Μέση καθυστέρηση 23,019615 Χρήση προγράμματος χωρίς chunks: Μέγεθος προγράμματος: 54 Μέση καθυστέρηση: 20,850647-33-

3.2.9 Σύνοψη αποτελεσμάτων Αριθμός πειράματος Πρόγραμμα εκπομπής με chunks Νέα μέθοδος βέλτιστου μεγέθους προγράμματος εκπομπής Μέγεθος Μέση Μέγεθος Μέση καθυστέρηση προγράμματος καθυστέρηση προγράμματος 1 159 40,921611 150 38,956024 2 590 111,789385 394 81,368039 3 4725 802,212825 394 103,979471 4 660 121,458561 336 78,179736 5 4320 601,070398 336 164,041037 6 420 148,562354 114 40,339447 7 192 71,953699 108 40,364631 8 59 23,019615 54 20,850647 Πείραμα 1 180 160 140 120 100 80 60 40 20 0 Μέγεθος προγράμματος Μέση καθυστέρηση Μέγεθος προγράμματος Μέση καθυστέρηση Πρόγραμμα εκπομπής με Chunks Μέθοδος βέλτιστου μεγέθους προγράμματος εκπομπής Σχήμα 42 Πείραμα 2 700 600 500 400 300 200 100 0 Μέγεθος προγράμματος Μέση καθυστέρηση Μέγεθος προγράμματος Μέση καθυστέρηση Πρόγραμμα εκπομπής με Chunks Μέθοδος βέλτιστου μεγέθους προγράμματος εκπομπής Σχήμα 43-34-

Πείραμα 3 5000 4500 4000 3500 3000 2500 2000 1500 1000 500 0 Μέγεθος προγράμματος Μέση καθυστέρηση Μέγεθος προγράμματος Μέση καθυστέρηση Πρόγραμμα εκπομπής με Chunks Μέθοδος βέλτιστου μεγέθους προγράμματος εκπομπής Σχήμα 44 Πείραμα 4 700 600 500 400 300 200 100 0 Μέγεθος προγράμματος Μέση καθυστέρηση Μέγεθος προγράμματος Μέση καθυστέρηση Πρόγραμμα εκπομπής με Chunks Μέθοδος βέλτιστου μεγέθους προγράμματος εκπομπής Σχήμα 45 Πείραμα 5 5000 4500 4000 3500 3000 2500 2000 1500 1000 500 0 Μέγεθος προγράμματος Μέση καθυστέρηση Μέγεθος προγράμματος Μέση καθυστέρηση Πρόγραμμα εκπομπής με Chunks Μέθοδος βέλτιστου μεγέθους προγράμματος εκπομπής Σχήμα 46-35-

Πείραμα 6 450 400 350 300 250 200 150 100 50 0 Μέγεθος προγράμματος Μέση καθυστέρηση Μέγεθος προγράμματος Μέση καθυστέρηση Πρόγραμμα εκπομπής με Chunks Μέθοδος βέλτιστου μεγέθους προγράμματος εκπομπής Σχήμα 47 Πείραμα 7 250 200 150 100 50 0 Μέγεθος προγράμματος Μέση καθυστέρηση Μέγεθος προγράμματος Μέση καθυστέρηση Πρόγραμμα εκπομπής με Chunks Μέθοδος βέλτιστου μεγέθους προγράμματος εκπομπής Σχήμα 48 Πείραμα 8 70 60 50 40 30 20 10 0 Μέγεθος προγράμματος Μέση καθυστέρηση Μέγεθος προγράμματος Μέση καθυστέρηση Πρόγραμμα εκπομπής με Chunks Μέθοδος βέλτιστου μεγέθους προγράμματος εκπομπής Σχήμα 49-36-

ΚΕΦΑΛΑΙΟ 4: Τεκμηρίωση του κώδικα του Broadcast Disks Simulator 4.1 Εισαγωγή Στο κεφάλαιο αυτό περιγράφονται οι διαδικασίες και οι συναρτήσεις που δημιουργήθηκαν με σκοπό την ανάπτυξη του προσομοιωτή της μεθόδου Broadcast Disks. Ο προσομοιωτής που κατασκευάστηκε στα πλαίσια αυτής της εργασίας αναλύεται στα ακόλουθα στάδια εκτέλεσης τα οποία αποτελούν τμήματα του κώδικα: Τοποθέτηση και έλεγχος παραμέτρων Κεντρικό παράθυρο Κατασκευή της κατανομής και των πιθανοτήτων των σελίδων - στατιστικά Εύρεση δίσκων-συχνοτήτων, κατανομή σελίδων, κατασκευή chunks και broadcast προγράμματος - στατιστικά Στατιστικά και γραφήματα Server Στατιστικά και γραφήματα Client Σχήμα 50 Time Simulator Client Υποθέσεις για την προσομοίωση: 1) Η βάση δεδομένων μεταδίδεται ολόκληρη στις σελίδες του προγράμματος. 2) Δεν χρησιμοποιείται cashing ή άλλες παρόμοιες μέθοδοι. 3) Υπάρχει ένας client μόνο (δεν υπάρχει στατιστική διαφορά εάν έχουμε περισσότερους). 4) Ο client ζητά όλες τις σελίδες με πιθανότητες ανάλογες των τιμών των access probabilities τους. 5) Ο χρόνος μετάδοσης είναι σταθερός για κάθε σελίδα και εκφράζει την μονάδα του χρόνου (broadcast time unit). 6) Ο client παράγει αιτήσεις σελίδων στο σύστημα σε σταθερό χρόνο ανάλογο της μονάδας χρόνου. 7) Δεν έχουμε αλλαγή στην μορφή του προγράμματος (διάταξη σελίδων, προσθήκες-διαγραφές) κατά την προσομοίωση. 4.2 Περιγραφή δημοσίων μεταβλητών και πινάκων 'Γενικές βασικές μεταβλητές Public numofpages As Long Public N As Long Public AccessProbabilitiesArray() As Double Public RelFreqArray() As Long Public PR As Long Public program() As Long Public NumChunksArray() As Long Public BroadcastProgram() As String Public DiskRangeArray() As Double Public BelongsToDiskArray() As String Public program2() As String 'Πίνακες labels Public NameOfPagesArray() As String Public DiskNameArray() As String Public chunknamearray() As String 'αριθμός σελίδων 'αριθμός δίσκων 'πίνακας των access probabilities 'πίνακας σχετικών συχνοτήτων δίσκων 'μεγάλη περίοδος προγράμματος 'πίνακας index σελίδων προγράμματος σε μία μεγάλη περίοδο 'πίνακας αριθμού chunks ανά δίσκο 'πίνακας προγράμματος chunks που παράγονται 'πίνακας διαστημάτων κατανομής δίσκων 'πίνακας αντιστοιχίας σελίδων σε δίσκους 'πίνακας σελίδων προγράμματος χρησιμοποιώντας chunks 'πίνακας ονομάτων σελίδων 'πίνακας ονομάτων δίσκων 'πίνακας ονομάτων των chunks -37-

Public cpagesarray() As String 'πίνακας κατανομής σελίδων σε chunks 'Παράμετροι κατανομών Public theta As Double 'Παράμετροι προσομοίωσης client Public delta As Long 'παράμετρος αλλοίωσης συχνοτήτων δίσκων Public e As Byte 'παράμετρος προσθήκης θορύβου σε ποσοστό % Public bdtimes As Long 'πόσες φορές θα μεταδοθεί το πρόγραμμα Public ThinkTime As Long 'χρόνος σε στιγμές που μεσολαβεί μεταξύ αιτήσεων του client Public noiserate As Long 'ρυθμός αύξησης θορύβου στο διάστημα 0-100 για την προσομοίωση 'Γενικές μεταβλητές επιλογών (registry) Public zipfflag As Boolean 'χρήση ή όχι της κατανομής zipf Public uniflag As Boolean 'χρήση ή όχι της κανονικής κατανομής Public fileflag As Boolean 'ανάγνωση ή όχι πιθανοτήτων από αρχείο Public fmin As Long 'συχνότητα του πιο αργού δίσκου Public FreqMethod As Byte 'χρήση ή όχι τυχαίας κατανομής Public NDisk As Long 'επιλογή αριθμού δίσκων από χρήστη Public DiskFlag As Boolean 'επιλογή αυτόματου ή μη αλγορίθμου εύρεσης αρ. δίσκων Public programflag As Byte 'επιλογή προγράμματος στο simulation '1-πρόγραμμα με chunks, 2-προγραμμα χωρίς chunks, 3-flat πρόγραμμα Public fpr1 As Boolean 'Δημιουργία προγράμματος εκπομπής με chunks Public fpr2 As Boolean 'Δημιουργία προγράμματος εκπομπής χωρίς chunks 'Γενικές μεταβλητές στατιστικών αποτελεσμάτων Public delay As Double 'συνολική καθυστέρηση προγράμματος Public PB() As Double 'μέσες καθυστερήσεις σελίδων Public pe() As Double 'access probabilities αλλοιωμένες από το θόρυβο Public NormalizedAPArray() As Double 'πίνακας κανονικοποιημένων access probabilities Public avgrtime() As Double 'μέσος χρόνος απόκρισης κάθε δίσκου Public reqcounter() As Long 'πλήθος αιτήσεων που έγιναν σε κάθε δίσκο Public responcetime() As Long 'χρόνος απόκρισης κάθε δίσκου σε στιγμές Public Sub InitializeVars() ReDim PB(numOfPages) ReDim pe(numofpages) 4.3 Αλγόριθμος εύρεσης του βέλτιστου αριθμού δίσκων Ο αλγόριθμος αυτόματης εύρεσης του βέλτιστου αριθμού δίσκων αναζητά τον κατάλληλο αριθμό Ν δίσκων οι οποίοι θα εφαρμοστούν ώστε η κατανομή των πιθανοτήτων προσπέλασης στη διαμέριση των διαστημάτων τους (access ranges) να εξασφαλίζει την ύπαρξη τουλάχιστον μίας τιμής πιθανότητας σε αυτά. Έτσι εξασφαλίζουμε ότι δεν θα υπάρχει δίσκος στον οποίο να μην γίνει τοποθέτηση έστω και μίας σελίδας: Ν=7 Ν=8 Δίσκος χωρίς σελίδα Αφού εντοπίστηκε το κατάλληλο πλήθος δίσκων που εξυπηρετεί τις συνθήκες της Α φάσης, υπολογίζουμε όλες τις σχετικές συχνότητές τους και ελέγχουμε αν αυτές ικανοποιούν την: F(D1) > F(D2) > F(D3) > > F(DN) Δηλαδή εάν έχουν καταταχθεί κατά αυστηρά φθίνουσα σειρά. Αν υπάρχει έστω και ένα ζεύγος ίσων συχνοτήτων ή συχνοτήτων που προκύψαν ίσες με την ελάχιστη συχνότητα του τελευταίου δίσκου (Fmin) τότε μειώνουμε το πλήθος των δίσκων Ν κατά 1 και υπολογίζουμε ξανά τις νέες συχνότητες που προκύπτουν μέχρι να βρεθεί το κατάλληλο Ν. -38-

Public Sub DefineNumberOfDisks() 'Υπολογισμός αριθμού δίσκων ανάλογα με την επιλογή Dim i As Long Dim f As Boolean 'σημαία ελέγχου ίσων συχνοτήτων If DiskFlag Then N = findn() 'αυτόματος υπολογισμός Call RedimsArraysOfDisks(N) 'έλεγχος υπολογισμένων συχνοτήτων στην αυτόματη εύρεση δίσκων 'αν βρέθηκαν σε δίσκους ίδιες συχνότητες τότε Do f = False For i = 1 To N - 1 If (RelFreqArray(i) = RelFreqArray(i + 1)) Or (RelFreqArray(i) = fmin) Then f = True Exit For If f = True Then N = N - 1 'μειώνουμε το πλήθος των δίσκων κατά 1 Call RedimsArraysOfDisks(N) Loop Until (N <= 1 Or f = False) Else N = NDisk 'δήλωση του χρήστη Call RedimsArraysOfDisks(N) Public Function findn() As Long 'Αλγόριθμος εύρεσης του βέλτιστου αριθμού δίσκων 'Δηλώσεις βοηθητικών μεταβλητών Dim i, j, NDisks As Long Dim tmpflag As Boolean findn = numofpages 'αρχικά δίνουμε μέγιστη τιμή το πλήθος των σελίδων For NDisks = 1 To numofpages 'για κάθε τιμή από 1 έως αυτήν For j = 1 To NDisks 'χωρίζουμε σε ίσα διαστήματα πλάτους 1/NDisks tmpflag = False 'και ελέγχουμε αν For i = 1 To numofpages 'υπάρχει έστω και μία πιθανότητα προσπέλασης If (AccessProbabilitiesArray(i) >= ((j - 1) / NDisks)) And _ (AccessProbabilitiesArray(i) <= (j / NDisks)) Then tmpflag = True 'που δεν κατανέμεται στα διαστήματα Exit For If tmpflag = False Then 'αν βρέθηκε έστω και μία που δεν κατανεμήθηκε findn = NDisks 1 'επιστρέφεται η προηγούμενη τιμή πλήθους δίσκων Exit Function 'και σταματά η διαδικασία Next j 'αλλιώς συνεχίζουμε να αυξάνουμε το πλήθος δίσκων μέχρι να βρεθεί Next NDisks 'η κατάλληλη κατανομή End Function -39-

4.4 Διαδικασία εισαγωγής πιθανοτήτων προσπέλασης Επιλογή κατανομής που θα ακολουθούν οι πιθανότητες προσπέλασης των σελίδων Κατανομή ZIPF Τυχαία κατανομή Αναγνωση πιθανοτήτων προσπέλασης από αρχείο κειμμένου Υπολογισμός των πιαθανοτήτων προσπέλασης χρησιμοποιώντας την κατανομή ZIPF Παραγωγή τυχαίων πιθανότητων προσπέλασης Εμφάνιση του Open dialog των Windows ώστε ο χρήτης να επιλέξει το αρχείο των πιθανότητων προσπέλασης αναγνωση του αρχείου. Ταξινόνηση των σελίδων σύμφωνα με την πιθανότητα προσπέλασης τους Υπολογισμός των κανονικοποιημένων πιθανοτήτων προσπέλασης των σελίδων Εμφάνιση των σελίδων στο Grid του Interface Public Sub InsertProbabilities() Dim a As Double, sum As Double Dim i As Long Σχήμα 51 If fileflag = True Then 'εισαγωγή των πιθανοτήτων προσπέλασης απο αρχείο κειμένου MainForm.CDialog.DialogTitle = "Επιλέξτε το αρχείο με τις πιθανότητες" MainForm.CDialog.ShowOpen If MainForm.CDialog.FileName = "" Then Exit Sub numofpages = LinesOfFile(MainForm.CDialog.FileName) Call RedimsSub Open MainForm.CDialog.FileName For Input As #1 sum = 0 'Διαβασμα των πιθανοτήτων προσπέλασης απο το αρχείο For i = 1 To numofpages Input #1, a NameOfPagesArray(i) = "P" + CStr(i) AccessProbabilitiesArray(i) = a sum = sum + AccessProbabilitiesArray(i) Call SortArray Close #1 Else 'εισαγωγή πιθανοτήτων προσπέλασης είτε σύμφωνα με την κανονική κατανομή -40-

'είτε σύμφωνα με την κατανομή Zipf Call RedimsSub sum = 0 For i = 1 To numofpages NameOfPagesArray(i) = "P" + CStr(i) If uniflag Then 'Κανονική κατανομή AccessProbabilitiesArray(i) = Round(CDbl(Rnd), 6) If zipfflag Then 'Κατανομή zipf AccessProbabilitiesArray(i) = Round(1 / (Exp(theta * Log(i))), 6) sum = sum + AccessProbabilitiesArray(i) If Not (zipfflag) Then 'Αν έχουμε επιλέξει την κατανομή zipf οι πίνακες είναι ήδη ταξινομημένοι 'Σε περίπτωση που έχει επιλεγεί η κανονική κατανομή Call SortArray 'κάλεσε την sub ταξινόμησης For i = 1 To numofpages NormalizedAPArray(i) = Round((AccessProbabilitiesArray(i) / sum), 6) Call FillGrid 'Γέμισε το grid των σελίδων στην main form Call Prep2 4.5 Διαδικασία εύρεσης των διαστημάτων των δίσκων Private Sub ComputeDiskRanges() Dim sep As Double Dim c As Long, i As Long, j As Long, PFReq() As Long, FRange As Long, pt1 As Long, pt2 As Long Dim minp As Single Dim Dim s1 As String, s2 As String, s As String If FreqMethod <> 2 Or zipfflag = True Then 'Βέλτιστη μέθοδος υπολογιμού συχνοτήτων και 'χρήση της κατανομής zipf sep = Round((1 / N), 6) c = 0 'Εύρεση των διαστημάτων των δίσκων For i = 1 To N 'Για κάθε δίσκο DiskNameArray(i) = "D" + CStr(i) DiskRangeArray(1, i) = Round((1 - c * sep), 6) c = c + 1 DiskRangeArray(2, i) = Round((1 - c * sep), 6) DiskRangeArray(2, N) = 0 For i = 1 To numofpages 'Για κάθε σελίδα For j = 1 To N 'Για κάθε δίσκο If AccessProbabilitiesArray(i) > DiskRangeArray(2, j) And _ AccessProbabilitiesArray(i) <= DiskRangeArray(1, j) Then 'αν η σελίδα i ανήκει στον δίσκο j τότε στον πίνακα 'BelongsToDiskArray δηλώνεται ότι η σελίδα ανήκει σε αυτό τον πίνακα BelongsToDiskArray(i) = DiskNameArray(j) Next j Else 'Υπολογισμός των συχνοτήτων κάθε μίας σελίδας με βάση τον κανόνα της ρίζας 'Αρχικά υπολογίζεται η ελάχιστη συχνότητα minp = NormalizedAPArray(1) For i = 2 To numofpages If NormalizedAPArray(i) < minp Then minp = NormalizedAPArray(i) -41-

If minp = 0 Then minp = 0.000001 'Κατόπιν υπολογίζονται οι συχνότητες κάθε σελίδας με τον νόμο της ρίζας ReDim PFReq(numOfPages) 'πίνακας ακεραίων συχνοτήτων For i = 1 To numofpages PFReq(i) = Int(Sqr(NormalizedAPArray(i) / minp)) 'βρίσκεται το εύρος τιμών FRange = PFReq(1) - PFReq(numOfPages) 'και κατανέμονται οι σελίδες στους δίσκους ανάλογα με τις ακέραιες συχνότητες και το πλήθος των δίσκων If N > 1 Then For i = 0 To N - 1 DiskNameArray(i + 1) = "D" + CStr(i + 1) pt1 = PFReq(1) - i * Int(FRange / N) If i < N - 1 Then pt2 = PFReq(1) - (i + 1) * Int(FRange / N) Else pt2 = PFReq(numOfPages) For j = 1 To numofpages If PFReq(j) <= pt1 And PFReq(j) > pt2 Then BelongsToDiskArray(j) = DiskNameArray(i + 1) Next j For j = 1 To numofpages - 1 s1 = BelongsToDiskArray(j) s2 = BelongsToDiskArray(j + 1) If s2 = "" Then BelongsToDiskArray(j + 1) = s1 Next j 'κατόπιν καταγράφονται τα διαστήματα πιθανοτήτων όπου έγινε η κατανομή DiskRangeArray(1, 1) = NormalizedAPArray(1) i = 0 For j = 1 To numofpages - 1 s1 = BelongsToDiskArray(j) s2 = BelongsToDiskArray(j + 1) If s1 <> s2 Then i = i + 1 DiskRangeArray(2, i) = NormalizedAPArray(j) If i < N Then DiskRangeArray(1, i + 1) = NormalizedAPArray(j + 1) Next j DiskRangeArray(2, N) = NormalizedAPArray(numOfPages) Else DiskNameArray(1) = "D" + CStr(1) pt1 = PFReq(1) pt2 = PFReq(numOfPages) For j = 1 To numofpages BelongsToDiskArray(j) = DiskNameArray(1) Next j DiskRangeArray(1, 1) = NormalizedAPArray(1) DiskRangeArray(2, 1) = NormalizedAPArray(numOfPages) 4.6 Διαδικασία υπολογισμού συχνοτήτων δίσκων Στη διαδικασία αυτή υλοποιούνται δύο μέθοδοι υπολογισμού των συχνοτήτων των δίσκων. Το ποια από τις δύο θα χρησιμοποιηθεί εξαρτάται από την επιλογή του χρήστη στην οθόνη εισαγωγής παραμέτρων. Οι τύποι υπολογισμού των συχνοτήτων των δύο μεθόδων δίνονται παρακάτω: Πρώτη μέθοδος: Η μέθοδος αυτή χρησιμοποιεί την παράμετρο Δέλτα (βλέπε παράγραφο 1.5.2) -42-

Σχετ.Συχν.Δίσκου(i) = fmin ((N-i)Δ + 1) Όπου i το index του δίσκου και όπου N το index του πιο αργού δίσκου Δεύτερη μέθοδος: Η μέθοδος αυτή αποτελεί το βέλτιστο τρόπο υπολογισμού των συχνοτήτων των δίσκων αλλα απαιτεί τη γνώση των πιθανοτήτων προσπέλασης της κάθε σελίδας. Είναι η πλέον χρησιμοποιούμενη μέθοδος και προτείνεται από πολλά άρθρα: Σχετ.Συχν.Δίσκου(i) = fmin j D j D Private Sub ComputeRelFrequencies() 'Υπολογισμός των συχνοτήτων των δίσκων Dim PminDisk As Double, PDisk_i As Double Dim i, j As Long, c As Long, sum As Double sum = 0 c = 0 For i = 1 To numofpages 'Για κάθε σελίδα If BelongsToDiskArray(i) = DiskNameArray(N) Then 'η σελίδα i ανήκει στον τελευταίο δίσκο sum = sum + NormalizedAPArray(i) c = c + 1 If c <> 0 Then PminDisk = sum / c 'Μέση καθυστέρηση του πιο αργού δίσκου Else PminDisk = 0 i N normalized _ p( j) / D normalized _ p( j) / D i N For i = 1 To N 'γιά κάθε δίσκο If FreqMethod = 3 Then 'Υπολογίζονται οι συχνότητες χρησιμοποιώντας την μέθοδο με την παράμετρο Δέλτα (πρώτη μέθοδο) RelFreqArray(i) = fmin * ((N - i) * delta + 1) ElseIf FreqMethod = 2 Then 'Υπολογίζονται οι συχνότητες χρησιμοποιώντας την βέλτιστη μέθοδο (δεύτερη μέθοδο) sum = 0 c = 0 For j = 1 To numofpages 'Για κάθε σελίδα If BelongsToDiskArray(j) = DiskNameArray(i) Then 'Η σελίδα j ανήκει στον δίσκο i sum = sum + NormalizedAPArray(j) c = c + 1 Next j If c <> 0 Then PDisk_i = sum / c 'Μέση πιθανότητα του δίσκου Else PDisk_i = 0 'Υπολογισμός της συχνότητας του δίσκου If PDisk_i <> 0 And PminDisk <> 0 Then RelFreqArray(i) = fmin * Int(Sqr(PDisk_i / PminDisk)) Else 'Αποφεύγεται ο μηδενισμός της συχνότητας RelFreqArray(i) = fmin -43-

4.7 Διαδικασία δημιουργίας Chunks Σε αυτή τη διαδικασία αρχικοποιούνται τρεις βασικές δομές δεδομένων (πίνακες). Συγκεκριμένα, αυτές οι δομές δεδομένων είναι ο μονοδιάστατος πίνακας NumChunkArray, ο οποίος αποθηκεύει το πόσα chunks έχει ένας δίσκος, ο πίνακας δυο διαστάσεων chunknamearray όπου καταχωρούνται τα ονόματα των chunks των δίσκων και τέλος, ο πίνακας δύο διαστάσεων cpagesarray ο οποίος καταχωρεί σε κάθε κελί του τα ονόματα των σελίδων που περιέχει κάθε chunk. Για παράδειγμα έστω: Πλήθος δίσκων: 3 (D1,D2,D3) Chunks Chunks D1: C11, C12 Chunks D2: C21, C22, C23 Chunks D3: C31, C32, C33, C34, C34, C35, C36 Pages Pages C11: P1 Pages C12: Κενό Pages C21:P2 Pages C22: P3 Pages:C23: Κενό Pages C31: P4,P5,P6,P7,P8,P9,P10,P11 Pages C32: P12,P13,P14,P15,P16,P17,P18,P19 Pages C33: P20,P21,P22,P23,P24,P25,P26.P27 Pages C34: P28,P29,P30,P31,P32,P33.P34,P36 Pages C35: P37,P38,P39,P40,P41,P42,P43,P44 Pages C36: P45,P47,P47,P48,P49,P50 NumChunksArray 2 3 6 ChunkNameArray C11 C12 C21 C22 C23 C31 C32 C33 C34 C35 C36 cpagesarray P1 SpcY P2 P3 SpcY P4 P5 P6 P7 P8 P12 P13 P14 P15 P9 P10 P11 P16 P17 P18 P19 P20 P21 P22 P23 P24 P25 P26 P27 P28 P29 P30 P31 P32 P33 P34 P36 P37 P38 P39 P40 P41 P42 P43 P44 P45 P47 P47 P48 P49 P50 Τα ονόματα των σελίδων σε κάθε κελί του cpagesarray είναι διαχωρισμένα με κενό. Οι πίνακες που δημιουργούνται από τη διαδικασία CreateChunks χρησιμοποιούνται στη διαδικασία που έχει ως στόχο την κατασκευή του προγράμματος εκπομπής. Η διαδικασία κατασκευής του προγράμματος εκπομπής παρουσιάζεται στην παράγραφο 4.8. Όπως έχει ήδη ειπωθεί, υπάρχει περίπτωση ένας δίσκος να περιέχει περισσότερα chunks από ότι σελίδες. Αυτό συνεπάγεται με την ύπαρξη κενών στο πρόγραμμα εκπομπής. Σύμφωνα με το άρθρο που παρουσιάστηκε στο πρώτο κεφάλαιο αυτής της εργασίας, τα κενά chunks που προκύπτουν από τον αλγόριθμο κατασκευής του προγράμματος εκπομπής (βλέπε παράγραφο 1.5.2) μπορούν να χρησιμοποιηθούν ώστε να γίνονται broadcast άλλου είδους πληροφορίες (π.χ. δείκτες βάσεων δεδομένων). Τα κενά αυτά σημειώνονται στον πίνακα του προγράμματος εκπομπής με SpcX Όπως καταλαβαίνουμε, τα κενά αυτά αποτελούν μειονέκτημα της μεθόδου κατασκευής του προγράμματος εκπομπής. Στην παράγραφο 4.10 παρουσιάζεται ένας νέος αλγόριθμος ο οποίος έχει ως αποτέλεσμα την δημιουργία προγράμματος εκπομπής χωρίς τέτοιου είδους κενά. Τέλος, υπάρχει περίπτωση η ύπαρξη κενών που προκύπτουν από το εξής φαινόμενο: Ύπαρξη κενών που είναι αποτέλεσμα της διαίρεσης του αριθμού των σελίδων με τον αριθμό των chunks η οποία απαιτείται για να βρούμε πόσες σελίδες θα καταχωρηθούν σε ένα chunk. Ωστόσο, η διαίρεση αυτή μπορεί να μην έχει αποτέλεσμα ακέραιο αριθμό. Έτσι, στην περίπτωση του δεκαδικού αριθμού, παίρνουμε το άνω όριο, πράγμα που συνεπάγεται με την ύπαρξη κενών chunks. Το άνω όριο μας εξασφαλίζει ότι όλες οι σελίδες θα -44-

καταχωρηθούν σε κάποιο chunk. Για παράδειγμα, αν έχουμε 50 chunks και 24 σελίδες, το αποτέλεσμα της διαίρεσης είναι 2,033. Επειδή, δε μπορούμε να καταχωρήσουμε 2,033 σελίδες σε ένα chunk, καταχωρούμε 3 σελίδες σε ένα chunk αλλά θα παραμείνουν 7 chunk κενά. Αυτού του είδους τα κενά σημειώνονται με «SpcY» (Επανάληψη παραγράφου κεφαλαίου 2) Public Sub CreateChunks() 'Διαδικασία τοποθέτησης σελίδων σε chunks Dim i As Long, j As Long, csep As Long Dim max As Long, c As Long, LCM As Long Dim v As Long, aa As Long Dim s As String LCM = findlcm 'Βρες το LCM 'Υπολόγισε πόσα chunk θα έχει κάθε δίσκος και εκχώρησε το αποτέλεσμα στο grid των δίσκων For i = 1 To N NumChunksArray(i) = LCM / RelFreqArray(i) MainForm.Grid2.TextMatrix(i, 3) = CStr(NumChunksArray(i)) max = findmax 'βρες το μεγαλύτερο αριθμό chunks ώστε να οριστούν 'οι διαστάσεις των πινάκων των chunks ReDim chunknamearray(n, max) ReDim cpagesarray(n, max) 'Αρχικοποίηση των πινάκων των chunks For i = 1 To N For j = 1 To max chunknamearray(i, j) = "X" cpagesarray(n, max) = "" Next j For i = 1 To N 'Για κάθε δίσκο s = "[" For j = 1 To NumChunksArray(i) chunknamearray(i, j) = "C" + CStr(i) + CStr(j) 'όνομασε το κάθε chunk του δίσκου i s = s + chunknamearray(i, j) + "," Next j If fpr1 = True Then 'Αν έχει επιλεγεί η δημιουργία του προγράμματος σελίδων με chunks If NumChunksArray(i) >= pagesnumberofdisk(disknamearray(i)) Then 'Υπάρχουν περισσότερα chunks από ότι σελίδες v = 0 For j = 1 To numofpages If BelongsToDiskArray(j) = DiskNameArray(i) Then 'Βάλε μια σελίδα σε ένα chunk v = v + 1 cpagesarray(i, v) = NameOfPagesArray(j) Next j 'αν υπάρχουν chunks που δεν χρειάζονται γέμισε τα με "spcx" For j = v + 1 To NumChunksArray(i) cpagesarray(i, j) = "spcx" Next j Else 'Οι σελίδες είναι περισσότερες από τα chunks 'Βρες το πάνω όριο της Διαίρεσης του αριθμού των σελίδων με τον αριθμό των chunks, ώστε να 'χωρέσουν όλες οι σελίδες. Υπάρχει περίπτωση να μείνουν κενά chunk αν π.χ. έχουμε '50/24 = 2.0833 => 3. Άρα θα μπουν 3 σελίδες σε κάθε chunk άλλα 7 chunk θα μείνουν κενά aa = pagesnumberofdisk(disknamearray(i)) / NumChunksArray(i) aa = aa + 1 aa = Int(aa) v = 0 c = 1 'Βάλε aa σελίδες σε κάθε chunk -45-

For j = 1 To numofpages If BelongsToDiskArray(j) = DiskNameArray(i) Then If v >= aa Then c = c + 1 v = 0 v = v + 1 'Οι σελίδες που ανήκουν στο ίδιο chunk χωρίζονται με κενό cpagesarray(i, c) = cpagesarray(i, c) + NameOfPagesArray(j) + " " Next j 'Τσέκαρε τα κενά chunk με "spcy" For j = c + 1 To max cpagesarray(i, j) = "spcy" Next j MainForm.Grid2.TextMatrix(i, 5) = Mid(s, 1, Len(s) - 1) + "]" 4.8 Διαδικασία (Αλγόριθμος) δημιουργίας του προγράμματος chunks Στην παράγραφό αυτή θα παρουσιαστεί συνοπτικά ένα παράδειγμα δημιουργίας προγράμματος εκπομπής και στην συνέχεια θα παρουσιαστεί η διαδικασία τοποθέτησης των chunks στο πρόγραμμα. Θα πρέπει να αναφερθεί ότι για τη δημιουργία του προγράμματος εκπομπής είναι υπεύθυνες και η διαδικασία αυτής της παραγράφου και η διαδικασία της παραγράφου 4.7. Παράδειγμα διαδικασίας δημιουργίας του προγράμματος εκπομπής: Έστω μια λίστα 11 σελίδων που είναι ταξινομημένη από την πιο hot σελίδα στην πιο cold σύμφωνα με την πιθανότητα προσπέλασής τους από τους clients. Πιθανότητες προσπέλασης: P(1)=1/2, P(2),P(3)=1/8, P(4),P(5),P(6),P(7),P(8),P(9),P(10),P(11) = 1/32 Οι 11 σελίδες κατανέμονται σύμφωνα με τις πιθανότητες προσπέλασης τους από τους clients, σε 3 δίσκους. Χρησιμοποιώντας την βέλτιστη μέθοδο υπολογισμού συχνοτήτων των δίσκων Έχουμε τις εξής συχνότητες: Σχετική_Συχνότητα (Δίσκος_1) = 4 Σχετική_Συχνότητα (Δίσκος_2) = 2 Σχετική_Συχνότητα (Δίσκος_3) = 1 Άρα οι δίσκοι που προκύπτουν είναι οι εξής: Δίσκος_1 1 Δίσκος_2 2 3 Δίσκος_3 4 5 6 7 8 9 10 11 Ο κάθε δίσκος χωρίζεται σε chunks ως εξής: Αριθμός _ Chunks (Δίσκος _ i) = ΕΚΠ / Σχετική _ Συχνότητα (Δίσκος _ i) ΕΚΠ (4,2,1) = 4 Αριθμός _ Chunks (Δίσκος _ 1) = 4 / 4 = 1 Αριθμός _ Chunks (Δίσκος _ 2) = 4 / 2 = 2-46-

Αριθμός _ Chunks (Δίσκος _ 3) = 4 / 1 = 4 C10: 1 C20: 2 C21: 3 C30: 4, 5 C31: 6,7 C32: 8,9 C33: 10,11 Αλγόριθμος τοποθέτησης των chunks στο πρόγραμμα εκπομπής: Πρόγραμμα εκπομπής: 1 2 4 5 1 3 6 7 1 2 8 9 1 3 10 11 Στην διαδικασία που παρουσιάζεται παρακάτω, αρχικοποιούνται δύο πίνακες οι οποίοι αντιπροσωπεύουν το πρόγραμμα εκπομπής. Συγκεκριμένα ο πίνακας BroadcastProgram καταχωρούνται τα ονόματα των chunks του προγράμματος εκπομπής. Δηλαδή, για το παραπάνω παράδειγμα: BroadcastProgram C10 C20 C30 C10 C21 C31 C10 C20 C32 C10 C21 C33 Ενώ στον πίνακα program2 καταχωρούνται οι σελίδες που γίνονται broadcast (πρόγραμμα εκπομπής) Public Sub createchunkprogram() 'Δημιουργία των προγραμματων chunk και των προργαμμάτων σελιδων με chunk 'Δηλώσεις βοηθητικών μεταβλητών Dim i As Long, j As Long, c As Long, p As Long, k As Long, t As Long Dim tfl As Boolean c = 0 For i = 1 To findlcm() For j = 1 To N c = c + 1 Next j ReDim BroadcastProgram(c) ReDim program2(20) 'Ορισμός του μεγέθους του προγράμματος σε 20 σελίδες 'ώστε να αποφεύγονται τα πολλά redims c = 0 p = 0 'αρχικοποίηση του μετρητή μεγέθους προγράμματος 'Αλγόριθμος τοποθέτησης των chunks στο πρόγραμμα For i = 0 To findlcm() - 1 For j = 1 To N 'Για κάθε δίσκο c = c + 1 BroadcastProgram(c) = chunknamearray(j, 1 + (i Mod NumChunksArray(j))) If fpr1 = True Then 'Αν έχει επιλεγεί η δημιουργία προγράμματος σελίδων τότε k = 1 tfl = False For t = 1 To Len(cPagesArray(j, 1 + (i Mod NumChunksArray(j)))) 'Για κάθε chunk σελίδων που γίνεται broadcast If Mid(cPagesArray(j, 1 + (i Mod NumChunksArray(j))), t, 1) = " " Then 'Τσέκαρε αν υπάρχουν περισσότερες από μια σελίδες στο chunk αν υπάρχουν τότε p = p + 1 Για i από 0 μέχρι LCM - 1 Για j από 1 μέχρι Αριθμός _ δίσκων Broadcast chunk (i mod Αριθμός _ Chunks(Δίσκος _ j)) from Δίσκο j Τέλος_επανάληψης Τέλος_Επανάληψης 'Αύξησε τον μετρητή μεγέθους προγράμματος και τοποθέτησε 'μια σελίδα του chunk στο πρόγραμμα program2(p) = Mid(cPagesArray(j, 1 + (i Mod NumChunksArray(j))), k, t - k) k = t + 1 tfl = True If p >= UBound(program2) Then 'Αύξησε το μέγεθος του πίνακα σε περίπτωση που δεν υπάρχει αρκετός χώρος ReDim Preserve program2(p + 20) -47-

Next t If Not (tfl) Then p = p + 1 'σε περίπτωση που το chunk έχει μια σελίδα 'αύξησε το μετρητή μεγέθους προγράμματος και κάνε τοποθέτηση 'της σελίδας στο πρόγραμμα program2(p) = cpagesarray(j, 1 + (i Mod NumChunksArray(j))) If p >= UBound(program2) Then 'Αύξησε το μέγεθος του πίνακα σε περίπτωση που δεν υπάρχει αρκετός χώρος ReDim Preserve program2(p + 20) 'Εμφάνιση του προγράμματος chunks στο grid της φόρμας MainForm.grid3.FormatString = MainForm.grid3.FormatString + " <" MainForm.grid3.TextMatrix(1, c - 1) = BroadcastProgram(c) Next j If fpr1 = True Then c = 0 'αν λόγω των redims έχουν διαγραφεί περιττά κενά, διέγραψε τα For i = 1 To UBound(program2) If program2(i) = "" Then c = c + 1 ReDim Preserve program2(ubound(program2) - c) 4.9 Διαδικασία δημιουργίας flat προγράμματος Ένα πρόγραμμα εκπομπής που δε λαμβάνει υπόψη πόσο σημαντικό είναι κάθε αντικείμενο και απλά εκπέμπει τα αντικείμενα με ίδια συχνότητα, ονομάζεται flat program και διαθέτει έναν δίσκο. P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 Sub makeflatprogram() Dim i As Long PR = numofpages ReDim program(numofpages) For i = 1 To numofpages program(i) = i 4.10 Αλγόριθμος δημιουργίας προγράμματος αποφεύγοντας το βήμα δημιουργίας chunks Βήματα αλγορίθμου Αρχικά υπολογίζουμε το μέγεθος του προγράμματος σε πλήθος σελίδων που θα μεταδίδονται περιοδικά (η μεγάλη περίοδός του). Αυτό δίνεται από την σχέση: Μέγεθος-PR = για _ κά θε _ δίσκο _ I Σχετ.Συχν.(I) x Αρ.Σελίδων (I) -48-

Κατόπιν, κάνουμε κατανομή των σελίδων έτσι ώστε η κάθε μία να εμφανίζεται τόσες φορές όσες είναι και η συχνότητα του δίσκου που ανήκει. Για να πετύχει αυτό τοποθετούμε τις επαναλήψεις κάθε σελίδας σε απόσταση d: d = Απόσταση επανάληψης(σελίδα_ι) = PR Σ χετ. Συχν.( Ι) Εάν όμως κατά την τοποθέτηση προκύψει μη κενή θέση τότε μετατοπίζεται ο δείκτης σάρωσης κατά 1 θέση δεξιότερα μέχρι να βρεθεί κενή θέση και να τοποθετηθεί η σελίδα: Στο παράδειγμα που βλέπουμε στο σχήμα έχει προκύψει ότι PR=21 (μέγεθος προγράμματος από τις συχνότητες) και ότι η γαλάζια και η πράσινη σελίδα πρέπει να τοποθετηθεί 2 φορές (βρίσκονται σε δίσκο συχνότητας 2) και κατόπιν η κόκκινη 5 φορές (βρίσκεται σε δίσκο συχνότητας 5). Τότε: Η γαλάζια τοποθετείται στην πρώτη θέση και μετά σε απόσταση d=int(21/2)=10 (μετά από 10 θέσεις). Κατόπιν τοποθετείται η πράσινη στην δεύτερη θέση και με ανάλογο τρόπο μετά από 10 θέσεις. Η κόκκινη τοποθετείται στην τρίτη θέση και μετά σε απόσταση d=int(21/5)=4 (μετά από 4 θέσεις). Στην επόμενη όμως τοποθέτησή της υπάρχει ήδη η γαλάζια, οπότε μετακινείται ο δείκτης μέχρι την επόμενη κενή θέση προς τα δεξιά και τελικά τοποθετείται μετά από 6 θέσεις. Στη συνέχεια επαναλαμβάνεται το ίδιο και τοποθετούνται οι 5 κόκκινες σελίδες. Public Sub ComputePageProgram() Dim i As Long, j As Long, d As Long, k As Long Dim sm As Long, pageno As Long, progindex As Long 'υπολογισμός μεγέθους του προγράμματος σε αριθμό σελίδων sm = 0 For i = 1 To N sm = sm + RelFreqArray(i) * pagesnumberofdisk(disknamearray(i)) PR = sm ReDim program(pr) 'αρχικοποίηση πίνακα προγράμματος σελίδων For i = 1 To PR program(i) = 0 'κατανομή των σελίδων στο πρόγραμμα pageno = 0 For i = 1 To N 'για κάθε δίσκο που υπάρχει For j = 1 To pagesnumberofdisk(disknamearray(i)) 'και για κάθε σελίδα που βρίσκεται σε αυτόν 'υπολογίζεται η απόσταση επανάληψης της σελίδας στο πρόγραμμα d = Int(PR / RelFreqArray(i)) 'σημειώνεται ποια σελίδα θα τοποθετηθεί pageno = pageno + 1 'και τοποθετείται σε θέσεις ίσων αποστάσεων d στο πρόγραμμα 'τόσες φορές όσες είναι και η συχνότητα εμφάνισής της σ'αυτό For k = 1 To RelFreqArray(i) progindex = d * (k - 1) + 1 'βρίσκεται ο δείκτης τοποθέτησης If program(progindex) <> 0 Then 'και αν υπάρχει ήδη άλλη σελίδα εκεί τότε Do progindex = progindex + 1 'μετατοπίζουμε τον δείκτη κατά 1 δεξιότερα 'μέχρι να βρούμε άδεια θέση ή να ξεπεράσουμε το μέγεθος του προγράμματος Loop Until (program(progindex) = 0 Or progindex > PR) If progindex > PR Then MsgBox "Προσοχή, κάποιος δείκτης τοποθέτησης ξεπερνά το μέγεθος του προγράμματος.", vbcritical -49-

'τοποθετείται η σελίδα στη θέση που βρέθηκε program(progindex) = Val(Right(NameOfPagesArray(pageno), Len(NameOfPagesArray(pageno)) - 1)) Next k Next j 4.11 Συνάρτηση εύρεσης του πλήθους σελίδων που ανήκουν σε ένα δίσκο Public Function pagesnumberofdisk(nd As String) As Long 'Επιστρέφει το πόσες σελίδες βρίσκονται στο δίσκο nd Dim i As Long, j As Long, Counter As Long Counter = 0 For j = 1 To numofpages If BelongsToDiskArray(j) = nd Then Counter = Counter + 1 Next j pagesnumberofdisk = Counter End Function 4.12 Διαδικασία δημιουργία προγράμματος indexes σελίδων Sub MakeNewIndexProgram() 'Διαδικασία δημιουργίας προράμματος με indexes σελίδων. Η διαδικασία αυτή είναι απαραίτητη επειδή η 'διαδιακασία του time simulation απαιτεί index σελίδων και όχι ονόματα σελίδων Dim i As Long PR = UBound(program2) ReDim program(pr) For i = 1 To PR If program2(i) <> "spcx" And program2(i) <> "spcy" Then program(i) = Val(Mid(program2(i), 2, Len(program2(i)) - 1)) Else program(i) = 0 4.13 Βοηθητικές διαδικασίες και συναρτήσεις Public Sub SortArray() 'Διαδικασία ταξινόμησης των πινάκων των πιθανοτήτων προσπέλασης 'χρησιμοποιώντας τον αλγόριθμο BubbleSort Dim i, j As Long Dim temp1 As Double Dim temp2 As String For i = 2 To numofpages For j = numofpages To i Step -1 If AccessProbabilitiesArray(j - 1) < AccessProbabilitiesArray(j) Then temp1 = AccessProbabilitiesArray(j - 1) AccessProbabilitiesArray(j - 1) = AccessProbabilitiesArray(j) AccessProbabilitiesArray(j) = temp1 temp1 = NormalizedAPArray(j - 1) NormalizedAPArray(j - 1) = NormalizedAPArray(j) NormalizedAPArray(j) = temp1 temp2 = NameOfPagesArray(j - 1) NameOfPagesArray(j - 1) = NameOfPagesArray(j) NameOfPagesArray(j) = temp2 Next j Public Function findmax() As Long -50-

'Βρίσκει και επιστρέφει το μέγιστο αριθμό chunks Dim max As Long, i As Long max = NumChunksArray(1) For i = 2 To N If NumChunksArray(i) > max Then max = NumChunksArray(i) findmax = max End Function Function LinesOfFile(path As String) As Long 'Επιστρέφει τον αριθμό γραμμών ενος αρχείο κειμένου Dim i As Long, a As String i = 0 Open path For Input As #1 Do While Not EOF(1) Input #1, a i = i + 1 Loop Close #1 LinesOfFile = i End Function Public Function findlcm() As Long 'Επιστρέφει το ελάχιστο κοινό πολλαπλάσιο (LCM) των συχνοτήτων των δίσκων Dim i As Long, MKD As Long, M As Long Dim tmpflag As Boolean MKD = RelFreqArray(1) M = RelFreqArray(1) For i = 2 To N M = M * RelFreqArray(i) If RelFreqArray(i) < MKD Then MKD = RelFreqArray(i) tmpflag = True While tmpflag tmpflag = False For i = 1 To N If (RelFreqArray(i) Mod MKD) <> 0 Then tmpflag = True Exit For If tmpflag Then MKD = MKD - 1 Wend findlcm = M / MKD End Function Public Sub RedimsArraysOfDisks(N As Long) ReDim DiskRangeArray(2, N) ReDim NumChunksArray(N) ReDim DiskNameArray(N) ReDim RelFreqArray(N) ComputeDiskRanges 'Υπολογισμός διαστημάτων δίσκων ComputeRelFrequencies 'υπολογίζουμε τις συχνότητές τους Public Function NumStateInt(alpha As String) As Boolean 'Δέχεται ως παράμετρο ένα string και επιστρέφει false αν ο το string αυτό δεν είναι αριθμός integer Dim i As Integer If alpha = "" Then NumStateInt = False: Exit Function For i = 1 To Len(alpha) If (Asc(Mid(alpha, i, 1)) < 48 Or Asc(Mid(alpha, i, 1)) > 57) Then NumStateInt = False Exit Function -51-

NumStateInt = True End Function Public Function NumStateReal(alpha As String) As Boolean 'Δέχεται ως παράμετρο ένα string και επιστρέφει false αν ο το string αυτό δεν είναι αριθμός real Dim mi As Long Dim i As Integer If alpha = "" Then NumStateReal = False: Exit Function If alpha = "," Then NumStateReal = False Exit Function mi = 0 Dim Temp As String For i = 1 To Len(alpha) Temp = Mid(alpha, i, 1) If (Asc(Temp) < 48 Or Asc(Temp) > 57) And Temp <> "," Then NumStateReal = False Exit Function If Temp = "," Then mi = mi + 1 If mi > 1 Then NumStateReal = False Exit Function NumStateReal = True End Function 4.14 Διαδικασίες ανάκτησης και αποθήκευσης των παραμέτρων στην Registry των Windows Sub setregvalues() 'Αποθήκευση των παραμέτρων στην registry των windows SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_1a", setting:=cstr(uniflag) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_1b", setting:=cstr(zipfflag) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_1c", setting:=cstr(fileflag) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_2", setting:=cstr(theta) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_4", setting:=cstr(numofpages) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_5", setting:=cstr(delta) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_6", setting:=cstr(freqmethod) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_7", setting:=cstr(fmin) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_8", setting:=cstr(diskflag) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_9", setting:=cstr(ndisk) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_10", setting:=cstr(e) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_11", setting:=cstr(bdtimes) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_12", setting:=cstr(thinktime) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_13", setting:=cstr(noiserate) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_14", setting:=cstr(programflag) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_15", setting:=cstr(fpr1) SaveSetting APPNAME:="SimNetValues", Section:="Settings", Key:="option_16", setting:=cstr(fpr2) Sub getregvalues() 'Ανάκτηση των παραμέτρων απο την registry των windows uniflag = CBool(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_1a", Default:="False")) zipfflag = CBool(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_1b", Default:="True")) fileflag = CBool(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_1c", Default:="False")) theta = CDbl(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_2", Default:="0,95")) numofpages = CInt(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_4", Default:="50")) delta = CInt(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_5", Default:="2")) FreqMethod = CByte(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_6", Default:="2")) fmin = CInt(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_7", Default:="1")) DiskFlag = CBool(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_8", Default:="True")) NDisk = CLng(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_9", Default:="3")) e = CByte(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_10", Default:="0")) bdtimes = CLng(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_11", Default:="10")) -52-

ThinkTime = CLng(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_12", Default:="2")) noiserate = CLng(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_13", Default:="10")) programflag = CByte(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_14", Default:="1")) fpr1 = CBool(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_15", Default:="True")) fpr2 = CBool(GetSetting(APPNAME:="SimNetValues", Section:="Settings", Key:="option_16", Default:="True")) 4.15 Διαδικασίες αποθήκευσης πληροφοριών σε αρχεία κειμένου Public Sub SaveFromMainForm() 'Αποθήκευση σε αρχείο των πινάκων της mainform Dim i As Long With MainForm.CDialog.DialogTitle = "Επιλέξτε αρχείο για αποθήκευση των αποτελεσμάτων".cdialog.showsave If.CDialog.FileName = "" Then Exit Sub Open.CDialog.FileName For Output As #1 Print #1, "Παράμετροι" Print #1, "" If zipfflag Then Print #1, "Κατανομή πιθανοτήτων προσπέλασης: Zipf" Print #1, "Παράμετρος Θ:", theta Else Print #1, "Κατανομή πιθανοτήτων προσπέλασης: Τυχαία κατανομή" Print #1, "Σύνολο σελίδων: ", numofpages Print #1, "Ελάχιστη συχνότητα δίσκων: ", fmin Print #1, "Παράμετρος Δ: ", delta If DiskFlag Then Print #1, "Εύρεση του βέλτιστου αριθμού δίσκων (αυτόματα)" Else Print #1, "Αριθμός δίσκων: ", CStr(NDisk) Print #1, "Μέθοδος υπολογισμού συχνοτήτων δίσκου: ", PropertiesForm.Option2(FreqMethod - 1).Caption Print #1, " " Print #1, "Πληροφορίες Παραγόμενων Σελίδων" Print #1, "Όνομα Σελίδας" + vbtab + "Πιθανότητα Προσπέλασης" + vbtab + "Κανονικοποιημένη Πιθ. Προσπελ." + vbtab + "Δίσκος" For i = 1 To.Grid.Rows - 1 Print #1, vbtab +.Grid.TextMatrix(i, 0) + vbtab + vbtab +.Grid.TextMatrix(i, 1) + vbtab + vbtab + vbtab +.Grid.TextMatrix(i, 2) + vbtab + vbtab + vbtab +.Grid.TextMatrix(i, 3) Print #1, " " Print #1, "Πληροφορίες Παραγόμενων δίσκων" If DiskFlag Then Print #1, "Βέλτιστος αριθμός δίσκων (αυτόματη εύρεση)", N Print #1, "Δίσκος" + vbtab + "Διάστημα πιθανοτήτων" + vbtab + "Συχνότητα" + vbtab + "Αριθμός Chunks" + vbtab + "Αριθμός Σελίδων" + vbtab + "Chunks" For i = 1 To.Grid2.Rows - 1 Print #1,.Grid2.TextMatrix(i, 0) + vbtab +.Grid2.TextMatrix(i, 1) + vbtab + vbtab +.Grid2.TextMatrix(i, 2) + vbtab + vbtab + vbtab +.Grid2.TextMatrix(i, 3) + vbtab + vbtab +.Grid2.TextMatrix(i, 4) + vbtab +.Grid2.TextMatrix(i, 5) Print #1, " " Print #1, "Προγράμμα εκπομπής" Print #1,.Label1.Caption Dim s As String s = "" For i = 0 To.grid3.Cols - 1 s = s +.grid3.textmatrix(1, i) + ", " Print #1, s If fpr1 Then Print #1,.Label4.Caption s = "" For i = 0 To.Grid5.Cols - 1 s = s +.Grid5.TextMatrix(1, i) + ", " Print #1, s If fpr2 Then -53-

Print #1,.Label3.Caption s = "" For i = 0 To.Grid4.Cols - 1 s = s +.Grid4.TextMatrix(1, i) + ", " Print #1, s Close #1 End With Public Sub SaveFromClientForm() 'Αποθήκευση του πίνακα της φόρμας clientstatsform Dim i As Long MainForm.CDialog.DialogTitle = "Επιλέξτε αρχείο για αποθήκευση των αποτελεσμάτων" MainForm.CDialog.ShowSave If MainForm.CDialog.FileName = "" Then Exit Sub Open MainForm.CDialog.FileName For Output As #1 Print #1, "Παράμετροι" If zipfflag Then Print #1, "Κατανομή πιθανοτήτων προσπέλασης: Zipf" Print #1, "Παράμετρος Θ:", theta Else Print #1, "Κατανομή πιθανοτήτων προσπέλασης: Τυχαία κατανομή" Print #1, "Σύνολο σελίδων: ", numofpages Print #1, "Ελάχιστη συχνότητα δίσκων: ", fmin Print #1, "Παράμετρος Δ: ", delta If DiskFlag Then Print #1, "Εύρεση του βέλτιστου αριθμού δίσκων (αυτόματα)" Else Print #1, "Αριθμός δίσκων: ", CStr(NDisk) Print #1, "Μέθοδος υπολογισμού συχνοτήτων δίσκου: ", PropertiesForm.Option2(FreqMethod - 1).Caption Print #1, " " Print #1, "Πληροφορίες Παραγώμενων Σελίδων" Print #1, "Όνομα Σελίδας" + vbtab + "Πιθανότητα Προσπέλασης" + vbtab + "Κανονικοποιημένη Πιθ. Προσπελ." + vbtab + "Noised Πιθανότητες" + vbtab + "Μέση Καθυστέρηση" For i = 1 To ClientStatsForm.Grid.Rows - 1 Print #1, vbtab + ClientStatsForm.Grid.TextMatrix(i, 0) + vbtab + vbtab + ClientStatsForm.Grid.TextMatrix(i, 1) + vbtab + vbtab + vbtab + ClientStatsForm.Grid.TextMatrix(i, 2) + vbtab + vbtab + vbtab + vbtab + ClientStatsForm.Grid.TextMatrix(i, 3) + vbtab + vbtab + vbtab + ClientStatsForm.Grid.TextMatrix(i, 4) Print #1, " " Print #1, ClientStatsForm.Label2.Caption Close #1 Public Sub SaveFromSimForm() 'Αποθήκευση των πινάκων της φόρμας TimeSimForm Dim i As Long MainForm.CDialog.DialogTitle = "Επιλέξτε αρχείο για αποθήκευση των αποτελεσμάτων" MainForm.CDialog.ShowSave If MainForm.CDialog.FileName = "" Then Exit Sub Open MainForm.CDialog.FileName For Output As #1 Print #1, "Παράμετροι" If zipfflag Then Print #1, "Κατανομή πιθανοτήτων προσπέλασης: Zipf" Print #1, "Παράμετρος Θ:", theta Else Print #1, "Κατανομή πιθανοτήτων προσπέλασης: Τυχαία κατανομή" Print #1, "Σύνολο σελίδων: ", numofpages Print #1, "Ελάχιστη συχνότητα δίσκων: ", fmin Print #1, "Παράμετρος Δ: ", delta If DiskFlag Then Print #1, "Εύρεση του βέλτιστου αριθμού δίσκων (αυτόματα)" Else Print #1, "Αριθμός δίσκων: ", CStr(NDisk) Print #1, "Μέθοδος υπολογισμού συχνοτήτων δίσκου: ", PropertiesForm.Option2(FreqMethod).Caption Print #1, " " Print #1, "Πληροφορίες προσομοίωσης ανά χρονική στιγμή" -54-

Print #1, "Χρ. Στιγμή" + vbtab + "Πρόγραμμα" + vbtab + "Αίτηση" + vbtab + "Δίσκος" + vbtab + "Χρόνος Απόκρισης" + vbtab + "Συνολικός Χρόνος Απόκρισης" For i = 1 To TimeSimForm.Grid.Rows - 1 Print #1, TimeSimForm.Grid.TextMatrix(i, 0) + vbtab + vbtab + TimeSimForm.Grid.TextMatrix(i, 1) + vbtab + vbtab + TimeSimForm.Grid.TextMatrix(i, 2) + vbtab + TimeSimForm.Grid.TextMatrix(i, 3) + vbtab + vbtab + TimeSimForm.Grid.TextMatrix(i, 4) + vbtab + vbtab + TimeSimForm.Grid.TextMatrix(i, 5) Print #1, " " Print #1, "Πληροφορίες εξυπηρέτησης αιτήσεων απο τους δίσκους" Print #1, "Δίσκος" + vbtab + "Σύνολο αιτήσεων" + vbtab + "Συνολικός χρόνος απόκρισης" + vbtab + "Μέσος χρόνος απόκρισης" For i = 1 To TimeSimForm.Grid2.Rows - 1 Print #1, TimeSimForm.Grid2.TextMatrix(i, 0) + vbtab + TimeSimForm.Grid2.TextMatrix(i, 1) + vbtab + vbtab + TimeSimForm.Grid2.TextMatrix(i, 2) + vbtab + vbtab + vbtab + TimeSimForm.Grid2.TextMatrix(i, 3) Close #1 4.16 Διαδικασία υπολογισμού μέσων καθυστερήσεων Public Sub ComputePB() 'Διαδικασία υπολογισμού μέσων καθυστερήσεων για κάθε σελίδα που υπάρχει Dim i As Long, j As Long, k As Long, c As Long 'για κάθε σελίδα που υπάρχει For j = 1 To numofpages 'αρχικοποιείται η μέση καθυστέρησή της PB(j) = 0 'εντοπίζεται η πρώτη φορά που εμφανίζεται στο πρόγραμμα από την αρχή του (δείκτης k) For i = 1 To PR If program(i) = j Then k = i Exit For 'μηδενίζεται ο μετρητής απόστασης c = 0 'διασχίζεται το πρόγραμμα από το σημείο k μέχρι το τέλος και αν υπάρχει η σελίδα μηδενίζεται ο μετρητής ενώ 'αν δεν υπάρχει προστίθεται η τρέχουσα απόσταση στη μέση καθυστέρησή της For i = k To PR If program(i) <> j Then c = c + 1 PB(j) = PB(j) + c Else c = 0 'διασχίζεται το πρόγραμμα από την αρχή του έως το σημείο k-1 και αν υπάρχει η σελίδα 'μηδενίζεται ο μετρητής ενώ αν δεν υπάρχει προστίθεται η τρέχουσα απόσταση στη μέση καθυστέρησή της For i = 1 To k - 1 If program(i) <> j Then c = c + 1 PB(j) = PB(j) + c Else c = 0 'υπολογίζουμε την μέση καθυστέρηση όταν διαιρέσουμε και με το μέγεθος του προγράμματος 'και προσθέσουμε το 1/2 που είναι η μέση καθυστέρηση όταν έχουμε σύνδεση εντός της 'μετάδοσης μίας σελίδας και όχι ακριβώς από την αρχή της PB(j) = PB(j) / PR PB(j) = PB(j) + 1 / 2 Next j -55-

4.17 Διαδικασία υπολογισμού καθυστέρησης Public Sub ComputeDelay() 'υπολογισμός της συνολικής καθυστέρησης που είναι και το μέτρο της απόδοσης του συστήματος Dim d As Double, j As Long, k As Long, l As Long, h As Long, cn As Long 'εάν δεν υπάρχει θόρυβος τότε If e = 0 Then 'αρχικοποίηση του αθροίσματος d = 0 'για κάθε σελίδα που υπάρχει υπολογίζεται το άθροισμα των γινομένων των μέσων καθυστερήσεών 'της με τις αντίστοιχες πιθανότητες προσπέλασής της For j = 1 To numofpages d = d + PB(j) * NormalizedAPArray(j) Next j Else 'εάν όμως υπάρχει θόρυβος τότε 'αρχικοποιούνται οι νέες πιθανότητες προσπέλασης στις κανονικές τους τιμές For j = 1 To numofpages pe(j) = NormalizedAPArray(j) Next j 'για κάθε σελίδα που υπάρχει For h = 1 To numofpages 'γίνεται εκλογή ενός τυχαίου αριθμού στο [0,1] 'και εάν πέσει στο [0,e/100] (δηλαδή έχουμε πιθανότητα εκλογής e%) If Rnd <= e / 100 Then 'τότε η σελίδα αυτή επιλέγεται για να αλλοιωθεί η πιθανότητα προσπέλασής της k = h 'εάν έχουμε 2 ή περισσότερους δίσκους If N > 1 Then 'επιλέγεται και μία άλλη (l) έτσι ώστε να μην ανήκει στον ίδιο δίσκο διότι εάν επιλεχθεί από 'τον ίδιο δίσκο η συνολική απόδοση του δίσκου δεν πρόκειται να αλλοιωθεί. cn = 0 'θα γίνουν numofpages προσπάθειες Do l = Int(Rnd * numofpages + 1) cn = cn + 1 Loop Until PB(l) <> PB(k) Or cn > numofpages If cn > numofpages Then 'αν δεν πέτυχαν οι προσπάθειες τότε επιλέγεται απλά μία άλλη σελίδα Do l = Int(Rnd * numofpages + 1) Loop Until l <> k Else 'εάν όμως έχουμε 1 μόνο δίσκο τότε επιλέγεται μία άλλη (l) τυχαία εκτός της k Do l = Int(Rnd * numofpages + 1) Loop Until l <> k 'αλλοιώνεται αφαιρετικά η αντίστοιχη πιθανότητα προσπέλασης της k κατά το 'ανάλογο ποσοστό θορύβου της k pe(k) = pe(k) - pe(k) * e / 100 'αλλοιώνεται προσθετικά η αντίστοιχη πιθανότητα προσπέλασης της l κατά το ανάλογο ποσοστό 'θορύβου της k οπότε είναι σαν να έδωσε η k στην l το e/100 της προσπέλασής της pe(l) = pe(l) + pe(k) * e / 100 Next h 'αρχικοποίηση του αθροίσματος d = 0 'για κάθε σελίδα που υπάρχει υπολογίζεται το άθροισμα των γινομένων των μέσων καθυστερήσεών της 'με τις αντίστοιχες νέες πιθανότητες προσπέλασής της For j = 1 To numofpages d = d + PB(j) * pe(j) Next j 'αποτυπώνεται το αποτέλεσμα -56-

delay = d 4.18 Συνάρτηση εύρεσης του δίσκου όπου βρίσκεται μια σελίδα Public Function FindDiskOfPage(pageID As Long) As Long 'Συνάρτηση εύρεσης του δίσκου που βρίσκεται μία σελίδα Dim s As String Dim i As Long Dim p As Long s = "P" + CStr(pageID) For i = 1 To numofpages If NameOfPagesArray(i) = s Then p = i Exit For s = BelongsToDiskArray(p) FindDiskOfPage = Val(Mid(s, 2, Len(s) - 1)) End Function -57-

4.19 Αλγόριθμος προσομοίωσης πραγματικού χρόνου Το πρόγραμμα ξεκινά τη μετάδοσή του κυκλικά για (bdtimes) φορές. Αυξηση του timeunit Ελέγχουμε αν γίνεται παραγωγή νέας αίτησης από τον client ΝΑΙ ThinkTime / TimeUnit ΟΧΙ Εκλέγεται σελίδα (J) ανάλογα με την πιθανότητα της κατανομής της (Zipf ή τυχαία) Εάν υπάρχει θόρυβος (e>0) τότε ΝΑΙ Με πιθανότητα e% εκλέγεται μία άλλη σελίδα από άλλο δίσκο (αν είναι εφικτό) αντί της (J) ΟΧΙ Καταγράφεται η νέα αίτηση σε λίστα εξυπηρέτησης (requests) και γίνονται στατιστικές μετρήσεις Μεταδίδεται η τρέχουσα σελίδα του προγράμματος (pageno) Ελέγχουμε αν την στιγμή αυτή μεταδίδεται κάποια σελίδα που αιτήθηκε διασχίζοντας την λίστα εξυπηρέτησης (requests) ΝΑΙ Εξυπηρετείται ο client και ακυρώνεται η αίτηση από τη λίστα ΟΧΙ Αυξάνεται ο χρόνος απόκρισης του δίσκου που έχει την σελίδα Καταγράφονται στατιστικές μετρήσεις και γίνεται επανάληψη μετάδοσης μέχρι να ολοκληρωθεί η διαδικασία Υπολογισμός τελικών στατιστικών (μέσοι χρόνοι κλπ.) Σχήμα 52-58-