[ Pobierz całość w formacie PDF ]
.cBinarnie aproksymuje loop_per_sec tak by dostac taka wartosc : ile razy w ciagu sekundy wykonuje sie taka petla while(ticks=jiffies); ostatecznie reguluje ilosc okrazen na sekunde, zaokragla wynik i drukuje naekranie.lvoid mem_init(unsigned long start_mem, unsigned long end_mem)Zrodla tej funkcji znajduja sie w /arch/i386/mm/init.cInicjalizuje pamiec pomiedzy start_mem, a end_mem.W zmiennej start_low_mem trzyma wielkosc strony.Sprawdza cala pamiec rozpoczynajac od start_low_memory w dolnej pamieci i markuje wszystkie strony jako dostepne.Potem wypisuje na ekranie procentowy udzial (jako 100 - wszystkie strony) wolnych stron, stron zawierajacych kod, dane jadra oraz stronzarezerwowanych.l void buffer_init(void)Zrodla tej funkcji znajduja sie w /fs/buffer.cUstawia rozmiar tablicy haszujacej na 4MB, 16MB, lub 997 zaleznie od wartosci zmiennej high_memory.Zwraca wskaznik na liste haszujaca zainicjalizowany nazero.lvoid sock_init(void)Zrodla tej funkcji znajduja sie w /net/socket.cFunkcja uruchamiana automatycznie, niezaleznie od konfiguracji.Inicjalizuje caly adres rodziny, moduly protokolow.Jesli siec nie jest skonfigurowana, uruchomi funkcjedev_init().l void ipc_init (void)Zrodla tej funkcji znajduja sie w /linux/ipc/util_init.cInicjalizuje komunikacje miedzyprocesowa tzn.semafory, komunikaty, pamiecdzielona.Po wszystkich inicjalizacjach i wczytaniu potrzebnych sterownikow,start_kernel()robi forka dla procesu init uzywajac funkcji kernel_thread (funkcja tworzy proces potomny i nie wychodzi potem z trybu jadra) sam wchodzi do petli niekonczonej for(;;) idle().Ten proces (task[0]) nie ma okreslonego stanu, wiec jadro nie ma nad nim zadnej kontroli, jego rola ogranicza sie tylko do zarzadzanie procesami wywolujacymi funkje systemowe.Init w main.cW ostatnim kroku start_kernel() tworzy nowy proces poprzez wywolaniefunkcji kernel_thread(init,NULL,0); (-funkcja napisana w asemblerze, ktoratworzy proces potomny nie wychodzac z trybu jadra) przekazuje potomkowimiejsce skad ma zaczac wykonanie w tym przypadku - funkcja init() winit/main.c.Nowo powstaly proces jest procesem 1 (proces init).Algorytmjego pracy omowiony jest wKoniecDzialalnosc Linuxa konczy sie wraz z zatrzymaniem pracy komputera.Niejest jednak zalecane "brutalne wyciaganie wtyczki".To moze spowodowac:lzmiany w systemie plikow(zasmiecanie, pojawianie sie nie znanych plikow, nie dzialajace programy)lutrate danych (Linux wykorzystujac bufory, nie zapisuje danychnatychmiast)linne problemy (np przy pracy w trybie wielouzytnikowym,zniszczenieprocesow i danych innych uzytkownikow)Czasem jednak zdarzaja sie sytuacje(pozdrowienia dla pracownikowelektrowni) gdy nie mamy kontroli nad odcieciem zasilania.Pozostaje namwtedy nadzieja, ze nic zlego sie nie stalo i po ponownym wlaczeniu pradu izaladowaniu systemu zaczac prace od nowa.BibliografialPliki zrodlowe LinuxalllllLinuxKernel Hackers' GuidelInnezrodlaPytania i odpowiedziAutor : Adam Pustola
[ Pobierz całość w formacie PDF ]