Ρύθμιση λογικών συνθηκών αναζήτησης σε cmd. Βοήθεια για την εντολή if και τις παραμέτρους της. Δημιουργία γενεών αρχείων κατά ημερομηνία και ώρα

). Είναι κυρίως πρακτικό: τι να επιλέξετε, τι μπορεί να εγκατασταθεί και τι δεν μπορεί να εγκατασταθεί και διάφορες χρήσιμες λειτουργίες. Ωστόσο, δεν έθιξε ίσως το πιο ενδιαφέρον μέρος - πώς λειτουργεί η μνήμη γενικά και πώς να τη ρυθμίσετε με ακρίβεια (και να την υπερχρονίσετε). Αν κοιτάξετε, όσον αφορά τον αριθμό των παραμέτρων, η RAM είναι σχεδόν το πιο περίπλοκο στοιχείο ενός υπολογιστή: κρίνετε μόνοι σας, για τον επεξεργαστή στον οποίο βρίσκεστε το καλύτερο σενάριομπορείτε να αλλάξετε τη συχνότητα της γεννήτριας ρολογιού (FSB, και επιπλέον, είναι 100 MHz εδώ και περίπου 15 χρόνια και σπάνια την αγγίζει κανείς), τον πολλαπλασιαστή (αυτό αλλάζουν) και την τάση (για εργασία σε υψηλότερα ή χαμηλές συχνότητεςμπορείτε πάντα να προσαρμόσετε την τάση για σταθερότητα λειτουργίας και, σε ορισμένες περιπτώσεις, χαμηλότερη κατανάλωση ρεύματος) και τον αριθμό των πυρήνων εργασίας (αν και λίγοι θα τους αγγίξουν - εκτός εάν απενεργοποιηθεί το multithreading, επειδή σε ορισμένες εργασίες μπορεί να δώσει αρνητική αύξηση ). Όλες οι άλλες παράμετροι είναι ήδη μεμονωμένες και δεν τις έχουν όλοι οι επεξεργαστές, επομένως συχνά δεν αγγίζονται. Όσον αφορά τις κάρτες γραφικών, υπάρχουν ακόμη λιγότερες παράμετροι - μόνο συχνότητες GPU, μνήμη και τάση GPU. Αλλά αν κοιτάξουμε τη μνήμη RAM, θα δούμε μια θάλασσα από σημαντικές παραμέτρους: καθυστέρηση, συχνότητα, συναλλαγές ανά δευτερόλεπτο κ.λπ. - Ας μάθουμε τι είναι και πώς σχετίζεται με την απόδοση και τη σταθερότητα της μνήμης.

Προδιαγραφές Μνήμης

Πρώτα, πρέπει να κατανοήσετε τι σημαίνουν ορισμένοι αριθμοί και γράμματα στις προδιαγραφές μνήμης. Μπορείτε να τα δείτε είτε στην ίδια τη μνήμη, είτε στο κουτί της είτε μέσα ειδικά προγράμματατύπου AIDA64. Θα χρησιμοποιήσω τη μνήμη μου ως παράδειγμα, αλλά θα έχετε παρόμοια δεδομένα. Εδώ είναι λοιπόν ένα στιγμιότυπο οθόνης από το AIDA64:

Τι βλέπουμε για τη μνήμη; Το ότι είναι Dual Channel DDR4-3200 SDRAM (16-18-18-36-CR2). Αν ψάξετε στο google τις σημάνσεις των ίδιων των τσιπ, μπορείτε να μάθετε λίγες περισσότερες πληροφορίες - PC4-17000 1.2 V. Ας πάμε με τη σειρά. Τι σημαίνει το Dual Channel (μπορείτε να έχετε Single, Triple ή Quad - αν και αν έχετε το δεύτερο, τότε πιθανότατα γνωρίζετε τι είναι); Αυτό σημαίνει ότι η μνήμη λειτουργεί σε λειτουργία δύο καναλιών (ή μονοκάναλη, ή τρικαναλική, τετρακαναλική κ.λπ.). Εάν έχετε ένα memory stick, τότε θα λειτουργεί σε λειτουργία μονού καναλιού - δηλαδή, τα χαρακτηριστικά ανάγνωσης και εγγραφής θα είναι περίπου τα ίδια με αυτά που υποδεικνύονται σε αυτό (στην πραγματικότητα, όλα εξαρτώνται από τον ελεγκτή μνήμης και στην πράξη οι τιμές μπορεί να είναι 10-15 % κάτω). Εάν έχετε δύο ή περισσότερες λωρίδες με τα ίδια χαρακτηριστικά, τότε μπορούν να συνεργαστούν: σε αυτήν την περίπτωση, η ένταση αυξάνεται ανάλογα με τον αριθμό των μονάδων και η ταχύτητα αυξάνεται επίσης σχεδόν γραμμικά. Επομένως, εάν εσείς μνήμη ενός καναλιούκαι ενσωματωμένα γραφικά, τα οποία χρησιμοποιούν τη μνήμη RAM ως μνήμη βίντεο και αν κάνετε κάτι πιο σοβαρό στον υπολογιστή σας από το να παρακολουθείτε ταινίες και να σερφάρετε στο Διαδίκτυο, πρώτα απ 'όλα πρέπει να αγοράσετε ένα άλλο μοχλό μνήμης RAM και να το ρυθμίσετε σε λειτουργία διπλού καναλιού ( πώς γίνεται αυτό είναι γραμμένο σε ένα πρακτικό άρθρο), γιατί έτσι διπλασιάζεις την απόδοση της μνήμης RAM (καλά, οι ελεγκτές μνήμης δύο καναλιών έχουν 90% σύγχρονους επεξεργαστές).

Ας πάμε παρακάτω - συνδυασμός γραμμάτων DDR SDRAM (Σύγχρονη δυναμική μνήμη τυχαίας πρόσβασης διπλού ρυθμού δεδομένων - σύγχρονη δυναμική μνήμη με τυχαία πρόσβασηκαι διπλή ταχύτητα μεταφοράς δεδομένων). Εδώ μας ενδιαφέρει μόνο το τέλος - "και με διπλάσια ταχύτητα μεταφοράς δεδομένων." Το θέμα εδώ είναι ότι στον παλιό τύπο Μνήμη SDRAMΤα δεδομένα διαβάστηκαν μόνο κατά τη μετάβαση από την κατάσταση "0" στην κατάσταση "1" (κατά μήκος της άκρης του σήματος). Στο DDR, αποφάσισαν να διαβάσουν δεδομένα και κατά τη μετάβαση από την κατάσταση "1" στην κατάσταση "0" (καθώς πέφτει το σήμα), δηλαδή, η πραγματική συχνότητα μνήμης έχει διπλασιαστεί. Ωστόσο, από πλευράς υλικού, η συχνότητα μνήμης παραμένει η ίδια, έτσι, για παράδειγμα, στην ίδια Συχνότητα CPU-ZΗ μνήμη θα είναι η μισή από τη διαχείριση εργασιών:


Όπως εξήγησα ήδη παραπάνω, δεν πρέπει να το φοβάστε αυτό, αυτό είναι ένα χαρακτηριστικό του DDR.

