Σήματα (Signals) Προγραμματισμός II 1

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

Download "Σήματα (Signals) Προγραμματισμός II 1"

Transcript

1 Σήματα (Signals) Προγραμματισμός II 1 lalis@inf.uth.gr

2 Τι είναι ένα σήμα; Το σήμα είναι μια ειδοποίηση Μπορεί να προκύψει για διάφορους λόγους Π.χ., εξαίρεση αριθμητικής πράξης, τερματισμός διεργασίας παιδιού, ρητή αποστολή σήματος από άλλη διεργασία Τα σήματα έχουν ένα αναγνωριστικό που φανερώνει τον λόγο για τον οποίο δημιουργήθηκαν Ένα σήμα δεν περιέχει (επιπλέον) πληροφορία είναι ένα μήνυμα χωρίς περιεχόμενο Προγραμματισμός II 2 lalis@inf.uth.gr

3 Σήματα σφάλματος SIGFPE: εσφαλμένη αριθμητική λειτουργία (Ε) SIGILL: άκυρη εντολή (Ε) SIGSYS: άκυρη κλήση συστήματος (Ε) SIGBUS: άκυρη διεύθυνση σε επίπεδο υλικού (Ε) SIGSEGV: άκυρη αναφορά μνήμης (Ε) SIGPIPE: γράψιμο σε αγωγό χωρίς αναγνώστη (Τ) Αυτόματες/προεπιλεγμένες ενέργειες (αν δεν γίνει χειρισμός από το πρόγραμμα): Π: παράβλεψη Τ: τερματισμός Ε: Τ + άλλες ενέργειες, π.χ., δημιουργία core dump Α: αναστολή/σταμάτημα εκτέλεσης Σ: συνέχιση εκτέλεσης (μετά από αναστολή) Προγραμματισμός II 3 lalis@inf.uth.gr

4 Σήματα παραγόμενα με ρητό τρόπο SIGINT: διακοπή από το πληκτρολόγιο (Τ) SIGQUIT: εγκατάλειψη από το πληκτρολόγιο (Ε) SIGHUP: κλείσιμο γραμμής/τερματικού (Τ) SIGTERM: τερματισμός συνθετικά (Τ) SIGKILL: θανάτωση συνθετικά (Τ) SIGUSR1/2: σήματα εφαρμογής (Τ) Αυτόματες/προεπιλεγμένες ενέργειες (αν δεν γίνει χειρισμός από το πρόγραμμα): Π: παράβλεψη Τ: τερματισμός Ε: Τ + άλλες ενέργειες, π.χ., δημιουργία core dump A: αναστολή εκτέλεσης Σ: συνέχιση εκτέλεσης (μετά από αναστολή) Προγραμματισμός II 4 lalis@inf.uth.gr

5 Σήματα ελέγχου κατάστασης διεργασίας SIGCHLD: αλλαγή κατάστασης παιδιού (Π) SIGSTOP: αναστολή εκτέλεσης διεργασίας (Α) SIGCONT: συνέχιση εκτέλεσης διεργασίας (Σ) SIGΤSTP: αναστολή εκτέλεση από τερματικό (Α) SIGTTIN: ανάγνωση από το παρασκήνιο (Α) SIGTTOU: γράψιμο από το παρασκήνιο (Α) Αυτόματες/προεπιλεγμένες ενέργειες (αν δεν γίνει χειρισμός από το πρόγραμμα): Π: παράβλεψη Τ: τερματισμός Ε: Τ + άλλες ενέργειες, π.χ., δημιουργία core dump A: αναστολή εκτέλεσης Σ: συνέχιση εκτέλεσης (μετά από αναστολή) Προγραμματισμός II 5 lalis@inf.uth.gr

6 Σύγχρονα και ασύγχρονα σήματα Σύγχρονα σήματα: προκύπτουν ως αποτέλεσμα μιας ενέργειας που επιχείρησε η ίδια η διεργασία Π.χ., εξαίρεση αριθμητικής πράξης (SIGFPE), αναφορά σε άκυρη θέση μνήμης (SIGSEGV), άκυρη εντολή μηχανής (SIGILL) Ασύγχρονα σήματα: προκύπτουν χωρίς να τα έχει προκαλέσει η ίδια η διεργασία με άμεσο τρόπο Π.χ., διακοπή εκτέλεσης (SIGINT), τερματισμός ή αλλαγή κατάστασης διεργασίας παιδιού (SIGCHLD), αναστολή διεργασίας (SIGSTOP) Προγραμματισμός II 6 lalis@inf.uth.gr

7 Διακοπή εκτέλεσης διεργασίας Τα σήματα διακόπτουν την εκτέλεση της διεργασίας Τα σύγχρονα σήματα διακόπτουν την εκτέλεση ακριβώς στο σημείο του προγράμματος όπου εκτελέστηκε η εντολή που προκάλεσε το σήμα Τα ασύγχρονα σήματα μπορεί να διακόψουν την εκτέλεση ανά πάσα στιγμή Δεν γνωρίζουμε το πόσες φορές μια διεργασία θα λάβει ένα ασύγχρονο σήμα, ούτε γνωρίζουμε το σημείο της εκτέλεσης όπου θα βρίσκεται μια διεργασία όταν λάβει ένα ασύγχρονο σήμα Προγραμματισμός II 7 lalis@inf.uth.gr

8 χρόνος (α) (β) (γ) Προγραμματισμός II 8 lalis@inf.uth.gr

