Studiuj dzięki licznym zasobom udostępnionym na Docsity
Zdobywaj punkty, pomagając innym studentom lub wykup je w ramach planu Premium
Przygotuj się do egzaminów
Studiuj dzięki licznym zasobom udostępnionym na Docsity
Otrzymaj punkty, aby pobrać
Zdobywaj punkty, pomagając innym studentom lub wykup je w ramach planu Premium
Społeczność
Odkryj najlepsze uniwersytety w twoim kraju, według użytkowników Docsity
Bezpłatne poradniki
Pobierz bezpłatnie nasze przewodniki na temat technik studiowania, metod panowania nad stresem, wskazówki do przygotowania do prac magisterskich opracowane przez wykładowców Docsity
Notatki dotyczące tematów z dziedziny informatyki: pytania do egzaminu z informatyki
Typologia: Notatki
1 / 11
1. Wymień i krótko opisz fazy kompilacji programu w języku C++.
Plik źródłowy jest kompilowany do pliku zawierającego kod pośredni. Następnie pliki te są łączone w program wykonywalny.
2. Jaka wygląda struktura poprawnego programu? Od jakiej instrukcji rozpoczyna się wykonywanie każdego programu w C++?
#include <iostream.h> (dyrektywy preprocesora)
main()
Return 0; }
Wykonywanie każdego programu zaczyna się od instrukcji main( )
3. Wymień cechy charakteryzujące każdą zmienną.
-nazwa
-jest określonego typu
-w systemie szestnastkowym
10 = 10 010= 8 0x10=
5. Omów operatory, które umożliwiają tworzenie obiektów typów pochodnych.
[ ] tablica obiektów danego typu (macierz, wektor obiektów danego typu
( ) funkcja zwracająca wartość danego typu (podprogram realizujący określony algorytm)
& referencja (adres) obiektu danego typu (inaczej inne nazwanie „pseudonim” jakiegoś obiektu)
6. Omów operator inkrementacji i dekrementacji.
i „++” operator inkrementacji (i=i+1)
i „—„ operator dekremntacji (i=i-1)
Jeżeli operator „++” lub „—„ stoi przed zmienną, to najpierw jest ona zwiększona o 1, a następnie liczy się wartość wyrażenia w której ona występuje.
7. Co to jest operator rzutowania? Jaką wartość przyjmie zmienna b po wykonaniu sekwencji: int a = 0xAE9C; char b; b = (char) a;
Działanie operatora polega na tym, że brany jest obiekt jakiegoś typu i jak rezultat zwracany jest obiekt innego typu.
Zmienna b typu char przyjmie wartość 0x9C
8. Omów pojęcie zakres ważności obiektu w programie; wyjaśnij pojęcie zasłanianie nazw****.
Zakres ważności obiektu to ta część programu w której nazwa obiektu znana jest kompilatorowi
a)zakres lokalny dot. bloku , np.: main( ) { ...; ...; ...; { // początek bloku wewnętrznego Int x, y ; // zmienne x oraz y obowiązują x = 10; y = sin(x); // w bloku wewnętrznym ...; ... ; }; ...; ...; ...; ...; return 0; }
b) zakres „blok funkcji” Zakres ważności ograniczony do bloku funkcji. Int fun1(int k, double x) { Int n, m; double x1, y, w; ...; ...; ...; E: w = 10; y = sin(w); ...; ...; if(...) goto E; ...; ...; return n+m; }
Zasłanianie nazw - Nowa definicja zasłania definicję poprzednią, np.: int
14. W jakim przypadku w programie można pominąć deklarację funkcji?
Jeżeli definicja funkcji wystąpi przed jej wywołaniem to jej deklaracje można pominąć.
15. Czy deklaracje funkcji i definicje funkcji jeżeli jednocześnie występują w programie, mogą być zapisane w dowolnej kolejności, czy też obowiązują stosowne reguły? Jeżeli tak, opisz je?
Najpierw deklaracja potem definicja. Jeżeli definicja funkcji wystąpi przed jej wywołaniem to jej deklaracje można pominąć. Nie jest to jednak zaleca. Deklarujemy wiec wszystkie funkcje. Pozwala to uniknąć problemu pamiętania w jakiej kolejności funkcje są wywoływane i czy wywołana funkcja była już wcześniej definiowana.
16. Jakie obowiązują zasady przy definiowaniu funkcji, która nie oddaje wartości, podaj przykład definicji takiej funkcji?
Przed nazwą funkcji słowo void funkcja nie może zwracać wartości czyli return 7; źle return; dobrze
17. W jakich sytuacjach definicja funkcji może zastąpić deklarację funkcji?
Jeżeli definicja funkcji wystąpi przed jej wywołaniem to jej deklaracje można pominąć.
18. Co to oznacza, że argumenty przesyłamy do funkcji przez wartość lub przez referencję (adres)****? Czy ma to jakieś znaczenie w programie?
Przesłanie argumentów do funkcji przez referencję pozwala w treści tej funkcji modyfikowanie zmiennych (nawet lokalnych) znajdujących się poza tą funkcją.
19. Jak przesyłamy tablice do funkcji (tablica jest argumentem wywoływanej funkcji)?
Przez referencję , wskaźnik, nazwę tablicy (bo stanowi adres jej zerowego elementu)
20. Co rozumiesz przez pojęcie funkcja rekurencyjna - podaj conajmniej dwa przykłady takich funkcji.
Funkcja jest rekurencyjna, gdy definicja funkcji zawiera ją samą np. silnia, ciąg Fibonacciego
21. Omów instrukcję postaci { warunkowej / pętli / przełącznika }. Podaj przykład.
Instrukcja warunkowa „if” 0=fałsz, 1=prawda np. if(wyrażenie)instrukcja1; lub if(wyrażenie)instrukcja1; else instrukcja2;
Instrukcja pętli „while”. Oblicza się wartość obiektu wyrażenie i jeżeli ma ono wartość różną od 0, to wykonuje się instrukcja
Instrukcja „switch” umożliwia wielokrotne sprawdzenie wyrażenia
Instrukcja for(int i; i<k; i++); do instrukcja 1 while (wyrażenie)
22. Wymień operacje wykonywane na plikach, co to jest deskryptor pliku?
Operacje na plikach
otwieranie pliku do zapisu funkcja open
otwieranie pliku do odczytu funkcja open
odczyt z pliku funkcja read
zapisywanie do pliku funkcja write
zamykanie plików funkcja close
23. Wymień zasadnicze etapy związane z budową biblioteki statycznej.
a) piszemy pliki w C++ zawierające funkcje b) tworzymy z tych plików pliki objektowe c) Stosujemy narzędzie „ar” do utworzenia biblioteki statycznej o określonej nazwie i rozszerzeniu „a” d) Tworzymy plik nagłówkowy do naszej biblioteki
24. Co to są identyfikatory PID i PPID procesu. Do czego one służą systemowi operacyjnemu?
PID identyfikator (własny) procesu (ang. Process IDentifier) to unikalny identyfikator procesu w wielozadaniowych systemach operacyjnych (np. Unix, Microsoft Windows NT), wyrażony jako liczba całkowita z określonego przedziału.Dzięki PID jest możliwe działanie na procesach przez użytkownika: na przykład pod powłoką uniksową PID podaje się przy takich funkcjach jak wait() (zawieszenie) czy kill() (zabicie procesu).W systamach uniksowych PID 0 to proces bezczynności systemu, a PID 1 to proces init, odpowiedzialny za inicjalizację innych procesów. Wszystkie procesy są procesami potomnymi względem inita. Maksymalne PID w systamach Uniksowych można ustalić odczytując je z pliku /proc/sys/kernel/pid_max (często wynosi 32768). Po zakończeniu procesu PID jest zwalniane, nie jest jednak wykorzystywane aż do czasu kiedy nie jest to bezwględnie potrzebne, to znaczy do czasu kiedy wykorzystywanie puli PID rozpocznie się od nowa.
PPID- identyfikator procesu macierzystego
(czyli PID nadrzędnego, inaczej wywołującego), Aby uzyskać aktualną wartość każdego z ww. identyfikatoró w należy wywołać właściwą funkcję systemową,
PID -identyfikator (własny) procesu
PPID - identyfikator procesu macierzystego (czyli PID nadrzędnego, inaczej wywołującego),
GID - identyfikator grupy procesów
UID - identyfikator użytkownika procesu.
27. Jakie funkcje pozwalają na powoływanie procesów potomnych?
Nowy proces, czyli potomny jest kopią procesu wywołującego, czyli procesu macierzystego.Funkcja fork(), funkcja waitpid(),funkcje rodziny exec,funkcja kill(),
28. Do czego służy funkcja fork? Jaką istotną cechę posiada funkcja fork, która odróżnia ją od wszystkich innych funkcji?
Do powoływania procesów potomnych służy unikalna funkcja fork( )
Funkcja fork( ) tworzy nowy proces .Nowy proces, czyli potomny jest kopią procesu wywołującego, czyli procesu macierzystego. Będzie on natomiast realizowany od miejsca w ktorym zostala wywolana funkcja fork().Funkcja jest specyficzną funkcją w systemieoperacyjnym Unix/Linux powodującą, że pojedynczemu programowi, któremu do jego wykonania przypisany jest pojedynczy proces w systemie operacyjnym, przypisuje się dwa procesy poprzez rozwidlenie na:macierzysty ( zwany rodzic) i potomny (zwany dziecko) - czyli tworzy się nowy proces zwany procesem potomnym (dziecko),
który jest dokładną kopią procesu macierzystego (rodzica) Wywołując funkcję fork, proces powoduje utworzenie jego kopii, tak aby jeden proces mógł obsługiwać jedno zadanie, podczas gdy drugi proces będzie wykonywać inne zadanie i obydwa pozostają w systemie. Jest to typowe zastosowanie funkcji fork w serwerach sieciowych. Proces potomny ma za zadanie wykonać inny istniejący program w systemie. Ale ponieważ jedynym sposobem utworzenia nowego procesu jest wywołanie funkcji fork, więc proces macierzysty najpierw wywołuje tę funkcję, aby została utworzona jego kopia (potomek). Następnie jeden z dwóch procesów, zazwyczaj potomek, wywołuje jedną z funkcji grupy exec i dzięki temu potomek zostaje zastąpiony
nowym programem, który jest pierwszym argumentem tej funkcji. Takie
zachowanie jest typowe np. dla programu shella.. Macierzysty pozostaje
29. Ile wartości, jakie i gdzie oddaje funkcja fork?
Służy ona do powoływania procesów potomnych. wywołanie fork( ) zwraca więc wartości:
0 w procesie potomnym przy jego udanym powołaniu,
PID procesu potomnego w procesie macierzystym przy udanym powołaniu
procesu potomnego
30. Co nam pozwala "zorientować się" w wykonywanym programie czy realizowany jest program macierzysty czy potomny?
Obserwując zapisy na konsoli (monitorze) możemy śledzić PID aktualnie wykonywanego procesu i w ten sposób możemy łatwo stwierdzić, który proces jest aktualnie wykonywany (macierzysty czy potomny)
31. Co rozumiesz przez powiedzenie, że proces potomny jest dokładną kopią programu macierzystego.
Nowy proces, czyli potomny jest kopią procesu wywołującego, czyli procesu macierzystego. Będzie on realizowany od miejsca w którym została wywołana funkcja fork( )
32. Do czego służy funkcja waitpid?
Jeżeli zależy nam aby proces potomny wykonał swoje zadanie i zakończył się wcześniej niż proces mcierzysty możemy sprawić, aby proces macierzysty zaczekał na zakończenie pracy procesu potomnego, wywołując w prociesie macierzystym funkcję wait( ) lub waitpid( )
33. Co to jest proces zombi, jakie są skutki pozostawania tych procesów w systemie?
O procesach, które pozostają w systemie, mimo iż formalnie się zakończyły i zwolniły zasoby systemu mówimy „proces zombie” Oznacza to, że pozostał wpis w tablicy procesów opisujący program, którego wykonanie w systemie operacyjnym zostało zakończone, ale którego zamknięcie nie zostało jeszcze obsłużone przez proces macierzysty
34. Do czego służą funkcje rodziny exec?
Funkcje z rodziny exec (tj. execlp() i execvp() pobierają argumenty i tworzą proces, który zastępuje proces aktualnie wykonywany (podstawia się on w jego miejsce)
35. Omów cechy protokołu połączeniowego TCP.
Przesyłane dane są bezpieczne, kontrolowane, jest zachowana kolejność pakietów, pakiety nie giną, pakiety mogą być powtórnie wysłane, przy wystąpieniu błędu jesteśmy o tym poinformowani
36. Omów cechy protokołu bezpołączeniowego UDP.
Wysyłane pakiety mogą nie dotrzeć do odbiorcy, o błędach nie jesteśmy informowani, kolejność pakietów może nie być zachowana, dane nie zawsze są kontrolowane, pakiety mogą zaginąć i nikt nie zareaguje, przesłanie danych jest raczej wolne.
37. Jakie warunki komunikacji zapewniają gniazda datagramowe a jakie strumieniowe?
SOCK_STREAM – gniazda połączeniowe, strumieniowe oferują dwukierunkowe połączenie w postaci uporządkowanego i niezawodnego strumienia bajtów. Mamy gwarancję, że przesyłane dane nie zostaną zagubione, zduplikowane albo przemieszane. Duże komunikaty są fragmentowane i ponownie składane. Działanie gniazd strumieniowych jest przewidywalne.
Gniazda datagramowe – bezpołączeniowe. Nie nawiązują one i nie podtrzymują połączenia. Istnieje limit datagramu, który można przesłać przez sieć. Datagram jest transmitowany jako pojedynczy komunikat sieciowy, który może zostać zagubiony, zduplikowany, bądź nadejść w niewłaściwej kolejności
43. Jaka funkcja (opisz jej argumenty) po stronie serwera tworzy tzw. gniazdo bierne i do czego ono służy?
Gniazdo bierne tworzy funkcja socket() jest to gniazdo nasłuchujące, które jest zasobem systemu operacyjnego przypisanym do procesu serwera.
44. Jaka funkcja (opisz jej argumenty) po stronie serwera tworzy tzw. gniazdo aktywne i do czego ono służy?
funkcja accept() tworzy nowe aktywne gniazdo zwane gniazdem połączonym. Jest używane tylko do komunikacji z danym klientem
45. Omów cykl przetwarzania poleceń po stronie klienta i serwera związanych z przygotowaniem i utrzymaniem komunikacji przez gniazda strumieniowe.
Funkcje (czynności ) wykonywane przez serwer:
A) aplikacja serwera używając funkcji systemowej socket( ) tworzy nienazwane bierne gniazdo tzw. ( gniazdo nasłuchujące ang. listening socket), które jest po prostu zasobem systemu operacyjnego przypisanym do procesu serwera. Po stworzeniu gniazda żaden inny proces na razie nie ma do niego dostępu.
B) za pomocą wywołania systemowego bind( ) serwer nadaje gniazdu nazwę. Lokalne gniazda otrzymują nazwę pliku w systemie plików Uniksa, zazwyczaj zazwyczaj katalogu /tmp albo /user/tmp. W przypadku gniazd sieciowych będzie to identyfikator usługi ( numer portu/ punkt dostępu) właściwy dla sieci z którą łączy się klient.
C) proces serwera oczekuje na połączenie klienta z nazwanym gniazdem. Jeżeli z gniazdem chce się połączyć jednocześnie wielu klientów, wówczas wywołanie systemowe listen( ) tworzy kolejkę, przeznaczoną dla nadchodzących połączeń. Serwer może je zaakceptować przy użyciu funkcji systemowej akcept( ).
D) wywołanie przez serwer funkcji systemowej akcept( ) tworzy nowe aktywne gniazdo zwane gniazdem połączonym (ang. connected socket), nie zależnie od utworzonego(pkt a oraz b) Gniazdo to jest używane wyłącznie do komunikacji z danym klientem.
Natomiast nazwane nasłuchujące gniazdo ( pkt. b ) oczekuje na dalsze połączenie z innymi klientami. Jeżeli serwer jest odpowiednio napisany wówczas może obsługiwać wiele połączeń jednorazowo ( współbieżnie, tzn. wielu klientów). W przypadku serwera iteracyjnego (zw. Także sekwencyjnym) pozostali klienci czekają w kolejce utworzonej przez funkcję listen( ), aż serwer będzie ponownie gotowy do obsługi kolejnego klienta.
Funkcje (czynności ) wykonywane przez klienta:
A) aplikacja klienta używając funkcji systemowej socket( ) tworzy nie nazwane gniazdo,
B) za pomocą wywołania funkcji systemowej bind ( ) może ale nie musi nadać gniazdu nazwę
C) wywołując funkcje systemową connect ( ) „usiłuje nawiązać kontakt z serwerem, używając nazwanego gniazda serwera jako adresu ( IP + port ). I jeżeli serwer był na tzw. „nasłuchu” kontakt zostaje nawiązany.
Po nawiązaniu połączenia, gniazda są używane w podobny sposób jak niskopoziomowe deskryptory plików, zapewniając dwukierunkową komunikację np. przy użyciu funkcji write ( ) oraz read ( ).
**46. Podaj sekwencję wywołań funkcji systemowych po stronie klienta i serwera związanych z przygotowaniem i utrzymaniem komunikacji przez gniazda strumieniowe.
Tak różni się serwer iteracyjny używa się do prostych usług nie angażując klienta (np. podanie przez serwer czasu dobowego, czyli nie wykorzystanie funkcji fork). Natomiast serwer współbieżny tworzy proces potomny przy użyciu funkcji fork w celu wykonania usługi dla zgłaszającego się klienta.