Βιβλιοθήκη (υπολογιστές): Διαφορά μεταξύ των αναθεωρήσεων
Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
μ Ρομπότ: Τροποποίηση: zh:函式庫 |
μΧωρίς σύνοψη επεξεργασίας |
||
Γραμμή 4:
== Λειτουργία ==
Ένα αρχείο πηγαίου κώδικα υψηλού επιπέδου γραμμένο σε κάποια γλώσσα προγραμματισμού, μεταγλωττίζεται σε ένα αντίστοιχο αρχείο [[assembly|συμβολικού κώδικα]] (assembly) από τον κατάλληλο [[μεταγλωττιστής|μεταγλωττιστή]] (compiler). Το προκύπτον αρχείο στη συνέχεια μετασχηματίζεται σε [[αντικειμενικό αρχείο]] [[γλώσσα μηχανής|γλώσσας μηχανής]] από έναν [[assembler|συμβολομεταφραστή]] (assembler), μία διαδικασία που μετατρέπει τον κώδικα σε αρχείο άμεσα εκτελέσιμο από τον [[μικροεπεξεργαστής|επεξεργαστή]]. Η συμβολική γλώσσα και η γλώσσα μηχανής είναι ίδιου επιπέδου και υπάρχει αμφιμονοσήμαντη αντιστοιχία μεταξύ τους,
Έτσι, τελικά, σε κάθε αρχείο πηγαίου κώδικα, είτε αυτό είναι αυτόνομο (με «σημείο εισόδου εκτέλεσης», π.χ. στη γλώσσα [[C (γλώσσα προγραμματισμού)|C]] η συνάρτηση <code>main()</code> από την οποία εκκινεί η εκτέλεση ενός προγράμματος) είτε όχι (π.χ. αρχείο βιβλιοθήκης), αντιστοιχίζεται ένα αντικειμενικό αρχείο με κώδικα μηχανής (αρχεία με επέκταση «.o» στο [[Unix]] και «.obj» στα [[Windows]]). Ένα αντικειμενικό αρχείο περιέχει εκτελέσιμο κώδικα, δηλώσεις δεδομένων,
Προκειμένου να επιτύχει τους στόχους του ο συνδέτης, ανάμεσα στ' άλλα, προβαίνει σε ένα πρώτο βήμα ''επανατοποθέτησης''. Αυτό σημαίνει ότι κάθε τμήμα κώδικα μηχανής που εισάγει και τακτοποιεί στο τελικό εκτελέσιμο αρχείο, είτε είναι από αντικειμενικό αρχείο που έδωσε ως είσοδο στον συνδέτη ο χρήστης είτε από αντικειμενικό αρχείο βιβλιοθήκης, το τροποποιεί κατάλληλα ώστε τελικά όλες οι [[διεύθυνση μνήμης|διευθύνσεις μνήμης]] εντολών και δεδομένων στο τελικό εκτελέσιμο να είναι συνεπείς μεταξύ τους, να μην επικαλύπτονται και να είναι σχετικές ως προς μία κοινή διεύθυνση βάσης. Αυτό το βήμα είναι απαραίτητο γιατί ο μεταγλωττιστής νωρίτερα είχε δράσει θεωρώντας ξεχωριστό [[χώρος διευθύνσεων|χώρο διευθύνσεων]] για κάθε αντικειμενικό αρχείο με διαφορετικές διευθύνσεις βάσης. Συνήθως, για διευκόλυνση του προγραμματιστή, ο μεταγλωττιστής, ο συμβολομεταφραστής και ο συνδέτης καλούνται με μία μόνο εντολή και με τη σωστή σειρά· αν ωστόσο ο προγραμματιστής το επιθυμεί, μπορεί περνώντας κάποια κατάλληλη παράμετρο να τροποποιήσει αυτήν τη συμπεριφορά (π.χ. στον μεταγλωττιστή της C [[gcc]] με την παράμετρο «-c» παραλείπεται η σύνδεση). Τα αντικειμενικά αρχεία υπακούν σε διάφορα προτυποποιημένα [[μορφότυπο|μορφότυπα]] (format), τα οποία καθορίζουν τη δομή τους και, συνήθως, είναι ίδια και για τα τελικά εκτελέσιμα αρχεία. Επιπλέον, τα μορφότυπα αυτά είναι ίδια τόσο για τα αυτόνομα εκτελέσιμα αρχεία όσο και για τις βιβλιοθήκες. Σύνηθες μορφότυπο εκτελέσιμου αρχείου στα Windows είναι το ''PE'', ενώ στο Unix το ''ELF''.
Όταν επίκειται το «τρέξιμο» (εκτέλεση) ενός εκτελέσιμου αρχείου, εκτελείται πρώτα ένα κατάλληλο πρόγραμμα του λειτουργικού συστήματος (ΛΣ): ο '''φορτωτής''' (loader). Ο τελευταίος αντιγράφει τα περιεχόμενα του εκτελέσιμου από τον δίσκο στη μνήμη, δίνει κατάλληλες τιμές σε εσωτερικές δομές του πυρήνα (αφού ουσιαστικά εκκινείται μία νέα [[διεργασία (υπολογιστές)|διεργασία]]) και ειδοποιεί σχετικά το υποσύστημα εικονικής μνήμης, ενώ, αν το τελευταίο δεν είναι διαθέσιμο, κάτι σπάνιο σήμερα αφού όλα τα μοντέρνα ΛΣ χρησιμοποιούν [[εικονική μνήμη]], τροποποιεί επιπλέον τον κώδικα του προγράμματος με ένα δεύτερο βήμα επανατοποθέτησης: η διεύθυνση βάσης, ως προς την οποία γίνονται όλες οι αναφορές μνήμης εντός του κώδικα, παίρνει την τιμή της θέσης μνήμης στην οποία πραγματικά φορτώθηκε η πρώτη εντολή του προγράμματος. Αυτή η θέση μνήμης δεν είναι γνωστή πριν από τη φόρτωση (εκτός αν το ΛΣ δεν είναι [[πολυδιεργασία|πολυδιεργασιακό]], όπως το [[MS-DOS]], κάτι πολύ σπάνιο σήμερα), οπότε αυτή η επανατοποθέτηση όλου του εκτελέσιμου πρέπει να γίνεται σε κάθε εκτέλεση. Αν όμως το ΛΣ παρέχει
== Κατηγορίες ==
Οι βιβλιοθήκες
Η
Με το πέρασμα του χρόνου το μόνο που επιβίωσε από αυτά τα πρότυπα είναι το COM της [[Microsoft]] (με το DCOM να είναι η κατανεμημένη εκδοχή του). Εξαίρεση αποτέλεσε ο προγραμματιστικός κόσμος της [[Java]] ο οποίος ακολούθησε τη δική του οδό, αφού τα προγράμματα και οι βιβλιοθήκες της Java δεν μεταγλωττίζονται σε εγγενή κώδικα μηχανής αλλά σε έναν ενδιάμεσο, κοινό για όλες τις [[αρχιτεκτονική υπολογιστών|αρχιτεκτονικές υπολογιστών]], [[bytecode]], ο οποίος για να τρέξει [[διερμηνέας (πληροφορική)|διερμηνεύεται]] σε χρόνο εκτέλεσης από μία ''Εικονική Μηχανή Java'', ένα περιβάλλον εκτέλεσης που τοποθετείται πάνω από το ΛΣ. Στην Java κάθε κλάση μεταγλωττίζεται σε ένα αρχείο με επέκταση «.class», αντίστοιχο του αντικειμενικού αρχείου, το οποίο περιέχει bytecode, ενώ ένα αυτόνομο πρόγραμμα είναι απλώς μία κλάση που περιέχει μία μέθοδο με όνομα <code>main()</code> ως σημείο εισόδου. Ο συνδέτης και ο φορτωτής αποτελούν τμήματα της Εικονικής Μηχανής Java και καλούνται αυτόματα και δυναμικά όταν επίκειται εκτέλεση ενός αρχείου .class. Μία συλλογή αρχείων .class που δεν περιέχουν μεθόδους <code>main()</code>, ουσιαστικά δηλαδή μία βιβλιοθήκη κλάσεων, μπορεί να συνενωθεί σε ένα συμπιεσμένο αρχείο «.jar», το οποίο δεν είναι παρά ένα ανεξάρτητο αρχιτεκτονικής μορφότυπο μεταγλωττισμένων (σε bytecode) βιβλιοθηκών κλάσεων.
|