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

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

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

Transcript

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

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

3 Βασική ιδέα: Ο εξυπηρετητής/πελάτης αποτελείται από µία διεργασία µε ένα νήµα εκτέλεσης. Ο ταυτοχρονισµός επιτυγχάνεται µε χρήση non-blocking Ε/Ε και αναµονή για «γεγονότα». Εστω ένα σύνολο από socket descriptors. Υπάρχουν δύο κύριες κατηγορίες µεθόδων παρακολούθησης γεγονότων στο σύνολο αυτό: «Level-triggered»: περιοδικά ελέγχουµε το σύνολο για αλλαγές/νέα γεγονότα. «Edge-triggered»: αναφέρουµε στον πυρήνα το σύνολο των socket descriptors και κατόπιν αυτός µας ειδοποιεί όταν γίνεται κάποια αλλαγή. Πολλές υλοποιήσεις: select(2) (POSIX.1). pselect(2) (POSIX.1). poll(2) (SVR4). SIGIO (Linux). epoll(4) (Linux). /dev/poll (Solaris). Event ports (Solaris). (2) (*BSD, Mac OS X). Grand Central Dispatch -- GCD (Mac OS X, FreeBSD).

4 select / pselect / poll Πολυπλεξία στην Ε/Ε select(2) int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); Περιµένει το πολύ timeout χρόνο (ή για πάντα αν NULL) για να γίνει κάποια αλλαγή στους πρώτους nfds file descriptors που ϐρίσκονται στα σύνολα readfds, writefds και exceptfds. nfds: ο µεγαλύτερος file descriptor στα σύνολα, συν 1. readfds: file descriptors από τους οποίους ϑα διαβάσουµε δεδοµένα ή στους οποίους ϑα δεχτούµε συνδέσεις. writefds: file descriptors στους οποίους ϑα γράψουµε δεδοµένα. exceptfds: file descriptors στους οποίους περιµένουµε «επείγοντα δεδοµένα» (OOB) ή γενικά ειδικές καταστάσεις. Οταν η select(2) επιστρέψει, στα σύνολα αυτά ϑα είναι «set» µόνο οι file descriptors που είναι έτοιµοι για Ε/Ε. Επιστρέφει το πλήθος των file descriptors που είναι έτοιµοι για επεξεργασία, 0 για τέλος χρόνου, -1 για σφάλµα. Για τη διαχείριση των συνόλων των file descriptors ορίζονται οι εξής µακροεντολές: FD_SET(fd, &fdset); FD_CLR(fd, &fdset); FD_ISSET(fd, &fdset); FD_ZERO(&fdset);

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

6 select / pselect / poll Πολυπλεξία στην Ε/Ε Εστω το εξής σενάριο: 1 int num_events = 0; 2 void my_sigfunc(int s) { 3 num_events++; 4 signal(sigxxx, my_sigfunc); 5 } 6 int main() { 7 // Variable declarations/initialization etc. 8 signal(sigxxx, my_sigfunc); 9 while (1) { 10 for (; num_events > 0; num_events--) { 11 // Process signal events 12 } 13 sel = select(nfds, &rfds, &wfds, &efds, NULL); 14 // } 16 } Αν το SIGXXX έρθει όσο είµαστε στη select(2) τότε αυτή ϑα επιστρέψει µε errno = EINTR. Πρόβληµα: Τι γίνεται αν το SIGXXX έρθει µετά το for(...) αλλά πριν τη select(2); Απάντηση: signal masking pselect(2).

7 select / pselect / poll Πολυπλεξία στην Ε/Ε pselect(2) int pselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *ntimeout, const sigset_t *sigmask); Περιµένει το πολύ ntimeout χρόνο (ή για πάντα αν NULL) για να γίνει κάποια αλλαγή στους πρώτους nfds file descriptors που ϐρίσκονται στα σύνολα readfds, writefds και exceptfds. nfds, readfds, writefds, exceptfds και τιµή επιστροφής όπως και στη select(2). sigmask: σύνολο σηµάτων που ϑα είναι ενεργοποιηµένα κατά την εκτέλεση της κλήσης αυτής. Για τη διαχείριση των συνόλων των file descriptors ορίζονται οι ίδιες µακροεντολές όπως και στη select(2). Για τη διαχείριση του sigmask ορίζονται αντίστοιχες συναρτήσεις δείτε το sigsetops(3). Το struct timespec προσφέρει ακρίβεια νανοδευτερόλεπτου, ενώ το struct timeval της select(2) έχει «µόνο» µικροδευτερόλεπτου. Το struct timeval της select(2) πρέπει να αρχικοποιείται πριν από κάθε κλήση της, ενώ η pselect(2) δεν αλλάζει το struct timespec της.

