Εξέλιξη Κομματιού

Εισαγωγή

  • πολύ γρήγορη ιστορία του 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 (δραστήρια πρότυπο!) και/ή να έχουν καλή κατανόηση των εκεί παρουσιαζόμενων θεμάτων
 35 Ώρες

Αριθμός συμμετέχοντων


Τιμή ανά συμμετοχαστή

Σχόλια (5)

Εφεξής Μαθήματα

Σχετικές Κατηγορίες