9 Κύκλος ζωής ενός σήματος Γέννηση: δημιουργία/αποστολή σήματος Μπλοκάρισμα: αναστολή παράδοσης/χειρισμού του σήματος Παράδοση/παραλαβή: χρονική στιγμή που γίνεται επεξεργασία του σήματος στο πλαίσιο της διεργασίας Χειρισμός: διαδικασία επεξεργασίας του σήματος Προγραμματισμός II 9 lalis@inf.uth.gr

10 Χειρισμός σήματος Το λειτουργικό ορίζει αυτόματες/προεπιλεγμένες ενέργειες χειρισμού για κάθε τύπο σήματος παράβλεψη σήματος (π.χ., για SIGCHLD) αναστολή εκτέλεσης διεργασίας (π.χ., για SIGSTOP) συνέχεια εκτέλεσης διεργασίας (π.χ., για SIGCONT) τερματισμός διεργασίας (π.χ., για SIGPIPE) Ένα πρόγραμμα μπορεί να «παγιδέψει» ένα σήμα, και να εισάγει «δικές του» ενέργειες χειρισμού αυτόματη/προεπιλεγμένη ενέργεια (SIG_DFL) παράβλεψη σήματος (SIG_IGN) ρουτίνα χειρισμού σήματος εφαρμογής Προγραμματισμός II 10

11 signal issued signal pending signal delivery automated handling (OS) explicit handling (user) terminate process ignore signal signal handler Προγραμματισμός ΙΙ 11

12 /* X signal handler */ /* Y signal handler */ /* main */ signal X signal Y Προγραμματισμός ΙΙ 12 lalis@inf.uth.gr

13 Καθορισμός ενεργειών χειρισμού σήματος int sigaction(int signum, const struct sigaction *act, struct sigaction *oact); Καθορίζει ενέργειες χειρισμού για το σήμα signum Οι νέες ενέργειες προσδιορίζονται στην δομή act Οι παλιές ενέργειες χειρισμού αποθηκεύονται στην δομή oact (για μπορεί να γίνει επαναφορά της προηγούμενης κατάστασης) Μπορεί να καθοριστούν διαφορετικές ενέργειες για κάθε ξεχωριστό σήμα Οι ενέργειες για SIGKILL και SIGSTOP δεν αλλάζουν Προγραμματισμός II 13