8 select / pselect / poll Πολυπλεξία στην Ε/Ε pselect: Παράδειγµα 1 int num_events = 0; 2 void my_sigfunc(int s) { 3 num_events++; 4 signal(sigxxx, my_sigfunc); 5 } 6 int main() { 7 // Variable declarations/initialization etc. 8 sigset_t sigmask, orig_mask; 9 sigemptyset(&sigmask); 10 sigaddset(&sigmask, SIGXXX); 11 sigprocmask(sig_block, &sigmask, &orig_sigmask); 12 signal(sigxxx, my_sigfunc); 13 while (1) { 14 for (; num_events > 0; num_events--) { 15 // Process signal events 16 } 17 sel = pselect(nfds, &rfds, &wfds, &efds, NULL, &orig_sigmask); 18 // } 20 }

9 select / pselect / poll Πολυπλεξία στην Ε/Ε Πρόβληµα: Οι select(2) και pselect(2) µπορούν να παρακολουθήσουν ως το πολύ FD_SETSIZE file descriptors 1024 σε *BSD, Solaris, Linux. Πολύ µικρότερο από το µέγιστο πλήθος των file descriptors ανά διεργασία. Πρόβληµα: Ακόµα κι αν παρακολουθούµε µόνο ένα file descriptor στην select(2)/pselect(2), εσωτερικά η υλοποίηση ελέγχει nfds file descriptors! Απάντηση: poll(2).

10 select / pselect / poll Πολυπλεξία στην Ε/Ε poll(2) int poll(struct pollfd fds[], nfds_t nfds, int timeout); Αρχικά είχε οριστεί για το API των STREAMS κατόπιν ορίστηκε και υλοποιήθηκε και για αρχεία, sockets, FIFOs, pipes κτλ. Περιµένει το πολύ timeout milliseconds (για πάντα αν INFTIM (= -1) ή καθόλου αν 0) για να γίνει κάποια αλλαγή στους file descriptors που περιγράφονται στον, µεγέθους nfds, πίνακα fds. Επιστρέφει το πλήθος των FDs που είναι έτοιµοι για Ε/Ε, 0 για τέλος χρόνου, -1 για σφάλµα.

11 select / pselect / poll Πολυπλεξία στην Ε/Ε poll(2) Τα πεδία της δοµής pollfd είναι ως εξής: fd: ο file descriptor προς παρακολούθηση. Αν -1, αρχικοποίησε το πεδίο revents, και αγνόησε τη δοµή αυτή. events: Γεγονότα προς παρακολούθηση (bitmask). revents: Γεγονότα που συνέβησαν (bitmask). Καθορίζει τι είδους Ε/Ε µπορεί να γίνει. Πιθανοί τύποι γεγονότων: POLLIN: υπάρχουν δεδοµένα προς ανάγνωση. POLLRDNORM, POLLOUT/POLLWRNORM: µπορεί να γίνει λήψη ή αποστολή µη επειγόντων δεδοµένων. POLLRDBAND, POLLWRBAND: µπορεί να γίνει λήψη / αποστολή επειγόντων δεδοµένων. POLLPRI: υπάρχουν δεδοµένα υψηλής προτεραιότητας προς ανάγνωση. POLLERR: συνέβη κάποιο σφάλµα. POLLHUP: η σύνδεση/το αρχείο έκλεισε. POLLNVAL: άκυρος τύπος γεγονότος ή κλειστό αρχείο/σύνδεση. struct pollfd struct pollfd { int fd; short events; short revents; };

12 select / pselect / poll Πολυπλεξία στην Ε/Ε poll: Παράδειγµα 1 int sd, cd, nready; 2 struct pollfd clients[1]; 3 4 sd = socket(/*... */); 5 bind(sd, /*... */); 6 listen(sd, /*... */); 7 8 clients[0].fd = sd; 9 clients[0].events = POLLRDNORM; while (1) { 12 nready = poll(clients, 1, INFTIM); 13 if (nready <= 0) { /* do something */ } 14 if (nready > 0) { 15 if (clients[0].revents & POLLRDNORM) { 16 cd = accept(sd, /*... */); 17 if (cd < 0) error(/*... */); 18 // Serve the request 19 close(cd); 20 } 21 } 22 }

13 Οι select(2), pselect(2) και poll(2) υπάρχουν σχεδόν σε όλα τα συστήµατα που υλοποιούν το πρότυπο POSIX.1. Πρόβληµα: Η poll(2) δεν έχει τον περιορισµό του FD_SETSIZE των select(2) και pselect(2), ωστόσο γίνεται πολύ αργή για µεγάλο αριθµό από παρακολουθούµενους file descriptors. Απάντηση: Κάθε λειτουργικό υλοποιεί κάποιο API που παρέχει την λειτουργικότητα της poll(2), χωρίς το πρόβληµα της απόδοσης. Linux: SIGIO (πυρήνες 2.4.x), epoll(4) (πυρήνες 2.6.x). *BSD, Mac OS X: (2). FreeBSD, Mac OS X: Grand Central Dispatch. Solaris: /dev/poll (poll(7d)), Event ports.

14 SIGIO Η µέθοδος αυτή έγκειται στη χρήση «σηµάτων πραγµατικού χρόνου» και προσφέρει «edge-triggered» παρακολούθηση. ιαθέσιµη µόνο σε Linux, σε εκδόσεις πυρήνα 2.4.x και µεγαλύτερη. Αρχικά, «µπλοκάρουµε» το σήµα που ϑα χρησιµοποιήσουµε, καθώς και το SIGIO. Καθορίζουµε ότι ο πυρήνας ϑα µας αποστέλλει το σήµα αυτό κάθε ϕορά που Ε/Ε είναι δυνατή σε κάποιον file descriptor. Κατόπιν, έχουµε ένα εξωτερικό ϐρόγχο µε poll(2). Σε κάθε επανάληψη: Χειριζόµαστε ότι µας έχει επιστρέψει η poll(2). Εισερχόµαστε σε ένα δεύτερο ϐρόγχο στον οποίο καλούµε sigwaitinfo(2). Αν έρθει το σήµα που καθορίσαµε προηγουµένως, η κλήση µας επιστρέφει τις πληροφορίες που χρειαζόµαστε για την εξυπηρέτηση του γεγονότος. Αν έρθει SIGIO τότε υπήρξε υπερχείλιση της ουράς σηµάτων, οπότε αδειάζουµε την ουρά ϑέτοντας τον χειριστή του σήµατος σε SIG_IGN και ϐγαίνουµε στον εξωτερικό ϐρόγχο.

15 SIGIO: Παράδειγµα 1 int fds[xxx], flags, signum; 2 sigset_t sigset; 3 siginfo_t siginfo; 4 //... 5 sigemptyset(&sigset); 6 sigaddset(&sigset, SIGPOLL); 7 sigaddset(&sigset, SIGIO); 8 sigprocmask(sig_block, &sigset, NULL); 9 foreach(fd in fds) { 10 fcntl(fd, F_SETOWN, (int)getpid()); 11 fcntl(fd, F_SETSIG, SIGPOLL); 12 flags = fcntl(fd, F_GETFL); 13 fcntl(fd, F_SETFL, flags O_NONBLOCK O_ASYNC); 14 } 16 while (1) { 17 nready = poll(/*... */); 18 /* process poll outcome */ 19 while (1) { 20 signum = sigwaitinfo(&sigset, &siginfo); 21 if (signum == SIGIO) { 22 signal(sigpoll, SIG_IGN); 23 signal(sigpoll, SIG_DFL); 24 // break; 26 } else if (signum == SIGPOLL) { 27 // siginfo.si_fd: event file descriptor 28 // siginfo.si_band: poll(2) events 29 } 30 } 31 }

16 epoll Πρόκειται για ένα API το οποίο επιτρέπει τη δηµιουργία και τον έλεγχο ενός συνόλου γεγονότων. Προσφέρει τόσο level-triggered όσο και edge-triggered παρακολούθηση. ιαθέσιµο µόνο σε Linux, έκδοση πυρήνα 2.6.x. Καθορίζονται 4 ϐασικές συναρτήσεις: epoll_create(2), epoll_ctl(2), epoll_wait(2) και epoll_pwait(2). #include <sys/epoll.h> int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout); int epoll_pwait(int epfd, struct epoll_event *events, int maxevents, int timeout, const sigset_t *sigmask);

17 epoll_create(2) int epoll_create(int size); ηµιουργεί ένα σύνολο τουλάχιστον size γεγονότων. Επιστρέφει έναν «file descriptor» που αναφέρεται στο σύνολο αυτό και τον οποίο πρέπει στο τέλος να αποδεσµεύσουµε µε close(2), -1 για σφάλµα.

18 epoll_ctl(2) int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); epfd: Ο file descriptor που αντιστοιχεί στο σύνολο γεγονότων. op: Η πράξη που ϑα γίνει στο παραπάνω σύνολο. EPOLL_CTL_ADD: Πρόσθεσε το fd στο σύνολο epfd και αντιστοίχισε το γεγονός event µε αυτό. EPOLL_CTL_MOD: Αντιστοίχισε το γεγονός event µε το fd στο σύνολο epfd. EPOLL_CTL_DEL: Αφαίρεσε το fd από το σύνολο epfd (το event αγνοείται). event: Περιγράφει το σύνολο γεγονότων που ϑα παρακολουθούνται στο fd. Επιστρέφει 0 για επιτυχία, -1 για σφάλµα. struct epoll_event { uint32_t events; epoll_data_t data; }; typedef union epoll_data { void *ptr; int fd; uint32_t u32; uint64_t u64; } epoll_data_t;

19 epoll_ctl(2) Το πεδίο events της δοµής struct epoll_event είναι ένα bitmask, όπως και στην περίπτωση της poll(2). υνατές τιµές: EPOLLIN: υπάρχουν δεδοµένα προς ανάγνωση. EPOLLOUT: µπορεί να γίνει αποστολή δεδοµένων. EPOLLRDHUP: η σύνδεση έκλεισε (το άλλο άκρο κάλεσε close(2) ή shutdown(2) για αποστολή). EPOLLPRI: υπάρχουν δεδοµένα προτεραιότητας προς ανάγνωση. EPOLLERR: συνέβη κάποιο σφάλµα. Η epoll_wait(2) πάντα περιµένει για τέτοιου είδους γεγονότα κι έτσι δε χρειάζεται να το προσθέτουµε. EPOLLHUP: η σύνδεση/το αρχείο έκλεισε. Η epoll_wait(2) πάντα περιµένει για τέτοιου είδους γεγονότα κι έτσι δε χρειάζεται να το προσθέτουµε. EPOLLET: ϑέτει τον αντίστοιχο file descriptor σε κατάσταση «edge triggered» παρακολούθησης. EPOLLONESHOT: απενεργοποιεί την παρακολούθηση µετά το πρώτο γεγονός. Μπορούµε να την ενεργοποιήσουµε εκ νέου µε χρήση της epoll_ctl(2) µε EPOLL_CTL_MOD.

20 epoll_wait(2) / epoll_pwait(2) int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout); int epoll_pwait(int epfd, struct epoll_event *events, int maxevents, int timeout, const sigset_t *sigmask); Περιµένει το πολύ timeout milliseconds (για πάντα αν -1, καθόλου αν 0) να συµβεί κάποιο γεγονός στο σύνολο που καθορίζει το epfd. events: Πίνακας από maxevents δοµές struct epoll_event που αντιστοιχούν στα γεγονότα που συνέβησαν µετά την τελευταία κλήση της epoll_wait(2)/epoll_pwait(2). sigmask: Χρησιµοποιείται όπως και στην pselect(2). Επιστρέφει το πλήθος των γεγονότων (file descriptors που είναι διαθέσιµοι για Ε/Ε), 0 για τέλος χρόνου, -1 για σφάλµα.

21 epoll: Παράδειγµα 1 int sd, cd, nready, epfd, i, flags; 2 struct epoll_event ev, events[100]; 3 4 sd = socket(/*... */); 5 bind(sd, /*... */); 6 listen(sd, /*... */); 7 8 epfd = epoll_create(50); 9 ev.events = EPOLLIN; 10 ev.data.fd = sd; 11 epoll_ctl(epfd, EPOLL_CTL_ADD, sd, &ev); while (1) { 14 nready = epoll_wait(epfd, events, 100, -1); 15 if (nready <= 0) { /* do something */ } 16 for (i = 0; i < nready; i++) { 17 if (events[i].data.fd == sd) { 18 cd = accept(sd, /*... */); 19 flags = fcntl(cd, F_GETFL); 20 fcntl(cd, F_SETFL, flags O_NONBLOCK); 22 ev.data.fd = cd; 23 ev.events = EPOLLIN; 24 epoll_ctl(epfd, EPOLL_CTL_ADD, cd, &ev); 25 } else if (events[i].events & EPOLLIN) { 26 cd = events[i].data.fd; 27 ev.data.fd = cd; 28 ev.events = EPOLLOUT; 29 epoll_ctl(epfd, EPOLL_CTL_MOD, cd, &ev); 30 recv(cd, /*... */); 31 } else if (event[i].events & EPOLLOUT) { 32 cd = events[i].data.fd; 33 send(cd, /*... */); 34 ev.data.fd = cd; 35 epoll_ctl(epfd, EPOLL_CTL_DEL, cd, &ev); 36 close(cd); 37 } 38 } 39 } close(epfd);

22 /dev/poll Πρόκειται για ένα API το οποίο χρησιµοποιεί µία ιδεατή συσκευή (/dev/poll) και επιτρέπει το γρήγορο έλεγχο ετοιµότητας πολλαπλών file descriptors. ιαθέσιµο µόνο σε SunOS/Solaris. Για να το χρησιµοποιήσουµε: Χρησιµοποιούµε κι εδώ έναν πίνακα από δοµές struct pollfd όπως και στην poll(2). Ορίζεται επιπλέον το «ειδικό» γεγονός POLLREMOVE µε το οποίο αφαιρούµε file descriptors από το σύνολο των παρακολουθούµενων. Αρχικά ανοίγουµε (open(2)) το αρχείο /dev/poll. Για να παρακολουθήσουµε το σύνολο των file descriptors για τα γεγονότα που περιγράφονται από τον παραπάνω πίνακα, γράφουµε τον πίνακα αυτό στο παραπάνω αρχείο. Το πεδίο revents δεν χρησιµοποιείται. Κατόπιν ελέγχουµε για γεγονότα µε κλήσεις της συνάρτησης ioctl(2) στο αρχείο αυτό. #include <sys/devpoll.h> int fd = open("/dev/poll", O_RDWR); ssize_t n = write(int fd, struct pollfd buf[], int bufsize); int n = ioctl(int fd, DP_POLL, struct dvpoll* arg); int n = ioctl(int fd, DP_ISPOLLED, struct pollfd* pfd);

23 /dev/poll Ο πίνακας δοµών που γράφουµε στο /dev/poll καθορίζει ποια γεγονότα µας ενδιαφέρουν και ποιους file descriptors παρακολουθούµε. Η δοµή struct dvpoll καθορίζει πόσο χρόνο ϑα περιµένει η κλήση στην ioctl(2) (dp_timeout) και περιέχει τα αποτελέσµατα της «poll(7d)». Κλήση της ioctl(2) µε όρισµα DP_POLL ελέγχει για τα γεγονότα. Κλήση της ioctl(2) µε όρισµα DP_ISPOLLED ελέγχει αν κάποιος συγκεκριµένος file descriptor ανήκει στο σύνολο των παρακολουθούµενων. struct dvpoll struct dvpoll { struct pollfd* dp_fds; int dp_nfds; int dp_timeout; };

24 /dev/poll: Παράδειγµα 1 int sd, cd, pfd, res, npfds, i; 2 struct pollfd pfds[2]; 3 4 sd = socket(/*... */); 5 bind(sd, /*... */); 6 listen(sd, /*... */); 7 8 pfd = open("/dev/poll", O_RDWR); 9 pfds[0].fd = sd; 10 pfds[0].events = POLLIN; 11 pfds[0].revents = 0; 12 npfds = 1; 13 write(pfd, &pfds[0], npfds * sizeof(struct pollfd)); while (1) { 16 dp.dp_timeout = -1; 17 dp.dp_nfds = npfds; 18 dp.dp_fds = pfds; 19 res = ioctl(pfd, DP_POLL, &dp); 20 if (res < 0) { /* error */ } 21 for (i = 0; i < res; i ++) { 22 if (dp.dp_fds[i].fd == sd) { 23 cd = accept(sd, NULL, 0); 24 flags = fcntl(cd, F_GETFL); 25 fcntl(cd, F_SETFL, flags O_NONBLOCK); 27 pfds[1].fd = cd; 28 pfds[1].events = POLLIN; 29 pfds[1].revents = 0; 30 npfds++; 31 write(pfd, pfds, npfds * sizeof( struct pollfd)); 32 } else if (dp.dp_fds[i].revents & POLLIN) { 33 cd = dp.dp_fds[i].fd; 34 pfds[1].events = POLLOUT; 35 write(pfd, pfds, npfds * sizeof( struct pollfd)); 36 recv(cd, /*... */); 37 } else if (dp.dp_fds[i].revents & POLLOUT) { 38 cd = dp.dp_fds[i].fd; 39 send(cd, /*... */); 40 pfds[1].events = POLLREMOVE; 41 write(pfd, pfds, npfds * sizeof( struct pollfd)); 42 npfds--; 43 close(cd); 44 } 45 } 46 } close(pfd);

25 Event ports Πρόκειται για ένα API το οποίο προσφέρει γενικότερα παρακολούθηση γεγονότων (όχι µόνο έλεγχο ετοιµότητας για file descriptors). Υποστηρίζεται µόνο στο SunOS/Solaris, έκδοση 10 και µεγαλύτερη. Επιτρέπει την παρακολούθηση: Αρχείων, sockets, pipes, κτλ. Συναλλαγών ασύγχρονης Ε/Ε (asynchronous I/O (AIO) transactions). Timers. Γενικών γεγονότων που καθορίζονται από τον χρήστη. Για περισσότερες πληροφορίες:

26 Πρόκειται επίσης για API το οποίο προσφέρει παρακολούθηση γεγονότων και πέρα από απλή ετοιµότητα για file descriptors. Υποστηρίζεται από όλα τα BSDs (FreeBSD, NetBSD, OpenBSD, DragonflyBSD, Mac OS X). Επιτρέπει την παρακολούθηση: Αρχείων, sockets, pipes και οτιδήποτε µπορούµε να χειριστούµε µε file descriptors. Συναλλαγών ασύγχρονης Ε/Ε (asynchronous I/O (AIO) transactions). Παράδοσης σηµάτων. Γεγονότων διεργασιών (δηµιουργία νέας διεργασίας, τερµατισµός διεργασίας, κτλ.) Κατάστασης συστήµατος αρχείων. Καθορίζει 2 ϐασικές συναρτήσεις και µια µακροεντολή: (2), kevent(2), EV_SET. int (void); int kevent(int kq, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec * timeout); EV_SET(&kev, ident, filter, flags, fflags, data, udata);

27 (2) int (void); ηµιουργεί µία νέα «ουρά γεγονότων» στον πυρήνα Επιστρέφει τον χειριστή της ουράς, -1 για σφάλµα. Οι ουρές αυτές δεν κληρονοµούνται σε διεργασίες παιδιά, εκτός και χρησιµοποιηθεί η κλήση συστήµατος rfork(2) µε κατάλληλα ορίσµατα (RFFDG).

28 kevent(2) int kevent(int kq, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec * timeout); Χρησιµοποιείται τόσο για να προσθέσει γεγονότα προς παρακολούθηση στην ουρά γεγονότων, όσο και για να ελέγξει για καινούρια συµβάντα. Αρχικά εφαρµόζει τις αλλαγές που περιγράφει ο µεγέθους nchanges πίνακας changelist. Κατόπιν εξετάζει για νέα συµβάντα και τα επιστρέφει στον µεγέθους nevents πίνακα eventlist. Αν το nevents είναι µηδενικό, επιστρέφει αµέσως ακόµα κι αν υπάρχει ορισµένο timeout. Περιµένει το πολύ timeout χρόνο για νέα συµβάντα. Αν το timeout είναι NULL, περιµένει για πάντα. Αν δείχνει σε µηδενικό struct timespec επιστρέφει αµέσως. Τα changelist και eventlist µπορεί να δείχνουν στον ίδιο πίνακα. Αν συµβούν πολλαπλά γεγονότα για το ίδιο «ϕίλτρο», επιστρέφονται σε µία δοµή struct kevent και όχι σε πολλές.

29 EV_SET EV_SET(&kev, ident, filter, flags, fflags, data, udata); Χρησιµοποιείται για να αρχικοποιήσει µία δοµή struct kevent. Απλά αναθέτει τα ορίσµατά της στα πεδία της δοµής. struct kevent struct kevent { uintptr_t ident; short filter; u_short flags; u_int fflags; intptr_t data; void* udata; };

30 οµή struct kevent ident: ταυτοποιεί το γεγονός. Εξαρτάται από τον τύπο του γεγονότος. Για ετοιµότητα Ε/Ε το ϑέτουµε στην τιµή του αντίστοιχου file descriptor. filter: καθορίζει τον έλεγχο που ϑα γίνεται για το γεγονός αυτό. υνατές τιµές: EVFILT_READ: έλεγχος για ύπαρξη δεδοµένων προς ανάγνωση από κάποιον file descriptor. EVFILT_WRITE: έλεγχος για δυνατότητα εγγραφής σε κάποιον file descriptor. EVFILT_SIGNAL: έλεγχος για παράδοση σηµάτων στη διεργασία. EVFILT_AIO, EVFILT_VNODE, EVFILT_PROC, EVFILT_TIMER, EVFILT_NETDEV. udata: δεδοµένα που καθορίζει ο χρήστης και παραµένουν ανέπαφα από τον πυρήνα. Παράδειγµα: δείκτης σε συνάρτηση που ϑα κληθεί όταν συµβεί το αντίστοιχο γεγονός. struct kevent struct kevent { uintptr_t ident; short filter; u_short flags; u_int fflags; intptr_t data; void* udata; };

31 οµή struct kevent flags: καθορίζει τις πράξεις που ϑα κάνει η συγκεκριµένη κλήση. EV_ADD: προσθέτει/ανανεώνει µία δοµή στην ουρά και την ενεργοποιεί αυτόµατα, εκτός κι αν οριστεί επίσης η τιµή EV_DISABLE. EV_ENABLE: ενεργοποιεί την παρακολούθηση ενός γεγονότος. EV_DISABLE: απενεργοποιεί την παρακολούθηση ενός γεγονότος. EV_ONESHOT: επέστρεψε το πρώτο σχετικό γεγονός από την ουρά και αφαίρεσε την αντίστοιχη δοµή από την προς παρακολούθηση ουρά. EV_CLEAR: επαναρχικοποίησε κάποιο γεγονός µετά την παράδοσή του στον χρήστη. EV_EOF: χρησιµοποιείται από κάποια «ϕίλτρα» για να υποδείξει αντίστοιχη κατάσταση EOF. EV_ERROR: σφάλµα. fflags, data: χρησιµοποιούνται για να δίνονται ορίσµατα στις συναρτήσεις των ϕίλτρων, ανάλογα την περίπτωση. Παράδειγµα: αν εξετάζουµε κάποιο socket µε ϕίλτρο EVFILT_READ και η κατεύθυνση ανάγνωσης έχει κλείσει (shutdown(2)), επιστρέφεται ο αντίστοιχος κωδικός λάθους στο fflags. Αν πρόκειται για listen socket, επιστρέφεται το πλήθος των πελατών σε αναµονή στο πεδίο data. Αν πρόκειται για κανονικό socket, επιστρέφεται το µέγεθος των διαθέσιµων δεδοµένων. struct kevent struct kevent { uintptr_t ident; short filter; u_short flags; u_int fflags; intptr_t data; void* udata; };

32 : Παράδειγµα 1 int sd, cd, kq, nevents, nch, i, nkv = 100 ; 2 struct kevent kv[100]; 3 4 sd = socket(/*... */); 5 bind(sd, /*... */); 6 listen(sd, /*... */); 7 8 kq = (); 9 10 memset(&kv, 0, nkv * sizeof(struct kevent)); 11 kv[0].ident = sd; 12 kv[0].filter = EVFILT_READ; 13 kv[0].flags = EV_ADD; 14 nch = 1; while (1) { 17 nevents = kevent(kq, kv, nch, kv, nkv, NULL); 18 nch = 0; 19 if (nevents <= 0) { /* Do something */ } 20 for (i = 0; i < nevents; i++) { 21 if (kv[i].flags & EV_EOF) { 22 close(kv[i].ident); 23 } else if (kv[i].ident == sd) { 24 cd = accept(kv[i].ident, /*... */); 26 kv[nch].ident = cd; 27 kv[nch].filter = EVFILT_READ; 28 kv[nch].flags = EV_ADD; 29 nch++; 30 } else if (kv[i].filter == EVFILT_READ) { 31 read(kv[i].ident, /*... */); 32 kv[nch].ident = cd; 33 kv[nch].filter = EVFILT_READ; 34 kv[nch].flags = EV_DELETE; 35 nch++; 36 kv[nch].ident = cd; 37 kv[nch].filter = EVFILT_WRITE; 38 kv[nch].flags = EV_ADD; 39 nch++; 40 } else if (kv[i].filter == EVFILT_WRITE) { 41 write(kv[i].ident, /*... */); 42 kv[nch].ident = cd; 43 kv[nch].filter = EVFILT_WRITE; 44 kv[nch].flags = EV_DELETE; 45 nch++; 46 close(kv[i].ident); 47 } else } /* error */ 50 }

33 Πρόκειται για ένα API το οποίο επιτρέπει την παραλληλοποίηση πολλών εργασιών, συµπεριλαµβανοµένης της διαχείρισης των νηµάτων µίας διεργασίας. Υποστηρίζεται µόνο στο Mac OS X, έκδοση 10.6 και µεγαλύτερη, και στο FreeBSD, έκδοση 8.1-RELEASE και µεγαλύτερη. Απαιτεί υποστήριξη και από τον compiler. Επιτρέπει την παρακολούθηση: Αρχείων, sockets, pipes, κτλ. Συναλλαγών ασύγχρονης Ε/Ε (asynchronous I/O (AIO) transactions). Timers. Γενικών γεγονότων που καθορίζονται από τον χρήστη. Επιπλέον, επιτρέπει τον ορισµό blocks: τµήµατα κώδικα που µπορούν να τρέξουν παράλληλα. Το GCD καθορίζει τότε πόσα και ποια νήµατα ϑα εκτελούνται κάθε ϕορά, ούτως ώστε η χρήση των πυρήνων του συστήµατος να είναι η ϐέλτιστη. Για περισσότερες πληροφορίες: Reference/GCD_libdispatch_Ref/

34 Στο επόµενο µάθηµα... Βασικές και προχωρηµένες αρχιτεκτονικές εξυπηρετητών. Σχεδίαση αποδοτικών εξυπηρετητών. Επιλογές υποδοχών. Προχωρηµένες τεχνικές Ε/Ε.

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

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

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

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

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

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

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

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

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

Προγραµµατισµός ικτύων Ε-01 Προγραµµατισµός ικτύων Ε-01 7η ιάλεξη ιδάσκων: Νίκος Ντάρµος [http://www.cs.uoi.gr/~ntarmos/courses/networkprogramming/] Τµήµα Πληροφορικής Πανεπιστήµιο Ιωαννίνων Στο σηµερινό µάθηµα...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εγχειρίδιο Συναρτήσεων. Socket *sopen(const int type, const int protocol, const char *host, const char *service)

Εγχειρίδιο Συναρτήσεων. Socket *sopen(const int type, const int protocol, const char *host, const char *service) Socket *sopen(const int type, const int protocol, const char *host, const char *service) Στην περίπτωση ενός client, δημιουργεί μια νέα σύνδεση και κατασκευάζει μια δομή Socket που σχετίζεται με αυτή Σε

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

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

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

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

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

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

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

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

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

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

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

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

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

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά Α. Μ. Βαθμός Σχόλια 1183 1194 1238 1239 1240 1241 - Καλή δουλειά 1242 1243 1244 1245 - Κακή χρήση συναρτήσεων. Κάνεις τον ίδιο έλεγχο και εντός και εκτός της συνάρτησης. Θα έπρεπε να έχεις βρεί ένα τρόπο

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

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

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

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

Χειρισµός Σφαλµάτων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

Χειρισµός Σφαλµάτων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση: Χειρισµός Σφαλµάτων Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Έκδοση: 2010.12.06 Σφάλµατα, Σφάλµατα, Σφάλµατα 2 εν υπάρχουν προγράµµατα χωρίς λογικά λάθη Υλοποίηση που

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

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

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

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

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

CE121 Προγραµµατισµός ΙΙ. Χρόνος εκτέλεσης. Βάνα Ντουφεξή

CE121 Προγραµµατισµός ΙΙ. Χρόνος εκτέλεσης. Βάνα Ντουφεξή CE121 Προγραµµατισµός ΙΙ Χρόνος εκτέλεσης 1 Χρόνος! Wall clock time "πραγµατικός" χρόνος εκτέλεσης! User CPU time Χρόνος εκτέλεσης εντολών της εφαρµογής πχ. άθροιση των στοιχείων ενός πίνακα! System CPU

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

Εισαγωγή στον Προγραμματισμό (με. τη C)

Εισαγωγή στον Προγραμματισμό (με. τη C) Υποχρεωτικό Μάθημα 3 ου Εξαμήνου Χειμερινό Εξάμηνο Ακ. Έτους 20 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Εισαγωγή στον Προγραμματισμό (με τη C) Διδάσκουσα: Φατούρου Παναγιώτα faturu [at] csd.uoc.gr

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 5 η Η σειριακή επικοινωνία ΙΙ 1.1 ΣΚΟΠΟΣ Σκοπός της άσκησης αυτής είναι η κατανόηση σε βάθος των λειτουργιών που παρέχονται από το περιβάλλον LabView για τον χειρισµό της σειριακής επικοινωνίας

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

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

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

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

υναµικές οµές εδοµένων

υναµικές οµές εδοµένων υναµικές οµές εδοµένων Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: υναµικές οµές εδοµένων Γενικά υναµική έσµευση Μνήµης οµή τύπου structure αυτοαναφορικές δοµές Η δήλωση typedef στη C Αναπαράσταση

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

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

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

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

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση της C είκτες Πίνακες

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

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

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

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

ΠΛΗ111. Ανοιξη 2005. Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη 2005. Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 3 ο Συνδεδεµένες Λίστες Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση ΟΑΤ λίστα Ακολουθιακή λίστα Συνδεδεµένη λίστα

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

Ιδιοκτησία Αντικειµένου

Ιδιοκτησία Αντικειµένου Software Transactional Memory H STM υποστηρίζει την εκτέλεση δοσοληψιών από τις διεργασίες, οι οποίες περιέχουν λειτουργίες που ο χρήστης θέλει να εκτελέσει στα διαµοιραζόµενα αντικείµενα. H STM εγγυάται

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

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

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

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

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) Κεφάλαιο 9.1-9.2 Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) ( ιάλεξη 19) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 1) Strings στη C Ένα string είναι µία ακολουθία αλφαριθµητικών χαρακτήρων, σηµείων στίξης κτλ. Π.χ.

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

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

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

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Καθηγητής. Γουνόπουλος Άσκηση 1 Σκοπός της εργασίας αυτής είναι η κατανόηση της εσωτερικής λειτουργίας

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

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

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

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

