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:
- umiejętność programowania w C (bez ++)
- znajomość możliwości preprocesora (makrodefinicje, wyrażenia warunkowe, etc.)
- znajomość bardzo podstawowych struktur danych (tablice, stosy, kolejki)
- sprawne poruszanie się w środowisku linuxowym
- umiejętność skompilowania jądra
- 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
- Źródła linuxa: http://lxr.linux.no