SOPy - LABORKI SEM 2
zestawy
Zestaw I
(Made by C. Sobaniec)
Jak sprawdzić poprawność wykonania funkcji systemowej? Jak zdobyć informacje szczegółowe o zaistniałym błędzie?
Czy poniższy program zadziała poprawnie? Odpowiedź uzasadnij:
int num:
int desk1[2], desk2[2];
pipe(desk1);
pipe(desk2);
if (fork()==0) {
close(desk1[1]);
close(desk2[0]);
read(desk1[0],&num,sizeof(int));
write(desk2[1],&num,sizeof(int));
}
else {
close(desk2[1]);
close(desk1[0]);
read(desk2[0],&num,sizeof(int));
write(desk[1],&num,sizeof(int));
}
Przy pomocy semaforów zaimplementuj sekcję krytyczną, w której może się znaleźć co najwyżej 5 procesów. Napisz odpowiedni fragment kodu w C.
W jaki sposób można odczytać asynchronicznie status zakończenia procesu potomnego?
Opisz działanie poniższego programu:
void main(int argc, char* argv[]) {
execlp(argv[0],argv[0],NULL)
}
Zestaw II
(Made by C. Sobaniec)
Dla następujących programów A i B:
Program A Program B
void main() { void main() {
printf("A\n"); printf("B1\n");
} if (fork()==0) {
execlp("A","A",NULL);
printf("B2\n");
}
printf("B3\n");
}
Co powoduje następujące wywołanie funkcji signal:
signal(SIGINT,obsluga);
Na czym polega różnica pomiędzy "zwykłymi" potokami a potokami nazwanymi (kolejkami FIFO)?
Czy poniższy program zadziała poprawnie? Odpowiedź uzasadnij.
pipe(desk);
if (fork()==0) {
close(1);
dup(desk[1]);
close(desk[0]);
close(desk[1]);
execlp("ls","ls","-l",NULL);
}
else {
close(desk[1]);
wait(NULL);
read(desk[0],buf,1024);
}
Jak ograniczyć dostęp do pamięci współdzielonej dla innych procesów?
Zestaw III
(Made by D. Wawrzyniak)
Napisać program w języku C z wykorzystaniem funkcji jądra systemu operacyjnego UNIX, który będzie wykonywał polecenie ps, a po jego zakończeniu wyświetli ciąg pięciu gwiazdek.
#define MAX 512
void main() {
}
Określić ile razy (przez ile procesów) wykonane będą poszczególne fragmenty kodu poniższego programu.
void main() {
int pid;
pid=fork();
sleep(5);
if (pid==0) {
fork();
sleep(10);
exit(1);
printf("Koniec\n");
}
wait(NULL);
pid=fork();
execlp("ls","ls","-l",NULL);
wait(NULL);
sleep(3);
exit(0);
}
Zestaw IV
(Made by D. Wawrzyniak; z pamięci więc pewne modyfikacje mogą wystąpić)
Zmodyfikuj poniższy program tak aby wyjście instrukcji ps zostało przekazane do instrukcji more. Skomentuj odpowiednio tak zmodyfikowany program.
void main()
if (fork()==0) {
execlp("ps","ps","-ef",NULL);
exit(1);
}
wait(NULL);
execlp("more","more",NULL);
}
Napisz program, który tworzy proces zombie na 30 sekund. Napisany program skomentuj i uzasadnij dlaczego w ten sposób zostanie utworzony proces zombie.