Systemy Operacyjne Seminarium Dyplomowe Wydział Informatyki, Elektroniki i Telekomunikacji Katedra Telekomunikacji Kraków, 9 listopada 2012 Adam Halwa
1. Plik o nazwie file miał prawa dostępu: rwsr-x-wx. Wykonano polecenie: chmod u=rx,g+ws,o=r file Jakie będą jego prawa dostępu? Poleceniem chmod (ang. Change Mode) zmieniamy prawa dostępu pliku: r - Read -prawo do odczytu w - Write -prawo do zapisu x - eXecute -prawo do wykonywania S/s - modyfikacja efektywnego identyfikatora grupy lub user'a Grupy trzech znaków kolejno od lewej oznaczają prawa dla: u – user - właściciela g – group - grupy o – other - innych a) r-xrwxr-- b) rwxrwsr-- c) r-xrwsr--
2. Wykonano polecenia: > ls -la drwxrwxrwx 2 test test 512 Mar 27 10:52. -rw-r-r-- 1 test test 512 Mar 27 10:51.. -rw-r-r-- 1 test test 0 Mar 27 10:59 a > ln a d > ln -s d c > rm a Które z poniższych poleceń spowoduje błąd otwarcia pliku: „cat: Cannot open file...” Poleceniem ln a d utworzymy dowiązanie twarde o nazwie d do węzła pliku a. Pliki będą miały ten sam numer węzła (ten sam plik). Natomiast poleceniem ln -s d c utworzymy dowiązanie miękkie (symboliczne) o nazwie c do pliku d. Pliki będą miał różne numery węzłów. Plik c będzie nowym plikiem i będzie zawierał ścieżkę dostępu do pliku d. Po usunięciu pliku a komenda cat a zwróci nam błąd, gdyż plik a już nie istnieje pod taką nazwą. a) cat c b) cat d c) cat a
3. Utworzenie dowiązania (linku) twardego do pliku powoduje: a) Zwiększenie o 1 liczby dowiązań do pliku. b) Utworzenie nowego wpisu w pliku „.” (zawierającego powiązanie nowej nazwy z istniejącym węzłem). c) Zmianę czasu modyfikacji pliku „.”. d) Zmianę czasu modyfikacji tego pliku. e) Stworzenie nowego węzła. f) Dowiązanie nowej nazwy do nowego węzła.
4. Jaka jest różnica między kolejkami FIFO i łączami komunikacyjnymi w systemie UNIX? a) Tylko kolejki FIFO mają zdefiniowaną nazwę. b) Kolejki FIFO mogą być użyte do komunikacji między dowolnymi procesami, a łącza komunikacyjne do komunikacji między procesami spokrewnionymi. c)Procesy czytające i piszące do kolejki FIFO robią to w podobny sposób jakby czytały/pisały do pliku, natomiast w przypadku łączy komunikacyjnych czytanie/pisanie odbywa się przez deskryptory d) W kolejkach FIFO potomkowie procesów dziedziczą deskryptory po rodzicach. e) Łącza komunikacyjne są dwukierunkowe.
5. Dany jest program(prg3.c): /* Program: prg3.c */ #include main() { execl("prg4", "prg4", NULL); execl("/usr/bin/pwd", "pwd", NULL); } a) Pierwszy execl musi zakończyć się niepowodzeniem. b) Pierwszy execl musi zakończyć się sukcesem. execl() – funkcja w języku C służąca do podmiany kodu procesu int execl (const char *path, const char *arg0,.., const char *argn, char *null) path – ścieżka do pliku zawierającego program, który ma być wykonany arg0 – argument zerowy - nazwa pliku zawierającego program arg1, … argn – argumenty wywołania programu (lista argumentów musi być zakończona przez NULL-owy wskaźnik) Jeśli dowolna z funkcji exec() powróci, oznacza to że nastąpił błąd. Zwracana jest wartość −1 i ustawiana jest zmienna globalna errno, aby wskazać błąd.
6. Czy podana poniżej struktura danych jest poprawną strukturą komunikatu? struct komunikacik { long mtype; int count; char mtext[300]; } a)Zależy od implementacji kolejki komunikatów wybranej przez programistę. b)Tak, struktura jest poprawna. Jedynym warunkiem poprawności struktury komunikatu jest pierwszy argument, który określa identyfikator kolejki komunikatów. Identyfikator musi być liczbą typu long, pozostałe argumenty mogą być dowolne.
7. Podać, ile razy zostanie wyświetlony napis „Test”, jeżeli zostanie wykonany poniższy program (prg1.c): /* Program: prg1.c */ #include main() { int a,b; a=fork(); if(a==0){ b=fork(); } printf("Test\n"); } a) 3. b) 1 raz w razie gdy proces potomny nie zostanie utworzony. Fork() rozdziela procesy i dla procesu macierzystego zwraca PID, a dla procesu potomnego zwraca 0. Jeżeli fork() nie wykona się poprawnie zwraca -1.
a)UID = 213, EUID = 235, GID = 200, EGID = 203. b)UID = 235, EUID = 213, GID = 203, EGID = 200. c) UID = 213, EUID = 213, GID = 200, EGID = Zalogowany jest użytkownik test (uid=213) należący do grupy test (gid=200). Wykonał on następujące polecenia: > pwd /home3/stud/bolek > ls -l -rwxr-sr-x 1 bolek stud 1790 Oct 21 19:00 progr >./progr Użytkownik bolek ma identyfikator uid=235, a grupa stud (gid=203). Wybierz właściwą kombinację identyfikatorów uruchomionego procesu progr: UID - rzeczywisty identyfikator użytkownika, EUID - efektywny identyfikator użytkownika, GID - rzeczywisty identyfikator grupy, EGID - efektywny identyfikator grupy Bit s dla grupy pliku (rwxr-sr-x) oznacza, że proces będzie miał ustawiony efektywny identyfikator grupy równy identyfikatorowi grupy pliku. Jeśli nie ustawiono bitów s, wówczas identyfikatory procesu są równe identyfikatorom użytkownika, który proces ten uruchomił.
a) Tylko struktura danych postaci: struct msgbuff { long mtype; char mtext[300]; } b) Każda struktura, której pierwszym elementem jest zmienna typu long. c) struct msgbuff { char mtext[300]; char tekst[12]; } 9. Komunikatem w systemie UNIX może być:
10. Operacja usunięcia segmentu pamięci współdzielonej: a)Może być wykonana tylko przez proces, który ją utworzył. b)Może być wykonana przez proces, który ją utworzył albo proces, który ma do tego uprawnienia. c) Jeżeli istnieją procesy dołączone do pamięci współdzielonej, wówczas nie jest ona kasowana natychmiast, ale dopiero w momencie odłączenia się ostatniego procesu. d) Może być skasowana natychmiast, jeżeli żaden proces nie jest do niej dołączony e) Powoduje wyzerowanie klucza, na podstawie którego została utworzona pamięć współdzielona, jeśli istnieją jeszcze procesy korzystające z tego segmentu
11. Ile procesów może jednocześnie nasłuchiwać na porcie TCP/80 na interfejsie sieciowym ? a) 80. b) Tylko jeden. W danej chwili na jednym porcie może nasłuchiwać tylko jedna aplikacja (proces). Jeden proces może nasłuchiwać jednocześnie na wielu interfejsach sieciowych, ale nadal tylko na jednym porcie.
12. Ile interfejsów sieciowych można utworzyć na jednym interfejsie fizycznym? a) Zależnie od użytej maski. b) Najwyżej siedem. c) Dowolną liczbę. Na każdym interfejsie sprzętowym może znajdować się wiele interfejsów sieciowych (np. pojedyncza karta sieciowa w komputerze może mieć wiele adresów IP).
13. Narzędzia IPC mają następujące cechy wspólne: a) Możliwe jest określenie, jaki użytkownik utworzył narzędzie IPC. b) Wszystkie służą do komunikacji między procesami działającymi na jednym komputerze. c) Do tworzenia wszystkich narzędzi IPC potrzebny jest klucz (zwykle liczba typu int). d)Klucze pozwalają na korzystanie z tego samego narzędzia IPC przez wiele procesów, nie jest niezbędna znajomość identyfikatora narzędzia IPC. e)Identyfikator narzędzia IPC jest przydzielany przez system w momencie tworzenia narzędzia, a jego wartości nie da się przewidzieć. f)Nie mają określonych praw dostępu.
14. Przyjęto, że semafor jest opuszczony, gdy ma wartość 0. Równolegle działające procesy wykonały następujący fragment kodu: Proces 1 P(s); printf(“A”); V(q); P(s); printf(“C”); V(q); printf(“R”); V(z); Proces 2 P(q); printf(“L”); P(z); printf(“W”); V(s); P(q); P(z) printf(“N”); V(q); Przed wykonaniem powyższego kodu przez którykolwiek z procesów, ustawiono semafory w następujący sposób: s = 1, q = 0, z = 1. Co zostanie wyświetlone na ekranie (należy założyć, że każdy napis pojawia się na ekranie natychmiast po wykonaniu funkcji printf – bez normalnego buforowania): a) ALWCRN. P – opuszczenie, V - podniesienie
15. Co to za urządzenie: /dev/hdc3? a)Kanał 2, SLAVE (Secondary Slave), pierwszy dysk logiczny. b)Kanał 2, MASTER (Secondary Master), trzecia partycja podstawowa W przypadku urządzeń ATA możliwe jest podłączenie do dwóch urządzeń ATA na jednym kanale (porcie) kontrolera. Jedno z tych urządzeń musi być skonfigurowane jako MASTER drugie jako SLAVE: /dev/hda - Kanał 1, MASTER (Primary Master) /dev/hdb - Kanał 1, SLAVE (Primary Slave) /dev/hdc - Kanał 2, MASTER (Secondary Master) /dev/hdd - Kanał 2, SLAVE (Secondary Slave) W przypadku, gdy w komputerze jest więcej kanałów ATA, dalsze urządzenia są oznaczane kolejnymi literami Dla dysku /dev/hda partycje podstawowe mają oznaczenia /dev/hda1, /dev/hda2, /dev/hda3, /dev/hda4. Pierwszy dysk (partycja) logiczna ma zawsze oznaczenie /dev/hda5, kolejne /dev/hda6, /dev/hda7, itd.. Podobnie dla /dev/hdb i dalszych.
16. Proces 1 P(s); printf(“B”); V(q); P(s); printf(“C”); V(q); printf(“D”); V(z); Proces 2 P(q); printf(“L”); P(z); printf(“N”); V(s); P(q); P(z); printf(“M”); V(q); Przyjęto konwencję: semafor opuszczony ma wartość 0. Funkcja P(x) służy do opuszczenia semafora, zaś funkcja V(x) do podniesienia semafora. Przed wykonaniem powyższego kodu przez którykolwiek z procesów, ustawiono semafory w następujący sposób: s = 1, q = 0, z = 1. Co zostanie wyświetlone na ekranie (należy założyć, że każdy napis pojawia się na ekranie natychmiast po wykonaniu funkcji printf – bez normalnego buforowania): a) LBCNDM. b) BLNCDM
17. Użytkownik student wykonał serię poleceń: ps -o pid,ppid,pgid,fname PID PPID PGID COMMAND tcsh ps pisz > kill –9 0 W rezultacie: a) Proces o PID = 2551 dalej będzie aktywny. b) Proces o PID = 2685 dalej będzie aktywny c)proces o PID = 2472 będzie aktywny kill -signal pid – wysłanie sygnału z poziomu shella Jeżeli wysyłając sygnał zamiast konkretnego numeru PID podamy wartość 0, to sygnał zostanie wysyłany do wszystkich procesów o takim samym identyfikatorze grupy procesów PGID, jaki ma proces wysyłający sygnał. Sami zainicjowaliśmy proces ps, więc jego PPID jest równy naszemu PGID, co oznacza, że nasz PGID=2472
18. Plik /dev/zero w systemie Unix jest plikiem: a) Specjalnym znakowym. b) W którym można ukryć niechciane komunikaty o błędach. c) Który przy odczycie zachowuje się jak nieskończenie duży plik zawierający bajty o wartości 0. d) Który przy zapisie zachowuje się jak /dev/null (może przyjąć dowolną ilość danych). e) Który ma bardzo dużą przepustowość, znacznie większą niż dyski twarde. f) Zwykłym.
19. Które z wymienionych systemów plików są systemami z dziennikiem (journalling filesystems): a) ext3. b) ext2. c)NTFS. d)XFS (Linux). e)UFS (Solaris). f)iso9660.
20. Utworzono plik o nazwie Plik_1. Numer węzła tego pliku równy jest Następnie wykonano polecenia: ln Plik_1 Plik_2 ln -s Plik_2 Plik_3 Numery węzłów plików Plik_2 i Plik_3 będą odpowiednio („?” oznacza, że nie da się przewidzieć numeru węzła): a)? i ?. b)29458 i ?.