Εισαγωγή στην Επιστήμη των Υπολογιστών 4ο εξάμηνοσhmμy Ενότητα 0: Εισαγωγή ιδάσκοντες: Στάθης Ζάχος, Κωστής Σαγώνας, Άρης Παγουρτζής, ημήτρης Σούντρης Επιμέλεια διαφανειών: Στάθης Ζάχος, Άρης Παγουρτζής http://www.corelab.ece.ntua.gr/courses/introcs http://courses.microlab.ntua.gr/ 1
Επιστήμη των Υπολογιστών Ο επιστημονικός και τεχνολογικός κλάδος που: μελετάει την αναπαράσταση, αποθήκευση, επεξεργασία και μετάδοση πληροφοριών μέσω υπολογιστών και δικτύων αναζητά και εξετάζει τρόπους (αλγόριθμους, δομές δεδομένων, γλώσσες προγραμματισμού, αρχιτεκτονικές) για την αποδοτική υλοποίηση των παραπάνω εργασιών 2
Άλλα ονόματα Informatics (Πληροφορική) Computing Science (Επιστήμη Υπολογισμών) Dijkstra: «Η επιστήμη των υπολογιστών έχει ως αντικείμενο τους υπολογιστές όσο και η αστρονομία τα τηλεσκόπια» 3
Κεντρικό ερώτημα της επιστήμης υπολογιστών Τι μπορεί να μηχανοποιηθεί και μάλιστα αποδοτικά; Ποια προβλήματα μπορούμε να λύσουμε με υπολογιστή και πόσο καλά; 4
Όψεις επιστήμης υπολογιστών Θεωρητικές θεμελιώσεις: υπολογισιμότητα, λογική, αυτόματα, γράφοι Αλγόριθμοι και πολυπλοκότητα Γλώσσες και μοντέλα προγραμματισμού: προστακτικές, αντικειμενοστρεφείς, συναρτησιακές, λογικού προγραμματισμού, γλώσσες σεναρίων Μεταγλωττιστές Αρχιτεκτονική υπολογιστή, assembly Ψηφιακή σχεδίαση, VLSI 5
Άλλες όψεις της επιστήμης των υπολογιστών ίκτυα και διαδίκτυο Εμπορικές εφαρμογές (online συναλλαγές, e- commerce, e-banking, e-anything). Σύγχρονη τεχνολογία (AI, multimedia, ubiquitous computing) Ασφάλεια και παρακολούθηση (encryption, security, e-voting, digital warfare, big brother) Αλλαγές σε κάθε τομέα της ζωής (αγορές, διασκέδαση, κοινωνικά δίκτυα) 6
Κλάδοι επιστήμης υπολογιστών (i) Υπολογισιμότητα και πολυπλοκότητα Αλγόριθμοι και δομές δεδομένων Γλώσσες προγραμματισμού και μεταγλωττιστές Τεχνολογία λογισμικού Βάσεις δεδομένων και διαχείριση πληροφοριών Αρχιτεκτονική και οργάνωση υπολογιστών Λειτουργικά - παράλληλα - κατανεμημένα συστήματα 7
Κλάδοι επιστήμης υπολογιστών (ii) ίκτυα υπολογιστών και τεχνολογίες διαδικτύου Τεχνητή νοημοσύνη Επικοινωνία ανθρώπου μηχανής, πολυμέσα Κρυπτογραφία Υπολογιστική βιολογία, βιολογικοί υπολογισμοί Κβαντικοί υπολογισμοί 8
Είπαν... Dijkstra: «Το ερώτημα εάν ο υπολογιστής σκέφτεται δεν είναι πιο ενδιαφέρον από το ερώτημα εάν το υποβρύχιο κολυμπάει» Tom Watson, IBM, 1945: «Ο κόσμος δεν χρειάζεται περισσότερους από πέντε υπολογιστές» 9
Θεωρητικές θεμελιώσεις Υπολογισιμότητα: ποιά προβλήματα μπορούμε να λύσουμε; Υπολογιστική πολυπλοκότητα: πόσο καλά μπορούμε να τα λύσουμε; ως προς το χρόνο ως προς το χώρο/μνήμη ως προς την κατανάλωση ενέργειας ως προς bandwidth... 10
Θεωρητικές θεμελιώσεις: υπολογιστική πολυπλοκότητα Αλγόριθμοι: άνω φράγματα ταξινόμηση (με bubblesort): O(n 2 ) Αποδείξεις δυσκολίας: κάτω φράγματα ταξινόμηση με συγκρίσεις: Ω(n logn) NP-πληρότητα: ισχυρή ένδειξη απουσίας αποδοτικού αλγορίθμου million dollar question! 11
Θεωρητικές θεμελιώσεις: εργαλεία Μοντέλα υπολογισμού: πεπερασμένα αυτόματα, μηχανές Turing, λ-λογισμός, λογικά κυκλώματα, νευρωνικά δίκτυα,... Αναπαράσταση προβλημάτων: γράφοι, λογική, γραμμικός προγραμματισμός,... 12
Πρόγραμμα Ακριβής περιγραφή ενός αλγορίθμου σε μία τυπική γλώσσα που ονομάζεται γλώσσα προγραμματισμού Οι ενέργειες εφαρμόζονται σε αντικείμενα που λέγονται δεδομένα (data) 13
Διατύπωση αλγορίθμου σε γλώσσα Φυσικές γλώσσες Χωρίς αυστηρούς συντακτικούς κανόνες Μεγάλη πυκνότητα και σημασιολογική ικανότητα Τυπικές γλώσσες Αυστηρό συντακτικό και σημασιολογία Γλώσσες προγραμματισμού Τυπικές γλώσσες περιγραφής υπολογισμών Εντολές εκτελέσιμες από ηλεκτρονικό υπολογιστή 14
Οργάνωση υπολογιστών (i) 15 Αναπαράσταση και πράξεις δυαδικών αριθμών Κατηγορίες αρχιτεκτονικών Αρχές σχεδιασμού και υλοποίησης εφαρμογών σε αρχιτεκτονικές/υλικό Εισαγωγή στην κατασκευή ολοκληρωμένων κυκλωμάτων 15
Οργάνωση υπολογιστών (ii) 16 Υλικό (hardware), οργάνωση και λειτουργία μικροεπεξεργαστών (τμήματα και λειτουργία υπολογιστή, μορφή εντολής-γλώσσα μηχανής, συμβολική γλώσσα (assembly), σχεδίαση μνήμης-περιφερειακές μονάδες-μονάδες αποθήκευσης) Εισαγωγή στο λογισμικό συστήματος λειτουργικό σύστημα μεταγλωττιστής 16
Επίλυση προβλημάτων μέσω Η/Υ Πρόβλημα Αλγόριθμοι Γλώσσα Αρχιτεκτονική Συνόλου Εντολών Μικροαρχιτεκτονική Κυκλώματα Στοιχεία 17
Επίλυση προβλημάτων μέσω Η/Υ Μια συστηματική ακολουθία μετασχηματισμών μεταξύ των επιπέδων αφαίρεσης (layers of abstraction) Πρόβλημα Αλγόριθμος Πρόγραμμα Αρχιτεκτονική Συνόλου Εντολών Σχεδιασμός Λογισμικού: Επιλογή αλγορίθμων και δομών δεδομένων Προγραμματισμός: Χρήση γλώσσας για την περιγραφή του αλγορίθμου Μετάφραση/ ιερμηνεία: Μετατροπή γλώσσας σε εντολές μηχανής 18
συνέχεια Αρχιτεκτονική Συνόλου Εντολών Σχεδιασμός Επεξεργαστή Μικροαρχιτεκτονική Σχεδιασμός Λογικής/Κυκλώματος Κυκλώματα Circuits ιαδικασία Κατασκευής Στοιχεία Devices 19