270 likes | 396 Views
Základy operačních systémů. Procesy, plánování Jakub Yaghob. Základní pojmy. Proces spuštěný program Vlákno ( thread ) oddělení místa vykonávání instrukcí od adresového prostoru Přerušení ( interrupt ) obsluha synchronní/asynchronní události. Procesy, vlákna - 1. proces
E N D
Základy operačních systémů Procesy, plánování Jakub Yaghob
Základní pojmy • Proces • spuštěný program • Vlákno (thread) • oddělení místa vykonávání instrukcí od adresového prostoru • Přerušení (interrupt) • obsluha synchronní/asynchronní události
Procesy, vlákna - 1 • proces • paměť, prostředky, práva • hierarchie procesů • identifikace procesů (PID) • vlákno • uživatelský prostor • jádro • hybrid (m:n)
Vlákna a Linux • Linux • Nezná vlákna • Procesy, které shodou okolností sdílí některé prostředky • Speciální vlákna v jádře • Ostatní (Windows, Solaris) • Explicitní podpora pro vlákna
Druhy přerušení • Synchronní • Záměrně – instrukce TRAP (vstup do OS) • Výjimky (exception)– nesprávné chování procesu • Asynchronní • typicky vnější událost (HW) • Polling • kontrola stavu zařízení (PP)
Obsluha přerušení • OS se ujme řízení • uloží se stav CPU • analyzuje se přerušení • vyvolá se příslušná obsluha • obslouží se přerušení • obnovení stavu CPU • může znamenat přeplánování • aplikace pokračuje
Plánování • plánovací entita (proces/vlákno) • přidělování CPU plánovacím entitám • plánovač • preemptivní plánování • větší OS (Win NT, Unix) • nepreemptivní plánování • starší nebo malé OS (Win 3.1, PalmOS)
Cíle plánování • Spravedlnost • každý proces dostane CPU • Efektivnost • využití CPU • Doba odpovědi • důležité pro interaktivní uživatele • Průchodnost • max. počet procesů ukončených v čase • Minimální režie systému
Kritéria plánování • Vázanost procesu na CPU • Vázanost procesu na I/O • Proces dávkový/interaktivní • Priorita • Výpadky stránek • Skutečný CPU čas
Priority • četnost naplánování v čase • statická • nemění se v průběhu času • daná důležitostí procesu/uživatele • dynamická • mění se s časem • splnění cíle spravedlnosti • priorita = statická + dynamická
Plánovací algoritmy - 1 • FIFO • nepreemptivní • kdo dřív přijde, ten dřív mele
Plánovací algoritmy - 2 • RoundRobin (RR) „kruhová sýkorka“ • preemptivní • časové kvantum (timeslice)
Plánovací algoritmy - 3 • Více front se zpětnou vazbou • dynamicky reaguje na vázanost procesů
Plánování v SMP • fronta CPU čekajících na připravené procesy • aktivní čekání • spotřebovává energii • pasivní čekání • speciální instrukce • afinita procesů k CPU
Real-time • Obvykle aplikace řízená událostmi • Příjem událostí a stavů (např. teploty) z čidel • Reakce na stavy a události vyvoláním příslušných úkolů • Každý úkol (task) má svůj reálný čas na dokončení (deadline) • HW prostředky obvykle předimenzovány • Plánování • NP-úplný problém • heuristiky • Hard real-time • Propásnutí času dokončení znamená kritický problém • Soft real-time • Propásnutí času dokončení významný, ale ne kritický problém
Plánování ve Windows – 1 • Plánovač • Plánuje se na úrovni vláken • Není na jednom místě, ale rozprostřen po celém jádře • Vlákno se stane připraveným k běhu – vzniklo nebo se odblokovalo • Vlákno přestane běžet – došel mu čas, ukončilo se, zablokovalo se • Změnily se priority vláken • Změnila se svázanost (affinity) s CPU • Datové struktury • Fronty připravených vláken pro každou prioritu • 32-bitová maska priorit s neprázdnou frontou • 32-bitová maska volných CPU • Vybere se vlákno z nejvyšší neprázdné fronty a přidělí se mu časové kvantum
Plánování ve Windows – 2 • Priority • 16 real-time úrovní • Určeno typicky pro důležitá vlákna jádra • Rozsah <16; 31> • 15 proměnlivých úrovní • Normální vlákna • Rozsah <1; 15> • 1 systémová úroveň • Úroveň 0 • Vlákno pro nulování stránek • Dynamické priority v rozsahu <-2; 2> od základní • Třídy priorit • Real-time (24), High (13), Above Normal (10), Normal (8), Below Normal (6), Idle (4)
Plánování ve Windows – 3 • Časová kvanta • Na počátku vlákno má nastaveno 6 pro Workstation, 36 pro Server • Při každém příchodu časovače se od kvanta odečte 3 na Workstation, 12 na Serveru • Pokud je časové kvantum vyčerpáno, přeplánuje se • Frekvence časovače je závislá na HAL • 10ms na x86 jednoprocesoru • 15ms na x86 MPS • Pokud se vlákno zablokuje před příchodem časovače, odečte se 1
Plánování ve Windows – 4 • Zvýšení (boost) priority • Zvýšení vzhledem k jeho základní prioritě • Vlákno běží jedno časové kvantum se zvýšenou prioritou • Důvody • Pří ukončení I/O operace • Po ukončení čekání na synchronizační primitivum (semafor, …) • Proces na popředí po ukončení čekání • Vlákno s oknem po příchodu zprávy • Ochrana před nenaplánováním • Každou vteřinu se kontroluje (po 16), zda neexistuje vlákno, které neběželo déle než 300 tiků
Plánování ve Windows – 5 • Plánovací scénáře • Chtěné přepnutí • Typicky čekání na I/O, synchronizační primitivum • Vlákno do zablokovaného stavu • Vybere se další • Časové kvantum se zmenší o 1 po probuzení • Preempce • Objevilo se připravené vlákno s vyšší prioritou • Odstraněné vlákno se umístí na začátek fronty příslušné priority • Vyčerpání časového kvanta • Zařazen na konec své prioritní fronty
Plánování ve Windows – 6 • Plánování na SMP • Každé vlákno má dvě čísla • Ideální CPU – generováno náhodně při vzniku vlákna • Poslední CPU – kde naposledy běželo • Kam naplánovat? • Pokud je nějaký volný CPU • Ideální, poslední, aktuální, libovolný • Pokud není volný CPU • Může udělat preempci? • Ideální, poslední, nejvyšší z možných • Podle priority běžícího vlákna se buď stane běžícím nebo zařazen do příslušné prioritní fronty
Plánování v Linuxu – 1 • Složitost O(1) • Bez ohledu na počet procesů v systému • Výborná SMP škálovatelnost • Každý CPU má vlastní frontu • Zlepšená SMP afinita • Seskupování procesů na CPU, balancování front • Dobrý výkon pro interaktivní procesy • Spravedlnost • Žádný proces nestojí moc dlouho, žádný naopak nedostane příliš velký timeslice • Optimalizován pro 1-2 běžící procesy • Rozumně škáluje i pro více
Plánování v Linuxu – 2 • Runqueue • Pro každý CPU • Dvě prioritní fronty • Aktivní – procesy s nenulovým timeslice • Vyčerpaní – procesy s vyčerpaným timeslice • Bitová maska obsazenosti pro jednotlivé priority • 140 bitů • Přepočítání timeslice • Při vyčerpání před přesunutím do prioritní fronty vyčerpaných • Po vyčerpání všech se pouze prohodí prioritní fronta aktivních a vyčerpaných
Plánování v Linuxu – 3 • Naplánování • Nalezení první neprázdné priority v aktivní prioritní frontě pomocí bitové masky • Vybere první proces z vybrané priority • Priority a timeslice • Počáteční statická priorita (nice) • rozsah <-20; 19>, default 0 • Dynamická priorita • Počítána na základě interaktivity procesu • Heuristicky na základě toho, jak dlouho proces spí – vázán na I/O • Úprava priority v rozsahu <-5; 5>
Plánování v Linuxu – 4 • Vyvažování front na SMP • Volání • Pokud je fronta prázdná • Jednou za 1ms, když se nic neděje, jinak každých 200ms • Nalezení nejdelší fronty • Musí být o 25% delší než ostatní • Nalezení prioritní fronty • Preferována fronta vyčerpaných procesů (asi nejsou v cache) • Nejvyšší priorita • Nalezení procesu • Neběží, není svázán s CPU • Přesunut do mé fronty • Opakuj předchozí dva kroky, dokud není vyváženo