Προγραµµατισµός ικτύων Ε-01

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Προγραµµατισµός ικτύων Ε-01"

Transcript

1 Προγραµµατισµός ικτύων Ε-01 5η ιάλεξη ιδάσκων: Νίκος Ντάρµος [ Τµήµα Πληροφορικής Πανεπιστήµιο Ιωαννίνων

2 Στο σηµερινό µάθηµα... Ταυτοχρονισµός πελάτη και εξυπηρετητή. Ελεγχος πρόσβασης, συγχρονισµός. στην πολυεπεξεργασία ϐασισµένη σε γεγονότα.

3 Ταυτοχρονισµός

4

5 Ταυτοχρονισµός Αφορά την δυνατότητα παράλληλης αποστολής ή/και επεξεργασίας αιτηµάτων. Υπάρχει σε διάφορα επίπεδα: Επίπεδο δικτύου: υπεύθυνα είναι τα πρωτόκολλα µε την πολυπλεξία που παρέχουν. Επίπεδο πελάτη: συνήθως απλά παρέχεται από το λειτουργικό σύστηµα. Επίπεδο εξυπηρετητή: σηµαντικό κοµµάτι του σχεδιασµού και της υλοποίησης µιας εφαρµογής.

6 Το πρόβληµα C10K Σήµερα ο καθένας µπορεί να αγοράσει έναν υπολογιστή µε 2 2GHz, 2 GBytes RAM και µία κάρτα δικτύου 1 Gbps. Με πελάτες, ένας τέτοιος εξυπηρετητής ϑα πρέπει να διαθέτει στον κάθε πελάτη 400kHz, 200 kbytes RAM και 100 kbps. Σίγουρα αρκετά για να πάρει ένα αρχείο 4kBytes από το δίσκο και να το στείλει στο δίκτυο, σε καθέναν από τους πελάτες, µία φορά το δευτερόλεπτο... Πως µπορούµε να επιτύχουµε αυτό τον παραλληλισµό/ταυτοχρονισµό;

7 Ταυτοχρονισµός µπορεί να επιτευχθεί µε: Πολλαπλές διεργασίες (processes). Κάθε διεργασία αποτελεί ακριβές αντίγραφο της αρχικής, µε δικό της χώρο διευθύνσεων (address space, heap, stack, registers, κτλ.) Πληρώνουµε το κόστος του context switching. Πολλαπλά νήµατα (threads). Κάθε νήµα εκτελεί τον κώδικα µίας «συνάρτησης» και µοιράζεται των χώρο διευθύνσεων µε τα υπόλοιπα νήµατα της διεργασίας. Θεωρητικά δεν υπάρχει κόστος για context switching πρακτικά όµως υπάρχει... Σχεδίαση ϐασισµένη σε συµβάντα (data/event-driven design) και ασύγχρονη Ε/Ε. Ο πελάτης/εξυπηρετητής αποτελείται από µία διεργασία µε ένα νήµα εκτέλεσης. εν υπάρχει καθόλου context switching. Ενδείκνυται για περιπτώσεις που ο χρόνος εξυπηρέτησης των αιτηµάτων είναι µικρός ή στον οποίο επικρατεί το κόστος Ε/Ε. Υβριδικές λύσεις που συνδυάζουν τα παραπάνω.

8

9 Η διεργασία (process) είναι ένα στιγµιότυπο ενός προγράµµατος όταν αυτό εκτελείται. Το ίδιο πρόγραµµα µπορεί να εκτελεστεί πολλές ϕορές ως πολλές διεργασίες. Πολλά διαφορετικά προγράµµατα µπορούν να εκτελούνται παράλληλα ως πολλές διεργασίες. Χρειάζεται µία διεργασία για να δηµιουργηθεί µία διεργασία... Κάθε διεργασία αποτελείται από: Ενα αναγνωριστικό αριθµό (process ID -- PID). Τον εκτελούµενο κώδικα. Τον χώρο µνήµης στον οποίο έχει πρόσβαση ο κώδικας αυτός. ιάφορες µεταβλητές κατάστασης (program counter, register values, stack pointer, address mappings, TLB, κτλ.) Χειριστές σηµάτων (signal handlers). Χειριστές κοινόχρηστων δεδοµένων (semaphores, shared memory segments, κτλ.)

10 διεργασιών Στο Unix διεργασίες δηµιουργούνται µε την κλήση συστήµατος fork(2). pid_t fork(void);. Μετά την κλήση της fork(2) έχουµε δύο διεργασίες: Αυτή που έκανε την κλήση (γονική διεργασία parent process). Αυτή που δηµιουργήθηκε από την κλήση (διεργασία παιδί child process). παιδιά από την ίδια γονική διεργασία ονοµάζονται «αδέρφια» (siblings). Επιστρέφει: 0 στην διεργασία παιδί. Το αναγνωριστικό της διεργασίας παιδιού στην γονική διεργασία. -1 για σφάλµα. Η διεργασία παιδί είναι ακριβές αντίγραφο της γονικής διεργασίας. Εκτελεί τον ίδιο κώδικα. Ο program counter είναι ο ίδιος (συνεχίζει από το σηµείο αµέσως µετά την fork(2)). Παίρνει ένα πλήρες αντίγραφο των δεδοµένων της γονικής διεργασίας, µαζί µε τους file descriptors και τους signal handlers.

11 διεργασιών Παράδειγµα Ο κώδικας πρέπει να ελέγχει την τιµή επιστροφής της fork(2) για να διαφοροποιείται ανάµεσα σε γονική διεργασία και διεργασία παιδί. 1 pid_t pid; 2 3 pid = fork(); 4 if (pid < 0) { 5 // Failure 6 } else if (pid == 0) { 7 // Child process 8 } else { 9 // Parent process 10 } Μία διεργασία µπορεί να µάθει το αναγνωριστικό της µέσω της getpid(2) και το αναγνωριστικό της γονικής διεργασίας µέσω της getppid(2). pid_t getpid(void); pid_t getppid(void);

12 διεργασιών Προσοχή! Εύκολα χάνεται ο έλεγχος! Fork Bomb Πόσες διεργασίες δηµιουργεί ο παρακάτω κώδικας; 1 #include <sys/types.h> 2 #include <unistd.h> 3 4 int main() { 5 int i; 6 for (i = 0; i < 10; i ++) 7 fork(); 8 }

13 διεργασιών Μία διεργασία µπορεί να εκτελέσει ένα πρόγραµµα (και να αντικατασταθεί) µέσω των κλήσεων exec*(3). int execl(const char* path, const char* arg,..., NULL); int execlp(const char* path, const char* arg,..., NULL); int execle(const char* path, const char* arg,..., NULL, char *const envp[]); int execve(const char* path, const char *const argv[], char *const envp[]); int exect(const char *path, char *const argv[], char *const envp[]); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); Η παράµετρος 0 είναι πάντα το όνοµα του προγράµµατος (argv[0]). Η «τελευταία» παράµετρος γραµµής εντολών πρέπει πάντα να είναι NULL.

14 διεργασιών Αντικαθίσταται ο κώδικας και ο χώρος µνήµης της αρχικής διεργασίας και η εκτέλεση αρχίζει από το µηδέν. ιατηρούνται οι µεταβλητές περιβάλλοντος και οι file descriptors. Αν η κλήση επιτύχει, δεν υπάρχει οδός επιστροφής. Συνήθως οι fork(2) και exec*(3) χρησιµοποιούνται µαζί. Π.χ. από το shell για να εκτελέσει τις εντολές. 1 if (fork() == 0) { 2 execl("/bin/ls", "ls", "-l", "/home/ntarmos", NULL); 3 perror("execl"); 4 }

15 διεργασιών Μια διεργασία τερµατίζει όταν: 1 τελειώσει η εκτέλεση της main(...) της ή 2 καλέσει τη συνάρτηση exit(3). Μια διεργασία δε µπορεί να τερµατίσει απευθείας µία άλλη διεργασία. Μπορεί µόνο να της στείλει ένα σήµα (signal). Η διεργασία «παραλήπτης» ϑα εκτελέσει τον αντίστοιχο χειριστή (signal handler). Ισως τερµατίσει, ίσως όµως να κάνει και κάτι άλλο... SIGINT: εξ ορισµού τερµατίζει, µπορεί όµως να αλλαχθεί (ˆC). SIGKILL: εξ ορισµού τερµατίζει, δε µπορεί να αλλαχθεί.

16 Zombies Το λειτουργικό σύστηµα δεν απελευθερώνει όλους τους πόρους µίας διεργασίας όταν αυτή τερµατίσει. Η γονική διεργασία ίσως ενδιαφέρεται για την τιµή επιστροφής της. Η διεργασία µετατρέπεται σε «zombie». Η εκτέλεσή της έχει ολοκληρωθεί. Η γονική διεργασία δεν έχει λάβει την τιµή τερµατισµού της. Αν η γονική διεργασία έχει ήδη τερµατίσει, η διεργασία zombie «υιοθετείται» από την init() (PID: 1). που παραµένουν σε κατάσταση zombie καταναλώνουν πόρους συστήµατος. Η γονική διεργασία απελευθερώνει τους πόρους αυτούς «περιµένοντας» τον τερµατισµό της διεργασίας παιδιού. Μέσω των κλήσεων συστήµατος wait*(2). pid_t wait(int *status); pid_t waitpid(pid_t wpid, int *status, int options); pid_t wait3(int *status, int options, struct rusage *rusage); pid_t wait4(pid_t wpid, int *status, int options, struct rusage *rusage); Μέσω ενός χειριστή σήµατος για το σήµα SIGCHLD (ή αγνόησής του).

17 Zombies wait*(2) Οι κλήσεις αυτές µπλοκάρουν έως ότου κάποιο παιδί αλλάξει κατάσταση (π.χ. τερµατίσει) ή επιστρέφουν αµέσως αν υπάρχει κάποιο zombie. Η wait(2) είναι η απλούστερη: Επιστρέφει το process ID του παιδιού που άλλαξε κατάσταση και ϑέτει το *status στην τιµή τερµατισµού του. Η waitpid(2) δίνει περισσότερο έλεγχο. Η παράµετρος wpid καθορίζει για ποιο παιδί ϑα περιµένουµε (=-1 σηµαίνει για οποιοδήποτε). Η παράµετρος options καθορίζει διάφορες επιλογές. Π.χ. WNOHANG σηµαίνει ότι η κλήση δε ϑα µπλοκάρει αν δεν υπάρχει ήδη κάποιο παιδί σε κατάσταση zombie. 1 void my_sigchld(int sig) { 2 while(waitpid(-1, NULL, WNOHANG) > 0) {} 3 signal(sigchld, my_sigchld); 4 }

18 Κάθε διεργασία είναι χωριστή «οντότητα» και δε µπορεί εν γένει να επηρεάσει άµεσα τις υπόλοιπες διεργασίες του συστήµατος. Χωριστός χώρος διευθύνσεων. Χωριστές µεταβλητές περιβάλλοντος και συστήµατος. Μπορεί ωστόσο να «επικοινωνήσει» µαζί τους, µέσω µηχανισµών inter-process communication (IPC). Μέσω «σηµάτων» (signals). Μέσω «σωλήνων» (pipes & fifos). Μέσω «υποδοχών» (sockets). Μέσω «κοινής µνήµης» (shared memory). Μέσω «σηµαφόρων» (semaphores). Εκτός από τις υποδοχές, οι υπόλοιποι µηχανισµοί λειτουργούν µόνο για διεργασίες στον ίδιο κόµβο.

19 Σήµατα Τα σήµατα είναι ένας τρόπος να ειδοποιήσουµε µία διεργασία για κάποια κατάσταση ή/και να της Ϲητήσουµε να κάνει κάποια λειτουργία. Σε κάθε δυνατό σήµα αντιστοιχεί και µία συνάρτηση «χειριστής» (signal handler). Παραδίδονται και επεξεργάζονται ασύγχρονα. Οταν µια διεργασία λάβει ένα σήµα διακόπτει την κανονική ϱοή εκτέλεσής της και εκτελεί τον χειριστή του σήµατος. Προσοχή: σήµατα µπορεί να έρθουν ανά πάσα στιγµή! Μία διεργασία µπορεί να στείλει ένα σήµα σε µία άλλη µέσω της κλήσης συστήµατος kill(2): int kill(pid_t pid, int sig); pid: το αναγνωριστικό της διεργασίας στην οποία ϑα σταλεί το σήµα. 0: το σήµα στέλνεται σε όλους τις διεργασίες τις οµάδας διεργασιών. -1: το σήµα στέλνεται σε όλες τις διεργασίες στις οποίες έχει πρόσβαση ο χρήστης. sig: ο αριθµός του σήµατος που ϑα σταλεί. 0: έλεγχος ορθότητας παραµέτρων.

20 Σήµατα Σήµατα για καταστάσεις σφαλµάτων: SIGFPE: λάθος πράξης κινητής υποδιαστολής. SIGSEGV: πρόσβαση σε ϑέση µνήµης που δεν ανήκει στη διεργασία. SIGBUS: πρόσβαση σε ϑέση µνήµης µε λάθος ευθυγράµµιση (alignment). SIGPIPE: εγγραφή σε pipe χωρίς αναγνώστη. Σήµατα για έλεγχο εκτέλεσης διεργασιών: SIGINT: διακοπή εκτέλεσης. SIGTERM: «οµαλός» τερµατισµός διεργασίας. SIGKILL: τερµατισµός διεργασίας. SIGSTOP/SIGTSTP, SIGCONT: παύση κι επανεκκίνηση εκτέλεσης. SIGCHLD: αλλαγή κατάστασης διεργασίας παιδιού. Σήµατα για «ενηµέρωση» διεργασιών: SIGALRM: «ξυπνητήρι». SIGUSR1, SIGUSR2: σήµατα γενικής χρήσης. Για πλήρη λίστα δείτε την signal(3) και εκτελέστε την εντολή kill -l.

21 Σήµατα Ο χειριστής είναι απλά µία συνάρτηση void func(int). Εγκαθίσταται µε τις συναρτήσεις signal(3) και sigaction(2): void (*signal(int sig, void (*func)(int)))(int); int sigaction(int sig, const struct sigaction* act, struct sigaction *oact); Ορίζονται οι «συναρτήσεις» SIG_IGN (αγνόησε το σήµα) και SIG_DFL (προκαθορισµένος χειριστής από το σύστηµα). Αν χρησιµοποιούµε την signal(3), ο χειριστής επαναρχικοποιείται στον προκαθορισµένο από το σύστηµα σε κάθε κλήση του και πρέπει να το προβλέπουµε στο χειριστή.

22 Σήµατα Παράδειγµα 1 #include <stdio.h> 2 #include <sys/types.h> 3 #include <signal.h> 4 5 void my_sigusr1(int sig) { 6 printf("got signal #%d\n", sig); 7 signal(sig, my_sigusr1); 8 } 9 void my_sigchld(int sig) { 10 while(waitpid(-1, NULL, WNOHANG) > 0) {} 11 signal(sigchld, my_sigchld); 12 } int main() { 15 void (*oldhandler)(int); 16 oldhandler = signal(sigusr1, my_sigusr1); 17 signal(sigchld, my_sigchld); 18 signal(sigchld, SIG_IGN); 19 // kill(getpid(), SIGUSR1); 21 // }

23 Σήµατα Προσοχή! Οι χειριστές εκτελούνται ασύγχρονα! Η ϱοή του προγράµµατός µας ίσως διακοπεί από λήψη σήµατος! ε µπορούµε να χρησιµοποιήσουµε όλες τις συναρτήσεις µέσα σε έναν χειριστή! εν υπάρχει «ουρά σηµάτων»! Προσοχή µε τις κοινές/καθολικές µεταβλητές (π.χ. errno)!

24 Pipes & FIFOs Οι «σωλήνες» (pipes) είναι µονόδροµα κανάλια επικοινωνίας ανάµεσα σε δύο διεργασίες. Ο,τι γράφεται στο ένα άκρο, διαβάζεται από το άλλο. Αν απαιτείται αµφίδροµη επικοινωνία, χρησιµοποιούµε είτε 2 pipes είτε sockets (socketpair(2)). ηµιουργούνται µε χρήση της συνάρτησης pipe(2). int pipe(int *fildes); Το fildes είναι πίνακας 2 ϑέσεων: fildes[0]: προς ανάγνωση. fildes[1]: προς εγγραφή. Μόνο διεργασίες µε κοινή γονική διεργασία µπορούν να επικοινωνήσουν µέσω «σωλήνων». Για διαφορετικές περιπτώσεις, υπάρχουν τα FIFOs (ή named pipes). Καθορίζεται ένα ειδικό αρχείο µέσω του οποίου γίνεται η επικοινωνία. Το αρχείο δηµιουργείται µε την mkfifo(2). int mkfifo(const char *path, mode_t mode); Κατόπιν το χειριζόµαστε ως αρχείο (open(2), read(2), write(2), close(2)).

25 Pipes & FIFOs Παράδειγµα 1 #include <stdio.h> 2 #include <unistd.h> 3 4 int main() { 5 int pid, fd[2]; 6 char buf[14]; 7 8 if (pipe(fd) < 0) return -1; 9 if ((pid = fork()) == 0) { 10 close(fd[0]); 11 write(fd[1], "Hello father!", 14); 12 } else { 13 close(fd[1]); 14 read(fd[0], buf, 14); 15 printf("child said: %s\n", buf); 16 waitpid(pid, NULL, 0); 17 } 18 return 0; 19 }

26 Κοινή µνήµη Οι διεργασίες έχουν καθεµία το δικό της χώρο διευθύνσεων. Ο µηχανισµός της «κοινής µνήµης» (shared memory) επιτρέπει σε πολλές διεργασίες να έχουν ταυτόχρονα πρόσβαση σε ένα τµήµα µνήµης. Η κοινή µνήµη οργανώνεται σε τµήµατα (segments). Τα τµήµατα αυτά πρέπει: 1 Να δηµιουργούνται (shmget(2)). 2 Να προσαρτώνται από τις αντίστοιχες διεργασίες (shmat(2)). 3 Μετά τη χρήση τους, να αποπροσαρτώνται (shmdt(2)). 4 Η τελευταία διεργασία πρέπει να τα καταστρέφει (shmctl(2)). Προσοχή: Κοινή πρόσβαση race conditions.

27 Κοινή µνήµη : shmget(2) int shmget(key_t key, int size, int flag); key: αναγνωριστικό µε το οποίο ταυτοποιείται το νέο τµήµα κοινής µνήµης. IPC_PRIVATE: προς χρήση µόνο από διεργασίες παιδιά της παρούσας διεργασίας. Για τη δηµιουργία του αναγνωριστικού µπορεί να χρησιµοποιηθεί η συνάρτηση ftok(3). key_t ftok(const char *path, int id); size: µέγεθος (σε bytes) του τµήµατος. flag: IPC_CREAT για δηµιουργία νέου τµήµατος. IPC_EXCL για έλεγχο µοναδικότητας του νέου τµήµατος. ικαιώµατα πρόσβασης στο νέο τµήµα (rw-rw-rw-). Επιστρέφει το αναγνωριστικό του τµήµατος ή -1 για σφάλµα. Παράδειγµα: 1 #include <sys/ipc.h> 2 #include <sys/shm.h> 3 key_t shmkey; 4 int shmid; 5 shmkey = ftok(argv[0], getpid()); 6 if (shmkey == -1) error(/*... */); 7 shmid = shmget(shmkey, 10, IPC_CREAT IPC_EXCL 0640); 8 if (shmid == -1) error(/*... */);

28 Κοινή µνήµη Προσάρτηση: shmat(2) void* shmat(int shmid, const void *addr, int flag); shmid: αναγνωριστικό του τµήµατος που ϑα προσαρτηθεί, όπως επιστράφηκε από την shmget(2). addr: διεύθυνση στην οποία ϑα προσαρτηθεί το τµήµα. 0: αποφασίζει ο πυρήνας του λειτουργικού.!0 και!(flag & SHM_RND): στην διεύθυνση addr.!0 και flag & SHM_RND: στην κοντινότερη «ευθυγραµµισµένη» διεύθυνση στο addr. flag: διάφορες επιλογές. SHM_RND: όπως παραπάνω. SHM_RDONLY: πρόσβαση µόνο ανάγνωσης. Επιστρέφει δείκτη στη διεύθυνση στην οποία έγινε η προσάρτηση ή -1 για σφάλµα. Αποπροσάρτηση: shmdt(2) int shmdt(const void *addr); addr: δείκτης στο προς αποπροσάρτηση τµήµα. Επιστρέφει 0 για επιτυχία, -1 για αποτυχία. Προσοχή: εν καταστρέφει το τµήµα! Τα τµήµατα δεν καταστρέφονται όταν τερµατίσουν οι αντίστοιχες διεργασίες!

29 Κοινή µνήµη Ελεγχος και καταστροφή: shmctl(2) int shmctl(int shmid, int cmd, struct shmid_ds *buf); shmid: αναγνωριστικό του τµήµατος που ϑα επεξεργαστεί η συνάρτηση. cmd: IPC_STAT: αποθηκεύει πληροφορίες για το τµήµα στο χώρο που δείχνει ο δείκτης buf. IPC_SET: αλλάζει τον ιδιοκτήτη (uid και gid) και τα δικαιώµατα πρόσβασης (mode) του τµήµατος σε αυτά που καθορίζει η δοµή στην οποία δείχνει ο buf. IPC_RMID: σηµειώνει το τµήµα ως προς καταστροφή. Καµία διεργασία δε µπορεί πλέον να το προσαρτήσει. Οταν το τµήµα δε ϑα είναι πια προσαρτηµένο σε καµία διεργασία, ο πυρήνας ϑα το απελευθερώσει. είτε τις ipcs(1) και ipcrm(1). struct shmid_ds { struct ipc_perm shm_perm; /* permissions */ int shm_segsz; /* size of segment */ pid_t shm_lpid; /* PID of last op */ pid_t shm_cpid; /* PID of creator */ short shm_nattch; /* # of attached procs */ time_t shm_atime; /* last shmat(2) */ time_t shm_dtime; /* last shmdt(2) */ time_t shm_ctime; /* last shmctl(2) */ void* shm_internal; /* SysV compatibility */ }; struct ipc_perm { unsigned short cuid; /* creator uid */ unsigned short cgid; /* creator gid */ unsigned short uid; /* user id */ unsigned short gid; /* group id */ unsigned short mode; /* r/w perms */ unsigned short seq; /* sequence # */ key_t key; /* ipc key */ };

30 Κοινή µνήµη Παράδειγµα 1 int main() { 2 int shmid, *intptr; 3 if ((shmid = shmget(ipc_private, sizeof(int), 0600)) == -1) 4 return 1; 5 if ((intptr = (int*)shmat(shmid, 0, 0)) == (void*)-1) 6 return 2;; 7 *intptr = 10; 8 9 if (!fork()) { // Child process 10 printf("shared int value: %d\n", *intptr); 11 *intptr = 20; 12 shmdt((void*)intptr); 13 } else { // Parent process 14 sleep(1); 15 printf("shared int value: %d\n", *intptr); 16 shmdt((void*)intptr); 17 shmctl(shmid, IPC_RMID, 0); 18 } 19 return 0; 20 }

31 Ανταγωνισµός Κοινή πρόσβαση Ανταγωνισµός Ανάγκη για συγχρονισµό! 1 int *accountbalance; /* shared memory data */ 2 if (withdrawal <= *accountbalance) 3 *accountbalance -= withdrawal; ιεργασία 1 ιεργασία 2 // account balance = 12000, // withdrawal = if (withdrawal <= *accountbalance) Context switch *accountbalance -= withdrawal; // account balance = -3000, // account balance = 12000, // withdrawal = 5000 if (withdrawal <= *accountbalance) *accountbalance -= withdrawal; Context switch // account balance = -3000,

32 Σηµαφόροι Η «κλασσική µονάδα» συγχρονισµού. Παίρνουν τιµές ϑετικών ακεραίων. ύο ϐασικές ατοµικές (atomic) λειτουργίες: DOWN(...): Αν η τιµή του σηµαφόρου είναι 1 τότε µείωσέ την κατά 1. Αλλιώς (=0) µπλόκαρε τη διεργασία. UP(...): Αν υπάρχουν διεργασίες που έχουν µπλοκάρει στο σηµαφόρο, ξεµπλόκαρε µία. Αλλιώς αύξησε την τιµή του σηµαφόρου κατά 1.

33 Σηµαφόροι Χρησιµοποιούνται είτε για αµοιβαίο αποκλεισµό (mutual exclusion mutex) είτε για αναµονή κάποιου γεγονότος. Mutex: Θέτουµε το σηµαφόρο στην τιµή 1. DOWN(...) για να εισέλθουµε στην περιοχή αµοιβαίου αποκλεισµού. UP(...) για να εξέλθουµε από την περιοχή αµοιβαίου αποκλεισµού. Αναµονή γεγονότος: Θέτουµε το σηµαφόρο στην τιµή 0. DOWN(...) για να περιµένουµε για το γεγονός. UP(...) για να σηµατοδοτήσουµε ότι το γεγονός συνέβη. 1 int *accountbalance; /* shared memory data */ 2 semaphore mutex = 1; 3 //... 4 DOWN(mutex); 5 if (withdrawal <= *accountbalance) 6 *accountbalance -= withdrawal; 7 UP(mutex);

34 Σηµαφόροι : semget(2) int semget(key_t key, int nsems, int flag); ηµιουργεί πίνακα από σηµαφόρους. key: αναγνωριστικό µε το οποίο ταυτοποιείται ο πίνακας των σηµαφόρων (όπως ακριβώς και στην shmget(2)). nsems: πλήθος σηµαφόρων στον πίνακα. flag: όπως ακριβώς και στην shmget(2). Επιστρέφει το αναγνωριστικό του πίνακα των σηµαφόρων ή -1 για σφάλµα.

35 Σηµαφόροι Πράξεις: semop(2) int semop(int semid, struct sembuf *array, size_t nops); Εκτελεί ατοµικά τις πράξεις που ορίζονται. semid: αναγνωριστικό του πίνακα σηµαφόρων στον οποίο ϑα γίνουν οι πράξεις. array: πίνακας από πράξεις. sem_num: η ϑέση του σηµαφόρου στον πίνακα. sem_op: κατά πόσο να µεταβληθεί η τιµή του σηµαφόρου (1: UP, -1: DOWN, 0: περίµενε έως ότου η τιµή του σηµαφόρου γίνει 0). sem_flg: καθορίζει διάφορες επιλογές της πράξης (δείτε το man page). nops: πλήθος πράξεων στον πίνακα array. Επιστρέφει 0 για επιτυχία ή -1 για σφάλµα. void DOWN(int semid, int sem) { struct sembuf op; op.sem_num = sem; op.sem_op = -1; op.sem_flg = 0; semop(semid, &op, 1); } void UP(int semid, int sem) { struct sembuf op; op.sem_num = sem; op.sem_op = 1; op.sem_flg = 0; semop(semid, &op, 1); } struct sembuf { u_short sem_num; short sem_op; short sem_flg; };

36 Κοινή µνήµη Ελεγχος και καταστροφή: semctl(2) int semctl(int semid, int semnum, int cmd,...); semid: αναγνωριστικό του πίνακα σηµαφόρου. semnum: ϑέση του σηµαφόρου στον πίνακα....: κάποιες πράξεις δέχονται και ως επιπλέον όρισµα έναν union τύπου semun. cmd: IPC_STAT: αποθηκεύει πληροφορίες για τον πίνακα σηµαφόρων στο χώρο που δείχνει ο δείκτης buf. IPC_SET: αλλάζει τον ιδιοκτήτη (uid και gid) και τα δικαιώµατα πρόσβασης (mode) του πίνακα σηµαφόρων σε αυτά που καθορίζει ο buf. IPC_RMID: αφαιρεί άµεσα τον πίνακα σηµαφόρων από το σύστηµα, ξεµπλοκάροντας και όσες διεργασίες περίµεναν σε κάποιον σηµαφόρο. GETVAL: επέστρεψε την τιµή του σηµαφόρου. SETVAL: ϑέσε το σηµαφόρο στην τιµή val. GETALL, SETALL: αποθήκευσε ή ϑέσε τις τιµές όλων των σηµαφόρων σε ή ίσες µε τον πίνακα array. είτε το man page... union semun { int val; struct semid_ds* buf; u_short* array; }; struct semid_ds { struct ipc_perm sem_perm; struct sem* sem_base; u_short sem_nsems; time_t sem_otime; long sem_pad1; time_t sem_ctime; long sem_pad2; long sem_pad3[4]; };

37 Σηµαφόροι Παράδειγµα 1 int main() { 2 int my_sem = semget(ipc_private, 1, 0600); // Create, value = 0 3 if (!fork()) { // Child process 4 DOWN(my_sem, 0); 5 printf("child got the mutex\n"); 6 } else { // Parent process 7 printf("parent sleeping for 5 \n"); 8 sleep(5); 9 printf("parent releasing the mutex\n"); 10 UP(my_sem, 0); 11 wait(0); 12 semctl(my_sem, 0, IPC_RMID); 13 } 14 return 0; 15 }

38 Συγχρονισµός

39 Συγχρονισµός Τα πολυ-διεργασιακά συστήµατα είναι συνήθως «ϐαριά». Η fork(2) πρέπει να δηµιουργήσει αντίγραφα της διεργασίας, του χώρου µνήµης της, κτλ. Χρόνος σπαταλιέται στο context switching. Η επικοινωνία ανάµεσα στις διεργασίες είναι «στρυφνή». Η απάντηση: (threads). Ουσιαστικά «ελαφρές διεργασίες». Κάθε διεργασία µπορεί να περιέχει πολλά νήµατα εκτέλεσης. Κάθε νήµα εκτελεί µία συνάρτηση του συνολικού προγράµµατος εν χρειάζεται δηµιουργία αντιγράφου του κώδικα της διεργασίας. Ολα τα νήµατα µοιράζονται το χώρο µνήµης της διεργασίας εν χρειάζεται δηµιουργία αντιγράφου των δεδοµένων της διεργασίας. Κάθε νήµα έχει δικά του αντίγραφα των program counter, stack & stack pointer, errno, signal mask και ένα µοναδικό αναγνωριστικό (thread id). Προσοχή: Ο παραλληλισµός και η κοινή πρόσβαση των νηµάτων στους πόρους της διεργασίας καθιστά υποχρεωτικό τον συγχρονισµό τους! εν είναι όλες οι κλήσεις συστήµατος και οι συναρτήσεις βιβλιοθηκών ασφαλείς για χρήση σε νήµατα!

40 Συγχρονισµός Το πρότυπο POSIX ορίζει ένα ϐασικό API για υποστήριξη νηµάτων (POSIX threads ή pthreads). ιάφορα µοντέλα υλοποίησης νηµάτων: Ν προς 1: Τα νήµατα υλοποιούνται εξολοκλήρου στο επίπεδο χρήστη (user-space) και ο πυρήνας του λειτουργικού συστήµατος δεν γνωρίζει και δεν υποστηρίζει τίποτα σχετικό. Ν προς Ν: Κάθε νήµα υλοποιείται ως µια διεργασία νήµατα της ίδιας ιδεατής διεργασίας χρησιµοποιούν κοινή µνήµη και ο πυρήνας ϕροντίζει ώστε να λειτουργούν σαν πραγµατικά νήµατα. Ν προς Μ: Ενδιάµεση λύση όπου ο πυρήνας προσφέρει κάποια υποστήριξη αλλά οι αποφάσεις χρονοδροµολόγησης λαµβάνονται σε χώρο χρήστη. 1 προς 1: «Πραγµατικά» νήµατα. Θεωρητικά δεν υπάρχει context switching. Πρακτικά όµως;

41 Συγχρονισµός νηµάτων: pthread_create(3) int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg); ηµιουργεί ένα νέο νήµα µε αναγνωριστικό thread και χαρακτηριστικά attr (µε NULL χρησιµοποιεί τα defaults), το οποίο ϑα εκτελεί τη συνάρτηση start_routine µε όρισµα arg. int pthread_attr_init(pthread_attr_t *attr); Αρχικοποιεί τη δοµή attr. int pthread_attr_destroy(pthread_attr_t *attr); Απελευθερώνει τη δοµή attr. είτε το man page του pthread_attr(3).

42 νηµάτων Συγχρονισµός Ενα νήµα τερµατίζει όταν: Τερµατίσει η διεργασία στην οποία ανήκει. Τερµατίσει το γονικό του νήµα. Επιστρέψει η συνάρτηση start_routine. Καλέσει τη συνάρτηση pthread_exit(3). void pthread_exit(void *value_ptr); value_ptr: δείκτης στην τιµή επιστροφής του νήµατος. Προσοχή: µη χρησιµοποιείτε διευθύνσεις τοπικών µεταβλητών της start_routine! void pthread_join(pthread_t thread, void **value_ptr); Οπως και µε τις διεργασίες, το γονικό νήµα πρέπει να συλλέξει την τιµή επιστροφής του νήµατος. Το γονικό νήµα µπλοκάρει έως ότου το νήµα thread τερµατίσει. Αν το value_ptr δεν είναι NULL, αποθηκεύει εκεί την τιµή επιστροφής του νήµατος.

43 νηµάτων Συγχρονισµός int pthread_detach(pthread_t thread); «Αποδεσµεύει» το νήµα thread. Ενα νήµα σε αυτή την κατάσταση δε χρειάζεται να γίνει pthread_join(3). Ενα νήµα σε αυτή την κατάσταση δεν τερµατίζει όταν τερµατίσει το πατρικό του νήµα. Ολα τα νήµατα είναι εξ ορισµού σε κατάσταση «joinable» (δηλ. δεσµευµένα). Μπορούµε να δηµιουργήσουµε αποδεσµευµένο εξ αρχής νήµα χρησιµοποιώντας τη συνάρτηση pthread_attr_setdetachstate(3). 1 #include <pthread.h> 2 3 pthread_t id 4 pthread_attr_t attr; 5 6 pthread_attr_init(&attr); 7 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); 8 pthread_create(&id, &attr, start_routine, NULL);

44 Συγχρονισµός Παράδειγµα 1 #include <pthread.h> 2 #include <stdio.h> 3 4 int global_int = 0; 5 6 void* my_thread(void *param) { 7 global_int += *((int*)param); 8 return NULL; 9 } int main() { 12 pthread_t id; 13 int p = 10; printf("global_int: %d\n", global_int); 16 pthread_create(&id, NULL, my_thread, (void*)&p); 17 pthread_join(id, NULL); 18 printf("global_int: %d\n", global_int); 19 return 0; 20 }

45 Συγχρονισµός νηµάτων Συγχρονισµός Τα νήµατα εξ ορισµού µοιράζονται τους περισσότερους από τους πόρους του γονικού νήµατος/διεργασίας. Απαιτείται συγχρονισµός στις προσβάσεις στα κοινόχρηστα στοιχεία! Τα νήµατα διαθέτουν δύο µηχανισµούς συγχρονισµού: Σηµαφόρους αµοιβαίου αποκλεισµού (mutexes). Μεταβλητές κατάστασης (condition variables).

46 Συγχρονισµός µε mutexes Συγχρονισµός Το API των POSIX threads ορίζει τις εξής συναρτήσεις για συγχρονισµό αµοιβαίου αποκλεισµού: 1 int pthread_mutexattr_init(pthread_mutexattr_t *attr); 2 int pthread_mutexattr_destroy(pthread_mutexattr_t *attr); 3 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); 4 int pthread_mutex_lock(pthread_mutex_t *mutex)); 5 int pthread_mutex_trylock(pthread_mutex_t *mutex); 6 int pthread_mutex_unlock(pthread_mutex_t *mutex); 7 int pthread_mutex_destroy(pthread_mutex_t *mutex); Συναρτήσεις οι οποίες δεν είναι thread-safe µπορούν να χρησιµοποιηθούν σε νήµατα αν προστατεύονται από ένα mutex.

47 Συγχρονισµός µε mutexes Συγχρονισµός Παράδειγµα 1 #include <stdio.h> 2 #include <pthread.h> 3 4 int accountbalance = 12000; 5 pthread_mutex_t accountmutex; 6 void* my_thread(void *param) { 7 int transaction = *((int*)param); 8 pthread_mutex_lock(&accountmutex); 9 if (transaction >= 0 -transaction < accountbalance) 10 accountbalance += transaction; 11 pthread_mutex_unlock(&accountmutex); 12 return NULL; 13 } int main() { 16 pthread_t thread1, thread2; 17 int transaction1= , transaction2 = -5000; 18 pthread_mutex_init(&accountmutex, NULL); 19 pthread_create(&thread1, NULL, my_thread, (void*)&transaction1); 20 pthread_create(&thread2, NULL, my_thread, (void*)&transaction2); 21 pthread_detach(thread1); 22 pthread_detach(thread2); 23 sleep(2); 24 printf("account balance: %d\n", accountbalance); 25 pthread_mutex_destroy(&accountmutex); 26 return 0; 27 }

48 Συγχρονισµός µε condition variables Συγχρονισµός Πρόβληµα: Τι γίνεται αν τα mutexes δεν αρκούν για να λύσουν το πρόβληµα; Π.χ. αν κάποια διεργασία πρέπει να περιµένει κάποιο γεγονός, ενώ είναι σε τµήµα προστατευόµενο από mutex; Απάντηση: Μεταβλητές Κατάστασης. Οι µεταβλητές κατάστασης πάντα συνυπάρχουν µε ένα mutex και µία µεταβλητή ελέγχου. Το mutex συγχρονίζει την πρόσβαση στη µεταβλητή κατάστασης και τη µεταβλητή ελέγχου. Η µεταβλητή κατάστασης χρησιµοποιείται για να εγγυηθούµε ότι το γεγονός το οποίο περιµένουµε όντως συνέβη. 1 int pthread_condattr_init(pthread_condattr_t *attr); 2 int pthread_condattr_destroy(pthread_condattr_t *attr); 3 int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); 4 int phtread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); 5 int phtread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t * mutex, const struct timespec *abstime); 6 int phtread_cond_signal(pthread_cond_t *cond); 7 int phtread_cond_broadcast(pthread_cond_t *cond); 8 int pthread_cond_destroy(pthread_cond_t *cond);