Προγραμματισμό για ΗΜΥ

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

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

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

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

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

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ 00497 -Δεν ελέγχετε αν η createlist εκτελλέστικε σωστά και δεν τερµατίζετε το πρόγραµµα σε διαφορετική -Σωστά βρίσκετε το σηµείο στο οποίο πρέπει να προστεθεί ο κόµβος. -Σωστά τερµατίζετε

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

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

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

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

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

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

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΗΜΙΟΥΡΓΙΑ ΔΙΕΡΓΑΣΙΑΣ WEB-SERVER ΜΕ ΝΗΜΑΤΑ (THREADS) ΣΕ LINUX ΚΑΛΟΠΗΤΑΣ ΚΩΝΣΤΑΝΤΙΝΟΣ - 4190 ΣΒΕΝΤΖΟΥΡΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ - 4086 ΔΗΜΟΚΡΙΤΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΡΑΚΗΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΞΑΝΘΗΣ

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

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

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

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

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

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

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα ΝΗΜΑΤΑ ΣΤΗ JAVA (1) Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα πρόγραµµα. Αιτία Η δυνατότητα αποµόνωσης (ή αυτονόµησης) κάποιων

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

Προγραμματισμός με BSD Sockets σε περιβάλλον Linux

Προγραμματισμός με BSD Sockets σε περιβάλλον Linux Προγραμματισμός με BSD Sockets σε περιβάλλον Linux Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, ΣΗΜΜΥ Εργαστήριο Υπολογιστικών Συστημάτων (CSLab) Απρίλιος 2016 Περίγραμμα παρουσίασης 1 Εισαγωγή 2 Δικτυακά

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

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

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Εγγραφές Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η Ανάγκη Ομαδοποίησης Πολλές φορές έχουμε πληροφορίες διαφορετικού τύπου οι οποίες όμως έχουν μεγάλη

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

