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

μνημη buffer


lak10

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

Δημοσ.

Για ποιους λόγους είναι χρήσιμη η ενδιάμεση μνήμη (buffer) όπου και αν χρησιμοποιείται; Ποια προβλήματα επιλύει; Ποια προβλήματα εισάγει;

Δημοσ.
Για ποιους λόγους είναι χρήσιμη η ενδιάμεση μνήμη (buffer) όπου και αν χρησιμοποιείται; Ποια προβλήματα επιλύει; Ποια προβλήματα εισάγει;

 

google it και θα βρεις. :-)

Δημοσ.

Θα σου δώσω τρία παραδείγματα που θυμάμαι.

 

1) Έστω ότι θέλεις να τυπώσεις κάτι.

Τα δεδομένα αποστέλονται από τον υπολογιστή στον εκτυπωτή πολύ πιο γρήγορα απ' ότι μπορούν να τυπωθούν.

Αν δεν υπάρχει buffer στον εκτυπωτή, η θύρα ή/και το πρόγραμμα εκτύπωσης θα εξακολουθούν να είναι δεσμευμένα όσο διαρκεί η εκτύπωση δηλ. για πολύ χρόνο. Αν ο εκτυπωτής έχει buffer τα αποθηκεύει εκεί προσωρινά και ο υπολογιστής αποδεσμεύεται πολύ πιο γρήγορα.

 

2) Έστω ότι γράφεις δεδομένα. Αν δεν υπάρχει buffer, πρέπει να προσπελαστεί ο δίσκος για καθένα από αυτά.

Αν υπάρχει, μεταφέρονται στο buffer μέχρι αυτό να γεμίσει και τότε μόνον γράφονται. Άρα οι προσπελάσεις του δίσκου είναι πολύ λιγότερες με ότι αυτό συνεπάγεται.

 

3) Όταν γράφεις για ένα CD/DVD η ροή των δεδομένων δεν πρέπει να διακοπεί με κανέναν τρόπο αλλιώς το δισκάκι θα αχρηστευθεί. Αν για κάποιο λόγο διακοπεί προσωρινά η ροή των δεδομένων (πχ. bottleneck στον δίαυλο της μνήμης) η εγγραφή καταστρέφεται. Αν τα δεδομένα αποθηκεύονται σε ένα buffer αντλούνται από εκεί μέχρι να αποκατασταθεί η ροή τους αποφεύγοντας το καμένο δισκάκι.

 

Και σε άλλες περιπτώσεις όμοια...

Δημοσ.
Θα σου δώσω τρία παραδείγματα που θυμάμαι.

 

1) Έστω ότι θέλεις να τυπώσεις κάτι.

Τα δεδομένα αποστέλονται από τον υπολογιστή στον εκτυπωτή πολύ πιο γρήγορα απ' ότι μπορούν να τυπωθούν.

Αν δεν υπάρχει buffer στον εκτυπωτή, η θύρα ή/και το πρόγραμμα εκτύπωσης θα εξακολουθούν να είναι δεσμευμένα όσο διαρκεί η εκτύπωση δηλ. για πολύ χρόνο. Αν ο εκτυπωτής έχει buffer τα αποθηκεύει εκεί προσωρινά και ο υπολογιστής αποδεσμεύεται πολύ πιο γρήγορα.

 

2) Έστω ότι γράφεις δεδομένα. Αν δεν υπάρχει buffer, πρέπει να προσπελαστεί ο δίσκος για καθένα από αυτά.

Αν υπάρχει, μεταφέρονται στο buffer μέχρι αυτό να γεμίσει και τότε μόνον γράφονται. Άρα οι προσπελάσεις του δίσκου είναι πολύ λιγότερες με ότι αυτό συνεπάγεται.

 

3) Όταν γράφεις για ένα CD/DVD η ροή των δεδομένων δεν πρέπει να διακοπεί με κανέναν τρόπο αλλιώς το δισκάκι θα αχρηστευθεί. Αν για κάποιο λόγο διακοπεί προσωρινά η ροή των δεδομένων (πχ. bottleneck στον δίαυλο της μνήμης) η εγγραφή καταστρέφεται. Αν τα δεδομένα αποθηκεύονται σε ένα buffer αντλούνται από εκεί μέχρι να αποκατασταθεί η ροή τους αποφεύγοντας το καμένο δισκάκι.

 

Και σε άλλες περιπτώσεις όμοια...

θα μπορουσα νε εχω και καποια αρνητικα?
Δημοσ.

Θα σου πω κάτι πρακτικό που πρέπει να προσέχεις.

Aν έχεις γράψει κάτι σε ένα usb stick ή δίσκο ποτέ το μην βγάζεις χωρίς να το απεγκαθιστάς με τον φυσιολογικό τρόπο (δηλ. safely remove disc).

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

Με φυσιολογική απεγκατάσταση εξαναγκάζονται πραγματικά να γραφούν αν δεν έχουν ήδη.

Αν τραβήξεις απλώς το καλώδιο θα μείνουν στο buffer του υπολογιστή και δεν θα περαστούν στο usb...

Δημοσ.
Θα σου πω κάτι πρακτικό που πρέπει να προσέχεις.

Aν έχεις γράψει κάτι σε ένα usb stick ή δίσκο ποτέ το μην βγάζεις χωρίς να το απεγκαθιστάς με τον φυσιολογικό τρόπο (δηλ. safely remove disc).

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

