¿Tiene 3 niveles de almacenamiento en búfer o 2 niveles de almacenamiento en búfer cuando se usa la biblioteca stdio?

¿Tiene 3 niveles de almacenamiento en búfer o 2 niveles de almacenamiento en búfer cuando se usa la biblioteca stdio?

DeLa interfaz de programación de Linux:
(He leído las secciones relacionadas. Pegué este diagrama de resumen solo como ilustración). ingrese la descripción de la imagen aquí

Lo sé para IO directa que utiliza ready writellamadas al sistema. Hay 2 niveles de almacenamiento en búfer. read/write buffer+ kernel buffer.

Cuando se utilizan stdiollamadas a la biblioteca, que se crean sobre las llamadas IO directas del sistema, es

  1. stdio buffer+ read/write buffer+ kernel buffer, 3 niveles de almacenamiento en búfer,

o

  1. stdioy write/readcompartir el mismo buffer, 2 niveles de buffering

stdio calls <---> user buffer<-----> read/write+kernel buffer

?

(Creo que son 2 niveles de almacenamiento en búfer, pero quiero estar seguro).

Respuesta1

En el caso común hay dos niveles. La biblioteca stdio asigna un búfer en el espacio de usuario, y las llamadas a puts/printf/fprintf, etc. colocan caracteres en este búfer. En algún momento (por ejemplo, el búfer está lleno o se escribe una nueva línea y la secuencia está en modo de búfer de línea), la biblioteca stdio llama writepara pedirle al núcleo que escriba el búfer. El kernel generalmente copiará el búfer en un búfer del kernel, iniciará lo que sea necesario para llevar los datos al destino y regresar. El espacio de usuario entonces es libre de usar el búfer de espacio de usuario como quiera.

Es posible (pero inusual) tener diferentes implementaciones de stdio que hagan esto de manera diferente.fiotiene una capa de compatibilidad stdio. Se han propuesto varios esquemas para zero copyetc. El punto es que stdiote dice cuál es el efecto, no cómo se hace.

información relacionada