Благодарим ви, че изпратихте вашето запитване! Един от членовете на нашия екип ще се свърже с вас скоро.
Благодарим ви, че направихте своята резервация! Един от членовете на нашия екип ще се свърже с вас скоро.
План на курса
Въведение
- бърза история на GNU/Linux
- лицензиране
- версиониране на ядрото
- цикъл на излизане на нови версии
- дървета на ядрото (kernel trees)
- основни версии (mainline)
- ядро срещу потребителско пространство
- механизъм срещу политика
- алтернативи на драйвери в ядрото
- RTOS срещу Linux
Управление на паметта
- виртуална памет срещу физическа памет
- разпределение на паметта в ядрото
- страници
- зони
- API
- slab
Пачове на ядрото (Kernel Patches)
- жизнен цикъл
- git
- изходен код на ядрото
- създаване на пач (patch)
- проверка на пач (check patch)
- корекция на пач (fix patch)
- изпращане на пач (ship patch)
- одитиран код
Модули на ядрото (Kernel Modules)
- получаване на изходен код на ядрото
- конфигуриране/изграждане/инсталиране
- драйвери на устройства (статично свързани, зареждани във времето на изпълнение)
- init/exit
- лицензиране
- EXPORT SYMBOL GPL
- Makefile извън дървото на ядрото
- module-init-tools
- модул в дървото на ядрото
- Kconfig
- предаване на параметри
- sparse
Драйвери за характерни устройства (Char Drivers)
- архитектура
- интерфейс потребител/ядро
- подсистема I/O
- VFS
- sysfs (устройства, магистрални устройства, драйвери, класове),
- kobject/ktype/kset
- модел на драйверите на ядрото на Linux
- файлове на устройства
-
драйвер за характерни устройства
- инициализация
- регистрация
- отваряне, затваряне
- cdev, добавяне на cdev, изтриване на cdev,...
- главни/вторични номера
- udev, udevmonitor, udevadm
Разширени операции за драйвери на характерни устройства
- ioctl
- неблокиращ ioctl (unlocked ioctl)
- совместим ioctl (compat ioctl)
- API за потребителско пространство
- API за ядро пространство
- жизнен цикъл на процеса
- спиране/блокиране
- спиране/събуждане
- опашка за чакащи (wait queue)
- тълпата (thundering herd)
- poll/select
Отстраняване на грешки в ядрото (Kernel Debugging)
- дебъгване (debugging)
-
дебъгване на ядрото
- двоичен търсач с git
- поддръжка за дебъгване от ядрото
- printk syslogd, klogd, нива на лог, ограничаване на честотата, нива на дебъгване, избор на подсистеми за дебъгване
- дебъгване чрез запитване на debugfs
- дебъгване на oops, форсиране на oops
- Magic SysRq Key
- 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)
- преки срещу полиране (polling)
- преки
- секции на кода
- вносимост (reentrancy)
- събития
- обработчик на преки (interrupt handler)
- споделен обработчик на преки
- поток на преки
- контрол на преки
Отложено изпълнение (Deferring Work)
- горни/долни половини (top/bottom halves)
- софт прекъсвания (softirqs)
- tasklets
- опашки за задачи (work queues)
- преки на нишки (threaded interrupts)
Паралелизъм (Concurrency)
- критична област/секция
- атомарни операции
- състезание на данни (race condition)
- синхронизация
- заключване (locking)
- решения за заключване
- мъртво заключване (deadlock)
- състезание за ресурси (contention)
- какво да заключим?
-
какво може да се използва?
- атомарни операции
- спинове замкове (spin locks)
- спинове замкове за четене/запис (reader-writer spin locks)
- семафор
- двоен семафор (binary semaphore)
- мутекс (mutex)
- семафор за четене/запис (reader-writer semaphore)
- променливи за завършване (completion variables)
- поредни замкове (sequential locks)
- деактивиране на превключване (disable preemption)
- поредност и бариери (ordering and barriers)
Време
- HZ
- Jiffies
- големи/малки забавяния
- таймери на ядрото
Апаратен I/O
- I/O Портове
- I/O Памет
- Как да работим със странични ефекти при достъп до регистри?
комуникация между потребител и ядро
- put(get)_user()
- копиране към(от)_user()
- ядро I/O
- мапиране на паметта
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
Преносимост
- размер на думата
- непрозрачни типове (opaque types)
- знак/беззнаков char
- подравняване на данните
- цяло число за промоция
- повторна употреба на код
- крайност (endianess)
- тикет на системата
- размер на страницата
- подредба на инструкции
- SMP/превключване/висока памет
Освен където е отбелязано иначе, съдържанието и тази учебна програма са лицензирани под Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
Изисквания
- Базово запознаване с използването на система GNU/Linux като крайни потребители
- Базово запознаване с командна среда (shell)
- Базови знания за разработка на приложения в потребителско пространство
- Средно ниво на познания по програмиране в езика C
- Препоръчително е преди това да сте посетили Вградена архитектура на системите GNU/Linux (силно препоръчително!) и/или да имате добро разбиране на темите, описани там
35 Часове
Отзиви от потребители (3)
Всичко е наред.
Adrian Rybka - SEOyon
Курс - Flutter Development Bootcamp with Dart
Машинен превод
Много полезна допълнителна информация
Grzegorz - Comp S.A.
Курс - BLoC Pattern
Машинен превод
Неговото знание и търпение.
Chrisna - Agricatural Research Council
Курс - Ionic 4 and Angular for Developers
Машинен превод