Προς το περιεχόμενο

Αρχειο διακοπη ρευματος


ntoulapa

Προτεινόμενες αναρτήσεις

Δημοσ.

Θα μπορουσε καποιος να μου προτινει μια προγραμματιστικη τεχνικη για τον αλγοριθμο της ουρας(δομες δεδομενων queue ,enqueue ,dequeue,front,rear),ωστε να ειναι ασφαλης κ να μην χανονται οι εγγραφες που αποθηκευονται σε ενα αρχειο ,οταν συμβει διακοπη ρευματος.

Ευχαριστω προκαταβολικα οποιον ασχοληθει με το θεμα.

Δημοσ.

Αν κατάλαβα καλά, θέλεις να κάνεις transaction. Ένας απλός τρόπος είναι με τρία αρχεία έστω data1, data2 και check. Τα δύο πρώτα περιέχουν τα δεδομένα (για την ακρίβεια ένα από αυτά κάθε φορά) και το τρίτο ένα μόνο byte που δείχνει σε ποιό αρχείο είναι τα δεδομένα. Άρα το save γίνεται σε τρείς φάσεις. Πρώτα αντιγράφεις τα δεδομένα από το data1 στο data2 και κάνεις flush. Κατόπιν γράφεις στο αρχείο check το byte που δείχνει ότι τα δεδομένα είναι στο data2 και πάλι flush και τέλος σβήνεις τα δεδομένα από το data1. Για πιο εξελιγμένους τρόπους ψάξε για persistent transactions.

Το κακό βέβαια είναι ότι στους σύγχρονους υπολογιστές ο δίσκος αγνοεί τις περισσότερες φορές το flush και γράφει όποτε θέλει τα δεδομένα, γιαυτό ένα ups είναι πάντα η καλύτερη λύση :)

Δημοσ.

Στα σύγχρονα λειτουργικά συστήματα, όπως για παράδειγμα στα MS-Windows 2000/XP σε τέτοιες περιπτώσεις δεν ωφελεί να ταλαιπωρείσαι με τέτοιες σκοτούρες διότι δεν πρόκειται να αποδώσουν καρπούς αφού η εγγραφή των δεδομένων γίνεται με την βοήθεια Write-Cache ώστε να βελτιστοποιείται η ταχύτητα απόκρισης του δίσκου, συνεπώς αν θες κάποια μεγαλύτερη εξασφάλιση σε τέτοιες οριακές περιπτώσεις (διακοπή ρεύματος) καλύτερα απενεργοποίησε το Write-Cache των Windows (από τον Device Manager) για τον δίσκο όπου πρόκειται να εγκατασταθεί η εφαρμογή σου εις γνώση σου βέβαια πως θα πλήξεις την ταχύτητα προσπέλασης της μονάδος.

 

Τώρα, εκτός από αυτή την μέθοδο, μπορείς να ζητήσεις από τα MS-Windows (και υποθέτω από άλλα Λ.Σ.) να καταγράφουν απευθείας στον δίσκο τα δεδομένα τους περνώντας ως παράμετρο της Windows API function CreateFile το bit-flag FILE_FLAG_WRITE_THROUGH το οποίο σε κάθε περίπτωση ζητά την άμεση εγγραφή των δεδομένων στον δίσκο (για περισσότερες πληροφορίες συμβουλέψου το MSDN) –και εδώ έχουμε penalty στην ταχύτητα απόκρισης του δίσκου βέβαια..

 

Η τελευταία (προγραμματιστική) λύση προϋποθέτει πως οι ρουτίνες που διαχειρίζονται αρχεία σου χρησιμοποιούν την CreateFile και όχι κάποια standard C για παράδειγμα file I/O function όπως η fopen ή κάποιο C++ STL stream κτλ.

Δημοσ.

Καλα δεν νομιζω να υπαρχει 100% ασφαλής αποθηκευση....φάντασου να πέσει το ρεύμα λιγο πριν την κλήση της flush :eek: θα προλάβει να αποθηκευτει;

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...