On Mon, Feb 11, 2008 at 06:43:59PM +0100, Dan Lukes wrote: > Radim Kolar napsal/wrote, On 02/11/08 18:18: > >> > Na rozhranu user->kernel pak neni nutne strukturu kopirovat a > >> > usetri se > >> > jeden copyin() > > > proc se to musi kopirovat? proc nestaci aby kernel pouzival pointer > > ukazujici do userspace, pristupovat tam muze a behem vykonavani > > syscallu data stejne uzivatelsky program nemuze zmenit. > > Proc se musi kopirovat je mozna spravna otazka, ale at uz je na ni > odpoved jakakoliv, nic to nemeni na faktu, ze se aktualne kopiruje. > > Jedna potiz muze byt, ze tech userspacu je tolik, kolik je procesu. > Onen pointer tedy nema bezkontextovy vyznam. Kernelspace je jen jeden. > Pritom zruvna sendfile() je takova spis dlouhotrvajici funkce, behem > ktere nebude bolajici proces bezet. Teoreticky by se samozrejme ta data > kopirovat nemusela - proste by se ta user-stranka namapovala do kernel > prostoru. Na to ale aktualne neexistuji mechanismy. A u malych dat neni > ani jiste, jestli by to bylo rychlejsi.
dane, proboha.. ja vim ze ti to tvoje grafomanie nedovoluje ale kdyz necemu nerozumis tak se k tomu nevyjadruj 1) ten copyin/copyout tam je samozrejme proto, protoze userland nam muze dat libovolnou adresu a kdyby nastal nejaky fault tak jde kernel do hajzlu (tj. kdyby tam nekdo poslal NULL a my bysme udelali *ptr = 1 tak panicujeme) ten copyin/copyout ma remapovany fault handler na "return EFAULT" 2) dane, uvedom si ze se bavime o kopirovani 8 bajtu... (16 ti na 64bit platformach) to nema jiny efekt nez poniceni cache 3) userspace stranky se do kernelu samozrejme mapovat DAJI, zrovna ten sendfile to pouziva (man sf_buf) a mimochodem tohle je DALEKO rychlejsi na amd64 nez na i386. asi tak... roman -- FreeBSD mailing list ([email protected]) http://www.freebsd.cz/listserv/listinfo/users-l