Επόμενο - τι σημαίνει τέσσερα στο DDR4; Σε γενικές γραμμές, υπάρχει μόνο ένα πράγμα - ότι αυτή είναι η 4η γενιά Μνήμη DDR. Μπορείτε να δείτε τις διαφορές μεταξύ όλων των τύπων στο Wiki. Δεν βλέπω πολύ νόημα να το ξαναγράψω, αλλά θα πω ότι η κύρια αύξηση προέρχεται από την αύξηση της συχνότητας της μνήμης.

Τώρα ας δούμε ολόκληρο το σχέδιο - DDR4-3200. Πολλοί άνθρωποι υπογράφουν MHz μετά τα 3200 - γενικά, αυτό δεν είναι απολύτως σωστό. Αυτό που σημαίνει στην πραγματικότητα είναι MT/s, ή megatransactions ανά δευτερόλεπτο. Ποια είναι αυτή η τιμή; Αυτή είναι μια τιμή που δείχνει πόσες λειτουργίες ανά δευτερόλεπτο μπορούν να εκτελεστούν στη μνήμη. Λαμβάνοντας υπόψη ότι το πλάτος του διαύλου DDR4 είναι 64 bit (ή 8 byte), μπορείτε να λάβετε την ταχύτητά του σε MB/s - αυτό απαιτεί 3200 MT/s * 8 B = 25600 MB/s. Και εδώ πρέπει να πούμε ότι αυτός ο αριθμός είναι συχνά ήδη γραμμένος στην ίδια τη μνήμη - στην περίπτωσή μου είναι το PC4-17000. Θα πείτε - 17000 δεν ισούται με 25600. Σωστά, στην περίπτωσή μου η μνήμη είναι υπερχρονισμένη, αν την πάρετε πραγματική ταχύτηταστους 2133 MT/s, τότε θα έχουμε μόλις 17000 MB/s. Λοιπόν, PC4 μέσα σε αυτήν την περίπτωση- ισοδύναμο με DDR4. Δηλαδή, όπως μπορείτε να δείτε, οι DDR4-2133 και PC4-17000 είναι ισοδύναμες εγγραφές, οπότε για να καταλάβετε τι είδους μνήμη έχετε, αρκεί να γνωρίζετε μόνο μία από αυτές.

Τώρα έρχεται το σχέδιο 16-18-18-36-CR2. Για να εξηγήσετε αυτούς τους αριθμούς, πρέπει να δείτε τι είναι η σύγχρονη μνήμη DDR. Στην ουσία, είναι ένα σύνολο κελιών που αποθηκεύουν πληροφορίες. Κάθε στοιχείο έχει τρανζίστορ και πυκνωτές μέσα και βρίσκεται μέσα δισδιάστατος πίνακαςμαζί με άλλα κύτταρα. Λοιπόν, η αρχή της λειτουργίας είναι απλή: οι πυκνωτές φορτίζονται όταν ένα μοναδιαίο bit γράφεται στο κελί και αποφορτίζονται όταν γράφεται ένα bit μηδέν. Εδώ, παρεμπιπτόντως, προκύπτει το πρόβλημα - για να αποφευχθεί η εκφόρτιση των πυκνωτών και η απώλεια πληροφοριών, πρέπει να φορτίζονται συνεχώς - γι 'αυτό όταν απενεργοποιείται η τροφοδοσία του υπολογιστή, διαγράφονται όλες οι πληροφορίες από τη μνήμη RAM.

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

Φυσικά, κάθε κελί έχει τη δική του "διεύθυνση": χονδρικά, αυτός είναι ο αριθμός του στη γραμμή και στη στήλη των ίδιων κελιών στο δισδιάστατος πίνακας. Με τη σειρά του, ένας αριθμός κυττάρων συνδυάζεται μαζί για περισσότερα γρήγορη πρόσβασησε αυτούς - μια τέτοια ομάδα ονομάζεται τράπεζα. Τώρα ας δούμε τι συμβαίνει όταν ο ελεγκτής μνήμης θέλει να γράψει κάτι συγκεκριμένο κύτταρο. Αρχικά, έρχεται σε επαφή με το βάζο με τη διεύθυνση της σειράς - αυτό το σήμα ονομάζεται RAS (Row Address Strobe). Κατά συνέπεια, ο χρόνος πρόσβασης (λανθάνουσα κατάσταση) ονομάζεται RAS Latency - αλλά αυτή η παράμετρος δεν είναι πληροφοριακή και γράφεται πολύ σπάνια. Αλλά η παράμετρος καθυστέρησης RAS σε CAS είναι σημαντική - αυτή είναι η διαδικασία αναζήτησης της επιθυμητής γραμμής στην τράπεζα μνήμης. Αυτή η παράμετρος είναι ήδη απαραίτητη και η καθυστέρηση της γράφεται δεύτερη - δηλαδή, στην περίπτωσή μου είναι 18 κύκλοι ρολογιού (ένας κύκλος ρολογιού είναι μια αποστολή δεδομένων κατά μήκος του διαύλου μνήμης). Υπέροχα, σε μόλις 18 μπαρ βρήκαμε τη σωστή σειρά. Χρειάζεσαι όμως και μια στήλη - ένα άλλο σήμα, το CAS, είναι υπεύθυνο για αυτό, και η καθυστέρηση του γράφεται πρώτα - στην περίπτωσή μου είναι 16 κύκλοι ρολογιού. Φαίνεται - αυτό είναι, πήραμε την ακριβή τοποθεσία του κελιού μας, γιατί δύο ακόμη αριθμούς;


Δεν είναι όλα τόσο απλά - συμβαίνει συχνά ο ελεγκτής να χρειάζεται πρόσβαση σε άλλο κελί της ίδιας σειράς. Αλλά για να το κάνει αυτό πρέπει πρώτα να κλείσει προηγούμενη συνεδρίααίτημα (δεν μπορείτε ταυτόχρονα να έχετε πρόσβαση σε διαφορετικά κελιά της ίδιας σειράς) - και αυτό πάλι απαιτεί χρόνο, και αυτή η καθυστέρηση ονομάζεται Προφόρτιση RAS - υποδεικνύει την ώρα κλεισίματος και επανενεργοποίησης της σειράς. Γράφεται τρίτο, στη δική μου περίπτωση είναι πάλι 18 μπάρες. Η τελευταία παράμετρος - Χρόνος Κύκλου - είναι υπεύθυνη για το χρόνο που απαιτείται πλήρες άνοιγμακαι κλείνοντας ολόκληρη την τράπεζα, με άλλα λόγια, αυτή είναι η απόδοση ολόκληρης της μνήμης. Είναι γραμμένο τέταρτο, και για μένα είναι 36 μπάρες.

Παρέμεινε τελευταία παράμετρος- CR (Command Rate), μπορεί να είναι 1 ή 2. Αυτή η παράμετρος αντιστοιχεί στο χρόνο που πρέπει να περάσει μεταξύ της ενεργοποίησης της μνήμης και της ικανότητάς της να λειτουργεί - αυτός είναι 1 ή 2 κύκλοι ρολογιού. Φυσικά, 1 κύκλος είναι καλύτερος, αλλά εξαρτάται από την τύχη σας με τη μνήμη.

