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

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

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

Transcript

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

2 Δομή αρχείου προγράμματος Πρόγραμμα (program) ονομάζεται το εκτελέσιμο αρχείο που βρίσκεται αποθηκευμένο στο δίσκο (π.χ. το a.out, ή το ls ή το gcc ) Προγράμματα φτιάχνουμε εμείς (a.out) ή Είναι έτοιμες εφαρμογές (/usr/bin/gcc, /bin/ls, ) Τα προγράμματα είναι συνηθισμένα δυαδικά αρχεία. Απλά έχουν την ιδιότητα ότι μπορούν να εκτελεστούν (δηλαδή έχουν εντολές μηχανής). Τι περιέχει το αρχείο a.out? Ο μεταφραστής όταν δημιουργεί το πρόγραμμα, αποθηκεύει μέσα στο a.out διάφορα τμήματα (segments): 1. Τις εντολές του προγράμματος (σε γλώσσα μηχανής) ονομάζεται text ή code segment 2. Πληροφορίες για τις αρχικοποιημένες καθολικές μεταβλητές και σταθερές που έχει το πρόγραμμα (μεγέθη, αρχικές τιμές) ονομάζεται data segment 3. Πληροφορίες για τις μη αρχικοποιημένες καθολικές μεταβλητές που έχει το πρόγραμμα (μεγέθη) ονομάζεται bss segment Μπορείτε να δείτε λεπτομέρειες των τμημάτων με την εντολή size, π.χ. εκτελέστε στο τερματικό: $ size a.out 2

