9. přednáška 18. dubna 2016 Operační systémy 2015/2016.

Slides:



Advertisements
Podobné prezentace
3. konzultace (4 hodiny) 6. března 2015 Operační systémy LS 2014/2015.
Advertisements

3. konzultace (5 hodin) Studijní materiály najdete na adrese:
9. přednáška služby správce procesů ( resched, ready, resume, suspend, kill, sleep, wakeup ) -Memory Management -cache paměť, adresové prostory.
9. přednáška srovnání plánovacích politik -fronty -služby správce procesů ( resched, ready, resume, suspend, kill, sleep, wakeup ) Studijní.
Operační systémy LS 2014/ přednáška 27. dubna 2015.
Téma: Využití Accessu pro tvorbu evidence našeho podnikání Vypracovala: Jana Wasserbauerová.
Strategické řízení školy s využitím sebehodnocení školy dle modelu CAF RNDr. Hana Žufanová.
Tvorba panorámat Gymnázium a Jazyková škola s právem státní jazykové zkoušky Svitavy Ditta Kukaňová.
BEZPEČNOSTNÍ TECHNOLOGIE I Operační program Vzdělávání pro konkurenceschopnost Projekt: Vzdělávání pro bezpečnostní systém státu (reg. č.: CZ.1.01/2.2.00/ )
OPERAČNÍ SYSTÉMY Část 3 – správa procesů Zpracovala: Mgr. Marcela Cvrkalová Střední škola informačních technologií a sociální péče, Brno, Purkyňova 97.
Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační.
Systém správy dokumentace akreditované zkušební laboratoře Bc. Jan Randl, 4912.
Název školyZákladní škola praktická Rožnov pod Radhoštěm Číslo projektuCZ / / Číslo materiáluVY_32_INOVACE_225 AutorMgr. Romana Rybiařová.
Výukový materiál zpracovaný v rámci projektu. Registrační číslo projektu: CZ 1.07/1.4.00/ Šablona: 32 Sada: F6/15 Předmět: Fyzika Ročník: 6. Jméno.
Plánovací část projektu Cíl projektu - vychází z řešení z prognostické části, - odpovídá na otázku, čeho má být dosaženo? - představuje slovní popis účelu.
Název kapitoly Název podkapitoly Text Schvalovací proces + hodnoticí kritéria Jakub Krátký Praha, 5. května 2016.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Definice: Funkce f na množině D(f)  R je předpis, který každému číslu z množiny D(f) přiřazuje právě jedno reálné číslo. Jinak: Nechť A, B jsou neprázdné.
Výukový materiál zpracován v rámci projektu
Úvod do databází MS Access (1).
Základy automatického řízení 1
AUTOR: Mgr. Hana Vrtělková NÁZEV: VY_32_INOVACE_M_20_Rovinné útvary
Rozhodování 1.
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
OPERAČNÍ SYSTÉMY Část 1 – úloha OS Zpracovala: Mgr. Marcela Cvrkalová
Správa paměti - úvod Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Číslo projektu CZ.1.07/1.5.00/ Číslo materiálu
IAS 36 Snížení hodnoty aktiv.
Programování a simulace CNC strojů I.
Přístupový systém aneb kontrola vstupů
TÉMA: Počítačové systémy
Výukový materiál zpracován v rámci projektu
Databáze MS ACCESS 2010.
Datové typy v jazyce C Datové typy void skalární aritmetické
Financováno z ESF a státního rozpočtu ČR.
Název: Práce s tabulátory Autor: Hokr Jan
Souběh Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Lexikální atomy jazyka C
C# Vícevláknové aplikace
Schvalovací proces + hodnoticí kritéria
Výukový materiál zpracován v rámci projektu
Management Přednáška 7, 8: Plánování.
SÁRA ŠPAČKOVÁ MARKÉTA KOČÍBOVÁ MARCELA CHROMČÁKOVÁ LUKÁŠ BARTOŠ B3E1
Vzdělávání pro konkurenceschopnost
1. ročník oboru Mechanik opravář motorových vozidel
Plánování procesů Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
ZAL – 8. cvičení 2016.
Výukový materiál zpracován v rámci projektu
Schvalovací proces + hodnoticí kritéria
Výukový materiál zpracován v rámci projektu
Informatika pro ekonomy přednáška 8
Číslo projektu školy CZ.1.07/1.5.00/
Výukový materiál zpracován v rámci projektu
Jak postupovat při měření?
Tresty a ochranná opatření ( trestní sankce)
© 2012 STÁTNÍ ÚSTAV PRO KONTROLU LÉČIV
Instalace OS Linux Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Programovatelné automaty (Programmable logic controllers – PLC)
Algoritmizace Hashing II
4. konzultace (5 hodin) 1. dubna 2016.
Materiál byl vytvořen v rámci projektu
Remote login.
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Název školy: Autor: Název: Číslo projektu: Název projektu:
Přednášky z Distribuovaných systémů
Fronta (1) Dynamická datová struktura typu FIFO (First In First Out)
Datové typy v jazyce C Datové typy void skalární aritmetické
Lineární funkce a její vlastnosti
Algoritmizace a datové struktury (14ASD)
Algoritmizace a datové struktury (14ASD)
Transkript prezentace:

