Predmet:Re: Programiranje pod Linuxom
Nije bitno ako kôd ne razumijete, ali obratite pažnju na tri stvari:
child = fork(); - ovo kreira novi child proces
Kôd između if (child == 0) i else
izvršava se unutar child procesa, pri čemu child koristi naredbu exec() da bi pokrenuo program /bin/ls, odnosno da izlista sadržaj direktorija
waitpid() se izvršava od strane procesa roditelja (eng. parent) pri čemu vidimo da parent proces čeka da se child prekine da bi on nastavio sa radom.
Ako imate insaliran GCC kompajler (a trebali biste imati), onda kompajlirajte i pokrenite ovaj program komandom
$ gcc forkexec.c -o forkexec
$ ./forkexec
unutar parent procesa
unutar child procesa
neki-listing
Sljedeća stavka je zaštita procesora i memorije. Ona objašnjava kako je Linux operativni sistem u potpunosti odvojen od svih aplikacija. Jedino kernel radi u privilegiranom kernel modu poznatom kao ring 0, dok korisnički programi rade u korisničkom prostoru koji je u potpunosti van privilegiranog moda. Razlika je očigledna: kernel mod ima nekontrolirani pristup procesoru, RAM memoriji, periferijama. Ovdje postoji i jedan proces čuvar koji se zove syscall. Kada podaci idu od korisnika prema kernelu, on ih detaljno ispita prije nego što ih propusti. Zbog ovoga čuvara u Linux svijetu je skoro pa nepoznat pojam da korisnik sruši kernel, što je bio čest slučaj u prijašnjim verzijama Windows-a (blue screen of death). Pored ove podjele na modove, kernel i korisnički programi čak imaju i svoje vlastito područje u memoriji. U Linuxu postoji područje virtualne memorije od 4GB (na 32bitnim arhitekturama). Od ovoga, 1GB koristi kernel, dok ostalo koriste korisnički programi. Naravno, korisnički programi ne mogu direktno pristupiti kernelovom dijelu ove memorije. Do sada se sigurno već pitate kakve ovo ima veze sa programiranjem. Upravo zbog ove gore-opisane osobine, programeri Linux aplikacija mogu bez bojazni pisati svoj program jer znaju da i ako se program sruši, on neće i ne može srušiti sistem. Također, i kernel može vršiti određene radnje koje bi se inače morale izvršavati u korisničkom modu bez potrebe za dodatnim programiranjem. Na primjer, ako pravite HTTP server, u kernelu syscall interfejs omogućava da on komunicira sa HTTP serverom bez potrebe da koristite novi ili drugačiji interfejs za programiranje. Loša strana ovakve podjele je što sistemski administrator mora svaki put izričito dozvoliti ako korisnik treba pristupiti nekim dijelovima kernel moda, poput periferija i sličnoga.
Podrska samo putem foruma, jer samo tako i ostali imaju koristi od toga.