3 Παράδειγμα int a = 5, arr1[50] = { 1, 2, 3 ; int b, arr2[50]; int main() { char *name = "Hi!"; int c; c = a + b + strlen(name); return 0; Αρχικοποιημένες καθολικές μεταβλητές και σταθερά strings βρίσκονται στο τμήμα data του a.out Μη αρχικοποιημένες καθολικές μεταβλητές βρίσκονται στο τμήμα bss του a.out Οι τοπικές μεταβλητές δεν βρίσκονται πουθενά! Θα τοποθετηθούν στη στοίβα όταν το πρόγραμμα εκτελείται ως διεργασία. Οι εντολές βρίσκονται στο τμήμα text του a.out 3

4 Πρόγραμμα (program) & διεργασία (process) Πρόγραμμα (program) ονομάζεται το εκτελέσιμο αρχείο που βρίσκεται αποθηκευμένο στο δίσκο (π.χ. το a.out, ή το ls ή το gcc ) Προγράμματα φτιάχνουμε εμείς (a.out) ή Είναι έτοιμες εφαρμογές (/usr/bin/gcc, /bin/ls, ) Όταν ένα πρόγραμμα εκτελείται γίνεται διεργασία (process). Ανάλογα με το σύστημα, μπορεί να συνυπάρχουν και να εκτελούνται πολλές διεργασίες σε κάθε χρονική στιγμή (multitasking) Π.χ. έχω ανοιχτό τον browser, τον editor και το τερματικό και την ίδια στιγμή ακούω κι ένα τραγούδι. Μοιράζονται τον επεξεργαστή (ή τους επεξεργαστές), τη μνήμη, κλπ. Αν υπάρχουν πολλοί επεξεργαστές (παράλληλοι υπολογιστές), μπορεί να εκτελούνται ταυτόχρονα αλλιώς μπορεί να εναλλάσσονται με πολύ γρήγορο ρυθμό και να εκτελούνται εκ περιτροπής δίνοντας την ψευδαίσθηση της ταυτόχρονης εκτέλεσης (timesharing). 4

5 Διεργασίες Η διαδικασία κατά την οποία το πρόγραμμα μεταλλάσσεται σε διεργασία είναι ιδιαίτερα πολύπλοκη και την αναλαμβάνει το λειτουργικό σύστημα του υπολογιστή. «Χοντρικά» βήματα: 1. Ανοίγεται το αρχείο του προγράμματος από τον δίσκο. 2. Μεταφέρονται (αντιγράφονται) οι εντολές του (από το τμήμα text) σε κάποιο σημείο στην κύρια μνήμη 3. Δεσμεύεται χώρος για την τοποθέτηση των καθολικών μεταβλητών (πληροφορίες από τα τμήματα data και bss) 4. Αρχικοποιούνται οι καθολικές μεταβλητές (από το τμήμα data) 5. Δεσμεύεται χώρος μνήμης για τη στοίβα του προγράμματος (stack) 6. Προετοιμάζεται ο χώρος μνήμης από τον οποίο θα δίνονται bytes αν το πρόγραμμα καλεί την malloc (ο χώρος αυτός ονομάζεται σωρός heap) 7. Προετοιμάζονται πολύπλοκες δομές του λειτουργικού συστήματος για διαχείριση και δρομολόγηση της διεργασίας 8. Εν τέλει, καλείται η main(). 5

6 Μερικά για τις διεργασίες Μπορεί πολλές διεργασίες να προέρχονται από το ίδιο πρόγραμμα Π.χ. έχω ανοιχτά πολλά τερματικά: ένα είναι το πρόγραμμα του τερματικού στον δίσκο, όμως εκτελούνται πολλές αυτόνομες και ξεχωριστές διεργασίες. Κάθε διεργασία παίρνει μία μοναδική ταυτότητα (process id) είναι ένας ακέραιος αριθμός που της δίνει το λειτουργικό σύστημα Η ταυτότητα είναι εν γένει τυχαία. Κάθε φορά που εκτελούμε το ίδιο πρόγραμμα, το σύστημα μπορεί να δίνει στην αντίστοιχη διεργασία διαφορετική ταυτότητα. Διεργασίες που εκτελούνται ταυτόχρονα και οι οποίες προέρχονται από το ίδιο πρόγραμμα θεωρούνται εντελώς διαφορετικές, ανεξάρτητες και έχουν διαφορετικές ταυτότητες. Μπορώ να βρω ποιες διεργασίες εκτελούνται αυτή τη στιγμή, μαζί με τις ταυτότητές τους, εκτελώντας: $ ps 6

7 Πώς μπορώ να βρω την ταυτότητα της διεργασίας Η συνάρτηση getpid() επιστρέφει το process id της τρέχουσας διεργασίας, π.χ. #include <stdio.h> #include <unistd.h> /* For getpid() */ int main() { printf("process id: %d\n", getpid()); return 0; Εκτέλεση στο τερματικό: $./a.out Process id: 3757 $./a.out Process id:

8 Η κλήση exec Μέσα από το πρόγραμμά μου μπορώ να εκτελέσω ένα οποιοδήποτε άλλο πρόγραμμα με την χρήση των κλήσεων exec. Η διεργασία μου θα αντικατασταθεί και θα εκτελέσει το νέο πρόγραμμα. Δηλαδή «εξαφανίζεται» ο κώδικας και τα δεδομένα της διεργασίας μου και στη θέση τους μπαίνουν ο κώδικας και τα δεδομένα του νέου προγράμματος που θέλω να εκτελέσω. Το process id προφανώς δεν αλλάζει μιας και δεν φτιάχτηκε άλλη διεργασία. Άλλαξε το πρόγραμμα αλλά όχι η διεργασία!! Επομένως, παρέμεινα πολλά πράγματα ΙΔΙΑ, όπως π.χ το user id, ο τρέχων φάκελος εργασίας, τα αρχεία που ήταν ανοιχτά κλπ Υπάρχουν αρκετές εκδόσεις της exec execl(), execv(), execlp(), execvp(), execle(), execve() Κάνουν χοντρικά την ίδια δουλειά, αλλά με άλλα ορίσματα / επιλογές. 8

9 Η κλήση execl() Απαιτείται #include <unistd.h> Η execl() παίρνει ως ορίσματα την πλήρη διαδρομή του προγράμματος (αρχείου) που θέλω να εκτελέσω και στη συνέχεια οι επόμενες παράμετροι είναι όλα τα ορίσματα που πρέπει να περαστούν στην main() του προγράμματος που θα εκτελεστεί (με πρώτο το όνομα του προγράμματος, όχι την πλήρη διαδρομή του). Η execl() προφανώς είναι variadic. Η τελευταία παράμετρος πρέπει να είναι NULL. Αν όλα πάνε καλά, η execl() δεν επιστρέφει ποτέ (έχει καταστραφεί η διεργασία που την κάλεσε ) Παράδειγμα: για να εκτελέσω gcc c myfile.c θα πρέπει να καλέσω την execl() κάπως έτσι: execl( /usr/bin/gcc, gcc, -c, myfile.c, NULL); ΠΛΗΡΗΣ ΔΙΑΔΡΟΜΗ Όνομα Όρισμα Όρισμα Τέλος 9

10 Παράδειγμα execl 1/3 #include <stdio.h> #include <unistd.h> /* Needed for execl() */ int main() { printf("before calling execl\n"); /* Εκτέλεση ls l ; Δηλαδή ls με 1 όρισμα, το -l */ execl("ls", "ls", "-l", NULL); /* NULL μετά το τελευταίο όρισμα */ printf("after calling execl\n"); return 0; Εκτέλεση στο τερματικό: $./a.out Before calling execl After calling execl $ Τι έγινε??? To ls δεν είναι η ΠΛΗΡΗΣ διαδρομή της εντολής ls! Πρέπει να περάσουμε ολόκληρο το μονοπάτι όπου βρίσκεται αποθηκευμένο το πρόγραμμα ls. Πώς το βρίσκουμε; $ which ls /bin/ls $ 10

11 Παράδειγμα execl 2/3 #include <stdio.h> #include <unistd.h> /* Needed for execl() */ int main() { printf("before calling execl\n"); /* Εκτέλεση ls l ; Δηλαδή ls με 1 όρισμα, το -l */ execl("/bin/ls", "ls", "-l", NULL); printf("after calling execl\n"); return 0; Εκτέλεση στο τερματικό: $./a.out Before calling execl total 7 -rwxr-xr-x 1 dimako staff 4688 May 14 22:23 a.out -rw-r--r-- 1 dimako staff 167 May 14 22:23 test_exec.c $ Σωστή εκτέλεση! Το δεύτερο printf() δεν εκτελέστηκε ποτέ 11

12 Παράδειγμα execl 3/3 Το παρακάτω είναι ο κώδικας του προγράμματος a.out. Τι θα γίνει όταν το εκτελέσουμε; #include <stdio.h> #include <unistd.h> /* Needed for execl() */ int main() { printf("before calling execl, pid = %d\n", getpid()); execl("./a.out", "a.out", NULL); printf("after calling execl\n"); return 0; Θα εκτελείται επ άπειρο το a.out από την ίδια διεργασία και άρα: $./a.out Before calling execl Before calling execl Before calling execl Before calling execl Before calling execl

13 Η κλήση execv() Πρόκειται για ίδια λογική με την execl(), μόνο που τα ορίσματα δεν δίνονται ξεχωριστά, αλλά μαζεμένα όλα μαζί σε έναν πίνακα: #include <unistd.h> int execv(char *path, char *argv[]); Το προηγούμενο παράδειγμα με χρήση της execv(): #include <stdio.h> #include <unistd.h> /* Needed for execl() */ int main() { /* Εκτέλεση "ls l"; Πίνακας με 3 δείκτες σε συμβολοσειρές */ char *arg[3] = {"ls", "-l", NULL ; printf("before calling execv\n"); execv("/bin/ls", arg); return 0; 13

14 Προγραμματισμός συστημάτων UNIX/POSIX Δημιουργία νέων διεργασιών (process creation fork)

15 Δημιουργία νέας διεργασίας Μπορώ μέσα από το πρόγραμμά μου μπορώ να δημιουργήσω μία εντελώς νέα διεργασία; Δυστυχώς οι συναρτήσεις της κατηγορίας exec ΔΕΝ δημιουργούν νέα διεργασία, παρά διατηρούν την τρέχουσα και απλώς τη βάζουν να εκτελέσει ένα άλλο πρόγραμμα Υπάρχει ένας και μοναδικός τρόπος να γίνει αυτό: η (περίεργη) κλήση συστήματος fork(): Η συνάρτηση αυτή δημιουργεί ένα πανομοιότυπο αντίγραφο της τρέχουσας διεργασίας και οι δύο, πλέον, διεργασίες εκτελούνται ταυτόχρονα και ανεξάρτητα! Η διεργασία που κάλεσε την fork() ονομάζεται διεργασία-γονέας (parent) ενώ η νέα διεργασία ονομάζεται θυγατρική ή διεργασίαπαιδί (child process). 15

16 fork Όταν δημιουργηθεί η διεργασία-παιδί, δεν ξεκινάει να εκτελεί την main(). Αρχίζει να εκτελεί, αμέσως μετά το σημείο που έγινε η κλήση στην fork(). Είναι λες και ο πατέρας και το παιδί να επιστρέφουν μαζί από την fork. Παράδειγμα: #include <unistd.h> /* Needed for fork(), getpid() */ int main() { printf("parent (%d) about to call fork\n", getpid()); fork(); printf( Hi from process %d\n", getpid()); return 0; Εκτέλεση στο τερματικό: $./a.out parent (11533) about to call fork Hi from process Hi from process $ 16

17 Εξήγηση #include <stdio.h> #include <unistd.h> int main() { printf("parent (%d) about to call fork\n", fork(); getpid()); printf( Hi from process %d\n", getpid()); Η γονική διεργασία εκτελεί την printf Η γονική διεργασία καλεί την fork 1) Δημιουργείται νέα διεργασία (θυγατρική). Πρόκειται για διεργασία-αντίγραφο του γονέα, η οποία εκτελεί το ίδιο πρόγραμμα. 2) Και η γονική και η θυγατρική διεργασία συνεχίζουν από την κλήση της fork και κάτω. return 0; Αυτό το printf το εκτελούν και οι δύο διεργασίες (οι οποίες είναι διαφορετικές και άρα έχουν διαφορετικό process id) $./a.out parent (11533) about to call fork Hi from process Hi from process $ 17

18 Ερωτήματα & παρατηρήσεις Γιατί τυπώθηκε πρώτα το process id του γονέα και μετά του παιδιού; Προλαβαίνει πάντα και εκτελείται πρώτα ο γονέας; Απάντηση: Είναι εντελώς τυχαίο! Αν ξαναεκτελέσουμε το a.out μπορεί να εκτυπωθεί πρώτα το μήνυμα του παιδιού Δεν είναι μάλλον ανούσιο το γεγονός ότι γονέας και παιδί είναι πανομοιότυποι και κάνουν ακριβώς τα ίδια πράγματα; Απάντηση: Προφανώς ναι! Μπορούμε όμως να τους βάλουμε να κάνουν διαφορετικά πράγματα. Πώς μπορεί το παιδί να γνωρίζει ότι είναι παιδί και να κάνει άλλα πράγματα από αυτά που κάνει ο γονέας; Απάντηση: Πρέπει να κοιτάξουμε την τιμή που επιστρέφει η fork(). Αν είναι ίση με 0, τότε βρισκόμαστε στο παιδί, αλλιώς στον γονέα! Στον γονέα, επιστρέφει το process id του παιδιού. 18

19 Διαφοροποίηση γονέα παιδιού #include <stdio.h> #include <unistd.h> int main() { int ret; printf("parent (%d) about to call fork\n", getpid()); ret = fork(); /* Remember what fork() returned */ if (ret == 0) /* 0 returned to child */ printf("i am the child, with pid %d\n", getpid()); else /* child s pid (> 0) returned to parent */ printf("i am the parent, with pid %d; child pid = %d\n", getpid(), ret); return 0; Εκτέλεση στο τερματικό: $./a.out parent (11644) about to call fork I am the parent, with pid 11644; child pid = I am the child, with pid $ 19

20 getppid() η ταυτότητα του γονέα #include <stdio.h> #include <unistd.h> int main() { int ret; printf("parent (%d) about to call fork\n", getpid()); ret = fork(); /* Remember what fork() returned */ if (ret == 0) /* 0 returned to child */ printf("i am the child, with pid %d; parent pid = %d\n", getpid(), getppid()); else /* child s pid (> 0) returned to parent */ printf("i am the parent, with pid %d; child pid = %d\n", getpid(), ret); return 0; Εκτέλεση στο τερματικό: $./a.out parent (11640) about to call fork I am the parent, with pid 11640; child pid = I am the child, with pid 11645; parent pid = $ 20

21 Το παιδί είναι αντίγραφο του πατέρα Η θυγατρική διεργασία είναι πλήρες και πανομοιότυπο αντίγραφο της γονικής διεργασίας Τρέχει αντίγραφο του ίδιου προγράμματος με τον γονέα Ακόμα πιο σημαντικό: έχει πανομοιότυπα αντίγραφα όλων των μεταβλητών του γονέα, με τις τιμές που είχαν στον πατέρα πριν τη fork(). Γενικότερα, κληρονομεί τα πάντα από τον πατέρα. Ακόμα και όσα αρχεία είχε κάνει open() ο πατέρας, τα έχει και το παιδί και μάλιστα είναι ήδη ανοικτά! 21

22 Όλα ίδια παράδειγμα #include <stdio.h> #include <unistd.h> int a = 5; int main() { int b = 10; printf("parent about to call fork\n"); if (fork() == 0) /* 0 returned to child */ printf("child (pid %d): a = %d, b = %d\n", getpid(), a, b); else printf("parent (pid %d): a = %d, b = %d\n", getpid(), a, b); return 0; Εκτέλεση στο τερματικό: $./a.out parent about to call fork Child (pid 11704): a = 5, b = 10 Parent (pid 11703): a = 5, b = 10 $ 22

23 Το παιδί είναι διαφορετική διεργασία Μπορεί να δημιουργείται ως πλήρες αντίγραφο του γονέα, όμως στη συνέχεια είναι αυτόνομο και a) Μπορεί να εκτελεί άλλες εντολές του προγράμματος από ότι ο γονέας b) Μπορεί να δίνει άλλες τιμές στις μεταβλητές, μιας και είναι δικές του, διαφορετικές από του γονέα. Ότι αλλαγές κάνει στις μεταβλητές του το παιδί, δεν επηρεάζουν τις αντίστοιχες μεταβλητές του πατέρα (και το αντίστροφο) 23