Φυσικά, μια τέτοια παράμετρος όπως ο κύκλος του ρολογιού δεν είναι πολύ σαφής - είναι πιο ενδιαφέρον να γνωρίζουμε το αποτέλεσμα σε νανοδευτερόλεπτα. Για να γίνει αυτό, ανακαλύπτουμε πόσο διαρκεί ένας κύκλος ρολογιού - αυτό είναι 1/1200 MHz = 0,83 ns (λαμβάνουμε, φυσικά, την πραγματική συχνότητα μνήμης). Ο χρόνος κύκλου της μνήμης είναι 36 κύκλοι ρολογιού, δηλαδή, η καθυστέρηση είναι 0,83 ns * 36 = 30 ns. Τότε γιατί το AIDA64 δείχνει αποτέλεσμα περίπου 48 ns; Είναι απλό - αν και ο ίδιος ο επεξεργαστής είναι μικρός, λόγω εξαιρετικά μικρών χρονικών διαστημάτων (δισεκατομμυριοστά του δευτερολέπτου), είναι απαραίτητο να ληφθεί υπόψη ο χρόνος που χρειάζεται για να περάσει το σήμα μέσα του, που προσθέτει επιπλέον 18 ns.

Αυτό είναι ουσιαστικά όλο, τώρα το Dual Channel DDR4-3200 SDRAM (16-18-18-36-CR2) για εσάς δεν είναι απλώς μια δέσμη συμβόλων, αλλά ένα απολύτως ουσιαστικό σύνολο παραμέτρων που σας επιτρέπει να κατανοήσετε με ακρίβεια τι είδους μνήμη RAM είναι μπροστά σου.

Overclocking RAM

Ένας προσεκτικός αναγνώστης μπορεί να έχει μια ερώτηση - τι είναι πιο σημαντικό, περισσότερο υψηλή συχνότηταμνήμη ή χαμηλότεροι χρονισμοί (λανθάνοντες χρόνοι); Εξάλλου, αφενός, όσο μεγαλύτερη είναι η συχνότητα, τόσο ταχύτερη απόδοσημνήμη και το σύστημα συνολικά. Από την άλλη πλευρά, όσο χαμηλότεροι είναι οι χρονισμοί, τόσο πιο γρήγορη θα υπάρχει πρόσβαση στη μνήμη και τόσο λιγότερο η CPU θα είναι αδρανής, δηλαδή τόσο πιο γρήγορα θα λειτουργεί ο υπολογιστής. Λαμβάνοντας υπόψη ότι όσο υψηλότερη είναι η συχνότητα, τόσο υψηλότεροι είναι οι χρονισμοί, πρέπει να διατηρηθεί μια ισορροπία εδώ. Δυστυχώς, ο καθένας έχει τη δική του, επομένως το overclocking μνήμης είναι μια αρκετά επίπονη εργασία για τη ρύθμιση διαφόρων χρονισμών, τάσεων και συχνοτήτων και τη δοκιμή της ταχύτητας της μνήμης RAM στο σύστημα. Φυσικά, δεν θέλουν όλοι να κάνουν ωμή βία, επομένως υπάρχει μνήμη σε προσφορά που υποστηρίζει προφίλ DOCP και XMP. Αυτά είναι προφίλ αυτόματου υπερχρονισμού που έχουν ήδη ενσωματωθεί στη μνήμη, όπου καθορίζονται οι τάσεις, οι συχνότητες και οι χρονισμοί στους οποίους η μνήμη λειτουργεί εγγυημένα - απλά πρέπει να επιλέξετε το επιθυμητό προφίλ στο UEFI. Τα πλεονεκτήματα αυτής της μεθόδου είναι προφανή - έχετε overclocking με ένα κλικ. Υπάρχουν επίσης μειονεκτήματα - πρώτον, μια τέτοια μνήμη είναι πιο ακριβή και όσο υψηλότερη είναι η εγγυημένη συχνότητα - τόσο περισσότερο μεγαλύτερη τιμή. Δεύτερον, τα προφίλ δεν είναι ιδανικά και συχνά μπορείς να αποσπάσεις άλλο ένα 5-10% της απόδοσης, αλλά και πάλι, ανακατεύοντας τους χρονισμούς.

Λοιπόν, η τελευταία αναμενόμενη ερώτηση - αξίζει να υπερχρονίσετε καθόλου τη μνήμη RAM; Όλα εξαρτώνται από τις εργασίες και τους επεξεργαστές σας: για παράδειγμα, 6 και 8 πυρήνων AMD RyzenΗ συχνότητα του διαύλου που συνδέει δύο τσιπ επεξεργαστών εξαρτάται άμεσα από τη συχνότητα της μνήμης RAM, επομένως το overclocking είναι, όπως λένε, ένα "πρέπει". Στα παιχνίδια, θα πρέπει να περιμένετε σημαντική αύξηση της απόδοσης από το overclocking μνήμης μόνο στα κορυφαία συστήματα και τότε αυτή θα είναι η διαφορά μεταξύ 110 και 120 fps - από τη μία πλευρά, ωραίο μπόνους, από την άλλη, η διαφορά δεν είναι ακόμα αισθητή στο μάτι. Λοιπόν, το overclocking είναι πιο αισθητό σε εργασίες που σχετίζονται στενά με τη μνήμη RAM - για παράδειγμα, την αρχειοθέτηση, όπου οι επεξεργαστές συχνά δεν έχουν αρκετή κρυφή μνήμη και αναγκάζονται να έχουν συχνά πρόσβαση στη μνήμη.

Μνήμη τυχαίας πρόσβασης: ιστορία ανάπτυξης και αρχές λειτουργίας

Πριν αρχίσουμε να μιλάμε ευθέως για μνήμη τυχαίας προσπέλασης, την ανάπτυξη και τους τύπους του, θα πρέπει να καταλάβετε σε τι προορίζεται και γιατί αποτελεί μέρος των σύγχρονων υπολογιστών.

Ειδικοί που ερευνούν την ιστορία της ανάπτυξης τεχνολογία υπολογιστών, θεωρήστε το πρώτο ορόσημο στην ακανθώδη διαδρομή της εμφάνισης και της ανάπτυξης των υπολογιστών ως η ανάπτυξη της Αναλυτικής Μηχανής από τον Βρετανό Charles Babbage στο Λονδίνο το 1834. Λόγω προβλημάτων με τη χρηματοδότηση και της έλλειψης τεχνολογιών απαραίτητων για την κατασκευή του μηχανήματος, δεν ήταν δυνατή η κατασκευή του εκείνη την εποχή. Παρά το γεγονός αυτό, η Αναλυτική Μηχανή θεωρείται η πρώτη που δημιουργήθηκε από το ανθρώπινο μυαλό. αυτόματη συσκευήγια αποθήκευση και επεξεργασία μαθηματικών πληροφοριών, δηλαδή του πρώτου υπολογιστή.


Ένα από τα στοιχεία της Αναλυτικής Μηχανής, που συναρμολογήθηκε από τον γιο του Babbage μετά τον θάνατό του (φωτογραφία Andrew Dunn)