49 Συγχρονισµός µε condition variables Συγχρονισµός Αρχικοποίηση: 1 pthread_mutex_t mutex; 2 pthread_cond_t cond; 3 int accountbalance, withdrawal, deposit; 4 pthread_mutex_init(&mutex, NULL); 5 pthread_cond_init(&cond, NULL); Αναµονή γεγονότος: 1 pthread_mutex_lock(&mutex); 2 while (accountbalance < withdrawal) 3 pthread_cond_wait(&cond, &mutex); 4 accountbalance -= withdrawal; 5 pthread_mutex_unlock(&mutex); Σηµατοδότηση γεγονότος: 1 pthread_mutex_lock(&mutex); 2 accountbalance += deposit; 3 pthread_cond_signal(&cond); 4 pthread_mutex_unlock(&mutex);

50 σε πολυεπεξεργασία ϐασισµένη σε γεγονότα

51 Πολυπλεξία στην Ε/Ε Πρόβληµα: Πως µπορούµε να χειριστούµε πολλαπλούς file descriptors ταυτόχρονα; Με πολλές διεργασίες ή/και νήµατα. «Βαριά» λύση. Με non-blocking Ε/Ε. ουλεύει καλά για read(2) και write(2). Τι γίνεται όµως µε την accept(2); Λύση: select(2). int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); Περιµένει το πολύ timeout χρόνο (ή για πάντα αν NULL) για να γίνει κάποια αλλαγή στους πρώτους nfds file descriptors που ϐρίσκονται στα σύνολα readfds, writefds και exceptfds. nfds: ο µεγαλύτερος file descriptor στα σύνολα, συν 1. readfds: file descriptors από τους οποίους ϑα διαβάσουµε δεδοµένα ή στους οποίους ϑα δεχτούµε συνδέσεις. writefds: file descriptors στους οποίους ϑα γράψουµε δεδοµένα. exceptfds: file descriptors στους οποίους περιµένουµε «επείγοντα δεδοµένα» (OOB) ή γενικά ειδικές καταστάσεις. Επιστρέφει το πλήθος των file descriptors που είναι έτοιµοι για επεξεργασία, 0 για τέλος χρόνου, -1 για σφάλµα.

