Tiskarna HP Business InkJet 1100
Dan Lukes
dan at obluda.cz
Mon Feb 26 12:30:29 CET 2007
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: dan at obluda.cz, dan at freebsd.cz,dan at kolej.mff.cuni.cz
More information about the Users-l
mailing list