Σε αφαιρετικό επίπεδο, ένα Σύστημα Αρχείων είναι η οργάνωση του αποθηκευτικού χώρου

Σχετικά έγγραφα
έγγραφο σε κάθε διάσταση αντιστοιχούν στο πλήθος εμφανίσεων της λέξης (που αντιστοιχεί στη συγκεκριμένη διάσταση) εντός του εγγράφου.

ΣΤΟ ΦΑΡΜΑΚΕΙΟ. Με την πιστοποίηση του έχει πρόσβαση στο περιβάλλον του φαρμακείου που παρέχει η εφαρμογή.

Αποδεικτικές Διαδικασίες και Μαθηματική Επαγωγή.

Pointers. Σημερινό Μάθημα! Χρήση pointer Τελεστής * Τελεστής & Γενικοί δείκτες Ανάκληση Δέσμευση μνήμης new / delete Pointer σε αντικείμενο 2

Δ Ι Α Κ Ρ Ι Τ Α Μ Α Θ Η Μ Α Τ Ι Κ Α. 1η σειρά ασκήσεων

Ας υποθέσουμε ότι ο παίκτης Ι διαλέγει πρώτος την τυχαιοποιημένη στρατηγική (x 1, x 2 ), x 1, x2 0,

Οι γέφυρες του ποταμού... Pregel (Konigsberg)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

ΣΤΟ ΙΑΤΡΕΙΟ. Με την πιστοποίηση του αποκτά πρόσβαση στο περιβάλλον του ιατρού που παρέχει η εφαρμογή.

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Πρώτη Γραπτή Εργασία. Εισαγωγή στους υπολογιστές Μαθηματικά

Αναγνώριση Προτύπων. Σημερινό Μάθημα

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

{ i f i == 0 and p > 0

ΤΑΞΙΝΟΜΗΣΗ ΟΡΓΑΝΙΣΜΩΝ

Συναρτήσεις & Κλάσεις

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

ΠΑΝΕΠΙΣΤΗΜΙΑΚΑ ΦΡΟΝΤΙΣΤΗΡΙΑ ΚΟΛΛΙΝΤΖΑ ΜΑΘΗΜΑ: ΟΙΚΟΝΟΜΙΚΗ ΘΕΩΡΙΑ

Συναρτήσεις. Σημερινό μάθημα

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗ

τεσσάρων βάσεων δεδομένων που θα αντιστοιχούν στους συνδρομητές

21/11/2005 Διακριτά Μαθηματικά. Γραφήματα ΒΑΣΙΚΗ ΟΡΟΛΟΓΙΑ : ΜΟΝΟΠΑΤΙΑ ΚΑΙ ΚΥΚΛΟΙ Δ Ι. Γεώργιος Βούρος Πανεπιστήμιο Αιγαίου

Ταξινόμηση των μοντέλων διασποράς ατμοσφαιρικών ρύπων βασισμένη σε μαθηματικά κριτήρια.

ΣΥΝΟΛΑ (προσέξτε τα κοινά χαρακτηριστικά των παρακάτω προτάσεων) Οι άνθρωποι που σπουδάζουν ΤΠ&ΕΣ και βρίσκονται στην αίθουσα

HY 280. θεμελιακές έννοιες της επιστήμης του υπολογισμού ΑΣΚΗΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ. Γεώργιος Φρ.

Αναγνώριση Προτύπων. Σημερινό Μάθημα

ΔΙΚΑΙΩΜΑΤΑ ΠΡΟΣΟΡΜΙΣΗΣ, ΠΑΡΑΒΟΛΗΣ, ΠΡΥΜΝΟΔΕΤΗΣΗΣ ΚΑΙ ΕΛΛΙΜΕΝΙΣΜΟΥ ΣΚΑΦΩΝ ΣΕ ΘΑΛΑΣΣΙΕΣ ΠΕΡΙΟΧΕΣ. (ΛΙΜΑΝΙΑ κ.λπ.) ΤΟΠΙΚΗΣ ΑΡΜΟΔΙΟΤΗΤΑΣ ΛΙΜΕΝΙΚΩΝ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Μούλου Ευγενία

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Τρίτη Γραπτή Εργασία στη Στατιστική

Εισαγωγικά. 1.1 Η σ-αλγεβρα ως πληροφορία

ΜΙΚΡΟΟΙΚΟΝΟΜΙΚΗ Η ΚΑΤΑΝΑΛΩΤΙΚΗ ΑΠΟΦΑΣΗ. Άσκηση με θέμα τη μεγιστοποίηση της χρησιμότητας του καταναλωτή

ΠΑΝΕΠΙΣΤΗΜΙΑΚΑ ΦΡΟΝΤΙΣΤΗΡΙΑ ΚΟΛΛΙΝΤΖΑ ΜΑΘΗΜΑ: ΕΡΩΤΗΣΕΙΣ ΟΙΚΟΝΟΜΙΚΗΣ ΘΕΩΡΙΑΣ

Σχέσεις και ιδιότητές τους

Το κράτος είναι φτιαγμένο για τον άνθρωπο και όχι ο άνθρωπος για το κράτος. A. Einstein Πηγή:

Ψηφιακή Εικόνα. Σημερινό μάθημα!

Επίλυση δικτύων διανομής

Αλγόριθμοι & Βελτιστοποίηση

Η ανισότητα α β α±β α + β με α, β C και η χρήση της στην εύρεση ακροτάτων.

2. Κατάθεσε κάποιος στην Εθνική Τράπεζα 4800 με επιτόκιο 3%. Μετά από πόσο χρόνο θα πάρει τόκο 60 ; α) 90 ημέρες β) 1,5 έτη γ) 5 μήνες δ) 24 μήνες