24 Διαφορετικές τιμές μεταβλητών παράδειγμα #include <stdio.h> #include <unistd.h> int a = 5; int main() { int b = 10; if (fork() == 0) { /* 0 returned to child */ printf( child: a = %d, b = %d\n", a, b); a++; b++; printf( child now: a = %d, b = %d\n", a, b); else { printf( parent: a = %d, b = %d\n", a, b); a--; b--; printf( parent now: a = %d, b = %d\n", a, b); Εκτέλεση στο τερματικό: $./a.out parent: a = 5, b = 10 child: a = 5, b = 10 parent now: a = 4, b = 9 child now: a = 6, b = 11 $ 24

25 Περιμένοντας το παιδί waitpid() Όταν δημιουργείται μία νέα διεργασία, αυτή δρομολογείται και εκτελείται ανεξάρτητα από τον γονέα. Μπορεί να τερματίσει ο γονέας και το παιδί να συνεχίσει να εκτελείται ή και το ανάποδο. Στις περισσότερες περιπτώσεις όμως, όταν φτιάξουμε μία νέα διεργασία, μας ενδιαφέρει να την περιμένουμε να ολοκληρώσει τη δουλειά της ή τέλος πάντων να γνωρίζουμε με κάποιο τρόπο ότι τερματίστηκε. Για αυτό το σκοπό χρησιμοποιείται η κλήση waitpid() η οποία μας επιτρέπει να σταματήσουμε και να περιμένουμε να τερματιστεί μία συγκεκριμένη διεργασία-παιδί 25