9. přednáška 18. dubna 2016 Operační systémy 2015/2016

Správa procesů Operační systém, to je něco jako socialistická ekonomika: samé plánování a samá fronta. (Roderik Plevka) - správce procesů (dispečer, plánovač) sleduje procesy v systému a řídí jejich chování, předává jim procesor - správce procesů plánuje, který proces bude aktivován, rozhoduje o přerušení aktivního procesu - příští aktivní proces určuje plánovací algoritmus - pro zajištění činnosti udržuje správce procesů několik front procesů, odpovídajících jednotlivým situacím, ve kterých proces na něco čeká - ve frontách čekají procesy na ukončení určité situace - z fronty se vybírá proces podle splnění určitých kritérií, aktivace po odstranění příčiny čekání - zabraňuje monopolizování procesoru procesem Operační systémy 2015/2016

Fronty procesů - práce s frontami - základní požadavek efektivity správce procesů - fronta je objekt, na který můžeme aplikovat služby: * vytvoření fronty - vznik nového objektu * zrušení fronty * umístění do fronty - vložení na určité místo fronty * odebrání z fronty - vrací proces z fronty (první, obecný) - správce front udržuje několik prioritních front, jednu frontu speciál- ního typu - delta list, fronty typu FIFO - prioritní fronta - parametrem je priorita procesu, podle které se pro- cesy řadí sestupně, proces je zařazen na konec skupiny procesů se stejnou prioritou - delta list - fronta, do které se procesy řadí pro čekání na uplynutí ča- sového intervalu - absolutní čas je pouze u prvního procesu, jinak přírůstky - FIFO – First In First Out, LIFO – Last In First Out Operační systémy 2015/2016

Typy front 3. 2. 1. P = 1 P = 4 P = 6 P = 10 P = n ….. t = 16 D = 1 první 3. 2. 1. FIFO poslední Prioritní P = 1 P = 4 P = 6 P = 10 P = n ….. 1 4 6 10 n Delta list t = 16 D = 1 D = 4 D = 5 D = 680 D = 682 D = 1548 D = 10589 ….. 18 697 1580 12358 LIFO poslední první 3. 2. 1. Operační systémy 2015/2016

. . . . . Fronta jako spojový seznam - žádný proces nemůže být ve více frontách současně, zpětně vázaný seznam (v každém prvku vyjma prvního a posledního je umístěn ukazatel na předcházející a následující prvek) NULL následující PID předchozí První člen Poslední člen . . . . . Operační systémy 2015/2016

Správa front isempty() /* je fronta prázdná ? */ nonempty(q) /* je fronta neprázdná ? */ firstkey(q) /* nejmenší priorita ve frontě */ lastkey(q) /* největší priorita nebo čas v delta listu*/ firstid(q) /* první proces ve frontě */ enqueue(p,q) /* zařazení procesu p na konec fronty q */ insert(p,q,key) /* zařazení s prioritou key */ insertd(p,q,time) /* zařazení do delta listu */ dequeue(p) /* odstranění procesu p z fronty */ getfirst(q) /* zjištění prvního procesu ve frontě */ getlast(q) /* zjištění posledního procesu ve frontě */ newqueue(void) /* vytvoření nové fronty */ Operační systémy 2015/2016

Stavy procesů Nulový proces suspended ready current waiting receiving sleeping Nulový proces Situace, kdy jsou všechny procesy mimo pohotovostní stav (ready), jediný aktivní proces potřebuje přerušit (čekání na stisk klávesy) - proces s nízkou prioritou, triviální obsah, nesmí být v jiném stavu než ready nebo current Operační systémy 2015/2016