Εφαρμογές στην κίνηση Brown

Μονάδες α. Να γράψετε στο τετράδιό σας τον παρακάτω πίνακα σωστά συµπληρωµένο.

Κληρονομικότητα. Σήμερα! Κλάση Βάσης Παράγωγη κλάση Απλή κληρονομικότητα Protected δεδομένα Constructors & Destructors overloading

«ΔΙΑΚΡΙΤΑ ΜΑΘΗΜΑΤΙΚΑ»

5.1 Μετρήσιμες συναρτήσεις

1. Εστω ότι A, B, C είναι γενικοί 2 2 πίνακες, δηλαδή, a 21 a, και ανάλογα για τους B, C. Υπολογίστε τους πίνακες (A B) C και A (B C) και

ΜΑΘΗΜΑ: ΟΙΚΟΝΟΜΙΚΗ ΘΕΩΡΙΑ

Αναγνώριση Προτύπων. Σήμερα! Λόγος Πιθανοφάνειας Πιθανότητα Λάθους Κόστος Ρίσκο Bayes Ελάχιστη πιθανότητα λάθους για πολλές κλάσεις

CSE.UOI : Μεταπτυχιακό Μάθημα

Προγραμματιστική Εργασία

Αναγνώριση Προτύπων. Σημερινό Μάθημα

Γενικό Λύκειο Μαραθοκάμπου Σάμου. Άλγεβρα Β λυκείου. 13 Οκτώβρη 2016

ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ ΤΕΤΑΡΤΗ 14 ΙΟΥΝΙΟΥ 2000 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ ΓΕΝΙΚΗΣ ΠΑΙΔΕΙΑΣ: ΦΥΣΙΚΗ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Ευρωπαϊκά παράγωγα Ευρωπαϊκά δικαιώματα

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Β ΤΑΞΗ. ΘΕΜΑ 1ο

Αναλυτικές ιδιότητες

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

Τρίτη, 05 Ιουνίου 2001 ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ Γ ΛΥΚΕΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΡΧΕΣ ΟΙΚΟΝΟΜΙΚΗΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑ ΕΠΙΛΟΓΗΣ Γ ΛΥΚΕΙΟΥ

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Ανασκόπηση ϑεμάτων παλαιών εξετάσεων του μαθήματος. Περιεχόμενο εξετάσεων

Επίλυση ειδικών μορφών ΣΔΕ

Ανεξαρτησία Ανεξαρτησία για οικογένειες συνόλων και τυχαίες μεταβλητές

Μεταγλωττιστές ΙΙ. Καταμερισμός καταχωρητών. Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

Ανεξαρτησία Ανεξαρτησία για οικογένειες συνόλων και τυχαίες μεταβλητές

Εξαναγκασμένες ταλαντώσεις, Ιδιοτιμές με πολλαπλότητα, Εκθετικά πινάκων. 9 Απριλίου 2013, Βόλος

ΑΣΕΠ 2000 ΑΣΕΠ 2000 Εμπορική Τράπεζα 1983 Υπουργείο Κοιν. Υπηρ. 1983

1. Η συγκεκριμένη εφαρμογή της λειτουργίας για τη λήψη φορολογικής ενημερότητας βρίσκεται στην αρχική σελίδα της ιστοσελίδας της Γ.Γ.Π.Σ.

Ανεξαρτησία Ανεξαρτησία για οικογένειες συνόλων και τυχαίες μεταβλητές