Το σύνολο των κύριων στοιχείων και στοιχείων που συνθέτουν μια αναλυτική μηχανή (και τους σύγχρονους υπολογιστές επίσης) ονομάζεται αρχιτεκτονική ενός υπολογιστή. Κατά την ανάπτυξη της συσκευής του, ο Babbage εντόπισε πολλά κύρια μέρη. Το πρώτο είναι ένας «μύλος» που επεξεργαζόταν πληροφορίες (ανάλογα με έναν σύγχρονο επεξεργαστή). Το δεύτερο είναι οι συσκευές εισόδου-εξόδου, με τη βοήθεια των οποίων εισήχθησαν δεδομένα για επεξεργασία και από τις οποίες στη συνέχεια ελήφθη το αποτέλεσμα. Το τρίτο είναι η «αποθήκη» στην οποία αποθηκεύονταν τα ενδιάμεσα αποτελέσματα των υπολογισμών. Το τέταρτο είναι ένα στοιχείο ελέγχου που έχει σχεδιαστεί για τη μεταφορά δεδομένων μεταξύ άλλων κόμβων της αναλυτικής μηχανής.

Όλοι έχουν παρόμοια αρχιτεκτονική σύγχρονους υπολογιστές, που αποτελείται από μια αριθμητική λογική μονάδα (ALU), έναν δίαυλο δεδομένων, τη μνήμη RAM και συσκευές εισόδου/εξόδου. Η αλληλεπίδραση αυτών των στοιχείων μπορεί να απεικονιστεί με απλοποιημένο τρόπο χρησιμοποιώντας το παρακάτω διάγραμμα.

Αρχιτεκτονική υπολογιστών

Ο σκοπός όλων των στοιχείων αντιστοιχεί ακριβώς στον σκοπό των εξαρτημάτων της Αναλυτικής Μηχανής του Babbage. Η RAM, όπως και η «αποθήκη» σε ένα βρετανικό αυτοκίνητο, είναι υπεύθυνη για την προσωρινή αποθήκευση πληροφοριών που περιέχουν εισερχόμενα, εξερχόμενα και ενδιάμεσα δεδομένα, καθώς και τα προγράμματα και τους αλγόριθμους με τους οποίους υποβάλλονται σε επεξεργασία.

Στην επιστήμη των υπολογιστών, η μνήμη RAM ονομάζεται επίσης μνήμη τυχαίας πρόσβασης (RAM), η οποία αντικατοπτρίζει με μεγαλύτερη ακρίβεια την ουσία αυτού του στοιχείου ενός υπολογιστή.

Φυσική υλοποίηση της μνήμης RAM ενεργοποιημένη διαφορετικά στάδιαανάπτυξη

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

Η εμφάνιση των ηλεκτρομηχανικών υπολογιστών και των πρώτων ηλεκτρονικών υπολογιστών (υπολογιστές) οδήγησε στη δημιουργία ταχύτερων και πιο αξιόπιστων μεθόδων αποθήκευσης πληροφοριών. Στην αρχή, διάφορα ερευνητικά κέντρα πειραματίστηκαν αρκετά ευρέως με σχέδια και φυσικές αρχέςλειτουργία συσκευών αποθήκευσης. Δημιουργήθηκαν RAM που λειτουργούσαν σε ηλεκτρομηχανικούς ηλεκτρονόμους, ηλεκτρομαγνητικούς διακόπτες, ηλεκτροστατικούς σωλήνες και σωλήνες καθοδικών ακτίνων. Μετά ήρθε διάφορες επιλογέςμαγνητικές συσκευές αποθήκευσης - μαγνητικούς δίσκουςκαι ντραμς ενώ μακροχρόνια αποθήκευσηΟι πληροφορίες πραγματοποιήθηκαν σε μαγνητικές ταινίες. Οι δίσκοι και τα τύμπανα παρείχαν σημαντικά ταχύτερους χρόνους πρόσβασης σε κάθε κυψέλη δεδομένων σε σύγκριση με τις κασέτες. Και μία από τις κύριες απαιτήσεις για τη μνήμη RAM ήταν και παραμένει μέχρι σήμερα η υψηλή απόδοση.

Μαγνητικό τύμπανο (φωτογραφία από τη Wikipedia)

Εκτός από μαγνητικούς δίσκους και τύμπανα για μεγάλο χρονικό διάστημα όπως γρήγορη μνήμηχρησιμοποιήθηκαν συστοιχίες σε σιδηρομαγνητικούς πυρήνες, οι οποίοι παρείχαν πολύ υψηλή ταχύτηταπρόσβαση. Το κύριο μειονέκτημα τέτοιων συστοιχιών ήταν η υψηλή κατανάλωση ενέργειας και η πολύ μεγάλη τους κατανάλωση διαστάσειςΕΜΒΟΛΟ.

Στοιχείο μνήμης σε μαγνητικούς πυρήνες σχεδιασμένο από τον K. Olsen (1964)

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

Η πιο σοβαρή ώθηση για την ανάπτυξη των υπολογιστών προήλθε από τη δημιουργία του LSI (large ολοκληρωμένα κυκλώματα), που αποτελείται από μεγάλος αριθμόςτρανζίστορ ημιαγωγών που περικλείονται σε ένα περίβλημα. Η ταχύτητα επεξεργασίας πληροφοριών έχει αυξηθεί τόσο πολύ που η ταχύτητα της μνήμης RAM που υπήρχε εκείνη την εποχή ήταν τελείως ανεπαρκής για να παρέχει κανονική λειτουργίαυπολογιστές γενικά. Ήταν απαραίτητο να αναπτυχθούν θεμελιωδώς νέες μέθοδοι αποθήκευσης πληροφοριών, τις οποίες χρησιμοποιούμε ακόμα και σήμερα.

Η δομή και η αρχή λειτουργίας της σύγχρονης μνήμης RAM

Στα σύγχρονα τσιπ μνήμης, δύο μέθοδοι αποθήκευσης πληροφοριών χρησιμοποιούνται ευρέως. Το πρώτο βασίζεται στη γνωστή ιδιότητα του πυκνωτή να διατηρεί επαρκώς το συσσωρευμένο φορτίο πολύς καιρός, ώστε να μπορεί να χρησιμοποιηθεί για βραχυπρόθεσμη αποθήκευση μιας μονάδας πληροφοριών. Το δεύτερο περιλαμβάνει τη χρήση ενός μόνο σκανδάλη τρανζίστορ για την αποθήκευση κάθε bit πληροφοριών. Ας δούμε και τις δύο μεθόδους με περισσότερες λεπτομέρειες.

Δυναμική μνήμη

Η εγγραφή πληροφοριών σε μια κυψέλη πυκνωτή πραγματοποιείται με φόρτιση αυτού του πυκνωτή σε επίπεδο που αντιστοιχεί σε ένα λογικό μηδέν ή ένα. Ένα τρανζίστορ συνδεδεμένο με τον πυκνωτή, το οποίο ανοίγει υπό την επίδραση ενός σήματος ελέγχου, εξασφαλίζει τη φόρτιση στο επιθυμητό επίπεδο. Αποδεικνύεται ότι κάθε κυψέλη αποθήκευσης bit πληροφοριών είναι ένα ζεύγος τρανζίστορ συν πυκνωτή.

Σχηματικό διάγραμμα δυναμικής κυψέλης μνήμης

Το κύριο πλεονέκτημα είναι το χαμηλό κόστος παραγωγής και το μικρό μέγεθος κάθε κυψέλης. Η μοντέρνα βάση στοιχείων καθιστά δυνατή την υποδοχή εκατομμυρίων παρόμοιων ζευγών για το καθένα τετραγωνικό χιλιοστότσιπ μνήμης.