Stavy procesů - suspended: speciální stav procesů, z/do něj se dostane pouze na základě explicitního požadavku jiného procesu nebo OS - ready: čekání na přidělení procesoru, ready (prioritní) fronta, vybírá se první proces - current: aktivní stav, pouze jeden proces, při ukončení změna kontextu - waiting: čekání na periferní operaci, každá událost má svoji frontu - receiving: čekání na příchod zprávy od jiného procesu - sleeping: čekání na uplynutí časového intervalu, delta list z kteréhokoliv stavu lze proces zrušit, při rušení aktivního procesu se mění kontext- změna kontextu - základní kámen multitaskingu, plánování činnosti procesů

Služby správce procesů Vlastní přepnutí kontextu je „zabaleno“ do resched create suspended resume suspend resched ready current signal wait waiting Využívají ovladače periferií send receive receiving Komunikace se servery wakeup sleep blocked sleeping Operační systémy 2015/2016

Tabulka procesů (demonstrační verze) #define PRNEW '\011' /* proces byl vytvořen */ #define PRCURR '\01' /* proces právě běží */ #define PRFREE '\02' /* volné místo v tabulce procesů */ #define PRREADY '\03' /* proces je v ready frontě */ #define PRRECV '\04' /* proces čeká na zprávu */ #define PRSLEEP '\05' /* proces čeká na uplynutí času */ #define PRSUSP '\06' /* proces je suspendován */ #define PRWAIT '\07' /* proces čeká na semafor */ struct pentry { unsigned char pstate; /* stav procesu: PRCURR, ... */ short pprio; /* priorita */ unsigned *svarea; /* ukládací oblast pro kontext */ short psem; /* semafor pro stav waiting */ short pmsg; /* přijatá zpráva */ short phasmsg; /* <> 0, je-li zpráva OK */ unsigned *pbase; /* zásobník */ unsigned pstklen; /* jeho délka */ unsigned *plimit; /* jeho limit */ char pname[PNMLEN]; /* jméno procesu */ short pargs; /* počet parametrů */ void *paddr; /* startovní adresa */ }; extern struct pentry proctab[]; - v tabulce procesů se udržují potřebné i nepotřebné informace o procesech, (jméno, čas vytvoření, způsob vytvoření, …), statistické a ladící účely

Implementace služby CREATE (demonstrační verze) vytvoření záznamu na zásobníku #include <…..> int create(void (*procaddr)(),unsigned ssize, short priority,char *name,short nargs,unsigned *args[]) { int pid, i;/* pid - číslo nového procesu */ struct pentry *pptr; unsigned *saddr;/* adresa zásobníku */ if(priority(1,MAX)||((saddr=getstk(ssize)==0)|| (pid=newpid())==SYSERR) return SYSERR; numproc++;/* zvýšení počtu procesů */ pptr=&proctab[pid]->pstate=PRNEW; for(i=0;i<N&&(pptr->pname[i]=name[i])!=0;i++); pptr->pprio=priority; pptr->plimit=saddr; pptr->pbase=saddr+ssize; pptr->pstklen=ssize; pptr->pargs=nargs; pptr->paddr=procaddr; saddr=pptr->pbase; for(i=0;i<nargs;i++) *saddr--=args[i]; *--saddr=procaddr; napln_reg(); pptr->svarea=saddr;/* ukládací oblast kontextu */ return(pid); } parametry adresa procesu vstupní bod funkce nulování registrů procesoru SP vrchol zásobníku pid = fork() Operační systémy 2015/2016

vytvoření PCB procesu: identifikace procesu Služba CREATE Vytvoření běhového a datového kontextu procesu. vytvoření PCB procesu: identifikace procesu stav procesu (READY, ihned k přeplánování) řídicí informace zapojení kontrolních mechanismů inkrementace čítače procesů alokace paměti pro uživatelský zásobník alokace paměti pro kernel zásobník nastavení obsahu registrů (zavede se do procesoru při přeplánování) - nastavení ukazatelů paměti (private adress space, shared adress space) Operační systémy 2015/2016

Implementace služby RESCHED #include <conf.h> #include <proc.h> #include <q.h> /*---------------------------------------------------------------- služba přeplánuje, spustí proces s nejvyšší prioritou -----------------------------------------------------------------*/ int resched(void) { register struct pentry *optr; /* směrník na starý proces */ register struct pentry *nptr; /* směrník na nový proces */ if((optr=&proctab[CURRPID])->pstate==PRCURR) if(firstkey(rdyqueue)<optr->pprio) return OK; optr->pstate=PRREADY; insert(currpid, rdyqueue, optr->pprio); } nptr=&proctab[(currpid=getfirst(rdyqueue))]; nptr->pstate=PRCURR; preempt=QUANTUM; lastsva=&(optr->svarea); newsva=&(nptr->svarea); ctxsw(); - bere v úvahu stav procesů a zajis- tí přepnutí kontextu - CURRPID - číslo aktivního procesu - nemusí dojít k přeplánování - realizováno jako nepřerušitelné - insert zařazuje proces na konec procesů se stejnou prioritou - pouhé volání služby zajistí střídání procesů podle sdílení času - je volána v rámci přerušení časovače - interní pomocná služba správce procesů - READY