Εστω X σύνολο και A μια σ-άλγεβρα στο X. Ονομάζουμε το ζεύγος (X, A) μετρήσιμο χώρο.

Martingales. 3.1 Ορισμός και παραδείγματα

ΘΕΜΑ: Aποτελεσματικότητα της νομισματικής και δημοσιονομικής πολιτικής σε μια ανοικτή οικονομία

Συγκέντρωση Κίνησης Εισαγωγή Στατική Συγκέντρωση Κίνησης

Προγραμματιστική Εργασία

Προτεινόμενα θέματα στο μάθημα. Αρχές Οικονομικής Θεωρίας ΟΜΑΔΑ Α. Στις προτάσεις από Α.1. μέχρι και Α10 να γράψετε στο τετράδιό σας τον αριθμό της

Αρχάνες, 10/12/2012 Αρ. Πρωτ: 561

Ο Ισχυρός Νόμος των Μεγάλων Αριθμών

Classes. Σημερινό Μάθημα. Constructor και destructor Συναρτήσεις μέλη const Inline συναρτήσεις Δηλώσεις κλάσεων Σύνθετες κλάσεις

Έννοια. Η αποδοχή της κληρονομίας αποτελεί δικαίωμα του κληρονόμου, άρα δεν

Εκφωνήσεις και Λύσεις των Θεμάτων

Κεφάλαιο 2.4: Τα βασικά στοιχεία ενός Επιχειρηματικού Σχεδίου (Business Plan) Μέσα από αυτό το κεφάλαιο φαίνεται ότι αφενός η σωστή δημιουργία και

(20 ο ) ΣΤΑΔΙΑΚΕΣ ΚΑΤΑΣΚΕΥΕΣ Ι: ΑΠΛΗΣΤΟΙ ΑΛΓΟΡΙΘΜΟΙ

ΑΝΑΛΥΣΗ ΔΙΑΚΥΜΑΝΣΗΣ. Επικ. Καθ. Στέλιος Ζήμερας. Τμήμα Μαθηματικών Κατεύθυνση Στατιστικής και Αναλογιστικά Χρηματοοικονομικά Μαθηματικά

Δήμος Σωτήριος Υ.Δ. Εργαστήριο Λογικής & Επιστήμης Υπολογιστών. Τομέας Τεχνολογίας Πληροφορικής & Υπολογιστών Σ.Η.Μ.Μ.Υ. Ε.Μ.Π.

Projects για το εργαστήριο. των Βάσεων Δεδομένων

14 Φεβρουαρίου 2014, Βόλος

τους στην Κρυπτογραφία και τα

Μητροπολιτικά Οπτικά Δίκτυα Εισαγωγή

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Διάλεξθ 2

Παραβολή ψ=αχ 2 +βχ+γ, α 0. Η παραβολή ψ = αχ 2. Γενικά : Κάθε συνάρτηση της μορφής ψ=αχ 2 + βχ +γ, α 0 λέγεται τετραγωνική συνάρτηση.

ιάσταση του Krull Α.Π.Θ. Θεσσαλονίκη Χ. Χαραλαμπους (ΑΠΘ) ιάσταση του Krull Ιανουάριος, / 27

( ιμερείς) ΙΜΕΛΕΙΣ ΣΧΕΣΕΙΣ Α Β «απεικονίσεις»

Περιεχόμενο: Στρατηγικές ελέγχου


Αντικειμενοστραφής. Προγραμματισμού

ΕΚΘΕΣΕΙΣ ΑΠΟΛΟΓΙΣΜΟΥ

ΨΗΦΙΑΚΑ ΗΛΕΚΤΡΟΝΙΚΑ Σχεδίαση Λογικών Κυκλωμάτων

ΜΑΘΗΜΑ: ΓΕΝΙΚΟ ΔΙΟΙΚΗΤΙΚΟ ΔΙΚΑΙΟ ΔΙΚΑΣΤΩΝ

Φόρμα Σχεδιασμού Διάλεξης (ημ/α: 17/03/08, έκδοση: 1.0)

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΤΑΞΗ

Κληρονομικότητα. Σήμερα!

Εκφωνήσεις και Λύσεις των Θεμάτων

Transcript:

