Wiadomości Kernel
Transkrypt
Wiadomości Kernel
WIADOMOŚCI Kernel Wiadomości Kernel ARTUR SKURA Z punktu widzenia rozwoju jądra, kwiecień był miesiącem niezwykle interesującym. Z wielu nowości wybraliśmy kilka najciekawszych. Jedną z bardziej interesujących nowości jest implementacja kolejek wiadomości zgodnych ze standardem POSIX (POSIX Message Queues, PMQ). Jest to element systemu komunikacji międzyprocesowej (InterProcess Communication, IPC), zaimplementowany jako system plików mqueue. PMQ należy traktować jako dodatkową funkcjonalność, zupełnie niezależną od powszechnie używanych funkcji komunikacji międzyprocesowej Systemu V. Autorami implementacji PMQ dla Linuksa są dwaj Polacy – Michał Wroński i Krzysztof Benedyczak, którzy, dzięki swojej wytrwałości, doczekali się włączenia PMQ zarówno do głównej gałęzi jądra (2.6.6-rc1), jak i glibc. Kolejna nowość, której możemy się spodziewać w jądrze 2.6.6, to algorytm szeregujący operacje wejścia/wyjścia (IO scheduler), noszący nazwę CFQ (Complete Fair Queuing, kompletne, sprawiedliwe kolejkowanie). CFQ powstał jako odpowiedź na pomysł Andrea Arcangeliego, by algorytmy wykorzystywane przy zarządzaniu pasmem odnieść do zarządzania operacjami wejścia/wyjścia. W rezultacie Jens Axboe stworzył dwie implementacje: Stochastic Fair Queuing, czyli SFQ (stochastyczne, sprawiedliwe kolejkowanie) oraz wspomniane CFQ. O ile SFQ zapewnia procesom relatywnie równomierny dostęp do urządzeń wejścia/wyjścia przy stosunkowo niskim narzucie, o tyle CFQ idzie krok dalej i całkowicie wyklucza wszelkie kolizje między żądaniami procesów. W międzyczasie ukazało się również jądro 2.4.26, zawierające sporą ilość poprawek i usprawnień w kodzie podsystemów i poszczególnych urządzeń, jak również łatę likwidującą potencjalne przepełnienie bufora w kodzie odpowiedzialnym za obsługę systemu plików iso9660. Dzięki łacie Stephena Rothwella, jądro 2.4.26 można już zbudować korzystając z najnowszej wersji zestawu GCC 3.4. Sporo zmian dotyczy podsystemu USB, systemów plików JFS i XFS, kodu odpowiedzialnego za obsługę sieci (w tym SCTP), ACPI i urządzeń Bluetooth. Na uwagę zasługuje fakt, że Marcelo zapowiedział włączenie obsługi standardu Serial ATA (znanego również jako SATA) do kolejne- 12 Czerwiec 2004 go wydania stabilnej wersji jądra 2.4.27. Powód jest oczywisty: popularność SATA wciąż rośnie, pojawiają się nawet systemy sprzedawane wyłącznie z dyskami SATA – brak jego obsługi w stabilnej wersji jądra może być przykrą niespodzianką dla użytkowników. ■ INFO [1] Strona domowa implementacji POSIX Message Queues dla Linuksa to http://www-users.mat.uni.torun.pl/ ~wrona/posix_ipc/ O wypowiedź na temat PMQ poprosiliśmy autorów tej implementacji. Linux Magazine: Skąd pomysł zajęcia się implementacją Posix Message Queues dla Linuksa? Michał Wroński, Krzysztof Benedyczak: To długa historia. Standardowym zadaniem ułatwiającym zdobycie zaliczenia z wykładu „Systemy Sieciowe I” na naszym wydziale (WMiI UMK), stawianym przez dr A. Kurpiela, było znalezienie dowolnej implementacji PMQ dla Linuksa. Wtedy jeszcze mieliśmy dużo wolnego czasu (i wybujałe ambicje), więc zdecydowaliśmy się zaprogramować kolejki samemu. To było jeszcze w „pięknych” czasach, gdy standard POSIX nie był publicznie dostępny i musieliśmy bazować na dokumentacji Solarisa. Po roku od stworzenia pierwszej działającej wersji znaleźliśmy dokumentację standardu POSIX i postanowiliśmy kontynuować prace nad projektem. LM: Jakie znaczenie ma PMQ dla programistów linuksowych? Dla zwykłych użytkowników? MW,KB: Dla programistów korzyścią jest możliwość przenoszenia oprogramowania z innych systemów operacyjnych, takich jak Solaris, Irix i inne. Zyskują oni również nowe możliwości podczas tworzenia oprogramowania (kolejne narzędzie do komunikacji międzyprocesowej). Przykładem może być nieistniejący do tej pory mechanizm notyfikacji asynchronicznej SIGEV_THREAD. Z kolei użytkownicy, oprócz kolejnej opcji w menu podczas kompilacji jądra, zyskają możliwość korzystania z nowego, lepszego oprogramowania. LM: Łata ta była dostępna przez jakiś czas oddzielnie – jak udało się ją włączyć do oficjalnego jądra? MW,KB: Tak, przez bardzo długi czas. Przez te trzy lata wydaliśmy cztery wersje różniące się znacznie architekturą. Problemem była rozbieżność zdań pomiędzy kernelowymi guru na temat najlepszego sposobu implementacji. Równocześnie zmieniały się możliwości oferowane przez jądro (liczba funkcji systemowych www.linux-magazine.pl i inne). Generalnie akceptowalna wersja została ukończona zaraz po ogłoszeniu „zamrożenia funkcjonalności” (ang.feature-freeze). Na początku lutego zgłosił się do nas Manfred Spraul (nieformalny maintainer IPC), który stwierdził, że to już najwyższy czas, by dołączyć PMQ do jądra. Wspólnie dopracowaną wersję przyjęto do drzewa -mm, a po miesiącu do gałęzi stabilnej. LM: Deweloperzy glibc znani są z względnej odporności na nowatorskie zmiany – co skłoniło ich do akceptacji PMQ? MW,KB: Po pierwsze, Ulrich Drepper z nami współpracował (dając wytyczne dotyczące implementacji, głównie SIGEV_THREAD). Także implementacja po stronie jądra dawała akceptowalny dla glibc interfejs. Poza tym PMQ były od dawna jedynym składnikiem specyfikacji POSIX, którego brakowało w glibc. LM: Często pewien czas po implementacji jakiegoś uniksowego standardu okazuje się, że zawiera on jakiś problem z bezpieczeństwem. Nie obawiacie się, że tego typu problem pojawi się w Waszej implementacji PMQ? MW,KB: Wszystko się może zdarzyć, ale raczej zdalny root nam nie grozi. Oczywiście problemy mogą się pojawić, ale jest to cecha wspólna wszystkich implementacji. LM: Co wyróżnia linuksową implementacje PMQ od innych (np. solarisowej) MW,KB: Jest lepsza! Implementuje wszystkie składniki standardu (także funkcję mq_timed(send|receive) i SIGEV_THREAD). Poza tym dodaliśmy kilka użytecznych rozszerzeń. Implementacja opiera się na systemie plików (poszczególne kolejki to pliki), który można zamontować. Na takim systemie plików można wykonywać standardowe operacje, takie jak rm czy ls. Funkcja open() może również otworzyć czy utworzyć kolejkę itd. Zaimplementowany jest też poll – wygodne rozwiązanie przy operowaniu wieloma kolejkami jednocześnie.