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)
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • bydgoszczanin.xlx.pl

  • [ 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łaœnie, 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łaœnie ó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 ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • aceton.keep.pl
  • 
    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.