Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
|
|
- Κυριακή Αλεβίζος
- 8 χρόνια πριν
- Προβολές:
Transcript
1 ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος Επαναληπτική Εξέταση Λύσεις Το παρόν περιγράφει πλήρη λύση των θεμάτων, με σύντομες απαντήσεις. Για να βοηθήσει στην καλύτερη κατανόηση των απαντήσεων, προσφέρει αναλυτική επεξήγησή τους, η οποία δεν ήταν απαραίτητη για να θεωρείται τέλεια η λύση. Θέμα 1 (40%) Συμμετέχετε σε ομάδα που σχεδιάζει και υλοποιεί ενσωματωμένο σύστημα Linux το οποίο ελέγχει την αναπαραγωγή μουσικής στο ηχοσύστημα MEGA BLASTER. Ο ήχος αναπαριστάται ως μονοφωνικό ρεύμα δειγμάτων PCM, 8-bit, με ρυθμό δειγματοληψίας 22kHz. Θεωρήστε τον οδηγό συσκευής για το υλικό αναπαραγωγής ήχου ( κάρτα ήχου ) σε ΛΣ Linux. Από την πλευρά των διεργασιών ισχύουν τα εξής: 1. Μια διεργασία μπορεί να παίξει μουσική ανοίγοντας ειδικό αρχείο συσκευής χαρακτήρων /dev/audio και γράφοντας σε αυτό. 2. Δεν επιτρέπονται περισσότερα του ενός ανοιχτά αρχεία από το /dev/audio. Προσπάθεια για δεύτερο άνοιγμά του πρέπει να επιστρέφει κωδικό λάθους EBUSY (Device or Resource Busy). Το υλικό προσφέρει μόνο δύο καταχωρητές προσβάσιμους από τον οδηγό: Καταχωρητής SND_HW_READY, πλάτους char: Έχει τιμή 1 όταν η κάρτα ήχου μπορεί να δεχτεί δείγμα PCM προς αναπαραγωγή. Γίνεται 0 για όσο διάστημα η κάρτα ήχου είναι απασχολημένη. Καταχωρητής SND_HW_PCM, πλάτους char: Ο οδηγός γράφει εδώ ένα 8-bit δείγμα PCM προς αναπαραγωγή, αρκεί να ισχύει SND_HW_READY == 1.
2 1 struct sound_dev_struct { 2 struct semaphore lock; } sound; 5 6 void hw_output_pcm(char val) 7 { 8 while (!inb(snd_hw_ready)) 9 ; 10 outb(val, SND_HW_PCM); 11 } void hw_output_buffer(const char *buf, int len) 14 { 15 int i; for (i = 0; i < len; i++) 18 hw_output_pcm(buf[i]); 19 } int snd_chrdev_open(struct inode *inode, struct file *filp) 22 { 23 filp->private_data = &sound; } static ssize_t snd_chrdev_write(struct file *filp, const char user *usrbuf, 28 size_t cnt, loff_t *f_pos) 29 { 30 #define WRITE_BUF_SZ char tmpbuf[write_buf_sz]; 32 struct sound_dev_struct *sd = filp->private_data; if (down_interruptible(&sd->lock)) 35 return -ERESTARTSYS; hw_output_buffer(tmpbuf, n); up(&sd->lock); return cnt; 42 } Σας δίνεται σκελετός αρχικής υλοποίησης του οδηγού, ο οποίος περιέχει: inb(port), outb(val, port): Μακροεντολές που χρησιμοποιούνται για πρόσβαση στους καταχωρητές υλικού. Κάνουν Ε/Ε από και προς το χώρο διευθύνσεων Ε/Ε ( ports ) εκτελώντας απευθείας τις αντίστοιχες ειδικές εντολές του επεξεργαστή, π.χ. IN, OUT για τον x86. hw_output_pcm(val), hw_output_buffer(buf, len): Συναρτήσεις οι οποίες χρησιμοποιούν τις inb(), outb() για να στείλουν στην κάρτα ήχου ένα δείγμα PCM κι έναν ολόκληρο απομονωτή με δείγματα PCM, αντίστοιχα. snd_chrdev_write(...): H μέθοδος write() του οδηγού συσκευής, η οποία βασίζεται στην hw_output_buffer().
3 Θεωρήστε ότι ο οδηγός εκτελείται σε σύστημα Linux όπου δεν θα υποστεί ποτέ context switch μια διεργασία όταν βρίσκεται σε κατάσταση πυρήνα (non-preemptible kernel). Κάντε όποιες επεμβάσεις επιθυμείτε στο σκελετό, αρκεί να τις περιγράψετε με ακρίβεια. Ζητούνται τα εξής: i. (3%) Υλοποιήστε την snd_chrdev_open(). Πώς καλύπτει ο οδηγός σας την προδιαγραφή 2; ii. (5%) Περιγράψτε σενάριο που οδηγεί στο να έχουν δύο διαφορετικές διεργασίες πρόσβαση σε ανοιχτό αρχείο από το /dev/audio, ταυτόχρονα. Πώς εξασφαλίζεται η ασφαλής χρήση του οδηγού σας αν κι οι δύο επιχειρήσουν write() και τι θα ακουστεί από τα ηχεία; Γιατί το πεδίο lock είναι τύπου struct semaphore; iii. (3%) Σε τι κατάσταση βρίσκεται μια διεργασία ακριβώς όταν εκτελεί κλήση συστήματος write() στον οδηγό σας και από ποιες καταστάσεις περνάει μέχρι την επιστροφή της write(); iv. (4%) Πόσο χρόνο χρειάζεται η hw_output_buffer() για να στείλει στην κάρτα ήχου έναν απομονωτή μήκους 33kB; Η υλοποίηση της snd_chrdev_write() με χρήση της hw_output_buffer() είναι ακατάλληλη για χρήση σε πραγματικό σύστημα, για να υποστηρίξει π.χ. διεργασία mp3player. Γιατί; i. Η υλοποίηση της snd_chrdev_open() ακολουθεί. Ο οδηγός καλύπτει την προδιαγραφή με μια σημαία opened στη συσκευή, η οποία τίθεται την πρώτη φορά που κάποια διεργασία ανοίγει τη συσκευή. Η σημαία προστατεύεται από το κλείδωμα lock, ως μέρος της δομής struct sound_dev_struct. Υποθέτουμε ότι η snd_chrdev_release() επαναφέρει τη σημαία στο 0 όταν απελευθερώνεται το αντίστοιχο struct file. ii. Μια διεργασία ανοίγει το /dev/audio και μετά κάνει fork(). Αυτή και το παιδί της μοιράζονται το ίδιο ανοιχτό αρχείο (struct file). Ο οδηγός εξασφαλίζει ασφαλή χρήση κλειδώνοντας το κρίσιμο τμήμα (κλήση της hw_output_buffer() από την write()) με σημαφόρο lock. To πεδίο lock είναι σημαφόρος γιατί μόνο κλήσεις της write() συναγωνίζονται γι αυτό, οπότε κάθε προσπάθεια κλειδώματός του γίνεται από process context, οπότε ο καλών μπορεί να κοιμηθεί. Αν δύο διεργασίες επιχειρήσουν write() ταυτόχρονα, πρώτα θα ακουστεί ολόκληρος ο buffer της μίας, και μετά ο buffer της άλλης, γιατί μία από τις δύο θα μπλοκάρει προσπαθώντας να κλειδώσει το lock. iii. Αρχικά είναι RUNNING, ακριβώς γιατί εκτελεί κλήση συστήματος. Μπορεί να πάει σε WAITING περιμένοντας να μπει στο κρίσιμο τμήμα (γρ. 34) ή κατά την copy_from_ user() που υποθέτουμε πώς συμβαίνει για να γεμίσει τον τοπικό tmpbuf[]. Μέσα στο κρίσιμο τμήμα, η hw_output_val() εκτελεί busy waiting μέχρις ότου το υλικό είναι έτοιμο για να δεχτεί το επόμενο δείγμα PCM. Άρα η αλληλουχία snd_chrdev_ write() hw_output_buffer() hw_output_val() οδηγεί στο να παραμείνει η διεργασία RUNNING, κάνοντας busy-waiting μέσα στον πυρήνα. Επειδή ο πυρήνας είναι non-preemptive, αποκλείεται να γίνει READY όσο είναι μέσα σε αυτόν. iv. Ο buffer έχει μήκος δείγματα. Υποθέτουμε ότι όταν ένα δείγμα δοθεί στην κάρτα ήχου (γρ. 10) αυτή μένει SND_HW_READY == 0 για όσο χρόνο απαιτεί η αναπαραγωγή του, δηλαδή 1/22000sec, διάστημα κατά το οποίο η hw_output_buffer() κάνει busy waiting. Άρα, χρειάζεται 1.5sec για να στείλει ολόκληρο τον απομονωτή. Η υλοποίηση είναι ακατάλληλη γιατί κρατάει κατειλημμένο τον επεξεργαστή εκτελώντας busy wait μέσα στον πυρήνα. Σε μονοεπεξεργαστικό σύστημα, αυτό θα σήμαινε ότι
4 για να μπορεί μια διεργασία να παίζει συνεχώς μουσική, θα έπρεπε να κρατάει το 100% του επεξεργαστή, χωρίς καμία άλλη να μπορεί να εκτελεστεί. 1 int snd_chrdev_open(struct inode *inode, struct file *filp) 2 { 3 struct sound_dev_struct *sd = &sound; 4 5 if (down_interruptible(&sd->lock)) 6 return -ERESTARTSYS; 7 if (sd->opened) { 8 up(&sd->lock); 9 return -EBUSY; 10 } 11 sd->opened = 1; 12 up(&sd->lock); filp->private_data = sd; return 0; 17 } Λόγω ακαταλληλότητας της υλοποίησης, η ομάδα σας αποφασίζει να προχωρήσει σε επέκταση του υλικού ώστε να υποστηρίζει διακοπές. Η κάρτα ήχου προκαλεί διακοπή υλικού κάθε φορά που ο καταχωρητής SND_HW_READY μεταβαίνει 0 1. Επιπλέον, η σχεδίαση του οδηγού αλλάζει ώστε η υλοποίηση της μεθόδου write() να εκτελεί ενδιάμεση αποθήκευση των δεδομένων σε κυκλικό απομονωτή. Τα δεδομένα προωθούνται από τον κυκλικό απομονωτή στην κάρτα ήχου όταν χρειάζεται. 1 struct sound_dev_struct { 2 struct semaphore lock; 3 uint128_t wcnt, rcnt; /* TOTAL number of bytes read/written, from/to the 4 circular buffer. They are initialized to zero, 5 and will never wrap. */ 6 #define CIRC_BUF_SIZE (1024 * 1024) 7 char circ_buffer[circ_buf_size]; } sound; static void snd_hw_intr(void) 12 { 13 struct sound_dev_struct *sd = &sound; if (...the circular buffer contains data...) 16 if (inb(snd_hw_ready)) 17 hw_output_pcm(...) } static ssize_t snd_chrdev_write(struct file *filp, const char user *usrbuf, 22 size_t cnt, loff_t *f_pos) 23 { } 26
5 Σας δίνεται βελτιωμένος σκελετός υλοποίησης του οδηγού, ο οποίος περιέχει συνάρτηση χειρισμού διακοπών υλικού snd_hw_intr() και κυκλικό απομονωτή (circular buffer) με χρήση πεδίων rcnt, wcnt, circ_buf. Ζητούνται τα εξής: v. (5%) Υλοποιήστε την συνάρτηση χειρισμού διακοπών υλικού snd_hw_intr(). Κάντε όσες αλλαγές/προσθήκες χρειάζονται στη δομή sound_dev_struct ώστε να καλύπτεται η νέα σχεδίαση. vi. (10%) Υλοποιήστε πλήρως τη μέθοδο snd_chrdev_write(). Στον οδηγό σας, όταν η κάρτα ήχου είναι ανενεργή, ποιο μέρος του προκαλεί την έναρξη της αναπαραγωγής ήχου; vii. (5%) Σε τι κατάσταση βρίσκεται μια διεργασία ακριβώς όταν εκτελεί κλήση συστήματος write() στον οδηγό σας και από ποιες καταστάσεις περνάει μέχρι την επιστροφή της write(); viii. (5%) Με ποιον τρόπο βοηθάει η υποστήριξη διακοπών την καλύτερη λειτουργία του οδηγού σας; Με τι ρυθμό γίνονται διακοπές υλικού; Πολύ συνοπτικά, προτείνετε πιθανή αλλαγή στο υλικό και στον οδηγό ώστε να βελτιωθεί κι άλλο η λειτουργία του συστήματος. Η γενική ιδέα είναι: Η snd_chrdev_write() αντιγράφει τα δεδομένα στον κυκλικό απομονωτή και επιστρέφει αμέσως. Στη συνέχεια ο χειριστής διακοπών μπορεί να τροφοδοτεί την κάρτα ήχου με αυτά, δείγμα-δείγμα, κάθε φορά που έχουμε μετάβαση 0 1 για τον καταχωρητή SND_HW_READY. Αν δεν υπάρχει διαθέσιμος χώρος στον απομονωτή, η snd_chrdev_write() κοιμίζει τη διεργασία μέχρις ότου δημιουργηθεί χώρος. Αυτό είναι η λογική επιλογή: Σίγουρα μια διεργασία μπορεί να παραγάγει δεδομένα ήχου πολύ γρηγορότερα απ ότι η κάρτα ήχου τα επεξεργάζεται ( bytes/sec), οπότε στο ενδιάμεσο η διεργασία είναι WAITING κι ο επεξεργαστής ελεύθερος. Οπότε: v. Η υλοποίηση της snd_hw_intr() ακολουθεί. Αλλάζουμε το κλείδωμα σε spinlock, δεδομένου ότι και η snd_chrdev_write() και ο interrupt handler συναγωνίζονται για αυτό και προσθέτουμε δομή waitqueue, ώστε ο interrupt handler να μπορεί να ξυπνά τις διεργασίες που κοιμούνται περιμένοντας να απελευθερωθεί χώρος στον κυκλικό buffer. vi. Η υλοποίηση της snd_chrdev_write() ακολουθεί. Όταν η κάρτα ήχου είναι ενεργή (παίζει κάποιο δείγμα, SND_HW_READY == 0), ο χειριστής διακοπών είναι η οντότητα που θα ενεργοποιηθεί όταν γίνει SND_HW_READY == 1 για να την τροφοδοτήσει με το επόμενο δείγμα. Αρχικά όμως, η κάρτα είναι SND_HW_READY == 1 και η snd_chrdev_ write() είναι αυτή που γράφει το πρώτο δείγμα, για να ξεκινήσει τη διαδικασία. vii. Όταν εκτελεί τη write() είναι RUNNING. Αν υπάρχει διαθέσιμος χώρος στον κυκλικό απομονωτή, παραμένει RUNNING, αντιγράφει τα δείγματα προς αναπαραγωγή κι επιστρέφει. Αν δεν υπάρχει, πηγαίνει σε WAITING (γρ. 68) μέχρι να απελευθερωθεί χώρος, οπότε την ξυπνά ο interrupt handler (γρ. 12), οπότε ξαναγίνεται RUNNING για να γράψει στον κυκλικό buffer. viii. Δεδομένου ότι κάθε δείγμα χρειάζεται 1/22000sec για την αναπαραγωγή του, η υποστήριξη διακοπών επιτρέπει στον επεξεργαστή να ασχολείται με άλλα πράγματα στο
6 ενδιάμεσο, αντί να κάνει busy wait πάνω στον καταχωρητή SND_HW_READY. Και πάλι ωστόσο, έχουμε μία διακοπή ανά δείγμα, διακοπές/sec. Το πρόβλημα είναι ότι και πάλι πρέπει να εμπλέκεται ο επεξεργαστής για κάθε δείγμα, ώστε να το αντιγράφει στην κάρτα (hw_output_val(), Programmable I/O PIO). Η σχεδίαση αυτή δεν μπορεί να κλιμακωθεί σε πολλές κάρτες και μεγαλύτερο ρυθμό δειγματοληψίας (ποιότητα CD). Η λύση είναι η ίδια η κάρτα να υποστηρίζει να διαβάζει απευθείας τα δείγματα από τη μνήμη (Direct Memory Access - DMA), οπότε θα προκαλεί μόνο μία διακοπή όταν έχει εξαντλήσει έναν ολόκληρο buffer, π.χ. 64kB. 1 static void snd_hw_intr(void) 2 { 3 #define BYTES_IN_BUFFER(sd) ((sd)->wcnt - (sd)->rcnt) 4 struct sound_dev_struct *sd = &sound; 5 unsigned long flags; 6 7 spin_lock_irqsave(&sd->lock, flags); 8 if (BYTES_IN_BUFFER(sd)) { /* buffer contains data */ 9 if (inb(snd_hw_ready)) { 10 hw_output_pcm(sd->circ_buffer[sd->rcnt % CIRC_BUF_SIZE]); 11 ++sd->rcnt; 12 wake_up_interruptible(&sd->wq); 13 } else { 14 /* 15 * lost the race with write(), the sound card will cause 16 * another interrupt when SND_HW_READY becomes 1 again. 17 */ 18 } 19 } 20 spin_lock_irqrestore(&sd->lock, flags); 21 } static ssize_t snd_chrdev_write(struct file *filp, const char user *usrbuf, 24 size_t cnt, loff_t *f_pos) 25 { 26 #define WRITE_BUF_SZ #define FREE_BYTES_IN_BUFFER(sd) (CIRC_BUF_SIZE - BYTES_IN_BUFFER(sd)) size_t i, free; 30 char tmpbuf[write_buf_sz]; 31 unsigned long flags; 32 struct sound_dev_struct *sd = filp->private_data; /* Bring up to WRITE_BUF_SZ bytes into the buffer on the stack */ 35 if (cnt > WRITE_BUF_SZ) 36 cnt = WRITE_BUF_SZ; 37 if (copy_from_user(tmpbuf, userbuf, cnt)) 38 return -EFAULT; /* Lock the device structure, copy data into the circular buffer */ 41 retry: 42 spin_lock_irqave(&sd->lock, flags); 43 /* Got room in the buffer? */ 44 free = FREE_BYTES_IN_BUFFER(sd); 45 if (!free) 46 goto wait_retry; 47
7 48 if (cnt > free) 49 cnt = free; for (i = 0; i < cnt; i++) { 52 sd->circ_buffer[sd->wcnt % CIRC_BUF_SIZE] = tmpbuf[i]; 53 ++sd->wcnt; 54 } /* If the sound card is not already playing, start it */ 57 if (inb(snd_hw_ready)) { 58 hw_output_pcm(sd->circ_buffer[sd->rcnt % CIRC_BUF_SIZE]); 59 ++sd->rcnt; 60 wake_up_interruptible(&sd->wq); 61 } 62 spin_unlock_irqrestore(&sd->lock, flags); return i; wait_retry: 67 spin_unlock_irqrestore(&sd->lock, flags); 68 if (wait_event_interruptible(sd->wq, FREE_BYTES_IN_BUFFER(sd))) 69 return -ERESTARTSYS; 70 goto retry; 71 } Σχετικοί σύνδεσμοι: Το υλικό που περιγράφεται είναι πολύ κοντά στην πραγματική κάρτα ήχου Sound Blaster, η οποία κυριαρχούσε στην αγορά στις αρχές της δεκαετίας του 90. Ακόμη και σήμερα, ο πυρήνας του Linux περιέχει οδηγό συσκευής για 8-bit SB. Δείτε: Wikipedia: Οδηγίες προγραμματισμού, που περιλαμβάνουν busy waiting, interrupt-based PIO, και DMA: Οδηγός 8-bit Sound Blaster στο Linux: Χαμηλού επιπέδου περιγραφή των I/O ports στον x86: Θέμα 2 (35%) Συμμετέχετε σε ομάδα που σχεδιάζει και υλοποιεί ένα εξειδικευμένο υποσύστημα αποδοτικής επικοινωνίας ανάμεσα σε διεργασίες που εκτελούνται σε διαφορετικές εικονικές μηχανές (VMs), επάνω στο ίδιο φυσικό μηχάνημα. Οι απαιτήσεις αναφέρουν ρητά ότι το μοναδικό σενάριο χρήσης του συστήματος αφορά ακριβώς δύο εικονικές μηχανές (στο ίδιο φυσικό μηχάνημα) και ακριβώς δύο διεργασίες (μία διεργασία σε κάθε εικονικό μηχάνημα), οι οποίες επικοινωνούν μέσω αμφίδρομου, αξιόπιστου ρεύματος χαρακτήρων που παρέχεται από τον μηχανισμό σας. Η πλατφόρμα εικονικοποίησης που θα χρησιμοποιήσετε είναι QEMU/KVM σε ΛΣ Linux.
8 Στο σύστημα Εισόδου/Εξόδου θα χρησιμοποιήσετε το VirtIO split-driver model (frontendbackend). Οι διεργασίες μέσα στα VMs χρησιμοποιούν κλήσεις open(), read(), write(), close() για τη χρήση του μηχανισμού. Οι εικονικές μηχανές QEMU χρησιμοποιούν UNIX domain sockets για διαδιεργασιακή επικοινωνία. Απαντήστε στα ακόλουθα: i. (10%) Περιγράψτε συνοπτικά την αρχιτεκτονική που προτείνετε. Σχεδιάστε ένα σχήμα στο οποίο θα φαίνονται τα διαφορετικά κομμάτια του συστήματός σας και η κατανομή τους στο λογισμικό και στο υλικό του φυσικού και των εικονικών μηχανημάτων. Δείξτε την επικοινωνία μεταξύ τους. ii. (10%) Περιγράψτε με ακρίβεια ένα παράδειγμα χρήσης του συστήματός σας, για την αποστολή ενός μηνύματος (π.χ., ping ) από τη μία διεργασία στην άλλη. Περιγράψτε την αλληλουχία κλήσεων, όλα τα διαφορετικά στρώματα από τα οποία περνάει το μήνυμα και τον τρόπο επικοινωνίας ανάμεσά τους, στο εικονικό και στο φυσικό μηχάνημα. Πώς ενεργοποιείται το επόμενο τμήμα του μονοπατιού σε κάθε περίπτωση; iii. (5%) Έστω ότι η διεργασία Α του εικονικού μηχανήματος VM1 στέλνει ένα block δεδομένων στη διεργασία Β του εικονικού μηχανήματος VM2. Πόσες αντιγραφές αυτού του block θα γίνουν σε ολόκληρο το μονοπάτι A B και από ποιο μέρος σε ποιο, κάθε φορά; iv. (5%) Ενώ βρίσκεστε στη φάση παράδοσης και έχετε ήδη υλοποιήσει το σύστημα και τις διεργασίες ελέγχου (test cases), σας ειδοποιούν επειγόντως ότι άλλαξε μια βασική απαίτηση του συστήματος: οι εικονικές μηχανές θα βρίσκονται σε δύο διαφορετικά φυσικά μηχανήματα, τα οποία συνδέονται δικτυακά μεταξύ τους. Χρειάζεται να κάνετε αλλαγές στην αρχιτεκτονική του συστήματός σας και γιατί; Αν ναι, ποιες είναι αυτές και ποια μέρη του συστήματος θα μείνουν ανεπηρέαστα; Τα test cases χρειάζονται αλλαγή και γιατί; v. (5%) Στην περίπτωση όπου τα VMs είναι σε διαφορετικά φυσικά μηχανήματα και ανταλλάσσονται ευαίσθητα δεδομένα ανάμεσα στις διεργασίες, προκύπτει η ανάγκη για κρυπτογράφησή τους. Σε ποιο/α μέρος/η του συστήματος θα προσθέτατε τη λειτουργικότητα αυτή και πώς επηρεάζονται τα test cases; i. Στο ακόλουθο σχήμα φαίνεται η προτεινόμενη αρχιτεκτονική. Το σύστημα υλοποιείται ως οδηγός συσκευής στον πυρήνα της εικονικής μηχανής ( frontend ) και στο hardware της εικονικής μηχανής, μέσα στη διεργασία του QEMU, στο χώρο χρήστη του φυσικού μηχανήματος ( backend ). Τα μέρη frontend, backend μπορούν να ανταλλάσσουν δεδομένα μέσω ουράς σε μνήμη μοιραζόμενη ανάμεσά τους ( virtqueue ). Τα δύο backends επικοινωνούν μεταξύ τους μέσω UNIX domain sockets. Η χρήση τους εμπλέκει τον πυρήνα του φυσικού μηχανήματος, καθώς από την πλευρά του δύο διεργασίες QEMU επικοινωνούν μέσω UNIX domain sockets εκτελώντας κλήσεις συστήματος connect(), listen(), bind(), accept(), read(), write(), close(). ii. Στα επόμενα υποθέτουμε ότι η διεργασία A στέλνει σύντομο μήνυμα, π.χ. ping στη B. Υποθέτουμε ότι το VM2 αρχικοποιεί το UNIX domain socket και είναι έτοιμο να δεχτεί συνδέσεις (listen(), accept()), ενώ το VM1 συνδέεται σε αυτό (connect()). Αρχικά, η Β ανοίγει με open("/dev/comm",...) το ειδικό αρχείο της συσκευής μέσα
9 QEMU Process 1 QEMU Process 2 VM1 Process A VM2 Process B User open(), read(), write(), close() User open(), read(), write(), close() /dev/comm /dev/comm Kernel VirtIO frontend driver Kernel VirtIO frontend driver Hardware (QEMU) Hardware (QEMU) VirtIO ring buffer VirtIO ring buffer QEMU (VirtIO backend) QEMU (VirtIO backend) User connect(), read() write() on socket socket layer listen(), accept(), read(), write() on socket Kernel Hardware στο VM. Ο οδηγός (frontend) περνά κατάλληλο μήνυμα ελέγχου στο backend με το οποίο ζητά την αρχικοποίηση της επικοινωνίας, μέσω της virtqueue. Η B μπλοκάρει (WAITING) μέσα στην open()\. Το backend αρχικοποιεί το UNIX domain socket (socket(), bind(), listen()) και μπλοκάρει μέχρι να συνδεθεί το VM1 εκεί. Ομοίως, η διεργασία Α ανοίγει το ειδικό αρχείο του οδηγού μέσα στο VM, ο οδηγός περνά αντίστοιχο μήνυμα ελέγχου στο backend του VM1 και το VM1 συνδέεται στο UNIX domain socket του VM2 (connect(). Όταν αυτό συμβεί, η connect() του VM1 επιστρέφει, η accept() του VM2 επιστρέφει και τα δύο backends ενημερώνουν τα αντίστοιχα frontends μέσω της virtqueue (virtual interrupt στο VM), οπότε οι A, B γίνονται READY και οι κλήσεις open() τελικά επιστρέφουν. Για την αποστολή του μηνύματος, η A εκτελεί write(fd, "ping", 4), το frontend γράφει το μήνυμα στη virtqueue, ενεργοποιεί το backend του VM1, το οποίο κάνει write() στο socket. Αυτό ενεργοποιεί το ξεμπλοκάρισμα της αντίστοιχης κλήσης read() του VM2, το backend γράφει τα δεδομένα στη virtqueue του VM2, προκαλεί virtual interrupt, το frontend το χειρίζεται και αντιγράφει τα εισερχόμενα δεδομένα σε kernelspace buffer στο VM2. Αν η διεργασία Β έχει ήδη μπλοκάρει εκτελώντας read(fd,...), το frontend την κάνει READY ώστε να επεξεργαστεί το εισερχόμενο μήνυμα. Στα προηγούμενα υποθέτουμε ότι η υλοποίηση του backend στο VM χρησιμοποιεί χωριστό νήμα το οποίο μπλοκάρει σε κλήση read() από το UNIX domain socket. Ακολουθούν τα τμήματα του μονοπατιού Α B. Ο τρόπος ενεργοποίησης του επόμενου τμήματος σημειώνεται μέσα στις παρενθέσεις: i Διεργασία Α frontend VM1 (system call), ii frontend VM1 backend VM1, μέσω virtqueue (virtqueue_kick(), εγγραφή σε memory-mapped I/O space που προκαλεί trap στο QEMU), iii backend VM1 πυρήνας host (write() στο UNIX domain socket), iv πυρήνας host backend VM2 (ξύπνημα νήματος QEMU από πυρήνα host), v backend VM2 frontend VM2 (σήμα προς QEMU thread, εικονικό interrupt μέσα στο VM), vi frontend VM2 διεργασία B (ξύπνημα διεργασίας Β από πυρήνα guest). iii. Στο πρώτο μισό της διαδρομής γίνεται ένα αντίγραφο από userspace της Α στο ker-
10 nelspace του VM1 και ένα αντίγραφο από τη virtqueue του VM1 (userspace του QEMU process της VM1) προς το kernelspace του host (buffers του UNIX domain socket). Στο μονοπάτι από το frontend (virtqueue) στο backend δε γίνεται αντιγραφή, αλλά περνιέται η διεύθυνση του buffer, καθώς η διεργασία QEMU έχει απευθείας πρόσβαση στις αντίστοιχες θέσεις μνήμης. Στο δεύτερο μισό της διαδρομής (VM2) γίνονται τα ίδια αντίγραφα, σε αντίστροφη σειρά. iv. Αποφασίζουμε να χρησιμοποιήσουμε TCP/IP sockets αντί για UNIX domain sockets για την επικοινωνία ανάμεσα στα δύο backends. Οι απαιτούμενες αλλαγές περιορίζονται μόνο στον κώδικα του backend, το οποίο πλέον αρχικοποιεί PF_INET sockets αντί για PF_UNIX sockets και διευθύνσεις TCPv4 (διεύθυνση IPv4, αριθμός θύρας TCP) αντί για ονόματα αρχείων στο τοπικό filesystem. Ο κώδικας του frontend και των διεργασιών παραμένει ίδιος. v. Ομοίως, επεκτείνουμε τον κώδικα του backend ώστε να κρυπτογραφεί και να αποκρυπτογραφεί τα δεδομένα πριν και μετά το πέρασμά τους από τη σύνδεση TCP, αντίστοιχα. Ο κώδικας που εκτελείται μέσα στο VM (frontend, διεργασίες) δεν ξέρει τίποτε για την αλλαγή και παραμένει ίδιος. Η επικοινωνία backend frontend και frontend διεργασίας δεν επηρεάζεται από την αλλαγή του υφιστάμενου τρόπου επικοινωνίας. Θέμα 3 (25%) α. (15%) Ένας φίλος σας, σας τηλεφωνεί γιατί το παιχνίδι pongman στο σύστημα του έχει κρεμάσει (hang), δηλαδή δεν αποκρίνεται πλέον σε είσοδο από το χρήστη (ποντίκι, πληκτρολόγιο). Το σύστημα έχει έναν επεξεργαστή και τρέχει Linux. Απαντήστε στα εξής: i. (3%) Με την καθοδήγησή σας, εκτελεί την εντολή strace -p 1234, όπου 1234 το PID του pongman. Η εντολή δεν παράγει τίποτε στην έξοδό της. Τι σημαίνει αυτό για τη διεργασία 1234; Υπόδειξη: Θεωρήστε ότι κατά την εκκίνησή της η strace εκτυπώνει την κλήση συστήματος μέσα στην οποία μπορεί να βρίσκεται η διεργασία. ii. (3%) Σε τι κατάσταση (process state) βρίσκεται η διεργασία 1234; Πόσο είναι το CPU load του μηχανήματος; iii. (2%) Δώστε σύντομο ενδεικτικό κώδικα σε Assembly που θα μπορούσε να έχει συμπεριφορά ανάλογη με αυτή του pongman εκείνη τη στιγμή. Θα μπορούσε η δυσλειτουργία της διεργασίας 1234 να κάνει μη-αποκρίσιμο ολόκληρο το σύστημα; Γιατί; i. Η strace δεν παράγει τίποτε στην έξοδό της, γιατί η διεργασία 1234 δεν ήταν μέσα σε system call όταν ξεκίνησε η strace και δεν εκτελεί κανένα system call. Αυτό σημαίνει ότι η διεργασία εκτελεί αποκλειστικά υπολογισμό και δεν τελειώνει ποτέ το CPU burst. Πιθανότατα έχει bug και έχει κολλήσει σε κάποιο infinite loop. Σχετικός σύνδεσμος: με την διευκρίνηση ότι η άσκηση θεωρεί ότι η strace δείχνει αρχικά και το τρέχον system call.
11 ii. Η διεργασία εκτελεί CPU burst, η κατάστασή της εναλλάσσεται από RUNNING σε READY και αντίστροφα. Το CPU load είναι 100%. iii. Ως προς το ΛΣ, η διεργασία εκτελεί το ισοδύναμο του L1: JMP L1. Το infinite loop στο οποίο έχει πέσει η 1234 δεν επηρεάζει το υπόλοιπο σύστημα γιατί η 1234 διακόπτεται κανονικά από timer interrupts, τρέχει ο χρονοδρομολογητής κι επιτρέπει σε άλλες διεργασίες να τρέξουν. Μια άλλη μέρα: iv. (2%) Ο φίλος σας παρατηρεί ότι το pongman, ενώ λειτουργεί κανονικά, εμφανίζει μικρές καθυστερήσεις κατά την εκτέλεσή του (lag), γιατί παράλληλα τρέχει ένα πρόγραμμα συμπίεσης σε MP3, μια υπολογιστικά απαιτητική διαδικασία. Γιατί έχει lag το pongman; v. (5%) Για να διορθώσει την κατάσταση, ο φίλος σας αναθέτει τη μέγιστη δυνατή απόλυτη προτεραιότητα χρονοδρομολόγησης στη διεργασία του pongman. Τι θα συμβεί αν η διεργασία δυσλειτουργήσει όπως στα (i) (iii); Τι πρέπει να έχει κάνει ο φίλος σας για να μπορεί να αντιμετωπίσει αυτό το ενδεχόμενο; iv. Το pongman έχει lag γιατί συναγωνίζεται για χρόνο στη CPU με τα νήματα του MP3 encoder, που είναι μονίμως σε CPU burst, οπότε μπορεί να πρέπει να περιμένει αρκετά κβάντα χρόνου για να τρέξει. v. Αν το pongman έχει μέγιστη απόλυτη προτεραιότητα, καμία άλλη διεργασία δεν μπορεί να τη διακόψει, συμπεριλαμβανομένου του φλοιού του χρήστη, οπότε όλο το σύστημα θα είναι μη-αποκρίσιμο. Μια λύση θα ήταν ο φίλος σας να κρατά πάντοτε έναν φλοιό με μεγαλύτερη προτεραιότητα από κάθε άλλη διεργασία, ώστε να έχει τον έλεγο (π.χ. να τη σκοτώσει) αν χρειαστεί. Σχετικός σύνδεσμος: β. (10%) Εκτελούμε την εντολή ls -l grep string > file1 στο φλοιό του UNIX. Απαντήστε στα εξής: i. (2%) Σε ποιον περιγραφητή αρχείου γράφει η διεργασία του ls; Από ποιον περιγραφητή αρχείου διαβάζει η διεργασία του grep; ii. (3%) Ποια διεργασία ανοίγει το αρχείο file1 και με ποιες παραμέτρους; iii. (5%) Μια δική σας διεργασία επιθυμεί να εκτελέσει την εντολή ls και να αποκτήσει τη συνολική έξοδό της στη μνήμη της, π.χ., σε απομονωτή buf[]. Περιγράψτε την αλληλουχία κλήσεων συστήματος για να το επιτύχει αυτό, χωρίς κανενός είδους ενδιάμεση αποθήκευση στο σύστημα αρχείων. Αν σας εξυπηρετεί, δώστε ψευδοκώδικα. i. Η διεργασία του ls γράφει στον περιγραφητή 1 (καθιερωμένη έξοδος) κι η διεργασία του grep διαβάζει από τον περιγραφητή 0 (καθιερωμένη είσοδος).
12 ii. Η διεργασία του φλοιού ανοίγει το file1, αφού κάνει ανάλυση της γραμμής εντολών και δει ότι ο χρήστης ζήτησε ανακατεύθυνση της εξόδου του grep στο αρχείο αυτό. Εκτελεί την κλήση open() με παραμέτρους flags == O_WRONLY O_TRUNC O_CREAT και mode == iii. Η διεργασία δημιουργεί ένα pipe (pipe()) και γεννά ένα παιδί (fork()). Στο παιδί, ανακατευθύνει (dup2()) τον περιγραφητή 1 ώστε να δείχνει στο ανοιχτό άκρο εγγραφής του pipe και στη συνέχεια εκτελεί την ls, με execve(). Η ls γράφει μέσα στο pipe, ενώ ο πατέρας εκτελεί επαναλαμβανόμενα read() από το άκρο ανάγνωσης ώστε να λαμβάνει τα δεδομένα εξόδου της και να τα τοποθετεί στον buf[]. Για πληρέστερη κατανόηση της απάντησης, ακολουθεί πλήρες πρόγραμμα στο UNIX που ικανοποιεί το ζητούμενο. Για απλότητα, το πρόγραμμα θεωρεί ότι η έξοδος της ls δεν θα ξεπερνά το 1KB. 1 #include <unistd.h> 2 #include <stdlib.h> 3 #include <stdio.h> 4 #include <errno.h> 5 6 void die(char *str) 7 { 8 perror(str); 9 exit(1); 10 } int main(void) 13 { 14 pid_t pid; 15 int pd[2]; 16 size_t n, total, rem; 17 char *p, buf[1024]; /* Hardcoded limits are ugly. */ 18 char *argv[] = { "/bin/ls", NULL }; 19 char *envp[] = { NULL }; if (pipe(pd) < 0) 22 die("pipe"); pid = fork(); 25 if (pid < 0) 26 die("fork"); 27 if (pid == 0) { 28 close(pd[0]); 29 if (dup2(pd[1], 1) < 0) 30 die("dup2"); 31 execve("/bin/ls", argv, envp); 32 die("execve(\"/bin/ls\") failed"); 33 } /* Parent */ 36 close(pd[1]); 37 p = buf; 38 rem = sizeof(buf); 39 n = total = 0; 40 while (rem) { 41 n = read(pd[0], p, rem);
13 42 if (n < 0) 43 die("read"); 44 if (n == 0) 45 break; 46 p += n; 47 total += n; 48 rem -= n; 49 } 50 if (!rem) { 51 close(pd[0]); /* This causes delivery of SIGPIPE to child */ 52 fprintf(stderr, "Out of space in buf[]\n"); 53 } 54 wait(null); 55 fprintf(stderr, "Output of /bin/ls follows:\n"); 56 n = write(1, buf, total); 57 if (n < 0) 58 die("write"); 59 if (n!= total) 60 fprintf(stderr, "Will not handle partial write, %d!= %d, use insist_write().\n", 61 n, total); return 0; 64 }
Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Χρονοδρομολογητής Κυκλικής Επαναφοράς
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 4 η Εργαστηριακή Άσκηση: Χρονοδρομολογητής Κυκλικής Επαναφοράς Λειτουργικά Συστήματα Υπολογιστών
Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος 2011-2012
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: nifantop@unipi.gr Περιεχόμενα ενότητας Διεργασίες Κλήσεις δημιουργίας και τερματισμού διεργασιών Επικοινωνία διεργασιών μέσω
Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ Σχεδιασμός και υλοποίηση υποδομής σημείωσης διεργασιών στον
Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ
Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ Εισαγωγή Σκοπός τόσο αυτού του εργαστηρίου, όσο και των εργαστηρίων που ακολουθούν, είναι να γνωρίσουμε τους τρόπους δημιουργίας και διαχείρισης των διεργασιών (processes)
Εικονική Μνήμη (1/2)
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Εικονική Μνήμη (1/2) Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017 Εικονική Μνήμη
Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος 2011-2012
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Σχεδίαση και Υλοποίηση Μηχανισμού Μεταφοράς Δεδομένων από Συσκευές Αποθήκευσης σε Δίκτυο Myrinet, Χωρίς τη Μεσολάβηση της Ιεραρχίας Μνήμης
Σχεδίαση και Υλοποίηση Μηχανισμού Μεταφοράς Δεδομένων από Συσκευές Αποθήκευσης σε Δίκτυο Myrinet, Χωρίς τη Μεσολάβηση της Ιεραρχίας Μνήμης Αναστάσιος Α. Νάνος ananos@cslab.ntua.gr Επιβλέπων: Νεκτάριος
Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος 2010-2011
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Θέμα
Λειτουργικά Συστήματα (ΗΥ321)
Λειτουργικά Συστήματα (ΗΥ321) Διάλεξη 2: Διεργασίες και Νήματα Διαδικαστικά 2 Γραφτήκατε στη λίστα; Σχηματίστε ομάδες (για το project)! Στο προηγούμενο επεισόδιο 3 Τι είναι λειτουργικό; Γενιές ΛΣ Βασικές
Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΔΙΕΡΓΑΣΙΕΣ +- Με τον όρο διεργασία στο UNIX εννοούμε τη δυναμικη πράξη της
Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Λειτουργικά Συστήματα (Λ/Σ)
Λειτουργικά Συστήματα (Λ/Σ) Βασικές Έννοιες Λειτουργικών Συστημάτων Βασίλης Σακκάς 13/11/2013 1 ΒασικέςΈννοιεςΛ/Σ Η επικοινωνία μεταξύ Λ/Σ και των προγραμμάτων του χρήστη γίνεται μέσω του συνόλου των «εκτεταμένων
Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος 2010-2011
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική
Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Επικοινωνία με περιφερειακά Αρτηρία εισόδου-εξόδου, διευθύνσεις, εγγραφές αναγνώσεις Διαδικασία εξόδου έλεγχος κατάστασης περιφερειακού περίμενε
Μάθημα 8: Επικοινωνία Συσκευών με τον Επεξεργαστή
Μάθημα 8: Επικοινωνία Συσκευών με τον Επεξεργαστή 8.1 Τακτική σάρωση (Polling) Ας υποθέσουμε ότι έχουμε ένα πληκτρολόγιο συνδεδεμένο σε ένα υπολογιστικό σύστημα. Το πληκτρολόγιο είναι μια μονάδα εισόδου.
Εισαγωγή στην Πληροφορική
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Εισαγωγή στην Πληροφορική Ενότητα 8: Λειτουργικά Συστήματα Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά
Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες
0x375 - Thessaloniki Tech Talks Sessions Event 0x2 19 Μαρτίου 2010 Περιεχόμενα 1 Εισαγωγή 2 Η κλήση συστήματος ptrace 3 Νήματα 4 Το πρόγραμμα εισαγωγής κώδικα prez 5 Επίλογος Γιατί; Πολλές φορές θέλουμε
Λειτουργικά Συστήματα
Λειτουργικά Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:09 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών
1. Εισαγωγή. Λειτουργικά Συστήματα Η/Υ. Διεργασίες. Ορισμός ΚΕΦΑΛΑΙΟ 3 - ΔΙΕΡΓΑΣΙΕΣ. Κεφάλαιο 3 «Διεργασίες»
1. Εισαγωγή Λειτουργικά Συστήματα Η/Υ Κεφάλαιο 3 «Διεργασίες» Διδάσκων: Δ Λιαροκάπης Διαφάνειες: Π. Χατζηδούκας Η έννοια της διεργασίας (process) είναι θεμελιώδης για την κατανόηση του τρόπου με τον οποίο
Κεφάλαιο 4 Σύνδεση Μικροεπεξεργαστών και Μικροελεγκτών ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ
Κεφάλαιο 4 Σύνδεση Μικροεπεξεργαστών και Μικροελεγκτών ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ 1. Παρακάτω δίνονται μερικοί από τους ακροδέκτες που συναντάμε στην πλειοψηφία των μικροεπεξεργαστών. Φτιάξτε έναν πίνακα που να
Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος Κανονική Εξέταση Λύσεις
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Κρυπτογραφική συσκευή VirtIO για QEMU-KVM
Κρυπτογραφική συσκευή VirtIO για QEMU-KVM Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, ΣΗΜΜΥ Εργαστήριο Υπολογιστικών Συστημάτων (CSLab) Μάιος 2017 Βασικό Πλαίσιο Node A Δικτυακή διεργασία (πχ chat)
ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr
ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr Η έννοια της διεργασίας ιεργασία (process) είναι ο µηχανισµός εκτέλεσης ενός προγράµµατος σε ένα λειτουργικό σύστηµα. Η διεργασία είναι µια ενεργή
Μάθημα 3.8 Τεχνικές μεταφοράς δεδομένων Λειτουργία τακτικής σάρωσης (Polling) Λειτουργία Διακοπών DMA (Direct Memory Access)
Μάθημα 3.8 Τεχνικές μεταφοράς δεδομένων Λειτουργία τακτικής σάρωσης (Polling) Λειτουργία Διακοπών DMA (Direct Memory Access) Μελετώντας το μάθημα θα μπορείς να ξέρεις τη λειτουργία του Polling να ξέρεις
Λειτουργικά Συστήματα (ΗΥ321)
Λειτουργικά Συστήματα (ΗΥ321) Διάλεξη 17: Χειρισμός Εισόδου - Εξόδου Συστήματα Εισόδου / Εξόδου: Το Υλικό Ε/Ε Μεγάλη ποικιλία συσκευών Ε/Ε Και μεγαλώνει Συνηθισμένες έννοιες: Πόρτα Δίαυλος Κοινό μέσο πρόσβασης
Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor
Προηγμένοι Μικροεπεξεργαστές Εργαστήριο 4 - Editor Περιγραφή Υλοποίηση ενός υποτυπώδους editor που θα: Διαβάζει ένα προκαθορισμένο αρχείο Θα το απεικονίζει στην οθόνη Θα κάνει highlight με έναν ελεγχόμενο
Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals
Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals Δρ. Απόστολος Γκάμας Διδάσκων 407/80 gkamas@uop.gr Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 1 1 UDP vs TCP Το UDP είναι ένα connectionless, μη αξιόπιστο,
Οργάνωση ενός σύγχρονου Υπολογιστικού Συστήματος ή Ηλεκτρονικού Υπολογιστή (Η/Υ) Τα σύγχρονα συστήματα Η/Υ έχουν την παρακάτω οργάνωση:
Οργάνωση ενός σύγχρονου Υπολογιστικού Συστήματος ή Ηλεκτρονικού Υπολογιστή (Η/Υ) Τα σύγχρονα συστήματα Η/Υ έχουν την παρακάτω οργάνωση: Page 1 Χρήστης Εφαρμογή Λειτουργικό Σύστημα Υλικό Γνωστά Λειτουργικά
Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1
Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr Ο κώδικας δεν εκτελείται «μόνος του» Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα
ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα
ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα 3.1 Η εξέλιξη των λειτουργικών συστηµάτων 3.2 Αρχιτεκτονική λειτουργικών συστηµάτων 3.3 Συντονισµός των δραστηριοτήτων του υπολογιστή 3.4 Χειρισµός ανταγωνισµού µεταξύ
Λιβανός Γιώργος Εξάμηνο 2017Β
Λιβανός Γιώργος Εξάμηνο 2017Β Υπολογιστικό σύστημα Υλικό (hardware) Λογισμικό (Software) Ολοκληρωμένα κυκλώματα, δίσκοι, οθόνη, κλπ. Λογισμικό συστήματος Προγράμματα εφαρμογών Χρειάζονται ένα συντονιστή!!!
Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1
Δημιουργία & Τερματισμός Διεργασιών Προγραμματισμός II 1 lalis@inf.uth.gr Δημιουργία νέας διεργασίας pid_t fork() Η fork δεν έχει παραμέτρους Δημιουργεί μια νέα διεργασία που είναι ένα αντίγραφο της διεργασίας
Λειτουργικά Συστήματα Πραγματικού Χρόνου
Λειτουργικά Συστήματα Πραγματικού Χρόνου 2006-07 Λειτουργικά Συστήματα Πραγματικού Χρόνου Η χρήση του χρόνου Μ.Στεφανιδάκης Συστήματα πραγματικού χρόνου: ελεγκτής και ελεγχόμενο σύστημα real-time system
Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1
Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1 lalis@inf.uth.gr Συνεργασία ανάμεσα σε διεργασίες Για ασφάλεια/ανεξαρτησία, το ΛΣ εξασφαλίζει πλήρη απομόνωση ανάμεσα στις
Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε)
Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, και Ε/Ε) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι
Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή
Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2014-15 Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, και Ε/Ε) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι
Κατανεμημένα Συστήματα
Κατανεμημένα Συστήματα Σημειώσεις εργαστηρίου Lab#7 - Διεργασίες, Nήματα, Πολυνημάτωση στη Python Νεβράντζας Βάιος-Γερμανός Λάρισα, Φεβρουάριος 2013 Lab#7 - Διεργασιές, Νη ματα, Πολυνημα τωση στη Python,
Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)
Προγραμματισμός συστημάτων UNIX/POSIX Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes) Επικοινωνία μεταξύ διεργασιών γονέα-παιδιού Κατά κάποιο τρόπο, θα δημιουργήσουμε ένα τύπο
Διεργασίες και Νήματα (2/2)
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Διεργασίες και Νήματα (2/2) Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017 Νήματα
Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής
Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής ΕΥ311-Διαδικτυακός και Ταυτόχρονος Προγραμματισμός Εργαστήριο: Παραδείγματα δημιουργίας διεργασιών στο Linux Ένα πρόγραμμα (το στιγμιότυπο της εκτέλεσης του οποίου
Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Περιγραφή και Έλεγχος ιεργασιών
Περιγραφή και Έλεγχος ιεργασιών Περίληψη ιεργασίες Πολυπρογραµµατισµός Καταστάσεις ιεργασιών Περιγραφή διεργασιών στο ΛΣ Έλεγχος διεργασιών Το ΛΣ Linux 1 ιεργασία (process) ιεργασία είναι κάθε πρόγραµµα
Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα
Λειτουργικά Συστήματα Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Στέργιος Παλαμάς, Υλικό Μαθήματος «Λειτουργικά Συστήματα», 2015-2016 Κεφάλαιο 4: Διεργασίες Πρόγραμμα Πρόγραμμα 1 Πρόγραμμα
Αρχιτεκτονική Υπολογιστών
Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: Λειτουργίες Αρχείων Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών
Οδηγός Ασύρματου Δικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Οδηγός Ασύρματου Δικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux Εργαστήριο Λειτουργικών
ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ
ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ CPUs Διδάσκων: Παναγιώτης Καρκαζής Περίγραμμα -Συσκευές Ι/Ο - Διακοπές, Εξαιρέσεις, Παγίδες -Καταστάσεις λειτουργίας -Συνεπαξεργαστές mechanism Συσκευές Ι/Ο Οι συσκευές
Διεργασίες και Νήματα (1/2)
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Διεργασίες και Νήματα (1/2) Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017 Διεργασίες
Παράλληλη Επεξεργασία
Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στα Πολυεπεξεργαστικά Συστήματα Διερασίες και Νήματα σε Πολυεπεξεργαστικά Συστήματα Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed
Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1
Δημιουργία & Τερματισμός Διεργασιών Προγραμματισμός II 1 lalis@inf.uth.gr Δημιουργία νέας διεργασίας pid_t fork() Η fork δεν έχει παραμέτρους Δημιουργεί μια νέα διεργασία που είναι ένα αντίγραφο της διεργασίας
Προγραμματισμός συστημάτων UNIX/POSIX
Προγραμματισμός συστημάτων UNIX/POSIX Προχωρημένη διαδιεργασιακή επικοινωνία: επώνυμοι αγωγοί (FIFOs) ουρές μηνυμάτων (message queues) κοινόχρηστη μνήμη (shared memory) Ανάγκη Ότι είδαμε μέχρι τώρα μπορεί
Το λειτουργικό σύστημα. Προγραμματισμός II 1
Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή η εφαρμογή είναι γνωστή εκ των προτέρων περιορισμένοι υπολογιστικοί
Εισαγωγή στην Πληροφορική
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Εισαγωγή στην Πληροφορική Αστροφυσικός Αναπλ. Καθηγητής ΕΜΠ romylos@survey.ntua.gr Λειτουργικά συστήµατα, διεργασίες και δροµολόγηση Σύνδεση
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΟΡΓΑΝΩΣΗ Η/Υ
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΟΡΓΑΝΩΣΗ Η/Υ ΔΟΜΗ ΤΟΥ Η/Υ (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
Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi
Προϋποθέσεις για Αµοιβαίο Αποκλεισµό Μόνο µία διεργασία σε κρίσιµο τµήµασεκοινό πόρο Μία διεργασία που σταµατά σε µη κρίσιµο σηµείο δεν πρέπει να επιρεάζει τις υπόλοιπες διεργασίες εν πρέπει να υπάρχει
Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:
Σελίδα 1 από 11 Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για: την επικοινωνία, µε τα υπόλοιπα ολοκληρωµένα κυκλώµατα του υπολογιστικού συστήµατος. την παροχή τροφοδοσίας
Εικονική Μνήμη (Virtual Μemory)
ΗΥ 431 Αρχιτεκτονική Παραλλήλων Συστημάτων Διάλεξη 16 Εικονική Μνήμη (Virtual Μemory) Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Απλό πείραμα int *data = malloc((1
Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 5 - Editor
Προηγμένοι Μικροεπεξεργαστές Εργαστήριο 5 - Editor Περιγραφή Υλοποίηση ενός υποτυπώδους editor που θα: Διαβάζει ένα προκαθορισμένο αρχείο Θα το απεικονίζει στην οθόνη Θα κάνει highlight με έναν ελεγχόμενο
Οργάνωση Υπολογιστών (IΙI)
Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2016-17 Οργάνωση Υπολογιστών (IΙI) (συσκευές εισόδου-εξόδου) http://mixstef.github.io/courses/csintro/ Μ.Στεφανιδάκης Ένα τυπικό
Εικονικοποίηση. Αρχιτεκτονική Υπολογιστών 5ο Εξάμηνο,
Εικονικοποίηση Αρχιτεκτονική Υπολογιστών 5ο Εξάμηνο, 2016-2017 Εικονικοποίηση - Σύνοψη Γενικά Οργάνωση VMM Τεχνικές Εικονικοποίησης Εικονικοποίηση Μνήμης Live Migration Εικονικοποίηση - Σύνοψη Γενικά Οργάνωση
Προγραμματισμός με BSD Sockets σε περιβάλλον Linux
Προγραμματισμός με BSD Sockets σε περιβάλλον Linux Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, ΣΗΜΜΥ Εργαστήριο Υπολογιστικών Συστημάτων (CSLab) Απρίλιος 2016 Περίγραμμα παρουσίασης 1 Εισαγωγή 2 Δικτυακά
Διαχείριση Κύριας Μνήμης
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Διαχείριση Κύριας Μνήμης Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017 Διαχείριση
Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Είσοδος/Έξοδος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2009-2010 Είσοδος/Έξοδος Μέχρι τώρα όποτε θέλαμε να διαβάσουμε χρησιμοποιούσαμε πάντα
Οδηγός Ασύρματου ικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Οδηγός Ασύρματου ικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux Εργαστήριο Λειτουργικών
2η Προγραµµατιστική Εργασία
Προγραµµατισµός ικτύων (Ε-01) 2η Προγραµµατιστική Εργασία Επέκταση ϐασικής ϐιβλιοθήκης δικτυακού προγραµµατισµού και χρήση της για την υλοποίηση παράλληλου εξυπηρετητή πρωτοκόλλου µεταφοράς αρχείων ιδάσκων
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις Υλικό από: Modern Operating Systems Laboratory Exercises, Shrivakan Mishra Σύνθεση Κ.Γ. Μαργαρίτης, Τμήμα Εφαρμοσμένης Πληροφορικής, Πανεπιστήμιο
Σκελετός Παρουσίασης
Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς. Σκελετός
Διάλεξη 18η: Διαχείρηση Αρχείων
Διάλεξη 18η: Διαχείρηση Αρχείων Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Πρατικάκης (CSD) Αρχεία CS100, 2015-2016 1 / 24 Η βιβλιοθήκη Εισόδου/Εξόδου Στο stdioh
ΛΟΓΙΣΜΙΚΟ (software)
ΛΟΓΙΣΜΙΚΟ (software) Το Λογισµικό του Ηλεκτρονικού Υπολογιστή Περιεχόµενα Ορισµός Λογισµικού Κατηγορίες Λογισµικό Συστήµατος Λογισµικό Εφαρµογών Το λογισµικό είναι: Το λογισµικό Το σύνολο των προγραµµάτων
Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Εργαστήριο
(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)
(Κεφάλαιο 2.7 και 12) Αρχεία στην C (Διάλεξη 15) 14-1 Επανάληψη στην Αποθήκευση (Storage) Για να αποθηκεύσουμε δεδομένα από ένα πρόγραμμα, πρέπει να χρησιμοποιήσουμε την Δευτερεύουσα Μνήμη 14-2 Επανάληψη
Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά
Μάθημα 6 ο. Χρονοδρομολόγηση (Scheduling)
Μάθημα 6 ο Χρονοδρομολόγηση (Scheduling) Σκοπός του μαθήματος Στην ενότητα αυτή θα εξηγήσουμε το ρόλο και τη λειτουργία της χρονοδρομολόγησης σε ένα Λειτουργικό Σύστημα. Θα μάθουμε: Να ορίζουμε τι είναι
Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας
Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας Το επίπεδο προτεραιότητας µιας διεργασίας µπορεί να αλλάξει µε χρήση της συνάρτησης nice. Κάθε διεργασία διαθέτει µια τιµή που καλείται
Ενσωματωμένα Συστήματα
Ενσωματωμένα Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ Νο 13 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών
Εγχειρίδιο Συναρτήσεων. 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 που σχετίζεται με αυτή Σε
Προγραμματισμός Η/Υ 1 (Εργαστήριο)
Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες
Εικονικοποίηση. Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο,
Εικονικοποίηση Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017 Εικονικοποίηση - Σύνοψη Γενικά Οργάνωση VMM Τεχνικές Εικονικοποίησης Εικονικοποίηση Μνήμης Live Migration Παραδείγματα συστημάτων
Προγραμματισμός συστημάτων UNIX/POSIX. Ανακατευθύνσεις (redirections)
Προγραμματισμός συστημάτων UNIX/POSIX Ανακατευθύνσεις (redirections) Shell & ανακατεύθυνση εισόδου Κατά την εκτέλεση ενός προγράμματος, η είσοδος και η έξοδος ενός προγράμματος μπορούν να ανακατευθυνθούν
Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts
Προηγμένοι Μικροεπεξεργαστές Φροντιστήριο 4 Real Mode Interrupts Επισκόπηση Μορφές control tranfer Γενικά μη προγραμματισμένες Ασυγχρονα προς την εκτέλεση του προγράμματος Hardware interrupts Σύγχρονα
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων
Μεθόδων Επίλυσης Προβλημάτων
ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 10 Αρχεία στην C Επανάληψη στην Αποθήκευση (Storage)
Πανεπιστήμιο Πατρών. Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών
Πανεπιστήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών Εργαστήριο Σχεδίασης Ολοκληρωμένων Κυκλωμάτων Σχεδιασμός Ολοκληρωμένων Συστημάτων με τεχνικές VLSI Χειμερινό Εξάμηνο 2015 FSM
Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 6 C & Assembly
Προηγμένοι Μικροεπεξεργαστές Εργαστήριο 6 C & Assembly Real World Situation Στον πραγματικό κόσμο, κανείς δεν γράφει αποκλειστικά assembly Κουραστικό Δύσκολα συντηρήσιμος κώδικας Μηδενική φορητότητα Μεγάλη
Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1
Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη και επικοινωνία διεργασιών Κάθε διεργασία έχει δική της ιδιωτική μνήμη Μια διεργασία δεν μπορεί να γράψει/διαβάσει από/σε θέσεις
Βασικές συσκευές Ε/Ε. Είσοδος Έξοδος στον υπολογιστή. Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (IΙI) Μ.
Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2016-17 Οργάνωση Υπολογιστών (IΙI) (συσκευές εισόδου-εξόδου) http://mixstef.github.io/courses/csintro/ Μ.Στεφανιδάκης Ένα τυπικό
Αρχιτεκτονική Υπολογιστών
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Αρχιτεκτονική Υπολογιστών Υποσύστημα μνήμης Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες