Εισαγωγή Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Κοινωνία της Πληροφορίας Υλικό και Λογισµικό Η/Υ Γλώσσες Προγραµµατισµού Βιβλίο µαθήµατος: Chapter 1, Sec. 1-31 ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-1 Πληροφορική και Υπολογιστές Αρχή πριν 65 χρόνια Οι υπολογιστές βρίσκονται παντού Πάρα πάρα πολλές εφαρµογές Γιατί; Αυτοµατοποίηση Απλοποίηση Αποτελεσµατικότητα Κόστος ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-2 1
(Ψηφιακοί)Υπολογιστές Πότε; ~1940 ηλεκτρονικοί (electronic), ψηφιακοί (digital) 0 ή 1 ENIAC - 1946 Γιατί; στρατιωτικούς σκοπούς (υπολογισµοί για σπάσιµο κωδικών) απογραφή πληθυσµού 1960: ~ 100 υπολογιστές παγκοσµίως!!! καθένας στοίχιζε δεκάδες εκατοµµύρια ευρώ 2003: δισεκατοµµύρια υπολογιστές πλείστοι στοιχίζουν µερικές 100δες ευρώ ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-3 ENIAC 1946 ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-4 2
Προγραµµατισµός Η έννοια του προγραµµατισµού εµφανίστηκε σχεδόν ταυτόχρονα µε τους ψηφιακούς υπολογιστές Πρόγραµµα: ακολουθία από εντολές που ζητείται από τον υπολογιστή να εκτελέσει Προγραµµατισµός: ηδιαδικασίασυγγραφήςπρογραµµάτων 1960: γλώσσα µηχανής Γλώσσα για άµεση επικοινωνία µε το υλικό του υπολογιστή Ραγδαία Αναπτυξη Υποδοµής Λογισµικού Μεταγλωτιστές, Λειτουργικά Συστήµατα Σήµερα: πλειάδα από γλώσσες προγραµµατισµού ψηλού/χαµηλού επιπέδου ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-5 Κοινωνία Πληροφορίας Επανάσταση Πληροφορικής: ιαδíκτυο τροµερή διευκόλυνση στην πρόσβαση πληροφοριών Φάσµα αγοράςυπολογιστών κινητοί, palmtop, προσωπικοί υπολογιστές (personal computer - PC) ψηλής απόδοσης PCs, workstations εξυπηρετητές (servers): συχνά µε πολλούς υπολογιστές <32 πολυεπεξεργαστές (multiprocessors): 32 µε 200 υπολογιστές υπερ-υπολογιστές (supercomputers), παράλληλοι (massively parallel) >1000 υπολογιστές ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-6 3
Palmtop/Notebook Casio Palmtop Apple Notebook ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-7 Προσωπικός Υπολογιστής (PC) ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-8 4
Υπερ-υπολογιστές (SuperComputers) Cray T3-E 2048 nodes CM-5 1024 nodes ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-9 Εφαρµογές Πληροφορικής Hλεκτρονικό εµπόριο (e-commerce) Πρόσβαση, Φύλαξη και Επεξεργασία εδοµένων...εκατοµµύρια δεδοµένα/συναλλαγές Προσοµοίωση (Simulation) σχεδιασµός, λειτουργικότητα, απόδοση, προσοµοίωση κρούσης (αεροπλάνα, αυτοκίνητα, διαστηµικές αποστολές) Έξυπνα Συστήµατα: αυτοκίνητα, ηλεκτρονικές συσκευές, κινητά τηλέφωνα Αναψυχή: παιγνίδια, εικονική πραγµατικότητα, οπτικοαουστικά συστήµατα ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-10 5
Υπολογισµός Η επίλυση προβληµάτων µε τηχρήσηµαθηµατικών ή λογικών µεθόδων [wordnet, Πανεπιστήµιο Princeton] Η εκτέλεση µαθηµατικών πράξεων [ΛεξικότηςΝέαςΕλληνικήςΓλώσσας, Γ. Μπαµπινιώτη] Η κάθε είδους επεξεργασία δεδοµένων που µπορεί να αναπαρασταθεί µε µαθηµατικό τρόπο [wikipedia] Απλές πράξεις Ανθρώπινος στοχασµός ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-11 Υπολογιστής Μιαοντότηταπουµπορεί να εκτελεί υπολογισµούς Πληροφορίες εισόδου Πληροφορίες εξόδου ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-12 6
Ηλεκτρονικός Υπολογιστής (Η/Υ) H ηλεκτρονική συσκευή η οποία επεξεργάζεται πληροφορίες µε υψηλή ταχύτητα Πληροφορίες εισόδου Πληροφορίες εξόδου Αποτελείται από Υλικό και Λογισµικό ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-13 Υλικό Η/Υ (Hardware) Το σύνολο των ηλεκτρονικών και µηχανικών µερών του H/Y (δηλ. σιδερικά) ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-14 7
Λογισµικό Η/Υ (Software) Το σύνολο των προγραµµάτων πουπαρέχουντις εντολές που ο υπολογιστής πρέπει να εκτελέσει λειτουργικό σύστηµα, µεταγλωττιστής, επεξεργαστές δεδοµένων (π.χ κειµένου, αριθµών, εικόνας, ήχου), παιχνίδια (π.χ. tetris) ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-15 Βασική οµή Υλικού Υπολογιστή (Αρχιτεκτονική Von Neuman) Επεξεργασία (processing) Πληκτρολόγιο Ποντίκι Είσοδος (input) Πρωτεύουσα Μνήµη Επεξεργαστής (CPU) Έξοδος (output) Οθόνη Εκτυπωτής Πρόσβαση σε ευτερεύουσα Μνηµη, ίκτυο, ιαδίκτυο CD, δίσκος (hard, floppy), modem ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-16 8
Είσοδος/Έξοδος Χρησιµοποιείται για την εισαγώγη/εξαγωγή δεδοµένων από/στον χρήστη Έισοδος Επεξεργασία κειµένου (πρόγραµµα κτλ) εδοµένα σε πρόγραµµα Έξοδος Κατάσταση προγράµµατος Αποτέλεσµα προγράµµατος ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-17 Μνήµη Χρησιµοποιείται για την Αποθήκευση/Ανάκτηση πληροφοριών, προγραµµάτων και δεδοµένων Αποτελείται από ένα σύνολο κυψελίδων memory cells Κάθε κυψελίδα έχει µοναδική διεύθυνση και περιεχόµενο (διαταγές/εντολές ή δεδοµένα) ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-18 9
Αναπαράσταση Μνήµης ιεύθυνση Περιεχόµενα 0 1 2... 1021 1022 1023 εοds 123 err12 15.er3 0.,d% yiasou (Τα δεδοµένα στη µνήµη είναι καταχωρηµένα σε δυαδική µορφή) ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-19 Μονάδες µέτρησης µνήµης bit - b 0 ή 1 byte -B 8 bits (π.χ. 10010010 2 ) word 4 bytes doubleword 2 words ή 8 bytes KiloByte-KB 2 10 ή 1024 bytes MegaByte-MB 2 20 bytes GigaByte-GB 2 30 bytes TeraByte-TB 2 40 bytes ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-20 10
Κατηγοριοποίηση Μνήµης Ίσος χρόνος πρόσβασης σε όλες τις κυψελιδες? ΝΑΙ: Mνήµη Τυχαίας Πρόσβασης (Random Access Memory - RAM), π.χ. πρωτεύουσα µνήµη ΌΧΙ: π.χ. δευτερεύουσα µνήµη (hard disk) Τύπος Ανάγνωσης Μόνο Ανάγνωσης (Read Only Memory - ROM) Ανάγνωσης και Αποθήκευσης (Τυπικά RAM) ιάρκεια Αποθήκευσης Μόνιµη (non-volatile): µνήµη µόνο ανάγνωσης (ROM), CD - ROM, floppy και hard disk Προσωρινή (volatile): τυπικά RAM π.χ. cache, πρωτεύουσα µνήµη Τεχνολογία: CMOS (ROM, RAM, SRAM, DRAM), Μαγνητικός ίσκος (hard, floppy), Laser/Optical (CD-ROM) ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-21 Ιστορική Καινοτοµία της Μνηµης Έννοια Αποθηκευµένου Προγράµµατος (Stored Program Concept) (~1940): Οι εντολές που αποτελούν το πρόγραµµα αποθηκεύονται στην πρωτεύουσα µνήµη πριν την εκτέλεση του προγράµµατος Προηγουµένως είχαµε µηχανές που έτρεχαν µόνο ένα πρόγραµµα (calculator: ΟΧΙ υπολογιστής) Υπολογιστές Γενικής Χρήσεως (General Purpose Computers) ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-22 11
Κεντρική Μονάδα Επεξεργασίας (CPU) H Κεντρικη Μοναδα Επεξεργασιας (Central Processing Unit) ή µικροεπεξεργαστής (microprocessor) συντονίζει/αποφασίζει όλες τις λειτουργίες του υπολογιστή εκτελώντας αριθµητικές και λογικές πράξεις σε δεδοµένα Αποτελείται απο Μονάδα Ελέγχου (Control Unit) Αριθµητική και Λογική Μονάδα (ALU) Kαταχωρητές (Registers) Καταχωρητής Εντολής (Instruction Register) Μετρητής Προγράµµατος (Program Counter) ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-23 Βασική Λειτουργία CPU Κύκλος Προσκόµισης και Εκτέλεσης Εντολής (Fetch- Execute Cycle) PC Κ1 0 0 1 2 3 4 K1=(4) K1=K1+1 (4)=K1 567899 567899 + ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-24 12
Βασική Λειτουργία CPU Κύκλος Προσκόµισης και Εκτέλεσης Εντολής (Fetch- Execute Cycle) PC Κ1 1 1 0 1 2 3 4 K1=(4) K1=K1+1 (4)=K1 567899 567899 567900 + ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-25 Βασική Λειτουργία CPU Κύκλος Προσκόµισης και Εκτέλεσης Εντολής (Fetch- Execute Cycle) PC Κ1 2 0 1 2 3 4 K1=(4) K1=K1+1 (4)=K1 567899 567900 567900 + ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-26 13
ίκτυο και ιαδίκτυο Τοπικó ίκτυο (Local Area Network) Συλλογή από υπολογιστές, εκτυπωτές, scanners που επικοινωνούν µεταξύ τους Βρίσκονται σε παραπλήσια γεωγραφική τοποθεσία (π.χ ίσια αίθουσα, κτήριο, κτηριακό συγκρότηµακτλ) Παράδειγµα: Το τοπικό δίκτυο του Πανεπιστηµίου Κύπρου ίκτυα Ευρείας Εµβέλειας (Wide Area Network) Είναι δίκτυο τοπικών δικτύων Παράδειγµα: Το ιαδίκτυο (Internet) Κρίσιµες Παράµετροι: Ταχύτητα σύνδεσης (latency) και Πληροφορίες/δευτερόλεπτο (bandwidth) ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-27 Λογισµικό Υπολογιστή Πρόγραµµαείναιένασύνολοεντολών δοσµένες/γραµµένες σε γλώσσα κατανοητή από τον υπολογιστή Λογισµικό υπολογιστή είναι το σύνολο προγραµµάτων Υπολογιστής χωρίς πρόγραµµα είναι απλά λίγα γραµµάρια αχρήστων σιδερικών!!! ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-28 14
Επίπεδα Λογισµικού Λογισµικό Εφαρµογών ( Application Software) Γλώσσες Υπολογιστή (Computer Languages) Λειτουργικό Σύστηµα (Operating System) Υλικό (Hardware) ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-29 Λειτουργικό Σύστηµα (Operating System) Ελέγχει τη διεπαφή (interface) του χρήστη µε τουλικό του υπολογιστή ιαχειρίζεται την κατανοµή των πόρων (resources) του υπολογιστή - π.χ. µνήµη, CPU, Είσοδος/Έξοδος Μερικά γνωστά λειτουργικά συστήµατα Unix / Linux MAC-OS MS-DOS Windows (3.1, 95, 98, Me, NT, 2000, XP, Vista) ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-30 15
Γλώσσες Προγραµµατισµού Κάθε λογισµικό είναι γραµµένο σε κάποια γλώσσα προγραµµατισµού Basic, Lisp, Pascal, FORTRAN, COBOL, PL1, ADA, Prolog, C, C++, Java, Assembly, Machine Language Ορισµος Γλώσσας: Σύνταξη (syntax): Κανόνες γραµµατικής της γλώσσας Σηµασιολογία (semantics): Τι σηµαίνουν οι προτάσεις της γλώσσας ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-31 Ταξινόµηση Γλωσσών Προγρ. (1) Γλώσσα Υψηλού Επιπέδου (high-level language) ανεξάρτητη υπολογιστή συνδυάζει αγγλικές λέξεις και συµβατούς µαθηµατικούς συµβολισµούς (ευκολο-διαβαστη) προσανατολισµένη στην επίλυση συγκεκριµένου τοµέα προβληµάτων, π.χ. FORTRAN µηχανική και µαθηµατικά, COBOL επεξεργασία δεδοµένων και επιχειρήσεις εν υπάρχει γλώσσα υψηλού επιπέδου που να είναι καλή/κατάλληλη για όλες τις εφαρµογές Γι αυτό και υπάρχει πλειάδα γλώσσων υψηλού επιπέδου ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-32 16
Κώδικας σε C int main() { int day, month, year; /* diabase mera mhna kai xrono apo xrhsth */ printf("enter day month and year in arithmetic form: "); scanf("%d%d%d",&day,&month,&year); return 0; } ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-33 Ταξινοµήση Γλωσσών Προγρ. (2) Γλώσσα Χαµηλού Επιπέδου (low-level language) Κατανοητή µόνο από δεδοµένη κεντρική µονάδα επεξεργασίας Γλώσσα Μηχανής (machine language). Γλώσσα δυαδικών εντολών είναι η φυσική γλώσσα του επεξεργαστή (πολύ δύσκολη και περίπλοκη) Συµβολική Γλώσσα (assembly language). Χρήση µνηµονικών κωδικών που αντιστοιχούν σε εντολές της γλώσσας µηχανής (δυσκολο-διαβαστη) Οι γλώσσες χαµηλού επιπέδου επεξεργάζονται πιο γρήγορα από τον υπολογιστή, η συγγραφήόµως προγραµµάτων σε αυτές τις γλώσσες είναι πολύ δύσκολη ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-34 17
Κώδικας σε Συµβολική γλώσσα 0x4010b8 <main>: push %ebp 0x4010b9 <main+1>: mov %esp,%ebp 0x4010bb <main+3>: sub $0x10,%esp 0x4010be <main+6>: call 0x401280 < main> 0x4010c3 <main+11>: push $0x401080 0x4010c8 <main+16>: call 0x401290 <printf> 0x4010cd <main+21>: add $0x4,%esp 0x4010d0 <main+24>: lea 0xfffffff4(%ebp),%eax 0x4010d3 <main+27>: push %eax 0x4010d4 <main+28>: lea 0xfffffff8(%ebp),%eax 0x4010d7 <main+31>: push %eax 0x4010d8 <main+32>: lea 0xfffffffc(%ebp),%eax 0x4010db <main+35>: push %eax 0x4010dc <main+36>: push $0x4010ae 0x4010e1 <main+41>: call 0x401288 <scanf> 0x4010e6 <main+46>: add $0x10,%esp 0x4010e9 <main+49>: xor %eax,%eax 0x4010eb <main+51>: jmp 0x4010f0 <main+56> 0x4010ed <main+53>: lea 0x0(%esi),%esi 0x4010f0 <main+56>: mov %ebp,%esp 0x4010f2 <main+58>: pop %ebp 0x4010f3 <main+59>: ret ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-35 Μεταγλωττιστής (compiler) Λογισµικό το οποίο µεταφράζει πρόγραµµαγραµµένο σε υψηλού επιπέδου γλώσσα σε γλώσσα µηχανής Βασίζεται στην σύνταξη και σηµασιολογία της γλώσσας Άλλοι µεταφραστές: ιερµηνέας (interpreter) basic και java (πιο αργός) Assembler µετατρέπει συµβολική γλώσσα σε γλώσσα µηχανής ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-36 18
Μεταγλωττισµός (Compilation) Πηγαίος κώδικαs Μεταγλωττιστής Κώδικας αντικει- µένου foo.c gcc foo.o Source code object code ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-37 Περίληψη Κοινωνία της Πληροφορίας Υλικό Είσοδος/Έξοδος Μνήµη Κεντρική µονάδα επεξεργασίας íκτυο/ ιαδíκτυο Λογισµικό Λειτουργικό Σύστηµα Γλώσσες Προγραµµατισµού Μεταγλωττιστής ΕΠΛ 131 Αρχές Προγραµµατισµού I 1-38 19