26 waitpid() Απαιτείται #include <sys/wait.h> pid_t waitpid(pid_t pid, int *exitstatus, int options); O τύπος pid_t είναι κατά βάση ψευδώνυμο του int. Το πρώτο όρισμα (pid) είναι το process id της θυγατρικής διεργασίας που περιμένουμε να τελειώσει. Αν περάσουμε -1, τότε περιμένουμε μία οποιαδήποτε από τις θυγατρικές μας διεργασίες να τελειώσει. Το τρίτο όρισμα δεν μας ενδιαφέρει θα δίνουμε πάντα 0. Το δεύτερο όρισμα δείχνει σε έναν ακέραιο, στον οποίο θα αποθηκευτεί η κατάσταση τερματισμού (βασικά περιέχει την τιμή επιστροφής) της θυγατρικής διεργασίας. Με αυτό τον τρόπο, το παιδί μπορεί επίσης να ενημερώσει τον γονέα για το τι έγινε. Αν δεν μας ενδιαφέρει η τιμή, μπορούμε να περάσουμε NULL. 26

27 wait() Η κλήση wait(&exitstatus); Είναι ισοδύναμη με την κλήση: waitpid(-1, &exitstatus, 0); Δηλαδή, περιμένει τον τερματισμό οποιουδήποτε παιδιού. Την αγνοούμε επομένως 27

