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

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

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

Transcript

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

2 1 ΕΙΣΑΓΩΓΗ 1 1 Εισαγωγή Στην συγκεκριμένη άσκηση υλοποιούμε έναν οδηγό συσκευής (Device Driver) για μια εικονική συσκευή χαρακτήρων στον πυρήνα του Linux. Η συσκευή αυτή προσομοιώνεται στη μνήμη RAM του υπολογιστή. Τα δεδομένα που διαβάζονται και γράφονται προς τη συσκευή θα αποθηκεύονται και διαβάζονται από έναν χώρο μνήμης τον οποίο δεσμεύει ο driver της. Ο οδηγός αυτός θα υλοποιηθεί ως ένα kernel module στον πυρήνα του Linux. Τα modules αποτελούν τμήματα κώδικα τα οποία μπορούν να φορτωθούν στον πυρήνα του Linux κατά τον χρόνο εκτέλεσης (runtime). Κάθε module αποτελεί object code το οποίο γίνεται linked με τον πυρήνα κατά το χρόνο εκτέλεσης. Έτσι ο πηγαίος κώδικας του πυρήνα παραμένει όσο μικρότερος γίνεται επιτρέποντας στους χρήστες να φορτώσουν δυναμικά όσες λειτουργίες επιθυμούν. Οι περισσότεροι οδηγοί συσκευής, όπως και ο δικός μας, είναι υλοποιημένοι σαν kernel modules. 2 Οδηγός συσκευής Όπως ήδη αναφέραμε ο οδηγός μας αφορά μια εικονική συσκευή η οποία προσομοιώνεται στη μνήμη του υπολογιστή μας. Η συσκευή αυτή θα είναι μια συσκευή χαρακτήρων (Character Device), δηλαδή μία συσκευή η οποία μπορεί να προσπελαστεί σαν μια ροή από byte, ακριβώς όπως και ένα αρχείο. Στο εξής θα ονομάζουμε αυτή τη συσκευή καθώς και τον οδηγό της lunix Οι λειτουργίες που υποστηρίζονται από τον οδηγό που υλοποιούμε είναι οι εξής: open release write read lseek ioctl mmap 2.1 Συσκευή και Μοντέλο μνήμης Καθώς τα δεδομένα που διαβάζονται και γράφονται προς τη συσκευή μας ουσιαστικά διαβάζονται και γράφονται χρειάστηκε να καθορίσουμε πως θα γίνεται η ανάθεση της μνήμης στη συσκευή. Ο ευκολότερος τρόπος ήταν ο οδηγός μας να δεσμεύει από την αρχή έναν σταθερού μεγέθους χώρο μνήμης με δυνατότητα να καθορίζει ο χρήστης το μέγεθος του. Καθώς όμως η προσέγγιση της στατικής δέσμευσης μνήμης είναι και αρκετά δαπανηρή για τη μνήμη μας και θέτει όρια στις εφαρμογές μας, επιλέξαμε η μνήμη του οδηγού μας να δεσμεύεται δυναμικά. Όσο περισσότερα γράφονται στην συσκευή, τόσο περισσότερη μνήμη τις ανατίθεται. Η ανάθεση μνήμης γίνεται ανά φυσικές σελίδες(pages) της μνήμης με χρήση της συνάρτησης get f ree pages(unsigned int flag, unsigned long order). Σαν flag χρησιμοποιούμε το GFP_KERNEL, για να γίνει ανάθεση σελίδων στο χώρο πυρήνα. Το όρισμα order καθορίζει πόσες σελίδες θα δεσμεύσουμε. Σε κάθε κλήση δεσμεύουμε 2 order σελίδες. Η συσκευή μας μοντελοποιείται ως μια δομή struct lunix_dev η οποία έχει διάφορες πληροφορίες που αφορούν τη συσκευή. Μία από αυτές είναι ο δείκτης first_node σε μια δομή struct data_node, που αποτελεί το πρώτο στοιχείο μιας λίστας από data_node. Κάθε data_node περιέχει ένα δείκτη σε ένα πίνακα από p_t_size δείκτες. Κάθε ένας από αυτούς τους δείκτες δείχνει σε 2 p_order φυσικές σελίδες τις οποίες δεσμεύουμε με την get_free_pages. Τόσο το p_t_size όσο και

