Εξέλιξη Κομματιού
Εισαγωγή
- πολύ γρήγορη ιστορία του GNU/Linux
- άδειες χρήσης
- διαχείριση εκδόσεων κερνέλ
- κύκλος έκδοσης
- δέντρα κερνέλ
- κύρια γραμμή (mainline)
- κερνέλ υπό ανάπτυξη vs. χώρος χρήστη
- μηχανισμός vs. πολιτική (policy)
- εναλλακτικές λύσεις για τρόπους διαχείρισης κερνέλ
- RTOS vs. Linux
Διαχείριση Μνήμης
- φυσική μνήμη vs. εικονική μνήμη
- διαχείριση χώρου πάγωσης στο κερνέλ
- σελίδες (pages)
- zones
- API
- slab
Ενδοιαφέρουσες Αλλαγές στο Κερνέλ (Kernel Patch)
- κύκλος ζωής
- git
- πηγαίος κώδικας κερνέλ
- δημιουργία αλλαγής (patch)
- εξέταση αλλαγής
- διόρθωση αλλαγής
- άποστολή αλλαγής (ship patch)
- ελεγχθέν κώδικας
Μονάδες Κερνέλ (Kernel Modules)
- πώς να πάρετε τις πηγές κερνέλ
- διαμόρφωση/κατασκευή/εγκατάσταση (configure/build/install)
- τρόποι διαχείρισης συσκευών (σύνδεση στατικά, φόρτωση κατά την εκτέλεση)
- init/exit
- άδειες χρήσης (licensing)
- EXPORT SYMBOL GPL
- εκτός δέντρου makefile (out of tree makefile)
- module-init-tools
- μονάδα σε δέντρο κερνέλ
- Kconfig
- παράδοση παραμέτρων (parameter passing)
- sparse
Τρόποι Διαχείρισης Χαρακτήρων (Char Drivers)
- αρχιτεκτονική
- διεπαφή χρήστη/κερνέλ (user/kernel interface)
- υποδιασύστημα I/O
- VFS
- sysfs (συσκευές, bus, drivers, κλάσεις)
- kobject/ktype/kset
- μοντέλο διαχείρισης συσκευών του Linux kernel
- αρχεία συσκευών (device files)
-
τρόπος διαχείρισης χαρακτήρων
- εκκίνηση (initialization)
- Εγγραφή (registration)
- ανοιχτών, κλειδών
- cdev, cdev add, cdev del,...
- μεγάλα/μικρά αριθμοί (major/minor numbers)
- udev, udevmonitor, udevadm
Προηγμένες Λειτουργίες Τρόπων Διαχείρισης Χαρακτήρων
- ioctl
- unlocked ioctl
- compat ioctl
- API χώρου χρήστη (user space)
- API χώρου κερνέλ (kernel space)
- κύκλος ζωής διαδικασίας
- ύπνος/μπλόκινγκ (sleeping/blocking)
- Υπνούντα/Εξυπνούντα (sleeping/waking up)
- ουρά περιμένουσας (wait queue)
- μπούκι κτυφωνήδης (thundering herd)
- poll/select
Επανεξέταση Κερνέλ (Kernel Debugging)
- επανεξέταση
-
επανεξέταση του κερνέλ (kernel debugging)
- δυαδική αναζήτηση με git
- υποστήριξη επανεξέτασης από το κερνέλ (debug support from kernel)
- printk, syslogd, klogd, loglevels, rate limit, debug levels, selective subsystems
- επανεξέταση μέσω ερωτήματος debugfs (debugging by querying debugfs)
- επανεξέταση κτυφών (oops debugging, asserting oops)
- Μαγική κλειδί SysRq
- kgdb/kdb
- JTAG
Συντήρηση (Tracing)
- gcov
- lcov
- oprofile
-
ftrace
- nop tracer
- function tracer
- sched switch tracer
- function graph tracer
- dynamic tracer
- trace-cmd/kernelshark
- perf
- LTTng
Μελάνια (Interrupts)
- μελάνια vs. εξονυχιστική έρευνα (polling)
- μελάνια
- τμήματα προγράμματος
- αντικατάσταση (reentrancy)
- γεγονότα (events)
- χειριστής μελάνια (interrupt handler)
- κοινός χειριστής μελάνια (shared interrupt handler)
- ροή μελάνια (interrupt flow)
- ελέγχους μελάνια (interrupt control)
Αναβολή Εργασίας
- τμήματα από πάνω/κάτω (top/bottom halves)
- softirqs
- tasklets
- work queues
- μελάνια που εκτελούνται ως κλήσεις (threaded interrrupts)
Συμφωνία
- κρίσιμη περιοχή/τμήμα (critical region/section)
- ατόμιες λειτουργίες (atomic)
- συνθήκη ανταγωνισμού (race condition)
- Συγχρονισμός (synchronization)
- κλείδωμα (locking)
- λύσεις κλείδωματος (locking solutions)
- χάους (deadlock)
- ανταγωνισμός (contention)
- τι πρέπει να κλείδωνε;
-
τι μπορεί να χρησιμοποιηθεί;
- ατόμιες λειτουργίες (atomic operations)
- κλειδώματα ποστού (spin locks)
- κλειδώματα ανάγνωσης-γραφής ποστού (reader-writer spin locks)
- σημαφόροι (semaphore)
- δυναμικά σημαφόροι (binary semaphore)
- μέτωνες (mutex)
- σημαφόροι ανάγνωσης-γραφής (reader-writer semaphore)
- μεταβλητές εκτέλεσης (completion variables)
- κλειδώματα σειράς (sequential locks)
- απενεργοποίηση πρόωθησης (disable preemption)
- σειρά και φραγμές (ordering and barriers)
Χρόνος
- HZ
- Jiffies
- μεγάλα/μικρά καθυστέρησεις (big/small delays)
- timers του kernel
Υλική I/O
- Πύλες I/O (I/O Ports)
- Μνήμη I/O (I/O Memory)
- Πώς να αντιδράσετε στα πλευροδιακόπτη κατά την πρόσβαση σε ρευστές;
Επικοινωνία Χρήστη-Κερνέλ
- put(get)_user()
- copy to(from)_user()
- I/O του Κερνέλ (Kernel I/O)
- αποδότηση μνήμης
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
Πορταβιλικότητα
- μέγεθος λέξης (word size)
- κρυφά τύποι (opaque types)
- σήμαντικά/ασήμαντικά char
- προσαρμογή δεδομένων (data alignment)
- αναπόσπαστη επέκταση
- πολιτική αναβίωσης κώδικα (code reuse)
- endianess
- σύστημα tick
- μέγεθος σελίδας (page size)
- Ταξινόμηση και φραγμές
- SMP/πρόωθηση/υψηλή μνήμη (SMP/preemption/high memory)
Εκτός αν ορίζεται διαφορετικά, το περιεχόμενο και αυτή η επισκόπηση μαθήματος είναι υπό Αναφορά-Μη Εμπορική-Παραμονή 4.0 Διεθνές (CC BY-NC-SA 4.0).
Απαιτήσεις
- Βασική γνώση της χρήσης συστήματος GNU/Linux ως τελικός χρήστης
- Βασική γνώση κλικ προσανατολισμένων σε εντολές
- Βασική γνώση ανάπτυξης χώρου χρηστών / εφαρμογών
- Διαμεσαία γνώση προγραμματισμού C
- Θα πρέπει να έχουν συμμετέχει στο Ενσωματωμένα Σύστηματα GNU/Linux Architecture (δραστήρια πρότυπο!) και/ή να έχουν καλή κατανόηση των εκεί παρουσιαζόμενων θεμάτων
Σχόλια (5)
Πολύ χρήσιμες πρόσθετες πληροφορίες
Grzegorz - Comp S.A.
Κομμάτι - BLoC Pattern
Μηχανική Μετάφραση
Ο Εντουάρδος είναι ένας υπέροχος διευθυντής συναντήσεων
Zibusiso Ncube - Agricatural Research Council
Κομμάτι - Ionic 4 and Angular for Developers
Μηχανική Μετάφραση
Η γνώση του Miguel στο θέμα ήταν εκτετάμενη. Έκανε την κατάρτιση διαφανή και το ρυθμό ισορροπημένο, προσθέτοντας σε κάθε τμήμα νέους χαρακτηρισμούς όπως χρειάζονταν. Κάλυψε πάντα ό,τι ζητήθηκε και απάντησε σε κάθε ερώτημα με τέλειο τρόπο. Ήταν μια πολύ χαραδευτική εμπειρία.
Paul Coaton - SEMPCheck Services
Κομμάτι - Flutter Development Bootcamp with Dart
Μηχανική Μετάφραση
Ότι ο εκπαιδευτής προσαρμόζεται στις ανάγκες μας
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Κομμάτι - The Yocto Project - An Overview - hands-on
Μηχανική Μετάφραση
Ο εκπαιδευτής ήταν ζηλωτικός, χρηστός και αγαπούσε το θέμα.
Isaac Murphy - Royal New Zealand Airforce
Κομμάτι - Build Native iOS and Android Apps with Flutter
Μηχανική Μετάφραση