Λογισμικό Συστήματος (9011)
Γραμματικάκης Μιλτιάδης
Ενότητες Θεωρητικών Διαλέξεων
Αρχικά εξετάζονται θέματα ανάπτυξης ανοικτού λογισμικού και βιβλιοθηκών εξετάζοντας μεθόδους και εργαλεία ανάπτυξης λογισμικού που βασίζονται κυρίως σε GNU software development. Τα εργαλεία αυτά αφορούν κυρίως compiling, assembling, linking, και debugging σε διάφορα συστήματα, π.χ. desktop, servers, και ενσωματωμένα συστήματα.
Κεντρικό σημείο αναφοράς αποτελεί η χρήση προγραμματιστικών τεχνικών για αύξηση της απόδοσης και μείωση της ενεργειακής κατανάλωσης (dynamic power consumption). Γίνεται εκτενής αναφορά στη χρήση παράλληλων διεργασιών, νημάτων, δια-διεργασιακής επικοινωνίας (IPC). Επίσης εξετάζονται τεχνικές επιτάχυνσης σε επίπεδο compiler (SSEx vector operations), μέθοδοι που αυξάνουν το locality (caching, prefetching) και εργαλεία ανάλυσης και βελτιστοποίησης (performance tuning).
Σε επίπεδο Linux kernel εξετάζεται η παραμετροποίηση (configuration, device trees και μετάφραση του πυρήνα (cross compiling toolchains, compiler generator). Επίσης εξετάζονται θέματα αποσφαλμάτωσης και τεχνικές προγραμματισμού σε επίπεδο kernel, π.χ. signals, probes (non-intrusive monitoring), sysfs/debugs, procfs, interrupt routines, waiting queues/sleeping, syncing, scheduling, timers, kernel memory allocation, kthreads, και tasklets. Επίσης λεπτομερώς εξετάζεται ο σχεδιασμός και η υλοποίηση Linux character, network devices (netdev, netfilter hooks) και ΤΤΥ drivers. Δίνεται έμφαση σε θέματα σχεδιασμού και υλοποίησης οδηγών πραγματικών συσκευών (μέσω ioremap, register region) και η επικοινωνία με interfaces υψηλού επιπέδου μέσω IOCTL ή GPIO. Εξηγείται θεωρητικά και η οργάνωση block drivers (DMA-based), ιδιαίτερα RAID, PCIe και USB drivers.
Επίσης εξετάζονται θέματα υποστήριξης τεχνικών multitasking καθώς και προγραμμάτων οδηγών σε συστήματα πραγματικού χρόνου (WCET, WCCT). Εξετάζονται θέματα σχεδιασμού και χρονοπρογραμματισμού διεργασιών σε γνωστά λειτουργικά συστήματα πραγματικού χρόνου, π.χ. FreeRTOS και priority-based preemptive ThreadΧ (σε Renesas πλατφόρμες). Επίσης εξετάζονται πρακτικά ζητήματα προβλεψιμότητας, ασφάλειας (security) και αξιοπιστίας (safety, reliability) μηνυμάτων σε δίκτυα πραγματικού χρόνου που χρησιμοποιούνται σε συστήματα επικοινωνιών, μεταφορών, διαστημικής μηχανικής, και συστημάτων υγείας με αντίστοιχες επιδείξεις, π.χ. CAN bus σε έξυπνα οχήματα.
Τέλος εξετάζεται η χρήση λειτουργικών συστημάτων πραγματικού χρόνου (RTOS) και βιβλιοθηκών νημάτων (thin clients, protothreads) και small stacks (uIP, protosockets, lwIP) σε περιβάλλοντα με περιορισμένες απαιτήσεις (π.χ. boards βασισμένα σε 8- ή 16-bit AVR μικροελεγκτές) Εδώ εξετάζεται λεπτομερώς και ο προγραμματισμός μικρο-συσκευών (adaptors) μέσω περιφερειακών καναλιών (UART-Serial, I2C, SPI, SWI) σε user-level, και η αντίστοιχη υποστήριξη αυτών σε kernel-level.
Εργαστηριακές Ασκήσεις
Στο εργαστηριακό μέρος του μαθήματος οι φοιτητές έχουν τη δυνατότητα πρακτικής εφαρμογής εννοιών της θεωρίας.
Οι φοιτητές έχουν δυνατότητα πρακτικής εφαρμογής των εννοιών της θεωρίας χρησιμοποιώντας ενσωματωμένες πλατφόρμες (Arduino, STM32, AVNET Zedboard, Hardkernel Odroid XU3/4, 96boards Hikey & Dragonboard 410c, Renesas Synergy S7G2) και υβριδικά συστήματα με mezzanine boards (π.χ. DSP audio, sensor boards) διασυνδεμένα με διάφορες τεχνολογίες επικοινωνιών, π.χ. Ethernet, wireless, peripheral buses, και real-time bus (LIN, CAN bus, ή MOST).
ΛιγότεραΕνότητες Θεωρητικών Διαλέξεων
Αρχικά εξετάζονται θέματα ανάπτυξης ανοικτού λογισμικού και βιβλιοθηκών εξετάζοντας μεθόδους και εργαλεία ανάπτυξης λογισμικού που βασίζονται κυρίως σε GNU software development. Τα εργαλεία αυτά αφορούν κυρίως compiling, assembling, linking, και debugging σε διάφορα συστήματα, π.χ. desktop, servers, και ενσωματωμένα συστήματα.
Κεντρικό σημείο αναφοράς αποτελεί η χρήση προγραμματιστικών τεχνικών για αύξηση της απόδοσης και μείωση της ενεργειακής κατανάλωσης (dynamic power consumption). Γίνεται εκτενής αναφορά στη χρήση παράλληλων διεργασιών, νημάτων, δια-διεργασιακής επικοινωνίας (IPC). Επίσης εξετάζονται τεχνικές επιτάχυνσης σε επίπεδο compiler (SSEx vector operations), μέθοδοι που αυξάνουν το locality (caching, prefetching) και εργαλεία ανάλυσης και βελτιστοποίησης (performance tuning).
Σε επίπεδο Linux kernel εξετάζεται η παραμετροποίηση (configuration, device trees και μετάφραση του πυρήνα (cross compiling toolchains, compiler generator). Επίσης εξετάζο
Ενότητες Θεωρητικών Διαλέξεων
Αρχικά εξετάζονται θέματα ανάπτυξης ανοικτού λογισμικού και βιβλιοθηκών εξετάζοντας μεθόδους και εργαλεία ανάπτυξης λογισμικού που βασίζονται κυρίως σε GNU software development. Τα εργαλεία αυτά αφορούν κυρίως compiling, assembling, linking, και debugging σε διάφορα συστήματα, π.χ. desktop, servers, και ενσωματωμένα συστήματα.
Κεντρικό σημείο αναφοράς αποτελεί η χρήση προγραμματιστικών τεχνικών για αύξηση της απόδοσης και μείωση της ενεργειακής κατανάλωσης (dynamic power consumption). Γίνεται εκτενής αναφορά στη χρήση παράλληλων διεργασιών, νημάτων, δια-διεργασιακής επικοινωνίας (IPC). Επίσης εξετάζονται τεχνικές επιτάχυνσης σε επίπεδο compiler (SSEx vector operations), μέθοδοι που αυξάνουν το locality (caching, prefetching) και εργαλεία ανάλυσης και βελτιστοποίησης (performance tuning).
Σε επίπεδο Linux kernel εξετάζεται η παραμετροποίηση (configuration, device trees και μετάφραση του πυρήνα (cross compiling toolchains, compiler generator). Επίσης εξετάζο