Szkolenia The Linux Foundation

Cel szkolenia dlearning

Ten czterodniowy kurs ma na celu zapewnienie doświadczonym programistom solidnego zrozumienia jądra Linuxa. Oprócz szczegółowego spojrzenia na teorię i filozofię jądra Linuxa, będziesz także uczestniczył w rozległych ćwiczeniach praktycznych i demonstracjach zaprojektowanych w celu dostarczenia niezbędnych narzędzi do rozwijania i debugowania kodu jądra Linuxa.

Na tym kursie dowiesz się między innymi:

  • Jak zaprojektowano Linuxa
  • Jak działają algorytmy jądra
  • Jak zarządzać sprzętem i pamięcią
  • O technikach modularyzacji i debugowania
  • Jak działa społeczność programistów jądra i jak skutecznie z nią pracować

Informacje zawarte w tym kursie będą działać z każdą główną dystrybucją Linuxa.

Plan szkolenia Rozwiń listę

  1. Wprowadzenie
    • Cele
    • Przedstawienie uczestników
    • The Linux Foundation
    • Linux Foundation Training
    • Dystrybucje Linux
    • Platformy
    • Przygotowanie twojego systemu
    • Pobranie i używanie wirtualnej maszyny
    • Rzeczy zmieniające się w Linux
    • Dokumentacja i linki
    • Rejestracja kursu
  2. Czynności wstępne<
    • Procedury
    • Wersje jądra
    • Zródła jądra i zasotosowanie git
  3. Jak pracować w projekcie Open Source **
    • Omówienie jak prawidłowo współpracować w takim projekcie
    • Skup się na bezpieczeństwie i jakości
    • Badanie i zrozumienie DNA projektu
    • Dowiedz się nad czym chcesz pracować
    • Identyfikacja opiekunów i ich przepływy pracy i metody
    • Uzyskanie wczesnego wejście i pracy w otwartym środowisku
    • Przekazuj przyrostowe bity, a nie duże zrzuty kodu
    • Zostaw swoje ego za drzwiami
    • Bądź cierpliwy, rozwijaj relacje długoterminowe, bądź pomocny
  4. Architektura jądra I
    • UNIX i Linux **
    • Monolityczne i mikro jądra
    • Metody obiektowe
    • Główne zadania jądra
    • Przestrzeń użytkownika i przestrzeń jądra
    • Linux w trybie jądra
  5. Ogólny zarys programowania jądra
    • Numery błędów i pobieranie wyjścia jądra
    • Struktura zadań
    • Przydziały pamięci
    • Przesyłanie danych między użytkownikiem a przestrzeniami jądra
    • Połączone listy
    • Konwersja String’ów na liczby
    • Jiffies
    • Laboratoria
  6. Moduły
    • Czym są moduły?
    • Trywialny przykład
    • Kompilacja modułów
    • Moduły vs Built-in
    • Narzędzia do obsługi modułów
    • Automatyczne ładowanie / rozładowywanie modułów
    • Licznik użycia modułu
    • Struktura modułu
    • Licencjonowanie modułu
    • Eksportowanie symboli
  7. Rozwiązywanie symboli **
    • Laboratoria
  8. Architektura jądra II
    • Procesy, wątki i zadania
    • Kontekst proces
    • Łatka na jądro w czasie rzeczywistym
    • Dynamiczne łatanie jądra
    • Alternatywy wdrażania**
    • Migracja do nowej platformy **
    • Laboratoria
  9. Inicjalizacja jądra
    • Ogólny zarys inicjalizacji jądra
    • Rozruch systemu
    • Das U-Boot dla systemów wbudowanych**
  10. Konfiguracja i kompilacja jądra
    • Instalacja i układ źródła jądra
    • Przeglądarki jądra
    • Pliki konfiguracyjne jądra
    • Budowanie jądra i pliki Makefile
    • Initrd i initramfs
    • Laboratoria
  11. Połączenia systemowe
    • Czym są połączenia systemowe?
    • Dostępne połączenia systemowe
    • W jaki sposób realizowane są wywołania systemowe
    • Dodanie nowego wywołania systemowego
    • Laboratoria
  12. Styl jądra i uwagi ogólne
    • Styl kodowania
    • kernel-doc **
    • Używanie ogólnych procedur i metod jądra
    • Tworzenie poprawki jądra
    • sparse
    • Używanie likely() i unlikely()
    • Pisanie przenośnego kodu, CPU, 32/64-bit, Kolejność bajtów
    • Pisanie dla SMP (Symetric Multiprocessing)
    • Pisanie dla HMS (High Memory Systems)
    • Zarządzanie zasilaniem
    • Dbanie o bezpieczeństwo
    • Mieszanie nagłówków przestrzeni użytkownika i jądra**
    • Laboratoria
  13. Metody synchronizacji
    • Współbieżność i metody synchronizacji
    • Operacje atomowe
    • Operacje bitowe
    • Spinlocks
    • Seqlocks
    • Wyłączenie przywłaszczenia
    • Muteksy
    • Semafory
    • Funkcje zakończenia
    • Read-Copy-Update (RCU)
    • Liczniki referencyjne
    • Laboratoria
  14. SMP i wątki
    • Jądra i moduły SMP
    • Koligacja procesora
    • CPUSETS
    • Algorytmy SMP - planowanie, blokowanie itp.
    • Zmienne na procesor **
    • Laboratoria
  15. Procesy
    • Czym są procesy?
    • task_struct
    • Tworzenie procesów użytkownika i wątków
    • Tworzenie wątków jądra
    • Niszczenie procesów i wątków
    • Wykonywanie procesów przestrzeni użytkownika z jądra
    • Laboratoria
  16. Ograniczenia i możliwości procesu **
    • Limity procesowe
    • Możliwości
    • Laboratoria
  17. Monitorowanie i debugowanie
    • Pakiety Debuginfo
    • Śledzenie i profilowanie
    • sysctl
    • Klucz SysRq
    • Wiadomości oops
    • Debugery jądra
    • debugfs
    • Laboratoria
  18. Planowanie
    • Główne zadania planowania
    • SMP
    • Priorytety planowania
    • Planowanie połączeń systemowych
    • Funkcja 2.4 schedule ()
    • Harmonogram O(1)
    • Odstępy czasu i priorytety
    • Równoważenie obciążenia
    • Priorytetowa inwersja i dziedziczenie priorytetowe **
    • Harmonogram CFS
    • Obliczanie priorytetów i sprawiedliwych czasów
    • Planowanie zajęć
    • Szczegóły harmonogramu CFS
    • Laboratoria
  19. Adresowanie pamięci
    • Zarządzanie pamięcią wirtualną
    • Systemy z i bez MMU i TLB
    • Adresy pamięci
    • Wysoka i niska pamięć
    • Strefy pamięci
    • Specjalne węzły urządzeń
    • NUMA
    • Stronicowanie
    • Tabele stron
    • struktura strony
    • Kernel Samepage Merging (KSM) **
    • Laboratoria
  20. Ogromne strony
    • Obsługa ogromnych stron
    • libhugetlbfs
    • Przezroczyste ogromne strony
    • Laboratoria
  21. Przydział pamięci
    • Żądanie i zwalnianie stron
    • Buddy System
    • Płyty i alokacje pamięci podręcznej
    • Pule pamięci
    • kmalloc()
    • vmalloc()
    • Wczesne alokacje i bootmem()
    • Defragmentacja pamięci
    • Laboratoria
  22. Przetwarzanie przestrzeni adresowej
    • Przydzielanie pamięci użytkownika i przestrzeni adresowej
    • Blokowanie stron
    • Deskryptory pamięci i regiony
    • Prawa dostępu
    • Przydzielanie i zwalnianie regionów pamięci
    • Błędy stron
    • Lab
  23. Cache dyskowy i swapping
    • Czym jest cache?
    • Podstawy cache’a stron
    • Czym jest Swapping?
    • Obszary wymiany
    • Zamiana stron na zewnątrz i na zewnątrz
    • Kontrolowanie Swappiness
    • Pamięć podręczna wymiany
    • Odwrotne mapowanie **
    • OOM Killer
    • Laboratoria
  24. Sterowniki urządzeń**
    • Typy urządzeń
    • Węzły urządzeń
    • Sterowniki znaków
    • Przykład
    • Laboratoria
  25. Sygnały
    • Czym są sygnały?
    • Dostępne sygnały
    • Wywołania systemowe dla sygnałów
    • Sigaction
    • Sygnały i wątki
    • W jaki sposób jądro obsługuje sygnały
    • Jak jądro wysyła sygnały
    • Jak jądro wywołuje procedury obsługi sygnałów
    • Sygnały w czasie rzeczywistym
    • Laboratoria
  26. Zakończenie i ankieta oceniająca

** Te sekcje mogą być uznane za częściowe lub w całości jako opcjonalne. Zawierają materiały źródłowe, tematy specjalistyczne lub przedmioty zaawansowane. Instruktor może zdecydować się na ich realizację lub nie, w zależności od doświadczenia w grupie i ograniczeń czasowych.

Pobierz konspekt szkolenia w formacie PDF

Dodatkowe informacje

Wymagania

Uczniowie powinni biegle posługiwać się językiem programowania C, podstawowymi narzędziami Linux (UNIX), takimi jak ls, grep i tar, i czuć się swobodnie z dowolnym dostępnym edytorem tekstu (np. Emacs, vi itp.). Doświadczenie z jakąkolwiek dystrybucją Linuksa jest pomocne, ale nie jest wymagane.

Poziom trudności
Czas trwania 4 dni
Certyfikat

Uczestnicy otrzymają certyfikaty podpisane przez The Linux Foundation.

Prowadzący

Certyfikowany trener The Linux Foundation.

Pozostałe szkolenia The Linux Foundation | Linux

Szkolenia powiązane tematycznie

Programowanie

Systemy operacyjne

Linux