Με φυσιολογική απεγκατάσταση εξαναγκάζονται πραγματικά να γραφούν αν δεν έχουν ήδη.

Αν τραβήξεις απλώς το καλώδιο θα μείνουν στο buffer του υπολογιστή και δεν θα περαστούν στο usb...

Απορία.

Στο (1) ο buffer είναι η μνήμη του printer.

Στο (2) είναι η cache του δίσκου.

Στο (3) είναι ο buffer του drive.

Αν κάνω λάθος, διορθώστε με.

 

Στο παράδειγμα που αναφέρεις, που γίνονται buffer τα data; Στη RAM;

Δημοσ.

Word processors, spreadsheet programs and nearly all productivity packages use buffers to keep track of changes within a document or project so that reversion (the "undo" command) is possible. A buffer is also responsible for saving temporary copies of material in progress so that in the case of a crash or power outage, the document can be retrieved even when it was not officially saved.

http://www.wisegeek.com/in-computing-what-is-a-buffer.htm

 

η χρήση buffer, είναι επινόηση απαραίτητη για την απρόσκοπτη λειτουργία του υπολογιστή

και μάλλον υλοποιείται με διάφορες τεχνικές

 

η cache του σκληρού, έχει πιό σύνθετη χρήση

Although there are still many drives using a 2 MB buffer, 8 MB can be considered standard today for mainstream desktop hard drives, and there are more and more drives with 16 MB cache as well. Larger hard drive caches not only make sense because of low DRAM prices, but from a technical standpoint as well. Hard drives utilize algorithms to pre-cache data, or to leave data in the cache memory in case it is requested again. Serial ATA drives also require a certain amount of memory to store incoming commands, because most products are capable of reorganizing these in order to process them as efficiently as possible, requiring little physical head movement.

http://www.tomshardware.com/reviews/understanding-hard-drive-performance,1557-5.html

 

μπορεί να είναι και ενα /tmp directory

.

Δημοσ.
Ποια προβλήματα εισάγει;

 

Εισάγει τπ πρόβλημα των άσκοπων αντιγραφών buffer

 

πχ:

 

"Διαβάζεις" δεδομένα από ένα αρχείο και τα στέλνεις μέσω μίας socket σε ένα απομακρυσμένο υπολογιστή. Όταν καλείς την read() system call η συνάρτηση αυτή δεσμέυει δεδομένα πρώτα σε ένα εσωτερικό buffer για καλύτερη συνεργασία με το δίσκο ( λιγότερες πραγματικές αναγνώσεις hardware ) μετά κάνει copy στο buffer του προγράμματός σου. Μετά εσύ καλείς την write() system call η οποία αντιγράφει τον buffer σου στον δικό της εσωτερικό buffer και μετά "γράφει" τα δεδομένα στο σύρμα.

 

Όπως καταλαβαίνεις αν θές να περάσεις τα δεδομένα του αρχείου ανεπεξέργαστα τότε το έξτρα copy των δεδομένων στον buffer του προγράμματός σου είναι άχρηστο overhead.

 

Γι αυτό και βγήκε η sendfile system call για time & resources critical περιβάλλοντα ( web servers )

Δημοσ.
Εισάγει τπ πρόβλημα των άσκοπων αντιγραφών buffer

 

αυτό είναι πρόβλημα του τρόπου που έχει δομηθεί ένα λειτουργικο ή πιό σωστά, του τρόπου με τον οποίο έχει υλοποιηθεί η μεταφορά-επικοινωνία

 

.

Δημοσ.

Buffer μπορείς να έχεις και στη RAM. Πολλές συναρτήσεις εισόδου/εξόδου της C++ δουλεύουν με προσωρινή καταχώρηση σε ένα buffer που ορίζει ο προγραμματιστής. Πχ η fscanf() διαβάζει δεδομένα από ένα αρχείο και τα αποθηκεύει τμηματικά σε μια μεταβλητή που χρησιμοποιήται ως buffer.

 

Η cache μνήμη που αναφέρθηκε έχει παρόμοιο σκοπό. Ωστόσο η επίδρασή της στις επιδόσεις του υπολογιστή είναι πολύ πιο σημαντική.

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

Για να καταλάβεις, το να δεί ο επεξεργαστής την cache του είναι σαν να είσαι στην Αθήνα και κινείσαι στα περίχωρα της Αττικής.

Το να δει τη RΑΜ είναι σαν να πρέπει να πας στη Θεσσαλονίκη, δηλ. πολύ πιο χρονοβόρο.

Η χωρική και χρονική τοπικότητα των δεδομένων είναι πολύ σπουδαία. Για το buffer είναι πολύ λιγότερο σημαντικό επειδή αυτό δεν εμπλέκεται σε τόσο κρίσιμες διεργασίες και ο ρόλος του αφορά κυρίως περιφερειακές συσκευές.

 

---------- Προσθήκη στις 04:48 ---------- Προηγούμενο μήνυμα στις 04:40 ----------

 

Απορία.

Στο (1) ο buffer είναι η μνήμη του printer.

Στο (2) είναι η cache του δίσκου.

Στο (3) είναι ο buffer του drive.

Αν κάνω λάθος, διορθώστε με.

 

Στο παράδειγμα που αναφέρεις, που γίνονται buffer τα data; Στη RAM;

 

Nαι, στη RAM.

 

Και στο 2), καταρχήν στη RAM κι όχι στην cache. Η cache είναι το τελευταίο στάδιο.

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

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

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