Prikazi cijelu temu 10.02.2011 15:25
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Lokacija:Tuzla


Predmet:Re: Programiranje pod Linuxom
Preemtivni multitasking. Iza ovog pojma krije se osobina zbog kojeg se nama kao korisnicima čini da procesor u isto vrijeme radi sa više zadataka. Međutim, CPU u jednom trenutku može raditi samo sa jednim zadatkom. Zbog toga on na sebe preuzima desetke ili čak stotine zadataka, i na svakom zadatku radi po nekoliko milisekundi, pa onda pređe na sljedeći. Zbog toga se nama čini da CPU sve to radi u isto vrijeme. Ovakva raspodjela vremena, odnosno prekidanje rada na jednom procesu i početak rada na drugom, naziva se preemtivni multitasking. Ali ne obavlja sav posao samo CPU. Iako program ili proces ne može zatražiti da baš on u danom trenutku koristi CPU, program može dati svoje vrijeme nekom drugom programu ili procesu. Zbog ovoga, programer može odgoditi izvršenje jednog dijela kôda da bi se izvršio kritičniji dio kôda. Ovo se radi pomoću funkcije sched_yield(). Koliko je nama kao korisniku preemtivni multitasking odličan, on isto toliko stvara probleme programeru. Naime, multitasking može programeru stvoriti tri vrste problema:
slijepe ulice (eng. deadlock) koje nastaju kada dva ili više procesa ne mogu nastaviti svoj rad jer oba ili svi čekaju da ovaj drugi nešto uradi. Ovo se može dogoditi zbog više razloga, na primjer kad server šalje programu zahtjev da ovaj nešto uradi prije nego što je obavio zadatak koji mu je program prethodno proslijedio ili kada nisko prioritetni programi nikada ne dođu na red za CPU jer ih stalno preplavljuju programi većeg prioriteta ili kada dva programa pokušavaju u isto vrijeme jedan drugom slati podatke, ali to ne mogu jer niti jedan ne može primiti poruku drugoga pošto mu se napunio bafer odlazećim podacima.
Prometne ulice (eng. livelock) nastaju kada program serveru konstantno šalje nove zadatke pa ovaj nikako ne može završiti sa radom tj. ne može očistiti svoj queue. Razlika od slijepih ulica je što je u gornjem slučaju queue procesa prazan, dok ovdje procesi imaju previše posla.
Trke; one nastaju kada jedan proces koji zavisi od drugoga počne obavljati taj posao prije nego što je drugi proces završio. Na primjer, proces za pisanje i čitanje podataka pristupaju fajlu i ovaj problem nastaje kada proces čitanja počne čitati fajl prije nego je proces pisanja završio sav upis u fajl.
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.