Ne. Sistemski poziv može biti (kod nekih OS-ova) implementiran kao softverski prekid, ali je to za ovu priču potpuno irelevantno.
Ne.
Kernel će resetovati fajl i zatim obavestiti aplikaciju. A obaveštavanje (inotify) je implementirano preko IOCTL interfejsa, što znači da bi servis morao da polluje neki device fajl u beskonačnoj petlji. Imao bi sve vreme aktivan proces sa visokim prioritetom koji zauzima 100% procesorskog vremena. Ako mi ne veruješ, probaj da napišeš.
Pa ne može proces sam da stopira drugi proces. Mora da traži od kernela da on to uradi. Ne poznaješ najosnovnije koncepte operativnih sistema.
fajl deskriptor i inicijalizuje fajl sistem drajver (izracunaj).
Nema šta da računam, sve će se desiti pre nego što servis i stigne na red da primi taj event. Inače, fajl sistem drajver se inicijalizuje prilikom podizanja sistema.
Evo ovde:
Jednostavno ti napravis novi super optimizovani interfejs koji ce da u par ciklusa da primi obavestenje od kernela , i stopira aplikaciju ili to zatrazi od kernela a kada stopira onda proverava zadata pravila(cak ne mora da se ceka ni povratna informacija da je aplikacija stopirana jer mora biti, pa se odmah moze pristupiti analizi pravila).Nemoj mi samo reci da to ne moze da se napravi/napise.
Nisi shvatio pitanje, pitanje se odnosilo na interfejs KERNELA a ne na interfejs servisa. No nije bitno.
odgovarajuci prekid posalje obavestenje gorepomenutom interfejsu pre nego sto pocne da otvara fajl deskriptor i drajver a i fajl deskriptor radi na manjem prioritetu od tog interfejsa.
Kako može kernel kod da radi na manjem prioritetu od userland programa? :o) Pošto vidim da se mučiš sa nekim osnovnim konceptima, predlažem da nabaviš neku knjigu tipa "Osnove operativnih sistema" i pročitaš je.
Ja sam previse umoran da bih jos pisao o ovome ali ne zelim bez nepobitnih argumenata da verujem
da se ne moze bez modifikacije kernela spreciti nezeljeni upis podataka (bilo kakvom metodom).
Ako mi nepobitno dokazes da to nije moguce(ne samo ovo sto sam ja napisao vec uopste bez diranja kernela) sve sto sam napisao smatracu za spam i FUD .
Evo, nepobitan dokaz, na kontra-primeru gde takav pristup ne može da funkcioniše. Recimo da neki proces, na jednoprocesorskoj mašini, hoće da resetuje neki fajl na fajl sistemu, ovako:
open ("testfile", O_TRUNC);
Kada kernel dobije sistemski poziv, sistem radi u kernel-modu. Kernel će resetovati fajl jer se to zahtevalo (O_TRUNC), što podrazumeva izmenu i-node-a tog fajla. Zatim će proveriti u okviru tog istog i-node-a listu procesa koji treba da prime obaveštenje o modifikaciji fajla. Tek kada se ponovo pređe u user-mode, onda može da dođe na red tvoj servis (i to pod uslovom da mu je prioritet dovoljno visok, i da je baš on prvi sledeći proces u run queue-u schedulera) i da primi preko inotify interfejsa od kernela informaciju da je fajl izmenjen. Međutim u tom trenutku podataka više nema, tako da je svaki pokušaj da se zaustavi proces koji je uputio sistemski poziv u startu zakasnio. U najboljem slučaju tvoj servis će znati da je fajl izmenjen pre nego za to što sazna proces koji ga je izmenio, ali to je opet prekasno.
1) Mešaš koncepte -- to što je arhitektura kernela monolitna ne znači da on ne može da učitava module u run-time-u.
2) A pored toga, i FreeBSD i NetBSD imaju podršku za kernel module, tako da ni to nije tačno.
Those who do not understand Unix are condemned to reinvent it, poorly.
Upali lampicu — koristi Jabber!








Re: Kako se gasi servis ?