Operační systémy LS 2014/2015 9. přednáška 27. dubna 2015.

Slides:



Advertisements
Podobné prezentace
CIT Paměti Díl X.
Advertisements

Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Programovací jazyk C++
Třída SIMSET je druhou standardní systémovou třídou, která obsahuje prostředky pro práci se spojovými seznamy. KRUHOVÉ SPOJOVÉ SEZNAMY Spojový seznam –
Přednáška 11 Jiří Šebesta
10. Dynamické datové struktury
Zásobník (LiFo) Fronta (FiFo)
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Operační systémy. OPERAČNÍ SYSTÉMY pomoc operátorovi, podpora vlastností reálného času, víceuživatelských a více úlohových systémů.
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Komunikace v DS Přednášky z distribuovaných systémů Ing. Jiří Ledvina, CSc.
7. přednáška konzistence dat (příklad) -multithreading (monoprocesor) -sdílení času -analýza časového kvanta -priorita -přepínání (procesů,
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Operační systémy Přednášky pro výuku předmětu Operační systémy Ing. Antonín Vaněk, CSc. DFJP, Univerzita Pardubice září 2003.
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
Počítače a programování 1
PictureBox u vkládání obrázků u vlastnost Picture pomocí příkazu LoadPicture u přiřazení obrázku mezi dvěma prvky PictureBox Auto.Picture = AutoCerv.Picture.
13AMP 2. přednáška Ing. Martin Molhanec, CSc.. Stav procesu (kontext) Stav procesu je úplná informace, kterou je nutné uschovat při přerušení procesu,
Správa procesů.
13AMP 3. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled I. Co je to kontext úlohy Co je to kontext úlohy Task switching (přepnutí úlohy)
3. konzultace (4 hodiny) 6. března 2015 Operační systémy LS 2014/2015.
11. přednáška politika přidělování místa, trashing -algoritmy určení oběti -souběžnost procesů -kritická sekce (co je to, požadavky, možnosti.
1. ELEKTRICKÝ SIGNÁL VSTUPUJE DO uPROCESORU 2.VYMAŽE DATA KTERÁ ZŮSTALA V REGISTRECH VNITŘNÍ PAMĚTI 3. NASTAVÍ REGISTR CPU – ČÍTAČ INSTRUKCÍ NA F000 ADRESA.
Správa procesů.
8. přednáška přepínání kontextu -plánování (pojmy, kritéria, prioritní fronty, vybrané typy) Studijní materiály najdete na adrese:
3. konzultace (5 hodin) Studijní materiály najdete na adrese:
13AMP 4. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Problém sdílených zdrojů Problém sdílených zdrojů Co je to kritická sekce Co.
Distribuované algoritmy - přehled Přednášky z Distribuovaných systémů Ing. Jiří Ledvina, CSc.
Vnitřní (operační paměť)
Co je to OS Správce prostředků –spravuje a přiděluje systémové zdroje systému úlohám, stará se o jejich efektivní sdílení procesoru (ů) operační paměti.
Databázové systémy Přednáška č. 5 Datové typy a Fyzická organizace dat.
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Komunikace v DS Přednášky z distribuovaných systémů Ing. Jiří Ledvina, CSc.
Základy operačních systémů Meziprocesová komunikace a synchronizace Jakub Yaghob.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
9. přednáška služby správce procesů ( resched, ready, resume, suspend, kill, sleep, wakeup ) -Memory Management -cache paměť, adresové prostory.
Pokročilé datové typy (struktury, unie, dynamické proměnné)
9. přednáška srovnání plánovacích politik -fronty -služby správce procesů ( resched, ready, resume, suspend, kill, sleep, wakeup ) Studijní.
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
4. konzultace (4 hodiny) Studijní materiály najdete na adrese:
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
VIRTUÁLNÍ PAMĚŤ EP1. Kryštof Supek. Umožňuje předložit běžícímu procesu adresní prostor paměti, který je větší, než je fyzicky připojená paměť RAM Procesor.
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Zvídavé otázky 1. Prevence a detekce uváznutí
Služby Windows 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: 
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Programovací jazyk C++
Jednočipové počítače – instrukční sada
Soubor Soubor v informatice označuje pojmenovanou sadu dat uloženou na nějakém datovém médiu, se kterou lze pracovat nástroji operačního systému jako.
Y36PJC Programování v jazyce C/C++
PB 169 Počítačové sítě a operační systémy
Operační systémy 9. Spolupráce mezi procesy
Abstraktní datové typy
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Správa paměti.
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Oblast platnosti identifikátoru (1)
Segmentace 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: 
3. konzultace (4 hodiny) 4. března 2016.
4. konzultace (5 hodin) 1. dubna 2016.
Práce s procesy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí Autor:
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Přepíná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: 
Paměť.
9. přednáška 18. dubna 2016 Operační systémy 2015/2016.
Správa procesů.
Funkce s proměnným počtem parametrů
Transkript prezentace:

Operační systémy LS 2014/ přednáška 27. dubna 2015

- 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ém, to je něco jako socialistická ekonomika: samé plánování a samá fronta. (Roderik Plevka) Správa procesů Operační systémy LS 2014/2015

- 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 Fronty procesů Operační systémy LS 2014/2015

Typy front Prioritní P = 1 P = 4 P = 6 P = 10 P = n … n Delta list t = 16        … první    FIFO poslední LIFO    posledníprvní Operační systémy LS 2014/2015

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í následující PID předchozí NULL PID První člen Poslední člen..... Operační systémy LS 2014/2015

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 */ Správa front Operační systémy LS 2014/2015

suspended readycurrent waiting receiving sleeping Stavy 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 Nulový proces Operační systémy LS 2014/2015

- 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ů Stavy procesů

suspended ready current waiting receiving sleeping create suspendresume resched signalwait sendreceive wakeupsleep Služby správce procesů Vlastní přepnutí kontextu je „zabaleno“ do resched blocked Komunikace se servery Využívají ovladače periferií

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

vstupní bod funkce SP vrchol zásobníku pid = fork() parametry adresa procesu nulování registrů procesoru #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 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); } Implementace služby CREATE (demonstrační verze) vytvoření záznamu na zásobníku

Služba CREATE -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) Vytvoření běhového a datového kontextu procesu. Operační systémy LS 2014/2015

Implementace služby RESCHED - 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 #include /* 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) 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(); return OK; }

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 LS 2014/2015

- 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 #include /* 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 Implementace služby READY Operační systémy LS 2014/2015

- 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í #include /* 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; } Implementace služby RESUME Operační systémy LS 2014/2015

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 LS 2014/2015

Implementace služby SUSPEND - 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 #include /* 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; } Operační systémy LS 2014/2015

Implementace služby KILL - 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 #include /********************************* 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; } Operační systémy LS 2014/2015

Služba KILL - 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 LS 2014/2015

Implementace služby SLEEP #include 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(); } - 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 Operační systémy LS 2014/2015

Implementace služby WAKEUP #include /**************************************** 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(); } - 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 Operační systémy LS 2014/2015

Obecný semafor - 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 LS 2014/2015

Implementace služby WAIT #include /****************************** 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 LS 2014/2015

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í - 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 #include /******************************* 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; } 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) Operační systémy LS 2014/2015