označení stavu procesu Služba RESCHED přepnutí kontextu kontrola nutnosti přepnutí umístění procesu do prioritní fronty (na obecné místo) přeznačení stavu procesů v PCB Služba READY označení stavu procesu parametr RESCHYES, RESCHNO umístění procesu do prioritní fronty (na obecné místo) přeplánování až po zařazení posledního procesu Operační systémy 2015/2016

Implementace služby READY #include <conf.h> #include <kernel.h> #include <proc.h> #include <q.h> /*------------------------------------------- Služba READY, která převede proces do ready fronty a potom vyvolá přeplánování --------------------------------------------*/ int ready(short pid, short resch) { register struct pentry *pptr; (pptr=&proctab[pid])->pstate=PRREADY; insert(pid, rdyhead, pptr->pprio); if(resch) resched(); return OK; } /* konec funkce */ RESCHYES definováno jako 1 RESCHNO definováno jako 0 - pid - identifikační číslo procesu pro frontu READY (rdyhead) - správně nastaví stavovou informaci v tabul- ce procesů, zařadí jej do fronty READY, vy- volá přeplánování - parametr resch - proti přeplánování po za- řazení jednotlivých procesů ze skupiny - priorita následujících procesů může být vyšší - resch se nastaví až při zařazování posledního procesu Operační systémy 2015/2016

Implementace služby RESUME #include <conf.h> #include <kernel.h> #include <proc.h> /* -------------------------------------- služba převede proces ze stavu SUSPENDED do stavu READY a vrací prioritu procesu ---------------------------------------*/ int resume(short pid) { struct pentry *pptr; int prio; if((pptr=&proctab[pid])->pstate!=PRSUP) return SYSERR; PRIO=pptr->pprio; ready(pid,RESCHYES); return PRIO; } - slouží k převodu procesu do READY fronty - kontrola stavu procesu - proměnná PRIO - uschování priority procesu proti ztrátě během přeplánování Operační systémy 2015/2016

jestliže není stav SUSPEND, tak chyba Služba RESUME jestliže není stav SUSPEND, tak chyba převedení procesu ze stavu SUSPEND zařazení procesu do prioritní fronty použit parametr RESCHYES, priorita procesu v lokální proměnné Služba SUSPEND pouze ze stavu CURRENT (přeplánuje), READY (vyřadí z fronty) nesmí být nulový proces procesy ve stavu SUSPEND jsou bez fronty Operační systémy 2015/2016

Implementace služby SUSPEND #include <conf.h> #include <kernel.h> #include <proc.h> /*------------------------------------------------------- služba převede proces ze stavu READY nebo CURRENT do stavu SUSPEND -------------------------------------------------------*/ int suspend(short pid) { struct pentry *pptr; int prio; if(pid==NULLPROC || (pptr=&proctab[pid])->pstate!=PRCURR&&pptr->pstate!=PRREADY) return SYSERR; PRIO=pptr->pprio; if(pptr->state==PRREADY) { dequeue(pid); pptr->pstate=PRSUSP; } else { pptr->pstate=PRSUSP; resched(); } return PRIO; } - musí zpracovat proces ve stavu READY, CURRENT - ze stavu READY se vyřadí z fronty - ze stavu CURRENT (proces suspenduje sám sebe) se vyvolá přeplánování - ve stavové informaci aktivního procesu předáme službě RESCHED stav PRSUSP Operační systémy 2015/2016

Implementace služby KILL #include <kernel.h> #include <proc.h> #include <sem.h> #include <mem.h> /********************************* KILL - odstraní proces ze systému *********************************/ int kill(short pid) { struct pentry *pptr; if ((pptr=&proctab[pid])->pstate == PRFREE) return SYSERR; -- NUMPROC; free(pptr->plimit, pptr->pstklen); switch(pptr->pstate) { case PRCURR: pptr->pstate=PRFREE; resched(); break; /* sebevražda, nikdy se nevrátí ... */ case PRWAIT: semaph[pptr->psem].semcnt++; break; case PRSLEEP: case PRREADY: dequeue(pid); break; } pptr->pstate=PRFREE; return OK; - musí zpracovat proces v libovolném stavu - snížení počítadla procesů - uvolnění paměti pro zásobník - označení položky v tabulce procesů PRFREE - odstranění procesu z fronty - úprava semaforu Operační systémy 2015/2016

