Quina diferència hi ha entre les buffers i les columnes caché a la sortida / proc / meminfo?


Resposta 1:

Les operacions d'E / S solen tenir latències elevades; el temps entre l'inici d'un procés d'E / S i la seva finalització pot ser de milions de cicles de rellotge del processador. La major part d’aquesta latència es deu al maquinari; per exemple, la informació no es pot llegir o escriure en un disc dur fins que la filatura del disc posa els sectors objectiu directament sota el cap de lectura / escriptura. (En el moment d'escriure aquest document, els discs durs de 7200 RPM són la norma, de manera que aquest procés pot trigar fins a aproximadament 8 mil·lisegons a completar-se.) Quan el dispositiu d'entrada / sortida és una interfície de xarxa, la latència sol ser major encara.

Això es alleuja al tenir un o més buffers d’entrada i sortida associats a cada dispositiu. Fins i tot si un programa només vol llegir un bloc de dades d’un dispositiu, el controlador pot obtenir aquest bloc més alguns dels blocs que el segueixen immediatament al disc, emmagatzemant-los en memòria cau, perquè els programes solen accedir al disc de forma seqüencial, el que significa que el el següent bloc que el programa sol·licitarà és probable el següent bloc físic del disc. Quan ho fa realment, el controlador, en lloc de realitzar una altra lectura física al disc, pot simplement tornar aquell bloc (que es troba en memòria cau) i, per tant, reduir la latència de manera espectacular. Quan es demana escriptura al disc, el controlador pot simplement caché les dades a la memòria fins que hagi acumulat prou blocs de dades, moment en què les escriu totes alhora; això es diu esborrar el buffer de sortida o sincronització. El conductor normalment proporcionarà un mitjà per demanar que les dades es torneu immediatament en lloc de la memòria cau. Això s’ha de fer, per exemple, abans de treure el dispositiu del sistema (en cas que es tracti d’un suport extraïble com un disc òptic) o quan el sistema s’apagui.

En un sistema operatiu multitasca, els dispositius de maquinari estan controlats pel nucli i és possible que les aplicacions espacials dels usuaris no hi puguin accedir directament. Per aquest motiu, per realitzar I / O cal realitzar trucades del sistema, que, per diversos motius, introdueixen despeses generals. Aquesta despesa generalment es troba en l'ordre de microsegons en lloc de mil·lisegons, per la qual cosa l'ús del buffer aquí no és crucial per a programes que realitzen una quantitat relativament petita d'E / S, però fa una gran diferència per a aplicacions vinculades a E / S (el que significa que ells Passen la major part del temps a esperar que les E / S finalitzin, en comptes de realitzar càlculs que s’acceleraran si la CPU fos més ràpida).

Així, gairebé tots els programes escrits en un llenguatge de programació d'alt nivell comptaran amb els seus propis buffers d'E / S (normalment un buffer d'entrada per a cada fitxer o dispositiu que el programa vol llegir, i un buffer de sortida per a cada qual vol escriure. ). Aquests buffers poden ser molt més grans que els mantinguts pels controladors de baix nivell, i existeixen en un nivell d'abstracció més alt, ja que estan associats a objectes de maneig de fitxers o descriptors de fitxers.