Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία
|
|
- Ἐλισάβετ Βυζάντιος
- 6 χρόνια πριν
- Προβολές:
Transcript
1 Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 2 η Εργαστηριακή Άσκηση: Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο,
2 2 η άσκηση Σύνοψη Διαχείριση διεργασιών Δημιουργία δεδομένου δέντρου διεργασιών με fork() / wait() Δημιουργία αυθαίρετου δέντρου διεργασιών με βάση αρχείο εισόδου που το περιγράφει Διαδιεργασιακή επικοινωνία με σήματα, SIGSTOP / SIGCONT με σωληνώσεις (UNIX pipes)
3 Θεωρία - Μηχανισμοί Χρήση του make, Makefile Διαχείριση διεργασιών στο UNIX fork(), wait(), waitpid(), explain_wait_status() Σήματα στο UNIX kill(), signal(), sigaction(), race conditions Χειρισμός του σήματος SIGCHLD Ασύγχρονη ειδοποίηση γονικής διεργασίας non-blocking waitpid() Διαδιεργασιακή επικοινωνία με UNIX pipes
4 Makefile $ cat Makefile # a simple Makefile CC = gcc CFLAGS = -Wall -O2 all: fork-example fork-example: fork-example.o proc-common.o $(CC) -o fork-example fork-example.o proc-common.o proc-common.o: proc-common.c proc-common.h $(CC) $(CFLAGS) -o proc-common.o -c proc-common.c fork-example.o: fork-example.c proc-common.h $(CC) $(CFLAGS) -o fork-example.o -c fork-example.c clean: rm -f fork-example proc-common.o fork-example.o
5 Makefile $ cat Makefile # a simple Makefile CC = gcc CFLAGS = -Wall -O2 all: fork-example fork-example: fork-example.o proc-common.o $(CC) -o fork-example fork-example.o proc-common.o <Tab> proc-common.o: proc-common.c proc-common.h $(CC) $(CFLAGS) -o proc-common.o -c proc-common.c <Tab> fork-example.o: fork-example.c proc-common.h $(CC) $(CFLAGS) -o fork-example.o -c fork-example.c <Tab> clean: <Tab> rm -f fork-example proc-common.o fork-example.o
6 Makefile $ cat Makefile # a simple Makefile CC = gcc CFLAGS = -Wall -O2 all: fork-example fork-example: fork-example.o proc-common.o $(CC) -o fork-example fork-example.o proc-common.o <Tab> proc-common.o: proc-common.c proc-common.h $(CC) $(CFLAGS) -o proc-common.o -c proc-common.c <Tab> fork-example.o: fork-example.c proc-common.h $(CC) $(CFLAGS) -o fork-example.o -c fork-example.c <Tab> clean: <Tab> rm -f fork-example proc-common.o fork-example.o $ make gcc -Wall -O2 -o fork-example.o -c fork-example.c gcc -Wall -O2 -o proc-common.o -c proc-common.c gcc -o fork-example fork-example.o proc-common.o
7 2 η άσκηση Σύνοψη Διαχείριση διεργασιών Δημιουργία δεδομένου δέντρου διεργασιών με fork() / wait() Δημιουργία αυθαίρετου δέντρου διεργασιών με βάση αρχείο εισόδου που το περιγράφει Διαδιεργασιακή επικοινωνία με σήματα, SIGSTOP / SIGCONT με σωληνώσεις (UNIX pipes)
8 Δέντρο διεργασιών A B E C F D
9 Δημιουργία στο μοντέλο του UNIX: Δεδομένα : p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 fork()
10 Δημιουργία στο μοντέλο του UNIX: Δεδομένα : p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 fork()
11 Δημιουργία στο μοντέλο του UNIX: Δεδομένα : p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 fork()
12 Δημιουργία στο μοντέλο του UNIX: Δεδομένα : -1 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = -1, errno if (p < 0) { = ENOMEM perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 fork()
13 Δημιουργία στο μοντέλο του UNIX: Δεδομένα : -1 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = -1, errno if (p < 0) { = ENOMEM perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 fork()
14 Δημιουργία στο μοντέλο του UNIX: Δεδομένα : -1 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = -1, errno if (p < 0) { = ENOMEM perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 fork()
15 Δημιουργία στο μοντέλο του UNIX: Δεδομένα : -1 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = -1, errno if (p < 0) { = ENOMEM perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 fork()
16 Δημιουργία στο μοντέλο του UNIX: fork()
17 Δημιουργία στο μοντέλο του UNIX: Δεδομένα : p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 fork()
18 Δημιουργία στο μοντέλο του UNIX: Δεδομένα : p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 fork()
19 Δημιουργία στο μοντέλο του UNIX: fork() Δεδομένα : p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 Δεδομένα : p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=987
20 Δημιουργία στο μοντέλο του UNIX: fork() Δεδομένα : 987 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 987 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 Δεδομένα : 0 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 0 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=987
21 Δημιουργία στο μοντέλο του UNIX: fork() Δεδομένα : 987 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 987 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 Δεδομένα : 0 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 0 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=987
22 Δημιουργία στο μοντέλο του UNIX: fork() Δεδομένα : 987 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 987 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 Δεδομένα : 0 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 0 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=987
23 Δημιουργία στο μοντέλο του UNIX: fork() Δεδομένα : 987 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 987 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 Δεδομένα : 0 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 0 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=987
24 Δημιουργία στο μοντέλο του UNIX: fork() Δεδομένα : 987 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 987 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 Δεδομένα : 0 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 0 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=
25 Δημιουργία στο μοντέλο του UNIX: fork() Δεδομένα : 987 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 987 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 Δεδομένα : 0 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 0 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=
26 Δημιουργία στο μοντέλο του UNIX: fork() Δεδομένα : 987 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 987 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=981 Δεδομένα : 0 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 0 if (p < 0) { perror( fork ); exit(1); else if (p == 0) { mypid = getpid(); child(); else { father(); PID=
27 Δημιουργία στο μοντέλο του UNIX: fork() Όλες οι διεργασίες προκύπτουν με fork() [σχεδόν όλες] Ίδιο πρόγραμμα με γονική διεργασία, αντίγραφο χώρου μνήμης, κληρονομεί ανοιχτά αρχεία, συνδέσεις, δικαιώματα πρόσβασης Αντικατάσταση προγράμματος διεργασίας: execve() Η γονική διεργασία ενημερώνεται για το θάνατο του παιδιού με wait() συλλογή τιμής τερματισμού (exit status) Μέχρι τότε, παιδί που έχει καλέσει την exit() είναι zombie Αν ο γονέας πεθάνει πρώτα, η διεργασία γίνεται παιδί της init (PID = 1), που κάνει συνεχώς wait() prog-a 981 fork Prog-A 981 wait Prog-A 987 execve Prog-B 987 Prog-B 987 (zombie) exit
28 wait() / waitpid() Για κάθε fork() πρέπει να γίνει ένα wait() wait(&status) Μπλοκάρει έως οποιοδήποτε παιδί πεθάνει Το status κωδικοποιεί πώς πέθανε η διεργασία Κανονικά (exit()), λόγω κάποιου σήματος (SIGTERM, SIGKILL) Χρήσιμες μακροεντολές για την ερμηνεία του status WIFEXITED(), WEXITSTATUS(), WIFSIGNALED(), WTERMSIG() σας δίνεται η explain_wait_status() Μια πιο ευέλικτη wait(): waitpid() Περιμένει για αλλαγή κατάστασης συγκεκριμένου ή οποιουδήποτε PID διεργασίας-παιδιού Συμπεριφορά ελεγχόμενη από flags (WNOHANG, WUNTRACED)
29 explain_wait_status() void explain_wait_status(pid_t pid, int status) { if (WIFEXITED(status)) fprintf(stderr, "Child with PID = %ld terminated normally, exit status = %d\n", (long)pid, WEXITSTATUS(status)); else if (WIFSIGNALED(status)) fprintf(stderr, "Child with PID = %ld was terminated by a signal, signo = %d\n", (long)pid, WTERMSIG(status)); else if (WIFSTOPPED(status)) fprintf(stderr, "Child with PID = %ld has been stopped by a signal, signo = %d\n", (long)pid, WSTOPSIG(status)); else { fprintf(stderr, "%s: Internal error: Unhandled case, PID = %ld, status = %d\n", func, (long)pid, status); exit(1); fflush(stderr);
30 explain_wait_status() void explain_wait_status(pid_t pid, int status) { if (WIFEXITED(status)) fprintf(stderr, "Child with PID = %ld terminated normally, exit status = %d\n", (long)pid, WEXITSTATUS(status)); else if (WIFSIGNALED(status)) fprintf(stderr, "Child with PID = %ld was terminated by a signal, signo = %d\n", (long)pid, WTERMSIG(status)); else if (WIFSTOPPED(status)) fprintf(stderr, "Child with PID = %ld has been stopped by a signal, signo = %d\n", (long)pid, WSTOPSIG(status)); else { fprintf(stderr, "%s: Internal error: Unhandled case, PID = %ld, status = %d\n", func, (long)pid, status); exit(1); fflush(stderr); Παράδειγμα: pid = wait(&status); explain_wait_status(pid, status); if (WIFEXITED(status) WIFSIGNALED(status)) --processes_alive;
31 Κώδικας: παράδειγμα fork() / wait() void child(void) { compute(10000); exit(7); int main(void) { pid_t p; int status; p = fork(); if (p < 0) { perror("fork"); exit(1); if (p == 0) { child(); exit(1); p = wait(&status); explain_wait_status(p, status); return 0;
32 Κώδικας: παράδειγμα fork() / wait() void child(void) { compute(10000); exit(7); int main(void) { pid_t p; int status; father p = fork(); if (p < 0) { perror("fork"); exit(1); if (p == 0) { child(); exit(1); child p = wait(&status); explain_wait_status(p, status); return 0;
33 2 η άσκηση Σύνοψη Διαχείριση διεργασιών Δημιουργία δεδομένου δέντρου διεργασιών με fork() / wait() Δημιουργία αυθαίρετου δέντρου διεργασιών με βάση αρχείο εισόδου που το περιγράφει Διαδιεργασιακή επικοινωνία με σήματα, SIGSTOP / SIGCONT με σωληνώσεις (UNIX pipes)
34 Βοηθητικές συναρτήσεις - παραδείγματα proc-common.{h,c, fork-example.c, pstree-this.c change_pname() αλλαγή ονόματος διεργασίας explain_wait_status() διαγνωστικό μήνυμα για status της wait() wait_for_ready_children() αναμονή αναστολής παιδιών με SIGSTOP tree.{h,c και tree-example.c get_tree_from_file() ανάγνωση δέντρου από αρχείο, επιστροφή struct tree_node print_tree()
35 Η δομή struct tree node struct tree_node { unsigned nr_children; char name[node_name_size]; struct tree_node *children; ; A B E C F D
36 Η δομή struct tree node struct tree_node { unsigned nr_children; char name[node_name_size]; struct tree_node *children; ; 3 Α 1 Β 0 E 1 A B E C C F 0 D 0 F D
37 int *ip; Αριθμητική με δείκτες
38 Αριθμητική με δείκτες int *ip; ip
39 Αριθμητική με δείκτες *ip int *ip; ip
40 Αριθμητική με δείκτες *ip int *ip; ip ip+1
41 Αριθμητική με δείκτες *ip *(ip+1) int *ip; ip ip+1
42 Αριθμητική με δείκτες *ip *(ip+1) *(ip+2) int *ip; ip ip+1 ip+2
43 Αριθμητική με δείκτες *ip *(ip+1) *(ip+2) *(ip+3) int *ip; ip ip+1 ip+2 ip+3
44 Αριθμητική με δείκτες ip[0] ip[1] ip[2] ip[3] *ip *(ip+1) *(ip+2) *(ip+3) int *ip; ip ip+1 ip+2 ip+3
45 Αριθμητική με δείκτες ip[0] ip[1] ip[2] ip[3] *ip *(ip+1) *(ip+2) *(ip+3) int *ip; ip ip+1 ip+2 ip+3 double *dp; dp
46 Αριθμητική με δείκτες ip[0] ip[1] ip[2] ip[3] *ip *(ip+1) *(ip+2) *(ip+3) int *ip; ip ip+1 ip+2 ip+3 *dp double *dp; dp
47 Αριθμητική με δείκτες ip[0] ip[1] ip[2] ip[3] *ip *(ip+1) *(ip+2) *(ip+3) int *ip; ip ip+1 ip+2 ip+3 *dp *(dp+1) double *dp; dp dp+1
48 Αριθμητική με δείκτες ip[0] ip[1] ip[2] ip[3] *ip *(ip+1) *(ip+2) *(ip+3) int *ip; ip ip+1 ip+2 ip+3 dp[0] *dp dp[1] *(dp+1) double *dp; dp dp+1
49 Η δομή struct tree node struct tree_node { unsigned nr_children; char name[node_name_size]; struct tree_node *children; ; 3 Α 1 Β 0 E 1 A B E C C F 0 D 0 F D
50 Η δομή struct tree node struct tree_node { unsigned nr_children; char name[node_name_size]; struct tree_node *children; ; t Α Β E A B E t children 1 C C F 0 D 0 F D
51 Η δομή struct tree node struct tree_node { unsigned nr_children; char name[node_name_size]; struct tree_node *children; ; t Α Β E A B E t children 1 C C F 0 D 0 F D
52 Η δομή struct tree node struct tree_node { unsigned nr_children; char name[node_name_size]; struct tree_node *children; ; t Α Β E A B E t children t children +1 1 C C F 0 D 0 F D
53 Η δομή struct tree node struct tree_node { unsigned nr_children; char name[node_name_size]; struct tree_node *children; ; t Α Β E A B E t children t children +1 1 C C F 0 D 0 F D
54 Η δομή struct tree node struct tree_node { unsigned nr_children; char name[node_name_size]; struct tree_node *children; ; t Α Β E A B E t children t children +1 1 C C F t children +2 0 D 0 F D
55 Αναδρομική διάσχιση: print_tree() static void print_tree(struct tree_node *root, int level) { int i; for (i=0; i<level; i++) printf("\t"); printf("%s\n", root->name); for (i=0; i < root->nr_children; i++){ print_tree(root->children + i, level + 1); A B E void print_tree(struct tree_node *root) { print_tree(root, 0); C F D
56 Αναδρομική διάσχιση: print_tree() static void print_tree(struct tree_node *root, int level) { int i; for (i=0; i<level; i++) printf("\t"); printf("%s\n", root->name); for (i=0; i < root->nr_children; i++){ print_tree(root->children + i, level + 1); A B E void print_tree(struct tree_node *root) { print_tree(root, 0); C F D
57 Αναδρομική διάσχιση: print_tree() static void print_tree(struct tree_node *root, int level) { int i; for (i=0; i<level; i++) printf("\t"); printf("%s\n", root->name); for (i=0; i < root->nr_children; i++){ print_tree(root->children + i, level + 1); A B E void print_tree(struct tree_node *root) { print_tree(root, 0); C F D
58 Αναδρομική διάσχιση: print_tree() static void print_tree(struct tree_node *root, int level) { int i; for (i=0; i<level; i++) printf("\t"); printf("%s\n", root->name); for (i=0; i < root->nr_children; i++){ print_tree(root->children + i, level + 1); A B E void print_tree(struct tree_node *root) { print_tree(root, 0); C F D
59 Αναδρομική διάσχιση: print_tree() static void print_tree(struct tree_node *root, int level) { int i; for (i=0; i<level; i++) printf("\t"); printf("%s\n", root->name); for (i=0; i < root->nr_children; i++){ print_tree(root->children + i, level + 1); A B E void print_tree(struct tree_node *root) { print_tree(root, 0); C F D
60 Αναδρομική διάσχιση: print_tree() static void print_tree(struct tree_node *root, int level) { int i; for (i=0; i<level; i++) printf("\t"); printf("%s\n", root->name); for (i=0; i < root->nr_children; i++){ print_tree(root->children + i, level + 1); A B E void print_tree(struct tree_node *root) { print_tree(root, 0); C F D
61 Αναδρομική διάσχιση: print_tree() static void print_tree(struct tree_node *root, int level) { int i; for (i=0; i<level; i++) printf("\t"); printf("%s\n", root->name); for (i=0; i < root->nr_children; i++){ print_tree(root->children + i, level + 1); A B E void print_tree(struct tree_node *root) { print_tree(root, 0); C F D
62 Αναδρομική διάσχιση: print_tree() static void print_tree(struct tree_node *root, int level) { int i; for (i=0; i<level; i++) printf("\t"); printf("%s\n", root->name); for (i=0; i < root->nr_children; i++){ print_tree(root->children + i, level + 1); A B E void print_tree(struct tree_node *root) { print_tree(root, 0); C F D Διάσχιση κατά βάθος (depth-first search)
63 2 η άσκηση Σύνοψη Διαχείριση διεργασιών Δημιουργία δεδομένου δέντρου διεργασιών με fork() / wait() Δημιουργία αυθαίρετου δέντρου διεργασιών με βάση αρχείο εισόδου που το περιγράφει Διαδιεργασιακή επικοινωνία με σήματα, SIGSTOP / SIGCONT με σωληνώσεις (UNIX pipes)
64 Σήματα στο UNIX (1) Αποστολή (kill(), raise())
65 Σήματα στο UNIX (1) Αποστολή (kill(), raise()) Παράδειγμα: if (kill(pid, SIGUSR1) < 0) { perror( kill ); exit(1);
66 Σήματα στο UNIX (1) Αποστολή (kill(), raise()) Παράδειγμα: if (kill(pid, SIGUSR1) < 0) { perror( kill ); exit(1); Χειρισμός (signal(), με SIG_IGN, SIG_DFL ή handler)
67 Σήματα στο UNIX (1) Αποστολή (kill(), raise()) Παράδειγμα: if (kill(pid, SIGUSR1) < 0) { perror( kill ); exit(1); Χειρισμός (signal(), με SIG_IGN, SIG_DFL ή handler) Παράδειγμα: void sighandler(int signum) { got_sigusr1 = 1; if (signal(sigusr1, sighandler) < 0) { perror( could not establish SIGUSR1 handler ); exit(1);
68 Σήματα στο UNIX (2) Αναξιόπιστα Τι θα γίνει αν έρθουν πολλά σήματα; Η συνάρτηση χειρισμού θα τρέξει από 1 έως n φορές Τι θα γίνει αν το σήμα έρθει ενώ η συνάρτηση χειρισμού εκτελείται;
69 Σήματα στο UNIX (2) Αναξιόπιστα Τι θα γίνει αν έρθουν πολλά σήματα; Η συνάρτηση χειρισμού θα τρέξει από 1 έως n φορές Τι θα γίνει αν το σήμα έρθει ενώ η συνάρτηση χειρισμού εκτελείται; Race conditions: αυτό θα δουλέψει;
70 Σήματα στο UNIX (2) Αναξιόπιστα Τι θα γίνει αν έρθουν πολλά σήματα; Η συνάρτηση χειρισμού θα τρέξει από 1 έως n φορές Τι θα γίνει αν το σήμα έρθει ενώ η συνάρτηση χειρισμού εκτελείται; Race conditions: αυτό θα δουλέψει; Παράδειγμα: void sighandler(int signum) { got_sigusr1 = 1;... got_sigusr1 = 0; while (!got_sigusr1) pause(); /* Αναμονή έως ότου ληφθεί κάποιο σήμα */
71 Σήματα στο UNIX (3) Η signal() δεν είναι φορητή Ο handler ακυρώνεται όταν εκτελείται (System V) και πρέπει να επανεγκατασταθεί ή όχι BSD. Στο Linux; εξαρτάται libc vs. kernel Καλύτερη, φορητή λύση: sigaction()
72 sa.sa_handler = sigchld_handler; sa.sa_flags = SA_RESTART; sigemptyset(&sigset); sa.sa_mask = sigset; if (sigaction(sigchld, &sa, NULL) < 0) { perror("sigaction"); exit(1); Σήματα στο UNIX (3) Η signal() δεν είναι φορητή Ο handler ακυρώνεται όταν εκτελείται (System V) και πρέπει να επανεγκατασταθεί ή όχι BSD. Στο Linux; εξαρτάται libc vs. kernel Καλύτερη, φορητή λύση: sigaction() Παράδειγμα: struct sigaction sa; sigset_t sigset;
73 Σήματα στο UNIX (4) Χρήσιμες εντολές kill, ps, pstree, killall, grep
74 Σήματα στο UNIX (4) Χρήσιμες εντολές kill, ps, pstree, killall, grep $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2... $ ps ef grep oslabg01 grep bash oslabg :17 pts/0 00:00:00 bash $ kill -TERM 4277 $ kill $ killall -9 bash
75 Σήματα στο UNIX (4) Χρήσιμες εντολές kill, ps, pstree, killall, grep $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2... $ ps ef grep oslabg01 grep bash oslabg :17 pts/0 00:00:00 bash $ kill -TERM 4277 $ kill $ killall -9 bash Όλες οι λεπτομέρειες στα manual pages
76 SIGCHLD SIGCHLD: ένα παιδί άλλαξε κατάσταση Πέθανε κανονικά τερματίστηκε από σήμα έχει σταματήσει λόγω σήματος (SIGTSTP, SIGSTOP)
77 SIGCHLD SIGCHLD: ένα παιδί άλλαξε κατάσταση Πέθανε κανονικά τερματίστηκε από σήμα έχει σταματήσει λόγω σήματος (SIGTSTP, SIGSTOP) Επιτρέπει στη γονική διεργασία να κάνει waitpid() ασύγχρονα, όταν χρειάζεται Κάτι συμβαίνει σε ένα παιδί Ο πατέρας λαμβάνει SIGCHLD Εκτελεί waitpid() Ιδανικά: πολλές φορές, με WNOHANG
78 Κώδικας: παράδειγμα χειρισμού SIGCHLD void sigchld_handler(int signum) { pid_t p; int status; /* * Something has happened to one of the children. * We use waitpid() with the WUNTRACED flag, instead of wait(), because * SIGCHLD may have been received for a stopped, not dead child. * * A single SIGCHLD may be received if many processes die at the same time. * We use waitpid() with the WNOHANG flag in a loop, to make sure all * children are taken care of before leaving the handler. */ do { p = waitpid(-1, &status, WUNTRACED WNOHANG); if (p < 0) { perror("waitpid"); exit(1); while (p > 0);
79 Κώδικας: παράδειγμα χειρισμού SIGCHLD void sigchld_handler(int signum) { pid_t p; int status; /* * Something has happened to one of the children. * We use waitpid() with the WUNTRACED flag, instead of wait(), because * SIGCHLD may have been received for a stopped, not dead child. * * A single SIGCHLD may be received if many processes die at the same time. * We use waitpid() with the WNOHANG flag in a loop, to make sure all * children are taken care of before leaving the handler. */ do { p = waitpid(-1, &status, WUNTRACED WNOHANG); if (p < 0) { perror("waitpid"); exit(1); explain_wait_status(p, status); if (WIFEXITED(status) WIFSIGNALED(status)) /* A child has died */ if (WIFSTOPPED(status)) /* A child has stopped due to SIGSTOP/SIGTSTP, etc... */ while (p > 0);
80 2 η άσκηση Σύνοψη Διαχείριση διεργασιών Δημιουργία δεδομένου δέντρου διεργασιών με fork() / wait() Δημιουργία αυθαίρετου δέντρου διεργασιών με βάση αρχείο εισόδου που το περιγράφει Διαδιεργασιακή επικοινωνία με σήματα, SIGSTOP / SIGCONT με σωληνώσεις (UNIX pipes)
81 Αριθμητική έκφραση ως δέντρο *
82 4 * (5+7) Αριθμητική έκφραση ως δέντρο *
83 4 * (5+7) Αριθμητική έκφραση ως δέντρο * + 5 A B D 4 7 C E
84 4 * (5+7) Αριθμητική έκφραση ως δέντρο * A 12 B 5 D 4 7 C E
85 Αριθμητική έκφραση ως δέντρο * A 12 B 5 D 4 7 C E 4 * (5+7) Ανάγκη για επικοινωνία παιδί πατέρας
86 Σωληνώσεις στο UNIX (1) Διεργασία write fd[1] άκρο εγγραφής M read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο ανάγνωσης Ένας από τους βασικότερους μηχανισμούς στο UNIX Μονόδρομη μεταφορά δεδομένων Από το άκρο εγγραφής στο άκρο ανάγνωσης Δημιουργία με pipe(), επικοινωνία με write() και read() Αν η σωλήνωση είναι άδεια; η read() μπλοκάρει
87 Σωληνώσεις στο UNIX (1) Διεργασία Χώρος Χρήστη Χώρος Πυρήνα int fd[2]; int num1, num2; pipe(fd); write(fd[1], &num1, sizeof(num1)); read(fd[0], &num2, sizeof(num2));
88 Σωληνώσεις στο UNIX (1) Διεργασία Χώρος Χρήστη Χώρος Πυρήνα άκρο εγγραφής άκρο ανάγνωσης int fd[2]; int num1, num2; pipe(fd); write(fd[1], &num1, sizeof(num1)); read(fd[0], &num2, sizeof(num2));
89 Σωληνώσεις στο UNIX (1) Διεργασία write fd[1] άκρο εγγραφής M Χώρος Χρήστη Χώρος Πυρήνα άκρο ανάγνωσης int fd[2]; int num1, num2; pipe(fd); write(fd[1], &num1, sizeof(num1)); read(fd[0], &num2, sizeof(num2));
90 Σωληνώσεις στο UNIX (1) Διεργασία write fd[1] άκρο εγγραφής M int fd[2]; int num1, num2; read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο ανάγνωσης pipe(fd); write(fd[1], &num1, sizeof(num1)); read(fd[0], &num2, sizeof(num2));
91 Σωληνώσεις στο UNIX (1) Διεργασία write fd[1] read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο εγγραφής άκρο ανάγνωσης int fd[2]; int num1, num2; pipe(fd); write(fd[1], &num1, sizeof(num1)); read(fd[0], &num2, sizeof(num2));
92 Σωληνώσεις στο UNIX (2) Διεργασία πατέρας Χώρος Χρήστη Χώρος Πυρήνα pipe(fd); fork(); ο πατέρας κλείνει το άκρο ανάγνωσης το παιδί κλείνει το άκρο εγγραφής
93 Σωληνώσεις στο UNIX (2) Διεργασία πατέρας write fd[1] read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο εγγραφής άκρο ανάγνωσης pipe(fd); fork(); ο πατέρας κλείνει το άκρο ανάγνωσης το παιδί κλείνει το άκρο εγγραφής
94 Σωληνώσεις στο UNIX (2) Διεργασία πατέρας write fd[1] read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο εγγραφής άκρο ανάγνωσης pipe(fd); fork(); ο πατέρας κλείνει το άκρο ανάγνωσης το παιδί κλείνει το άκρο εγγραφής
95 Σωληνώσεις στο UNIX (2) Διεργασία πατέρας write fd[1] read fd[0] Διεργασία παιδί write fd[1] read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο εγγραφής άκρο ανάγνωσης pipe(fd); fork(); ο πατέρας κλείνει το άκρο ανάγνωσης το παιδί κλείνει το άκρο εγγραφής
96 Σωληνώσεις στο UNIX (2) Διεργασία πατέρας write fd[1] Διεργασία παιδί write fd[1] read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο εγγραφής άκρο ανάγνωσης pipe(fd); fork(); ο πατέρας κλείνει το άκρο ανάγνωσης το παιδί κλείνει το άκρο εγγραφής
97 Σωληνώσεις στο UNIX (2) Διεργασία πατέρας write fd[1] Διεργασία παιδί read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο εγγραφής άκρο ανάγνωσης pipe(fd); fork(); ο πατέρας κλείνει το άκρο ανάγνωσης το παιδί κλείνει το άκρο εγγραφής
98 Σωληνώσεις στο UNIX (2) Διεργασία πατέρας write fd[1] άκρο εγγραφής M Διεργασία παιδί read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο ανάγνωσης pipe(fd); fork(); ο πατέρας κλείνει το άκρο ανάγνωσης το παιδί κλείνει το άκρο εγγραφής
99 Σωληνώσεις στο UNIX (2) Διεργασία πατέρας write fd[1] Διεργασία παιδί read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο εγγραφής άκρο ανάγνωσης pipe(fd); fork(); ο πατέρας κλείνει το άκρο ανάγνωσης το παιδί κλείνει το άκρο εγγραφής
100 Κώδικας: παράδειγμα IPC με UNIX double value; int pfd[2]; pid_t p; if (pipe(pfd) < 0) { perror( pipe ); exit(1); p = fork(); if (p < 0) { perror( fork ); exit(1); else if (p == 0) { pipes else {
101 Κώδικας: παράδειγμα IPC με UNIX double value; int pfd[2]; pid_t p; if (pipe(pfd) < 0) { perror( pipe ); exit(1); pipes p = fork(); if (p < 0) { perror( fork ); exit(1); else if (p == 0) { if (read(pfd[0], &value, sizeof(value))!= sizeof(value)) { perror( read from pipe ); exit(1); printf( child received value: value = %f\n, value); exit(0); else {
102 Κώδικας: παράδειγμα IPC με UNIX double value; int pfd[2]; pid_t p; if (pipe(pfd) < 0) { perror( pipe ); exit(1); pipes p = fork(); if (p < 0) { perror( fork ); exit(1); else if (p == 0) { if (read(pfd[0], &value, sizeof(value))!= sizeof(value)) { perror( read from pipe ); exit(1); printf( child received value: value = %f\n, value); exit(0); else { compute_value(&value); if (write(pfd[1], &value, sizeof(value))!= sizeof(value)) { perror( write to pipe ); exit(1); exit(0);
103 Ερωτήσεις;
104 Ερωτήσεις; και στη λίστα:
Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 2 η Εργαστηριακή Άσκηση: Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία Λειτουργικά
Διαβάστε περισσότερα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
Διαβάστε περισσότεραΧρονοδρομολογητής Κυκλικής Επαναφοράς
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 4 η Εργαστηριακή Άσκηση: Χρονοδρομολογητής Κυκλικής Επαναφοράς Λειτουργικά Συστήματα Υπολογιστών
Διαβάστε περισσότεραΕργαστήριο 5 fork(), exec(), signals
Εργαστήριο 5 fork(), exec(), signals Στο εργαστήριο θα μελετηθούν: Παραδείγματα χρήσης των συναρτήσεων fork και exec Συνάρτηση waitpid Συνάρτηση WIFEXITED Συνάρτηση WEXITSTATUS Παράδειγμα χρήσης σημάτων
Διαβάστε περισσότεραΔιεργασίες και Νήματα (1/2)
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Διεργασίες και Νήματα (1/2) Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017 Διεργασίες
Διαβάστε περισσότεραΛειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Διαβάστε περισσότεραΕργαστήριο 7 fork(), exec(), signals
Εργαστήριο 7 fork(), exec(), signals Στο εργαστήριο θα μελετηθούν: Παραδείγματα χρήσης των συναρτήσεων fork και exec Συνάρτηση waitpid Συνάρτηση WIFEXITED Συνάρτηση WEXITSTATUS Παράδειγμα χρήσης σημάτων
Διαβάστε περισσότεραΔιεργασίες - Σύνοψη. Διακοπές, προνομιούχος κατάσταση Κλήσεις συστήματος. Ορισμός, μεταβάσεις κατάστασης κύκλος ζωής
Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς. Διεργασίες
Διαβάστε περισσότεραΝτίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4. Λειτουργικά Συστήματα- Φροντιστήριο 2
Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4 Φροντιστήριο 2 1 Λειτουργικό Σύστημα -> Multitasking Κάθε διεργασία μπορεί να ειδωθεί σαν μία δέσμη στοιχείων που διατηρούνται από τον πυρήνα
Διαβάστε περισσότεραΔίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals
Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals Δρ. Απόστολος Γκάμας Διδάσκων 407/80 gkamas@uop.gr Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 1 1 UDP vs TCP Το UDP είναι ένα connectionless, μη αξιόπιστο,
Διαβάστε περισσότεραΕργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ
Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ Εισαγωγή Σκοπός τόσο αυτού του εργαστηρίου, όσο και των εργαστηρίων που ακολουθούν, είναι να γνωρίσουμε τους τρόπους δημιουργίας και διαχείρισης των διεργασιών (processes)
Διαβάστε περισσότεραΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΕΡΓΑΣΙΕΣ
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΕΡΓΑΣΙΕΣ Πολυεπεξεργασία Διεργασία (process) Νήμα (thread) Εργασία (task/job) Διεργασίες Διεργασία είναι μια (συγκεκριμένη) εκτέλεση κάποιου προγράμματος για λογαριασμό κάποιου
Διαβάστε περισσότεραΔημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1
Δημιουργία & Τερματισμός Διεργασιών Προγραμματισμός II 1 lalis@inf.uth.gr Δημιουργία νέας διεργασίας pid_t fork() Η fork δεν έχει παραμέτρους Δημιουργεί μια νέα διεργασία που είναι ένα αντίγραφο της διεργασίας
Διαβάστε περισσότεραΠανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής
Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής ΕΥ311-Διαδικτυακός και Ταυτόχρονος Προγραμματισμός Εργαστήριο: Παραδείγματα δημιουργίας διεργασιών στο Linux Ένα πρόγραμμα (το στιγμιότυπο της εκτέλεσης του οποίου
Διαβάστε περισσότεραΔημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1
Δημιουργία & Τερματισμός Διεργασιών Προγραμματισμός II 1 lalis@inf.uth.gr Δημιουργία νέας διεργασίας pid_t fork() Η fork δεν έχει παραμέτρους Δημιουργεί μια νέα διεργασία που είναι ένα αντίγραφο της διεργασίας
Διαβάστε περισσότεραΠρογραμματισμός συστημάτων UNIX/POSIX. Σήματα (signals)
Προγραμματισμός συστημάτων UNIX/POSIX Σήματα (signals) Σήματα (signals) Τα σήματα είναι «διακοπές» λογισμικού (software interrupts) οι οποίες διακόπτουν την κανονική λειτουργία μίας διεργασίας. Προκαλούνται
Διαβάστε περισσότεραΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: nifantop@unipi.gr Περιεχόμενα ενότητας Διεργασίες Κλήσεις δημιουργίας και τερματισμού διεργασιών Επικοινωνία διεργασιών μέσω
Διαβάστε περισσότεραΛειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Διαβάστε περισσότεραΠρογραμματισμός συστημάτων UNIX/POSIX
Προγραμματισμός συστημάτων UNIX/POSIX Προχωρημένη διαδιεργασιακή επικοινωνία: επώνυμοι αγωγοί (FIFOs) ουρές μηνυμάτων (message queues) κοινόχρηστη μνήμη (shared memory) σήματα (signals) Ανάγκη Ότι είδαμε
Διαβάστε περισσότεραΣήματα (Signals) Προγραμματισμός II 1
Σήματα (Signals) Προγραμματισμός II 1 lalis@inf.uth.gr Τι είναι ένα σήμα; Το σήμα είναι μια ειδοποίηση που στέλνεται στην διεργασία που εκτελεί ένα πρόγραμμα Μπορεί να προκύψει για διάφορους λόγους, π.χ.
Διαβάστε περισσότεραΔιάλεξη 14: Διεργασίες: Έλεγχος & Σήματα (Processes: Control & Signals)
ΕΠΛ371 - Προγραμματισμός Συστημάτων Διάλεξη 14: Διεργασίες: Έλεγχος & Σήματα (Processes: Control & Signals) (Κεφάλαιο 8,10 - Stevens & Rago) Δημήτρης Ζεϊναλιπούρ 14-1 Περιεχόμενο Διάλεξης A. Η οικογένεια
Διαβάστε περισσότεραΛειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος 2011-2012
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Διαβάστε περισσότεραΣήματα (Signals) Προγραμματισμός II 1
Σήματα (Signals) Προγραμματισμός II 1 lalis@inf.uth.gr Τι είναι ένα σήμα; Το σήμα είναι μια ειδοποίηση Μπορεί να προκύψει για διάφορους λόγους Π.χ., εξαίρεση αριθμητικής πράξης, τερματισμός διεργασίας
Διαβάστε περισσότεραΣήματα (Signals) Προγραμματισμός II 1
Σήματα (Signals) Προγραμματισμός II 1 lalis@inf.uth.gr Τι είναι ένα σήμα; Το σήμα είναι μια ειδοποίηση που στέλνεται στην διεργασία που εκτελεί ένα πρόγραμμα Μπορεί να προκύψει για διάφορους λόγους, π.χ.
Διαβάστε περισσότεραΕζληθό Μεηζόβην Πνιπηερλείν Σρνιή Ηιεθηξνιόγσλ Μερ. θαη Μεραληθώλ Υπνινγηζηώλ Εξγαζηήξην Υπνινγηζηηθώλ Σπζηεκάησλ.
Εζληθό Μεηζόβην Πνιπηερλείν Σρνιή Ηιεθηξνιόγσλ Μερ. θαη Μεραληθώλ Υπνινγηζηώλ Εξγαζηήξην Υπνινγηζηηθώλ Σπζηεκάησλ 4 ε Εξγαζηεξηαθή Άζθεζε: Φξνλνδξνκνιόγεζε Λεηηνπξγηθά Σπζηήκαηα Υπνινγηζηώλ 6ν Εμάκελν,
Διαβάστε περισσότεραΛειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Διαβάστε περισσότεραΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις Υλικό από: Modern Operating Systems Laboratory Exercises, Shrivakan Mishra Σύνθεση Κ.Γ. Μαργαρίτης, Τμήμα Εφαρμοσμένης Πληροφορικής, Πανεπιστήμιο
Διαβάστε περισσότεραΠρογραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)
Προγραμματισμός συστημάτων UNIX/POSIX Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes) Επικοινωνία μεταξύ διεργασιών γονέα-παιδιού Κατά κάποιο τρόπο, θα δημιουργήσουμε ένα τύπο
Διαβάστε περισσότεραΠρογραμματισμός συστημάτων UNIX/POSIX. Διεργασίες (processes)
Προγραμματισμός συστημάτων UNIX/POSIX Διεργασίες (processes) Δομή αρχείου προγράμματος Πρόγραμμα (program) ονομάζεται το εκτελέσιμο αρχείο που βρίσκεται αποθηκευμένο στο δίσκο (π.χ. το a.out, ή το ls ή
Διαβάστε περισσότεραΛειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος Κανονική Εξέταση Λύσεις
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Διαβάστε περισσότεραΕκφωνήσεις ασκήσεων εργαστηρίου 1
Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Γκόγκος Χρήστος Εκφωνήσεις ασκήσεων εργαστηρίου
Διαβάστε περισσότεραΕργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Διαβάστε περισσότεραΛύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΔΙΕΡΓΑΣΙΕΣ +- Με τον όρο διεργασία στο UNIX εννοούμε τη δυναμικη πράξη της
Διαβάστε περισσότεραΛειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο
Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο 2018-2019 Άσκηση 1 Φροντιστήριο: 05/10/2018 Παράδοση: 18/10/2018 Υλοποίηση Linux C Shell ΤΑ : shevtsov(shevtsov@csd.uoc.gr) Ώρες Γραφείου : Δευτέρα 14:00-16:00
Διαβάστε περισσότεραΕισαγωγή εκτελέσιμου κώδικα σε διεργασίες
0x375 - Thessaloniki Tech Talks Sessions Event 0x2 19 Μαρτίου 2010 Περιεχόμενα 1 Εισαγωγή 2 Η κλήση συστήματος ptrace 3 Νήματα 4 Το πρόγραμμα εισαγωγής κώδικα prez 5 Επίλογος Γιατί; Πολλές φορές θέλουμε
Διαβάστε περισσότεραΛειτουργικά Συστήματα
Λειτουργικά Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:07 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών
Διαβάστε περισσότεραΛειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος 2011-2012
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Διαβάστε περισσότερα4 η ιάλεξη: Signals UDP Sockets
Εργαστήριο ικτύων Υπολογιστών 4 η ιάλεξη: ικτυακός Προγραμματισμός Signals UDP Sockets TCP sockets και signals Όταν σε ένα TCP server κάνουμε fork (γεννάμε διεργασίες-παιδιά servers για να εξυπηρετήσουμε
Διαβάστε περισσότεραΘέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας
Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας Το επίπεδο προτεραιότητας µιας διεργασίας µπορεί να αλλάξει µε χρήση της συνάρτησης nice. Κάθε διεργασία διαθέτει µια τιµή που καλείται
Διαβάστε περισσότεραΔιεργασίες και Νήματα (2/2)
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Διεργασίες και Νήματα (2/2) Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017 Νήματα
Διαβάστε περισσότεραΕργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Διαβάστε περισσότεραΛειτουργικά Συστήματα (ΗΥ321)
Λειτουργικά Συστήματα (ΗΥ321) Διάλεξη 2: Διεργασίες και Νήματα Διαδικαστικά 2 Γραφτήκατε στη λίστα; Σχηματίστε ομάδες (για το project)! Στο προηγούμενο επεισόδιο 3 Τι είναι λειτουργικό; Γενιές ΛΣ Βασικές
Διαβάστε περισσότεραΚεφάλαιο 11 Διαχείριση Διεργασιών
Κεφάλαιο 11 Διαχείριση Διεργασιών Κάθε πρόγραμμα που τρέχει λέγεται διεργασία. Οι διεργασίες ποικίλουν από πράγματα σαν το X παραθυρικό σύστημα εως προγράμματα συστήματος (δαίμονες) που ξεκινούν με την
Διαβάστε περισσότεραΛειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Διαβάστε περισσότεραιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr
ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr Η έννοια της διεργασίας ιεργασία (process) είναι ο µηχανισµός εκτέλεσης ενός προγράµµατος σε ένα λειτουργικό σύστηµα. Η διεργασία είναι µια ενεργή
Διαβάστε περισσότερα$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).
Κ24: Προγραμματισμός Συστήματος 2η Εργασία Εαρινό Εξάμηνο 2017 Προθεσμία Υποβολής: Κυριακή 30 Απριλίου 2017 Ωρα 23:59 Εισαγωγή στην Εργασία: Ο στόχος της εργασίας αυτής είναι να εξοικειωθείτε με την δημιουργία
Διαβάστε περισσότεραΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: nifantop@unipi.gr It seems very simple. It is very simple. But if you don t know what the key is its virtually indecipherable.
Διαβάστε περισσότεραmake Προγραμματισμός II 1
make Προγραμματισμός II 1 lalis@inf.uth.gr myprog.c preprocessor (cc1) /tmp/cczxt.i assembler (as) compiler (cc1) /tmp/cczxt.o /tmp/cczxt.s linker (ld) myprog Προγραμματισμός II 2 lalis@inf.uth.gr Δοκιμάστε
Διαβάστε περισσότεραΛειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος 2010-2011
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Διαβάστε περισσότεραΕργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ Σχεδιασμός και υλοποίηση υποδομής σημείωσης διεργασιών στον
Διαβάστε περισσότεραΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις
Διαβάστε περισσότεραΛειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Διαβάστε περισσότεραΛειτουργικά Συστήματα
Λειτουργικά Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:09 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών
Διαβάστε περισσότεραΠρογραμματισμός Διαχείρισης Συστημάτων ΙΙ
Προγραμματισμός Διαχείρισης Συστημάτων ΙΙ Μάθημα 3ο Έλεγχος διεργασιών και Χρονοπρογραμματισμός εργασιών Μιχαηλίδης Παναγιώτης Περιεχόμενα Έλεγχος διεργασιών Συστατικά μιας διεργασίας Κύκλος ζωής μιας
Διαβάστε περισσότεραΛειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος 2010-2011
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Θέμα
Διαβάστε περισσότεραΔείκτες σε συναρτήσεις. Προγραμματισμός II 1
Δείκτες σε συναρτήσεις Προγραμματισμός II 1 lalis@inf.uth.gr Συνάρτηση Ομάδα εντολών που γράφουμε ξεχωριστά για να υλοποιήσουμε μια συγκεκριμένη λειτουργία για καλύτερη / πιο καθαρή δόμηση του κώδικα για
Διαβάστε περισσότεραΠαράδειγµα χρήσης perror, errno (πρόγραµµα errors_demo.c)
Χειρισµός Λαθών 1 Παράδειγµα χρήσης perror, errno (πρόγραµµα errors_demo.c) 2 Είσοδος/Έξοδος Χαµηλού Επιπέδου 3 Είσοδος/Έξοδος Χαµηλού Επιπέδου (συν.) Αυτό αργότερα στο εξάµηνο 4 Κλήση συστήµατος open
Διαβάστε περισσότεραΑ Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2016 (1/2/2016) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................
Διαβάστε περισσότεραΠρογραμματισμός συστημάτων UNIX/POSIX
Προγραμματισμός συστημάτων UNIX/POSIX Προχωρημένη διαδιεργασιακή επικοινωνία: επώνυμοι αγωγοί (FIFOs) ουρές μηνυμάτων (message queues) κοινόχρηστη μνήμη (shared memory) Ανάγκη Ότι είδαμε μέχρι τώρα μπορεί
Διαβάστε περισσότεραΠρογραμματισμός Ι. Πολλαπλά Αρχεία. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Πολλαπλά Αρχεία Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Πολλαπλά Αρχεία Όταν γράφουμε μεγάλα προγράμματα θέλουμε να έχουμε ανεξάρτητα κομμάτια κώδικα
Διαβάστε περισσότεραΛειτουργικά Συστήματα (Λ/Σ)
Λειτουργικά Συστήματα (Λ/Σ) Βασικές Έννοιες Λειτουργικών Συστημάτων Βασίλης Σακκάς 13/11/2013 1 ΒασικέςΈννοιεςΛ/Σ Η επικοινωνία μεταξύ Λ/Σ και των προγραμμάτων του χρήστη γίνεται μέσω του συνόλου των «εκτεταμένων
Διαβάστε περισσότεραΠαράλληλη Επεξεργασία
Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στα Πολυεπεξεργαστικά Συστήματα Διερασίες και Νήματα σε Πολυεπεξεργαστικά Συστήματα Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed
Διαβάστε περισσότεραΕικονική Μνήμη (1/2)
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Εικονική Μνήμη (1/2) Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017 Εικονική Μνήμη
Διαβάστε περισσότεραwaitpid(), read(), write(), pipe(), mkfifo() κ.α.).
ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Τμήμα Πληροφορικής και Τηλεπικοινωνιών 2η Εργασία - Τμήμα: Περιττών Αριθμών Μητρώου Κ22: Λειτουργικά Συστήματα Χειμερινό Εξάμηνο 18 Ημερομηνία Ανακοίνωσης: Παρασκευή 26 Οκτωβρίου 2018
Διαβάστε περισσότεραΑγωγοί/Σωλήνες (Pipes) Προγραμματισμός II 1
Αγωγοί/Σωλήνες (Pipes) Προγραμματισμός II 1 lalis@inf.uth.gr Τι είναι ένας αγωγός; Μηχανισμός/συσκευή επικοινωνίας διεργασιών Μετάδοση μιας ροής από bytes (μονής κατεύθυνσης) First-in-first-out (FIFO):
Διαβάστε περισσότεραΔιαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1
Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1 lalis@inf.uth.gr Συνεργασία ανάμεσα σε διεργασίες Για ασφάλεια/ανεξαρτησία, το ΛΣ εξασφαλίζει πλήρη απομόνωση ανάμεσα στις
Διαβάστε περισσότεραΤµήµα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Σεπτέµβριος 2013
Γράψτε όλες τις απαντήσεις σας σε αυτό το φυλλάδιο Οδηγίες για Α: Διαβάστε προσεκτικά όλες τις επιλογές σηµειώστε µε Χ (το πολύ) µια από αυτές. Μην επιλέγετε «στην τύχη» οι λανθασµένες απαντήσεις βαθµολογούνται
Διαβάστε περισσότεραΕισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1
Διαβάστε περισσότεραΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου
ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου Σκοπός και περίγραμμα της Ενότητας 4 Σκοπός της παρουσίασης Να μελετήσουμε τις συναρτήσεις που ελέγχουν την ροή και την εκτέλεση ενός προγράμματος Σύνοψη
Διαβάστε περισσότεραΑνάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)
Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού
Διαβάστε περισσότεραΕργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά
EPL231: Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά Αναδρομή Η αναδρομή εμφανίζεται όταν μία διεργασία καλεί τον εαυτό της Υπάρχουν
Διαβάστε περισσότεραΣημειώσεις όγδοης εβδομάδας
Σημειώσεις όγδοης εβδομάδας Για να την δημιουργία σειριακών αρχείων, χρησιμοποιείται η fopen(filename, w ). Το αρχείο δημιουργείται στον ίδιο φάκελο που τρέχει το εκτελέσιμο πρόγραμμα. Το παρακάτω πρόγραμμα,
Διαβάστε περισσότεραΕργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ
Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά
Διαβάστε περισσότεραΕικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1
Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη και επικοινωνία διεργασιών Κάθε διεργασία έχει δική της ιδιωτική μνήμη Μια διεργασία δεν μπορεί να γράψει/διαβάσει από/σε θέσεις
Διαβάστε περισσότεραΠρότυπη Εργαστηριακή Άσκηση
Πρότυπη Εργαστηριακή Άσκηση Στα πλαίσια της παρούσας προπαρασκευαστικής άσκησης καλείστε να υλοποιήσετε μία κλήση συστήματος (system call) η οποία θα δέχεται ως είσοδο το path ενός αρχείου και θα επιστρέφει
Διαβάστε περισσότεραΔομημένος Προγραμματισμός
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαβάστε περισσότεραΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ
ΠΝΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΣ ΔΔΟΜΝΩΝ ΚΙ ΛΓΟΡΙΘΜΟΙ ΗΜΡΟΜΗΝΙ: 14/11/2018 ΔΙΓΝΩΣΤΙΚΟ ΠΝΩ Σ ΔΝΔΡΙΚΣ ΔΟΜΣ ΚΙ ΓΡΦΟΥΣ Διάρκεια: 45 λεπτά Ονοματεπώνυμο:. ρ. Ταυτότητας:. ΒΘΜΟΛΟΓΙ ΣΚΗΣΗ ΒΘΜΟΣ
Διαβάστε περισσότεραΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4
ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 1 Διαχείριση εργασιών fork(), exit(), exec() Επικοινωνία διεργασιών signals, sockets και client/server, shared memory Συγχρονισμός
Διαβάστε περισσότεραΛειτουργικά Συστήματα. Ενότητα # 10: Προγραμματισμός UNIX Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής
Λειτουργικά Συστήματα Ενότητα # 10: Προγραμματισμός UNIX Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του
Διαβάστε περισσότεραΤο λειτουργικό σύστημα. Προγραμματισμός II 1
Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή η εφαρμογή είναι γνωστή εκ των προτέρων περιορισμένοι υπολογιστικοί
Διαβάστε περισσότεραΛύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΕΚΤΕΛΕΣΗ ΕΝΤΟΛΩΝ ΣΕ ΣΥΓΚΕΚΡΙΜΕΝΗ ΩΡΑ (1/2) +- Στις 13:00 το μεσημέρι θέλουμε
Διαβάστε περισσότεραΜερικές άλλες χρήσιμες εντολές
1 Μερικές άλλες χρήσιμες εντολές whoami (Εμφανίζει το όνομα του τρέχοντος χρήστη) pwd (Εμφανίζει το όνομα του τρέχοντος καταλόγου) cat text file name (Παρουσιάζει στην οθόνη το περιεχόμενο ενός αρχείου
Διαβάστε περισσότεραUnix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες
Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες Σύνταξη εντολών Περιεχόµενα Οργάνωση και χειρισµός αρχείων Μπαλαντέρ ικαιώµατα χρήσης αρχείων και οµάδες χρηστών Έλεγχος διεργασιών Σύνταξη εντολών
Διαβάστε περισσότεραΙδιοκτησία Αντικειµένου
Software Transactional Memory H STM υποστηρίζει την εκτέλεση δοσοληψιών από τις διεργασίες, οι οποίες περιέχουν λειτουργίες που ο χρήστης θέλει να εκτελέσει στα διαµοιραζόµενα αντικείµενα. H STM εγγυάται
Διαβάστε περισσότεραFile Management και I/O στο UNIX
File Management και I/O στο UNIX Λειτουργικά Συστήματα Ντίρλης Νικόλαος- ΕΤΥ Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πάτρας Συστήματα 2013-2014 1 Εισαγωγή Ένα από τα βασικά στοιχεία της επιστήμης της Πληροφορικής
Διαβάστε περισσότεραΔομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Διαβάστε περισσότεραΕθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων. Συγχρονισμός
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 3 η Εργαστηριακή Άσκηση: Συγχρονισμός Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017
Διαβάστε περισσότεραΕθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων. Συγχρονισμός
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 3 η Εργαστηριακή Άσκηση: Συγχρονισμός Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2017-2018
Διαβάστε περισσότεραΛειτουργικά Συστήματα
Δρ. Βασίλης Ταμπακάς Δρ. Ιωάννης Ε. Λιβιέρης Τμήμα Μηχανικών Πληροφορικής Τ.Ε Περιεχόμενα Περιεχόμενα... 1 1. Εισαγωγή, Θεωρητική Υποδομή Εργαστηριακής Άσκησης... 2 2. Εργαστηριακή υποδομή εργαστηριακής
Διαβάστε περισσότεραΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΗΜΙΟΥΡΓΙΑ ΔΙΕΡΓΑΣΙΑΣ WEB-SERVER ΜΕ ΝΗΜΑΤΑ (THREADS) ΣΕ LINUX ΚΑΛΟΠΗΤΑΣ ΚΩΝΣΤΑΝΤΙΝΟΣ - 4190 ΣΒΕΝΤΖΟΥΡΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ - 4086 ΔΗΜΟΚΡΙΤΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΡΑΚΗΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΞΑΝΘΗΣ
Διαβάστε περισσότεραΛειτουργικά Συστήματα
Λειτουργικά Συστήματα Δρ. Βασίλης Ταμπακάς Δρ. Ιωάννης Ε. Λιβιέρης Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Περιεχόμενα Περιεχόμενα... 1 1. Εισαγωγή, Θεωρητική Υποδομή της Εργαστηριακής Άσκησης... 2 2. Εργαστηριακή
Διαβάστε περισσότεραΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Εισαγωγή στην χρήση πρωτογενών κλήσεων του UNIX Γ. ΠΑΠΑΚΩΝΣΤΑΝΤΙΝΟΥ
Διαβάστε περισσότεραΕγχειρίδιο Συναρτήσεων. Socket *sopen(const int type, const int protocol, const char *host, const char *service)
Socket *sopen(const int type, const int protocol, const char *host, const char *service) Στην περίπτωση ενός client, δημιουργεί μια νέα σύνδεση και κατασκευάζει μια δομή Socket που σχετίζεται με αυτή Σε
Διαβάστε περισσότεραΕικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1
Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη και επικοινωνία διεργασιών Κάθε διεργασία έχει δική της ιδιωτική μνήμη Μια διεργασία δεν μπορεί να γράψει/διαβάσει από/σε θέσεις
Διαβάστε περισσότεραΕργαστήριο 9: Αρχεία
Εργαστήριο 9: Αρχεία Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αρχεία, Είσοδος/Έξοδος από/προς αρχεία - Δυαδικά αρχεία - Παραδείγματα ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ.
Διαβάστε περισσότεραΔιδάσκων: Κωνσταντίνος Κώστα
Διάλεξη Ε4: Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, Δυαδικά Δένδρα Αναζήτησης Ισοζυγισμένα Δένδρα & 2-3 Δένδρα Διδάσκων: Κωνσταντίνος
Διαβάστε περισσότεραΠρογραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
Διαβάστε περισσότεραΚεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)
Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II (Διάλεξη 12) 12-1 Ανασκόπηση Δομής Προγράμματος με Συναρτήσεις 1 void PrintMessage (); Πρότυπο (Δήλωση) Συνάρτησης (Δηλώνουν τι επιπλέον συναρτήσεις θα χρησιμοποιήσουμε
Διαβάστε περισσότεραυναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:
υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Ταξινοµηµένες Λίστες µε δυναµική δέσµευση µνήµης Αναδροµκές συναρτήσεις ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 1 Λίστες
Διαβάστε περισσότεραΠεριεχόμενα. Πρόλογος... 21
Περιεχόμενα Πρόλογος... 21 Κεφάλαιο 1: Εισαγωγή στον προγραμματισμό... 25 Εισαγωγή...27 Πώς να διαβάσετε αυτό το βιβλίο...27 Η δομή των κεφαλαίων...28 Γιατί να μάθω προγραμματισμό;...31 Γιατί να μάθω C;...31
Διαβάστε περισσότερα