Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Ντίρλης Νικόλαος- ΕΤΥ 1 ο Φροντιστήριο Παρασκευή, 11/10/2013 Β4 1 Λειτουργικά Συστήματα- Φροντιστήριο.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Ντίρλης Νικόλαος- ΕΤΥ 1 ο Φροντιστήριο Παρασκευή, 11/10/2013 Β4 1 Λειτουργικά Συστήματα- Φροντιστήριο."— Μεταγράφημα παρουσίασης:

1 Ντίρλης Νικόλαος- ΕΤΥ 1 ο Φροντιστήριο Παρασκευή, 11/10/2013 Β4 1 Λειτουργικά Συστήματα- Φροντιστήριο

2  Κάθε Παρασκευή 13:00- 15:00  Παραδόσεις: Δευτέρα 13:00- 16:00  Κύριος στόχος του Φροντιστηρίου είναι η βοήθεια σε πρακτικά θέματα που αφορούν (κυρίως!) τις ασκήσεις του μαθήματος. Λειτουργικά Συστήματα- Φροντιστήριο2

3  Εξοικείωση με θεμελιώδεις έννοιες και μηχανισμούς που προσφέρει το λειτουργικό σύστημα UNIX και τα UNIX-like συστήματα ◦ δημιουργία/διαχείριση διεργασιών ◦ επικοινωνία διεργασιών  Γλώσσα προγραμματισμού C  Κλήση συστήματος fork  Χρήση Sockets  Μοντέλο Πελάτη- Εξυπηρέτη (Client-Server model)  Χρήση Shared memory  Χρήση Semaphores  Χρήση Signals Λειτουργικά Συστήματα- Φροντιστήριο3

4  Λειτουργικό Σύστημα: 1) Διαχείριση Πόρων 2) Μηχανή Αφαίρεσης: α) Διεργασίες β) Αρχεία  Πυρήνας (Kernel) Λ.Σ: 1) Kύριο τμήμα του Λ.Σ 2) Yλοποιεί τις δύο βασικές οντότητες (processes και files) του Λ.Σ.  Τρόποι Λειτουργίας: 1) User Mode 2) Kernel Mode (ο χρήστης δεν μπορεί να επέμβει) Λειτουργικά Συστήματα- Φροντιστήριο4

5 Διεργασίες:  Για να μπορέσει μια διεργασία χρήστη (user process) να χρησιμοποιήσει τους πόρους πρέπει να καλέσει τις κατάλληλες ρουτίνες του kernel.  Αυτό επιτυγχάνεται μέσω system calls  Το κάθε system call υλοποιείται μέσω μίας ρουτίνας η οποία βρίσκεται σε μία βιβλιοθήκη που συνδέεται (linked) με τον κώδικα της user process.  Όλες οι ρουτίνες αυτής της βιβλιοθήκης εκτελούν μία ειδική εντολή, που ονομάζεται TRAP. Η εντολή TRAP είναι αυτή η οποία αλλάζει το σύστημα από user mode σε kernel mode  H κάθε διεργασία αντιπροσωπεύει ένα εκτελούμενο πρόγραμμα.  Οι διεργασίες μπορούν να έχουν και μία ιεραρχική σχέση.  Συχνά χρειάζεται να κοινοποιήσει ο kernel σε ένα process πληροφορία. Αυτό επιτυγχάνεται με την χρήση των signals Λειτουργικά Συστήματα- Φροντιστήριο5

6 Αρχεία :  Τα αρχεία είναι οργανωμένα σε ομάδες που ονομάζονται κατάλογοι (directories).  Ένας κατάλογος μπορεί να περιέχει έναν άλλο κατάλογο, και έτσι δημιουργείται ένα ιεραρχικό σύστημα διαχείρισης αρχείων (file system).  Πέρα από την χρησιμοποίηση των αρχείων από τους χρήστες για μη-προσωρινά δεδομένα, τα αρχεία προσφέρουν και ένα τρόπο υψηλού-επιπέδου πρόσβασης σε περιφερειακές συσκευές  Pipes: Χρησιμοποιείται ώστε δύο διεργασίες να ανταλλάξουν πληροφορίες  Το «file» αποτελεί μια αφαίρεση (abstraction) για πολλά είδη I/O: με περιφερειακές συσκευές (π.χ., δίσκους, τερματικά) και με δια- διεργαστική επικοινωνία (interprocess communication). Λειτουργικά Συστήματα- Φροντιστήριο6

7  Μονολιθικά: Σε αυτά τα συστήματα δεν υπάρχει καμία δομή όσον αφορά την οργάνωση των ρουτινών του Λ.Σ  Μικρο-πυρήνες: Αυτή η προσέγγιση βασίζεται στη φιλοσοφία ο πυρήνας του Λ.Σ. να είναι όσο τον δυνατόν μικρότερος. Ρουτίνες οι οποίες παραδοσιακά βρίσκονταν στον πυρήνα (kernel) τώρα βρίσκονται έξω απ’ αυτόν Λειτουργικά Συστήματα- Φροντιστήριο7

8 «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

9  Android, BSD, iOS, Linux, OS X, QNX, Microsoft Windows,Windows Phone, IBM z/OS…  Τα περισσότερα από τα παραπάνω (εκτός από τα Windows) έχουν τις ρίζες τους στο Unix Λειτουργικά Συστήματα- Φροντιστήριο9

10  Δεκαετία του 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

