Index Prelude to Foundation Sandemo Margit Saga O Ludziach Lodu www nie com pl 2 Polonez Fiat Poradnik Napraw 02 (196) Pod redakcją Charlesa E. Skinnera Psychologia wychowawcza (14) Cialdini Raobert Wywieranie wpływu na ludzi Teoria i pra ENTER.1996 2001 PawnofProphecy karma (3) |
[ Pobierz całość w formacie PDF ] .Informacje o szczegółach algorytmu znajdziesz w komentarzudo kodu źródłowego funkcji fork. Funkcja vforkStworzenie osobnej funkcji do rozwidlania procesów, vforkawłanie, miało na celu przyspieszenie zakończenia jego wywołania przezcałkowita rezygnację z tworzenia fizycznych kopii stron pamięci procesumacierzystego.Zakładano przy tym, że proces-dziecko zaraz po powrociez vforka wywoła jedną z funkcji exec- w tym wypadku kopiowanie stron jest po prostu bezcelowe (itak zaraz załaduje się nowy program i przed chwilą skopiowane dane zostanązamazane).Takie pobożne życzenie (nie sposób bowiem zmusić procesu dowywołania exec) może jednak doprowadzić doniebezpieczeństwa - potomek, wykonując się w przestrzeni adresowej ojcama dostęp do jego segmentu danych i stosu, może je więc z łatwością zmienić.System, w którym zastosowano vforka, toUnix BSD - "zwykły" fork w tym systemie fizyczniekopiował strony procesu macierzystego, nowe rozwiązanie było więc znacznymusprawnieniem.W Linuksie vfork jest równoważnyforkowi - zarządzanie pamięcią z zastosowaniemkopiowania dopiero w chwili zapisu do powielonej strony (copy-on-write)sprawiło, że implementacja osobnej funkcji stała się zbędna.Funkcja cloneWarto przy opisie forka wspomnieć równieżo funkcji clone, posiadającej co prawda własny(zarezerwowany) numer w tablicy funkcji systemowych, ale domyślnie niedostępnej(aby z niej skorzystać, trzeba zrekompilować jądro ze zdefiniowanym symbolemCLONE_ACTUALLY_WORKS_OK).Funkcja ta jest rozszerzeniem forka omozliwość klonowania zasobów procesu, czyli udostępnienia synowi takichzasobów ojca jak segmenty pamięci, tablice deskryptorów plików i obsługisygnałów, a nawet identyfikator procesu (pid).Wywołanie funkcji wymaga podania owych atrybutów klonowania, a także(opcjonalnie) wskaźnika stosu dziecka:pid_t clone (void* sp, unsigned long flags)sp to włanie ów wskaźnik (NULLwymusza obsługę standardową), zaś pole flagszawiera jedno lub wiele poleceń klonowania:COPYVM - strony pamięci dziecka są kopią stron ojca (z zastosowaniem kopiowaniaprzy zapisie); jeśli bit nie ustawiony - dziecko dzieli strony z ojcem;COPYFD - deskryptory plików dziecka są kopiami deskryptorów ojca, w przeciwnymprzypadku dziecko dzieli deskryptory z ojcem.Najmłodszy bajt pola określa sygnał wysyłany do rodzica w chwili śmiercidziecka.Jako że funkcja sys_clone realizującawywołanie clone korzysta z funkcji do_fork(patrz: komentarz do kodu źródłowego),można używać clone jak standardowego forka- wywołanie miałoby wówczas postać:clone (0, SIGCHLD | COPYVM). Dla zainteresowanychFunkcje systemowe istnieją wewnątrz jądra jako zwykłe funkcje C, z tym,że ich "oficjalne" nazwy poprzedzone są prefiksem ťsys_(to duże uproszczenie, wywołanie wymaga jeszcze skorzystania z makra sys_call,wyszukującego funkcję w bibliotece oraz odpowiedniego obsłużenia parametrów). Skorzystanie z forka polega zatem na wywołaniufunkcji jądra sys_fork (jednolinijkowej,plik process.c), która z kolei wywoła właściwątreść forka - do_fork - tak właśnie nazywa się funkcja zawierająca cały algorytm; nie wartoszukać definicji funkcji nazwanej fork, gdyżtakiej definicji po prostu nie ma.Po analizie funkcji fork na pewno wartoprzeczytać również rozdział dotyczący funkcji exit,będącej niejako odwrotnością forka.Analiza kodu exitpozwala docenić prostotę forkai wspomagających go rozwiązań (np.zastosowania makra-pętli for_each_task,dającej się łatwo zastąpić mądrzejszym algorytmem, ale eliminującej niezawsze potrzebne dodatkowe struktury i symetrię w ich wypełnianiu na rzeczjednorazowego przejrzenia listy zadań w chwili tworzenia procesu).Bardziej zainteresowanych działaniem vforkaodsyłam na strony 314 i 332 książki Bacha.Można tam znaleźćkod i komentarz do programów, wykorzystujących niebezpieczne własnościvforka.Więcej informacji o funkcji clone, dokładnywykaz plików i parametrów można uzyskać w dokumentacji (manclone). BibliografiaPliki źródłowe Linuxa:kernel/fork.c - definicja funkcji do_fork()oraz wykorzystywanych przez nią funkcji pomocniczych,include/linux/sched.h - definicje wszystkichnajważniejszych z punktu widzenia zarządzania procesami struktur i makr,w tym struktury task_struct, makr SET_LINKS,REMOVE_LINKS itp.include/linux/tasks.h - definicje stalychodpowiadających za ograniczenia na liczbę uruchomionych procesów;include/linux/errno.h - kody błędów systemowych.Linux Manualfork (man fork),clone (man clone).Maurice J.Bach: Budowa systemu operacyjnego UNIX, wyd.II, WNT 1995.Tour of the Linux kernel source by Alessandro Rubini (aktualnie niedostępnyw sieci).Projekt Linux- zwłaszcza rozdziałdotyczący algorytmu fork autorstwa TomaszaBłaszczyka.Maciej Ogrodniczuk26 stycznia 1998 r [ Pobierz całość w formacie PDF ] |
||||
Wszelkie Prawa Zastrzeżone! Kawa była słaba i bez smaku. Nie miała treści, a jedynie formę. Design by SZABLONY.maniak.pl. | |||||