Επανάληψη για τις Τελικές εξετάσεις

Επανάληψη για τις Τελικές εξετάσεις Επανάληψη για τις Τελικές εξετάσεις ( ιάλεξη 21) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Εισαγωγή Το µάθηµα EPL032 έχει ως βασικό στόχο την επίλυση προβληµάτων πληροφορικής µε την χρήση της γλώσσας προγραµµατισµού

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

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

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

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

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ οµηµένος Προγραµµατισµός Ανοιξη 5 Μάθηµα 5 ο Ουρά Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση Αφηρηµένος Τύπος εδοµένων Ουρά Υλοποίηση µε Κυκλικό Πίνακα Υλοποίηση

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 6η: Ερωτήσεις 2 Ιστοσελίδα του µαθήµατος http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm

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

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

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

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

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

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

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

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

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

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

ΚΕΦΑΛΑΙΟ Web Services

ΚΕΦΑΛΑΙΟ Web Services ΚΕΦΑΛΑΙΟ Web Services Προϋποθέσεις εγκατάστασης Web Services για το Κεφάλαιο 4.50 1. Κεφάλαιο έκδοση 4.51e build 458 ή νεότερο 2. Internet Information Server (IIS) version 6 ή νεότερος 3. Σε κάποιον υπολογιστή

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

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή υναµική έσµευση Μνήµης (συν.) Στην ενότητα αυτή θα µελετηθούν: Μια εφαρµογή συνδεδεµένων λιστών ιπλά συνδεδεµένες Λίστες ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Εφαρµογή Ζητούµενο: Πρόγραµµα που παίρνει σαν

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

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

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

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

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

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

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

