B. Περίγραμμα του Μαθήματος «Μικροϋπολογιστές»

  1. Οι έννοιες του μικροϋπολογιστή, του μικροεπεξεργαστή και της assembly: Στην επιστήμη των υπολογιστών ο von Neumann (John Louis von Neumann, 1903–1957, Ούγγρος Μαθηματικός) θεωρείται ο πατέρας των σύγχρονων υπολογιστών και η αρχιτεκτονική von Neumann (σύμφωνα με την οποία μια υπολογιστική μηχανή αποτελείται από μονάδες εισόδου, κεντρική μονάδα επεξεργασίας, κεντρική μνήμη, μονάδα ελέγχου και μονάδες εξόδου), χρησιμοποιείται σχεδόν σε όλους τους ηλεκτρονικούς υπολογιστές. Ο όρος αρχιτεκτονική von Neumann (von Neumann architecture), γνωστός και ως το μοντέλο von Neumann (von Neumann model) προήλθε από μια πρόταση γραμμένη χειρόγραφα από τον von Neumann για την αρχιτεκτονική των υπολογιστών με τίτλο “First draft of a report on the EDVAC”, η οποία είναι γνωστή και ως “First draft”. Την πρόταση αυτή την τύπωσε σε 101 σελίδες στις 30 Ιουνίου 1945 και την ανακοίνωσε στις 25 Ιουνίου 1946 ο Goldstine (Herman Heine Goldstine, 1913–2004, Αμερικάνος Μαθηματικός). Η εργασία αυτή θεωρείται ως η πρώτη δημοσιευμένη περιγραφή του λογικού σχεδιασμού ενός υπολογιστή που χρησιμοποιεί την έννοια του αποθηκευμένου προγράμματος (stored–program). Πολλοί θεωρούν ότι αυτό το μοντέλο υπολογιστών αποτελεί το αποτέλεσμα της συνολικής προσπάθειας μιας ομάδας στο Πανεπιστήμιο του Princeton των Η.Π.Α. στην οποία εκτός του von Neumann συμμετείχε ο Mauchly (John William Mauchly, 1907–1980, Αμερικάνος Φυσικός) καθώς και ο Eckert (John Adam Presper “Pres” Eckert Jr., 1919–1995, Αμερικάνος Ηλεκτρολόγος Μηχανικός), οι οποίοι είναι οι δημιουργοί του πρώτου γενικού σκοπού ηλεκτρονικού ψηφιακού υπολογιστή ENIAC. Οι τρεις αυτοί επιστήμονες μαζί με τον Turing (Alan Mathison Turing, 1912–1954, Άγγλος Μαθηματικός), θεωρούνται οι θεμελιωτές της επιστήμης των υπολογιστών και συνεχιστές της θεωρίας του Babbage (Charles Babbage, 1791–871, Άγγλος Μαθηματικός) ο οποίος πρώτος έδωσε την έννοια του προγραμματιζόμενου υπολογιστή (programmable computer). Σε αντιδιαστολή με την αρχιτεκτονική von Neumann υπάρχει η αρχιτεκτονική Harvard (Harvard architecture) της οποίας η βασική διαφορά είναι ότι διαχωρίζει τον χώρο αποθήκευσης εντολών και δεδομένων.
    Το μοντέλο von Neumann ορίζει τον υπολογιστή ως πέντε μονάδες:
    1. Μονάδα Εισόδου (Input Unit)
    2. Μονάδα Μνήμης (Memory Unit)
    3. Αριθμητική–Λογική Μονάδα (Arithmetic –Logic Unit, ALU)
    4. Μονάδα Eλέγχου (Control Unit)
    5. Μονάδα Εξόδου (Output Unit)
    Ένας υπολογιστής (δηλαδή αυτός που πραγματοποιεί διαδικασίες υπολογισμού) πρέπει να περιέχει και τα πέντε παραπάνω συστατικά στοιχεία που ορίσθηκαν από τον von Neumann, και τα οποία αναφέρονται ως υλικό υπολογιστή (computer hardware). Τα δεδομένα (data) εισάγονται στον υπολογιστή χρησιμοποιώντας την μονάδα εισόδου. Τα δεδομένα αποθηκεύονται στην μονάδα μνήμης στην οποία αποθηκεύονται και οι εντολές (instructions) του προγράμματος το οποίο αποτελείται από πεπερασμένο αριθμό εντολών οι οποίες εκτελούνται η μία μετά την άλλη (σειριακά). Η εκτέλεση μιας εντολής του αποθηκευμένου προγράμματος πραγματοποιείται στην αριθμητική–λογική μονάδα υπό την επίβλεψη της μονάδας ελέγχου. Κάθε αποτέλεσμα που παράγεται προωθείται στη μονάδα εξόδου. Τα δεδομένα πρέπει να αποθηκευθούν στον υπολογιστή με τη μορφή ηλεκτρικών σημάτων. Έτσι μετατρέπονται σε ένα σύστημα το οποίο χρησιμοποιεί μόνο δύο καταστάσεις («0» και «1»). Γενικά η αριθμητική–λογική μονάδα μαζί με τη μονάδα ελέγχου αναφέρονται συνολικά ως κεντρική μονάδα επεξεργασίας (Central Processing Unit, CPU) του υπολογιστή. Η κεντρική μονάδα επεξεργασίας εκτελεί τις λειτουργίες επεξεργασίας δεδομένων και ελέγχει τη λειτουργία του υπολογιστή και γι' αυτό θεωρείται σαν το κεντρικό εξάρτημα του. Συχνά η κεντρική μονάδα επεξεργασίας αναφέρεται απλά ως επεξεργαστής (processor). Αν η κεντρική μονάδα επεξεργασίας αποτελείται από ένα μόνο ολοκληρωμένο κύκλωμα (Integrated Circuit, IC), ή chip όπως συχνά αναφέρεται, τότε ονομάζεται μικροεπεξεργαστής (microprocessor) ή μικροελεγκτής (microcontroller). Γενικά, ένας υπολογιστής που διαθέτει μικροεπεξεργαστή ως κεντρική μονάδα επεξεργασίας ονομάζεται μικροϋπολογιστής (microcomputer). Ένας σύγχρονος επεξεργαστής εκτός της αριθμητικής–λογικής μονάδας και της μονάδας ελέγχου εμπεριέχει και τους καταχωρητές (registers) οι οποίοι είναι μικρά στοιχεία μνήμης στο εσωτερικό του επεξεργαστή, που χρησιμοποιούνται για την προσωρινή αποθήκευση των δεδομένων, καθώς αυτά υπόκεινται σε επεξεργασία. Μερικοί από τους βασικούς καταχωρητές έχουν ειδική λειτουργία όπως ο:
    1. Απαριθμητής Προγράμματος (Program Counter) ο οποίος περιέχει την διεύθυνση της επόμενης εντολής που θα ανακτηθεί από την μνήμη για να εκτελεστεί.
    2. Καταχωρητής Εντολών (Instruction Register) ο οποίος καταχωρεί τον κωδικό λειτουργίας της εντολής πριν αυτή αποκωδικοποιηθεί.
    3. Συσσωρευτής (Accumulator) ο οποίος συνήθως χρησιμοποιείται για τις αριθμητικές και λογικές πράξεις.
    Σε ένα τυπικό υπολογιστικό σύστημα η μνήμη διαχωρίζεται α) σε μνήμη μη μόνιμης αποθήκευσης (μνήμη τυχαίας προσπέλασης) (Random Access Memory, RAM) η οποία διατηρεί το περιεχόμενο της όσο υπάρχει τάση τροφοδοσίας και β) σε μνήμη μόνιμης αποθήκευσης δεδομένων που χρησιμοποιείται για την αποθήκευση πληροφορίας, η οποία παραμένει στη μνήμη ακόμα και όταν διακόπτεται η τάση τροφοδοσίας, όπως η μνήμη EPROM (erasable programmable read only memory) και η μνήμη EEPROM (electrically erasable programmable read only memory). Επίσης, ένα τυπικό υπολογιστικό σύστημα διαθέτει διασυνδετικούς διαύλους που χρησιμοποιούνται για τη μεταφορά δεδομένων μεταξύ των διαφόρων μονάδων του συστήματος.

    Σχεδόν όλοι οι σύγχρονοι επεξεργαστές για να αναπαραστήσουν τα δεδομένα χρησιμοποιούν το δυαδικό σύστημα όπου τα δύο δυαδικά ψηφία (bits), το μηδέν «0» και το ένα «1», αντιστοιχούν σε δύο αντίθετες φυσικές καταστάσεις, όπως η «υψηλή» και η «χαμηλή» τάση. Η κωδικοποίηση και η αποκωδικοποίηση των δυαδικών ψηφίων ώστε να παριστάνουν έναν αριθμό ή έναν χαρακτήρα, κατανοητό από τους χρήστες πραγματοποιείται στις μονάδες εισόδου και εξόδου. Οι επεξεργαστές και κατ' επέκταση τα αντίστοιχα υπολογιστικά συστήματα χειρίζονται συγκεκριμένες ομάδες δυαδικών ψηφίων. Οι ομάδες μπορεί να έχουν ένα bit, τέσσερα bits που ονομάζεται nibble, οκτώ bits που ονομάζεται byte, 16 bits που ονομάζεται λέξη (word) κτλ. Οι επεξεργαστές δεν συσχετίζονται αποκλειστικά με τους ηλεκτρονικούς υπολογιστές καθώς πλέον ενσωματώνονται και σε πολλές ηλεκτρονικές συσκευές όπως κινητά τηλέφωνα, ψηφιακές φωτογραφικές μηχανές, όργανα μετρήσεων κ.α. Γενικά, οι επεξεργαστές ενσωματώνονται σε κάθε είδους συσκευή στην οποία απαιτείται ύπαρξη υπολογιστικής ικανότητας. Υπάρχουν πολλές περιπτώσεις χρήσης επεξεργαστών που δεν απαιτούν ισχυρούς επεξεργαστές, όπως για παράδειγμα ιατρικά όργανα μετρήσεων, συστήματα ασφαλείας, συστήματα ρομποτικής, συστήματα ελέγχου αυτοκινήτων καθώς και σε οικιακές συσκευές μεταξύ των άλλων. Σε τέτοιες περιπτώσεις η ενσωμάτωση επεξεργαστών με δυνατότητες μεγαλύτερες από αυτές που πράγματι απαιτούνται επιβαρύνει όχι μόνο το κόστος της εφαρμογής αλλά και την ανεπιθύμητη αύξηση διαφόρων παραγόντων όπως η πολυπλοκότητα, η κατανάλωση, το μέγεθος κ.α.

    Για να παραχθεί από ένα υπολογιστή κάποιο επιθυμητό για το χρήστη αποτέλεσμα πρέπει ο υπολογιστής να εκτελέσει μια συγκεκριμένη ακολουθία εντολών που ονομάζεται πρόγραμμα (program). Ο von Neumann το 1945 έδωσε για το πρόγραμμα ένα γενικό ορισμό σύμφωνα με τον οποίο «το πρόγραμμα αποτελείται από μια συνεχή αλληλουχία εντολών τις οποίες ο υπολογιστής καλείται να εκτελέσει μία προς μία για να παραχθεί το επιθυμητό αποτέλεσμα». Για την δημιουργία ενός προγράμματος χρησιμοποιείται μια τεχνητή γλώσσα που επιτρέπει την επικοινωνία προγραμματιστή και υπολογιστή και η οποία ονομάζεται γλώσσα προγραμματισμού (programming language), ενώ η διαδικασία της δημιουργίας του προγράμματος ονομάζεται προγραμματισμός (programming). Οι εντολές που χρησιμοποιεί ο χρήστης προγραμματιστής αποτελούν τον πηγαίο κώδικα (source code). Για να γίνουν κατανοητές από τον υπολογιστή οι εντολές του προγράμματος απαιτείται να «μεταφραστούν» στη γλώσσα που αντιλαμβάνεται ο υπολογιστής. Αυτό γίνεται δυνατό με τη χρήση ενός άλλου προγράμματος που ονομάζεται μεταγλωττιστής (compiler) ή διερμηνέας (interpreter). Το μεταγλωττισμένο αποτέλεσμα λέγεται ότι αποτελεί τον αντικειμενικό κώδικα (object code). Ο αντικειμενικός κώδικας αποτελείται από μια μακροσκελή ακολουθία από δυαδικά ψηφία, «0» και «1», στα οποία κωδικοποιούνται οι εντολές και τα δεδομένα. Η ακολουθία αυτή λέγεται ότι αποτελεί τη γλώσσα μηχανής (machine language) ή το κώδικα μηχανής (machine code) και η οποία είναι η μοναδική γλώσσα που αντιλαμβάνεται ο επεξεργαστής. Γενικά το σύνολο των προγραμμάτων ονομάζεται λογισμικό (software) και διακρίνεται σύμφωνα με τη χρήση του σε κατηγορίες όπως για παράδειγμα, λογισμικό εφαρμογών, λειτουργικά συστήματα, μεταγλωττιστές κ.α. Το λογισμικό που είναι ενσωματωμένο σε συσκευές ονομάζονται firmware.

    Η γλώσσα προγραμματισμού assembly (assembly language) ή απλά assembly είναι μια συμβολική γλώσσα προγραμματισμού χαμηλού επιπέδου (με την έννοια ότι κάθε εντολή της αντιστοιχεί σε μια εντολή γλώσσας μηχανής), η οποία χρησιμοποιεί μνημονικά (mnemonics) και τελεστές (operands) ώστε να εκφράσει τον αντίστοιχο κώδικα μηχανής. Αυτό έχει σαν αποτέλεσμα να ενισχύεται η αναγνωσιμότητα χωρίς την απώλεια του ακριβούς ελέγχου των εντολών μηχανής. Επειδή κάθε επεξεργαστής για τον προγραμματισμό του καθορίζει και την αντίστοιχη γλώσσα assembly, ο όρος assembly αναφέρεται σε οικογένεια γλωσσών. Έτσι, μπορούμε να ισχυριστούμε ότι «η γλώσσα assembly είναι το σύνολο των κατανοητών από τον προγραμματιστή εντολών που υποστηρίζει ένα συγκεκριμένο επεξεργαστή». Επομένως ο προγραμματιστής με τη γλώσσα assembly μπορεί να αξιοποιήσει καλύτερα τις δυνατότητες ενός συγκεκριμένου επεξεργαστή για τη δημιουργία αποδοτικών προγραμμάτων σε αντάλλαγμα όμως με τη μεταφερσιμότητα (portability) του κώδικα. Η μετατροπή ενός προγράμματος από γλώσσα assembly σε γλώσσα μηχανής ώστε να είναι κατανοητή από τον επεξεργαστή γίνεται από τον αντίστοιχο assembler. Γενικά θεωρείται ότι με τον προγραμματισμό σε assembly εκτός των άλλων μπορούν να επιτευχθούν εξεζητημένοι υπολογισμοί για Μαθηματικά προβλήματα που απαιτούν υπολογισμούς με υψηλή ακρίβεια καθώς και υπολογισμούς με μεγάλους αριθμούς.

  2. Στόχος του μαθήματος: Στόχος του μαθήματος «Μικροϋπολογιστές» είναι να διδαχθούν και να αναλυθούν βασικές έννοιες που αφορούν στους μικροϋπολογιστές και μικροεπεξεργαστές καθώς και στη γλώσσα προγραμματισμού assembly. Αναλυτικότερα στο μάθημα γίνεται μια σύντομη ανασκόπηση στην εξέλιξη του επεξεργαστή, του υπολογιστή και των σημαντικότερων γλωσσών προγραμματισμού. Στη συνέχεια γίνεται μια διεξοδική ανάλυση των μονάδων της αρχιτεκτονικής von Neumann εστιάζοντας κυρίως στη δομή του επεξεργαστή και των βασικών του συστατικών (ALU, καταχωρητές, flags, κ.α.). Ακολούθως μελετώνται αναπαραστάσεις αριθμών καθώς και πράξεις μεταξύ αυτών. Σε επόμενη ενότητα του μαθήματος παρουσιάζονται και αναλύονται τα λογικά κυκλώµατα. Συγκεκριμένα δίνονται στοιχεία της Άλγεβρας Boole, παρουσιάζονται λογικές πράξεις και πύλες και μελετάται η σχεδίαση διάφορων λογικών κυκλωµάτων. Τέλος στο μάθημα εξετάζεται ο προγραµµατισµός επεξεργαστών και γίνεται ανάλυση και διεξοδική μελέτη στη γλώσσα προγραµµατισµού assembly.

  3. Θεματικές ενότητες του μαθήματος: Οι θεματικές ενότητες είναι οι ακόλουθες:
    1. Βασικές έννοιες: Θα μελετήσουμε την ανάγκη και τη χρησιμότητα του μικροϋπολογιστή, του μικροεπεξεργαστή και της assembly σε διάφορους τομείς της επιστήμης και της τεχνολογίας. Ακόμα, θα παραθέσουμε μια σύντομη ανασκόπηση στην εξέλιξη του επεξεργαστή, του υπολογιστή και των σημαντικότερων γλωσσών προγραμματισμού. Επίσης θα γίνει μια ανάλυση των μονάδων της αρχιτεκτονικής von Neumann εστιάζοντας κυρίως στη δομή του επεξεργαστή. Τέλος θα αναφερθούμε στα λειτουργικά συστήματα.
    2. Αριθµητικά συστήµατα: Σκοπός αυτής της ενότητας είναι η ανάπτυξη και η μελέτη αριθμητικών συστημάτων, αναπαραστάσεων αριθμών καθώς και πράξεις μεταξύ αυτών. Επίσης θα αναλυθούν οι πράξεις µεταξύ λέξεων µνήµης και θα μελετηθούν η υπερχείλιση, οι παραστάσεις κινητής υποδιαστολής καθώς και η BCD αριθµητική.
    3. Λογικά κυκλώµατα: Σκοπός αυτής της ενότητας είναι να μελετηθούν τα εξής θέματα: Στοιχεία της Άλγεβρας Boole. Λογικές πράξεις και πύλες. Σχεδίαση λογικών κυκλωµάτων. Γενικότητα πυλών. Ηµιαθροιστής και πλήρης αθροιστής. ∆υαδικός συγκριτής. Κυκλώµατα µνήµης, κυκλώµατα αναγνώρισης σφάλµατος, κυκλώµατα καταχωρητών και απαριθµητών. Πραγµατοποίηση λογικών κυκλωµάτων. Οικογένειες, τεχνολογίες, χαρακτηριστικά και συµβατότητα ολοκληρωµένων κυκλωµάτων. Εξέλιξη, χαρακτηριστικά, πλεονεκτήµατα και εφαρµογές µικροεπεξεργαστών. Αρχιτεκτονική και οργάνωση µικροεπεξεργαστών. Καταχωρητές. Μονάδα χρονισµού και ελέγχου. Αριθµητική και λογική µονάδα. Σύνδεση µε µνήµη και εξωτερικές συσκευές. Τρόποι αναφοράς στη µνήµη. Εξωτερικά σήµατα και λειτουργία ακροδεκτών.
    4. Προγραµµατισµός µικροεπεξεργαστών: Σκοπός αυτής της ενότητας είναι να εξετάσουμε τον προγραµµατισµό των επεξεργαστών και να αναλύσουμε και μελετήσουμε διεξοδικά τη γλώσσα προγραµµατισµού assembly.
  4. Φροντιστήρια και εργαστήρια του μαθήματος: Τα φροντιστήρια και εργαστήρια στοχεύουν στην ενίσχυση των γνώσεων και των δεξιοτήτων καθώς και στην απόκτηση ευχέρειας σε έννοιες που σχετίζονται με το μάθημα. Αυτό επιτυγχάνεται με την υποδειγματική επίλυση πολλών ασκήσεων καθώς και με εργαστηριακές ασκήσεις εξάσκησης σε υπολογιστή με χρήση του προσομοιωτή (simulator) GNUSim8085. Ο GNUSim8085 προσομοιώνει σε ένα περιβάλλον γραφικών τη λειτουργία του επεξεργαστή Intel 8085 και γενικά αποτελεί μια φιλική προς το χρήστη εφαρμογή λογισμικού. Ο χρήστης του μπορεί να γράψει πρόγραμμα σε assembly για τον επεξεργαστή αυτόν, να το αποσφαλματώσει καθώς και να το εκτελέσει παρακολουθώντας τις τιμές των καταχωρητών και των θέσεων μνήμης. Επιλέξαμε τον επεξεργαστή Intel 8085 ως ένα «τυπικό» εκπαιδευτικό επεξεργαστή. Θα μπορούσαμε, βέβαια, να είχαμε επιλέξει κάποιον άλλον επεξεργαστή, αλλά όπως θα δούμε η διαδικασία μελέτης είναι παρόμοια. Για την εξοικείωση των φοιτητών και φοιτητριών με το λειτουργικό περιβάλλον Linux και το προσομοιωτή GNUSim8085 παρέχονται επιπλέον προαιρετικά εισαγωγικά μαθήματα. Μετά την εξοικείωση, οι φοιτητές και οι φοιτήτριες υλοποιούν τα προγράμματα που έχουν διδαχθεί κατά τη διάρκεια των παραδόσεων. Ακολούθως, έχοντας κατανοήσει οι φοιτητές και οι φοιτήτριες την ακριβή λειτουργία του επεξεργαστή ενθαρρύνονται να αποκτήσουν εμπειρία με την έννοια να μάθουν από τα λάθη τους. Για τον σκοπό αυτό παροτρύνονται να κατασκευάσουν αρχικά μόνοι(ες) τους προγράμματα για την υλοποίηση απλών προβλημάτων, χωρίς τη συμβολή του υπεύθυνου για το εργαστηριακό μάθημα, αλλά με τη διακριτική του παρουσία κατά τη διαδικασία της αποσφαλμάτωσης και την εμπεριστατωμένη ανάλυση και επεξήγηση στα πιθανά σφάλματα των φοιτητών και φοιτητριών. Προς το τέλος, των εργαστηριακών μαθημάτων οι φοιτητές και οι φοιτήτριες ενθαρρύνονται και παροτρύνονται να κατασκευάσουν σύνθετα προγράμματα μέσα από διάλογο και ανταλλαγή απόψεων με τον υπεύθυνο για το εργαστηριακό μάθημα, για την επίλυση προβλημάτων που έχουν δοθεί στις παραδόσεις ως εργασίες. Κύριος στόχος του εργαστηρίου είναι η συστηματική προσέγγιση και κατάρτιση καθώς και η καλλιέργεια στους φοιτητές και στις φοιτήτριες της ικανότητας σύλληψης και απόδοσης των εννοιών του μαθήματος. Τα εργαστηριακά μαθήματα πραγματοποιούνται στην αίθουσα 035 στο χώρο του Εργαστηρίου Ηλεκτρονικών Υπολογιστών και Εφαρμογών το οποίο λειτουργεί στις αίθουσες 035, 036, 037, 038, 039, 040 του κτιρίου Βιολογίας/Μαθηματικών με ώρες λειτουργίας 9:00–19:00, κατά τις εργάσιμες ημέρες.

  5. Συμμετοχή στην τάξη και παρακολουθήσεις: Παρ’ ότι η παρακολούθηση δεν είναι υποχρεωτική η συμμετοχή στις παραδόσεις είναι σίγουρα σημαντική και καθοριστική διότι η διδασκαλία αποτελεί μια δυναμική διαδικασία η οποία, με βάση τα πλαίσια της διδακτέας ύλης, προσαρμόζεται σύμφωνα με τις ερωτήσεις και απορίες των συμμετεχόντων φοιτητών και φοιτητριών. Έτσι στις παραδόσεις παρέχονται επιπλέον πληροφορίες και γι’ αυτό παροτρύνουμε τους συμμετέχοντες φοιτητές και φοιτήτριες να κρατούν σχολαστικά σημειώσεις οι οποίες θα τους βοηθήσουν στην μελέτη τους. Επίσης τους παροτρύνουμε να συμμετέχουν στα παρεχόμενα φροντιστήρια και εργαστήρια διότι έτσι θα ενισχυθούν οι γνώσεις τους στις έννοιες του μαθήματος καθώς και οι δεξιότητες τους στην υλοποίηση των μεθόδων με τις προαιρετικές εργαστηριακές ασκήσεις εξάσκησης, με χρήση του προσομοιωτή GNUSim8085.