Π Π Σ Τ Π Ε Τ Ψ Σ Δομές Δεδομένων 2016-2017 1η Εργασία Χρήστος Δουλκερίδης Ορέστης Τελέλης 1 Περιγραφή Στην εργασία καλείστε να υλοποιήσετε απλές προσομοιώσεις των βασικών λειτουργιών ενός Συστήματος Αρχείων (File System), όπως υλοποιούνται στα πλαίσια ενός Λειτουργικού Συστήματος. Σε αφαιρετικό επίπεδο, ένα Σύστημα Αρχείων είναι η οργάνωση του αποθηκευτικού χώρου ενός φυσικού δίσκου σε μία δομή δεδομένων. Η δομή αυτή εξυπηρετεί πάμπολλες λειτουργίες, μερικές από τις οποίες είναι: write: read: delete: append: Εγγραφή νέου αρχείου Ανάγνωση υπάρχοντος αρχείου Διαγραφή υπάρχοντος αρχείου Επισύναψη περιεχομένου στο τέλος υπάρχοντος αρχείου Στο πλαίσιο της εργασίας φανταζόμαστε τον φυσικό δίσκο σαν έναν πίνακα (array). Κάθε κελί του πίνακα αντιστοιχεί σε ένα block του δίσκου, δηλαδή τμήμα του αποθηκευτικού χώρου που μπορεί να διαβαστεί από την κεφαλή ανάγνωσης «μονομιάς». Ενα αρχείο μπορεί να καταλαμβάνει πολλά blocks, ανάλογα με το μέγεθος του block και το μέγεθος του αρχείου. 1 Τα blocks του δίσκου που καταλαμβάνει ένα αρχείο μπορεί να μην είναι συνεχόμενα στο δίσκο στην αναπαράσταση του δίσκου με πίνακα συνεχόμενων κελιών, ένα αρχείο μπορεί να καταλαμβάνει μη συνεχόμενα κελιά. Αυτό συμβαίνει διότι, καθώς εκτελούνται από τον χρήστη οι λειτουργίες write, delete, append, προκύπτουν «ενδιάμεσα» ελεύθερα blocks. Τα blocks που καταλαμβάνει ένα αρχείο συνδέονται σε μία Απλά Συνδεδεμένη Λίστα. Κάθε block του αρχείου, εκτός από τα δεδομένα του αρχείου, περιλαμβάνει και μία αναφορά στο επόμενο block του ίδιου αρχείου. Στο τελευταίο block του αρχείου ο δείκτης αυτός είναι «null». Σε έναν ειδικό πίνακα που εγγράφεται στην αρχή του δίσκου και ονομάζεται File Allocation Table (FAT), καταχωρείται για κάθε αρχείο μία αναφορά στον πρώτο block-κόμβο της λίστας από blocks του. Η μορφοποίηση (format) κενού δίσκου αρχικοποιεί το FAT. Επίσης, συνδέει όλα τα (αρχικά ελεύθερα) blocks του δίσκου σε συνδεδεμένη λίστα, για την οποία αποθηκεύεται μία αναφορά στο πρώτο ελεύθερο block (Σχ. 1). Η λειτουργία του Συστήματος Αρχείων συνίσταται στη διαχείριση του FAT, των λιστών αρχείων, και της λίστας ελεύθερων blocks. ΠΑΡΑΔΟΧΕΣ. Το FAT κρατείται χωριστά, και όχι επάνω στον πίνακα που μοντελοποιεί τον δίσκο (Σχ. 1(β ) ). Το περιεχόμενο αρχείων αναπαρίσταται με πίνακα χαρακτήρων (char[]). Ενα block δίσκου μπορεί να αποθηκεύσει μόνο έναν χαρακτήρα και μία αναφορά προς το επόμενο block του ίδιου αρχείου. Μαζί με το FAT, διατίθεται μία αναφορά προς το πρώτο ελεύθερο block (firstfreeblock) και ένας ακέραιος (nbfreeblocks) που μετρά το πλήθος των ελεύθερων blocks. 1 Σε ένα block μπορεί να αποθηκεύονται και περισσότερα από ένα αρχεία, αλλά για την εργασία ϑεωρούμε πάντα αρχεία με μέγεθος που ισούται με ακέραιο πλήθος blocks. 1