11  Δεκαετία του 90’: Το 1991, ο Linus Torvalds φοιτητής στο University of Helsinki in Finland ξεκίνησε να πειραματίζεται σε ένα Unix-like Λ.Σ.  Μετά από 6 μήνες δουλειάς αποφάσισε ότι η λειτουργικότητα του project του δεν ήταν η επιθυμητή και έτσι αποφάσισε να ανεβάσει τον κώδικά του στο διαδίκτυο.  Σχετικά σύντομα αναπτύχθηκε μια κοινότητα χρηστών και προγραμματιστών που δούλεψαν πάνω στο Linux κάτω από την GNU άδεια. Λειτουργικά Συστήματα- Φροντιστήριο11

12  Η πιο «trendy» λύση είναι το Virtualbox!  Δίνει τη δυνατότητα να έχουμε στο ίδιο μηχάνημα πολλά λειτουργικά συστήματα ταυτόχρονα (το καθένα τρέχει στο δικό του sandbox). Για παράδειγμα πολλές διανομές του Linux ή ακόμα και να μπορούμε να «παίζουμε» από τα Windows μας με Mac OS!  Μοναδικό μειονέκτημα: Απόδοση  Υπάρχουν «άπειρα» χρηστικά tutorials στο διαδίκτυο.  Ένας οδηγός για αυτούς που «βαριούνται» το διάβασμα:  Μπορείτε να κατεβάσετε το Virtualbox από εδώ: https://www.virtualbox.org/wiki/Downloads Λειτουργικά Συστήματα- Φροντιστήριο12

13  Κατεβάστε την καινούργια έκδοση από εδώ: (επισκεφτείτε οπωσδήποτε και το εξαιρετικό Forum με πολλά tutorials ακόμα και με θέματα που δεν έχουν να κάνουν αναγκαστικά με Linux)  Υπάρχει η δυνατότητα να κατεβάσετε έτοιμο στημένο σύστημα πχ από εδώ: αν και είναι σαφώς πιο «ψαγμένο» να ρυθμίσετε εσείς τις παραμέτρους της εικονικής μηχανής σας (υπάρχουν άπειρα online tutorials) Λειτουργικά Συστήματα- Φροντιστήριο13

14  Με τη βοήθεια της εφαρμογής DEV++ από την ιστοσελίδα της bloodshed:  Δεν το συνιστούμε όμως! Λειτουργικά Συστήματα- Φροντιστήριο14

15  Τι χρειάζομαι για να προγραμματίσω στα Ubuntu;  Αυτά που χρειάζεστε είναι ένα τερματικό και ένα editor της επιλογής σας.  Τερματικό: Applications/Accessories/Terminal  Εditor: gedit Applications/Accessories/text editor Λειτουργικά Συστήματα- Φροντιστήριο15

16 cd : ◦cd.. (ανέβα ένα επίπεδο πάνω) ◦cd ~ (πήγαινέ με στο home dir μου) ◦pwd (που βρίσκομαι) ls,mkdir, rmdir, mv, rm, cp …και φυσικά: man για να μάθουμε τι κάνουν όλα τα παραπάνω! Λειτουργικά Συστήματα- Φροντιστήριο16

17  Πριν από οτιδήποτε άλλο μια συμβουλή: Φτιάξτε ευανάγνωστους κώδικες!  Σωστή δομή, επαρκή σχόλια  Επαρκή σχόλια = 60% των συνολικών γραμμών είναι σχόλια (∼ 1-2 γραμμές σχόλια για κάθε 1 γραμμή πηγαίου κώδικα)  Σωστή χρήση tabs-spaces  Σωστή δομή σε συναρτήσεις / υπο-αρχεία Λειτουργικά Συστήματα- Φροντιστήριο17

18  Στην πραγματικότητα θα δείξουμε πως κάνουμε compile + link + run.  Δημιουργία αρχείου helloworld.c στο getit  gcc helloworld.c  Δημιουργία αρχείου a.out στον ίδιο φάκελο (ελέγξτε με ls) ./a.out Λειτουργικά Συστήματα- Φροντιστήριο18

19  gcc -Wall helloworld.c -o helloworld  Σημαίνει: «κάνε compile και link το helloworld.c και φτιάξε το εκτελέσιμο helloworld»  Για να «τρέξω» το helloworld γράφω: ./helloworld Λειτουργικά Συστήματα- Φροντιστήριο19

20  gcc -Wall -c helloworld.c  gcc helloworld.o -o helloworld  Το τρέχω πάλι με: ./helloworld  Σε κάθε βήμα κάνω ls για να δω τα αρχεία που δημιουργούνται. Λειτουργικά Συστήματα- Φροντιστήριο20

21 main.c #include 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

22 terminal $ gcc -Wall -c main.c $ gcc -Wall -c hello.c $ gcc main.o hello.o -o hello $./hello Hello World! Λειτουργικά Συστήματα- Φροντιστήριο22

23  Διεπαφή προς άλλα κομμάτια κώδικα (API)  Περιέχουν πρότυπα και δηλώσεις ◦Συναρτήσεις ◦Καθολικές (global) μεταβλητές .h αρχεία  preprocessor: #include "header.h" Λειτουργικά Συστήματα- Φροντιστήριο23

24 hello.h void hello(const char *); hello.c #include 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

25 int main(int argc, char **argv) ◦argc: Αριθμός ορισμάτων προγράμματος ◦argv: Πίνακας με τα ορίσματα ◦argv[0]: Το όνομα του προγράμματος Παράδειγμα: αρχείο args.c #include int main(int argc, char **argv) { int i; for (i=0; i

26 Στο Τερματικό:./args arg1 arg2 0./args 1 arg1 2 arg2 Εναλλακτικά: gcc args.c./a.out arg1 arg2 Λειτουργικά Συστήματα- Φροντιστήριο26


Κατέβασμα ppt "Ντίρλης Νικόλαος- ΕΤΥ 1 ο Φροντιστήριο Παρασκευή, 11/10/2013 Β4 1 Λειτουργικά Συστήματα- Φροντιστήριο."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google