-
Počet kusú nějakého produktu v meziskladu je uchovávánna proměnné
"kusy". V aplikaci je její aktualizace opsána následujícími vlákny
/*prijem*/
...
pthread_mutex_lock(&kusy_mutex);
/*zvys hodnotu kusy*/
pthread_mutex_unlock(&kusy_mutex);
...
/*vydej*/
...
pthread_mutex_lock(&kusy_mutex);
/*sniz hodnotu kusy*/
if (kusy <= limit) {
pthread_cond_signal(&kusy_limit_cv);
}
pthread_mutex_unlock(&kusz_mutex);
...
Napište schematicky fragment vlákna, které vypíše zprávu "Počet
kusů klesnul pod limit", když vlákno vydej zjistí stav kusy <=
limit.
- Uvažujte v Linuxu procesy A,B a C v plánovací třídě SCHED_OTHER.
Všechny mají základní časové kvantum 20ms. Položka counter deskriptoru
porcesu obsahuje čas, který má proces v rámci epochy k dispozici.
Procesy A a B jsou výpočetní a vzdycky spotřebují celé kvantum, mají-li
přidělen procesor. Proces C je na několik vteřin pozastaven.
- Uveďte hodnoty položky counter jednotlivých procesů
na začátku epochy, tj. v relativním čase k začátku epochy 0ms, po 200,
400, 600, 800ms
- Jaká může být největší hodnota položky counter procesu C je-li zastaven neomezeně dlouho?
- Následující fragment programu vytvoří pole se dvěma semafory, které použijeme pro výlučný přístup ke dvěma prostředkům.
struct sembuf {
unsigned short sem_num;
short sem_op;
short sem_flg;
};
struct sembuf psembuf[2], vsembuf[2];
...
semid = semget(SEMKEY,2,IPC_CREAT|S_IRUSR|S_IWUSR|S_IGRP|S_IWROPR|S_IROTH|S_IWOTH);
init[0]=init[1]=1;
semctl(semid,2,SETALL,init);
Pro získání prostředků použijeme ve volání semop argument psembuf a pro jejich uvolnění argument vsembuf.
- Napište sekvence příkazů pro získání a uvolnění prostředků.
- Může pro toto řešení nastat uváznutí, když prostředky chce získat současně více procesů a proč?
-
...
int fd1, fd2, fd3;
fd1=open("/adr/soub",O_RDONLY);
if (fork()==0) {
fd2=open("/adr/soub",O_RDONLY);
fd3=dup(fd1);
...
}
..
Nakreslete tabulku deskriptorů rodiče i potomka a odpovídající objekty
VFS - vitruálního souborového systému. Odkazy na objekty znázotněte
šipkami.
- Potenciální myšlenka následujícího programu je zdvojnásobit rychlost kopírování souboru.
int fdr, fdw;
char c;
main(argc,argv)
int argc;
char *argv[];
{
fdr=open(argc[1], O_RDONLY);
fdw=creat(argv[2], 0666);
fork();
rw();
exit(0);
}
rw()
{
for(;;)
{
if (read(fdr,&c,1)!=1)
return;
write(fdw,&c,1);
}
}
Co bude obsahovat výstupní soubor, jestliže vstupní soubor obsahuje znaky abc. Uveďte všechny možnosti.
- Pro souborový systém Ext2 s velikostí bloku 2KB.
- určete v bytech největší velikost souboru, který bude používat nejvýše dvojité nepřímé adresování diskových bloků.
- pro soubor obsahující jediný znak na pozici 5020, uveďte hodnotu
položky i_size a položky i_blocks odpovídajícího iuzlu. Uveďte co budou
obsahovat první čtyři prvky pole i_block s čísly diskových bloků
souboru.
|
|