28 Παράδειγμα αναμονής 1 #include <stdio.h> #include <stdlib.h> /* For exit() */ #include <unistd.h> /* For fork(), getpid() */ #include <sys/wait.h> /* For waitpid() */ int main() { int pid; pid = fork(); if (pid == 0) { /* child */ return 5; /* child exits with 5 */ printf("parent (%d) waits for child (%d)...\n", getpid(), pid); waitpid(pid, NULL, 0); printf("child terminated!\n"); return 0; Η θυγατρική διεργασία τερματίζει κανονικά με return από την main() της 28

29 Παράδειγμα αναμονής 2 #include <stdio.h> #include <stdlib.h> /* For exit() */ #include <unistd.h> /* For fork(), getpid() */ #include <sys/wait.h> /* For waitpid() */ delay() { /* Just delay */ int i, sum=0; for (i = 0; i < ; i++) sum += i; printf("child (%d) exits...\n", getpid()); exit(5); /* Child exits with 5 */ int main() { int pid; pid = fork(); if (pid == 0) /* child */ delay(); printf("parent (%d) waits for child (%d)...\n", getpid(), pid); waitpid(pid, NULL, 0); printf("child terminated!\n"); Η θυγατρική διεργασία τερματίζει κανονικά με exit() 29

30 Παίρνοντας την τιμή τερματισμού Για να μπορέσω να βρω με τι τιμή τερμάτισε το παιδί μου (είτε με exit είτε με return), θα πρέπει να περάσω τη δεύτερη παράμετρο στην waitpid() με δείκτη σε κάποιον ακέραιο Στον ακέραιο αυτό, κατά την επιστροφή από την κλήση θα περιλαμβάνονται 2 ειδών πληροφορίες α) Αν τερματίστηκε κανονικά (με return ή exit) η διεργασία-παιδί ή διακόπηκε απρόσμενα π.χ. λόγω κάποιου σφάλματος ή ctrl-c κλπ. β) Η τιμή τερματισμού αν τερματίστηκε κανονικά Για να διαπιστώσω το α) πρέπει να χρησιμοποιήσω το macro WIFEXITED(). Αν αυτό μου δώσει TRUE, τότε το β) προέκυπτε από το macro WEXITSTATUS(). 30

