Linux Kernel Wprowadzenie
Trochę historii (1) Rozpoczęło się od Bell Labolatories we wczesnych latach 70- tych XX wieku, kiedy rozpoczęto prace nad systemem UNIX: UNIX był pierwszym systemem operacyjnym nadającym się do uruchomienia na wielu architekturach komputerowych, Przez całe lata 70-te UNIX rozwijał się w środowiskach akademickich i laboratoriach. page 2
Trochę historii (2) W latach 80- tych UNIX rozpowszechniał się w dalszym ciągu i zaczął przenikać również do biznesu, Powstały takie systemy operacyjne jak: BSD, Xenix, Sun OS, Minix, W roku 1991 Linus Torvalds, fiński programista, ujawnił swoją własną wersję systemu UNIX, Nazwał ją Linux, czyli UNIX Linusa. page 3
Trochę historii (3) Linux był pierwszym, otwartym i darmowym systemem operacyjnym, Linux był (i jest) w pełni zgodny z systemem UNIX dzięki standardom POSIX, Linux jest nadal w pełni darmowy i dostępny dla każdego, Posiada wiele niezależnych od siebie dystrybucji, np. Arch linux, Ubuntu, Mint, Suse i wiele, wiele wiele innych... Jeśli jednak wszystkie te systemy są Linuxami, to muszą posiadać część wspólną......co to za część? page 4
Kernel Słowo kernel w słowniku Cambridge Dictionary: Kernel the most important part of something, although it might not always be easy to find: There is often a kernel of truth in what they say. Kernel jest główną częścią Linuxa, Kernel jest w dalszym ciągu utrzymywany przez jego twórcę, Linusa Torvaldsa, Kernel to spory kawałek kodu źródłowego pozwalający użytkownikowi na korzystanie z mocy obliczeniowej procesorów, pamięci operacyjnej, łączności z siecią oraz wielu innych zasobów. Kernel jest jedyną częścią Linuxa, którą należy dopasować do sprzętu komputerowego. page 5
Kernel i jego moduły Do Kernela można dodawać tzw. moduły, które rozszerzają jego podstawowe funkcje. Kernel wymienia informacje z modułami za pomocą zunifikowanego (identycznego dla wszystkich modułów) interfejsu, Interfejs ten pozwala modułom na korzystanie z zasobów komputera, np. z mocy obliczeniowej procesora, Niektóre moduły można nazwać sterownikami, bo pozwalają sterować sprzętem komputerowym... page 6
Moduł a aplikacja Istnieje kilka istotnych różnic między modułem Kernela, a aplikacją: zazwyczaj moduły rozpoczynają swoje życie tuż po załadowaniu się Kernela i kończą je tuż przed zakończeniem pracy komputera, aplikacje włączamy i wyłączamy w zależności od chwilowej potrzeby, moduły rejestrują się do Kernela i świadczą usługi dla wszystkich procesów, programy użytkownika realizują z reguły jedno, konkretne zadanie, moduły korzystają jedynie z funkcji Kernelowych, Aplikacje zazwyczaj korzystają z bibliotek funkcji (np. bibliotek systemowych), choć nie muszą tego robić. page 7
Kernel, moduły i aplikacje page 8
Kernel space i User space (1) Moduły działają w przestrzeni Kernela (Kernel space) Aplikacje działają w przestrzeni użytkownika (User space) page 9
Kernel space i User space (2) User space Kernel space page 10
Pogawędka z Kernelem (1) #include <termios.h> #include <fcntl.h> #include <errno.h> #include <sys/ioctl.h> ioctl interface (dostępny z poziomu języka C) Main() { int fd, status; fd = open("/dev/ttys0", O_RDONLY); if (ioctl(fd, TIOCMGET, &status) == -1) { printf("tiocmget failed: %s\n", strerror(errno)); } else { if (status & TIOCM_DTR) { puts("tiocm_dtr is not set"); } else { puts("tiocm_dtr is set"); } } close(fd); } page 11
Pogawędka z Kernelem (2) /proc interface (dostępny poprzez konsolę systemową) page 12
Zadania Kernela (1) Zarządzanie pamięcią Przydzielanie pamięci dla procesów, Zwalnianie nieużywanej pamięci, Ochrona pamięci. KERNEL Dostarczanie systemu plików Wsparcie dla wielu systemów plików, Porządkowanie danych, Strukturyzacja danych. Zarządzanie procesami Dostarczanie usług sieciowych Obsługa wielu protokołów sieciowych, Zarządzanie pakietami danych. Kontrola urządzeń fizycznych Wsparcie dla urządzeń peryferyjnych, Ładowanie i usuwanie sterowników. Tworzenie i niszczenie procesów, Komunikacja międzyprocesowa, Synchronizacja procesów. page 13
Posumowanie Co warto zapamiętać: Kernel jest główną częścią Linuxa, Kernel dostarcza wszystkich podstawowych zasobów dla innych procesów w systemie Linux, Moduły uruchamiamy w Kernel space, Aplikacje uruchamiamy w User space, Z Kernelem komunikujemy się za pomocą interfejsów /proc i ioctl page 14
Koniec
Źródła ilustracji http://www.wired.com/images_blogs/photos/uncategorized/2 008/08/27/transistor_inventors_hr.jpg https://upload.wikimedia.org/wikipedia/commons/thumb/3/ 35/Tux.svg/2000px-Tux.svg.png Kod źródłowy ioctl http://www.linuxjournal.com/article/6908 page 16
Slajdy dodatkowe: Kernel space i user space Aplikacje mają początek i koniec, Moduły zaś rejestrują się w Kernelu i działają. psmouse soundcore KERNEL usbhid page 17
Slajdy dodatkowe: Życie modułu Insert module Init function Wait for event Remove module Cleanup page 18
Slajdy dodatkowe: Rodzaje urządzeń w Kernelu Character device Block device Network device Do urządzenia piszemy jak do pliku, Dozwolone działania: open, close, read, write, Np. /dev/tty1. Urządzenie udostępnia system plików, Dozwolone działania: operacje wejścia / wyścia. Obsługuje wszystkie rodzaje interfejsów sieciowych, Nie korzystamy z nich bezpośrednio. Z punktu widzenia użytkownika (a nie programisty Kernela) Character device oraz block device są do siebie bardzo podobne i ciężko je odróżnić. page 19
Slajdy dodatkowe: Linux Kernel Mailing List W skrócie LKML, Otwarta, darmowa i jawna lista mailingowa społeczności deweloperów Kernela, Możliwość darmowej subskrypcji do systemu GIT, Swobodny przegląd aktualności, nowinek i trudności z jakimi boryka się obecnie społeczność Kernela. page 20
Slajdy dodatkowe: Kontakt W razie trudności w zrozumieniu jakiejkolwiek części wykładu bądź slajdów nie bójcie się zadawać pytań. Piszcie na mój adres mailowy. W najgorszym razie nie odpowiem :) s.trawinski@adbglobal.com page 21