Μετάδοση εδοµένων και ίκτυα υπολογιστών ΙΙ Εργαστηριακή Άσκηση 3. Σύνδεση υπολογιστών στα Windows

Μετάδοση εδοµένων και ίκτυα υπολογιστών ΙΙ Εργαστηριακή Άσκηση 3. Σύνδεση υπολογιστών στα Windows Μετάδοση εδοµένων και ίκτυα υπολογιστών ΙΙ Εργαστηριακή Άσκηση 3 Σύνδεση υπολογιστών στα Windows Όπως γνωρίζουµε από προηγούµενες τάξεις, κάθε υπολογιστής PC διαθέτει τουλάχιστον µία παράλληλη θύρα και

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

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C Τµήµα Πληροφορικής και Τηλεπικοινωνιών Περιεχόµενα Εισαγωγή Πρόγραµµα Φάσεις Υλοποίησης µε χρήση του εργαλείου DEV C + + οµή Προγράµµατος Η συνάρτηση main Μεταβλητές Τι είναι

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

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο 2010 2011 Δ. Γουνόπουλος Ι. Ιωαννίδης Άσκηση 1: Συγχώνευση Εγγραφών Δυαδικών Αρχείων Προθεσμία: 2 Μαΐου 2011, 5:00μμ

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο 2009 2010 Καθηγητής Δ. Γουνόπουλος Άσκηση 2 Σε συνέχεια της πρώτης άσκησης, σκοπός της δεύτερης εργασίας είναι η

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

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

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:

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

ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα

ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα 3.1 Η εξέλιξη των λειτουργικών συστηµάτων 3.2 Αρχιτεκτονική λειτουργικών συστηµάτων 3.3 Συντονισµός των δραστηριοτήτων του υπολογιστή 3.4 Χειρισµός ανταγωνισµού µεταξύ

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