3 2 ΟΔΗΓΟΣ ΣΥΣΚΕΥΗΣ 2 το p_order ορίζονται μέσα στη δομή lunix_dev. Όλα αυτά θα γίνουν πιο κατανοητά με το επόμενο σχήμα 1: Σχήμα 1: Μοντέλο Μνήμης Lunix Επίσης οι δομές lunix_dev και data_node ορίζονται στο lunix2k10.h και είναι οι εξής : s t r u c t d a t a _ n o d e { void * * d a t a ; s t r u c t d a t a _ n o d e * n e x t ; ; s t r u c t l u n i x _ d e v { s t r u c t d a t a _ n o d e * f i r s t _ n o d e ; s i z e _ t s i z e ; i n t p _ o r d e r ; i n t p _ t _ s i z e ; i n t vmas ; s t r u c t semaphore sem ; s t r u c t cdev mydev ; ; Το πεδίο struct semaphore sem αποτελεί έναν σημαφόρο ο οποίος χρησιμοποείται για την αντιμετώπιση των προβλημάτων ταυτόχρονης πρόσβασης στην συσκευή(για παράδειγμα όταν δύο διαφορετικές διεργασίες έχουν χρησιμοποιούν τη συσκευή). Οι κύριες εντολές που αφορούν τον σημαφόρο είναι οι:

4 2 ΟΔΗΓΟΣ ΣΥΣΚΕΥΗΣ 3 down_interruptible(&dev->sem) η οποία παίρνει το σημαφόρο. Το interruptible χρησιμοποιείται έτσι ώστε η συσκευή να είναι αποκρίσιμη σε σήματα(linux signals). up(&dev->sem) η οποία απελευθερώνει το σημαφόρο. 2.2 Αρχικοποίηση Module Κατά την εισαγωγή του module πρέπει να γίνουν διάφορες εργασίες που αφορούν τον οδηγό. Αυτές τις εργασίες θα αναλάβει η συνάρτηση: s t a t i c i n t i n i t l u n i x _ i n i t ( void ) Το init δηλώνει ότι η συνάρτηση θα χρησιμοποιηθεί μόνο κατά την εισαγωγή του module οπότε μετά μπορεί να απορριφθεί από τον module_loader. Επίσης δηλώνουμε στον module_loader ότι αυτή η συνάρτηση θα χρησιμοποιηθεί κατά την αρχικοποίηση με χρήση του ειδικού macro module_init: m o d u l e _ i n i t ( l u n i x _ i n i t ) ; Κατά την αρχικοποίηση του οδηγού πραγματοποιούνται οι εξής λειτουργίες: 1. Η δέσμευση ενός device number τύπου dev_t. Ο device number αποτελείται από τον κατάλληλο major και minor number. Κάθε aracter device έχει τον δικό του device number. Ο major number δηλώνει τον driver που είναι συσχετισμένος με τη συσκευή και ο minor number χρησιμοποιείται από τον πυρήνα για να αναφέρεται στην συγκεκριμένη συσκευή. Στην υλοποίηση μας θα χρησιμοποιήσουμε δυναμική δέσμευση major number έτσι ώστε να αποφύγουμε προβλήματα από conflicts. Αυτό το επιτυγχάνουμε με τον εξής κώδικα: d e v _ t dev = 0 ; e r r = a l l o c _ c h r d e v _ r e g i o n (& dev, l u n i x _ m i n o r, 1, l u n i x ) ; 2. Δέσμευση χώρου μνήμης για τη δομή lunix_dev καθώς και αρχικοποίηση των μεταβλητών της. Ενδιαφέρον παρουσιάζει μόνο η αρχικοποίηση του σημαφόρου που υπάρχει στη δομή και χρησιμοποιείται για την αποφυγή race conditions. Ο σημαφόρος δηλώνεται και αρχικοποιείται σε τιμή 1 με την INIT_MUTEX(&dev->sem). 3. Τέλος πρέπει να δηλώσουμε στον πυρήνα την συσκευή μας ως ένα struct cdev το οποίο χρησιμοποιείται από τον πυρήνα για να αναφέρεται στην συσκευή. Οπότε αρχικόποιούμε τη δομή cdev που υπάρχει μέσα στο lunix_dev και στην συνέχεια τη δηλώνουμε: c d e v _ i n i t (& d e v i c e >mydev, &l u n i x _ f o p s ) ; e r r = cdev_add (& d e v i c e >mydev, dev, 1 ) ; Κατά την αρχικοποίηση της δομής περνάμε ένα δείκτη στη δομή lunix_ops η οποία αποτελεί μια δομή τύπου file_operations και περιέχει δείκτες στις συνάρτησεις που υλοποιούν τις λειτουργίες που αναφέρονται στη δομή και επικαλύπτουν αυτές του λειτουργικού.. Η δομή αυτή είναι η εξής: s t a t i c const s t r u c t f i l e _ o p e r a t i o n s l u n i x _ f o p s = {. owner = THIS_MODULE,. open = l u n i x _ o p e n,. r e l e a s e = l u n i x _ r e l e a s e,. r e a d = l u n i x _ r e a d,. w r i t e = l u n i x _ w r i t e,. l l s e e k = l u n i x _ l l s e e k,

5 2 ΟΔΗΓΟΣ ΣΥΣΚΕΥΗΣ 4 ;. i o c t l = l u n i x _ i o c t l,. mmap = lunix_mmap, 2.3 Υλοποίηση λειτουργιών Στην συνέχεια θα παρουσιάσουμε συνοπτικά την υλοποίηση των βασικών μας λειτουργιών. Θα αναφερθούμε μόνο στα σημεία που έχουν ενδιαφέρον καθώς ο κώδικας τους μαζί με τα σχόλια είναι αρκετά κατανοητός και μπορεί να βρεθεί στο παράρτημα. ΧΧΧ open Η μέθοδος open υλοποιείται στον οδηγό μας από την μέθοδο: s t a t i c i n t l u n i x _ o p e n ( s t r u c t i n o d e * inode, s t r u c t f i l e * f i l e ) Αρχικά χρειάζεται να εξάγουμε από τον δομή inode την συσκευή(lunix_dev) στην οποία αναφέρεται για να την εισάγουμε στο πεδίο file->private_data έτσι ώστε να μπορούμε να το χρησιμοποιήσουμε στις υπόλοιπες μεθόδους. Αυτό επιτυγχάνεται με την μακροεντολή του πυρήνα container_of: s t r u c t l u n i x _ d e v * dev ; dev = c o n t a i n e r _ o f ( inode >i _ c d e v, s t r u c t l u n i x _ d e v, mydev ) ; f i l e > p r i v a t e _ d a t a = dev ; Ο δεύτερος κύριος ρόλος της open είναι να ανανεώνει τον δείκτη f_pos ή να μηδενίζει τη συσκευή, ανάλογα με τα flag που έχει ανοιχτεί. Τα flags αυτά περιέχονται στο file->f_flags. Αν το flag είναι το O_APPEND χρειάζεται απλά να θέσουμε τον f_pos στο τρέχων μέγεθος της συσκευής: file > f_pos = dev > size; Αν το flag είναι O_TRUNC χρειάζεται να μηδενίσουμε τη συσκευή. Αυτό απαιτεί να ελευθερώσουμε όλη τη μνήμη την οποία έχουμε δεσμεύσει και να θέσουμε το dev->size στο 0. Διατρέχουμε λοιπόν όλη τη λίστα των data_node και ελευθερώνουμε όσους πίνακες δεικτών και σελίδες στο δίσκο έχουμε δεσμεύσει release Η μέθοδος release υλοποιείται από τον οδηγό μας με τη μέθοδο: s t a t i c i n t l u n i x _ r e l e a s e ( s t r u c t i n o d e * inode, s t r u c t f i l e * f i l e ) Στην υλοποίηση μας δεν επιτελεί κάποια ιδιαίτερη λειτουργία write Η μέθοδος write υλοποιείται από τον οδηγό μας με τη μέθοδο: s t a t i c s s i z e _ t l u n i x _ w r i t e ( s t r u c t f i l e * f i l e, const char u s e r * b u f f, s i z e _ t count, l o f f _ t * ppos ) Η μέθοδος αυτή χρησιμοποιείται για τη μεταφορά δεδομένων από τον χρήση στη συσκευή. Τα δεδομένα υπάρχουν στον buffer που δείχνει ο buff και πρέπει να αντιγραφούν count bytes στη συσκευή, αρχίζοντας από τη θέση ppos. Σύμφωνα με το μοντέλο μνήμης πρέπει να βρούμε σε ποια σελίδα αντιστοιχεί ο δείκτης ppos. Για να το βρούμε αυτό ακολουθούμε την εξής διαδικασία.

6 2 ΟΔΗΓΟΣ ΣΥΣΚΕΥΗΣ 5 1. Αρχικά βρίσκουμε πόσα bytes καταλαμβάνουν συνολικά οι σελίδες που αντιστοιχούν σε έναν data_node. Αυτά είναι: dtn_size = (P AGE_SIZE << dev > p_order) dev > p_ size; 2. Στη συνέχεια βρίσκουμε μέσα σε ποιο από τα data_node βρίσκεται η σελίδα που περιέχει την ppos. Αυτό το βρίσκουμε διαιρώντας το ppos με το dtn->size. Υπολογίζουμε και το node_off το οποίο θα χρησιμοποιηθεί στη συνέχεια. node_index = ( ( long ) ( * ppos ) / d t n _ s i z e ) ; n o d e _ o f f = ( ( long ) ( * ppos ) % d t n _ s i z e ) ; 3. Τέλος υπολογίζουμε σε ποια από τις σελίδες που υπάρχουν στον πίνακα του data_node πέφτει το ppos, καθώς και ποιο είναι το offset μέσα στην σελίδα στο οποίο αντιστοιχεί η διεύθυνση ppos. t a b l e _ i n d e x = ( n o d e _ o f f / ( PAGE_SIZE << dev >p _ o r d e r ) ) ; t a b l e _ o f f = ( n o d e _ o f f % ( PAGE_SIZE << dev >p _ o r d e r ) ) ; Έπειτα ακολουθούμε τη λίστα με τα data_node μέχρι να φτάσουμε στον node_index node. Αν οι ενδιάμεσοι data_node δεν υπάρχουν τους δημιουργούμε(μόνο τους node και όχι τον πίνακα και τι σελίδες). Έτσι δημιουργούνται κενά στη συσκευή. Μόλις βρούμε τον κατάλληλο data_node ελέγχουμε αν υπάρχει ο πίνακας δεικτών και αν δεν υπάρχει τον δημιουργούμε. Έπειτα ελέγχουμε αν υπάρχει σελίδα στην κατάλληλη θέση του πίνακα, και αν δεν υπάρχει την δεσμεύουμε. while ( node_index > 0 ) { i f (! dtn >n e x t ) { p r i n t k ( KERN_NOTICE l u n i x _ w r i t e : A l l o c a t i n g more nodes on i n d e x %d \ n, node_index ) ; dtn >n e x t = k m a l l o c ( s i z e o f ( s t r u c t d a t a _ n o d e ), GFP_KERNEL ) ; i f (! dtn >n e x t ) goto out ; memset ( dtn >next, 0, s i z e o f ( s t r u c t d a t a _ n o d e ) ) ; dtn = ( dtn >n e x t ) ; node_index ; i f (! dtn >d a t a ) { p r i n t k ( KERN_NOTICE l u n i x _ w r i t e : A l l o c a t i n g a page t a b l e \ n ) ; dtn >d a t a = k m a l l o c ( dev > p _ t _ s i z e * s i z e o f ( void * ), GFP_KERNEL ) ; i f (! dtn >d a t a ) goto out ; memset ( dtn >data, 0, dev > p _ t _ s i z e * s i z e o f ( void * ) ) ; i f (! dtn >d a t a [ t a b l e _ i n d e x ] ) { p r i n t k ( KERN_NOTICE l u n i x _ w r i t e : A l l o c a t i n g a page \ n ) ; dtn >d a t a [ t a b l e _ i n d e x ] = g e t _ f r e e _ p a g e s ( GFP_KERNEL, dev >p _ o r d e r ) ; i f (! ( dtn >d a t a [ t a b l e _ i n d e x ] ) ) goto out ; memset ( dtn >d a t a [ t a b l e _ i n d e x ], 0, PAGE_SIZE << dev >p _ o r d e r ) ; Στη συνέχεια ελέγχουμε αν το count είναι μεγαλύτερο από το χώρο που απομένει μέσα στη σελίδα. Αν είναι μεγαλύτερο τότε γράφουμε μόνο όσα bytes χωράνε μέσα στη σελίδα και αγνοούμε

7 2 ΟΔΗΓΟΣ ΣΥΣΚΕΥΗΣ 6 τα υπόλοιπα. Αυτό είναι μια κακή πρακτική αλλά αποφύγαμε να υλοποιήσουμε το να συνεχίζεται η εγγραφή σε επόμενες σελίδες για να είναι πιο αναγνώσιμος ο κώδικας. Τέλος μένει να μεταφέρουμε τα bytes με χρήση της copy_f rom_user καθώς και να ανανεώσουμε τους δείκτες *ppos και dev->size. i f ( c o u n t > ( ( PAGE_SIZE << dev >p _ o r d e r ) t a b l e _ o f f ) ) c o u n t = ( ( PAGE_SIZE << dev >p _ o r d e r ) t a b l e _ o f f ) ; i f ( c o p y _ f r o m _ u s e r ( ( ( dtn >d a t a [ t a b l e _ i n d e x ] ) + t a b l e _ o f f ), b u f f, c o u n t ) ) { r e t = EFAULT ; goto out ; * ppos += c o u n t ; i f ( * ppos > dev > s i z e ) dev > s i z e = * ppos ; read Η μέθοδος release υλοποιείται από τον οδηγό μας με τη μέθοδο: s t a t i c s s i z e _ t l u n i x _ r e a d ( s t r u c t f i l e * f i l e, char u s e r * b u f f, s i z e _ t count, l o f f _ t * ppos ) Η υλοποίηση της μοιάζει πολύ με τη μέθοδο write οπότε δε θα αναφερθούμε σε λεπτομέρειες. Απλά να σημειώσουμε το εξής: Όπως ήδη αναφέραμε με τη write δημιουργούνται κενά στο χώρο μνήμης της συσκευής. Όταν η read προσπαθήσει να διαβάσει σε κάποιο από αυτά τα κενά της συσκευής, δεν διαβάζει τίποτα και επιστρέφει 0 στο χρήστη. Μια άλλη προσέγγιση θα ήταν να επέστρεφε στο χρήστη τόσα μηδενικά όσα αντιστοιχούσαν στον κενό χώρο. Επίσης η read δεν μπορεί να διαβάσει έξω από το μέγεθος της συσκευής. Όταν ο χρήστης προσπαθήσει να διαβάσει περισσότερο χώρο από όσο απομένει στη συσκευή τότε διαβάζει μόνο τον εναπομείναντα χώρο. Επίσης σε αντιστοιχία με την write, η read διαβάζει το πολύ όσο χώρο αντιστοιχεί στις σελίδες που έχουν δεσμευθεί και υπάρχουν στον δείκτη μιας θέση του πίνακα δεικτών. Οι αναφερθέντες έλεγχοι είναι οι εξής: i f ( * ppos >= dev > s i z e ) goto out ; i f ( * ppos + c o u n t > dev > s i z e ) c o u n t = dev > s i z e * ppos ; i f ( c o u n t > ( ( PAGE_SIZE << dev >p _ o r d e r ) t a b l e _ o f f ) ) c o u n t = ( ( PAGE_SIZE << dev >p _ o r d e r ) t a b l e _ o f f ) ; lseek l o f f _ t l u n i x _ l l s e e k ( s t r u c t f i l e * f i l p, l o f f _ t o f f s e t, i n t whence ) Η επομένη μέθοδος υλοποιεί τα system call lseek και llseek. Όταν αυτή η μέθοδος δεν είναι υλοποιημένη, ο πυρήνας τις υλοποιεί μεταβάλλοντας τον δείκτη file->f_pos. Η μέθοδος μας, ανάλογα με το flag whence, θέτει σε μια μεταβλητή pos τύπου loff_t pos, την θέση η οποία θέλουμε να μπει στο file->f_pos, την θέτουμε και την επιστρέφουμε: switch ( whence ) { c a s e SEEK_SET : / / S e t t o t h i s o f f s e t

8 2 ΟΔΗΓΟΣ ΣΥΣΚΕΥΗΣ 7 p r i n t k ( KERN_NOTICE From l s e e k ) ; pos = o f f s e t ; break ; c a s e SEEK_CUR : / / S e t w i t h o f f s e t t o c u r r e n t pos = f i l p >f _ p o s + o f f s e t ; break ; c a s e SEEK_END : / / S e t w i t h o f f s e t t o s i z e o f d e v i c e.. pos = dev > s i z e + o f f s e t ; break ; d e f a u l t : r e t u r n EINVAL ; i f ( pos < 0 ) r e t u r n EINVAL ; f i l p >f _ p o s = pos ; r e t u r n pos ; ioctl To system call ioctl υλοποιείται από τον οδηγό μας με τη μέθοδο: i n t l u n i x _ i o c t l ( s t r u c t i n o d e * inode, s t r u c t f i l e * f i l p, unsigned i n t cmd, unsigned long a r g ) Η μέθοδος αυτή προσφέρει στους χρήστες επιπλέον λειτουργικότητα από αυτήν των read και write. Συγκεκριμένα χρησιμοποιείται για να προσφέρει στους χρήστες τη δυνατότητα να έχουν κάποιο έλεγχο στη συσκευή (πχ καθορισμό baud rate ή eject media), καθώς και τον καθορισμό κάποιων από τις παραμέτρους της. Στη δικιά μας υλοποίηση η lunix_ioctl προσφέρει μόνο τη δυνατότητα να διαβάζουμε και να θέτουμε την παράμετρο size της συσκευής (dev->size). Το ioctl αποτελεί ένα system call το οποίο δεν αποτελεί μία δεδομένη, αλλά πολλές διαφορετικές λειτουργίες. Το ποια λειτουργία θα εκτελεστεί καθορίζεται από το όρισμα cmd. Το όρισμα arg αποτελεί ένα όρισμα το οποίο αποκτά σημασία ανάλογα με τη cmd. Είτε είναι κάποιος τύπος δεδομένων ή ένας δείκτης. Με αυτόν τον τρόπο μπορούμε να περάσουμε και να λάβουμε από την ioctl αυθαίρετα ορίσματα/αποτελέσματα. Για να είναι ποιο εύκολη η χρήση της εντολής συνήθως δίνονται συμβολικά ονόματα για τις αριθμητικές τιμές του cmd οι οποίες προσδιορίζονται στη βιβλιοθήκη. Οι αριθμητικές τιμές που αντιστοιχούν σε κάθε λειτουργία πρέπει να είναι μοναδικές στο σύστημα έτσι ώστε να αποφεύγονται λάθη όπου θα δοθεί κάποια σωστά ορισμένη λειτουργία σε κάποια συσκευή η οποία δεν την υποστηρίζει. Για αυτό το λόγο οι αριθμητικές τιμές για κάθε λειτουργία χωρίζονται στα εξής πεδία: Magic Number με μέγεθος 8 bits. Είναι ένας μοναδικός αριθμός που επιλέγεται και χρησιμοποιείται για όλη τη συσκευή. Για την επιλογή του πρέπει να ελέγξουμε τους υπόλοιπους μαγικούς αριθμούς που χρησιμοποιούνται στο σύστημα Number με μέγεθος 8 bits. Αύξων αριθμός για κάθε λειτουργία. Direction ορίζει την κατεύθυνση ροής των δεδομένων. Η κατεύθυνση αυτή ορίζεται από την πλευρά του της εφαρμογής. Για παράδειγμα η τιμή _IOC_READ χρησιμοποιείται για διάβασμα από την πλευρά του χρήστη, δηλαδή για γράψιμο από τη συσκευή στο χώρο χρήστη. Οι υπόλοιπες επιλογές είναι οι _IOC_WRITE και _IOC_NONE(no data transfer).

9 2 ΟΔΗΓΟΣ ΣΥΣΚΕΥΗΣ 8 Size: Το μέγεθος των δεδομένων που εμπλέκονται. Το πεδίο αυτό εξαρτάται από την αρχιτεκτονική και δεν είναι υποχρεωτικό. Για την ευκολότερη δήλωση προσφέρεται μια σειρά από μακροεντολές, όπου type ο Magic Number, nr το Number και datatype ο τύπος: _IO(type,nr): χωρίς ορίσματα _ΙΟR(type, nr,datatype): διάβασμα από driver αντικειμένου datatype _IOW(type, nr, datatype): γράψιμο στον driver αντικειμένου datatype _IORW(type, nr, datatype): διάβασμα/γράψιμο Για τον οδηγό μας λοιπόν έχουμε τις εξής δηλώσεις: # d e f i n e LUNIX_IOC_MAGIC k # d e f i n e LUNIX_IOC_GETSIZE _IOW ( LUNIX_IOC_MAGIC, 0, i n t * ) # d e f i n e LUNIX_IOC_SETSIZE _IOR ( LUNIX_IOC_MAGIC, 1, i n t * ) Στη μέθοδο μας τώρα πρέπει να κάνουμε τους εξής ελέγχους: Το ότι το όρισμα cmd έχει σαν magic number τον magic number της συσκευής: i f ( _IOC_TYPE ( cmd )! = LUNIX_IOC_MAGIC ) r e t u r n ENOTTY ; Ο δεύτερος έλεγχος αφορά το όρισμα arg. Καθώς στην ioctl μας το όρισμα αυτό είναι δείκτης σε int, ο οδηγός πρέπει να ελέγξει αν ο δείκτης αυτός είναι έγκυρος και αν υπάρχουν δικαιώματα εγγραφής ή ανάγνωσης. Αυτό το επιτυγχάνουμε με τη συνάρτηση int access_ok. Αξίζει να σημειώσουμε ότι το return value της συνάρτησης είναι αντίθετο από το συνηθισμένο. Δηλαδή επιστρέφει 1 για επιτυχία και 0 διαφορετικά.ο έλεγχος λοιπόν είναι ο εξής: i f ( _IOC_DIR ( cmd ) & _IOC_READ ) r e t =! a c c e s s _ o k ( VERIFY_WRITE, ( void u s e r * ) arg, _IOC_SIZE ( cmd ) ) ; e l s e i f ( _IOC_DIR ( cmd ) & _IOC_WRITE ) r e t =! a c c e s s _ o k ( VERIFY_READ, ( void u s e r * ) arg, _IOC_SIZE ( cmd ) ) ; i f ( r e t ) r e t u r n EFAULT ; Τέλος για το διάβασμα και γράψιμο χρησιμοποιούνται οι συναρτήσεις put_user και get_user οι οποίες είναι οι αντίστοιχες των copy_from_user και copy_to_user αλλά optimized για συγκεκριμένους τύπους δεδομένων. Οπότε οι αλλαγές για size της συσκευής γίνονται ως εξής: switch ( cmd ) { c a s e LUNIX_IOC_GETSIZE : dev = f i l p > p r i v a t e _ d a t a ; r e t = p u t _ u s e r ( dev > s i z e, ( i n t u s e r * ) a r g ) ; break ; c a s e LUNIX_IOC_SETSIZE : dev = f i l p > p r i v a t e _ d a t a ; ; r e t = g e t _ u s e r ( dev > s i z e, ( i n t u s e r * ) a r g ) ; break ; d e f a u l t : r e t = ENOTTY ; ;

10 2 ΟΔΗΓΟΣ ΣΥΣΚΕΥΗΣ mmap Η τελευταία μέθοδος μας είναι η lunix_mmap η οποία αφορά το system call mmap το οποίο χρησιμοποιείται για να γίνεται map χώρος μνήμης της συσκευής στο χώρο χρήστη. Κάθε κλήση στην mmap δημιουργεί μια περιοχή εικονικών διευθύνσεων(virtual Memory Area). Για τον λόγο αυτό το λειτουργικό διατηρεί μια δομή για κάθε VMA, την vm_area_struct η οποία ορίζεται στο linux/mm_types.h. Αυτή η δομή περιέχει έναν δείκτη σε μια δομήstruct vm_operations_struct, η οποία ορίζεται στο linux/mm.h>,και η οποία περιέχει pointers σε συναρτήσεις που υλοποιούν λειτουργίες που χρειάζονται για την διαχείριση του χώρου μνήμης του χρήστη. Οι κύριες λειτουργίες που χρειάζονται και υλοποιούμε είναι οι εξής: void ( * open ) ( s t r u c t v m _ a r e a _ s t r u c t * a r e a ) ; Χρησιμοποιείται για την αρχικοποίηση της VMA, και καλείται κάθε φορά που γίνεται μια νέα αναφορά στην VMA, εκτός από την πρώτη φορά που γίνεται μέσω της mmap. void ( * c l o s e ) ( s t r u c t v m _ a r e a _ s t r u c t * a r e a ) ; Καλείται κάθε φορά που καταστρέφεται ένα VMA. i n t ( * f a u l t ) ( s t r u c t v m _ a r e a _ s t r u c t * vma, s t r u c t v m _ f a u l t * vmf ) ; Η συνάρτηση αυτή είναι η σημαντικότερη συνάρτηση. Κάθε φορά που το πρόγραμμα χρήστη κάνει μια αναφορά σε μια σελίδα που ανήκει στη VMA αλλά δεν υπάρχει στη μνήμη καλείται η fault. Αρχικά λοιπόν ορίζομαι τη δομή μας vm_operations_struct: s t r u c t v m _ o p e r a t i o n s _ s t r u c t lunix_vm_ops = {. open = lunix_ vma_ open,. c l o s e = l u n i x _ v m a _ c l o s e,. f a u l t = l u n i x _ v m a _ f a u l t, ; Η μέθοδος lunix_mmap δεν έχει ιδιαίτερες λειτουργίες να εκτελέσει καθώς αυτές θα εκτελούνται α- πό την fault. Ο κύριος ρόλος της είναι να αρχικοποιήσει στο vma τον δείκτη vm_ops και να τον θέσει στο δικό μας lunix ops καθώς και να θέσει στα vm_flags την τιμή VM_RESERVER που αποτρέπει τον πυρήνα από τα να βγάζει τις σελίδες από τη μνήμη. Επίσης καλεί την lunix_vm_open καθώς όπως αναφέραμε δεν καλείται αυτόματα την πρώτη φορά. Επίσης η mmap λειτουργεί στον οδηγό μας μόνο όταν το order είναι 0. Αυτό συμβαίνει γιατί το η μέθοδος fault αναλαμβάνει τον έλεγχο 1 σελίδας. Θα μπορούσαμε να το διορθώσουμε αυτό αλλά θα δημιουργούταν αρκετά προβλήματα τον page reference counter που διατηρεί το λειτουργικό σύστημα για να ελευθερώνει σελίδες. Έχουμε λοιπόν τα εξής: i n t lunix_mmap ( s t r u c t f i l e * f i l p, s t r u c t v m _ a r e a _ s t r u c t * vma ) { s t r u c t i n o d e * i n o d e = f i l p >f _ d e n t r y >d _ i n o d e ; s t r u c t l u n i x _ d e v * dev = f i l p > p r i v a t e _ d a t a ; / * r e f u s e t o map i f o r d e r i s n o t 0 * / i f ( dev >p _ o r d e r ) r e t u r n ENODEV ; vma >vm_ops = &lunix_vm_ops ;

11 3 ΑΦΑΙΡΕΣΗ MODULE 10 vma >v m _ f l a g s = VM_RESERVED ; vma >v m _ p r i v a t e _ d a t a = f i l p > p r i v a t e _ d a t a ; / / s a v e t h e dev f o r l a t e r use lunix_vma_open ( vma ) ; / / f o r t h e f i r s t map r e t u r n 0 ; Η μέθοδοι open και close αναλαμβάνουν μόνο να αυξάνουν και να μειώνουν τον μετρητή dev- >vmas ο οποίος αποτελεί έναν μετρητή των ενεργών mappings. Η κύρια συνάρτηση όπως αναφέραμε είναι η fault (nopage σε παλαιότερες εκδόσεις). i n t l u n i x _ v m a _ f a u l t ( s t r u c t v m _ a r e a _ s t r u c t * vma, s t r u c t v m _ f a u l t * vmf ) Αυτή καλείται κάθε φορά που γίνεται ένα page fault στον mapped χώρο του χρήστη Η μέθοδος αυτή δέχεται ένα pointer σε vm_area_struct και έναν pointer σε μια δομή vm_fault που περιλαμβάνει διάφορες πληροφορίες και είναι η εξής: s t r u c t v m _ f a u l t { unsigned i n t f l a g s ; / * FAULT_FLAG_xxx f l a g s * / p g o f f _ t p g o f f ; / * L o g i c a l page o f f s e t b a s e d on vma * / void u s e r * v i r t u a l _ a d d r e s s ; / * F a u l t i n g v i r t u a l a d d r e s s * / s t r u c t page * page ; / * > f a u l t h a n d l e r s s h o u l d r e t u r n a * page here, u n l e s s VM_FAULT_NOPAGE * i s s e t ( which i s a l s o i m p l i e d by * VM_FAULT_ERROR ). * / To pgoff είναι το offset της σελίδας που προκάλεσε το σφάλμα μέσα στο VMA. Το virtual_address αποτελεί που προσπέλασε ο χρήστης. Η fault πρέπει να εντοπίσει την σελίδα που λείπει και να την βάλει στη θέση που δείχνει ο pointer *page. Αν κάτι πάει στραβά, ενημερώνει τον πυρήνα θέτοντας το κατάλληλο error code στο πεδίο flags. Η fault μας εντοπίζει τη διεύθυνση της σελίδας με βάση το offset. Στην συνέχεια χρησιμοποιώντας τη συνάρτηση virt_to_page παίρνει τη έναν pointer στη δομή page που δείχνει η διεύθυνση. Αφού αυξήσει τον reference counter της σελίδας με την get_page, τη θέτει στη vmf->pages και επιστρέφει: page = v i r t _ t o _ p a g e ( dtn >d a t a [ t a b l e _ o f f s e t ] ) ; i f (! page ) goto out ; g e t _ p a g e ( page ) ; / / c o u n t e r vmf >page = page ; 3 Αφαίρεση Module Κατά την αφαίρεση του module πρέπει να γίνουν διάφορες εργασίες. Το ποια συνάρτηση θα κληθεί κατά την αφαίρεση του module δηλώνονται με το macro: Η συνάρτηση που αναλαμβάνει τις εργασίες καθαρισμού είναι η lunix_exit. Αυτή χρειάζεται να αφαιρέσει τη συσκευή από το σύστημα με κλήση της cdev_del καθώς και να αποδεσμεύσει όσο χώρο έχει δεσμεύσει η συσκευή: s t a t i c void l u n i x _ e x i t ( void ) { d e v _ t dev = MKDEV( l u n i x _ m a j o r, l u n i x _ m i n o r ) ; i f ( d e v i c e ) {

12 3 ΑΦΑΙΡΕΣΗ MODULE 11 c d e v _ d e l (& d e v i c e >mydev ) ; l u n i x _ r e s e t _ d e v ( d e v i c e ) ; k f r e e ( d e v i c e ) ; u n r e g i s t e r _ c h r d e v _ r e g i o n ( dev, 1 ) ; p r i n t k ( KERN_ALERT Goodbye \ n ) ;

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

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

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

Οδηγός Ασύρματου Δικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux

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

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

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

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

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

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

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

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

Οδηγός Ασύρματου ικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux

Οδηγός Ασύρματου ικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Οδηγός Ασύρματου ικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux Εργαστήριο Λειτουργικών

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

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

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

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

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

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

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

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

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

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

Εικονική Μνήμη (1/2)

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

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

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & Άνοιγμα αρχείου μέσα από τo SPIM, διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη (Διάλεξη 3) 1 Μετατροπή χαρακτήρων ASCII σε ακέραιο Ο πιο κάτω κώδικας

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

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

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

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

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

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

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

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

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

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

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

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT ΘΕΩΡΙΑ Στο project αυτό έχουμε υλοποιήσει τις βασικές συναρτήσεις της stdlib της C malloc και free Η συνάρτηση malloc είναι η void *malloc(int

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

Εργαστήριο 5. Εαρινό Εξάμηνο

Εργαστήριο 5. Εαρινό Εξάμηνο Τομέας Υλικού και Αρχιτεκτονικής Υπολογιστών ΗΥ134 - Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 Εργαστήριο 5 Εαρινό Εξάμηνο 2012-2013 Στό χόι τόυ εργαστηρι όυ Χρήση στοίβας Αναδρομή Δομές δεδομένων Δυναμική

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

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

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

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

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

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

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

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor Προηγμένοι Μικροεπεξεργαστές Εργαστήριο 4 - Editor Περιγραφή Υλοποίηση ενός υποτυπώδους editor που θα: Διαβάζει ένα προκαθορισμένο αρχείο Θα το απεικονίζει στην οθόνη Θα κάνει highlight με έναν ελεγχόμενο

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

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

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

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

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

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

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

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

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

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

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

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

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

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1 Μνήμη Διευθύνσεις Δείκτες Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη Η/Υ Ειδικό υλικό, ξεχωριστό από τον επεξεργαστή Χρησιμεύει για την αποθήκευση δεδομένων και της κατάστασης εκτέλεσης του προγράμματος

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

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

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

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

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

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

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

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

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

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

Εικονική Μνήμη (Virtual Μemory)

Εικονική Μνήμη (Virtual Μemory) ΗΥ 431 Αρχιτεκτονική Παραλλήλων Συστημάτων Διάλεξη 16 Εικονική Μνήμη (Virtual Μemory) Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Απλό πείραμα int *data = malloc((1

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

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

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

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

Διάλεξη 5: Δείκτες και Συναρτήσεις

Διάλεξη 5: Δείκτες και Συναρτήσεις Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 5: Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 5-1 Περιεχόμενο

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

Φροντιστήριο. Παραγωγή τελικού κώδικα. Παραγωγή τελικού κώδικα

Φροντιστήριο. Παραγωγή τελικού κώδικα. Παραγωγή τελικού κώδικα ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Παραγωγή τελικού κώδικα Από τον ενδιάμεσο κώδικα στον τελικό (1/2) Τα ορίσματα των εντολών ενδιάμεσου κώδικα είναι του τύπου expr*. Αυτές οι εκφράσεις θα πρέπει

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

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

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

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

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

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

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

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

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

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

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

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX Μάθημα: Λειτουργικά Συστήματα Συστήματα Αρχείων Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης (clam@unipi.gr) Δρ. Α. Γαλάνη (agalani@unipi.gr) Λειτουργικά Συστήματα 1 Αρχεία με Χαρτογράφηση

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

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

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

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

Διάλεξη 11η: Δείκτες, μέρος 1

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

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

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

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

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

Δείτε τώρα και πώς θα έπρεπε να ήταν το παραπάνω: Page 1

Δείτε τώρα και πώς θα έπρεπε να ήταν το παραπάνω: Page 1 Επειδή αρκετοί εξακολουθείτε να βάζετε σχόλια στην ίδια γραµµή αλλά πολύ πιο "δεξιά" από τον κώδικα που σχολιάζουν, δείτε παρακάτω πώς µοιάζει ένα τέτοιο πρόγραµµα σε συµβατικό terminal. Όπως έχουµε πει

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

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

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

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

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

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

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

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

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

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

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

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

Στοίβες με Δυναμική Δέσμευση Μνήμης

Στοίβες με Δυναμική Δέσμευση Μνήμης ΕΠΛ 231 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ 10/02/10 Παύλος Αντωνίου Στοίβες με Δυναμική Δέσμευση Μνήμης Στοίβα: Στοίβα είναι μια λίστα που έχει ένα επιπλέον περιορισμό. Ο περιορισμός είναι ότι οι εισαγωγές

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

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων. Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων. Έως τώρα σε ένα πρόγραμμα έχουμε μάθει να εισάγουμε δεδομένα από το πληκτρολόγιο χρησιμοποιώντας την συνάρτηση scanf() και να εκτυπώνουμε δεδομένα

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 5: Δείκτες και Δυναμική Δέσμευση- Αποδέσμευση Μνήμης στη C/ Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με δείκτες /Ένα πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη ( ιάλεξη 3) ιδάσκων: Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy

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

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

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 3: Δείκτες και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αριθμητική Δεικτών Δείκτες και Πίνακες Παραδείγματα Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

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

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

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

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

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY20) # μνήμη & μεταβλητές πρόγραμμα & εκτέλεση Ψηφιακά δεδομένα, μνήμη, μεταβλητές 2 Δυαδικός κόσμος Οι υπολογιστές είναι δυαδικές μηχανές Όλη η πληροφορία (δεδομένα και κώδικας) κωδικοποιείται

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

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

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

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

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

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

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

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

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

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

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών Διδάσκων: Δρ. Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy www.ece.ucy.ac.cy/courses/ece213 Ορίσματα στο QtSpim (set parameters

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

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών Διδάσκων: Δρ. Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy www.ece.ucy.ac.cy/courses/ece213 Μετατροπή ASCII σε Δεκαδικό

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

Λιβανός Γιώργος Εξάμηνο 2017Β

Λιβανός Γιώργος Εξάμηνο 2017Β Λιβανός Γιώργος Εξάμηνο 2017Β Υπολογιστικό σύστημα Υλικό (hardware) Λογισμικό (Software) Ολοκληρωμένα κυκλώματα, δίσκοι, οθόνη, κλπ. Λογισμικό συστήματος Προγράμματα εφαρμογών Χρειάζονται ένα συντονιστή!!!

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

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο 2011 2012 Καθηγητές Μ. Χατζόπουλος, Δ. Γουνόπουλος Άσκηση 1 Παράδοση 4 Μαϊου Σκοπός της εργασίας αυτής είναι η κατανόηση

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 8: Πολυδιάστατοι Πίνακες και Δυναμική Δέσμευση Μνήμης

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

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

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

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

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

File Management και I/O στο UNIX

File Management και I/O στο UNIX File Management και I/O στο UNIX Λειτουργικά Συστήματα Ντίρλης Νικόλαος- ΕΤΥ Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πάτρας Συστήματα 2013-2014 1 Εισαγωγή Ένα από τα βασικά στοιχεία της επιστήμης της Πληροφορικής

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

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Οκτώβριος 2018 1/28 1 (implicit) μετατροπές 2 (Functions) 3 (Pointers) 4 (Arrays) 2/28 (implicit)

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

Αρχιτεκτονική Υπολογιστών

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές

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

FAIL PASS PASS οριακά

FAIL PASS PASS οριακά AEM 0001 0002 COMMENTS οριακά -Το πρόγραµµά σου δουλεύει λάθος για τις εισόδους: 7 -Δεν έχεις µεριµνήσει για την περίπτωση step=1. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Δείκτες (pointers) και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Αριθμητική Δεικτών - Δείκτες και Πίνακες - Παραδείγματα Διδάσκων: Παναγιώτης

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

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών Ένα Ακόμα Παράδειγμα #include int main(int argc, char* argv[]) { } putchar('h'); putchar('e'); putchar('l');

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 7: Συναρτήσεις Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Λειτουργικά Συστήματα Η/Υ Λειτουργικά Συστήματα Η/Υ Κεφάλαιο 8 «Ιδεατή Μνήμη» Διδάσκων: Δ. Λιαροκαπης Διαφάνειες: Π. Χατζηδούκας Ιδεατή Μνήμη Οργάνωση. Εισαγωγή. Ιδεατές και πραγματικές διευθύνσεις. Λογική οργάνωση. Τμηματοποίηση

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

Οδηγός Ασύρµατου ικτύου Αισθητήρων στο Λειτουργικό Σύστηµα Linux

Οδηγός Ασύρµατου ικτύου Αισθητήρων στο Λειτουργικό Σύστηµα Linux ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Οδηγός Ασύρµατου ικτύου Αισθητήρων

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

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

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

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις (Functions) Οι βασικές λειτουργικές ενότητες ενός προγράμματος C Καλούνται με ορίσματα που αντιστοιχούνται σε

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

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

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

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός συστημάτων UNIX/POSIX. Ανακατευθύνσεις (redirections)

Προγραμματισμός συστημάτων UNIX/POSIX. Ανακατευθύνσεις (redirections) Προγραμματισμός συστημάτων UNIX/POSIX Ανακατευθύνσεις (redirections) Shell & ανακατεύθυνση εισόδου Κατά την εκτέλεση ενός προγράμματος, η είσοδος και η έξοδος ενός προγράμματος μπορούν να ανακατευθυνθούν

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

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών Διδάσκων: Δρ. Γιώργος Ζάγγουλος Email: zaggoulos.george@ucy.ac.cy www.ece.ucy.ac.cy/courses/ece213 Μετατροπή ASCII σε Δεκαδικό

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

Εργαστήριο Λειτουργικών Συστημάτων. File Systems

Εργαστήριο Λειτουργικών Συστημάτων. File Systems Εργαστήριο Λειτουργικών Συστημάτων File Systems Σύνοψη ιάλεξης Λειτουργικό Σύστημα Minix Λειτουργίες Συστήματος Αρχείων ομή Συστήματος Αρχείων Ανάγνωση Αρχείων 2 Filesystem στο MINIX 3 Οπως όλα τα Λ.Σ.,

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

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

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

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

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1 ΑΕΜ ΒΑΘΜΟΣ 449 PASS 451 PASS 476-1733 PASS 1779-1899 FAIL 1900 FAIL Page 1 1901 PASS 1904 PASS 1908 PASS 1909 PASS 1910 - Page 2 1911 PASS 1914 Οριακό PASS 1915 PASS 1926 PASS Page 3 1927 PASS 1928 Οριακό

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

ΕΝΟΤΗΤΑ 3 ΕΚΦΡΑΣΕΙΣ, ΑΝΑΜΟΝΕΣ (DELAYS), ΗΧΟΙ

ΕΝΟΤΗΤΑ 3 ΕΚΦΡΑΣΕΙΣ, ΑΝΑΜΟΝΕΣ (DELAYS), ΗΧΟΙ ΕΝΟΤΗΤΑ 3 ΕΚΦΡΑΣΕΙΣ, ΑΝΑΜΟΝΕΣ (DELAYS), ΗΧΟΙ Σκοπός και περίγραμμα της Ενότητας 3 Σκοπός της παρουσίασης Να δούμε πιο προσεκτικά τις μεταβλητές, τις σταθερές και τις εκφράσεις γενικότερα. Να σας παρουσιάσουμε

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