Το κύριο μειονέκτημα αυτής της μεθόδου αποθήκευσης πληροφοριών είναι συνέπεια των φυσικών ιδιοτήτων των πυκνωτών. Όπως γνωρίζετε, οποιοσδήποτε πυκνωτής, ανεξάρτητα από το πόσο καλά είναι σχεδιασμένος και κατασκευασμένος, έχει μια τόσο δυσάρεστη παράμετρο όπως το ρεύμα διαρροής. ΚΑΙ σχετική αξίααυτό το ρεύμα είναι αντιστρόφως ανάλογο με τις γεωμετρικές διαστάσεις του στοιχείου. Κατά συνέπεια, ο χρόνος κατά τον οποίο εκφορτίζεται ο πυκνωτής είναι μικρότερος, τόσο μικρότερος είναι ο ίδιος ο πυκνωτής. Στα τσιπ μνήμης, τα μεγέθη του καθενός χωρητικό στοιχείομετρώνται σε δεκάδες νανόμετρα και ο χρόνος αυτοεκφόρτισης τους είναι χιλιοστά του δευτερολέπτου. Είναι προφανές ότι για να αποθηκευτεί η πληροφορία που καταγράφεται σε μια κυψέλη μνήμης για μια χρονική περίοδο επαρκή για την επεξεργασία της, πρέπει να ενημερώνεται με συχνότητα που να εξαλείφει τις απώλειες από την αυτοεκφόρτιση των πυκνωτών. Επομένως, στα τσιπ μνήμης που βασίζονται σε κυψέλες πυκνωτών, υπάρχει συνεχής διαδικασίαενημέρωση αποθηκευμένων πληροφοριών. Αυτή η διαδικασία ονομάζεται αναγέννηση και παρέχονται ειδικοί ελεγκτές σε μονάδες μνήμης για την πραγματοποίησή της.

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

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

Στατική μνήμη

Στα συστήματα μνήμης ενεργοποίησης, κάθε bit πληροφοριών αποθηκεύεται σε μεμονωμένα flip-flops, τα οποία είναι στην πραγματικότητα ομάδες από έξι έως οκτώ τρανζίστορ. Δεδομένου ότι η κατάσταση της σκανδάλης εξαρτάται αποκλειστικά από την παρουσία ενός σήματος ελέγχου και δεν αλλάζει με την πάροδο του χρόνου (εφόσον υπάρχει τάση τροφοδοσίας), αυτός ο τύπος μνήμης ονομάζεται στατική μνήμη. Το κύριο πλεονέκτημα της στατικής μνήμης RAM είναι η εξαιρετικά υψηλή της απόδοση, αφού η σκανδάλη αλλάζει σχεδόν αμέσως όταν εφαρμόζεται το αντίστοιχο σήμα ελέγχου στην είσοδο του στοιχείου.

Τα μειονεκτήματα είναι επίσης αρκετά προφανή. Το πρώτο είναι πολύ περισσότερο υψηλή τιμήσε σύγκριση με τη δυναμική μνήμη. Η δημιουργία μιας ομάδας μισής ντουζίνας τρανζίστορ σε ένα κομμάτι πυριτίου είναι πολύ πιο δύσκολη και ακριβή από ένα ζεύγος πυκνωτή συν τρανζίστορ.

Το δεύτερο μειονέκτημα είναι σημαντικό μεγάλα μεγέθηκάθε κυψέλη μνήμης, γεγονός που οδηγεί σε σημαντική αύξηση του μεγέθους κάθε τσιπ μνήμης.

Αντί για έξοδο

Σήμερα, τόσο στατικά όσο και δυναμικού τύπουΕΜΒΟΛΟ. Οι συμβατικές μονάδες μνήμης είναι χτισμένες σε φθηνότερα δυναμικά στοιχεία, εμφάνισηπου είναι γνωστά σε όποιον έχει δει ποτέ ανοιχτό υπολογιστή. Η στατική μνήμη χρησιμοποιείται κυρίως όπου η υψηλή απόδοση είναι πιο σημαντική από την εξοικονόμηση κόστους και μεγέθους. Αυτή είναι κυρίως η μνήμη cache του επεξεργαστή. Η ταχύτητα της κρυφής μνήμης καθορίζει σε μεγάλο βαθμό τη συνολική ταχύτητα των σύγχρονων επεξεργαστών, η οποία καθορίζει τη χρήση ακριβότερης και ταχύτερης μνήμης RAM.

Ένα άλλο χαρακτηριστικό της σύγχρονης μνήμης RAM αξίζει ιδιαίτερης αναφοράς - η μεταβλητότητά της. Τόσο τα κυκλώματα πυκνωτών όσο και οι σαγιονάρες αποθηκεύουν τις πληροφορίες που έχουν καταγραφεί σε αυτά μέχρι να απενεργοποιηθεί η τάση τροφοδοσίας. Μόλις απενεργοποιηθεί η τροφοδοσία, όλες οι πληροφορίες διαγράφονται χωρίς ίχνος. Αυτός είναι ο κύριος λόγος που οποιοσδήποτε υπολογιστής, μετά την απενεργοποίησή του, είναι απασχολημένος για μεγάλο χρονικό διάστημα με την εκκίνηση του λειτουργικού συστήματος, όλων των υπηρεσιών και προγραμμάτων κατοίκου. Για αρκετό καιρό στη μεγαλύτερη έρευνα έρχονται τα κέντραανάπτυξη μη πτητικής μνήμης RAM, η οποία θα αποθηκεύει πληροφορίες που καταγράφονται σε αυτήν για μεγάλο χρονικό διάστημα και χωρίς να παρέχει τάση τροφοδοσίας. Τα λειτουργικά πρωτότυπα υπάρχουν ήδη, αλλά εξακολουθούν να είναι πολύ ακριβά και αναξιόπιστα για μαζική χρήση.

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

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

Σε αυτό το άρθρο:

  • Ορισμός μεταβλητών
  • Μεταβλητές γραμμή εντολών(παράμετροι για την κλήση του αρχείου bat)
  • IF υπό όρους χειριστή
  • Λειτουργίες
  • Χρήση τιμών επιστροφής (επεξεργασία κωδικού εξόδου)

Ορισμός μεταβλητών

ΣΕΙΡΑ<Имяпеременной>=<Значениепеременной>

Ο τελεστής SET είναι μια επέκταση της δυνατότητας εργασίας με παραμέτρους λειτουργικό σύστημα. Καθορίζει μια μεταβλητή της οποίας η τιμή αντικαθιστά το όνομά της κάθε φορά που αυτό το όνομα χρησιμοποιείται μεταξύ των συμβόλων ποσοστού. Έτσι, εάν οριστεί (μια μεταβλητή που χρησιμοποιούν πολλά παιχνίδια κάρτα ήχουυπολογιστή):

ΣΕΤ BLASTER=A220 I5 D1 P330

τότε όταν χρησιμοποιείτε την ακόλουθη κατασκευή σε ένα αρχείο δέσμης:

ECHO %BLASTER%

