Operační systémy z 1. 2005

<<< Hlavní stránka
  1. 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.
  2. 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.
    1. 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
    2. Jaká může být největší hodnota položky counter procesu C je-li zastaven neomezeně dlouho?
  3. 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.
    1. Napište sekvence příkazů pro získání a uvolnění prostředků.
    2. Může pro toto řešení nastat uváznutí, když prostředky chce získat současně více procesů a proč?
  4. ...
    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.
  5. 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.
  6. Pro souborový systém Ext2 s velikostí bloku 2KB.
    1. určete v bytech největší velikost souboru, který bude používat nejvýše dvojité nepřímé adresování diskových bloků.
    2. 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.
<<< Hlavní stránka

Chcete-li pridat zkousku, poslete ji na tento mail: admin@zkousky.euweb.cz

~Zkousky.euweb.cz~
l.p. 2002-2005