Γιαγλής Γεώργιος ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΑΣ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ
τίτλος: Αρχές Λειτουργίας και Προγραμματισμού Η/Υ συγγραφέας: Γιαγλής Γεώργιος 2011 Εκδόσεις Δίσιγμα Για την ελληνική γλώσσα σε όλο τον κόσμο. ISBN: 978-960-9495-24-0 Το παρόν έργο πνευματικής ιδιοκτησίας προστατεύεται βάσει του Νόμου 2121/93 που ισχύει έως σήμερα καθώς και κατά τη Διεθνή Σύμβαση της Βέρνης (που έχει κυρωθεί με το Νόμο 100/1975) ΑΠΑΓΟΡΕΥΕΤΑΙ η αναδημοσίευση, φωτοανατύπωση και εν γένει αναπαραγωγή του παρόντος έργου, με οποιονδήποτε τρόπο ή μορφή, τμηματικά ή περιληπτικά, στο πρωτότυπο ή σε μετάφραση ή άλλη διασκευή, χωρίς γραπτή άδεια του εκδότη., www.disigma.gr / info@disigma.gr
ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ Α : ΘΕΜΑΤΑ ΒΑΣΗΣ 1. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ...11 1.1 Τι είναι Πληροφορική;...11 1.1.1 Τι είναι η Πληροφορική;...12 1.1.2 Τι είναι ο Υπολογιστής;...14 1.1.3 Τι είναι το Υλικό και το Λογισμικό Υπολογιστή;...16 1.1.4 Τι είναι ένα Υπολογιστικό Σύστημα;...16 1.1.5 Τι είναι ένα Πληροφοριακό Σύστημα;...16 1.2 Εξέλιξη των Υπολογιστικών Συστημάτων...17 1.2.1 Η Προ-ιστορία της Πληροφορικής...17 1.2.2 Η Ιστορία της Πληροφορικής...18 1.2.3 Υπολογιστές Βασισμένοι σε Λυχνίες Κενού (Δεκαετία 1950)...20 1.2.4 Υπολογιστές Βασισμένοι σε Τρανζίστορ (Δεκαετία 1960)...21 1.2.5 Υπολογιστές Βασισμένοι σε Ολοκληρωμένα Κυκλώματα (1970-σήμερα)...21 1.2.6 Υπολογιστές του Μέλλοντος...23 1.3 Δομή των Υπολογιστικών Συστημάτων...25 1.3.1 Τύποι υπολογιστικών συστημάτων...26 1.4 Περίληψη...28 1.5 Ερωτήσεις Ασκήσεις...29 2. ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ...30 2.1 Εισαγωγή στα Αριθμητικά Συστήματα...30 2.2 Παράσταση Αριθμών σε Αριθμητικά Συστήματα...32 2.3 Αριθμητικά Συστήματα σχετικά με την Πληροφορική...33 2.4 Μετατροπές Αριθμών Μεταξύ Διαφορετικών Συστημάτων...34 2.4.1 Μετατροπές αριθμών από αριθμητικό σύστημα στο δεκαδικό...34 2.4.2 Μετατροπές δεκαδικών αριθμών σε οποιοδήποτε άλλο σύστημα...35 2.4.3 Μετατροπές μεταξύ δυαδικού και οκταδικού / δεκαεξαδικού...38 2.4.4 Μετατροπές μεταξύ άλλων αριθμητικών συστημάτων...39 2.5 Το δυαδικό σύστημα...40 2.5.1 Απαρίθμηση...41 2.5.2 Πρόσθεση και Αφαίρεση στο Δυαδικό Σύστημα...42 2.6 Το Δυαδικό Σύστημα και ο Η/Υ...45 2.7 Αποθήκευση Φυσικών Αριθμών στον Υπολογιστή...45 2.7.1 Ερμηνεία αριθμών που βρίσκονται στη μνήμη...46 2.7.2 Τοποθέτηση αριθμών στη μνήμη...47 2.8 Αποθήκευση Προσημασμένων Ακεραίων Αριθμών στον Υπολογιστή...47 2.8.1 1η περίπτωση: Χρήση bit προσήμου...47 2.8.2 Ερμηνεία αριθμών που βρίσκονται σε μνήμη με bit προσήμου...48 2.8.3 Τοποθέτηση αριθμών σε μνήμη με bit προσήμου...49 2.8.4 2η περίπτωση: Χρήση συμπληρώματος ως προς 1 για τους αρνητικούς...49 2.8.5 Ερμηνεία αριθμών που βρίσκονται σε μνήμη με χρήση συμπληρώματος ως προς 1...50 2.8.6 Τοποθέτηση αριθμών σε μνήμη με χρήση συμπληρώματος ως προς 1...51 2.8.7 3η περίπτωση: Χρήση συμπληρώματος ως προς 2 για τους αρνητικούς...51 2.8.8 Ερμηνεία αριθμών που βρίσκονται σε μνήμη με χρήση συμπληρώματος ως προς 2...52 2.8.9 Τοποθέτηση αριθμών σε μνήμη με χρήση συμπληρώματος ως προς 2...53 2.8.10 Πράξεις με Προσημασμένους Ακεραίους στον Υπολογιστή...54 2.9 Αποθήκευση Πραγματικών Αριθμών στον Υπολογιστή...57 2.9.1 Παράσταση πραγματικών αριθμών με τη Μέθοδο Σταθερής Υποδιαστολής...57 2.9.2 Παράσταση πραγματικών αριθμών με τη Μέθοδο Κινητής Υποδιαστολής...59 2.10 Αποθήκευση χαρακτήρων στον υπολογιστή...60 2.11 Αποθήκευση εικόνων και ήχων στον υπολογιστή...62 2.12 Περίληψη...62 2.13 Ερωτήσεις Ασκήσεις...64
3. ΠΥΛΕΣ ΚΑΙ ΨΗΦΙΑΚΑ ΚΥΚΛΩΜΑΤΑ...66 3.1 Εισαγωγή...66 3.2 Άλγεβρα Boole...67 3.2.1 Πράξη AND (Σύζευξη / Λογικό ΚΑΙ)...67 3.2.2 Πράξη OR (Διάζευξη / Λογικό Ή)...67 3.2.3 Πράξη NOT (Άρνηση / Λογικό ΌΧΙ)...68 3.2.4 Άλλες Λογικές Πράξεις...68 3.3 Λογικές Πύλες...68 3.3.1 Πύλη ΝΟΤ...69 3.3.2 Πύλη AND...69 3.3.3 Πύλη OR...70 3.3.4 Πύλη NAND...70 3.3.5 Πύλη NOR...71 3.3.6 Πύλη XOR...71 3.3.7 Πύλη XΝOR...72 3.4 Κυκλώματα...72 3.4.1 Από τις βασικές πύλες στα ηλεκτρονικά κυκλώματα...72 3.4.2 Δημιουργία Πίνακα Αλήθειας για ένα ηλεκτρονικό κύκλωμα...74 3.4.3 Δημιουργία Κυκλώματος από Πίνακα Αλήθειας...76 3.4.4 Συνδυαστικά και ακολουθιακά ηλεκτρονικά κυκλώματα...77 3.4.5 Το κύκλωμα του Hμιαθροιστή...78 3.4.6 Το κύκλωμα του Πλήρους Αθροιστή...79 3.4.7 Το κύκλωμα του flip-flop...80 3.5. Περίληψη...81 3.6 Ερωτήσεις Ασκήσεις...82 ΜΕΡΟΣ Β : ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ 4. ΥΛΙΚΟ...87 4.1 Η Μνήμη...87 4.1.1 Είδη Κύριων και Βοηθητικών Μνημών...89 4.2 Η Κύρια μνήμη...90 4.2.1 Οργάνωση της μνήμης...90 4.2.2 Διευθυνσιοδότηση της μνήμης...91 4.2.3 Η Μνήμη Τυχαίας Προσπέλασης (RAM)...93 4.2.4 H Μνήμη Ανάγνωσης Μόνο (ROM)...93 4.2.5 Η Κρυφή Μνήμη (Cache)...95 4.2.6 Η Εικονική Μνήμη (Virtual Memory)...95 4.3 Η Βοηθητική Μνήμη...95 4.3.1 Μαγνητικές και Οπτικές Μνήμες...96 4.3.2 Σκληροί Δίσκοι...96 4.3.3 Μαγνητικές Ταινίες...99 4.3.4 Συμπαγείς Δίσκοι (Compact Disks, CD)...99 4.3.5 Ψηφιακοί Ευέλικτοι Δίσκοι (Digital Versatile Disks, DVD)...100 4.3.6 Δίσκοι Μπλέ Ακτίνας (BluRay Disks, BRD)...101 4.4 Η Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ, CPU)...102 4.4.1 Αριθμητική και Λογική Μονάδα...102 4.4.2 Μονάδα Ελέγχου...103 4.4.3 Δίαυλοι Επικοινωνίας...104 4.5 Εκτέλεση ενός Προγράμματος στην ΚΜΕ...104 4.5.1 Κύκλος ανάκλησης και εκτέλεσης μιας εντολής στην ΚΜΕ...105 4.5.2 Παράδειγμα Εκτέλεσης ενός προγράμματος...105 4.6 Χαρακτηριστικά της ΚΜΕ...114 4.7 Παράλληλη Επεξεργασία...115 4.7.1 Παραλληλία με πολλαπλές ΚΜΕ...115 4.7.2 Παραλληλία σε μια ΚΜΕ...117 4.8 Συσκευές Εισόδου...117 4.8.1 Το Πληκτρολόγιο...117 4.8.2 Συσκευές κατάδειξης (pointing devices)...119 -iv-
4.8.3 Η web κάμερα...121 4.8.4 Ο σαρωτής...121 4.8.5 Συσκευές αναγνώρισης ήχου...122 4.8.6 Αναγνώστες barcode...122 4.8.7 Ασύρματη αναγνώριση μέσω ραδιοσυχνοτήτων (RFID)...123 4.9 Συσκευές Εξόδου...124 4.9.1 Η Οθόνη...124 4.9.2 Ο Εκτυπωτής...125 4.10 Επικοινωνία των συσκευών εισόδου-εξόδου με τον υπολογιστή...127 4.11 Περίληψη...127 4.12 Ερωτήσεις Ασκήσεις...129 5. ΛΟΓΙΣΜΙΚΟ...131 5.1 Εισαγωγή...131 5.2 Λογισμικό Συστήματος...132 5.2.1 Λειτουργικό Σύστημα...132 5.2.2 Βοηθητικά προγράμματα...133 5.3 Λογισμικό Εφαρμογών...133 5.3.1 Εφαρμογές γραφείου...134 5.3.2 Προγράμματα διαχείρισης γραφικών και πολυμέσων...134 5.3.3 Ψυχαγωγικές εφαρμογές (παιχνίδια)...134 5.3.4 Γεωγραφικά πληροφοριακά συστήματα (geographic information systems, GIS)...135 5.3.5 Συστήματα διαχείρισης μάθησης (learning management systems, LMS)...135 5.3.6 Συστήματα διαχείρισης επιχειρησιακών πόρων (enterprise resource planning, ERP)...135 5.3.7 Εφαρμογές Προσομοίωσης...135 5.3.8 Εφαρμογές Διαδικτύου...135 5.4 Εισαγωγή στα Πληροφοριακά Συστήματα...136 5.4.1 Επιχειρηματικά Πληροφοριακά Συστήματα...136 5.4.2 Ανάπτυξη πληροφοριακών συστημάτων...138 5.5 Περίληψη...139 5.6 Ερωτήσεις Ασκήσεις...139 ΜΕΡΟΣ Γ : ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ 6. ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ...143 6.1 Γλώσσες Προγραμματισμού...143 6.1.1 Γλώσσες μηχανής (1η γενιά)...143 6.1.2 Συμβολικές γλώσσες (2η γενιά)...144 6.1.3 Γλώσσες υψηλού επιπέδου (3η γενιά)...145 6.1.4 Γλώσσες πολύ υψηλού επιπέδου (4η γενιά)...146 6.2 Ταξινόμηση γλωσσών προγραμματισμού...146 6.3 Μεταφραστές γλωσσών προγραμματισμού...147 6.4 Αλγόριθμοι...147 6.4.1 Η έννοια του αλγόριθμου...148 6.4.2 Παράσταση αλγόριθμων...149 6.5 Παράσταση αλγόριθμων...150 6.5.1 Παράσταση αλγόριθμων με ψευδοκώδικα...150 6.5.2 Παράσταση αλγόριθμων με διαγράμματα ροής...153 6.6 Βασικές δομές διαδικασιακού προγραμματισμού: ακολουθία, επιλογή, επανάληψη...155 6.7 Ένας ολοκληρωμένος αλγόριθμος με επιλογή και επανάληψη...157 6.8 Περίληψη...159 6.9 Ερωτήσεις Ασκήσεις...160 7. ΕΙΣΑΓΩΓΗ ΣΤΗ ΓΛΩΣΣΑ C...161 7.1 Βασική δομή προγράμματος...161 7.2 Ένα απλό πρόγραμμα...162 -v-
7.3 Μεταβλητές...166 7.4 Σταθερές...167 7.5 Αναγνωριστικά...168 7.6 Τύποι δεδομένων...169 7.6.1 Ακέραιοι αριθμοί (int)...169 7.6.2 Πραγματικοί αριθμοί (float)...169 7.6.3 Χαρακτήρες (char)...170 7.6.4 Δείκτες...170 7.7 Τελεστές...171 7.7.1 Αριθμητικοί τελεστές...171 7.7.2 Τελεστές σύγκρισης...172 7.7.3 Λογικοί τελεστές...172 7.7.4 Τελεστής εκχώρησης...172 7.7.5 Σύνθετες παραστάσεις...173 7.8 Είσοδος και Έξοδος Δεδομένων...174 7.8.1 Η συνάρτηση scanf...174 7.8.2 Η συνάρτηση printf...174 7.8.3 Προσδιοριστές μετατροπής...175 7.8.4 Μη εκτυπούμενοι χαρακτήρες (ακολουθίες διαφυγής)...175 7.8.5 Είσοδος και έξοδος χαρακτήρων...175 7.9 Συναρτήσεις...176 7.9.1 Δήλωση συνάρτησης...176 7.9.2 Ορισμός συνάρτησης...176 7.9.3 Κλήση συνάρτησης...177 7.9.4 Μεταβίβαση παραμέτρων...178 7.9.5 Δηλώσεις συναρτήσεων με πολλές παραμέτρους...180 7.9.6 Συναρτήσεις Βιβλιοθήκης...180 7.10 Εντολές επιλογής...181 7.10.1 Η εντολή if-else...181 7.10.2 Η εντολή switch...181 7.11 Εντολές επανάληψης...182 7.11.1 Η εντολή while...182 7.11.2 Η εντολή do-while...183 7.11.3 Η εντολή for...183 7.12 Αποσφαλμάτωση και αμυντικός προγραμματισμός...183 7.12.1 Λάθη σε ένα πρόγραμμα...183 7.12.2 Αμυντικός προγραμματισμός...184 7.13 Περίληψη...185 7.14 Ερωτήσεις Ασκήσεις...186 8 ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C...188 8.1 Πίνακες...188 8.1.1 Ανάθεση τιμών στα στοιχεία μονοδιάστατου πίνακα...189 8.1.2 Εκτύπωση στοιχείων μονοδιάστατου πίνακα...190 8.1.3 Ασκήσεις με λύσεις...191 8.2 Πολυδιάστατοι Πίνακες...192 8.2.1 Ανάθεση τιμών στα στοιχεία πολυδιάστατου πίνακα...192 8.2.2 Εκτύπωση στοιχείων πολυδιάστατου πίνακα...193 8.2.3 Ασκήσεις με λύσεις...194 8.3 Αλγόριθμοι αναζήτησης σε πίνακες...195 8.3.1 Γραμμική Αναζήτηση...196 8.3.2 Ασκήσεις με λύσεις...196 8.3.3 Δυαδική Αναζήτηση...197 8.4 Αλγόριθμοι ταξινόμησης πινάκων...198 8.4.1 Ταξινόμηση με επιλογή...198 8.4.2 Ταξινόμηση φυσαλίδας...199 8.5 Εγγραφές ή Δομές...200 8.6 Πίνακες Δομών (Βάσεις Δεδομένων)...200 -vi-
8.6.1 Ασκήσεις με λύσεις...201 8.7 Περίληψη...203 8.8 Ερωτήσεις Ασκήσεις...203 9 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C...205 9.1 Δυναμικές Δομές Δεδομένων...205 9.2 Λίστες...206 9.2.1 Δημιουργία λίστας...206 9.2.2 Διάσχιση λίστας...211 9.2.3 Αναζήτηση στοιχείου σε λίστα...212 9.2.4 Εισαγωγή στοιχείου σε λίστα...212 9.2.5 Διαγραφή στοιχείου από λίστα...214 9.2.6 Άλλες μορφές λιστών...215 9.3 Στοίβες... 216 9.3.1 Ορισμός στοίβας...216 9.3.2 Εισαγωγή στοιχείου σε στοίβα...217 9.3.3 Εξαγωγή στοιχείου από στοίβα...217 9.3.4 Υλοποίηση στοίβας με πίνακα...217 9.4 Ουρές...219 9.4.1 Ορισμός ουράς...219 9.4.2 Εισαγωγή στοιχείου σε ουρά...220 9.4.3 Εξαγωγή στοιχείου από ουρά...220 9.4.4 Υλοποίηση ουράς με πίνακα...220 9.5 Δένδρα και Γράφοι...222 9.5.1 Ορισμοί δένδρων...223 9.5.2 Παράσταση δένδρων στη C...223 9.5.3 Διάσχιση δένδρου...225 9.5.4 Δυαδικά δένδρα αναζήτησης...227 9.6 Περίληψη...228 9.7 Ερωτήσεις Ασκήσεις...229 ΜΕΡΟΣ Δ : ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ, ΔΙΑΔΙΚΤΥΟ & ΑΝΑΠΤΥΞΗ ΙΣΤΟΣΕΛΙΔΩΝ 10 ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΔΙΑΔΙΚΤΥΟ...233 10.1 Εισαγωγή...233 10.2 Τεχνολογίες μετάδοσης δεδομένων...233 10.2.1 Ενσύρματη μετάδοση...234 10.2.2 Aσύρματη μετάδοση...235 10.3 Δίκτυα υπολογιστικών συστημάτων...236 10.4 Διαδίκτυο...237 10.4.1 World Wide Web (WWW)...239 10.5 Κινητή και Ασύρματη Επικοινωνία...239 10.5.1 Τεχνολογίες κινητής τηλεφωνίας...239 10.5.2 Τεχνολογίες Ασύρματης Δικτύωσης...240 10.6 Περίληψη...242 10.7 Ερωτήσεις Ασκήσεις...243 11 ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΙΣΤΟΣΕΛΙΔΩΝ ΜΕ HTML...245 11.1 Οι Γλώσσες Σήμανσης...245 11.2 Γράφοντας τον πρώτο κώδικα σε HTML...246 11.3 Η Ετικέτα <BODY>...247 11.4 Βασικές Ετικέτες Κειμένου HTML...248 11.5 Εισάγοντας Λίστες...252 11.6 Εισάγοντας Πίνακες...255 -vii-
11.7 Εισάγοντας Εικόνες και Γραφικά...259 11.8 Εισάγοντας Υπερσυνδέσμους...260 11.9 Εισάγοντας Φόρμες...262 11.10 Δομώντας τη σελίδα με πλαίσια...268 11.11 Εισαγωγή στα Επικαλυπτόμενα Φύλλα Στυλ (Cascading Style Sheets)...272 11.12 Περίληψη...276 11.13 Ερωτήσεις Ασκήσεις...278 ΜΕΡΟΣ Ε : Η ΠΛΗΡΟΦΟΡΙΚΗ ΣΤΗ ΖΩΗ ΜΑΣ 12 Η ΠΛΗΡΟΦΟΡΙΚΗ ΣΤΗΝ ΟΙΚΟΝΟΜΙΑ ΚΑΙ ΤΗΝ ΚΟΙΝΩΝΙΑ...283 12.1 Τεχνολογία: Για καλό ή για κακό;...283 12.2 Κοινωνικές και οικονομικές επιπτώσεις της πληροφορικής...284 12.2.1 Αλλαγές στην αγορά εργασίας...285 12.2.2 Επιπτώσεις στις επιχειρήσεις...285 12.2.3 Απομακρυσμένη εργασία (remote work)...285 12.2.4 Ηλεκτρονικό επιχειρείν...286 12.2.5 Προς πιο μοναχικές κοινωνίες;...286 12.2.6 Δημιουργία και διάδοση περιεχομένου...286 12.3 Έλεγχος και προστασία προσωπικών δεδομένων...287 12.3.1 Χρήση από κυβερνήσεις...287 12.3.2 Χρήση από επιχειρήσεις...288 12.4 Ασφάλεια υπολογιστών και ηλεκτρονικό έγκλημα...288 12.5 Η βιομηχανία πληροφορικής...290 12.5.1 Βιομηχανία υλικού...290 12.5.2 Βιομηχανία λογισμικού...291 12.5.3 Μονοπωλιακά φαινόμενα...293 12.6 Λογισμικό Ανοικτού Κώδικα (Open Source Software)...295 12.7 Πειρατεία Λογισμικού...295 12.8 Περίληψη...296 12.9 Ερωτήσεις Ασκήσεις...297 -viii-
Μ Ε Ρ Ο Σ Α ΘΕΜΑΤΑ ΒΑΣΗΣ
1 ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ O κόσμος στον οποίο ζούμε χαρακτηρίζεται συχνά ως Κοινωνία της Γνώσης, Κοινωνία της Πληροφορίας ή ακόμα και Κοινωνία των Δικτύων. Υπάρχουν αρκετοί καλοί λόγοι γι αυτό: η ραγδαία ανάπτυξη και εξέλιξη των ηλεκτρονικών υπολογιστών και των δικτύων επικοινωνίας έχουν κυριολεκτικά μεταμορφώσει τη δομή των σύγχρονων κοινωνιών διαμορφώνοντας ισχυρότατα κοινωνικά φαινόμενα (όπως η παγκοσμιοποίηση) και παρέχοντας σε όλους (επιχειρήσεις, κυβερνήσεις, αλλά και πολίτες) τη δυνατότητα να αξιοποιήσουν τις ολοένα αυξανόμενες δυνατότητες δημιουργίας, αποθήκευσης, επεξεργασίας και μετάδοσης πληροφοριών με νέους τρόπους. Φαινόμενα όπως ο προσωπικός υπολογιστής, το Internet και το κινητό τηλέφωνο έχουν πια ξεφύγει από τη σφαίρα της τεχνολογίας και έχουν αποκτήσει διαστάσεις κοινωνικών φαινομένων, αλλάζοντας τη ζωή όλων μας, ίσως για πάντα. Ζώντας σε ένα τέτοιο κόσμο, οι πολίτες της Κοινωνίας της Πληροφορίας νιώθουν την ανάγκη, αλλά και οφείλουν, να γνωρίζουν και να εκμεταλλεύονται όσο το δυνατό καλύτερα τις τεράστιες δυνατότητες των νέων τεχνολογιών και των εφαρμογών τους, για να μη διακινδυνεύσουν να καταστούν οι ψηφιακά αναλφάβητοι του μέλλοντος. Σκοπός του βιβλίου αυτού είναι να εισάγει τον αναγνώστη στον κόσμο της πληροφορικής αναλύοντας με όσο το δυνατό πιο απλό και κατανοητό τρόπο, αλλά ταυτόχρονα σε βάθος, τις βασικές έννοιες που τον αφορούν. 1.1 Τι είναι Πληροφορική; Ας αρχίσουμε με το ερώτημα Τι είναι η Πληροφορική; Πληροφορική είναι η επιστήμη η οποία ασχολείται με τους ηλεκτρονικούς υπολογιστές και τις εφαρμογές τους. Ο ορισμός μπορεί να φαίνεται απλός, αλλά στην πραγματικότητα τα όρια μεταξύ πληροφορικής και άλλων επιστημών γίνονται ολοένα και πιο δυσδιάκριτα, ιδιαίτερα όσο οι υπολογιστές διεισδύουν ολοένα και περισσότερο στη ζωή μας. Έτσι, μπορούμε να διακρίνουμε μια σειρά από υπο-κλάδους αυτής της ολοένα και πιο ενδιαφέρουσας επιστήμης: Επιστήμη των Υπολογιστών (Computer Science): Αποτελεί το θεωρητικό τμήμα της Επιστήμης της Πληροφορικής και ασχολείται με τη μελέτη των θεωρητικών βάσεων της πληροφορίας και των υπολογισμών, καθώς και με την εφαρμογή τους σε υπολογιστικά συστήματα. Από τον ορισμό της, γίνεται φανερό ότι και αυτή είναι μια σύνθετη περιοχή και αποτελείται με τη σειρά της από αρκετούς υπο-κλάδους, για παράδειγμα: o Μαθηματικές Βάσεις της Πληροφορικής o Θεωρία Υπολογισμών o Θεωρία Αλγορίθμων και Δομών Δεδομένων o Θεωρία Γλωσσών Προγραμματισμού
ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΑΣ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ o Θεωρία Υπολογιστικής Πολυπλοκότητας o Τεχνητή Νοημοσύνη o Επικοινωνία Ανθρώπου-Υπολογιστή Τεχνολογία Πληροφοριών (Information Technology): Σύμφωνα με την ITAA (Information Technology Association of America), είναι η επιστήμη που αφορά στη «μελέτη, σχεδίαση, ανάπτυξη, υλοποίηση, υποστήριξη και διαχείριση υπολογιστικών πληροφοριακών συστημάτων, ιδιαίτερα εφαρμογές λογισμικού και υλικό υπολογιστών». Είναι φανερό ότι και αυτή η υπο-περιοχή της πληροφορικής είναι αρκετά μεγάλη και μάλιστα τα όρια της είναι καμιά φορά δυσδιάκριτα από αυτά της Επιστήμης των Υπολογιστών. Παραδείγματα υπο-κλάδων της αποτελούν: o Τεχνολογία Λογισμικού o Βάσεις Δεδομένων o Αρχιτεκτονική Υπολογιστικών Συστημάτων o Παράλληλα και Κατανεμημένα Υπολογιστικά Συστήματα o Επικοινωνίες και Δίκτυα Υπολογιστών Πληροφοριακά Συστήματα (Information Systems): Σε αντίθεση με τους προηγούμενους κλάδους, τα Πληροφοριακά Συστήματα δίνουν έμφαση στη χρήση της πληροφορικής σε επιχειρησιακά περιβάλλοντα για συγκεκριμένους σκοπούς. Έτσι, ο κλάδος ασχολείται με τα συστήματα υπολογιστών, ανθρώπων, δεδομένων και διαδικασιών που συνεργάζονται για τη διαχείριση και αξιοποίηση πληροφοριών σε επιχειρησιακό επίπεδο. Από τον ορισμό, φαίνεται ότι ο κλάδος αγγίζει σε μεγάλο βαθμό, εκτός από την Επιστήμη της Πληροφορικής, και την Επιστήμη της Διοίκησης Επιχειρήσεων, γι αυτό και συνήθεις υποκλάδοι του είναι: o Διαχείριση Πληροφοριακών Συστημάτων o Ανάπτυξη και Συντήρηση Πληροφοριακών Συστημάτων o Στρατηγική Πληροφοριακών Συστημάτων Οι παραπάνω ορισμοί και υπο-κλάδοι είναι σχεδόν όλοι τόσο ενδιαφέροντες και πολυσχιδείς που θα μπορούσε να αφιερωθεί από ένα (ή και περισσότερα) ολόκληρα βιβλία για τον καθένα. Στόχος αυτού του βιβλίου είναι όμως να βοηθήσει όσους θέλουν να αποκτήσουν μια πρώτη επαφή με τον κόσμο της πληροφορικής και να καταλάβουν μερικές βασικές έννοιες. Ας αναλύσουμε λοιπόν μερικά βασικά σημεία που φαίνονται στους παραπάνω ορισμούς και συγκεκριμένα όσα απαντούνται με τονισμένα γράμματα σε αυτούς: 1. Τι είναι η Πληροφορία (Information); 2. Τι είναι ο Υπολογιστής (Computer); 3. Τι είναι το Υλικό Υπολογιστή (Computer Hardware); 4. Τι είναι το Λογισμικό Υπολογιστή (Computer Software); 5. Τι είναι ένα Υπολογιστικό Σύστημα (Computer System); 6. Τι είναι ένα Πληροφοριακό Σύστημα (Information System); Αυτά τα ερωτήματα θα τα απαντήσουμε στις επόμενες παραγράφους. 1.1.1 Τι είναι η Πληροφορία; Η Πληροφορική ονομάστηκε έτσι (και όχι π.χ. Υπολογιστική) για ένα πολύ σημαντικό λόγο: αυτό που κυρίως μας ενδιαφέρει δεν είναι ο υπολογιστής αλλά η ολοένα αυξανόμενη δυνατότητα που έχουμε να καταγράφουμε, να διαχειριζόμαστε και να αξιοποιούμε σημαντικούς όγκους πληροφοριών. Ο Ηλεκτρονικός Υπολογιστής είναι απλά το μέσο με το οποίο θα πετύχουμε αυτή την αξιοποίηση η Πληροφορία είναι όμως ο τελικός σκοπός μας. Ίσως έχει λοιπόν νόημα να ξεκινήσουμε την περιήγηση μας στις εισαγωγικές έννοιες της Πληροφορικής από τη βασικότερη εξ αυτών. Υπάρχουν τρεις αλληλοσυνδεόμενες έννοιες που έχουν ενδιαφέρον για την επιστήμη της Πληροφορικής: τα πληροφοριακά δεδομένα (data), η πληροφορία (information) και, τέλος, η γνώση (knowledge). Ας τα δούμε έναένα, ξεκινώντας από το απλούστερο. Το πληροφοριακό δεδομένο (ή απλά δεδομένο) αναφέρεται σε μια στοιχειώδη περιγραφή αντικειμένων, δραστηριοτήτων ή συναλλαγών που καταγράφονται όπως δημιουργούνται, χωρίς δηλαδή να τύχουν επεξεργασίας. Για παράδειγμα, ο παρακάτω πίνακας περιέχει τέτοια δεδομένα, τα οποία αφορούν τις πωλήσεις τριών συγκεκριμένων προϊόντων από ένα σούπερ μάρκετ σε διάστημα ενός τριημέρου. -12-
Κεφάλαιο 1: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ Α/Α Προϊόν Ημερομηνία Κατάστημα Τιμή 1 1135 18/6/2008 101 2,50 2 1136 18/6/2008 131 1,87 3 1138 18/6/2008 112 3,00 4 1135 18/6/2008 101 2,50 5 1135 19/6/2008 111 2,50 6 1136 19/6/2008 107 1,92 7 1136 19/6/2008 131 1,92 8 1135 19/6/2008 111 2,50 9 1135 19/6/2008 111 2,50 10 1135 19/6/2008 112 2,50 11 1138 19/6/2008 107 3,00 12 1135 19/6/2008 131 2,50 13 1135 20/6/2008 111 2,50 14 1136 20/6/2008 111 1,92 15 1138 20/6/2008 101 3,25 16 1135 20/6/2008 101 2,50 Πίνακας 1.1: Δεδομένα Πωλήσεων σε ένα σούπερ μάρκετ Για να είναι το παραπάνω παράδειγμα πιο ρεαλιστικό, φανταστείτε τον πίνακα αυτό να αναφέρονταν στις πωλήσεις ΟΛΩΝ των προϊόντων του σούπερ μάρκετ για ένα ολόκληρο έτος. Αν το σούπερ μάρκετ διαχειρίζεται 10.000 προϊόντα (αριθμός που είναι κοντά στην πραγματικότητα για ένα μέσου μεγέθους σούπερ μάρκετ στην Ελλάδα), το κάθε προϊόν κάνει πωλήσεις περίπου 20 τεμαχίων την ημέρα ανά κατάστημα (αριθμός μάλλον συντηρητικός), και το σούπερ μάρκετ διαθέτει 100 καταστήματα στην Ελλάδα και μένει ανοικτό 320 μέρες το χρόνο, ο πίνακας μας θα είχε 10.000 * 20 * 100 * 320 = 6.400.000.000 γραμμές (περίπου 6,5 δισεκατομμύρια γραμμές, αντί για 16 που έχει τώρα!). Όλες αυτές οι γραμμές θα είχαν δεδομένα: στοιχειώδεις, απλές καταγραφές που από τη μια μεριά είναι απαραίτητο να γίνουν και να αποθηκευτούν (αφού αποτελούν τον πυρήνα μιας βασικής λειτουργίας του σούπερ μάρκετ, αυτής των πωλήσεων), από την άλλη μεριά όμως δε δίνουν από μόνες τους και καμία σημαντική πληροφορία. Για να μετασχηματιστούν τα δισεκατομμύρια των δεδομένων μας σε πληροφορία πρέπει να τύχουν κάποιου είδους επεξεργασίας. Πληροφορία σημαίνει διαμόρφωση στοιχείων σε μια κατανοητή και διαχειρίσιμη μορφή (έχουν, δηλαδή, κάποιο νόημα ή αξία για αυτόν που γίνεται αποδέκτης ή είναι κάτοχος της πληροφορίας). Για παράδειγμα, θα μπορούσαμε να διαχειριστούμε, με κατάλληλη επεξεργασία μέσω Ηλεκτρονικού Υπολογιστή, τα παραπάνω δεδομένα για να απαντήσουμε σε ερωτήματα όπως: Ποιά η τάση των πωλήσεων ενός προϊόντος στο χρόνο; Υπάρχουν ημέρες ή μήνες που πουλάει περισσότερο ή λιγότερο από το μέσο όρο του ή ακολουθεί μια σχετικά ομαλή και προβλέψιμη πορεία πωλήσεων μέσα στο έτος; Η γενικότερη τάση πωλήσεων του είναι αυξητική, σταθερή ή πτωτική; (για το τελευταίο ερώτημα μπορεί να χρειαστούμε στοιχεία πωλήσεων για πάνω από ένα έτος) Ποιά η τάση των πωλήσεων για ένα συγκεκριμένο προϊόν ανά κατάστημα; Υπάρχουν καταστήματα που πετυχαίνουν μεγαλύτερες από το μέσο όρο πωλήσεις; Ποιά είναι αυτά; Πετυχαίνουν καλύτερες πωλήσεις μόνο για συγκεκριμένα προϊόντα ή για τα περισσότερα; Ποιός ο όγκος συνολικών πωλήσεων ανά κατάστημα; Ποιά καταστήματα προσφέρουν μεγαλύτερο τζίρο στην επιχείρηση; Ποιά συνεισφέρουν περισσότερο στην κερδοφορία της; Υπάρχουν καταστήματα που δημιουργούν ζημίες; (για τα τελευταία ερωτήματα θα χρειαστεί να συνδυάσουμε τα δεδομένα πωλήσεων και με άλλα δεδομένα, όπως κόστη λειτουργίας)....και πολλά άλλα ερωτήματα ίδιας και πιο περίπλοκης φύσης (π.χ. τι γίνεται με ομάδες ομοειδών προϊόντων όπως όλα τα διαφορετικά γιαούρτια και γάλατα ή με ομάδες καταστημάτων όπως όλα τα καταστήματα στην Κρήτη). Οι απαντήσεις στα παραπάνω ερωτήματα θα προσφέρουν στην επιχείρηση την πληροφορία που χρειάζεται προκειμένου να αξιοποιήσει τα δεδομένα πωλήσεων που έχει καταγράψει. Εδώ είναι που ο Ηλεκτρονικός Υπολογιστής γίνεται ιδιαίτερα χρήσιμος. Προσέξτε ότι οι απαντήσεις στα περισσότερα από τα παραπάνω ερωτήματα -13-
ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΑΣ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ δε χρειάζονται παραπάνω δεδομένα από αυτά που υπάρχουν στον αρχικό μας πίνακα (δηλαδή με τα ίδια δεδομένα μπορούμε, με διαφορετική κάθε φορά επεξεργασία, να πάρουμε διάφορα είδη πληροφοριών). Από την άλλη μεριά, σε ένα τέτοιο πίνακα με δισεκατομμύρια στοιχεία, δεν είναι εφικτό να κάνουμε χειρωνακτικά την επεξεργασία που απαιτείται προκειμένου να μετατρέψουμε τα αρχικά (δομημένα, αλλά άχρηστα) δεδομένα σε συμπυκνωμένη και χρήσιμη πληροφορία. Ο Ηλεκτρονικός Υπολογιστής λοιπόν μπορεί να είναι ένα πολύ χρήσιμο μέσο μετατροπής δεδομένων σε πληροφορίες. Τέλος, η γνώση αποτελείται από πληροφορίες που έχουν οργανωθεί ή επεξεργαστεί έτσι ώστε να μπορούν να οδηγήσουν σε αποφάσεις ή δράση. Παράδειγμα ερωτημάτων που μπορεί να έχει το σούπερ μάρκετ μας και στα οποία οι απαντήσεις θα προσφέρουν γνώση είναι: Αν κάποιο κατάστημα πετυχαίνει μεγαλύτερες πωλήσεις για κάποιο προϊόν, ποιοί είναι οι λόγοι για αυτό; Γνωρίζοντας το ρυθμό πωλήσεων ενός προϊόντος με κοντινή ημερομηνία λήξης (π.χ. φρέσκο γάλα) ή με μεγάλο κόστος αποθήκευσης, ποιά είναι η καλύτερη πολιτική παραγγελιών (χρόνος και ποσότητα) για το προϊόν αυτό από τον προμηθευτή του; Πέτυχε η προωθητική ενέργεια που είχε κάνει το σούπερ μάρκετ σε συγκεκριμένη μάρκα γιαουρτιού την περίοδο 15 Μαρτίου έως 30 Απριλίου 2008; Αν όχι, γιατί; Επηρεάστηκε και πόσο η πώληση ηλιελαίου από το σκάνδαλο με μολυσμένες παρτίδες που εισήχθησαν παράνομα στη χώρα μας τον προηγούμενο μήνα; Επηρεάστηκε μόνο μια μάρκα ηλιελαίου (αυτή που βρέθηκε στη δίνη του σκανδάλου), όλα τα ηλιέλαια ή όλα τα λάδια γενικά; Μήπως επηρεάστηκαν και άλλα προϊόντα (κάποια ίσως θετικά); Τι σημαίνει αυτό για την επικοινωνιακή ή ασφαλιστική πολιτική του σούπερ μάρκετ σε παρόμοιες περιπτώσεις στο μέλλον; Ποιοί συνδυασμοί προϊόντων φαίνεται να πετυχαίνουν καλές συνδυαστικές πωλήσεις (δηλαδή ένας πελάτης που αγοράζει το ένα προϊόν να έχει μεγάλες πιθανότητες να αγοράσει και το άλλο); Πως μπορούμε να αυξήσουμε τις πωλήσεις μας γνωρίζοντας αυτούς τους συνδυασμούς; Οι απαντήσεις σε ερωτήματα σαν τα παραπάνω είναι αυτές που τελικά θα κάνουν τη διαφορά (σε επιχειρηματικούς όρους) στην επιτυχία ή όχι των στρατηγικών επιλογών και των λειτουργικών αντιδράσεων στις συνθήκες του περιβάλλοντος της αγοράς στην οποία δραστηριοποιείται το σούπερ μάρκετ μας. Προσέξτε ότι και πάλι οι απαντήσεις στα παραπάνω ερωτήματα, μπορούν να προκύψουν με κατάλληλη ανάλυση των δεδομένων που είχε ο αρχικός μας πίνακας, όμως σε πολλά από αυτά θα χρειαστούμε και επιπρόσθετα στοιχεία από διαφορετικές περιοχές λειτουργίας του σούπερ μάρκετ αλλά και, ίσως, κάποια ερμηνεία που είναι από τη φύση της υποκειμενική (π.χ. γιατί δεν πέτυχε κάποια προωθητική ενέργεια). Αυτά τα ερωτήματα είναι πολύ πιο περίπλοκα και αφορούν όχι μόνο το παρελθόν (π.χ. ιστορικά δεδομένα πωλήσεων) αλλά έχουν και μελλοντικές προεκτάσεις (π.χ. πως να αντιδράσουμε σε παρόμοια κατάσταση στο μέλλον). Γι αυτό το λόγο λέμε ότι αυξάνουν τη γνώση της επιχείρησης. Ο Ηλεκτρονικός Υπολογιστής μπορεί να είναι ένα καλό εργαλείο μετασχηματισμού δεδομένων και πληροφορίας σε γνώση. Ενώ πάντως με σωστή χρήση ο υπολογιστής μπορεί να μας βοηθήσει στην επεξεργασία των πληροφοριών, η ερμηνεία τους παραμένει σε μεγάλο βαθμό ευθύνη του χρήστη (διαφορετικοί άνθρωποι μπορεί να ερμηνεύσουν τις συνέπειες των αποτελεσμάτων που θα δώσει ο Υπολογιστής με διαφορετικό τρόπο και να οδηγηθούν έτσι σε διαφορετικά συμπεράσματα και δράσεις). 1.1.2 Τι είναι ο Υπολογιστής; Διαισθητικά, οι περισσότεροι νοιώθουμε ότι γνωρίζουμε τι είναι ένας Ηλεκτρονικός Υπολογιστής και μπορούμε να ξεχωρίσουμε ένα αν τον δούμε. Έτσι, οι περισσότεροι θα αναγνωρίσουν ως Ηλεκτρονικό Υπολογιστή ένα σταθμό εργασίας αποτελούμενο από μονάδα, οθόνη, πληκτρολόγιο και ποντίκι, καθώς και ένα φορητό υπολογιστή τύπου laptop. Τι λέτε όμως για τα παρακάτω: Ένα μοντέρνο κινητό τηλέφωνο με κάμερα, ενσωματωμένες εφαρμογές γραφείου και δυνατότητα πρόσβασης στο Internet και στο ηλεκτρονικό ταχυδρομείο σας, είναι Ηλεκτρονικός Υπολογιστής; Αν ναι, ποιά ή ποιό από τα παραπάνω χαρακτηριστικά αν έλειπε θα έπαυε να είναι; Ένα απλό calculator (υπολογιστής τσέπης) που μπορεί να κάνει τις βασικές αριθμητικές πράξεις είναι Ηλεκτρονικός Υπολογιστής; Αν όχι, τι είναι αυτό που του λείπει; Ο ηλεκτρονικός «εγκέφαλος» ενός αυτοκινήτου που παρακολουθεί συνεχώς και σε πραγματικό χρόνο την κατάσταση διαφόρων μηχανικών και ηλεκτρονικών τμημάτων του οχήματος, είναι Ηλεκτρονικός Υπολογιστής; Ποιά χαρακτηριστικά του τον κάνουν να είναι ή να μην είναι; Η πραγματικότητα είναι πως, αν και αποτελεί αναπόσπαστο κομμάτι της καθημερινότητας για πολλούς από εμάς, λίγοι μπορούν να ορίσουν με σιγουριά τι είναι αλλά και τι δεν είναι ένας Ηλεκτρονικός Υπολογιστής. Στη Wikipedia θα βρείτε τον ορισμό του Υπολογιστή ως «μια μηχανή που χειρίζεται δεδομένα σύμφωνα με ένα σύνολο οδηγιών», ενώ στο Wiktionary (http://en.wiktionary.org/wiki/computer) ο ορισμός αναφέρει ότι ο Υπολογιστής είναι «μια προγραμματιζόμενη συσκευή που εκτελεί μαθηματικούς υπολογισμούς και λογικές πράξεις, ειδικά όταν -14-
Κεφάλαιο 1: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ μπορεί να επεξεργάζεται, αποθηκεύει και ανακτά μεγάλες ποσότητες δεδομένων πολύ γρήγορα». Και οι δυο ορισμοί δίνουν ίσως μια καλύτερη ιδέα του τι είναι ο Υπολογιστής, αλλά για δοκιμάστε να τους εφαρμόσετε στα προβλήματα που αναφέραμε πριν: Ένα κινητό τηλέφωνο σίγουρα χειρίζεται δεδομένα, αν και πολλοί θα αμφέβαλλαν για την ικανότητα του να κάνει τέτοιους χειρισμούς σε μεγάλα σύνολα δεδομένων πολύ γρήγορα. Αν όμως το αποκλείσουμε από τον ορισμό του υπολογιστή για αυτό το λόγο, θα έπρεπε να κάνουμε το ίδιο και για πολλούς παλιούς υπολογιστές που έχουν εξίσου χαμηλές (ή και χαμηλότερες) δυνατότητες. Ένα calculator εκτελεί (πιθανά ακόμα και πολύπλοκους) μαθηματικούς υπολογισμούς και λογικές πράξεις, αλλά δεν είναι προγραμματιζόμενο, με την έννοια ότι δεν μπορεί ο χρήστης του να ορίσει ένα διαφορετικό σύνολο οδηγιών και να το «μάθει» να κάνει ένα νέο είδος υπολογισμών. Ο εγκέφαλος ενός αυτοκινήτου σίγουρα χειρίζεται δεδομένα σύμφωνα με ένα σύνολο οδηγιών αλλά και πάλι δεν μπορεί να επαναπρογραμματιστεί από το χρήστη του. Παρόλο που η συζήτηση για το τι είναι και τι δεν είναι Ηλεκτρονικός Υπολογιστής μπορεί να διαρκέσει πολύ, στο βιβλίο αυτό υιοθετούμε τον ορισμό ενός Ηλεκτρονικού Υπολογιστή σαν μια προγραμματιζόμενη, ηλεκτρονική, ψηφιακή μηχανή γενικού σκοπού με μνήμη. Ας δούμε τα συστατικά μέρη αυτού του ορισμού πιο αναλυτικά: Προγραμματιζόμενη. Ένας ηλεκτρονικός υπολογιστής ξεχωρίζει από άλλες (πιθανώς εξίσου ή και περισσότερο) γρήγορες και έξυπνες ηλεκτρονικές μηχανές από το γεγονός ότι επιτρέπει στον χρήστη του να τον «προγραμματίζει», δηλαδή να τον εφοδιάζει με σύνολα εντολών ή οδηγιών (γνωστά ως «προγράμματα») τα οποία οδηγούν στον υπολογιστή στο πως θα χειριστεί τα δεδομένα που κάθε φορά επεξεργάζεται. Αυτή η δυνατότητα εξωτερικού προγραμματισμού της μηχανής είναι ίσως το πιο σημαντικό τμήμα ενός σύγχρονου ηλεκτρονικού υπολογιστή (και ο λόγος για τον οποίο τα περισσότερα calculators δε θα μπορούσαν να οριστούν ως ηλεκτρονικοί υπολογιστές). Ηλεκτρονική. Κάθε σύγχρονος ηλεκτρονικός υπολογιστής είναι κατασκευασμένος από ηλεκτρονικά στοιχεία, κυρίως ολοκληρωμένα κυκλώματα (που θα συζητήσουμε παρακάτω). Προσοχή όμως: όπως θα δούμε προς το τέλος του κεφαλαίου αυτού, οι συνεχείς εξελίξεις στις επιστήμες των υλικών μπορεί στο μέλλον να δώσουν νέους τύπους ηλεκτρονικών υπολογιστών που δε θα βασίζονται αποκλειστικά σε ηλεκτρονικά στοιχεία. Ψηφιακή. Ένας σύγχρονος υπολογιστής επεξεργάζεται πληροφορίες που μοντελοποιούνται με τη μορφή δυαδικών ψηφίων (ουσιαστικά συνδυασμούς δίτιμων καταστάσεων, που συνήθως αναπαριστούμε με τις τιμές 0 και 1). Το θέμα αυτής της δυαδικής ψηφιακής απεικόνισης όλων των πληροφοριών σε ένα σύγχρονο υπολογιστή είναι τόσο σημαντικό που θα του αφιερώσουμε ένα ολόκληρο κεφάλαιο σε αυτό το βιβλίο (το Κεφάλαιο 2). Γενικού Σκοπού. Η ιδιότητα αυτή των υπολογιστών είναι άμεση συνάρτηση της δυνατότητας προγραμματισμού τους. Μια συσκευή που μπορεί να προγραμματιστεί, δηλαδή να «μάθει» να ακολουθεί διαφορετικά σύνολα οδηγιών και να κάνει πολλά πράγματα μπορεί να χρησιμοποιηθεί και για πολλούς σκοπούς. Αυτή η ιδιότητα, πέρα από κάθε άλλη, είναι που έχει κάνει τους υπολογιστές τόσο δημοφιλείς και χρήσιμους τα τελευταία χρόνια. Σίγουρα το ψυγείο, το air condition, το αυτοκίνητο και άλλες τόσες συσκευές που χρησιμοποιούμε καθημερινά μπορεί να είναι αξιοθαύμαστες και πολύπλοκες στην κατασκευή όμως κάθε μια τους έχει κατασκευαστεί για να κάνει συγκεκριμένα πράγματα και δεν μπορεί να επαναπρογραμματιστεί για να κάνει κάτι άλλο. Πόσες άλλες συσκευές ξέρετε που μπορούν ταυτόχρονα να σας βοηθήσουν να γράψετε ένα βιβλίο (όπως αυτό που διαβάζετε τώρα), να ετοιμάσετε μια παρουσίαση, να επικοινωνήσετε με φίλους και συναδέλφους, να αναζητήσετε πληροφορίες, να ακούσετε μουσική, να δείτε ταινίες και χιλιάδες άλλα; Και όλα αυτά, «τρέχοντας» απλώς διαφορετικό κάθε φορά «πρόγραμμα» στη μηχανή αυτή! Με μνήμη. Οι ορισμοί που απαντούνται στη βιβλιογραφία συνήθως δεν τονίζουν όσο θα έπρεπε την ανάγκη προσωρινής ή μόνιμης αποθήκευσης των πληροφοριών που διαχειρίζονται οι σύγχρονοι υπολογιστές. Ουσιαστικά, ένας υπολογιστής παίρνει ένα σύνολο δεδομένων εισόδου (όπως για παράδειγμα, ο πίνακας με τις πωλήσεις του σούπερ μάρκετ που είδαμε νωρίτερα) και, με τη βοήθεια κάποιου προγράμματος (για παράδειγμα, μιας εφαρμογής στατιστικής επεξεργασίας), τα μετασχηματίζει σε ένα σύνολο δεδομένων εξόδου (για παράδειγμα, σε μια συγκεντρωτική αναφορά πωλήσεων ανά προϊόν και ανά κατάστημα). Οι περισσότεροι κατανοούν την ανάγκη και τη χρησιμότητα αποθήκευσης τόσο των δεδομένων εισόδου όσο και των δεδομένων εξόδου. Όμως, όπως θα δούμε και στη συνέχεια του κεφαλαίου, ήταν η ιδέα της αποθήκευσης και των προγραμμάτων που ουσιαστικά όρισε τους υπολογιστές όπως τους ξέρουμε σήμερα. Σε κάθε περίπτωση πάντως, για την αποθήκευση των δεδομένων και των προγραμμάτων απαιτείται κάποιο είδος προσωρινής ή μόνιμης αποθήκης (μνήμης) που συναντώνται σε όλους τους σύγχρονους υπολογιστές. -15-
ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΑΣ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Σχήμα 1.1: Επεξεργασία Δεδομένων μέσω Προγραμμάτων 1.1.3 Τι είναι το Υλικό και το Λογισμικό Υπολογιστή; Από τα προηγούμενα είναι φανερό ότι τα μέρη ενός σύγχρονου υπολογιστή μπορούν να χωριστούν σε δυο βασικές κατηγορίες. Από τη μια μεριά, υπάρχουν όλα τα απτά, μηχανικά ή ηλεκτρονικά, μέρη που είναι όλα μαζί γνωστά ως Υλικό (Hardware). Το υλικό ενός υπολογιστή αποτελείται από πράγματα όπως: 1. Ο επεξεργαστής (ή Κεντρική Μονάδα Επεξεργασίας, ΚΜΕ) 2. Τα κυκλώματα μνήμης 3. Η οθόνη 4. Ο εκτυπωτής 5. Το ποντίκι 6. Το πληκτρολόγιο 7. Ο σκληρός δίσκος 8. Το CD-ROM ή DVD-ROM drive 9.... και πολλά άλλα μέρη (κάρτα ήχου, κάρτα δικτύου, σαρωτής, ηχείο, κτλ) Από την άλλη μεριά, υπάρχουν όλα τα μη απτά μέρη, προγράμματα και εφαρμογές, που είναι όλα μαζί γνωστά ως Λογισμικό (Software). Το λογισμικό ενός υπολογιστή αποτελείται από πράγματα όπως: 1. Το λειτουργικό σύστημα 2. Τα συστήματα διαχείρισης βάσεων δεδομένων 3. Οι μεταγλωττιστές γλωσσών προγραμματισμού 4. Οι εφαρμογές γραφείου 5. Οι εφαρμογές πλοήγησης στο Internet 6.... και πολλά άλλα (εφαρμογές γραφικών, εργαλεία διαχείρισης συστήματος, κτλ) Τα σημαντικότερα από τα παραπάνω μέρη που αφορούν τόσο το Υλικό όσο και το Λογισμικό ενός τυπικού Ηλεκτρονικού Υπολογιστή θα αναλυθούν σε βάθος σε επόμενα κεφάλαια του βιβλίου. 1.1.4 Τι είναι ένα Υπολογιστικό Σύστημα; Τις περισσότερες φορές, οι όροι Υπολογιστικό Σύστημα (Computer System) και Υπολογιστής (Computer) χρησιμοποιούνται ως συνώνυμοι. Όπου τους αποδίδεται διαφορετική σημασία, ο Υπολογιστής περιλαμβάνει μόνο το βασικό Υλικό που είναι απαραίτητο για τη λειτουργία του συστήματος, ενώ το Υπολογιστικό Σύστημα νοείται ως ένα ολοκληρωμένο σύνολο Υλικού και Λογισμικού που χρησιμοποιείται για την επίτευξη ενός συγκεκριμένου σκοπού. Με άλλα λόγια, το Υπολογιστικό Σύστημα είναι υπερσύνολο του Υπολογιστή. Υπολογιστής = Επεξεργαστής + Μνήμη + Συσκευές Εισόδου/Εξόδου (Βασικό Υλικό) Υπολογιστικό Σύστημα = Υπολογιστής + Άλλο Υλικό + Λογισμικό 1.1.5 Τι είναι ένα Πληροφοριακό Σύστημα; Το Πληροφοριακό Σύστημα (Information System) είναι ένα αρκετά μεγαλύτερο υπερσύνολο του Υπολογιστικού Συστήματος. Έτσι, εκτός από το υλικό και το λογισμικό των Υπολογιστικών Συστημάτων που το αποτελούν, το πληροφοριακό σύστημα περιλαμβάνει ακόμη: Τα δεδομένα που τυγχάνουν επεξεργασίας ή παράγονται από το πληροφοριακό σύστημα -16-
Κεφάλαιο 1: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ Τους ανθρώπους που χειρίζονται ή επηρεάζονται από την παρουσία του πληροφοριακού συστήματος Τις διαδικασίες με βάση τις οποίες έχει σχεδιαστεί να γίνεται η χρήση του πληροφοριακού συστήματος για την επίτευξη κάποιου επιθυμητού αποτελέσματος. Πληροφοριακό Σύστημα = Υλικό + Λογισμικό + Δεδομένα + Άνθρωποι + Διαδικασίες Η έννοια του πληροφοριακού συστήματος είναι ιδιαίτερα σημαντική όταν αναφερόμαστε στη χρήση και τις επιπτώσεις της πληροφορικής σε περιβάλλοντα οργανισμών και επιχειρήσεων. Η σημασία του συνδυασμού των Υπολογιστικών Συστημάτων με τα δεδομένα, τους ανθρώπους και τις διαδικασίες είναι τόσο μεγάλη σε τέτοια περιβάλλοντα που ένας ολόκληρος κλάδος της Πληροφορικής ασχολείται με τα Πληροφοριακά Συστήματα, όπως έχουμε ήδη πει. Τα πληροφοριακά συστήματα δε θα αποτελέσουν όμως περαιτέρω πεδίο ενασχόλησης μας στα πλαίσια αυτού του βιβλίου, εκτός από μια μικρή εισαγωγή σε αυτά που θα κάνουμε στο Κεφάλαιο 5. 1.2 Εξέλιξη των Υπολογιστικών Συστημάτων Για να φθάσουν τα υπολογιστικά συστήματα στη σημερινή τους μορφή, ακολούθησαν διάφορες φάσεις εξέλιξης, κάθε μία από τις οποίες χαρακτηρίζεται παράλληλα από την εξέλιξη των ανθρώπινων αναγκών στην επίλυση προβλημάτων και από την τεχνολογική πρόοδο που επέτρεψε την ανάπτυξη ολοένα και πιο σύνθετων μηχανών για την επίλυση των προβλημάτων αυτών. Στις επόμενες παραγράφους θα κάνουμε μια σύντομη επισκόπηση των βασικών σταθμών σε αυτό το πολύ ενδιαφέρον ταξίδι της ιστορίας της Πληροφορικής και θα αναζητήσουμε πιθανά σενάρια για την εξέλιξη των υπολογιστικών συστημάτων στο μέλλον. 1.2.1 Η Προïστορία της Πληροφορικής Η «επίσημη» ιστορία της πληροφορικής δεν μπορεί παρά να ξεκινήσει από τη στιγμή που δημιουργήθηκε η πρώτη μηχανή που να μπορεί να χαρακτηριστεί ως «υπολογιστής» με βάση τον ορισμό που δώσαμε νωρίτερα, δηλαδή ως μια προγραμματιζόμενη, ηλεκτρονική, ψηφιακή μηχανή γενικού σκοπού με μνήμη. Αυτό όμως έγινε πάρα πολύ πρόσφατα, μόλις το 1939 (επομένως η επιστήμη της Πληροφορικής είναι ακόμα μια πολύ «νεαρή» επιστήμη). Επειδή όμως στα χιλιάδες προηγούμενα χρόνια της ανθρώπινης ιστορίας είναι φυσικό ότι υπήρχε τόσο η ανάγκη όσο και οι προσπάθειες επίλυσης υπολογιστικών προβλημάτων, είναι ενδιαφέρον να δούμε, έστω και πολύ συνοπτικά, ποιοί ήταν οι βασικοί σταθμοί στην προ-ιστορία πριν από το «επίσημο» ξεκίνημα της ιστορίας της Πληροφορικής. Αρχαιότητα: Οι πρώτες μηχανικές υπολογιστικές συσκευές που χρησιμοποιήθηκαν, αρχικά από τους Σουμέριους από το 2.700 π.χ περίπου, ήταν οι άβακες. Από το 2.200 π.χ. κάνουν την εμφάνισή τους και τα πρώτα εξειδικευμένα υπολογιστικά όργανα, όπως ο αστρολάβος. Αν και η ανάγκη για μια γενικού σκοπού μηχανή που θα ήταν σε θέση να εκτελεί αυτόματα στοιχειώδεις υπολογισμούς υπήρχε, η κατασκευή της δεν ήταν δυνατή για πολλούς αιώνες λόγω έλλειψης κατάλληλης τεχνογνωσίας και τεχνολογίας. Εικόνα 1.1: Αριστερά: Η χρήση του Άβακα σε Τραπέζι Υπολογισμών (Πηγή: Gregor Reisch, Margarita Philosophica, 1508). Δεξιά: ο Αστρολάβος των Αντικηθύρων Μεσαίωνας: Όπως και σε πολλούς άλλους τομείς της ανθρώπινης ιστορίας, τα χρόνια του σκοταδισμού υπήρξε σχεδόν μηδενική πρόοδος στην ανάπτυξη δεξιοτήτων προς την κατασκευή πιο σύνθετων υπολογιστικών μηχανών. 17 ος αιώνας: Η βιομηχανική επανάσταση επέτρεψε στους ανθρώπους να φτιάξουν για πρώτη ίσως φορά πολύπλοκες μηχανές. Έτσι, άρχισαν να κατασκευάζονται οι πρώτες υπολογιστικές μηχανές που αποτελούνταν αποκλειστικά από -17-
ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΑΣ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ μηχανικά μέρη. Το 1642 ο Blaise Pascal, θέλοντας να βοηθήσει τον εφοριακό πατέρα του στους υπολογισμούς του, κατασκεύασε την πρώτη μηχανική υπολογιστική μηχανή (την Pascaline) που μπορούσε να εκτελεί τις πράξεις της πρόσθεσης και της αφαίρεσης. Τριάντα χρόνια αργότερα, ο Γερμανός μαθηματικός Gottfried von Leibniz κατασκεύασε μια υπολογιστική μηχανή που είχε τη δυνατότητα να προσθέτει, να αφαιρεί, να πολλαπλασιάζει, να διαιρεί και να υπολογίζει τετραγωνικές ρίζες. Εικόνα 1.2: Αριστερά: Η Pascaline. Δεξιά: Η μηχανή υπολογισμών του Leibniz Αν και οι συσκευές των Pascal και Leibniz ήταν πολύ σημαντικές για την εποχή τους, ήταν εντούτοις πολύ αργές καθώς βασίζονταν σε μηχανικά μέρη και ήταν απαραίτητο να συνδυάζονται με ανθρώπινη εργασία για να παράγουν ένα ολοκληρωμένο αποτέλεσμα. Επίσης, υπολείπονταν δύο βασικών χαρακτηριστικών των σημερινών υπολογιστών: δεν είχαν τη δυνατότητα αποθήκευσης δεδομένων και αποτελεσμάτων (δεν υπήρχε μνήμη) ούτε μπορούσαν να προγραμματιστούν. 19 ος αιώνας: Την περίοδο αυτή προκύπτουν οι πρώτες προγραμματιζόμενες μηχανές, οι οποίες όμως αρχικά παραμένουν αμιγώς μηχανικές. Το 1822, ο μαθηματικός Charles Babbage σχεδιάζει αρχικά τη Διαφορική Μηχανή με δυνατότητα εκτέλεσης μόνο προσθέσεων και αφαιρέσεων και έπειτα την Αναλυτική Μηχανή, η οποία διέφερε από τη Διαφορική καθώς είχε τη δυνατότητα εκτέλεσης διαφορετικών ακολουθιών πράξεων και αναπροσαρμογής της εκτελούμενης ακολουθίας ανάλογα με τις ανάγκες του προβλήματος. Καθώς η Αναλυτική Μηχανή μπορούσε, όπως και τα σύγχρονα υπολογιστικά συστήματα, να δέχεται στην είσοδο της τα ίδια τα προγράμματα και στη συνέχεια να τα εκτελεί, θεωρείται η πρώτη προγραμματιζόμενη μηχανή στην ιστορία. Επίσης, η αρχιτεκτονική της έμοιαζε πολύ με αυτή των σύγχρονων υπολογιστών, καθώς είχε αποθήκη (δηλαδή μνήμη για την αποθήκευση των δεδομένων και των αποτελεσμάτων), επεξεργαστή (που εκτελούσε μια σειρά πράξεων επί των δεδομένων της αποθήκης) και είσοδο/έξοδο (η πρώτη δεχόταν ως δεδομένα εισόδου διάτρητες κάρτες που διαβάζονταν από τη μηχανή και η δεύτερη είχε τη δυνατότητα εκτύπωσης των αποτελεσμάτων ή διάτρησης καρτών). Εικόνα 1.3: Η Αναλυτική Μηχανή του Babbage Στην απογραφή πληθυσμού των ΗΠΑ το 1890 γίνεται η πρώτη μαζική εφαρμογή μηχανικών υπολογιστικών μηχανών σε πραγματικές συνθήκες. Οι μηχανές που χρησιμοποιήθηκαν αναπτύχθηκαν από τον Herman Hollerith του ΜΙΤ, ο οποίος αργότερα ίδρυσε την εταιρία που μετέπειτα ονομάστηκε ΙΒΜ. 1.2.2 Η Ιστορία της Πληροφορικής Η ανακάλυψη του ηλεκτρικού ρεύματος επέτρεψε να κατασκευαστούν οι πρώτες ηλεκτρικές μηχανές. Σημαντική ώθηση στην εξέλιξη των υπολογιστικών συστημάτων δόθηκε και από τις αυξημένες υπολογιστικές ανάγκες που -18-
Κεφάλαιο 1: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ δημιουργήθηκαν κατά τη διάρκεια των δύο Παγκοσμίων Πολέμων. Δυστυχώς οι διεθνείς συνθήκες της εποχής έκαναν πολλές από τις προσπάθειες να θεωρούνται απόρρητες και έτσι, ακόμα και σήμερα επικρατεί σχετική σύγχυση για το ποιός εφήυρε πρώτος τι εκείνη την περίοδο. Ξέρουμε πάντως ότι ο φυσικός John Vincent Atanasoff ξεκίνησε να εργάζεται, μαζί με το μεταπτυχιακό φοιτητή Clifford John Berry, στην ιδέα ενός ψηφιακού υπολογιστή από το 1936 και παρουσίασε το δημιούργημα του (ονομάστηκε ABC από το Atanasoff-Berry Computer) το 1939, χωρίς όμως το πανεπιστήμιο του (Iowa State) να υποβάλλει ποτέ αίτηση διπλώματος ευρεσιτεχνίας για την εφεύρεση αυτή. Όπως θα δούμε όμως, πολύ αργότερα (συγκεκριμένα το 1973) αναγνωρίστηκε ως ο εφευρέτης του πρώτου υπολογιστή στην ιστορία. Την ίδια περίοδο οι Γερμανοί δημιουργούν το Enigma, ένα περίπλοκο μηχανικό κωδικοποιητή που θεωρείται αδύνατο να «σπάσει» και δίνει στους Γερμανούς σημαντικό πλεονέκτημα στη μετάδοση κωδικοποιημένων μηνυμάτων κατά το 2 ο Παγκόσμιο Πόλεμο. Τελικά το Enigma σπάει, πρώτα στην Πολωνία και μετά στη Μεγάλη Βρετανία. Για να σπάσουν το Enigma, οι Βρετανοί, υπό την καθοδήγηση του μαθηματικού Alan Turing, δημιουργούν τον υπολογιστή Colossus Mark I (η ύπαρξη του οποίου θεωρούνταν κρατικό μυστικό μέχρι το 1970). Εικόνα 1.4: Το Enigma Το 1943 ξεκινάει και την επόμενη χρονιά ολοκληρώνεται η πρώτη ηλεκτρική υπολογιστική μηχανή από τον Howard Aiken στο πανεπιστήμιο του Harvard. Το όνομα αυτής της μηχανής ήταν Mark I και μπορούσε να πολλαπλασιάζει δύο αριθμούς με ταχύτητα τριών δευτερολέπτων, ταχύτητα εξαιρετικά γρήγορη για την εποχή. Η είσοδος δεδομένων στη μηχανή γινόταν μέσω διάτρητων καρτών καθώς και μέσω χειροκίνητων διακοπτών. Η μηχανή είχε μήκος 15,5 και ύψος 2,4 μέτρα. Το 1943 άρχισε και το 1946 τελείωσε η κατασκευή και της πρώτης ηλεκτρονικής υπολογιστικής μηχανής από τους John Mauchley και J. Presper Eckert στο πανεπιστήμιο Penn State. Η ογκώδης αυτή μηχανή πήρε το όνομα ENIAC (Electronic Numerical Integrator And Calculator) και περιλάμβανε 18.000 ηλεκτρονικές λυχνίες κενού, 1.500 ηλεκτρονόμους και ισχύ 140.000 Watt, ενώ μπορούσε να κάνει πολλαπλασιασμούς σε χρόνο λιγότερο από τρία χιλιοστά του δευτερολέπτου. Ο ENIAC αναγνωρίστηκε από το Γραφείο Ευρεσιτεχνιών των ΗΠΑ ως ο πρώτος υπολογιστής στον κόσμο. Μόνο πολλά χρόνια αργότερα, το 1973, με δικαστική απόφαση, η πατέντα για τον πρώτο ηλεκτρονικό υπολογιστή αφαιρείται από τους κατασκευαστές του ENIAC και δίνεται στον ABC. Εικόνα 1.5: Ο ENIAC Την ίδια εποχή, γίνεται μια σημαντική επανάσταση στη θεώρηση της πληροφορικής, μέσα από μια θεωρητική εργασία. Ο Ούγγρος μαθηματικός John von Neumann αναφέρει το 1945 για πρώτη φορά σε ένα άρθρο του (το οποίο δε δημοσιεύτηκε επίσημα ποτέ) την αρχή του αποθηκευμένου προγράμματος (stored program principle). Η ιδέα αυτή αφορά μια ηλεκτρονική υπολογιστική μηχανή η οποία θα είναι σε θέση να δέχεται και να διατηρεί αποθηκευμένες τις οδηγίες για την εκτέλεση ενός προγράμματος στη μνήμη της, μαζί με τα δεδομένα που θα τύχουν -19-
ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΑΣ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ χειρισμό από το πρόγραμμα αυτό. Έτσι, το αποθηκευμένο πρόγραμμα θα μπορεί να εκτελείται αυτόματα από τη μηχανή χωρίς ανθρώπινη παρέμβαση. Έτσι, ο von Neumann γίνεται ο πρώτος που διατύπωσε (αν και δεν εφάρμοσε πρώτος) την ιδέα ότι τα προγράμματα θα πρέπει να βρίσκονται αποθηκευμένα μαζί με τα πληροφοριακά δεδομένα σε κάποιο ειδικό αποθηκευτικό χώρο, τη μνήμη της μηχανής. Παράλληλα, ο von Neumann προτείνει μια αρχιτεκτονική δομή για τους υπολογιστές αυτούς την οποία, μάλιστα, ακολουθούν σε γενικές γραμμές και τα σύγχρονα υπολογιστικά συστήματα. Το 1947 μηχανικοί στα Bell Labs εφευρίσκουν το τρανζίστορ (transistor) και μάλιστα λαμβάνουν για αυτή την εφεύρεση το Νόμπελ Φυσικής. Την ίδια εποχή δημιουργείται ο πρώτος υπολογιστής που μπαίνει σε παραγωγή. Ονομάζεται UNIVAC και η πρώτη μονάδα του εγκαθίσταται το 1951 στο Γραφείο Απογραφών των ΗΠΑ. Συνολικά κατασκευάζονται 46 τέτοιοι υπολογιστές, αλλά το όλο εγχείρημα καταλήγει σε μεγάλες ζημίες για την εταιρία παραγωγής. Το τηλεοπτικό κανάλι CBS χρησιμοποιεί ένα UNIVAC για να προβλέψει (σωστά όπως αποδείχτηκε) το αποτέλεσμα των προεδρικών εκλογών στις ΗΠΑ το 1952. Το κανάλι καθυστερεί όμως τη δημοσίευση της πρόβλεψης για πάνω από 3 ώρες γιατί δεν εμπιστεύεται τη μηχανή. Σε ότι αφορά το λογισμικό, το 1952 η Grace Hopper προτείνει την ιδέα του «επαναχρησιμοποιούμενου λογισμικού», δηλαδή τμήματα κώδικα που μπορούν να αφαιρεθούν και να επανενωθούν σε κάποια «γλώσσα προγραμματισμού υψηλού επιπέδου». Έτσι, γεννιέται η ιδέα της μεταγλώττισης. Το 1956 δημιουργείται η γλώσσα προγραμματισμού Fortran, ακολουθούμενη από τις LISP (1957) και COBOL (1958). To 1961 η εταιρία Fairchild Semiconductor λανσάρει το ολοκληρωμένο κύκλωμα ή τσιπ. Η εισαγωγή των κυκλωμάτων αυτών οδηγεί σε δραματική σμίκρυνση του μεγέθους των υπολογιστών (σε μεγέθη μικρότερα του ενός δωματίου) και σε μεγάλη αύξηση των δυνατοτήτων τους. Το 1964 η ΙΒΜ λανσάρει τον πρώτο υπολογιστή για επιχειρηματική χρήση, το μοντέλο IBM S/360. Την ίδια χρονιά στο Dartmouth College γίνεται η πρώτη επίδειξη δικτυακής επικοινωνίας μεταξύ υπολογιστών σε μεγάλες αποστάσεις και αναπτύσσεται το πρώτο σύστημα δικτύωσης με το όνομα TSS. Την επόμενη κιόλας χρονιά το MIT δημιουργεί ένα πολύ καλύτερο δικτυακό σύστημα στο οποίο χρησιμοποιούνται υπολογιστές για τη διαχείριση τηλεφωνικών γραμμών. Μια από τις εταιρίες που συμμετείχαν στο εγχείρημα του ΜΙΤ, η Bell Labs, αποχωρεί την επόμενη χρονιά και αναπτύσσει δικό της λειτουργικό σύστημα που το ονομάζει Unix. Την ίδια χρονιά (1969), λανσάρεται χωρίς τυμπανοκρουσίες ένα δίκτυο ευρείας περιοχής με το όνομα ARPANet, το οποίο τα επόμενα χρόνια θα αποτελέσει ένα σημαντικό πρόδρομο του σημερινού Internet. Τέλος, πάντα την ίδια χρονιά, μια ομάδα μηχανικών φεύγουν δυσαρεστημένοι από την Fairchild Semiconductor, και ιδρύουν δική τους εταιρία με την επωνυμία Intel. Το 1973 η Xerox λανσάρει το ποντίκι, προκαλώντας επανάσταση στην επικοινωνία ανθρώπου-υπολογιστή. Το 1975 δημιουργείται ο πρώτος προσωπικός υπολογιστής με το όνομα Altair (ο Bill Gates, μαζί με άλλους, δημιουργεί ένα μεταγλωττιστή BASIC για τον υπολογιστή αυτό). Την επόμενη χρονιά, η Apple λανσάρει κι αυτή προσωπικούς υπολογιστές, η μεγάλη όμως εμπορική επιτυχία τους θα έρθει με τον IBM PC το 1981. Η επιτυχία είναι τέτοια που το περιοδικό Time ανακηρύσσει τον Υπολογιστή ως «Άνθρωπο της Χρονιάς» για το 1982. Στις επόμενες παραγράφους θα δούμε πιο αναλυτικά τους βασικούς σταθμούς της ιστορίας της πληροφορικής και τις τεχνολογίες που χρησιμοποιούνταν στους υπολογιστές κάθε εποχής. 1.2.3 Υπολογιστές Βασισμένοι σε Λυχνίες Κενού (Δεκαετία 1950) Τα διακριτικά χαρακτηριστικά των πρώτων υπολογιστών περιλαμβάνουν τη χρήση λυχνιών κενού (τεχνολογία ίδια με τους γνωστούς μας κοινούς λαμπτήρες πυρακτώσεως) για την κατασκευή των κυκλωμάτων τους, τη χρήση μαγνητικών μέσων (μαγνητικά τύμπανα ή μαγνητικές ταινίες) για την αποθήκευση των δεδομένων και τη χρησιμοποίηση διάτρητων καρτών ή χαρτοταινιών και συσκευών εκτύπωσης ή διάτρησης στην είσοδο και την έξοδο αντίστοιχα. Χαρακτηριστικό παράδειγμα τέτοιου υπολογιστή ήταν ο UNIVAC (UNIVersal Automatic Computer) που, όπως αναφέραμε, ήταν και ο πρώτος υπολογιστής μαζικής παραγωγής, αλλά και οι μηχανές 701 και 709 της IBM. -20-
Κεφάλαιο 1: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ Εικόνα 1.6: Ο UNIVAC 1.2.4 Υπολογιστές Βασισμένοι σε Τρανζίστορ (Δεκαετία 1960) Η εφεύρεση της τριόδου ηλεκτρονικής λυχνίας (τρανζίστορ) σηματοδότησε μια επανάσταση στον τρόπο που κατασκευάζονταν οι υπολογιστές. Το τρανζίστορ σε σχέση με τις λυχνίες κενού πλεονεκτεί στα εξής σημεία: Είναι περισσότερο αξιόπιστο Είναι πολύ πιο φθηνό Έχει χαμηλές απαιτήσεις τροφοδοσίας Παράγει χαμηλή θερμότητα κατά τη λειτουργία του Είναι πολύ πιο μικρό, ακόμα και από τις μικρότερες λυχνίες κενού. Το τρανζίστορ αντικατέστησε τα μαγνητικά μέσα για την αποθήκευση των δεδομένων αλλά οι υπόλοιπες μονάδες του υπολογιστή διατήρησαν τις ίδιες τεχνολογίες με αυτές των υπολογιστών που βασίζονταν σε λυχνίες κενού. Εικόνα 1.7: Διάφορα τρανζίστορ To πρώτο προγραμματιζόμενο υπολογιστικό σύστημα με τρανζίστορ που κατασκευάστηκε ήταν η μηχανή ΤΧ-0 (Transistorized experiment computer 0). Αργότερα η εταιρεία DEC (Digital Equipment Corporation) κατασκευάζει μια πολύ αξιόλογη μηχανή με το όνομα PDP-1, η οποία ήταν σημαντικά μικρότερου μεγέθους (για την εποχή) και έκανε μεγάλες πωλήσεις. Έντονη δραστηριότητα παρουσιάστηκε και στον τομέα της κατασκευής οθονών, ενώ η εποχή αυτή σηματοδότησε και την απαρχή της βιομηχανίας της πληροφορικής (υλικού και λογισμικού). Τέλος, αξίζει να σημειωθεί ότι ο ταχύτερος υπολογιστής αυτής της περιόδου ήταν κατασκευή της IBM, ο IBM-7094, ενώ το κόστος του άγγιζε τα μερικά εκατομμύρια δολάρια. 1.2.5 Υπολογιστές Βασισμένοι σε Ολοκληρωμένα Κυκλώματα (1970-σήμερα) Οι εξελίξεις τα τελευταία χρόνια είναι τόσο ραγδαίες που τα πρώτα συστήματα αυτής της κατηγορίας δε μοιάζουν σχεδόν καθόλου, ούτε από άποψη μεγέθους ούτε από άποψη δυνατοτήτων με τα σημερινά συστήματα. Θεωρούνται όμως ότι όλα ανήκουν στην ίδια κατηγορία καθώς ουσιαστικά όλα στηρίζονται στην ίδια βασική τεχνολογία, δηλαδή στη χρήση ολοκληρωμένων κυκλωμάτων (τσιπ). Τα ολοκληρωμένα κυκλώματα επινοήθηκαν από τον Jack Kilby το 1958. Αυτό που κατάφερε ο Kilby ήταν να τοποθετήσει στο εσωτερικό ενός μικρού ορθογώνιου παραλληλεπιπέδου ένα μονολιθικό κύκλωμα πυριτίου (chip) μαζί με πολλά αλληλοσυνδεόμενα τρανζίστορ καθώς και άλλα στοιχεία. Η χρήση ολοκληρωμένων κυκλωμάτων αποτέλεσε πραγματική επανάσταση στην πληροφορική, καθώς μείωσε σημαντικά το μέγεθος και παράλληλα αύξησε την ισχύ των υπολογιστών, ιδιαίτερα με τη χρήση κυκλωμάτων μεγάλης κλίμακας ολοκλήρωσης (LSI Large Scale Integration), κυκλωμάτων πολύ μεγάλης κλίμακας -21-