31 Παράδειγμα αναμονής 3 #include <stdio.h> #include <stdlib.h> /* For exit() */ #include <unistd.h> /* For fork(), getpid() */ #include <sys/wait.h> /* For waitpid() */ delay() { /* Just delay */ int i, sum=0; for (i = 0; i < ; i++) sum += i; printf("child (%d) exits...\n", getpid()); exit(5); /* Child exits with 5 */ int main() { int pid, status; pid = fork(); if (pid == 0) /* child */ delay(); printf("parent (%d) waits for child (%d)...\n", getpid(), pid); waitpid(pid, &status, 0); if (WIFEXITED(status)) /* Terminated OK? */ printf("child exited normaly with value %d\n", WEXITSTATUS(status)); else printf("child was terminated abnormaly.\n"); 31

32 Fork + exec Μία πολύ συνηθισμένη περίπτωση στην πράξη είναι να θέλουμε να δημιουργήσουμε μία θυγατρική διεργασία η οποία θα εκτελέσει ένα άλλο πρόγραμμα και θα τερματίσει. Αυτό το σενάριο υλοποιείται με τη χρήση της fork() για να δημιουργηθεί η νέα διεργασία και στη συνέχεια με το παιδί να καλεί την exec() για να εκτελέσει άλλο πρόγραμμα Ο γονέας, ανάλογα με την περίπτωση, μπορεί να περιμένει ή όχι τον τερματισμό του παιδιού. 32

33 Παράδειγμα fork + exec #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> childfunc() { /* Just delay */ printf("child (%d) will fire up a firefox window!\n", getpid()); execl("/usr/bin/firefox", "firefox", NULL); exit(5); int main() { printf("about to fork...\n"); if (fork() == 0) /* child */ childfunc(); printf("parent (%d) waits for child...\n", getpid()); waitpid(-1, NULL, 0); /* or just wait(null) */ return 0; 33

34 Η συνάρτηση system() Πρόκειται για μία συνάρτηση η οποία κάνει τη λειτουργία των fork + exec + waitpid με μία μόνο κλήση! Δημιουργεί ένα παιδί, το οποίο εκτελεί το πρόγραμμα που θέλουμε (μέσω shell) και ο γονέας επιστρέφει μόλις τερματίσει το παιδί. Η συνάρτηση system(): Η system() παίρνει ως όρισμα 1 συμβολοσειρά, η οποία περιέχει ΑΚΡΙΒΩΣ την εντολή που θα εκτελούσαμε στο τερματικό! α) Μπλοκάρει (σταματά προσωρινά) την τρέχουσα διεργασία, β) δημιουργεί μία νέα διεργασία η οποία εκτελεί ένα κέλυφος (shell, π.χ. bash), γ) το κέλυφος εκτελεί την εντολή που περάσαμε ως παράμετρο, δ) τερματίζει η διεργασία του κελύφους και ε) συνεχίζει η αρχική μας διεργασία. Απλός, γρήγορος αλλά και λειτουργικά περιοριστικός τρόπος. 34

35 Παράδειγμα με system() Παράδειγμα: #include <stdio.h> #include <stdlib.h> /* For system() */ int main() { printf("before system()\n"); system("ls -l"); /* Create shell to execute ls */ printf("after system()\n ); return 0; Εκτέλεση στο τερματικό: $./a.out Before system() total 16 -rwxr-xr-x 1 dimako staff 6748 May 14 14:49 a.out -rw-r--r-- 1 dimako staff 236 May 14 14:49 test.c After system() 35

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στην Πληροφορική

Εισαγωγή στην Πληροφορική Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Εισαγωγή στην Πληροφορική Ενότητα 8: Λειτουργικά Συστήματα Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

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

