Programowanie w jądrze Linuxa

Prowadzący: Jędrzej Jabłoński, Maciej Jaśkowski

Zajawka

Zawsze chciałeś wiedzieć co tak naprawdę oznacza 'Segmentation fault', ale bałeś się zapytać? A może stojąc przed wyborem ext2, ext3, ext4 itp. chciałeś dokładnie rozumieć na co się decydujesz wybierając konkretną z opcji? A może dostałeś od cioci na gwiazdkę matę do tańczenia podłączaną przez USB do komputera i chciałbyś za jej pomocą sterować pingwinem w tuxracerze? A może jesteś specjalistą od bezpieczeństwa i zawsze chciałeś rozumieć o co chodzi z tym całym vmsplice? Jeśli na którekolwiek z pytań odpowiedziałeś "TAK" to niewątpliwie są to warsztaty właśnie dla Ciebie!

Opis warsztatów

Zadaniem bloku o jądrze Linuxa będzie nie tyle dokładne wyjaśnienie mechanizmów i rozwiązań zastosowanych w tym systemie operacyjnym, co próba przełamania w uczestnikach sposobu traktowania systemu jako czarnej skrzynki. Maciej Jaśkowski postara się was przekonać, że wiedza o wnętrzach jądra jest pomocna podczas programowania aplikacji pod ten system, zaś Jędrzej Jabłoński spróbuje nauczyć was poruszania się po kodzie kernela, rozumienia go i wprowadzania poprawek.

Program warsztatów

Postaramy się, żeby warsztaty były jak najbardziej 'praktyczne' (tzn. polegały na obcowaniu z prawdziwym systemem, a nie wysłuchiwaniu długich monologów na jego temat). Jednakże konieczne będzie słowo wstępu (być może długie) wprowadzające w tematykę systemów operacyjnych oraz wyjaśniające sposób implementacji podstawowych mechanizmów w Linuxie.
Po wysłuchaniu i zrozumieniu wstępu powinniście być w stanie umieć samodzielnie znajdować odpowiedzi na nurtujące was pytania, a dalsza część warsztatów składać się będzie z (bardzo dobrze dobranych) zadań laboratoryjnych.

Wymagania

Wymagane na warsztatach będą następujące umiejętności:

  1. umiejętność programowania w C (bez ++)
    1. znajomość możliwości preprocesora (makrodefinicje, wyrażenia warunkowe, etc.)
    2. znajomość bardzo podstawowych struktur danych (tablice, stosy, kolejki)
  2. sprawne poruszanie się w środowisku linuxowym
    1. umiejętność skompilowania jądra
    2. znajomość narzędzi typu 'make'

Mile widziana będzie również znajomość asemblera.

Zadania kwalifikacyjne

Do zakwalifikowania się z pewnością wystarczy 10 punktów, być może próg ten zostanie obniżony.
Wszelkie pytania dotyczące zadań oraz rozwiązania należy wysyłać na adres: ten.epocsodnim|6www-nirolo#ten.epocsodnim|6www-nirolo.
Termin ostateczny jest najprawdopodobniej ustalony z góry, więc nie będę go ani przedłużać, ani skracać.

Zadanie 1 (5pkt)

Napisz linię w bashu, która wypisze na standardowe wyjście nazwę użytkownika posiadającego najwięcej procesów w systemie. W przypadku niejednoznaczności może zwrócić dowolnego o maksymalnej liczbie.

Dodatkowe 5 punktów można dostać za najkrótsze (w sensie liczby znaków) rozwiązanie (spośród przysłanych w terminie).

Zadanie 2 (5pkt)

Jak pewnie zauważyłeś standardowo narzędzie 'netstat' wywołane z opcjami -at złośliwie ucina nazwy w polu 'Foreign Address'. Przykładową linią wyjścia netstata zawierającą ucięcie jest:

tcp        0      0 192.168.0.102:49216     students.mimuw.edu.:ssh ESTABLISHED

ponieważ użytkownik nie zawsze potrafi się domyślić jaki jest dalszy ciąg adresu students.mimuw.edu… dobrze aby dysponował
taką wersją narzędzia netstat która prezentuje adresy w całości. Twoje zadanie polega na napisaniu patcha na netstata, naprawiającego
ten drobny 'feler'.
Netstat załatany może adresów nie ucinać wcale, bądź ucinać je po 256 znaku.

Źródła netstata znajdziecie pod adresem: http://www.tazenda.demon.co.uk/phil/net-tools/

Zadanie 3 (5pkt)

Stwórz plik wielkości 512000 bajtów zawierający w sobie system plików Reiser4, oraz posiadający w tymże systemie plik będący urządzeniem znakowym o liczbach major i minor odpowiednio 1 i 8. Ciekawe co będzie w środku ;)

Wysyłanie rozwiązań

Na podany adres należy wysłać:
W przypadku zadania nr 1: odpowiednią linię (w treści maila lub w załączniku)
W przypadku zadania nr 2: plik .diff który można założyć na źródła używając komendy patch -p0 < ./nazwa_pliku.diff (w załączniku)
W przypadku zadania nr 3: plik prawie półmegabajtowy o którym była mowa w treści zadania (w załączniku)

Każde zadanie można przysłać tylko raz. Nie trzeba natomiast przysyłać wszystkich zadań w jednym mailu. Po odebraniu maila z rozwiązaniem
postaram się od razu odesłać potwierdzenie odbioru.

Materiały

  1. Źródła linuxa: http://lxr.linux.no
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License