(αʹ) Μη μορφοποιημένος κενός δίσκος. (βʹ) Μορφοποιημένος κενός δίσκος. Σχήμα 1: Αναπαράσταση δίσκου σαν πίνακα από συνεχόμενα blocks. Εγγραφή νέου Αρχείου (write) με περιεχόμενο [ F, o, o ] (Σχ. 1 (β ) Σχ. 2 (α ) ). 1. Ξεκινώντας από το πρώτο ελεύθερο block, εγγράφουμε τα δεδομένα. 2. Στο τελευταίο block που εγγράψαμε δεδομένα, ϑέτουμε null την αναφορά στο επόμενο. 3. Στην 1η ελεύθερη ϑέση του FAT, εγγράφουμε αναφορά στο 1ο block όπου γράψαμε δεδομένα. 4. Ενημερώνουμε την αναφορά firstfreeblock να δείχνει στο block που ήταν επόμενο του τελευταίου στο οποίο εγγράψαμε δεδομένα. Με παρόμοιο τρόπο στη συνέχεια εγγράφουμε αρχείο με περιεχόμενο [ H, i ] (Σχ. 2 (β ) ). (αʹ) Εγγραφή του αρχείου [ F, o, o ] σε κενό δίσκο. (βʹ) Εγγραφή αρχείου [ H, i ], στη συνέχεια. (γʹ) Επισύναψη [ *, * ] στο τέλος του [ F, o, o ]. (δʹ) Διαγραφή του αρχείου [ H, i ]. Σχήμα 2: Παράδειγμα δύο συνεχόμενων εγγραφών αρχείων σε αρχικά κενό δίσκο. Επισύναψη Περιεχομένου (append) [ *, * ] στο τέλος του [ F, o, o ] (Σχ. 2(β ) Σχ. 2 (γ ) ). Ακολουθούνται τα παραπάνω βήματα 1,2,4. Το βήμα 3 διαφέρει ως εξής: στο τελευταίο block του [ F, o, o ] ϑέτουμε την αναφορά στο επόμενο ίση με το πρώτο block όπου εγγράψαμε δεδομένα. Διαγραφή Αρχείου (delete) με περιεχόμενο [ H, i ] (Σχ. 2(γ ) Σχ. 2(δ ) ). Επανασυνδέουμε τα blocks που καταλάμβανε το αρχείο, στο τέλος της λίστας ελεύθερων blocks. Προϋποτίθεται η εύρεση (και ενημέρωση του επόμενου) του τελευταίου block στη λίστα ελεύθερων blocks με διάσχισή της. Επιπλέον, η καταχώρηση του διαγραφόμενου αρχείου στο FAT «ακυρώνεται». Παρατηρήστε ότι δε «διαγράφουμε πραγματικά» τα περιεχόμενα των blocks. «Θρυμματισμός» (Fragmentation) αρχείου συμβαίνει όταν αυτό δεν καταλαμβάνει συνεχόμενα blocks του δίσκου. Π.χ., στα Σχ. 2(γ,δ ) το αρχείο [ F, o, o, *, * ] είναι (μερικώς) ϑρυμματισμένο. Ο ϑρυμματισμός προκαλεί καθυστερήσεις στη διάσχιση της λίστας του αρχείου: αυξάνει τον μέσο χρόνο μετάβασης της κεφαλής του δίσκου, από ένα block στο επόμενό του. Για την εργασία, ορίζουμε το ποσοστό ϑρυμματισμού ενός αρχείου ως το ποσοστό «μη γειτονικών» μεταβάσεων. Το αρχείο [ F, o, o, *, * ] είναι ϑρυμματισμένο κατά 25%, διότι μία από τις τέσσερεις μεταβάσεις που απαιτεί η διάσχισή του είναι «μη γειτονική»: οι υπόλοιπες είναι γειτονικές. 2