52 Πολυπλεξία στην Ε/Ε Για τη διαχείριση των συνόλων των file descriptors ορίζονται οι εξής µακροεντολές: FD_SET(fd, &fdset); FD_CLR(fd, &fdset); FD_ISSET(fd, &fdset); FD_ZERO(&fdset); Οταν η select(2) επιστρέψει, στα σύνολα αυτά ϑα είναι «set» µόνο οι file descriptors που είναι έτοιµοι για Ε/Ε.

53 Πολυπλεξία στην Ε/Ε Παράδειγµα 1 int sd, cd, sel; 2 fd_set fds; 3 4 sd = socket(/*... */); 5 bind(sd, /*... */); 6 listen(sd, /*... */); 7 8 while (1) { 9 FD_ZERO(&fds); 10 FD_SET(sd, &fds); 11 sel = select(sd + 1, &fds, NULL, NULL, NULL); 12 if (sel <= 0) { /* do something */ } 13 if (sel > 0) { 14 if (FD_ISSET(sd, &fds)) { 15 cd = accept(sd, /*... */); 16 if (cd < 0) error(/*... */); 17 // Serve the request 18 close(cd); 19 } 20 } 21 }

54 Στο επόµενο µάθηµα... Πολυεπεξεργασία ϐασισµένη σε γεγονότα (συνέχεια).

Λειτουργικά Συστήματα. Ενότητα # 10: Προγραμματισμός UNIX Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Λειτουργικά Συστήματα. Ενότητα # 10: Προγραμματισμός UNIX Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής Λειτουργικά Συστήματα Ενότητα # 10: Προγραμματισμός UNIX Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του

Διαβάστε περισσότερα

Λειτουργικά Συστήματα. Διεργασίες & Inter-Process Communication

Λειτουργικά Συστήματα. Διεργασίες & Inter-Process Communication Λειτουργικά Συστήματα Διεργασίες & Inter-Process Communication Unix Processes Programs vs. Processes Οι υπολογιστές εκτελούν προγράμματα Μία διεργασία (process) είναι ένα instance ενός προγράμματος, καθώς

Διαβάστε περισσότερα

Προγραμματισμός συστημάτων UNIX/POSIX

Προγραμματισμός συστημάτων UNIX/POSIX Προγραμματισμός συστημάτων UNIX/POSIX Προχωρημένη διαδιεργασιακή επικοινωνία: επώνυμοι αγωγοί (FIFOs) ουρές μηνυμάτων (message queues) κοινόχρηστη μνήμη (shared memory) σήματα (signals) Ανάγκη Ότι είδαμε

Διαβάστε περισσότερα

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη και επικοινωνία διεργασιών Κάθε διεργασία έχει δική της ιδιωτική μνήμη Μια διεργασία δεν μπορεί να γράψει/διαβάσει από/σε θέσεις

Διαβάστε περισσότερα

Συγχρονισμός & σηματοφόροι. Προγραμματισμός II 1

Συγχρονισμός & σηματοφόροι. Προγραμματισμός II 1 Συγχρονισμός & σηματοφόροι Προγραμματισμός II 1 lalis@inf.uth.gr Ταυτόχρονη εκτέλεση Οι διεργασίες εκτελούνται ταυτόχρονα μεταξύ τους Ο προγραμματιστής δεν ελέγχει την εναλλαγή Τι γίνεται αν δύο ή περισσότερες

Διαβάστε περισσότερα

Τµήµα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Σεπτέµβριος 2013

Τµήµα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Σεπτέµβριος 2013 Γράψτε όλες τις απαντήσεις σας σε αυτό το φυλλάδιο Οδηγίες για Α: Διαβάστε προσεκτικά όλες τις επιλογές σηµειώστε µε Χ (το πολύ) µια από αυτές. Μην επιλέγετε «στην τύχη» οι λανθασµένες απαντήσεις βαθµολογούνται

Διαβάστε περισσότερα

Προγραμματισμός συστημάτων UNIX/POSIX

Προγραμματισμός συστημάτων UNIX/POSIX Προγραμματισμός συστημάτων UNIX/POSIX Προχωρημένη διαδιεργασιακή επικοινωνία: επώνυμοι αγωγοί (FIFOs) ουρές μηνυμάτων (message queues) κοινόχρηστη μνήμη (shared memory) Ανάγκη Ότι είδαμε μέχρι τώρα μπορεί

Διαβάστε περισσότερα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: nifantop@unipi.gr Περιεχόμενα ενότητας Διεργασίες Κλήσεις δημιουργίας και τερματισμού διεργασιών Επικοινωνία διεργασιών μέσω

Διαβάστε περισσότερα

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals Δρ. Απόστολος Γκάμας Διδάσκων 407/80 gkamas@uop.gr Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 1 1 UDP vs TCP Το UDP είναι ένα connectionless, μη αξιόπιστο,

Διαβάστε περισσότερα

Παράλληλη Επεξεργασία

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στα Πολυεπεξεργαστικά Συστήματα Διερασίες και Νήματα σε Πολυεπεξεργαστικά Συστήματα Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed

Διαβάστε περισσότερα

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη και επικοινωνία διεργασιών Κάθε διεργασία έχει δική της ιδιωτική μνήμη Μια διεργασία δεν μπορεί να γράψει/διαβάσει από/σε θέσεις

Διαβάστε περισσότερα

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΔΙΕΡΓΑΣΙΕΣ +- Με τον όρο διεργασία στο UNIX εννοούμε τη δυναμικη πράξη της

Διαβάστε περισσότερα

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1 Δημιουργία & Τερματισμός Διεργασιών Προγραμματισμός II 1 lalis@inf.uth.gr Δημιουργία νέας διεργασίας pid_t fork() Η fork δεν έχει παραμέτρους Δημιουργεί μια νέα διεργασία που είναι ένα αντίγραφο της διεργασίας

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής ΕΥ311-Διαδικτυακός και Ταυτόχρονος Προγραμματισμός Εργαστήριο: Παραδείγματα δημιουργίας διεργασιών στο Linux Ένα πρόγραμμα (το στιγμιότυπο της εκτέλεσης του οποίου

Διαβάστε περισσότερα

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1 Δημιουργία & Τερματισμός Διεργασιών Προγραμματισμός II 1 lalis@inf.uth.gr Δημιουργία νέας διεργασίας pid_t fork() Η fork δεν έχει παραμέτρους Δημιουργεί μια νέα διεργασία που είναι ένα αντίγραφο της διεργασίας

Διαβάστε περισσότερα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΕΡΓΑΣΙΕΣ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΕΡΓΑΣΙΕΣ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΕΡΓΑΣΙΕΣ Πολυεπεξεργασία Διεργασία (process) Νήμα (thread) Εργασία (task/job) Διεργασίες Διεργασία είναι μια (συγκεκριμένη) εκτέλεση κάποιου προγράμματος για λογαριασμό κάποιου

Διαβάστε περισσότερα

Προγραμματισμός συστημάτων UNIX/POSIX. Σήματα (signals)

Προγραμματισμός συστημάτων UNIX/POSIX. Σήματα (signals) Προγραμματισμός συστημάτων UNIX/POSIX Σήματα (signals) Σήματα (signals) Τα σήματα είναι «διακοπές» λογισμικού (software interrupts) οι οποίες διακόπτουν την κανονική λειτουργία μίας διεργασίας. Προκαλούνται

Διαβάστε περισσότερα

Εργαστήριο 14. Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t)

Εργαστήριο 14. Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t) Εργαστήριο 14 Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t) Να γράψετε πρόγραμμα που να δημιουργεί 1 νήμα Έτσι στο πρόγραμμα σας θα υπάρχουν 2 νήματα (το ένα νήμα είναι το αρχικό νήμα που

Διαβάστε περισσότερα

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας Το επίπεδο προτεραιότητας µιας διεργασίας µπορεί να αλλάξει µε χρήση της συνάρτησης nice. Κάθε διεργασία διαθέτει µια τιµή που καλείται

Διαβάστε περισσότερα

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 2 η Εργαστηριακή Άσκηση: Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία Λειτουργικά

Διαβάστε περισσότερα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις Υλικό από: Modern Operating Systems Laboratory Exercises, Shrivakan Mishra Σύνθεση Κ.Γ. Μαργαρίτης, Τμήμα Εφαρμοσμένης Πληροφορικής, Πανεπιστήμιο

Διαβάστε περισσότερα

ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4

ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 1 Διαχείριση εργασιών fork(), exit(), exec() Επικοινωνία διεργασιών signals, sockets και client/server, shared memory Συγχρονισμός

Διαβάστε περισσότερα

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ Εισαγωγή Σκοπός τόσο αυτού του εργαστηρίου, όσο και των εργαστηρίων που ακολουθούν, είναι να γνωρίσουμε τους τρόπους δημιουργίας και διαχείρισης των διεργασιών (processes)

Διαβάστε περισσότερα

2η Προγραµµατιστική Εργασία

2η Προγραµµατιστική Εργασία Προγραµµατισµός ικτύων (Ε-01) 2η Προγραµµατιστική Εργασία Επέκταση ϐασικής ϐιβλιοθήκης δικτυακού προγραµµατισµού και χρήση της για την υλοποίηση παράλληλου εξυπηρετητή πρωτοκόλλου µεταφοράς αρχείων ιδάσκων

Διαβάστε περισσότερα

Νήµατα. Πολύ σηµαντικό

Νήµατα. Πολύ σηµαντικό Νήµατα Πολύ σηµαντικό 1 Νήµατα (συν.) Σηµαντικό 2 Νήµατα vs ιεργασίες Νήµατα ιεργασίες Χώρος εδοµένων Περιγραφητές Αρχείων fork exit exec Σήµατα Κοινός. Ότι αλλάζει το 1 νήµα το βλέπουν/ αλλάζουν και τα

Διαβάστε περισσότερα

Ε-85: Ειδικά Θέµατα Λογισµικού

Ε-85: Ειδικά Θέµατα Λογισµικού Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «ιεργασίες και Νήµατα» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων

Διαβάστε περισσότερα

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

Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4. Λειτουργικά Συστήματα- Φροντιστήριο 2 Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4 Φροντιστήριο 2 1 Λειτουργικό Σύστημα -> Multitasking Κάθε διεργασία μπορεί να ειδωθεί σαν μία δέσμη στοιχείων που διατηρούνται από τον πυρήνα

Διαβάστε περισσότερα

Λειτουργικά Συστήματα (ΗΥ321)

Λειτουργικά Συστήματα (ΗΥ321) Λειτουργικά Συστήματα (ΗΥ321) Διάλεξη 2: Διεργασίες και Νήματα Διαδικαστικά 2 Γραφτήκατε στη λίστα; Σχηματίστε ομάδες (για το project)! Στο προηγούμενο επεισόδιο 3 Τι είναι λειτουργικό; Γενιές ΛΣ Βασικές

Διαβάστε περισσότερα

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 2 η Εργαστηριακή Άσκηση: Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία Λειτουργικά

Διαβάστε περισσότερα

4 η ιάλεξη: Signals UDP Sockets

4 η ιάλεξη: Signals UDP Sockets Εργαστήριο ικτύων Υπολογιστών 4 η ιάλεξη: ικτυακός Προγραμματισμός Signals UDP Sockets TCP sockets και signals Όταν σε ένα TCP server κάνουμε fork (γεννάμε διεργασίες-παιδιά servers για να εξυπηρετήσουμε

Διαβάστε περισσότερα

Νσίπληρ Νίκορ- ΕΣΤ 4ο ΥΡΟΝΣΙΣΗΡΙΟ Παπαςκετή Β4

Νσίπληρ Νίκορ- ΕΣΤ 4ο ΥΡΟΝΣΙΣΗΡΙΟ Παπαςκετή Β4 Νσίπληρ Νίκορ- ΕΣΤ 4ο ΥΡΟΝΣΙΣΗΡΙΟ Παπαςκετή 4-11-2013 Β4 1 Κοινή Μνήμη μεσαξύ διεπγαςιών -> Γπηγοπόσεπη μοπυή IPC Σα δεδομένα δεν ανσιγπάυονσαι πάνω από μία υοπά Server/Client model. Όσαν ο Server γπάυει,

Διαβάστε περισσότερα

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες 0x375 - Thessaloniki Tech Talks Sessions Event 0x2 19 Μαρτίου 2010 Περιεχόμενα 1 Εισαγωγή 2 Η κλήση συστήματος ptrace 3 Νήματα 4 Το πρόγραμμα εισαγωγής κώδικα prez 5 Επίλογος Γιατί; Πολλές φορές θέλουμε

Διαβάστε περισσότερα

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr Η έννοια της διεργασίας ιεργασία (process) είναι ο µηχανισµός εκτέλεσης ενός προγράµµατος σε ένα λειτουργικό σύστηµα. Η διεργασία είναι µια ενεργή

Διαβάστε περισσότερα

Προγραμματισμός συστημάτων UNIX/POSIX. Διεργασίες (processes)

Προγραμματισμός συστημάτων UNIX/POSIX. Διεργασίες (processes) Προγραμματισμός συστημάτων UNIX/POSIX Διεργασίες (processes) Δομή αρχείου προγράμματος Πρόγραμμα (program) ονομάζεται το εκτελέσιμο αρχείο που βρίσκεται αποθηκευμένο στο δίσκο (π.χ. το a.out, ή το ls ή

Διαβάστε περισσότερα

Εργαστήριο 5 fork(), exec(), signals

Εργαστήριο 5 fork(), exec(), signals Εργαστήριο 5 fork(), exec(), signals Στο εργαστήριο θα μελετηθούν: Παραδείγματα χρήσης των συναρτήσεων fork και exec Συνάρτηση waitpid Συνάρτηση WIFEXITED Συνάρτηση WEXITSTATUS Παράδειγμα χρήσης σημάτων

Διαβάστε περισσότερα

IPC System V. Προγραμματισμός II 1

IPC System V. Προγραμματισμός II 1 IPC System V Προγραμματισμός II 1 lalis@inf.uth.gr Διαδιεργασιακή επικοινωνία System V 3 είδη «αντικειμένων» (μηχανισμών) επικοινωνίας ουρές μηνυμάτων (message queues): msg κοινόχρηστες περιοχές μνήμης

Διαβάστε περισσότερα

NIKOΛΑΟΣ ΝΤΙΡΛΗΣ 5ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΙΘΟΥΣΑ Β4

NIKOΛΑΟΣ ΝΤΙΡΛΗΣ 5ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΙΘΟΥΣΑ Β4 NIKOΛΑΟΣ ΝΤΙΡΛΗΣ 5ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΙΘΟΥΣΑ Β4 1 Ένα thread έχει: ID, program counter, register set, stack Μοιράζεται με τα άλλα threads της ίδιας διεργασίας τον κώδικα, τα δεδομένα και τους άλλους πόρους

Διαβάστε περισσότερα

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα Δρ. Βασίλης Ταμπακάς Δρ. Ιωάννης Ε. Λιβιέρης Τμήμα Μηχανικών Πληροφορικής Τ.Ε Περιεχόμενα Περιεχόμενα... 1 1. Εισαγωγή, Θεωρητική Υποδομή Εργαστηριακής Άσκησης... 2 2. Εργαστηριακή υποδομή εργαστηριακής

Διαβάστε περισσότερα

UNIX System Programming

UNIX System Programming UNIX System Programming Processes Objectives look at how to program UNIX processes fork( ), wait( ) Overview 1. What is a Process? 2. fork() 3. wait() 4. Process Data 1. What is a Process? A process is

Διαβάστε περισσότερα

ΝΗΜΑΤΑ - ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

ΝΗΜΑΤΑ - ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Νήματα (Threads) ΝΗΜΑΤΑ - ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Διαβάστε περισσότερα

Παρουσίαση 5 ης Άσκησης:

Παρουσίαση 5 ης Άσκησης: Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Παρουσίαση 5 ης Άσκησης: Θέματα Συγχρονισμού σε Σύγχρονα Πολυπύρηνα Συστήματα Ακ. Έτος

Διαβάστε περισσότερα

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων. Συγχρονισμός

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων. Συγχρονισμός Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 3 η Εργαστηριακή Άσκηση: Συγχρονισμός Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2017-2018

Διαβάστε περισσότερα

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων. Συγχρονισμός

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων. Συγχρονισμός Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 3 η Εργαστηριακή Άσκηση: Συγχρονισμός Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017

Διαβάστε περισσότερα

Διεργασίες και Νήματα (2/2)

Διεργασίες και Νήματα (2/2) Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Διεργασίες και Νήματα (2/2) Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017 Νήματα

Διαβάστε περισσότερα

Παρουσίαση 5 ης Άσκησης:

Παρουσίαση 5 ης Άσκησης: Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Παρουσίαση 5 ης Άσκησης: Θέματα Συγχρονισμού σε Σύγχρονα Πολυπύρηνα Συστήματα Ακ. Έτος

Διαβάστε περισσότερα

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Λειτουργικά Συστήματα Ενότητα: Πολυνηματικός Προγραμματισμός Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

Επιτεύγµατα των Λ.Σ.

Επιτεύγµατα των Λ.Σ. Επιτεύγµατα των Λ.Σ. ιεργασίες ιαχείριση Μνήµης Ασφάλεια και προστασία δεδοµένων Χρονοπρογραµµατισµός & ιαχείρηση Πόρων οµή Συστήµατος ιεργασίες Ένα πρόγραµµα σε εκτέλεση Ένα στιγµιότυπο ενός προγράµµατος

Διαβάστε περισσότερα

Λειτουργικά Συστήματα. Φροντιστηριακή ενότητα #2 : Διαχείριση μνήμης και διεργασίες Τμήμα: Πληροφορικής

Λειτουργικά Συστήματα. Φροντιστηριακή ενότητα #2 : Διαχείριση μνήμης και διεργασίες Τμήμα: Πληροφορικής Λειτουργικά Συστήματα Φροντιστηριακή ενότητα #2 : Διαχείριση μνήμης και διεργασίες Τμήμα: Πληροφορικής Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του

Διαβάστε περισσότερα

Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4

Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4 Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4 1 Διαχείριση εργασιών fork(), exit(), exec() (βλ 2 ο Φροντ.) Επικοινωνία διεργασιών signals (βλ 2 ο Φροντ.) sockets και client/server,

Διαβάστε περισσότερα

Ζητήματα Σχεδίασης Λογισμικού Εξυπηρετητή

Ζητήματα Σχεδίασης Λογισμικού Εξυπηρετητή Ζητήματα Σχεδίασης Λογισμικού Εξυπηρετητή Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 1 Ταυτόχρονοι και Επαναληπτικοί Εξυπηρετητές Επαναληπτικός εξυπηρετητής: επεξεργάζεται μόνο μία αίτηση τη φορά. Ταυτόχρονος

Διαβάστε περισσότερα

Εκφωνήσεις ασκήσεων εργαστηρίου 1

Εκφωνήσεις ασκήσεων εργαστηρίου 1 Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Γκόγκος Χρήστος Εκφωνήσεις ασκήσεων εργαστηρίου

Διαβάστε περισσότερα

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα Λειτουργικά Συστήματα Δρ. Βασίλης Ταμπακάς Δρ. Ιωάννης Ε. Λιβιέρης Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Περιεχόμενα Περιεχόμενα... 1 1. Εισαγωγή, Θεωρητική Υποδομή της Εργαστηριακής Άσκησης... 2 2. Εργαστηριακή

Διαβάστε περισσότερα

Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1

Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1 Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1 lalis@inf.uth.gr Συνεργασία ανάμεσα σε διεργασίες Για ασφάλεια/ανεξαρτησία, το ΛΣ εξασφαλίζει πλήρη απομόνωση ανάμεσα στις

Διαβάστε περισσότερα

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr Ο κώδικας δεν εκτελείται «μόνος του» Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα

Διαβάστε περισσότερα

Εργαστήριο 7 fork(), exec(), signals

Εργαστήριο 7 fork(), exec(), signals Εργαστήριο 7 fork(), exec(), signals Στο εργαστήριο θα μελετηθούν: Παραδείγματα χρήσης των συναρτήσεων fork και exec Συνάρτηση waitpid Συνάρτηση WIFEXITED Συνάρτηση WEXITSTATUS Παράδειγμα χρήσης σημάτων

Διαβάστε περισσότερα

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα Λειτουργικά Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:09 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

Συγχρονισµός: Αδιέξοδο & Παρατεταµένη Στέρηση

Συγχρονισµός: Αδιέξοδο & Παρατεταµένη Στέρηση Συγχρονισµός: Αδιέξοδο & Παρατεταµένη Στέρηση Κεφάλαιο 6 Αδιέξοδο Μόνιµη αναµονή ενός συνόλου διεργασιών οι οποίες ανταγωνίζονται για πόρους του συστήµατος ή για να επικοινωνήσουν µεταξύ τους εν υπάρχει

Διαβάστε περισσότερα

Ουρές Μηνυμάτων (Message Queues in System V) Προγραμματισμός II 1

Ουρές Μηνυμάτων (Message Queues in System V) Προγραμματισμός II 1 Ουρές Μηνυμάτων (Message Queues in System V) Προγραμματισμός II 1 lalis@inf.uth.gr Ουρά μηνυμάτων Αποθήκη μηνυμάτων στην μνήμη του λειτουργικού Περιορισμένος αριθμός / όγκος μηνυμάτων Κάθε μήνυμα είναι

Διαβάστε περισσότερα

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Λειτουργικά Συστήματα Ενότητα: Πολυνηματικός Προγραμματισμός Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes) Προγραμματισμός συστημάτων UNIX/POSIX Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes) Επικοινωνία μεταξύ διεργασιών γονέα-παιδιού Κατά κάποιο τρόπο, θα δημιουργήσουμε ένα τύπο

Διαβάστε περισσότερα

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:10 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων

Διαβάστε περισσότερα

Διεργασίες - Σύνοψη. Διακοπές, προνομιούχος κατάσταση Κλήσεις συστήματος. Ορισμός, μεταβάσεις κατάστασης κύκλος ζωής

Διεργασίες - Σύνοψη. Διακοπές, προνομιούχος κατάσταση Κλήσεις συστήματος. Ορισμός, μεταβάσεις κατάστασης κύκλος ζωής Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς. Διεργασίες

Διαβάστε περισσότερα

Διάλεξη 14: Διεργασίες: Έλεγχος & Σήματα (Processes: Control & Signals)

Διάλεξη 14: Διεργασίες: Έλεγχος & Σήματα (Processes: Control & Signals) ΕΠΛ371 - Προγραμματισμός Συστημάτων Διάλεξη 14: Διεργασίες: Έλεγχος & Σήματα (Processes: Control & Signals) (Κεφάλαιο 8,10 - Stevens & Rago) Δημήτρης Ζεϊναλιπούρ 14-1 Περιεχόμενο Διάλεξης A. Η οικογένεια

Διαβάστε περισσότερα

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά

Διαβάστε περισσότερα

Διεργασίες και Νήματα (1/2)

Διεργασίες και Νήματα (1/2) Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Διεργασίες και Νήματα (1/2) Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017 Διεργασίες

Διαβάστε περισσότερα

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά

Διαβάστε περισσότερα

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά

Διαβάστε περισσότερα

Χρονοδρομολογητής Κυκλικής Επαναφοράς

Χρονοδρομολογητής Κυκλικής Επαναφοράς Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 4 η Εργαστηριακή Άσκηση: Χρονοδρομολογητής Κυκλικής Επαναφοράς Λειτουργικά Συστήματα Υπολογιστών

Διαβάστε περισσότερα

Κατανεμημένα Συστήματα

Κατανεμημένα Συστήματα Κατανεμημένα Συστήματα Σημειώσεις εργαστηρίου Lab#7 - Διεργασίες, Nήματα, Πολυνημάτωση στη Python Νεβράντζας Βάιος-Γερμανός Λάρισα, Φεβρουάριος 2013 Lab#7 - Διεργασιές, Νη ματα, Πολυνημα τωση στη Python,

Διαβάστε περισσότερα

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα Λειτουργικά Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:11 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi Προϋποθέσεις για Αµοιβαίο Αποκλεισµό Μόνο µία διεργασία σε κρίσιµο τµήµασεκοινό πόρο Μία διεργασία που σταµατά σε µη κρίσιµο σηµείο δεν πρέπει να επιρεάζει τις υπόλοιπες διεργασίες εν πρέπει να υπάρχει

Διαβάστε περισσότερα

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΑΧΕΙΡΙΣΗ ΑΔΙΕΞΟΔΩΝ (DEADLOCKS) Γενικά, για τη διαχείριση των αδιεξόδων

Διαβάστε περισσότερα

Νήµαταστην Java. Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων. Κατανεµηµένα Συστήµατα 11-1

Νήµαταστην Java. Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων. Κατανεµηµένα Συστήµατα 11-1 Νήµαταστην Java Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων Κατανεµηµένα Συστήµατα 11-1 Νήµαταστην Java γεννηθείσα notify notifyall έτοιµη start εκπνοή

Διαβάστε περισσότερα

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος Κανονική Εξέταση Λύσεις

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος Κανονική Εξέταση Λύσεις ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά

Διαβάστε περισσότερα

Μη ανασταλτική/πολυπλεξία Ε/Ε (non-blocking/multiplexed I/O) Προγραμματισμός II 1

Μη ανασταλτική/πολυπλεξία Ε/Ε (non-blocking/multiplexed I/O) Προγραμματισμός II 1 Μη ανασταλτική/πολυπλεξία Ε/Ε (non-blocking/multiplexed I/O) Προγραμματισμός II 1 lalis@inf.uth.gr Μπλοκάρισμα διεργασίας Μια διεργασία μπλοκάρει όταν καλεί λειτουργίες συστήματος που δεν μπορεί να ολοκληρωθούν

Διαβάστε περισσότερα

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ Σχεδιασμός και υλοποίηση υποδομής σημείωσης διεργασιών στον

Διαβάστε περισσότερα

Παράλληλη Επεξεργασία

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Νήματα & Συγχρονισμός Μεταβλητές κλειδιά Φράγματα Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed Systems Group Συγχρονισμός μεταξύ νημάτων

Διαβάστε περισσότερα

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Προχωρημένα Θέματα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ανακατεύθυνση Εισόδου/Εξόδου Συνήθως η τυπική είσοδος ενός προγράμματος (stdin) προέρχεται

Διαβάστε περισσότερα

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Είσοδος/Έξοδος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2009-2010 Είσοδος/Έξοδος Μέχρι τώρα όποτε θέλαμε να διαβάσουμε χρησιμοποιούσαμε πάντα

Διαβάστε περισσότερα

ΣυγχρονισµόςσεΣυστήµατα ΠολλαπλώνΝηµάτων

ΣυγχρονισµόςσεΣυστήµατα ΠολλαπλώνΝηµάτων ΣυγχρονισµόςσεΣυστήµατα ΠολλαπλώνΝηµάτων Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων ΕΜΠ Κορνήλιος Κούρτης kkourt@cslab.ece.ntua.gr p. 1 Περιβάλλον Πολλαπλών Νηµάτων Threads T0

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Λειτουργικά Συστήματα Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Στέργιος Παλαμάς, Υλικό Μαθήματος «Λειτουργικά Συστήματα», 2015-2016 Κεφάλαιο 4: Διεργασίες Πρόγραμμα Πρόγραμμα 1 Πρόγραμμα

Διαβάστε περισσότερα

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα Λειτουργικά Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ N:08 Δρ. Μηνάς Δασυγένης mdasyg@ieee.rg Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

Κατηγορίες Νηµάτων. Νήµατα Επιπέδου Πυρήνα. Νήµατα Επιπέδου Χρήστη. «Νήµατα Επιπέδου Χρήστη» Ε-85: Ειδικά Θέµατα Λογισµικού

Κατηγορίες Νηµάτων. Νήµατα Επιπέδου Πυρήνα. Νήµατα Επιπέδου Χρήστη. «Νήµατα Επιπέδου Χρήστη» Ε-85: Ειδικά Θέµατα Λογισµικού Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «Νήµατα Επιπέδου Χρήστη» Κατηγορίες Νηµάτων Υπάρχουν δύο κατηγορίες νηµάτων Νήµατα επιπέδου πυρήνα (kernel

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

Διαβάστε περισσότερα

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος 2011-2012

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος 2011-2012 ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά

Διαβάστε περισσότερα

Λειτουργικά Συστήματα (Λ/Σ)

Λειτουργικά Συστήματα (Λ/Σ) Λειτουργικά Συστήματα (Λ/Σ) Βασικές Έννοιες Λειτουργικών Συστημάτων Βασίλης Σακκάς 13/11/2013 1 ΒασικέςΈννοιεςΛ/Σ Η επικοινωνία μεταξύ Λ/Σ και των προγραμμάτων του χρήστη γίνεται μέσω του συνόλου των «εκτεταμένων

Διαβάστε περισσότερα

Περιγραφή και Έλεγχος ιεργασιών

Περιγραφή και Έλεγχος ιεργασιών Περιγραφή και Έλεγχος ιεργασιών Περίληψη ιεργασίες Πολυπρογραµµατισµός Καταστάσεις ιεργασιών Περιγραφή διεργασιών στο ΛΣ Έλεγχος διεργασιών Το ΛΣ Linux 1 ιεργασία (process) ιεργασία είναι κάθε πρόγραµµα

Διαβάστε περισσότερα

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input). Κ24: Προγραμματισμός Συστήματος 2η Εργασία Εαρινό Εξάμηνο 2017 Προθεσμία Υποβολής: Κυριακή 30 Απριλίου 2017 Ωρα 23:59 Εισαγωγή στην Εργασία: Ο στόχος της εργασίας αυτής είναι να εξοικειωθείτε με την δημιουργία

Διαβάστε περισσότερα

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας

Διαβάστε περισσότερα

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

Διαβάστε περισσότερα

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1 Σηματοφόροι (Σηματοφορείς) 1 lalis@inf.uth.gr Αποφυγή ενεργής αναμονής if () { WAIT(); Μπορεί να γίνει εναλλαγή αφού το νήμα κάνει τον έλεγχο της συνθήκης αναμονής και την βρει αληθή, αλλά προτού αυτό

Διαβάστε περισσότερα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Μάθηµα 1 Ο ρόλος του ΛΣ Υλικό Υπολογιστικό σύστηµα Λειτουργικό σύστηµα Λογισµικό Προγράµµατα εφαρµογής Στόχοι του ΛΣ Χρήστες ιευκόλυνση των χρηστών ιευκόλυνση

Διαβάστε περισσότερα

Παράλληλη Επεξεργασία

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στο OpenMP Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed Systems Group Τι είναι το OpenMP Πρότυπο Επέκταση στη C/C++ και τη Fortran

Διαβάστε περισσότερα

Επεξεργασία Αρχείων Κειµένου

Επεξεργασία Αρχείων Κειµένου Επεξεργασία Αρχείων Κειµένου Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Αρχεία Κειµένου Γενικά Συναρτήσεις Επεξεργασίας Αρχείων Κειµένου ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Αρχεία Γενικά

Διαβάστε περισσότερα

Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες

Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες Σύνταξη εντολών Περιεχόµενα Οργάνωση και χειρισµός αρχείων Μπαλαντέρ ικαιώµατα χρήσης αρχείων και οµάδες χρηστών Έλεγχος διεργασιών Σύνταξη εντολών

Διαβάστε περισσότερα

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη ( ιάλεξη 3) ιδάσκων: Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy

Διαβάστε περισσότερα

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα Λειτουργικά Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:07 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

Νήµατα. ιεργασίες και νήµατα Υλοποίηση νηµάτων Ελαφριές διεργασίες Αξιοποίηση νηµάτων. Κατανεµηµένα Συστήµατα 10-1

Νήµατα. ιεργασίες και νήµατα Υλοποίηση νηµάτων Ελαφριές διεργασίες Αξιοποίηση νηµάτων. Κατανεµηµένα Συστήµατα 10-1 Νήµατα ιεργασίες και νήµατα Υλοποίηση νηµάτων Ελαφριές διεργασίες Αξιοποίηση νηµάτων Κατανεµηµένα Συστήµατα 10-1 ιεργασίεςκαι νήµατα ιεργασία 1 Μνήµη ιεργασία 2 Μνήµη ιεργασία 3 Μνήµη Λειτουργικό Σύστηµα

Διαβάστε περισσότερα