UNIX System Programming

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

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

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

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

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

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

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

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

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

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

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

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

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

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

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

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

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

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

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

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

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

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

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C Οι συναρτήσεις τι είναι Πρόκειται για ανεξάρτητα τμήματα ενός προγράμματος (υποπρογράμματα) που επιτελούν συγκεκριμένες εργασίες. Καλούνται από το κυρίως

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

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

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

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

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C Οι συναρτήσεις τι είναι Πρόκειται για ανεξάρτητα τμήματα ενός προγράμματος (υποπρογράμματα) που επιτελούν συγκεκριμένες εργασίες. Καλούνται από το κυρίως

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

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

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

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

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Εισαγωγή στον Προγραµµατισµό Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Συναρτήσεις 19.11.16 Β. Ντουφεξή 2 Προβλήματα: Οσο μεγαλώνουν τα προγράμματα, γίνονται πιο πολύπλοκα.

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

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

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

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

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

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

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

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

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

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8 Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 1000 1001 1002 1003 1004 1005 12 9.8 9976 3 1010 26 1006 1007 1008 1009 1010 1011 16 125 1299 a 13 1298 Δήλωση Δήλωση Τύπος

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

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα Αλφαριθμητικά Πίνακες: μια σύντομη εισαγωγή Πίνακες χαρακτήρων: τα "Αλφαριθμητικά" Πίνακες(Arrays): έννοιες και ορισμοί Ορισμός: Πίνακας (array) = σύνολο μεταβλητών του ιδίου τύπου (int, float, char,...) με ένα κοινό

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

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

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

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

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

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

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

Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο

Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο 2018-2019 Άσκηση 1 Φροντιστήριο: 05/10/2018 Παράδοση: 18/10/2018 Υλοποίηση Linux C Shell ΤΑ : shevtsov(shevtsov@csd.uoc.gr) Ώρες Γραφείου : Δευτέρα 14:00-16:00

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

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής Γιώργος Δημητρίου Μάθημα 3-4: Προγραμματισμός MIPS Προγραμματισμός σε Συμβολική Γλώσσα Η συμβολική γλώσσα: δεν έχει τύπους, δεν έχει δηλώσεις μεταβλητών, δεν έχει δομές ελέγχου, δεν έχει εντολές βρόχων,

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

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

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

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

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15) (Κεφάλαιο 2.7 και 12) Αρχεία στην C (Διάλεξη 15) 14-1 Επανάληψη στην Αποθήκευση (Storage) Για να αποθηκεύσουμε δεδομένα από ένα πρόγραμμα, πρέπει να χρησιμοποιήσουμε την Δευτερεύουσα Μνήμη 14-2 Επανάληψη

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

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2) Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2) Κατηγορίες μνήμης εκτελέσιμου προγράμματος Στις καθολικές και στατικές μεταβλητές οι χώροι μνήμης δεσμεύονται κατά την διάρκεια της μεταγλώττισης. Οι

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

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,

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

Διαδικαστικός Προγραμματισμός

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

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12) Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II (Διάλεξη 12) 12-1 Ανασκόπηση Δομής Προγράμματος με Συναρτήσεις 1 void PrintMessage (); Πρότυπο (Δήλωση) Συνάρτησης (Δηλώνουν τι επιπλέον συναρτήσεις θα χρησιμοποιήσουμε

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

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Εισαγωγή στους δείκτες Το μοντέλο της μνήμης, σωρός και στοίβα Αναφορές Δείκτες και πίνακες Δέσμευση και αποδέσμευση μνήμης

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

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για

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

Ορισμός μεταβλητών δεικτών και αρχικοποίηση

Ορισμός μεταβλητών δεικτών και αρχικοποίηση Ορισμός μεταβλητών δεικτών και αρχικοποίηση Η έννοια του δείκτη Κάθε μεταβλητή σχετίζεται με μια θέση στην κύρια μνήμη του Η/Υ η οποία έχει τη δική της ξεχωριστή διεύθυνση Ο δείκτης είναι μια μεταβλητή

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

Εντολές Επανάληψης. int sum = 0, i=1; sum += i++ ; sum += i++ ; Η πράξη αυτή θα πρέπει να επαναληφθεί Ν φορές!

Εντολές Επανάληψης. int sum = 0, i=1; sum += i++ ; sum += i++ ; Η πράξη αυτή θα πρέπει να επαναληφθεί Ν φορές! Εντολές Επανάληψης Πολλές φορές χρειάζεται να επαναλάβουμε τις ίδιες εντολές Πχ. Έστω ότι θέλουμε να υπολογίσουμε το άθροισμα όρων μιας ακολουθίας διαδοχικών ακεραίων. Δηλαδή αν ο χρήστης δώσει τον αριθμό

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

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

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

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

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

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

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Διεργασίες και Νήματα Υλικό από: Tanenbaum, Modern Operating Systems,Structured Computer Organization Stallings, Operating Systems: Internals and Design Principles. Silberschatz,

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

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

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

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

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

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

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

Topic 4: Processes. *Ευχαριστίες στους Τάκη Σταµατόπουλο, Αλέξη ελή, και Αντώνη ελιγιαννάκη

Topic 4: Processes. *Ευχαριστίες στους Τάκη Σταµατόπουλο, Αλέξη ελή, και Αντώνη ελιγιαννάκη Topic 4: Processes *Ευχαριστίες στους Τάκη Σταµατόπουλο, Αλέξη ελή, και Αντώνη ελιγιαννάκη ιεργασία (process) Στιγµιότυπο ενός προγράµµατος που εκτελείται Λειτουργικό φορτώνει πρόγραµµαστηµνήµη Ανάθεση

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

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 5η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πίνακες ως ορίσματα συναρτήσεων. Τα ορίσματα argc και argv της main.

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα

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

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1

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

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

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

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

Διάλεξη 5η: Εντολές Επανάληψης

Διάλεξη 5η: Εντολές Επανάληψης Διάλεξη 5η: Εντολές Επανάληψης Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Εντολές Επανάληψης CS100, 2015-2016

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

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις

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

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

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128] ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

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

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

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

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης Κατηγορίες μνήμης εκτελέσιμου προγράμματος Στις καθολικές και στατικές μεταβλητές οι χώροι μνήμης δεσμεύονται κατά την διάρκεια της μεταγλώττισης.

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

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

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

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

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

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Προεπεξεργαστής Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Διαδικασία Μεταγλώττισης πρόγραµµα επεξεργασίας κειµένου if a

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