2 Ζητούμενα Εργασίας 2.1 Υλοποίηση Θα επαυξήσετε δεδομένο κώδικα (που τεκμηριώνεται στο Παράρτημα), υλοποιώντας τις α- κόλουθες μεθόδους της κλάσης FileSystem: public int write(char[] file) Εγγράφει το περιεχόμενο file σε νέο αρχείο. Αν επιτύχει, επιστρέφει το «αναγνωριστικό» του αρχείου στο FAT (δηλαδή το index στο FAT, της αναφοράς στο πρώτο block του αρχείου). Αν αποτύχει, επιστρέφει 1. Λόγοι αποτυχίας: (i) αρχείο μηδενικού μήκους ή μεγαλύτερου μήκους από το πλήθος ελεύθερων blocks, (ii) αναφορά null σε περιεχόμενο, (iii) μη προσαρτημένος δίσκος στο σύστημα (δείτε Παράρτημα για προσάρτηση δίσκου). public char[] read(int fileid) Επιχειρεί την ανάγνωση ενός αρχείου με το δεδομένο αναγνωριστικό fileid, και την αποθήκευση των περιεχομένων του σε ένα πίνακα χαρακτήρων τον οποίο επιστρέφει. Επιστρέφει null αν αποτύχει. Λόγοι αποτυχίας: (i) μη προσαρτημένος δίσκος στο σύστημα αρχείων, (ii) μη έγκυρο fileid (δείτε Παράρτημα για έλεγχο με τη μέθοδο isfile). public boolean delete(int fileid) Επιχειρεί διαγραφή του αρχείου με αναγνωριστικό fileid. Επιστρέφει true για επιτυχία, false για αποτυχία. Λόγοι αποτυχίας: (i) μη προσαρτημένος δίσκος στο σύστημα αρχείων, (ii) το fileid δεν αντιστοιχεί σε έγκυρη εγγραφή αρχείου στο FAT. public boolean append(int fileid, char[] file) Επιχειρεί επισύναψη του περιεχομένου file στο τέλος του αρχείου με το δεδομένο αναγνωριστικό fileid. Επιστρέφει: true για επιτυχία, false για αποτυχία. Λόγοι αποτυχίας: (i) περιεχόμενο μηδενικού μήκους ή μεγαλύτερου μήκους από το πλήθος ελεύθερων blocks, (ii) αναφορά null σε περιεχόμενο, (iii) μη προσαρτημένος δίσκος στο σύστημα αρχείων, (iv) μη έγκυρο fileid. double getfragmentation(int fileid) Μετρά και επιστρέφει το ποσοστό ϑρυμματισμού του αρχε- ίου με αναγνωριστικό fileid. Επιστρέφει 0 αν το fileid δεν είναι έγκυρο. Παρατηρήσεις: οι υλοποιήσεις σας ϑα διαχειρίζονται ορθά τα public πεδία firstfreeblock και nbfreeblocks της κλάσης FileAllocationTable (τεκμηρίωση στο Παράρτημα). Δεν επιτρέπονται: προσθήκες πεδίων ή public μεθόδων στην κλάση FileSystem. 2.2 Τεχνική Αναφορά Θα καταγράψετε σε ψευδοκώδικα την υλοποίηση των μεθόδων σας και ϑα επεξηγήσετε τη λειτουργία τους. Συγκεκριμένα, η αναφορά ϑα περιλαμβάνει: 1. Εξώφυλλο, με Ονοματεπώνυμο, Αριθμό Μητρώου, Τίτλο Μαθήματος, Τίτλο Εργασίας. 2. Για καθεμία από τις μεθόδους, μία ενότητα με τίτλο, που ϑα περιέχει: τον ψευδοκώδικα (και για οποιαδήποτε «βοηθητική» private μέθοδο γράψατε), επεξηγήσεις στον ψευδοκώδικα και στη λειτουργία της υλοποίησής σας, 3. δύο διαγράμματα με σχόλια, που ϑα προκύψουν από πειράματα (δείτε ακολούθως). ΠΕΙΡΑΜΑΤΑ: Θα εκτελέσετε τη (δεδομένη) public μέθοδο testfragmentation της κλάσης FileSystem. Η μέθοδος αρχικά γεμίζει τον δίσκο με αρχεία μεγέθους 1. Κατόπιν, εκτελεί log 2 (μέγεθος δίσκου) 1 επαναλήψεις, όπου σε καθεμία: (1) επιλέγει τυχαία και διαγράφει τα μισά αρχεία, (2) εγγράφει όσα νέα αρχεία χωράνε, με διπλάσιο μέγεθος. Στο τέλος κάθε επανάληψης εκτυπώνει τον αριθμό της επανάληψης και το μέσο ποσοστό ϑρυμματισμού όλων των αρχείων στο δίσκο. Η ορθή εκτέλεση της μεθόδου testfragmentation προϋποθέτει ορθές υλοποιήσεις των με- ϑόδων write, delete, getfragmentation. Ζητείται εκτέλεσή της: δύο (2) φορές για καθένα από δύο (2) διαφορετικά μεγέθη δίσκου, των 1024 και 32768 blocks (συνολικά τέσσερεις (4) εκτελέσεις). Θα απεικονίσετε τα αποτελέσματα σε δύο διαγράμματα, ένα για κάθε μέγεθος δίσκου. Κάθε διάγραμμα ϑα απεικονίζει ταυτόχρονα τις δύο εκτελέσεις της testfragmentation για το συγκεκριμένο μέγεθος δίσκου. Στον άξονα x ϑα απεικονίζεται ο αριθμός της επανάληψης και στον άξονα y ϑα απεικονίζεται το μέσο ποσοστό ϑρυμματισμού. Να σχολιάσετε τα διαγράμματα. 3

