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.