Νσίπληρ Νικόλαορ- ΕΣΤ 1 ο Υπονσιςσήπιο Παπαςκετή, 11/10/2013 Β4 Υπονσιςσήπιο 1
Κάθε Παπαςκετή 13:00-15:00 Παπαδόςειρ: Δετσέπα 13:00-16:00 Κύπιορ ςσόφορ σοτ Υπονσιςσηπίοτ είναι η βοήθεια ςε ππακσικά θέμασα ποτ αυοπούν (κτπίψρ!) σιρ αςκήςειρ σοτ μαθήμασορ. Υπονσιςσήπιο 2
Εξοικείψςη με θεμελιώδειρ έννοιερ και μηφανιςμούρ ποτ πποςυέπει σο λεισοτπγικό ςύςσημα UNIX και σα UNIX-like ςτςσήμασα δημιοτπγία/διαφείπιςη διεπγαςιών επικοινψνία διεπγαςιών Γλώςςα ππογπαμμασιςμού C Κλήςη ςτςσήμασορ fork Φπήςη Sockets Μονσέλο Πελάση- Εξτπηπέση (Client-Server model) Φπήςη Shared memory Φπήςη Semaphores Φπήςη Signals Υπονσιςσήπιο 3
Λεισοτπγικό ύςσημα: 1) Διαφείπιςη Πόπψν 2) Μηφανή Αυαίπεςηρ: α) Διεπγαςίερ β) Απφεία Πτπήναρ (Kernel) Λ.: 1) Kύπιο σμήμα σοτ Λ. 2) Yλοποιεί σιρ δύο βαςικέρ ονσόσησερ (processes και files) σοτ Λ.. Σπόποι Λεισοτπγίαρ: 1) User Mode 2) Kernel Mode (ο φπήςσηρ δεν μποπεί να επέμβει) Υπονσιςσήπιο 4
Διεπγαςίερ: Για να μποπέςει μια διεπγαςία φπήςση (user process) να φπηςιμοποιήςει σοτρ πόποτρ ππέπει να καλέςει σιρ κασάλληλερ ποτσίνερ σοτ kernel. Ατσό επιστγφάνεσαι μέςψ system calls Σο κάθε system call τλοποιείσαι μέςψ μίαρ ποτσίναρ η οποία βπίςκεσαι ςε μία βιβλιοθήκη ποτ ςτνδέεσαι (linked) με σον κώδικα σηρ user process. Όλερ οι ποτσίνερ ατσήρ σηρ βιβλιοθήκηρ εκσελούν μία ειδική ενσολή, ποτ ονομάζεσαι TRAP. Η ενσολή TRAP είναι ατσή η οποία αλλάζει σο ςύςσημα από user mode ςε kernel mode H κάθε διεπγαςία ανσιπποςψπεύει ένα εκσελούμενο ππόγπαμμα. Οι διεπγαςίερ μποπούν να έφοτν και μία ιεπαπφική ςφέςη. τφνά φπειάζεσαι να κοινοποιήςει ο kernel ςε ένα process πληπουοπία. Ατσό επιστγφάνεσαι με σην φπήςη σψν signals Υπονσιςσήπιο 5
Απφεία: Σα απφεία είναι οπγανψμένα ςε ομάδερ ποτ ονομάζονσαι κασάλογοι (directories). Έναρ κασάλογορ μποπεί να πεπιέφει έναν άλλο κασάλογο, και έσςι δημιοτπγείσαι ένα ιεπαπφικό ςύςσημα διαφείπιςηρ απφείψν (file system). Πέπα από σην φπηςιμοποίηςη σψν απφείψν από σοτρ φπήςσερ για μη-πποςψπινά δεδομένα, σα απφεία πποςυέποτν και ένα σπόπο τχηλού-επιπέδοτ ππόςβαςηρ ςε πεπιυεπειακέρ ςτςκετέρ Pipes: Φπηςιμοποιείσαι ώςσε δύο διεπγαςίερ να ανσαλλάξοτν πληπουοπίερ Σο «file» αποσελεί μια αυαίπεςη (abstraction) για πολλά είδη I/O: με πεπιυεπειακέρ ςτςκετέρ (π.φ., δίςκοτρ, σεπμασικά) και με διαδιεπγαςσική επικοινψνία (interprocess communication). Υπονσιςσήπιο 6
Μονολιθικά: ε ατσά σα ςτςσήμασα δεν τπάπφει καμία δομή όςον αυοπά σην οπγάνψςη σψν ποτσινών σοτ Λ. Μικπο-πτπήνερ: Ατσή η πποςέγγιςη βαςίζεσαι ςση υιλοςουία ο πτπήναρ σοτ Λ.. να είναι όςο σον δτνασόν μικπόσεπορ. Ροτσίνερ οι οποίερ παπαδοςιακά βπίςκονσαν ςσον πτπήνα (kernel) σώπα βπίςκονσαι έξψ απ ατσόν Υπονσιςσήπιο 7
«The Tanenbaum-Torvalds debate was a debate between Andrew S. Tanenbaum and Linus Torvalds, regarding Linux and kernel architecture in general. Tanenbaum began the debate in 1992 on the Usenet discussion group comp.os.minix, arguing that microkernels are superior to monolithic kernels and therefore Linux was, even in 1992, obsolete.» Υπονσιςσήπιο 8
Android, BSD, ios, Linux, OS X, QNX, Microsoft Windows,Windows Phone, IBM z/os Σα πεπιςςόσεπα από σα παπαπάνψ (εκσόρ από σα Windows) έφοτν σιρ πίζερ σοτρ ςσο Unix Υπονσιςσήπιο 9
Δεκαεσία σοτ 60 : Σο UNIX είναι Λ. ποτ αναπσύφθηκε κασά σιρ δεκαεσίερ σοτ 1960 και σοτ 1970 από ομάδα επγαζομένψν σψν επγαςσηπίψν Bell Labs) σηρ εσαιπείαρ AT&T (σην ίδια εσαιπεία ποτ ανέπστξε ση γλώςςα ππογπαμμασιςμού C). Δεκαεσία σοτ 80 : Σο MINIX είναι ένα Unix-like Λ.. βαςιζόμενο ςση ςφεδιαςσική σεφνική σψν μικπο-πτπήνψν ποτ δημιοτπγήθηκε από σον Andrew S. Tanenbaum ςσο Vrije Universiteit σοτ Amsterdam για εκπαιδετσικούρ ςκοπούρ. Σο 1987 μποπούςε κάποιορ να φπηςιμοποιήςει σο MINIX αν είφε μια κόπια σψν 12,000 γπαμμών κώδικα ςε C (kernel, memory manager και file system σοτ MINIX 1.0) ςε ένα floppy disk σηρ εποφήρ. Σην ίδια δεκαεσία αναπσύφθηκε και σο GNU project από σον Richard Stallman. Υπονσιςσήπιο 10
Δεκαεσία σοτ 90 : Σο 1991, ο Linus Torvalds υοισησήρ ςσο University of Helsinki in Finland ξεκίνηςε να πειπαμασίζεσαι ςε ένα Unix-like Λ.. Μεσά από 6 μήνερ δοτλειάρ απουάςιςε όσι η λεισοτπγικόσησα σοτ project σοτ δεν ήσαν η επιθτμησή και έσςι απουάςιςε να ανεβάςει σον κώδικά σοτ ςσο διαδίκστο. φεσικά ςύνσομα αναπσύφθηκε μια κοινόσησα 40.000 φπηςσών και ππογπαμμασιςσών ποτ δούλεχαν πάνψ ςσο Linux κάσψ από σην GNU άδεια. Υπονσιςσήπιο 11
Η πιο «trendy» λύςη είναι σο Virtualbox! Δίνει ση δτνασόσησα να έφοτμε ςσο ίδιο μηφάνημα πολλά λεισοτπγικά ςτςσήμασα σατσόφπονα (σο καθένα σπέφει ςσο δικό σοτ sandbox). Για παπάδειγμα πολλέρ διανομέρ σοτ Linux ή ακόμα και να μποπούμε να «παίζοτμε» από σα Windows μαρ με Mac OS! Μοναδικό μειονέκσημα: Απόδοςη Τπάπφοτν «άπειπα» φπηςσικά tutorials ςσο διαδίκστο. Έναρ οδηγόρ για ατσούρ ποτ «βαπιούνσαι» σο διάβαςμα: http://www.youtube.com/watch?v=vx5mhjt3qgy Μποπείσε να κασεβάςεσε σο Virtualbox από εδώ: https://www.virtualbox.org/wiki/downloads Υπονσιςσήπιο 12
Κασεβάςσε σην καινούπγια έκδοςη από εδώ: http://ubuntu-gr.org/ (επιςκευσείσε οπψςδήποσε και σο εξαιπεσικό Forum με πολλά tutorials ακόμα και με θέμασα ποτ δεν έφοτν να κάνοτν αναγκαςσικά με Linux) Τπάπφει η δτνασόσησα να κασεβάςεσε έσοιμο ςσημένο ςύςσημα πφ από εδώ: http://virtualboxes.org/images/ubuntu/ αν και είναι ςαυώρ πιο «χαγμένο» να πτθμίςεσε εςείρ σιρ παπαμέσποτρ σηρ εικονικήρ μηφανήρ ςαρ (τπάπφοτν άπειπα online tutorials) Υπονσιςσήπιο 13
Με ση βοήθεια σηρ ευαπμογήρ DEV++ από σην ιςσοςελίδα σηρ bloodshed: http://www.bloodshed.net/ Δεν σο ςτνιςσούμε όμψρ! Υπονσιςσήπιο 14
Σι φπειάζομαι για να ππογπαμμασίςψ ςσα Ubuntu; Ατσά ποτ φπειάζεςσε είναι ένα σεπμασικό και ένα editor σηρ επιλογήρ ςαρ. Σεπμασικό: Applications/Accessories/Terminal Εditor: gedit Applications/Accessories/text editor Υπονσιςσήπιο 15
cd : cd.. (ανέβα ένα επίπεδο πάνψ) cd ~ (πήγαινέ με ςσο home dir μοτ) pwd (ποτ βπίςκομαι) ls,mkdir, rmdir, mv, rm, cp και υτςικά: man <όνομα> για να μάθοτμε σι κάνοτν όλα σα παπαπάνψ! Υπονσιςσήπιο 16
Ππιν από οσιδήποσε άλλο μια ςτμβοτλή: Υσιάξσε ετανάγνψςσοτρ κώδικερ! ψςσή δομή, επαπκή ςφόλια Επαπκή ςφόλια = 60% σψν ςτνολικών γπαμμών είναι ςφόλια ( 1-2 γπαμμέρ ςφόλια για κάθε 1 γπαμμή πηγαίοτ κώδικα) ψςσή φπήςη tabs-spaces ψςσή δομή ςε ςτναπσήςειρ / τπο-απφεία Υπονσιςσήπιο 17
σην ππαγμασικόσησα θα δείξοτμε πψρ κάνοτμε compile + link + run. Δημιοτπγία απφείοτ helloworld.c ςσο getit gcc helloworld.c Δημιοτπγία απφείοτ a.out ςσον ίδιο υάκελο (ελέγξσε με ls)./a.out Υπονσιςσήπιο 18
gcc -Wall helloworld.c -o helloworld ημαίνει: «κάνε compile και link σο helloworld.c και υσιάξε σο εκσελέςιμο helloworld» Για να «σπέξψ» σο helloworld γπάυψ:./helloworld Υπονσιςσήπιο 19
gcc -Wall -c helloworld.c gcc helloworld.o -o helloworld Σο σπέφψ πάλι με:./helloworld ε κάθε βήμα κάνψ ls για να δψ σα απφεία ποτ δημιοτπγούνσαι. Υπονσιςσήπιο 20
main.c #include <stdio.h> void hello(const char *name) { printf("hello %s!\n", name); } hello.c void hello(const char *); int main(int argc, char **argv) { hello("world"); return 0; } Υπονσιςσήπιο 21
terminal $ gcc -Wall -c main.c $ gcc -Wall -c hello.c $ gcc main.o hello.o -o hello $./hello Hello World! Υπονσιςσήπιο 22
Διεπαυή ππορ άλλα κομμάσια κώδικα (API) Πεπιέφοτν ππόστπα και δηλώςειρ τναπσήςειρ Καθολικέρ (global) μεσαβλησέρ.h απφεία preprocessor: #include "header.h" Υπονσιςσήπιο 23
hello.h void hello(const char *); hello.c #include <stdio.h> void hello(const char *name) { printf("hello %s!\n", name); } main.c #include "hello.h" int main(int argc, char **argv) { hello("world"); return 0; } Υπονσιςσήπιο 24
int main(int argc, char **argv) argc: Απιθμόρ οπιςμάσψν ππογπάμμασορ argv: Πίνακαρ με σα οπίςμασα argv[0]: Σο όνομα σοτ ππογπάμμασορ Παπάδειγμα: απφείο args.c #include <stdio.h> int main(int argc, char **argv) { int i; for (i=0; i<argc; i++) printf("%d %s\n", i, argv[i]); return 0; } Υπονσιςσήπιο 25
σο Σεπμασικό:./args arg1 arg2 0./args 1 arg1 2 arg2 Εναλλακσικά: gcc args.c./a.out arg1 arg2 Υπονσιςσήπιο 26