14 Δομή ενεργειών χειρισμού σήματος struct sigaction { void (*sa_handler)(int); sigset_t sa_mask; int sa_flags; void (*sa_sigaction)(int,siginfo_t*,void *); ; Στο sa_handler ανατίθεται ο χειριστής σήματος (SIG_IGN ή SIG_DFL ή δείκτης σε συνάρτηση) το sa_sigaction είναι για σήματα πραγματικού χρόνου Το sa_mask καθορίζει τα σήματα που μπλοκάρονται όταν εκτελείται ο χειριστής σήματος (πλέον του ίδιου του σήματος και όσων είναι ήδη μπλοκαρισμένα) Το sa_flags καθορίζει επιπλέον ιδιότητες π.χ. SA_RESTART για επανεκτέλεση κλήσεων συστήματος Προγραμματισμός II 14 lalis@inf.uth.gr

15 int main(int argc, char *argv[]) { struct sigaction act = { {0 ; act.sa_handler = SIG_IGN; // ignore signal sigaction(sigint,&act,null); while (1) { printf("going to sleep\n"); sleep(5); Προγραμματισμός ΙΙ 15 lalis@inf.uth.gr

16 static void handler(int sig) { write(stdout_fileno,"got SIGINT\n",11); int main(int argc, char *argv[]) { struct sigaction act = { {0 ; act.sa_handler = handler; sigaction(sigint,&act,null); while (1) { printf("going to sleep\n"); sleep(5); Προγραμματισμός ΙΙ 16 lalis@inf.uth.gr

17 Αναμονή παραλαβής/χειρισμού σήματος int sleep(int secs); Μπλοκάρει μέχρι να γίνει χειρισμός ενός σήματος ή μετά την πάροδο του χρονικού διαστήματος secs επιστρέφει 0 αν η διεργασία δεν διακόπηκε από σήμα διαφορετικά, το χρονικό διάστημα που απέμεινε int pause(); Μπλοκάρει μέχρι να γίνει χειρισμός ενός σήματος επιστρέφει -1 με την errno ίση με EINTR Οι pause και sleep επιστρέφουν μόνο για σήματα που χειρίζεται ρητά το πρόγραμμα Προγραμματισμός II 17 lalis@inf.uth.gr

18 static void handler(int sig) { write(stdout_fileno,"got SIGINT\n",11); int main(int argc, char *argv[]) { struct sigaction act = { {0 ; act.sa_handler = handler; sigaction(sigint,&act,null); while (1) { printf("going to pause\n"); pause(); Προγραμματισμός ΙΙ 18 lalis@inf.uth.gr

19 Διακοπή κλήσεων συστήματος H παράδοση και χειρισμός ενός ασύγχρονου σήματος μπορεί να διακόψει κάποιες κλήσεις συστήματος Συνήθως, αυτές που μπλοκάρουν την διεργασία Εφόσον γίνει ρητός χειρισμός του σήματος από το πρόγραμμα, η κλήση συστήματος που διακόπηκε αποτυγχάνει με την errno να έχει τιμή EINTR όπως ακριβώς και η pause Αν αυτό δεν είναι επιθυμητό, χρησιμοποιούμε την siginterrupt ή την επιλογή SA_RESTART Προγραμματισμός II 19 lalis@inf.uth.gr

20 static void handler(int sig) { write(stdout_fileno,"got SIGINT\n",11); int main(int argc, char *argv[]) { int n; char s[ν]; struct sigaction act = { {0 ; act.sa_handler = handler; act.sa_flags = SA_RESTART; sigaction(sigint,&act,null); while (1) { printf("reading from stdin\n"); n = read(stdin_fileno,s,ν-1); if (n > 0) { s[n] = '\0'; printf("%s\n",s); else if (n < 0) { perror("read"); else { printf("end of input\n"); break; return(0); Προγραμματισμός ΙΙ 20 lalis@inf.uth.gr

21 Σχεδιασμός χειριστών σημάτων Ο χειριστής ενός ασύγχρονου σήματος μπορεί να εκτελεστεί ανά πάσα στιγμή, εμβόλιμα με τον «συμβατικό» κώδικα του προγράμματος Ένας χειριστής σήματος μπορεί να διακοπεί με παρόμοιο τρόπο, για να εκτελεστεί ένας άλλος χειριστής σήματος βλέπε sa_mask Υπάρχουν (λίγες) συγκεκριμένες λειτουργίες που είναι ασφαλείς για (ασύγχρονα) σήματα μπορούν να χρησιμοποιηθούν μέσα σε χειριστές σημάτων Αν ένας χειριστής σήματος χρησιμοποιεί καθολικές μεταβλητές, τότε αυτές πρέπει να δηλώνονται ως volatile sig_atomic_t διαφορετικά μπορεί να προκύψουν προβλήματα ασυνέπειας Προγραμματισμός II 21

22 Μπλοκάρισμα σημάτων Η παράδοση και ο αντίστοιχος χειρισμός σημάτων μπορεί να είναι ανεπιθύμητα σε κάποιες περιπτώσεις Τα σήματα μπορεί να μπλοκαριστούν Μέσω της μάσκας μπλοκαρίσματος Τα μπλοκαρισμένα σήματα δεν παραδίδονται στην διεργασία για χειρισμό, αλλά παραμένουν σε εκκρεμότητα μέχρι να ξεμπλοκαριστούν Ο χειρισμός ενός σήματος που βρίσκεται σε εκκρεμότητα γίνεται όταν αυτό ξεμπλοκαριστεί Τα SIGKILL και SIGSTOP δεν μπλοκάρονται Προγραμματισμός II 22

23 Λειτουργίες συνόλων σημάτων sigset_t σύνολο σημάτων int sigemptyset(sigset_t *set) αρχικοποίηση κενού συνόλου int sigfillset(sigset_t *set) αρχικοποίηση γεμάτου συνόλου int sigaddset(sigset_t *set, int sig) προσθήκη σήματος στο σύνολο int sigdelset(sigset_t *set, int sig) αφαίρεση σήματος από το σύνολο int sigismember(const sigset_t *set, int sig) έλεγχος για το αν το σήμα ανήκει στο σύνολο Προγραμματισμός II 23

24 Καθορισμός μάσκας μπλοκαρίσματος int sigprocmask(int how, const sigset_t *set, sigset_t *oset); Η how προσδιορίζει τον τρόπο αλλαγής της μάσκας μπλοκαρίσματος, με βάση το σύνολο σημάτων set SIG_BLOCK: μπλοκάρισμα των σημάτων του set SIG_UNBLOCK: ξεμπλοκάρισμα των σημάτων του set SIG_SETMASK: αντικατάσταση της μάσκας με το set Στο oset αποθηκεύεται η παλιά τιμή της μάσκας μπλοκαρίσματος για να μπορεί να αποκατασταθεί Προγραμματισμός II 24

25 Εξέταση εκκρεμών σημάτων int sigpending(sigset_t *set); Αποθηκεύει στο set τα σήματα που έχουν σταλεί στην διεργασία και βρίσκονται σε εκκρεμότητα Επιστρέφεται πληροφορία για το αν ένα σήμα εκκρεμεί, όχι για το πόσες φορές αυτό έχει σταλεί Το λειτουργικό δεν καταγράφει το πόσες φορές έχει σταλεί ένα μπλοκαρισμένο σήμα, ούτε γίνεται επανειλημμένος χειρισμός του σήματος όταν αυτό ξεμπλοκαριστεί Προγραμματισμός II 25

26 static void handler(int sig) { write(stdout_fileno,"got SIGINT\n",11); int main(int argc, char *argv[]) { sigset_t s1,s2; struct sigaction act = { {0 ; act.sa_handler = handler; sigaction(sigint,&act,null); sigemptyset(&s1); sigaddset(&s1,sigint); while (1) { sigprocmask(sig_block,&s1,null); sleep(5); sigpending(&s2); if (sigismember(&s2,sigint)) { printf("sigint is pending\n"); sigprocmask(sig_unblock,&s1,null); sleep(5); Προγραμματισμός ΙΙ 26 lalis@inf.uth.gr

27 Μπλοκάρισμα και παράβλεψη σήματος Το μπλοκάρισμα ενός σήματος έχει νόημα μόνο αν το πρόγραμμα επιθυμεί «τελικά» να παραλάβει και να χειριστεί το σήμα (ξεμπλοκάροντας το) Αν η παραλαβή και ο χειρισμός ενός σήματος είναι γενικότερα ανεπιθύμητα, είναι συνήθως καλύτερο και απλούστερο το σήμα να παραβλεφθεί εντελώς Αυτό μπορεί να γίνει εγκαθιστώντας/καθορίζοντας τον ειδικό χειριστή σήματος SIG_IGN Προγραμματισμός II 27

28 Αλλαγή μάσκας και αναμονή σήματος int sigsuspend(const sigset_t *sigmask); Αντικαθιστά την μάσκα μπλοκαρίσματος με το σύνολο σημάτων sigmask και μπλοκάρει μέχρι να παραληφθεί ένα μη μπλοκαρισμένο σήμα για το οποίο υπάρχει ρητός χειρισμός από το πρόγραμμα Όταν παραληφθεί ένα σήμα, αφού γίνει χειρισμός του σήματος, αποκαθίσταται η παλιά μάσκα, και η κλήση επιστρέφει με -1 και errno ίση με EINTR Προγραμματισμός II 28

29 Αναμονή για εκκρεμή σήματα int sigwait(const sigset_t *set, int *signum); Μπλοκάρει μέχρι κάποιο από τα σήματα στο set βρεθεί σε εκκρεμότητα Το εκκρεμές σήμα γίνεται αποδεκτό και αποθηκεύεται στην signum Παρότι δεν γίνεται χειρισμός του σήματος, το σήμα που επιστρέφεται θεωρείται παραδομένο Αν υπάρχουν περισσότερα εκκρεμή σήματα, επιστρέφεται ένα από αυτά (απροσδιόριστη επιλογή) Η sigwait επιτρέπει τον ελεγχόμενο χειρισμό σημάτων μέσα από τον συμβατικό κώδικα, χωρίς την εγκατάσταση χειριστών σημάτων Προγραμματισμός II 29

30 int main(int argc, char *argv[]) { int sig; sigset_t s; sigemptyset(&s); sigaddset(&s,sigint); sigprocmask(sig_block,&s,null); printf("blocked SIGINT\n"); while (1) { sigwait(&s,&sig); printf("got signal %d\n",sig); Προγραμματισμός ΙΙ 30 lalis@inf.uth.gr

31 Σήματα και fork / exec Η διεργασία παιδί που δημιουργείται μέσω fork κληρονομεί τους χειρισμούς σημάτων του γονέα κληρονομεί την μάσκα μπλοκαρίσματος δεν κληρονομεί τα εκκρεμή σήματα του γονιού (αρχίζει την εκτέλεση της χωρίς εκκρεμή σήματα) Όταν μια διεργασία αλλάζει κώδικα μέσω exec για τα σήματα που η καθορισμένη ενέργεια είναι SIG_DFL ή SIG_IGN, αυτή παραμένει (το SIGCHLD μπορεί να γίνει SIG_DFL από SIG_IGN, ανάλογα με την υλοποίηση) τα σήματα με χειριστή γυρίζουν σε SIG_DFL γιατί; η μάσκα μπλοκαρίσματος παραμένει ως έχει τα εκκρεμή σήματα παραμένουν ως έχουν Προγραμματισμός II 31 lalis@inf.uth.gr

32 Παραγωγή/αποστολή σήματος int kill(pid_t pid, int signum); pid > 0: στέλνει το σήμα signum στην διεργασία με αναγνωριστικό pid pid == 0: στέλνει το σήμα signum στην ομάδα διεργασιών το αναγνωριστικό της οποίας είναι το ίδιο με το αναγνωριστικό ομάδας του αποστολέα pid <-1: στέλνει το σήμα signum στην ομάδα διεργασιών το αναγνωριστικό της οποίας είναι ίσο με την απόλυτη τιμή του pid pid == -1: στέλνει το σήμα signum σε όλες τις διεργασίες για τις οποίες έχει άδεια ο αποστολέας Προγραμματισμός II 32

33 Συγχρονισμός διεργασιών με σήματα Τα σήματα μπορεί να χρησιμοποιηθούν για να υλοποιηθεί συγχρονισμός μεταξύ διεργασιών Κλασική περίπτωση: «ασύμμετρο ραντεβού» Η διεργασία P2 πρέπει να περιμένει προτού συνεχίσει την εκτέλεση της, μέχρι η διεργασία P1 να ολοκληρώσει μια διαδικασία (τα αποτελέσματα της οποίας πιθανώς επηρεάζουν την διεργασία P2) Υλοποίηση με σήματα: η P1 στέλνει σήμα στην P2, και η P2 περιμένει να λάβει το σήμα για να συνεχίσει την εκτέλεση της Προγραμματισμός II 33

34 P1 /* code A */ /*rendez-vous point; other party may proceed */ signal P2 /* code B */ /*rendez-vous point; wait for other party to arrive */ η P1 ειδοποιεί την P2 μέσω σήματος όταν φτάσει σε αυτό το σημείο η P2 πρέπει να περιμένει σε αυτό το σημείο μέχρι να παραλάβει το σήμα Προγραμματισμός ΙΙ 34 lalis@inf.uth.gr

35 static volatile sig_atomic_t gotsig = -1; static void handler(int sig) { gotsig = sig; int main(int argc, char *argv[]) { pid_t pid; struct sigaction act = { {0 ; if (!(pid=fork())) { act.sa_handler = handler; sigaction(sigusr1,&act,null); while (gotsig == -1) { pause(); // wait for SIGUSR1 printf("this should print second\n"); return(0); τι γίνεται αν το σήμα φτάσει σε αυτό το σημείο; printf("this should print first\n"); kill(pid,sigusr1); return(0); Προγραμματισμός ΙΙ 35 lalis@inf.uth.gr

36 int main(int argc, char *argv[]) { pid_t pid; struct sigaction act = { {0 ; sigset_t s; sigemptyset(&s); sigaddset(&s,sigusr1); sigprocmask(sig_block,&s,null); if (!(pid=fork())) { act.sa_handler = handler; sigaction(sigusr1,&act,null); τι γίνεται αν το σήμα sigprocmask(sig_unblock,&s,null); φτάσει σε αυτό το σημείο; while (gotsig == -1) { pause(); // wait for SIGUSR1 printf("this should print second\n"); return(0); printf("this should print first\n"); kill(pid,sigusr1); return(0); Προγραμματισμός ΙΙ 36 lalis@inf.uth.gr

37 int main(int argc, char *argv[]) { pid_t pid; struct sigaction act = { {0 ; sigset_t s,s2; sigemptyset(&s); sigaddset(&s,sigusr1); sigprocmask(sig_block,&s,null); if (!(pid=fork())) { act.sa_handler = handler; sigaction(sigusr1,&act,null); sigfillset(&s2); sigdelset(&s2,sigusr1); sigsuspend(&s2); // wait for SIGUSR1 printf("this should print second\n"); return(0); printf("this should print first\n"); kill(pid,sigusr1); return(0); Προγραμματισμός ΙΙ 37 lalis@inf.uth.gr

38 int main(int argc, char *argv[]) { pid_t pid; sigset_t s; int signum; sigemptyset(&s); sigaddset(&s,sigusr1); sigprocmask(sig_block,&s,null); if (!(pid=fork())) { sigwait(&s,&signum); // wait for SIGUSR1 printf("this should print second\n"); return(0); printf("this should print first\n"); kill(pid,sigusr1); return(0); Προγραμματισμός ΙΙ 38 lalis@inf.uth.gr

39 Περισσότερα για την waitpid Η waitpid μπορεί να χρησιμοποιηθεί και για την αναμονή για αλλαγή κατάστασης εκτέλεσης διεργασιών μέσα από αντίστοιχα options WUNTRACED/WCONTINUED: σταμάτημα/ξεκίνημα Αντίστοιχα, μπορεί να γίνει έλεγχος της κατάστασης που αποθηκεύεται στην διεύθυνση status WIFSTOPPED(): true αν η θυγατρική διεργασία ανέστειλε την εκτέλεση της λόγω σήματος WSTOPSIG(): το σήμα που οδήγησε στην αναστολή της εκτέλεσης της θυγατρικής διεργασίας WIFCONTINUED(): true αν η θυγατρική διεργασία συνεχίζει την εκτέλεση της λόγω SIGCONT Προγραμματισμός II 39

40 int main(int argc, char *argv[]) { int pid,status,i; pid = fork(); if (pid == 0) { for (i=0; i<20; i++) { printf("going to sleep\n"); sleep(5); return(42); while (1) { waitpid(pid,&status,wuntraced WCONTINUED); if (WIFEXITED(status)) { printf("returned %d\n",wexitstatus(status)); break; else if (WIFSIGNALED(status)) { printf("terminated %d\n",wtermsig(status)); break; else if (WIFSTOPPED(status)) { printf("stopped %d\n",wstopsig(status)); else if (WIFCONTINUED(status)) { printf("continued\n"); return(0); Προγραμματισμός ΙΙ 40 lalis@inf.uth.gr

41 Ξυπνητήρια int setitimer(int which, const struct itimerval *nval, struct itimerval *oval); ITIMER_REAL: μετράει τον πραγματικό χρόνο, στην λήξη στέλνεται το σήμα SIGALRM ITIMER_VIRTUAL: μετράει τον χρόνο εκτέλεσης της διεργασίας, στην λήξη στέλνεται SIGVTALRM ITIMER_PROF: μετράει τον χρόνο εκτέλεσης της διεργασίας και τον χρόνο εκτέλεσης του συστήματος για λογαριασμό της διεργασίας, στην λήξη στέλνεται το σήμα SIGPROF Στο oval επιστρέφονται οι τρέχουσες ρυθμίσεις Προγραμματισμός II 41

42 Δομή χρονισμού ξυπνητηριού struct itimerval { struct timeval it_interval; /*nxt val*/ struct timeval it_value; /*cur val*/ ; struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ ; Το πεδίο it_value καθορίζει/επιστρέφει τον χρόνο που απομένει, και το πεδίο it_interval την τιμή επαναφοράς για τις επόμενες επαναλήψεις Προγραμματισμός II 42 lalis@inf.uth.gr

43 static void handler(int sig) { write(stdout_fileno,"got SIGALRM\n",12); int main(int argc, char *argv[]) { int n; char s[n]; struct sigaction act = { {0 ; struct itimerval t = { {0 ; act.sa_handler = handler; sigaction(sigalrm,&act,null); t.it_interval.tv_sec=3; t.it_interval.tv_usec=0; t.it_value.tv_sec=5; t.it_value.tv_usec=0; setitimer(itimer_real,&t,null); while (1) { n = read(stdin_fileno,s,n-1); if (n > 0) { s[n] = '\0'; printf("read: %s\n",s); else if (n == 0) { printf("end of input\n"); break; else if (errno!= EINTR) { perror("read"); break; else { printf("interrupted, retrying\n"); return(0); Προγραμματισμός ΙΙ 43 lalis@inf.uth.gr

Σήματα (Signals) Προγραμματισμός II 1

Σήματα (Signals) Προγραμματισμός II 1 Σήματα (Signals) Προγραμματισμός II 1 lalis@inf.uth.gr Τι είναι ένα σήμα; Το σήμα είναι μια ειδοποίηση που στέλνεται στην διεργασία που εκτελεί ένα πρόγραμμα Μπορεί να προκύψει για διάφορους λόγους, π.χ.

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

Σήματα (Signals) Προγραμματισμός II 1

Σήματα (Signals) Προγραμματισμός II 1 Σήματα (Signals) Προγραμματισμός II 1 lalis@inf.uth.gr Τι είναι ένα σήμα; Το σήμα είναι μια ειδοποίηση που στέλνεται στην διεργασία που εκτελεί ένα πρόγραμμα Μπορεί να προκύψει για διάφορους λόγους, π.χ.

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

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

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

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

Δίκτυα Επικοινωνιών ΙΙ: 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, μη αξιόπιστο,

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

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

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

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

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

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

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

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

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

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

Μη ανασταλτική/πολυπλεξία Ε/Ε (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 Μπλοκάρισμα διεργασίας Μια διεργασία μπλοκάρει όταν καλεί λειτουργίες συστήματος που δεν μπορεί να ολοκληρωθούν

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

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

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

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

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

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

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

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

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

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

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

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

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

Παράδειγµα χρήσης perror, errno (πρόγραµµα errors_demo.c)

Παράδειγµα χρήσης perror, errno (πρόγραµµα errors_demo.c) Χειρισµός Λαθών 1 Παράδειγµα χρήσης perror, errno (πρόγραµµα errors_demo.c) 2 Είσοδος/Έξοδος Χαµηλού Επιπέδου 3 Είσοδος/Έξοδος Χαµηλού Επιπέδου (συν.) Αυτό αργότερα στο εξάµηνο 4 Κλήση συστήµατος open

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αγωγοί/Σωλήνες (Pipes) Προγραμματισμός II 1

Αγωγοί/Σωλήνες (Pipes) Προγραμματισμός II 1 Αγωγοί/Σωλήνες (Pipes) Προγραμματισμός II 1 lalis@inf.uth.gr Τι είναι ένας αγωγός; Μηχανισμός/συσκευή επικοινωνίας διεργασιών Μετάδοση μιας ροής από bytes (μονής κατεύθυνσης) First-in-first-out (FIFO):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1 Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων Προγραμματισμός II 1 lalis@inf.uth.gr Βιβλιοθήκες Τμήματα λογισμικού ευρύτερης χρησιμότητας που έχουν σχεδιαστεί με σκοπό να διευκολύνουν την ανάπτυξη πολλών διαφορετικών

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ουρές Μηνυμάτων (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 Ουρά μηνυμάτων Αποθήκη μηνυμάτων στην μνήμη του λειτουργικού Περιορισμένος αριθμός / όγκος μηνυμάτων Κάθε μήνυμα είναι

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

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

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

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

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

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

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

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

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

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

Κλείδωμα αρχείων (file locking) Προγραμματισμός II 1

Κλείδωμα αρχείων (file locking) Προγραμματισμός II 1 Κλείδωμα αρχείων (file locking) Προγραμματισμός II 1 lalis@inf.uth.gr Κλείδωμα αρχείων Οι διεργασίες που προσπελάζουν ένα αρχείο μέσω ξεχωριστών περιγραφέων, μπορούν να γράψουν / διαβάσουν τα περιεχόμενα

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

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

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

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

Κλείδωμα αρχείων (file locking) Προγραμματισμός II 1

Κλείδωμα αρχείων (file locking) Προγραμματισμός II 1 Κλείδωμα αρχείων (file locking) Προγραμματισμός II 1 lalis@inf.uth.gr Κλείδωμα αρχείων Οι διεργασίες που προσπελάζουν ένα αρχείο μέσω ξεχωριστών περιγραφέων, μπορούν να γράψουν / διαβάσουν τα περιεχόμενα

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

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

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

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

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

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

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

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

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

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

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

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

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

Υλοποίηση Σηματοφόρων

Υλοποίηση Σηματοφόρων Υλοποίηση Σηματοφόρων 1 lalis@inf.uth.gr Υλοποίηση σε επίπεδο συστήματος Εσωτερική κατάσταση: Ένας ακέραιος για την αποθήκευση της τιμής του σηματοφόρου Μια ουρά αναμονής που τοποθετείται ένα νήμα όταν

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

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

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

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

Προγραμματισμός Ι (HY120)

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY120) #6 εκτέλεση σε επανάληψη 1 Σπύρος Λάλης Εκτέλεση σε επανάληψη: while while () lexpr body true false Όσο η λογική συνθήκη επανάληψης lexpr αποτιμάται σε μια τιμή

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

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

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

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

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

Προγραμματισμός συστημάτων UNIX/POSIX. Χρονομέτρηση, καθυστέρηση και ανάλυση επιδόσεων

Προγραμματισμός συστημάτων UNIX/POSIX. Χρονομέτρηση, καθυστέρηση και ανάλυση επιδόσεων Προγραμματισμός συστημάτων UNIX/POSIX Χρονομέτρηση, καθυστέρηση και ανάλυση επιδόσεων Ανάγκη Πάρα πολύ συχνά υπάρχει η ανάγκη να χρονομετρήσουμε κάτι, π.χ. Πόσο χρειάστηκε ένα πρόγραμμα για να εκτελεστεί

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

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

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

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

Προγραμματισμός Ι (HY120)

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY120) #5 εκτέλεση υπό συνθήκη 1 Σπύρος Λάλης Ροή εκτέλεσης Μέχρι στιγμής η ροή εκτέλεσης του κώδικα είναι αυστηρά γραμμική Οι εντολές που γράφουμε στον κώδικα μας εκτελούνται μια προς

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

1. Εισαγωγή. Λειτουργικά Συστήματα Η/Υ. Διεργασίες. Ορισμός ΚΕΦΑΛΑΙΟ 3 - ΔΙΕΡΓΑΣΙΕΣ. Κεφάλαιο 3 «Διεργασίες»

1. Εισαγωγή. Λειτουργικά Συστήματα Η/Υ. Διεργασίες. Ορισμός ΚΕΦΑΛΑΙΟ 3 - ΔΙΕΡΓΑΣΙΕΣ. Κεφάλαιο 3 «Διεργασίες» 1. Εισαγωγή Λειτουργικά Συστήματα Η/Υ Κεφάλαιο 3 «Διεργασίες» Διδάσκων: Δ Λιαροκάπης Διαφάνειες: Π. Χατζηδούκας Η έννοια της διεργασίας (process) είναι θεμελιώδης για την κατανόηση του τρόπου με τον οποίο

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

Κεφάλαιο 11 Διαχείριση Διεργασιών

Κεφάλαιο 11 Διαχείριση Διεργασιών Κεφάλαιο 11 Διαχείριση Διεργασιών Κάθε πρόγραμμα που τρέχει λέγεται διεργασία. Οι διεργασίες ποικίλουν από πράγματα σαν το X παραθυρικό σύστημα εως προγράμματα συστήματος (δαίμονες) που ξεκινούν με την

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

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

Λειτουργικά συστήματα πραγματικού χρόνου

Λειτουργικά συστήματα πραγματικού χρόνου Λειτουργικά συστήματα πραγματικού χρόνου Τι είναι λειτουργικό σύστημα πραγματικού χρόνου; Λειτουργικό Σύστημα Πραγματικού Χρόνου (ΛΣΠΧ) είναι ένα λειτουργικό σύστημα που προορίζεται για εφαρμογές πραγματικού

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

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

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Βιβλιοθήκη stdio. Προγραμματισμός II 1 Βιβλιοθήκη 1 lalis@inf.uth.gr Δεδομένα και ερμηνεία (ξανά) Τα δεδομένα στον Η/Υ έχουν δυαδική μορφή (bytes) Η ερμηνεία των bytes εξαρτάται από το πρόγραμμα που παράγει/καταναλώνει τα δεδομένα Μια δημοφιλής

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

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

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

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

Αντικειµενοστρεφής Προγραµµατισµός

Αντικειµενοστρεφής Προγραµµατισµός 16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη

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

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Βιβλιοθήκη stdio. Προγραμματισμός II 1 Βιβλιοθήκη 1 lalis@inf.uth.gr Σύνοψη Ορίστηκε από τον Dennis Ritchie το 1975 Μέρος του προτύπου ANSI C Λειτουργίες εισόδου/εξόδου υψηλού επίπεδου και ανεξάρτητες λειτουργικού συστήματος Υποστήριξη για

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

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1 Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής

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

Μεθόδων Επίλυσης Προβλημάτων

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 14 Αλφαριθμητικές Σειρές Χαρακτήρων (Strings)

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

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΣΥΝΑΡΤΗΣΕΙΣ ΣΤΗ C (1/3) +- Στη C χρησιμοποιούμε συχνα τις συναρτήσεις (functions),

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

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 6: Δομές Ελέγχου Δομές ελέγχου 2 Με τις εντολές εισόδου, εξόδου και επεξεργασίας των τιμών των μεταβλητών μπορεί να γραφτούν απλά προγράμματα. Οι δυνατότητες είναι περιορισμένες.

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

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

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

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

Διασυνδεδεμένες Δομές. Λίστες. Προγραμματισμός II 1

Διασυνδεδεμένες Δομές. Λίστες. Προγραμματισμός II 1 Διασυνδεδεμένες Δομές Λίστες Προγραμματισμός II 1 lalis@inf.uth.gr Διασυνδεδεμένες δομές Η μνήμη ενός πίνακα δεσμεύεται συνεχόμενα η πρόσβαση στο i-οστό στοιχείο είναι άμεση καθώς η διεύθυνση του είναι

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

Διάλεξη 18η: Διαχείρηση Αρχείων

Διάλεξη 18η: Διαχείρηση Αρχείων Διάλεξη 18η: Διαχείρηση Αρχείων Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Πρατικάκης (CSD) Αρχεία CS100, 2015-2016 1 / 24 Η βιβλιοθήκη Εισόδου/Εξόδου Στο stdioh

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

Η βασική συνάρτηση προγράμματος main()

Η βασική συνάρτηση προγράμματος main() Η βασική συνάρτηση προγράμματος main() HEADER FILES main(){ ΔΗΛΩΣΕΙΣ ΜΕΤΑΒΛΗΤΩΝ ΕΝΤΟΛΕΣ (σειριακές, επιλογής ή επανάληψης) ΕΠΙΣΤΡΕΦΟΜΕΝΟΣ ΤΥΠΟΣ (return 0;) Συναρτήσεις Η συνάρτηση είναι ένα υποπρόγραμμα

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

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. Ερωτήσεις προόδου C Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. #include // δίνει οδηγία στον compiler να // συμπεριλάβει την βιβλιοθήκη stdio int

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

$./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 Εισαγωγή στην Εργασία: Ο στόχος της εργασίας αυτής είναι να εξοικειωθείτε με την δημιουργία

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

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές. οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Παράδειγµα Πρόβληµα: Να γράψετε

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

Υπολογισμός - Εντολές Επανάληψης

Υπολογισμός - Εντολές Επανάληψης Προγραμματισμός Η/Υ Ι Υπολογισμός - Εντολές Επανάληψης ΕΛΕΥΘΕΡΙΟΣ ΚΟΣΜΑΣ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2018-2019 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. 1 Περίληψη Σήμερα... θα συνεχίσουμε τη συζήτησή μας για τα βασικά στοιχεία

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

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) ΙΙΙ 1 lalis@inf.uth.gr Ταυτόχρονη εκτέλεση Ο προγραμματιστής δεν ελέγχει (άμεσα) την εκτέλεση/εναλλαγή των νημάτων Δεν γνωρίζει πότε θα αρχίσει

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

Ενδεικτικές λύσεις και στατιστικά

Ενδεικτικές λύσεις και στατιστικά Προγραμματισμός 1 Σύντομο Quiz 25/9/9 Ενδεικτικές λύσεις και στατιστικά Ερώτηση 1: Γράψτε παρακάτω συνάρτηση η οποία δέχεται ως παραμέτρους ένα string και ένα χαρακτήρα και επιστρέφει τον αριθμό των εμφανίσεων

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

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

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

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

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) ΙΙΙ 1 lalis@inf.uth.gr Υποθέσεις εργασίας Νήματα/διεργασίες με κοινή μνήμη Αυτόματη διακοπή/εναλλαγή νημάτων/διεργασιών (π.χ. πάνω από 1 CPU

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

Εντοπισμός τερματισμού. Κατανεμημένα Συστήματα 1

Εντοπισμός τερματισμού. Κατανεμημένα Συστήματα 1 Εντοπισμός τερματισμού Κατανεμημένα Συστήματα 1 lalis@inf.uth.gr Μοντέλο συστήματος Μια ομάδα διεργασιών εκτελεί έναν υπολογισμό Κατάσταση διεργασίας: ενεργητική ή παθητική (ανάλογα με το αν εκτελεί μέρος

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

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου Σκοπός και περίγραμμα της Ενότητας 4 Σκοπός της παρουσίασης Να μελετήσουμε τις συναρτήσεις που ελέγχουν την ροή και την εκτέλεση ενός προγράμματος Σύνοψη

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

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις Ενώσεις δεδομένων (union) τι και γιατί Συσκευές με μικρή μνήμη => ανάγκη εξοικονόμησης πόρων Παρατήρηση: αχρησιμοποίητη μνήμη. Έστω

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

Επικοινωνία με μηνύματα. Κατανεμημένα Συστήματα 1

Επικοινωνία με μηνύματα. Κατανεμημένα Συστήματα 1 Επικοινωνία με μηνύματα Κατανεμημένα Συστήματα 1 lalis@inf.uth.gr Επικοινωνία με ανταλλαγή μηνυμάτων Η επικοινωνία με μηνύματα είναι ο πιο ευέλικτος τρόπος αλληλεπίδρασης σε κατανεμημένα συστήματα πιο

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Εισαγωγή στον Προγραµµατισµό Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Hello World /* Αρχείο hello.c * Εµφανίζει στην οθόνη το * µήνυµα hello world */ #include

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

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) ΙΙΙ 1 lalis@inf.uth.gr Υποθέσεις εργασίας Νήματα/διεργασίες με κοινή μνήμη Αυτόματη διακοπή/εναλλαγή νημάτων/διεργασιών (π.χ. πάνω από 1 CPU

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

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

Γλώσσες Προγραμματισμού

Γλώσσες Προγραμματισμού Γλώσσες Προγραμματισμού Διδάσκων: Ανδρέας Παπασαλούρος Ιστοσελίδα: http://www.samos.aegean.gr/math/andpapas/courses/pl/default.htm Πλατφόρμα ηλεκτρονικής μάθησης: http://myria.math.aegean.gr/moodle/ Πλατφόρμα

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

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Έλεγχος ροής Δομή επιλογής (if, switch) Δομές επανάληψης (while, do-while, for) Διακλάδωση

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής Στο εργαστήριο αυτό θα δούμε πώς ορίζονται και πώς χρησιμοποιούνται οι συμβολοσειρές στην C. Επίσης, θα μελετήσουμε κάποιες από τις συναρτήσεις

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

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 κοινόχρηστες περιοχές μνήμης

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

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

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

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1 Ελεγκτές/Παρακολουθητές (Monitors) 1 lalis@inf.uth.gr Ελεγκτές Αμοιβαίος αποκλεισμός στο πλαίσιο ενός τμήματος λογισμικού που προσπελάζεται με δομημένο τρόπο, μέσω προκαθορισμένης διασύνδεσης (API) Ο συγχρονισμός

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

Προεπεξεργαστής C. Προγραμματισμός Ι 1

Προεπεξεργαστής C. Προγραμματισμός Ι 1 Προεπεξεργαστής C Προγραμματισμός Ι lalis@inf.uth.gr 1 Βασική ιδέα Ο προεπεξεργαστής (pre-proccesor) της C είναι ένα πρόγραμμα που εκτελείται και μετασχηματίζει τον πηγαίο κώδικα πριν αυτός δοθεί στον

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

Εισαγωγικά & Βασικές Έννοιες

Εισαγωγικά & Βασικές Έννοιες Εισαγωγικά & Βασικές Έννοιες ΙΙΙ 1 lalis@inf.uth.gr Γιατί πολλές διεργασίες/νήματα; Επίπεδο εφαρμογής Καλύτερη δόμηση κώδικα Αποφυγή μπλοκαρίσματος / περιοδικών ελέγχων Φυσική έκφραση παραλληλισμού Επίπεδο

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

Επικοινωνία αίτησης-απάντησης. Κατανεμημένα Συστήματα 1

Επικοινωνία αίτησης-απάντησης. Κατανεμημένα Συστήματα 1 Επικοινωνία αίτησης-απάντησης Κατανεμημένα Συστήματα 1 lalis@inf.uth.gr Σχήμα επικοινωνίας -reply Μια διεργασία στέλνει μια αίτηση () σε μια άλλη διεργασία, η οποία επεξεργάζεται την αίτηση και στέλνει

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

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

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

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