ΠΛΗ111. Ανοιξη Μάθηµα 2 ο. Αλγόριθµοι και Αφηρηµένοι Τύποι εδοµένων. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 2 ο. Αλγόριθµοι και Αφηρηµένοι Τύποι εδοµένων. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 2 ο Αλγόριθµοι και Αφηρηµένοι Τύποι εδοµένων Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Αλγόριθµοι Ορισµός Παράδειγµα Ασυµπτωτική

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

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

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

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

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο 2016 2017 Καθηγητής Δ. Γουνόπουλος Άσκηση 1 - Προθεσμία: 9 Δεκ. 2016 Σκοπός της εργασίας αυτής είναι η κατανόηση

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

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο 2012-2013 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη Project 2012-2013 Υλοποίηση ενός chat server-client Παράδοση: 7/2/2013

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

(programming interfaceή/και application programming interface API).

(programming interfaceή/και application programming interface API). Προγραµµατισµός Ι (ΗΥ120) ιάλεξη 21: Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα - Βιβλιοθήκες Επαναχρησιµοποίηση κώδικα Μεγάλο «στοίχηµα» στην βιοµηχανία λογισµικού. Ιδανικά, δεν χρειάζεται να ξαναγράψουµε

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

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

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

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

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου 2013 Θέµα 1 (α') Η απάντηση είναι λάθος. Αν χρησιµοποιήσουµε την µακροεντολή, για παράδειγµα, στην έκφραση 24/CUBE(2) η έκφραση

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 9: Στοίβες:Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις Εφαρμογή

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

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Ταξινοµηµένες Λίστες µε δυναµική δέσµευση µνήµης Αναδροµκές συναρτήσεις ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 1 Λίστες

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

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure

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

H ΓΛΩΣΣΑ C. Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου. ηµήτρης Ψούνης

H ΓΛΩΣΣΑ C. Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου. ηµήτρης Ψούνης H ΓΛΩΣΣΑ C Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου ηµήτρης Ψούνης 2 Περιεχόµενα Μαθήµατος A. Συναρτήσεις ροής εξόδου stdout 1. Γενικά 2. Η συνάρτηση putchar() 3. Οι συναρτήσεις putc() και fputc()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΟΡΓΑΝΩΣΗ Η/Υ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΟΡΓΑΝΩΣΗ Η/Υ ΔΟΜΗ ΤΟΥ Η/Υ (PC compatibles) RAM CPU PCI Bridge PCI Bridges P2P Bridge RAM CPU PCI Bridge PCI2ISA Bridge Δομή της CPU Register file IP CPU TLB Level-1 cache RAM SP MMU

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

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

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

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

Ειδικό Τεύχος : Linux και Ηχος. Η Υποδοµή

Ειδικό Τεύχος : Linux και Ηχος. Η Υποδοµή Ειδικό Τεύχος : Linux και Ηχος Η Υποδοµή ηµήτρης Γλυνός glynos@storm.cs.unipi.gr Μάιος 2004 Linux και Ηχος, µια πονεµένη ιστορία Οδηγοί (drivers) για τις κάρτες ήχου παρέχονται παραδοσιακά από τους κατασκευαστές

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

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο 2018 2019 Καθηγητής Δ. Γουνόπουλος Άσκηση 1/2 - Προθεσμία: 18 Ιαν. 2019 Σκοπός της εργασίας αυτής είναι η κατανόηση

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

Σύνοψη Προηγούµενου. Κανονικές Γλώσσες (1) Προβλήµατα και Γλώσσες. Σε αυτό το µάθηµα. ιαδικαστικά του Μαθήµατος.

Σύνοψη Προηγούµενου. Κανονικές Γλώσσες (1) Προβλήµατα και Γλώσσες. Σε αυτό το µάθηµα. ιαδικαστικά του Μαθήµατος. Σύνοψη Προηγούµενου Κανονικές Γλώσσες () ιαδικαστικά του Μαθήµατος. Ορέστης Τελέλης telelis@unipi.gr Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς Εισαγωγή: Υπολογισιµότητα και Πολυπλοκότητα. Βασικές

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ (Κεφάλαιο 2.7 και 12) Αρχεία στην C ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 14-1 Επανάληψη στην Αποθήκευση (Storage) Για να αποθηκεύσουµε δεδοµένα από ένα πρόγραµµα, πρέπει να χρησιµοποιήσουµε την ευτερεύουσα

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

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

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

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

Ακολουθιακές εντολές. (Peter Ashenden, The Students Guide to VHDL)

Ακολουθιακές εντολές. (Peter Ashenden, The Students Guide to VHDL) Ακολουθιακές εντολές (Peter Ashenden, The Students Guide to VHDL) Εντολή If Τα βασικά χαρακτηριστικά της είναι τα εξής: Μπορεί να χρησιµοποιηθεί για τον έλεγχο µίας ή περισσοτέρων συνθηκών. Η πρώτη συνθήκη

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