Το λειτουργικό σύστημα. Προγραμματισμός II 1

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις της C Τα Λοιπά Στοίβα και μηχανισμός κλήσης Αναδρομικές συναρτήσεις Στατικές μεταβλητές Άλλα θέματα Μηχανισμός

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:

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

Προγραμματισμός Ι. Συναρτήσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Ι. Συναρτήσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Συναρτήσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι Συναρτήσεις - Εισαγωγή Μία συνάρτηση είναι ένα ανεξάρτητο τμήμα κώδικα, που εκτελεί μία

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

Διαδικαστικός Προγραμματισμός

Διαδικαστικός Προγραμματισμός Διαδικαστικός Προγραμματισμός Ενότητα 7: Δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες,

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

MIPS Interactive Learning Environment. MILE Simulator. Version 1.0. User's Manual

MIPS Interactive Learning Environment. MILE Simulator. Version 1.0. User's Manual MILE Simulator Version 1.0 User's Manual Νοέμβριος, 2011 Περιεχόμενα 1. Εισαγωγή στον προσομοιωτή...2 1.1 Εγκατάσταση...2 1.2 Βοήθεια Διευκρινήσεις...2 2. Ξεκινώντας με τον προσομοιωτή...3 2.1 Το memory

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

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

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

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

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

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι δείκτες στη C Η έννοια του δείκτη Την έννοια του δείκτη τη συναντήσαμε σε προηγούμενα μαθήματα. Η συνάρτηση scanf(), καταχωρίζει τιμές σε μεταβλητές χρησιμοποιώντας τον τελεστή

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

Προηγμένοι Μικροεπεξεργαστές. Έλεγχος Ροής Προγράμματος

Προηγμένοι Μικροεπεξεργαστές. Έλεγχος Ροής Προγράμματος Προηγμένοι Μικροεπεξεργαστές Έλεγχος Ροής Προγράμματος Control Flow εντολές Jump related JMP Jcc (JZ, JNZ, JB, JNB etc) JCXZ, JECXZ LOOP LOOPE, LOOPNE Procedure related CALL RET INT IRET INTO ENTER LEAVE

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

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα

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

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

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

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 11 η Συναρτήσεις Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης

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

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

Προγραμματισμός συστημάτων UNIX/POSIX. Χρονομέτρηση Προγραμματισμός συστημάτων UNIX/POSIX Χρονομέτρηση Χρονομέτρηση (Ι) Πρώτα από όλα, τι ακριβώς θέλουμε να μετρήσουμε; Μας ενδιαφέρει ο χρόνος που ο επεξεργαστής αφιέρωσε σε ένα πρόγραμμα ή σε ένα συγκεκριμένο

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

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

Προγραμματισμός Συστημάτων MYY502 Προγραμματισμός Συστημάτων Β. Δημακόπουλος dimako@cse.uoi.gr http://www.cse.uoi.gr/~dimako Εργαστήρια Μάλλον (!) ξεκινούν την επόμενη εβδομάδα Εγγραφές στο εργαστήριο 2 βάρδιες, 15:00 17:00 και

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

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 3 η Είσοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 10: Συναρτήσεις Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

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