3 Διαδικαστικά Θέματα ΠΑΡΑΔΟΤΕΑ Θα πρέπει να παραδώσετε ένα αρχείο ΑΜ_Επώνυμο_ Ονομα.zip (όπου ΑΜ ο αριθμός μητρώου) που ϑα περιλαμβάνει δύο (2) αρχεία μόνο: 1. Το αρχείο πηγαίου κώδικα FileSystem.java, επαρκώς σχολιασμένο. Προσοχή: σχόλια στα ελληνικά, μόνο σε κωδικοποίηση UTF-8. Άλλες κωδικοποιήσεις (ISO-8859-7, Windows-1253) απορρίπτονται από τον Java Compiler. Eclipse/Netbeans: δεξί click στο Project, επιλογή Properties και στην ιδιότητα «Encoding» επιλέγετε UTF-8. 2. Την τεχνική αναφορά σας σε μορφή pdf. ΘΑ ΑΓΝΟΗΘΕΙ κάθε άλλη μορφή εγγράφου. ΠΑΡΑΔΟΣΗ αποκλειστικά μέσω της πλατφόρμας «ΕΥΔΟΞΟΣ» του τμήματος, έως και την 9/12/2016, 23:59. Ανεβάστε το ΑΜ_Επώνυμο_ Ονομα.zip στην περιοχή «Εργασίες». ΕΡΩΤΗΣΕΙΣ/ΑΠΟΡΙΕΣ/ΔΙΕΥΚΡΙΝΙΣΕΙΣ αποκλειστικά μέσα από την Περιοχή Συζήτησης «ΕΡ- ΓΑΣΙΑ 1» της πλατφόρμας «ΕΥΔΟΞΟΣ». Δε ϑα απαντηθούν Email με απορίες. ΔΕ ΘΑ ΑΞΙΟΛΟΓΗΘΟΥΝ: Εργασίες που ϑα παραδοθούν εκπρόθεσμα ή με άλλο τρόπο (email, CD κ.λ.π.) Εργασίες που παραδίδονται σε μορφή συμπίεσης διαφορετική από.zip. Εργασίες που περιλαμβάνουν μέσα άσχετα αρχεία. ΒΑΘΜΟΛΟΓΗΣΗ Η εργασία μετρά 20% στον τελικό βαθμό (εφόσον το γραπτό σας βαθμολογηθεί με τουλάχιστον 4). Φτωχή / Δυσανάγνωστη τεκμηρίωση ή έλλειψη αυτής στην αναφορά για κάποια λειτουργία, επιφέρει άμεση απώλεια 50% του μέγιστου δυνατού βαθμού για τη λειτουργία αυτή. Η τεχνική αναφορά ή τμήματα αυτής δε ϑα ληφθούν υπόψην στη βαθμολόγηση αν δε συνοδεύονται από κώδικα που μεταγλωττίζεται και εκτελείται. Η εργασία είναι αυστηρά ατομική. Αντιγραφή στον κώδικα και/ή στην τεχνική αναφορά επιφέρει άμεσο μηδενισμό της εργασίας. Οι εργασίες ϑα ελεγχθούν (όλες ανά ζεύγη). 4 Παράρτημα: Τεκμηρίωση Δεδομένου Κώδικα Συζητούνται μόνο public πεδία και μέθοδοι των κλάσεων που ϑα χρειαστείτε. Ολες οι δεδομένες κλάσεις και μέθοδοι δίνονται υλοποιημένες στη βιβλιοθήκη fs.jar. Κλάσεις Block και Disk Αναπαριστούν αντίστοιχα block δίσκου και δίσκο (που περιέχει πίνακα αντικειμένων τύπου Block). Δε μπορείτε να κατασκευάσετε αντικείμενο τύπου Block, ούτε μπορείτε να προσβαίνετε άμεσα στον πίνακα αντικειμένων τύπου Block που συνιστούν τον δίσκο. Μπορείτε να κατασκευάσετε καινούριο και μορφοποιημένο (formatted) δίσκο, δίνοντας το πλήθος των blocks που επιθυμείτε να έχει (χωρητικότητα): Disk mydisk = new Disk(1000); Αν διαθέτετε αναφορά σε ένα Block δίσκου, μπορείτε να διαβάσετε και να εγγράψετε τα πεδία data, next. Επίσης, μπορείτε να διαβάσετε τη ϑέση του block στον δίσκο, μέσω της μεθόδου getblockpos(): είναι χρήσιμη για την εκτίμηση του ποσοστού ϑρυμματισμού των αρχείων. class Block { // Storage space for file data public char data; // Reference to next block of file public Block next; // Returns block s position public int getblockpos(); class Disk { // Constructor of new disk (no FAT) public Disk( int disksize); // Returns disk size, num of Blocks public int size(); // Returns reference to FAT. public FileAllocationTable FAT(); Δεδομένης αναφοράς σε αντικείμενο τύπου Disk, μπορείτε να διαβάσετε το μέγεθός του (σε πλήθος blocks), μέσω της μεθόδου size() και να προσβαίνετε στο FAT, μέσω της μεθόδου FAT(). 4

Κλάση FileAllocationTable Ορίζει τον τύπο που επιστρέφει η μέθοδος FAT() της κλάσης Disk. Είναι βασική δομή που οι υλοποιήσεις σας ϑα πρέπει να διαχειρίζονται και να χρησιμοποιούν. Παρέχει τις public μεθόδους: public Block getfilefirst(int fileid) Δεδομένου του fileid, επιστρέφει αναφορά στο πρώτο Block του δίσκου για το συγκεκριμένο αρχείο. Αν το fileid δεν είναι έγκυρο (π.χ. < 0 ή από το πλήθος αρχείων που επιστρέφεται από τη getmaxnbfiles()), επιστρέφει null. public int getnbfiles() Επιστρέφει το τρέχον πλήθος καταχωρημένων αρχείων στο FAT. public int getmaxnbfiles() Επιστρέφει το μέγιστο επιτρεπτό πλήθος αρχείων που μπορεί να καταχωρήσει το FAT. Δεδομένου ότι κάθε αρχείο είναι τουλάχιστον ένα block, η επιστρεφόμενη τιμή ισούται με το μέγεθος του δίσκου. public boolean isfile(int fileid) Επιστρέφει true αν υπάρχει καταχωρημένο αρχείο με το δεδομένο fileid, διαφορετικά επιστρέφει false. Δηλαδή, ελέγχει εγκυρότητα αναγνωριστικών. public int addfile(block blockref) Δημιουργεί στο FAT καταχώρηση για νέο αρχείο με πρώτο block αυτό που δείχνει η αναφορά blockref. Επιστρέφει το αναγνωριστικό (file id) του νέου αρχείου στο FAT. Αν η blockref είναι null ή δεν υπάρχει χώρος για νέο αρχείο, επιστρέφει 1. public boolean removefile(int fileid) Επιχειρεί διαγραφή από το FAT του αρχείου με αναγνωριστικό fileid. Αν το fileid είναι άκυρο, επιστρέφει false. Διαφορετικά επιστρέφει true. Πεδία public που ϑα Διαχειριστείτε Είναι τα: firstfreeblock τύπου Block και nbfreeblocks τύπου int, που μπορείτε να μεταβάλλετε ελεύθερα. Δεδομένης αναφοράς mydisk σε δίσκο, ϑα προσβαίνετε σε αυτά με mydisk.fat().firstfreeblock και mydisk.fat().nbfreeblocks αντίστοιχα. Κλάση FileSystem Η κλάση αυτή ορίζει μόνο τις λειτουργίες που καλείστε να υλοποιήσετε. Κληρονομεί επιπλέον από την κλάση FileSystemBase χρήσιμες μεθόδους και ένα πεδίο τύπου Disk με όνομα disk, στο οποίο μπορούν να προσβαίνουν ελεύθερα οι υλοποιήσεις σας. class FileSystem extends FileSystemBase { /* Inherited from FileSystemBase: */ // protected Disk disk; // public boolean mount( Disk dsk); // public void testfragmentation(); public int write( char[] file) { /* your code */ public char[] read( int fileid) { /* your code */ public boolean delete( int fileid) { /* your code */ public double getfragmentation( int fileid) { /* your code */ public boolean append( int fileid, char[] file) { /* your code */ Ενα αντικείμενο τύπου FileSystem μπορεί να διαχειριστεί αντικείμενο τύπου Disk, εφόσον το δεύτερο είναι «προσαρτημένο» (mounted) στο πρώτο. Αν δεν υπάρχει προσαρτημένος δίσκος, το πεδίο disk είναι null. Δημιουργία αντικειμένου FileSystem και προσάρτηση δίσκου: FileSystem fs = new FileSystem(); fs.mount(mydisk); Στο σημείο αυτό, εφόσον έχετε υλοποιήσει τις write, delete, getfragmentation, μπορείτε να εκτελέσετε: fs.testfragmentation(); ώστε να λάβετε πειραματικά αποτελέσματα για ϑρυμματισμό. ΜΕΤΑΓΛΩΤΤΙΣΗ Στο cmd prompt ή στο terminal, σε Windows/Linux/Unix/Mac OS X: javac -cp fs.jar FileSystem.java FSApp.java όπου FSApp.java είναι δεδομένο αρχείο με ενδεικτική main. ΕΚΤΕΛΕΣΗ Δίνετε στο cmd prompt ή στο terminal: WINDOWS: C:\> java -cp fs.jar;. FSApp LINUX/MAC OS X/UNIX: $ java -cp fs.jar:. FSApp 5