son sistema seguridad modo llamadas llamada las funciona como linux linux-kernel system-calls splice

linux - seguridad - llamada al sistema exec



Llamada al sistema de empalme, ¿qué se pasa a la tubería? ¿Datos o información de paradero? (1)

refiérase aquí

Un empalme () es un mecanismo de llamada al sistema para hacer E / S de un archivo a otro archivo en el espacio del kernel sin realizar copias desde / hacia el espacio del usuario. Es una forma de mejorar el rendimiento de E / S. La llamada al sistema de empalme evita toda copia de datos del espacio de usuario al espacio del kernel y viceversa. Se lee desde el desplazamiento especificado desde el archivo de entrada y escribe en una tubería en el espacio del kernel. No hay copia de datos en el espacio del usuario. Luego se puede invocar para escribir los datos del conducto en el archivo de salida con el desplazamiento especificado / actual.

splice () funciona utilizando el mecanismo de búfer de tubería para abrir un descriptor de archivo para una fuente de datos y otro para un receptor de datos y luego mediante el empalme () puede unir los dos. En otras palabras, el trabajo de empalme () en un búfer de kernel sobre el que el usuario tiene control y mueve datos hacia / desde el búfer desde / hacia un descriptor de archivo arbitrario. Especificar el desplazamiento con tubería es un error como de costumbre. Si no se especifica ningún desplazamiento con un descriptor de archivo de entrada / salida, se supondrá que el desplazamiento actual es el desplazamiento especificado. Actualmente, uno de los descriptores de archivos debe ser un conducto, de lo contrario es un error.

Sé que con un empalme, todos podemos permanecer en el kernel. Pero no estoy seguro de si son los datos o la información de paradero los que pasan a la tubería.

EDIT 1: Gracias @vinayak, ahora sé que en realidad hay una copia de datos hacia y desde el buffer de tuberías. Pero luego, me pregunto por qué no podemos pasar información sobre el paradero y la longitud a la tubería.

  • Dentro de un solo proceso, el espacio de direcciones es el mismo
  • Entre procesos de diferencia, también funciona si el buffer de tubería está mapeado linealmente. Si no, podemos usar la dirección de DMA.