Θα εμφανιστεί η ένδειξη "A220 I5 D1 P330". Οι μεταβλητές που ορίζονται χρησιμοποιώντας την πρόταση SET καλούνται μεταβλητές περιβάλλοντοςπεριβάλλον και είναι ορατά μετά την εκτέλεση έως ότου γίνει επανεκκίνηση του DOS (εκτός εάν αλλάξει χειροκίνητα στη μνήμη). Δηλαδή, μπορεί να χρησιμοποιηθεί από ένα αρχείο δέσμης ή πρόγραμμα αφού καθοριστεί σε άλλο. Η πιο γνωστή είναι η μεταβλητή PATH, η οποία είναι ένα σύνολο μονοπατιών για γρήγορη αναζήτησηαρχεία. Έχει οριστεί στο αρχείο autoexec.bat.

Μεταβλητές Γραμμής Εντολών
(παράμετροι για την κλήση του αρχείου bat)

%<цифра 0-9>

Όπως σε κάθε γλώσσα, στη γλώσσα του αρχείου δέσμης είναι δυνατό να χρησιμοποιηθούν μεταβλητές που λαμβάνονται ως παράμετροι του αρχείου bat.

Μπορεί να υπάρχουν συνολικά 10 ανεξάρτητες μεταβλητές ταυτόχρονα. Για το γράψιμο σύνθετα προγράμματααυτό είναι αρκετά μικρό όμως για τακτική εργασίαΣυχνά 3-4 είναι αρκετά. Η τιμή της μεταβλητής είναι ίση με την τιμή της αντίστοιχης παραμέτρου από τη γραμμή εντολών. Η μεταβλητή %0 θα περιέχει το όνομα του αρχείου .bat και, εάν το έχετε καθορίσει, τη διαδρομή προς αυτό. Δηλαδή, εάν εκτελέσατε το αρχείο abc.bat με τις ακόλουθες παραμέτρους:

abc.bat a bc ορ

τότε η μεταβλητή %0 θα περιέχει την τιμή abc.bat , το %1 θα περιέχει την τιμή a , το %2 θα περιέχει bc και το %3 θα περιέχει def . Αυτή η ιδιότητα χρησιμοποιείται ευρέως για τη δημιουργία ευέλικτων ομαδικών αρχείων όταν αντιμετωπίζετε επαναλαμβανόμενες λειτουργίες.

Για να λάβετε περισσότερες από 10 μεταβλητές από τη γραμμή εντολών, μπορείτε να χρησιμοποιήσετε την εντολή SHIFT.

Η εντολή SHIFT σάς επιτρέπει να χρησιμοποιείτε περισσότερες από 10 παραμέτρους γραμμής εντολών, ωστόσο, οι αντίστοιχες προηγούμενες παράμετροι χάνονται. Με άλλα λόγια, η εντολή SHIFT μετατοπίζει όλες τις τιμές των μεταβλητών ένα βήμα προς τα αριστερά. Δηλαδή, η μεταβλητή %0 θα περιέχει την τιμή που περιλαμβανόταν προηγουμένως στη μεταβλητή %1 και η μεταβλητή %1 θα περιέχει την τιμή της μεταβλητής %2 πριν από τη μετατόπιση. Ωστόσο, αυτή η λειτουργίαείναι μη αναστρέψιμη, δηλαδή είναι αδύνατη η μετατόπιση των μεταβλητών προς τα πίσω.

IF υπό όρους χειριστή

Ευτυχώς, διερμηνέας εντολώνΤο cmd.exe στα σύγχρονα Windows 2000 και μεταγενέστερα υποστηρίζει μπλοκ εντολών σε κατασκευές διακλάδωσης, εξαλείφοντας την ανάγκη χρήσης IF με ετικέτες. Τα μπλοκ εντολών περικλείονται σε παρένθεση. Μοιάζει με αυτό (απομίμηση στυλ εσοχής C/C++):

