Skip to content

Commit

Permalink
New readme
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasmatus committed Jun 3, 2021
1 parent 1593fc6 commit 2c6096c
Showing 1 changed file with 81 additions and 0 deletions.
81 changes: 81 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@

# IOS - Operační systémy

## Projekt č.2

Hodnocení: 15/15 bodů

## Zadání

## Popis Úlohy (Santa Claus problem)
Zadání je inspirováno knihou Allen B. Downey: The Little Book of Semaphores

Santa Claus spí ve své dílně na severním pólu a může být vzbuzen pouze
1. ve chvíli, kdy jsou všichni jeho sobi zpět z letní dovolené
2. někteří z jeho skřítků mají problém s výrobou hraček a potřebují pomoci

Aby se Santa Claus prospal, skřítci čekají potichu před dílnou. Ve chvíli, kdy čekají alespoň 3, tak první 3 z fronty najednou vstoupí do dílny. Ostatní skřítci, co potřebují pomoci musí čekat před dílnou až bude volno.
Ve chvíli, kdy přijde poslední sob z dovolené je pomoc čekajícím skřítkům možné odložit. Santa dává na dveře dílny nápis „Vánoce – zavřeno“ a jde zapřahat soby do saní. Všichni skřítci, co čekají před dílnou ihned odcházejí na dovolenou. Ostatní skřítci odchází na dovolenou ve chvíli, kdy potřebují pomoc od Santy a zjistí, že je dílna zavřená.

### Podrobná specifikace úlohy
#### Spuštění
$ ./proj2 NE NR TE TR
- NE: počet skřítků. 0<NE<1000
- NR: počet sobů. 0<NR<20
- TE: Maximální doba v milisekundách, po kterou skřítek pracuje samostatně. 0<=TE<=1000
- TR: Maximální doba v milisekundách, po které se sob vrací z dovolené domů. 0<=RE<=1000
- Všechny parametry jsou nezáporná celá čísla

#### Chybové stavy:
- Pokud některý ze vstupů nebude odpovídat očekávanému formátu nebo bude mimo povolený rozsah, program vytiskne chybové hlášení na standardní chybový výstup, uvolní všechny dosud alokované zdroje a ukončí se s kódem (exit code) 1
- Pokud selže některá z operací se semafory, nebo sdílenou pamětí, postupujte stejně-- program vytiskne chybové hlášení na standardní chybový výstup, uvolní všechny dosud alokované zdroje a ukončí se s kódem (exit code) 1

#### Implementační detaily:
- Každý proces vykonává své akce a současně zapisuje informace o akcích do souboru s názvem proj2.out. Součástí výstupních informací o akci je pořadové číslo A prováděné akce (viz popis výstupů). Akce se číslují od jedničky
- Použijte sdílenou paměť pro implementaci čítače akcí a sdílených proměnných nutných pro synchronizaci
- Použijte semafory pro synchronizaci procesů
- Nepoužívejte aktivní čekání (včetně cyklického časového uspání procesu) pro účely synchronizace
- Pracujte s procesy, ne s vlákny

#### Hlavní proces
1. Hlavní proces vytváří ihned po spuštění jeden proces Santa, NE procesů skřítků a NR procesů sobů
2. Poté čeká na ukončení všech procesů, které aplikace vytváří. Jakmile jsou tyto procesy ukončeny, ukončí se i hlavní proces s kódem (exit code) 0

#### Proces Santa
1. Po spuštění vypíše: `A: Santa: going to sleep`
2. Po probuzení skřítky jde pomáhat elfům--vypíše: `A: Santa: helping elves`
3. Poté, co pomůže skřítkům jde spát (bez ohledu na to, jestli před dílnou čekají další skřítci) a vypíše: `A: Santa: going to sleep`
4. Po probuzení posledním sobem uzavře dílnu a vypíše: `A: Santa: closing workshop` a pak jde ihned zapřahat soby do saní
5. Ve chvíli, kdy jsou zapřažení všichni soby vypíše: `A: Santa: Christmas started` a ihned proces končí

#### Proces Skřítek
1. Každý skřítek je unikátně identifikován číslem elfID. 0<elfID<=NE
2. Po spuštění vypíše: `A: Elf elfID: started`
3. Samostatnou práci modelujte voláním funkce usleep na náhodný čas v intervalu <0,TE>
4. Když skončí samostatnou práci, potřebuje pomoc od Santy. Vypíše: `A: Elf elfID: need help` a zařadí se do fronty před Santovou dílnou
5. Pokud je třetí ve frontě před dílnou, dílna je prázdná a na dílně není cedule „Vánoce – zavřeno“, tak společně s prvním a druhým z fronty vstoupí do dílny a vzbudí Santu.
6. Skřítek v dílně dostane pomoc a vypíše: `A: Elf elfID: get help` (na pořadí pomoci skřítkům v dílně nezáleží)
7. Po obdržení pomoci ihned odchází z dílny a pokud je dílna již volná, tak při odchodu z dílny může upozornit čekající skřítky, že už je volno (volitelné)
8. Pokud je na dveřích dílny nápis „Vánoce – zavřeno“ vypíše: `A: Elf elfID: taking holidays` a proces ihned skončí

#### Proces Sob
1. Každý sob je identifikován číslem rdID, 0<rdID<=NR
2. Po spuštění vypíše: `A: RD rdID: rstarted`
3. Čas na dovolené modelujte voláním usleep na náhodný interval <TR/2,TR>
4. Po návratu z letní dovolené vypíše: `A: RD rdID: return home` a následně čeká, než ho Santa zapřáhne k saním. Pokud je posledním sobem, který se vrátil z dovolené, tak vzbudí Santu
5. . Po zapřažení do saní vypíše: `A: RD rdID: get hitched` a následně proces končí

### Podmínky vypracování Obecné informace
- Projekt implementujte v jazyce C. Komentujte zdrojové kódy, programujte přehledně. Součástí hodnocení bude i kvalita zdrojového kódu
- Kontrolujte, zda se všechny procesy ukončují korektně a zda při ukončování správně uvolňujete všechny alokované zdroje
- Dodržujte syntax zadaných jmen, formát souborů a formát výstupních dat. Použijte základní skript pro ověření korektnosti výstupního formátu (dostupný z webu se zadáním)
- Dotazy k zadání: Veškeré nejasnosti a dotazy řešte pouze prostřednictvím diskuzního fóra k projektu 2
- Poznámka k testování: Můžete si nasimulovat častější přepínání procesů například vložením krátkého uspání po uvolnění semaforů apod. Pouze pro testovací účely, do finálního řešení nevkládejte!

### Překlad
- Pro překlad používejte nástroj make. Součástí odevzdání bude soubor Makefile
- Překlad se provede příkazem make v adresáři, kde je umístěn soubor Makefile
- Po překladu vznikne spustitelný soubor se jménem `proj2`, který bude umístěn ve stejném adresáři jako soubor Makefile
- Zdrojové kódy překládejte s přepínači `-std=gnu99 -Wall -Wextra -Werror -pedantic`
- Pokud to vaše řešení vyžaduje, lze přidat další přepínače pro linker (např. kvůli semaforům či sdílené paměti, -pthread, -lrt , . . . )
- Vaše řešení musí být možné přeložit a spustit na serveru merlin

0 comments on commit 2c6096c

Please sign in to comment.