Služba KILL Služba SLEEP odstraní proces ze systému, musí existovat při odstranění aktivního procesu musí být přeplánování ze stavu SLEEP, READY a WAIT vyřazení z fronty úprava stavu obecného semaforu Služba SLEEP proces je uložen do DELTA listu stav DELTA listu je uchován v globálních proměnných - přeplánování (uspává se vždy aktivní proces) Operační systémy 2015/2016

Implementace služby SLEEP - proces je zařazen do delta listu - používá globálních proměnných CURRPID, slnempty, sltop - čas pro uspání předán jako parametr - jednotky záleží na implementaci #include <kernel.h> #include <proc.h> #include <q.h> #include <sleep.h> void sleep(unsigned for_time) { if(for_time != 0) insert(currpid, clockqueue, for_time); slnempty=1; sltop=DELTA(clockqueue); /* funkce vrací čas prvního procesu */ proctab[CURRPID].pstate=PRSLEEP; } resched(); Operační systémy 2015/2016

Implementace služby WAKEUP - není k dispozici vrstvám OS, pouze je volána v rámci obsluhy přerušení časovače - slnempty informuje o spícím procesu - sltop obsahuje čas do probuzení prvního procesu v delta listu #include <kernel.h> #include <proc.h> #include <q.h> #include <sleep.h> /**************************************** volána pouze v případě neprázdného delta listu ****************************************/ void wakeup(void) { while (nonempty(clockqueue) && firstkey(clockqueue) == 0) ready(getfirst(clockqueue),RESCHNO); if(slnempty=nonempty(clockqueue)) sltop=DELTA(clockqueue); resched(); } Operační systémy 2015/2016

Obecný semafor Typ SEMAPHOR - obecné semafory - kombinace fronty a číselné hodnoty, číslo udává, kolikrát je předplacena služba lock (kolikrát je možné ji provést, aniž by bylo potřeba proces zastavit), záporná hodnota udává, kolikrát se na semafor čeká - realizace obecného semaforu je provedena pomocí služeb WAIT a SIGNAL /* sem.h */ #define SFREE '1' #define SUSED '2' struct sentry { signed short semcnt, /* hodnota semaforu */ squeue; /* fronta */ }; extern struct sentry semaph[]; /* semafory */ Typ SEMAPHOR Operační systémy 2015/2016

Implementace služby WAIT #include <conf.h> #include <kernel.h> #include <proc.h> #include <q.h> #include <sem.h> /****************************** WAIT - převede aktuální proces do stavu čekání na semafor ******************************/ void wait(int sem){ register struct sentry *sptr; register struct pentry *pptr; sptr=&semaph[sem]; if(--(sptr->semcnt) < 0){ (pptr=&proctab[currpid])->pstate=PRWAIT; pptr->psem=sem; enqueue(currpid,sptr->squeue); resched() } - snížení hodnoty o 1, pokud je záporné, uloží se proces do fronty semaforu, stav se převede do WAIT, vyvolá se přeplánování - do tabulky procesů je poznamenán i semafor, pro snadnější lokalizaci procesu (není potřeba procházet všechny fronty) Operační systémy 2015/2016

Služba WAIT Služba SIGNAL dekrementuje hodnotu semaforu pokud je hodnota větší jak nula, proces pokračuje v případě záporné hodnoty je proces zařazen do fronty semaforu poznamená se, který semafor proces drží provede se přeplánování Služba SIGNAL inkrekrementuje hodnotu semaforu pokud je hodnota záporná nebo nulová, proces je zařazen do READY fronty (prioritní) parametrem RESCHYES se zajistí okamžité přeplánování

Implementace služby SIGNAL hodnota se zvýší o 1, pokud je výsledek záporný nebo roven 0, převede se proces pomocí služby ready do prioritní fronty (z fronty semaforu) #include <conf.h> #include <kernel.h> #include <proc.h> #include <q.h> #include <sem.h> /******************************* SIGNAL - implementace služby *******************************/ void signal(int sem) { register struct sentry *sptr; sptr=&semaph[sem]; if(++sptr->semcnt <= 0) ready(getfirst(sptr->squeue), RESCHYES); return OK; } Operační systémy 2015/2016