αν συνθήκη (

Εντολές Rem του κλάδου «τότε».

Ρεμ...

) άλλο (

Εντολές Rem του κλάδου «άλλο».

Ρεμ...

Συγκεκριμένο παράδειγμαχρήσεις:

@echo off

ορίστε BUILDMODE=%1

εάν "%BUILDMODE%" == "" (

Echo FAIL: Απαιτείται όρισμα ^(--debug, --release^)

Έξοδος /b 1

rem Καταργήστε όλες τις παύλες από το όρισμα για να απλοποιήσετε την επεξεργασία

ορίστε BUILDMODE=%BUILDMODE:-=%

if "%BUILDMODE%" == "debug" (

Ορίστε CCFLAGS=/Od /MDd /Z7

) άλλο (

Ρύθμιση CCFLAGS=/O2 /MD

Κατά τη γνώμη μου, αυτό είναι πολύ πιθανό να το ζήσεις. Όμως, όπως πάντα, η ζωή δεν είναι τόσο απλή όσο φαίνεται. Υπάρχει ένα πρόβλημα. Οι μεταβλητές που χρησιμοποιούνται στα μπλοκ then and else επεκτείνονται πριν από την έναρξη της εκτέλεσης των μπλοκ και όχι κατά την εκτέλεση. Στο παραπάνω παράδειγμα αυτό δεν προκαλεί κανένα πρόβλημα, αλλά στο παρακάτω θα:

if "%BUILDMODE%" == "debug" (

Echo INFO: Ρύθμιση της λειτουργίας εντοπισμού σφαλμάτων περιβάλλοντος

Ορισμός OPTFLAGS=/Od

Ορίστε CCFLAGS=%OPTFLAGS% /MDd /Z7

) άλλο (

Echo INFO: Ρύθμιση της λειτουργίας απελευθέρωσης περιβάλλοντος

Ορίστε OPTFLAGS=/O2

Ορίστε CCFLAGS=%OPTFLAGS% /MD

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

Αυτό το πρόβλημα επιλύεται με τη χρήση καθυστερημένης επέκτασης μεταβλητής. Μεταβλητές που περιέχονται στο !…! αντί για %...% , οι έννοιές τους θα αποκαλυφθούν μόνο τη στιγμή της άμεσης χρήσης. Αυτή η λειτουργίααπενεργοποιημένο από προεπιλογή. Μπορείτε να το ενεργοποιήσετε είτε χρησιμοποιώντας το διακόπτη /V:ON όταν καλείτε το cmd.exe είτε χρησιμοποιώντας την εντολή:

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

Με αυτά τα λόγια, το προηγούμενο "λάθος" παράδειγμα θα μπορούσε να διορθωθεί ως εξής:

setlocal enabledelayedexpansion

if "%BUILDMODE%" == "debug" (

Echo INFO: Ρύθμιση περιβάλλοντος λειτουργίας εντοπισμού σφαλμάτων

Ορισμός OPTFLAGS=/Od

Ορίστε CCFLAGS=!OPTFLAGS! /MDd /Z7

) άλλο (

Echo INFO: Ρύθμιση περιβάλλοντος λειτουργίας απελευθέρωσης

Ορίστε OPTFLAGS=/O2

Ορίστε CCFLAGS=!OPTFLAGS! /ΜΔ

Τώρα αυτό είναι σχεδόν ένα πλήρες μπλοκ αν-τότε-άλλο. Σχεδόν, επειδή αν συναντήσετε μια παρένθεση κλεισίματος σε μια από τις εντολές echo, πρέπει να διαφύγετε με έναν χαρακτήρα ^, διαφορετικά ο αναλυτής θα μπερδευτεί...

Αλλά σε κάθε περίπτωση, αυτό είναι πολύ καλύτερο από τον τρελό αριθμό ετικετών και μεταβάσεων.

Λειτουργίες

Είναι δυνατή η δημιουργία μιας συνάρτησης σε ένα αρχείο bat; Ναι μπορείς. Επιπλέον, μερικές φορές είναι ακόμη και απαραίτητο. Είναι αλήθεια ότι αυτές μπορούν να ονομαστούν συναρτήσεις υπό όρους.

Υπάρχει μια ειδική σύνταξη για την εντολή κλήσης, η οποία σας επιτρέπει να μεταβείτε σε ένα σημάδι στο ίδιο αρχείο bat, θυμίζοντας το μέρος από όπου έγινε αυτή η κλήση:

ορίσματα call:label

Η συνάρτηση επιστρέφεται με την εντολή:

έξοδος /b [προαιρετικός κωδικός επιστροφής]

Το πλήκτρο /b είναι πολύ σημαντικό εδώ: χωρίς αυτό, δεν θα βγείτε από τη συνάρτηση, αλλά από το σενάριο γενικά.

Για λεπτομέρειες, πληκτρολογήστε στη γραμμή εντολών:

κλήση/;

έξοδος /?

Είναι ενδιαφέρον ότι η εντολή κλήσης με αυτήν τη σύνταξη υποστηρίζει αναδρομικές κλήσεις με αυτόματη δημιουργίανέο πλαίσιο για μεταβλητά ορίσματα %0-%9. Μερικές φορές αυτό μπορεί να είναι χρήσιμο. Εδώ κλασικό παράδειγμααναδρομικός υπολογισμός παραγοντικού στη γλώσσα εντολών:

@echo off

κλήση:παραγοντικό %1

ηχώ %RESULT%

έξοδος

rem Συνάρτηση για τον υπολογισμό της παραγοντικής τιμής

rem Είσοδος:

rem %1 Ο αριθμός για τον οποίο θέλετε να υπολογίσετε το παραγοντικό

rem Έξοδος:

rem %RESULT% Παραγοντική τιμή

:παραγοντικό

αν %1 == 0 (

Ορίστε RESULT=1

Έξοδος /b

αν %1 == 1 (

Ορίστε RESULT=1

Έξοδος /b

ορίστε /a PARAM=%1 - 1

κλήση:factorial %PARAM%

set /a RESULT=%1 * %RESULT%

έξοδος /β

Παράδειγμα εργασίας:

> factorial.bat 10

3628800

Χρήση τιμών επιστροφής
(επεξεργασία κωδικού εξόδου προγράμματος)

Όταν οποιοδήποτε πρόγραμμα ολοκληρώσει την εργασία του, επιστρέφει τον κωδικό τερματισμού του στο λειτουργικό σύστημα. Είναι σύνηθες να επιστρέφετε το μηδέν μετά την επιτυχή ολοκλήρωση, διαφορετικά ένας κωδικός σφάλματος. Μερικές φορές, ή μάλλον συχνά, ένα πρόγραμμα επιστρέφει "σκόπιμα" μια μη μηδενική τιμή, ώστε ορισμένες λεπτομέρειες της λειτουργίας του να μπορούν να "μάθουν" στο αρχείο δέσμης. Για παράδειγμα, το πρόγραμμα επιστρέφει τον κωδικό του πατημένου πλήκτρου και το αρχείο .bat εκτελεί διάφορες ενέργειες βάσει αυτού.

Πώς μπορεί ένα αρχείο δέσμης να βρει τον κωδικό εξόδου του εκτελεσμένου προγράμματος; Για το σκοπό αυτό παρέχεται η μεταβλητή κλειδιού ERRORLEVEL.

Παράδειγμα ομαδικού αρχείου με επίπεδα σφαλμάτων:

@ECHO OFF

REM Εκτελέστε το πρόγραμμα prg1.exe

PRG1.EXE

Ανάλυση κώδικα ολοκλήρωσης REM

ΑΝ ΒΡΕΘΗΚΕ ΕΠΙΠΕΔΟ ΣΦΑΛΜΑΤΟΣ 2 GOTO FILENOT

ΕΑΝ ΕΠΙΠΕΔΟ ΣΦΑΛΜΑΤΟΣ 1 GOTO WRITEERR

ΑΝ ΕΠΙΠΕΔΟ ΣΦΑΛΜΑΤΟΣ 0 GOTO EXITOK

GOTO ONEXIT

:ΤΟ ΑΡΧΕΙΟ ΔΕ ΒΡΕΘΗΚΕ

Σφάλμα ECHO! Το αρχείο δε βρέθηκε!

GOTO ONEXIT

:ΣΥΓΓΡΑΦΕΑΣ

ECHO Σφάλμα εγγραφής!

GOTO ONEXIT

:EXITOK

ECHO Το πρόγραμμα ολοκληρώθηκε με επιτυχία.

GOTO ONEXIT

:ONEXIT

Σημειώστε ότι η ανάλυση του κωδικού εξόδου δεν ξεκινά από το μηδέν, αλλά από τη μέγιστη δυνατή τιμή. Το γεγονός είναι ότι ένας τέτοιος έλεγχος σημαίνει: "αν το επίπεδο σφάλματος είναι μεγαλύτερο ή ίσο με την τιμή, τότε...". Δηλαδή, αν ελέγξουμε ξεκινώντας από το μηδέν, οποιαδήποτε τιμή θα ισχύει στην πρώτη γραμμή, κάτι που είναι λάθος.

Αυτό είναι το πιο συνηθισμένο σφάλμα σε αυτού του είδους τα προγράμματα.

Οχι τυπική μέθοδοςδημιουργούν μαζικά αρχεία επειδή η συντριπτική πλειονότητα των δημιουργών και των συντηρητών τους είτε δεν κατανοούν τις έννοιες προγραμματισμού είτε πιστεύουν ότι δεν ισχύουν για ομαδικά αρχεία.

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

Υπάρχουν κάποια πρότυπα κωδικοποίησης που λένε: εάν γράψετε μια δήλωση if, θα πρέπει να χρησιμοποιήσετε σιδερακια ΔΟΝΤΙΩΝ, ακόμα κι αν δεν έχετε άλλη ρήτρα. Σας εξοικονομεί από λεπτές, δύσκολα στον εντοπισμό σφαλμάτων ζητήματα και είναι ξεκάθαρα αναγνώσιμο. Δεν βλέπω κανένα λόγο για τον οποίο δεν θα μπορούσατε να εφαρμόσετε αυτό το σκεπτικό σε ομαδικά αρχεία.

Κοιτάξτε τον κωδικό σας.

ΑΝ ΥΠΑΡΧΕΙ somefile.txt ΑΝ ΥΠΑΡΧΕΙ someotherfile.txt SET var=somefile.txt,someotherfile.txt

Και η σύνταξη if, από την εντολή HELP IF:

IF ERRORLEVEL εντολή αριθμός IF string1==string2 εντολή IF EXISTS όνομα αρχείου εντολή ... IF EXIST όνομα αρχείου (εντολή) ELSE (άλλη εντολή)

Έτσι αλυσιδώνετε τα ifs ως εντολές.

Εάν χρησιμοποιείτε τον τυπικό τυπικό κανόνα κωδικοποίησης που ανέφερα παραπάνω, θα θέλατε πάντα να χρησιμοποιείτε παρέντες. Δείτε πώς θα μπορούσατε να το κάνετε για το παράδειγμα του κώδικα σας:

ΑΝ ΥΠΑΡΧΕΙ "someotherfile.txt" (ΑΝ ΥΠΑΡΧΕΙ "someotherfile.txt" (SET var="somefile.txt,someotherfile.txt"))

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

Επιπλέον, θα πρέπει επίσης να κάνετε συνήθεια να αναφέρετε πάντα τα ονόματα των αρχείων σας και να λαμβάνετε δικαιώματα αναφοράς. Υπάρχουν πολλές λέξεις στα HELP FOR και HELP SET που θα σας βοηθήσουν να αφαιρέσετε επιπλέον εισαγωγικά όταν επαναφέρετε συμβολοσειρές.

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

Το καλύτερο στοίχημά σας είναι να γράψετε μια υπορουτίνα που ελέγχει την ύπαρξη ενός μόνο αρχείου και προσθέτει σε μια μεταβλητή εάν καθορισμένο αρχείουπάρχει τότε απλώς καλέστε αυτήν τη ρουτίνα για κάθε αρχείο που θέλετε να ελέγξετε.

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

Η υπό όρους πρόταση cmd if περιέχει σχεδόν την ίδια σύνταξη με παρόμοιες δομές στις γλώσσες διακομιστή δέσμης ενεργειών VBScript (δείτε το άρθρο "") και Jscript (άρθρο "").

γραμμή εντολών if statement

εάν συνθήκη (δήλωση 1)

Στην αρχή Ελεγχοςσυνθήκη, εάν ικανοποιείται, η μετάβαση πηγαίνει στην εκτέλεση του τελεστή1, εάν όχι, στον τελεστή2. Αν μετά λέξη-κλειδίεάν εγγραφείτε όχι (αν όχι), τότε: η συνθήκη θα ελεγχθεί εάν δεν πληρούται, η μετάβαση στον τελεστή1, η μετάβαση στον τελεστή2. Η χρήση παρενθέσεων είναι προαιρετική, αλλά αν χρειαστεί να εκτελέσετε πολλές εντολές cmd αν ταυτόχρονα μετά τον έλεγχο μιας συνθήκης, τότε απαιτούνται παρενθέσεις.

ας ανοίξουμε πρόγραμμα επεξεργασίας σημειωματάριων++ και γράψτε τον ακόλουθο κώδικα σε αυτό:

Εδώ, όπως και πριν, ελέγχεται η παράμετρος που μεταβιβάστηκε στο σενάριο, εάν η τιμή είναι 1, τότε θα εκτελεστούν διαδοχικά τρεις εντολές:

  • όνομα κεντρικού υπολογιστή– εμφανίζει το όνομα του υπολογιστή
  • ver– εμφανίζει την έκδοση του λειτουργικού συστήματος
  • ipconfig /all– εμφανίζει τις ρυθμίσεις δικτύου

Για διαδοχική εκτέλεσηεντολές χρησιμοποιήσαμε το σύμβολο συνένωσης "&". Εάν δεν πληρούται η προϋπόθεση, θα κληθεί το βοηθητικό πρόγραμμα netstat.

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

@ echo off set Var1 =100 αν ορίζεται Var1 (echo % Var1%) set Var1 = αν δεν ορίζεται Var1 (echo ΔΕΝ ΥΠΑΡΧΕΙ!!! Var1)

Αν τρέξεις αυτόν τον κωδικό, τότε θα εμφανιστούν δύο γραμμές στο παράθυρο της γραμμής εντολών:

100
ΔΕΝ ΥΠΑΡΧΕΙ!!! Var1

Πρώτα, η δέσμη ενεργειών δημιουργεί τη μεταβλητή Var1 και της εκχωρεί την τιμή 100 και, στη συνέχεια, ελέγχει: εάν υπάρχει η μεταβλητή Var1, εκτυπώστε την τιμή της. Στη συνέχεια διαγράφουμε τη μεταβλητή και εκτελούμε ξανά τον έλεγχο: αν η μεταβλητή Var1 δεν υπάρχει, εκτυπώστε τη γραμμή ΔΕΝ ΥΠΑΡΧΕΙ!!! Var1.

Έχουμε το δικαίωμα να χρησιμοποιήσουμε τη δήλωση υπό όρους if ως ένθετη:

Απενεργοποίηση @ echo εάν "%1" =="1" (@ εάν "%2" =="2" (όνομα κεντρικού υπολογιστή & έκδοση) other (ver) ) other (όνομα κεντρικού υπολογιστή & έκδοση & netstat -a)

Σε αυτό το παράδειγμα, η πρώτη δήλωση γραμμής εντολών if ελέγχει εάν το πρώτο όρισμα είναι ίσο με 1, εάν ναι, τότε εκτελείται η δεύτερη υπό όρους δήλωση και ελέγχεται η τιμή του άλλου ορίσματος.

Σημείωση!!! Όλες οι μεταβλητές ορίζονται ως συμβολοσειρές. Κατά τη δοκιμή της συνθήκης, έκλεισα τα ονόματα των μεταβλητών και των τιμών διπλά εισαγωγικά, αποφεύγονται σφάλματα, καθώς οι παράμετροι ή τα ορίσματα μπορεί να περιέχουν κενά ή η μεταβλητή μπορεί να μην έχει καθόλου τιμή.

Ας δούμε τώρα αυτό το παράδειγμα:

Σε αυτήν την περίπτωση, θα περάσουμε τη συμβολοσειρά SLOVO, slovo, SloVo και ούτω καθεξής, και η συμβολοσειρά "slovo" θα εμφανιστεί στην οθόνη της κονσόλας, καθώς η ευαισθησία πεζών-κεφαλαίων θα είναι απενεργοποιημένη.

Εάν η εντολή γραμμή εντολών, τελεστές σύγκρισης

Εκτός από τον τελεστή σύγκρισης "==", μπορείτε να χρησιμοποιήσετε άλλους τελεστές για να ελέγξετε μια συνθήκη:

  • εξισ«Ίσοι». Επιστρέφει True αν οι τιμές είναι ίσες
  • αρ«Όχι ίσοι». Επιστρέφει True εάν οι τιμές δεν είναι ίσες
  • lss"Πιο λιγο". Επιστρέφει True εάν η τιμή1 είναι μικρότερη από την τιμή2
  • lcq«Λιγότερο ή ίσο». Επιστρέφει True εάν η τιμή1 είναι ίση ή μικρότερη από την τιμή2
  • gtr"Περισσότερο". Επιστρέφει True εάν η τιμή1 είναι μεγαλύτερη από την τιμή2
  • geq«Περισσότερο ή ίσο». Επιστρέφει True εάν η τιμή1 είναι ίση ή μεγαλύτερη από την τιμή2

Σε αυτό το άρθρο, εξετάσαμε τη δήλωση υπό όρους της γραμμής εντολών if.



Έχετε ερωτήσεις;

Αναφέρετε ένα τυπογραφικό λάθος

Κείμενο που θα σταλεί στους συντάκτες μας: