Divacky Roman napsal/wrote, On 02/26/07 11:53:
> select() vola kern_select() ktery vola selscan() ktery vola fo_poll(), coz je 
> operace
> definovana v struct fileops{} coz je fs-specific

        A take nasledne device-specific. Cimz je zrejme, ze nemuze byt soucasne 
hw-nezavisly, jak's predpokladal.

        Takze tady vidim nejake nedorozumeni v soucasnem tvrzeni, ze nevidis 
hardwarovou zavislost.

> navic si nemyslim, ze by bylo nutne aby hw nejak sdeloval pollu
> ze ma pripraveny data. proc by to nemohlo fungovat tak ze hw nacte data, 
> "nejak" (
> interrupt thread, PIO, jakkoliv) je supne do bufferu ktery je genericky pro 
> VFS

        To by nemohlo. "Nacist data" je operace, ktera uz muze mit konkretni 
fyzicky efekt na stav dotceneho zarizeni. ze jit o zarizeni typu 
"dotaz-odpoved", kdy je treba na ctena data v urcenem case nejak 
zareagovat (odpovedi, potvrzenim a pod.).

        A to uz jasne znamena, ze "skutecne cist" si muze dovolit jen takovy 
kod, ktery zna konkretni zarizeni natolik, aby se dokazal rozhodnout, 
jestli si takove cteni v dane chvili a kontextu muze dovolit.

> pokud v tedle analyze mam chybu tak ocenim kdyz mi dane napises kde, dik :)

        To je snadne ;-)

        Chyba je v tom, ze "cteni" povazujes za "nevinnou operaci", kterou lze 
provest kdykoliv, ale ono ji na obecnem hardware neni.

        Mimochodem, i kdyby to nahodou byla pravda, dostat byses s touto uvahou 
do vaznych potizi hned o okamzik pozdeji - jak bys obecne resil select() 
na zapis ?

>>      Konkretne hardware "tiskarna pres USB" rizena ovladacem "ulpt" nema 
>> poll() implementovany a pouziva genericky a prazdny nopoll().
> 
> no... nemuze todle byt rozdil mezi poll() a select(), ze poll() je fakt per
> character device a select() je jak popisuju vyse obecny? pac je fakt ze
> cdevsw obsahuje pointer na poll rutinu. neni mi ale jasne proc by se to takhle
> melo lisit.

        Ne, v tomhle mas pravdu - select() je jen jiny interface k poll(). Jde 
o dva pristupy k teze informaci - zda ma zarizeni data ke cteni (zda je 
pripraveno akceptovat data zapisem). A to je informace, kterou zarizeni 
bud' da nejak k dispozici, nebo neda. A kdyz neda, tak neni. V tomhle 
rozdil mezi select() a poll() nespocita. Kdyz je jedno, muze byt i 
druhe, pokdu ale zarizeni informaci neposkytuje, nebuze existoval realne 
funkcni poll(), ktery by ji zpristuponoval aplikaci a nemuze ani 
existovat skutecne funkcni select().

> pokud CUPS pouziva select() tak to nevysvetluje proc by chybejici
> poll() mel vadit

        Protoze chybejici poll() znamena chybejici select(). Tedy, abychom byli 
presni - aktualni implementace nopoll() ve vysledku znamena, ze select() 
okamzite oznami pripravenost zarizeni pro cteni - a nasledny, s duverou 
zavolany read(), ktery mel byt neblokujici (podle select()u urcite 
nejaka data jsou) se potvora zablokuje. Pokud ovsem cely system pocita s 
tim, ze soustava select()/read() je neblokujici muze zablokovani 
znamenat vazny problem pro celkovou funkcnost aplikace.

                                                Dan



-- 
Dan Lukes                                   SISAL MFF UK
AKA: [EMAIL PROTECTED], [EMAIL PROTECTED],[EMAIL PROTECTED]
-- 
FreeBSD mailing list (users-l@freebsd.cz)
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem