UNIWERSYTET MIKOŁAJAKOPERNIKA Wydział Fizyki, Astronomii i InformatykiStosowanej JakubPrzybyła Mechanizm szeregowania zadań w jądrach z serii 2.6 systemu GNU/Linux Toruń2007
UMKzastrzegasobieprawowłasnościniniejszejpracyinżynierskiejwceluudostępnienia dlapotrzebdziałalnościnaukowo-badawczejlubdydaktycznej
Spistreści 1 Wstęp 4 2 Szeregowanie procesów 6 2.1 Klasyprocesów... 7 2.2 Priorytetyikwantyczasu... 11 2.3 Interaktywność... 13 2.4 Szeregowanie... 15 2.4.1 Funkcjaschedule()... 15 2.4.2 Funkcjaschedulertick()... 17 2.4.3 Funkcjasched yield... 20 3 Modułyjądra 21 3.1 Konstruktoridestruktormodułu... 21 3.2 Zależności międzymodułami... 21 3.3 Licznikodwołań... 22 3.4 Parametryzacjamodułów... 23 3.5 Inneinformacjeomodule... 25 3.6 Wersjemodułówijądra... 26 3.7 Ładowaniemodułównażądanie... 26 3.8 Dynamiczne łączenie irelokacjakodu... 27 3.9 BudowaplikuELF... 28 3.10Zastosowaniemodułów... 29 4 Sterowniki urządzeń 30 4.1 Rejestrowanieiwyrejestrowywanieurządzeń... 32 4.2 Operacjenaplikuurządzenia... 33 4.2.1 Funkcjaopen... 35 4.2.2 Funkcjarelease... 35 4.2.3 Funkcjaread... 36 4.2.4 Funkcjawrite... 36 4.2.5 Funkcjallseek... 37 4.2.6 Funkcjaioctl... 37 5 Implementacjamodułu kernstati programuschedstat 38 5.1 Modyfikacjasched.hisched.c... 39 5.2 Konstruktormodułukernstat... 40 2
5.3 Destruktormodułukernstat... 43 5.4 Strukturafileoperations... 44 5.5 Otwarcieplikuurządzeniakernstat... 45 5.6 Zamknięcieplikuurządzeniakernstat... 47 5.7 Czytaniezplikuurządzeniakernstat... 47 5.8 Funkcjakontroliurządzeniakernstatioctl... 51 5.9 Funkcjaexportschedstat... 55 5.10Funkcjaexportschedstat... 58 5.11Funkcjaschedpioarraytasks... 59 5.12Funkcjaexporttaskstat... 61 6 Działanie planisty wg programu schedstat 65 6.1 Zadaniaztablicyactive... 66 6.2 Zadaniaztablicyexpired... 68 6.3 Kolejkazadańgotowychdowykonania... 69 6.4 Czasowestatystykizadania... 70 6.5 Statystykizadańwgplanisty... 72 7 Słownik podstawowych pojęć 74 Literatura 79 3
1 Wstęp SystemoperacyjnyGNU/Linux,któryjest intensywnie rozwijanyod1991r.,osiągnął takądojrzałość ijakość,że najegobazie powstały dwie dystrybucje klasykorporacyjnej: RedHat Enterprise oraz Suse LinuxEnterprise Server.JądrosystemuGNU/Linuxjest wwysokimstopniukonfigurowalnenietylkodziękiswojejmodułowejbudowie,prawie800 konfigurowalnymparametrom,któremożnazmieniaćwczasiepracysystemu,aletakże dziękidostępnościźródeł, któretakże możnamodyfikować.żebyjednakdostrajać jądro dokonkretnychpotrzebtrzebadobrzepoznaćjegofunkcjonowanie. Niniejszapracapoświęconajestbudowie narzędzia,któresłużydośledzeniapracyplanisty,czylijednegozkluczowychelementówjądra.składasięonozespecjalnegomodułu jądrakernstatoraz programu schedstatdziałającegow przestrzeni użytkownika.moduł kernstatsłuży doprzekazywaniadanychsterującychgenerowanychprzez programschedstatz przestrzeni użytkownikadoprzestrzeni jądra,odczytywaniu odpowiednich danych ze wskazanych strukturjądraoraz przekazywanie ich z powrotem doprzestrzeni użytkownika.wymianadanych odbywa się zapośrednictwem pliku urządzeniaznakowego /dev/kernstat. Moduł kernstatzostał takpomyślany i zaimplementowany,abyw przyszłościmógł zostaćrozszerzonyododatkowefunkcjepobierającezjądrainneparametryjegopracy. Jeśli zostanietopowiązanez tworzeniem odpowiednich narzędzidziałających w przestrzeni użytkownika,narzędzi podobnych doprogramuschedstat,touzyskamy nie tylko cenne narzędziadiagnostyczne, ale także dydaktyczne,którepowinnyułatwić zrozumienie działaniajądrasystemugnu/linux. Budowaomawianegonarzędziajestutrudnionazdwóchpowodów.Popierwsze,dostępdozmiennychplanistyzpoziomumodułówjądra,awszczególnościdokolejkizadań gotowych dowykonania,jestniemożliwy,ponieważkonsolidatortworzy takiedanew specjalnej sekcji wykonywalnej.data.percpu,doktórej modułymajązabroniony dostęp[1]. Podrugie,nie mamymożliwości wykorzystaniadefinicji zmiennych,strukturdanychoraz funkcji planisty,gdyżte definicje nie sądostępne poprzez plikinagłówkowe. Takamożliwość istniałajeszcze dowersji 2.6.18,gdyżprawie wszystkiepotrzebne definicjeznajdowałysięwpliku <include/linux/sched.h>,anie <kernel/sched.c>.ta zmianapodyktowanazostaławzględami bezpieczeństwa,ale utrudniabudowę modułów wykorzystującychte definicje. Poprzednie podejście pozwalałonatworzenie instancjiodpowiednichzmiennych.wówczas dostęp dozmiennych uprzedniozdefiniowanychwymagał jedynie odczytaniaadresów z eksportowanych symboli jądrai ich rzutowanie(otym czy jakiśsymbol jest eksportowanymożnasię przekonać przeglądającplik/boot/system.mapver,gdzieverjestnumeremwersji jądra). Przyimplementacjisterownikaurządzeniaznakowegokernstat orazfunkcji,które 4
sąodpowiedzialne zapobieranie statystykplanistywykorzystanojądro2.6.18ze specjalnie zmodyfikowanąwersjąpliku <kernel/sched.c>oraz <linux/sched.h>.zmianypolegają na dodaniuorazwyeksportowaniufunkcji, któradaje nambezpośrednidostęp doinstancji zmiennej typustructrq,czyli dokolejkizadańgotowychdowykonania.bywatak, że kolejne wersje jądrawprowadzajązmianyw nazewnictwie symboli,tzn.zmiennych, strukturdanychorazfunkcji,atakżewpołożeniuichdefinicji.wceluuniknięciatego problemu ograniczonorozważaniadojednegościśle określonegojądra,codaje gwarancję, że tworzonymodułbędzie działaćpoprawnie. Dziękizastosowaniuprogramuschedstat możliwe jest obserwowanie w jakisposób system operacyjny realizuje operacje wielozadaniowości, jak dbao to, aby w systemie, wktórympracujejednocześniewieleprocesówniedochodziłodoprzestojów.program schedstatilustruje mechanizmy wykorzystywane przez planistę w postaci prezentacji różnegorodzajustatystykorazwarunków determinujących odpowiednie ichtraktowanie. Układpracyjestnastępujący.Powstępienastępujątrzyrozdziałyomawiającezagadnieniazwiązanez działaniemi implementacjąplanisty orazzasaddziałaniai tworzenia sterownikóworazmodułówwjądrachsystemugnu/linux.wrozdzialepiątymprzedstawionotakże szczegółyimplementacjimodułukernstatorazprogramuschedstat.kolejny rozdział zawieraomówienie szereguprzykładowychzastosowańprogramuschedstat.pracę kończydodatekwyjaśniającyznaczenieszereguterminówprzewijającychsięwpracy. 5