Portál AbcLinuxu, 1. května 2025 00:19

Co je scatter/gather

Scatter/Gather (česky: rozsyp/sesbírej) je způsob provádění vstupních/výstupních operací (I/O) do/z vektoru nesouvislých paměťových míst.

Vstupní nebo výstupní operace (Input/Outup operation - zkráceně často jen I/O), například zápis z paměti procesu na disk, typicky pracuje s daty v paměti na jednom místě určeném zaprvé jeho pořáteční adresou a zadruhé jeho velikostí. Toto paměťové místo se často nazývá buffer. Tedy například jedno volání funkce write(fd, 0x08054000, 1024) zapíše 1024 bytů z bufferu ležícího na adrese 0x08054000 do daného souboru (fd). Pokud data určená k zápisu nejsou připravena na jednom místě, například hlavičky souboru jsou v bufferu1 zatímco data v bufferu2, musíme buď write() volat několikrát, nebo data nejdřív překopírovat na jedno místo (např. buffer3) a pak požádat write() aby zapsal tento výsledný buffer.

Jednodušší v tomto případě však je použití scatter/gather verze funkce write() jménem writev(). Jejími parametry už není přímo adresa a velikost jednoho bufferu, ale seznam všech bufferů určených k zápisu, resp jejich adres a velikostí a počet těchto bufferů. Funkce writev() pak projde tento seznam a jeden buffer po druhém zapíše do daného souboru. Podobně funguje scatter/gather verze funkce read() zvaná readv().

Funkce readv() tedy data po paměti rozsypává (scatter), zatímco writev() je sbírá (gather).

Dokument vytvořil: Michal Ludvig, 3.2.2009 06:28 | Zobrazeno: 2112×

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.