Dragi prijatelj strojnog učenja
5. poglavlje
1. Unutar jezgre kod se može izvoditi u “različitim kontekstima”. Koji su to i koja ograničenja postavljaju pojedini konteksti?
Poziv jezgrine funkcije iz programa - OS se ne prebacuje u jezgrin kontekst dretve već obavlja operacije unutar konteksta pozivajućeg procesa. Iz pozvane jezgrine funkcije izravno se mogu dohvatiti podaci o pripadajućoj dretvi, odnosno procesu. Dretva može biti blokirana “unutarnjim” mehanizmima nalik “vanjskima” (semafori, monitori…). Također se može dohvatiti i jezgra, tj. njene strukture podataka i druge funkcije.
Poziv jezgrine funkcije preko prekida - Prilikom prekida sprema se kontekst prekinute dretve i aktivira se kontekst jezgre. U pravilu ovaj način rada zabranjuje korištenje blokirajućih poziva (npr. čekanje semafora), međutim u praksi se obrada prekida vrši u 2 dijela:
neophodni dio - njime započinje prekid, atomaran je, tj. ne dozvoljava prekidanje.
dodatni dio - obavlja se naknadno, dozvoljeno prekidanje.
U skripti se spominju 3 načina, jezgrin kontekst procesa, kontekst jezgrine dretve, bez konteksta dretve. Nije mi baš jasno kako se zadnja dva razlikuju jedan od drugog. Pročitajte poglavlje 5.1.
2. Što treba napraviti/koristiti ako u jezgrinoj funkciji treba pristupiti adresnom prostoru procesa?
Sljedeće se odnosi na poziv jezgrine funkcije iz programa, nisam siguran mogu li se ove metode koristiti u drugim načinima izvođenja jezgrina koda… Ako se koristi straničenje, dohvat korisničkih podataka (pretpostavljam da je to adresni prostor procesa), mora se obavljati korištenjem posebnih funkcija, copy_to_user i copy_from_user). Opisnik pripadajuće dretve i procesa može se dohvatiti varijablom current.
3. Obrada prekida naprave vrlo je bitan dio upravljanja napravom, ali može bitno utjecati i na svojstva sustava. Zbog čega? Koje mogućnosti u Linuxu stoje na raspolaganju za obradu prekida? Koja su njihova svojstva/kada ih koristiti?
Linux omogućava obradu prekida u dva dijela, u neophodnom i dodatnom dijelu. Dodatni dio može biti napravljen na 4 načina:
Red poslova (workqueue), višedretvena obrada prekida (threaded IRQs) - obavljaju se u kontekstu posebnih jezgrinih dretvi, ne izvršavaju se atomarno, tj. mogu biti blokirani.
Lagani prekid (softirq), zadačić (tasklet) - izvode se atomarno u kontekstu posebne dretve (ne piše, ali pretpostavljam jezgrine). Ne smiju se koristiti blokirajući pozivi, jednom započet zadatak mora biti dovršen.
Preporuča se korištenje prve dvije metode zbog performansi.
4. Što se smije a što ne koristiti u jezgri? Je li to ovisi o kontekstu u kojem se izvodi kod jezgre? Kako?
U atomarnom kodu (npr. obrada prekida) ne smiju se koristiti blokirajuće funkcije, niti funkcije koje traže kontekst dretve. Smiju se koristiti funkcije s radnim čekanjem (spinlock).
Kod s kontekstom smije koristiti sve interne jezgrine funkcije.
Pristupati adresnom prostoru procesa koji se izvodio prije ulaska u jezgru može se pristupiti samo ako je taj proces sam pozvao jezgrinu funkciju, (npr. čitanje iz datoteke). U tu svrhu koriste se posebne funkcije za dohvat i pohranu podataka procesa.
Jezgra nema potporu za korištenje realnih brojeva jer nisu oni potrebni za obavljanje jezgrinih zadaća.
5. Što je to modul u kontekstu jezgre Linuxa? Čemu služi?
Upravljačke programe dijelimo na dvije vrste ovisno o načinu uključenja u jezgru, permanentno (statički) ili dinamički (modul). Statički upravljački programi dolaze u cjelini s ostatkom jezgre. Moduli se mogu naknadno, po potrebi, učitati u jezgru, zatim maknuti kada više nisu potrebni. Za kompajliranje modula nije potrebno znati cijeli izvorni kod Linuxa, već njegova samo zaglavlja (.h datoteke) i postavke.
6. Navesti tri osnovne klase naprava u LInuxu.
Znakovne naprave - naprave koje čitaju/pišu niz bajtova (npr. tipkovnica, miš…).
Blokovske naprave - koriste blokove kao jedinice podataka (uglavnom naprave koje ostvaruju datotečne sustave).
Mrežna sučelja - naprave kojima je svrha ostvarenje komunikacije.
7. Koja je zadaća upravljačkog programa naprave?
Upravljački programi upravljaju napravama. Može imati i prihvat prekida, ako naprava izaziva prekide koji nisu obuhvaćeni općenitim mehanizmima. Upravljački programi sastoje se od svoje strukture podataka i funkcija. Upravljački program prima zahtjeve kroz sučelje OS-a (read(…), write(…), open(…) itd.), ovisno o vrsti zahtjeva, poziva odgovarajuću, tj. registriranu funkciju naprave.
8. Koja su uobičajena sučelja koja naprava mora ostvariti, a da bi se uklopila u Linux?
Sučelja su opisana u poglavlju 1.1.