En mi programa, necesito escribir un archivo en el espacio del kernel debido a alguna razón especial, aunque sé que no es recomendable.
Estoy usando vfs_write para escribir archivos en el espacio del kernel y funciona bien. En un caso, hay dos subprocesos que deben escribir en el mismo archivo .
Desde Internet, parece que la escritura en el espacio del usuario es segura para subprocesos, sin embargo, no puedo encontrar si vfs_write es seguro para subprocesos o no . ¿Alguien podría ayudar con esto?
Sí, vfs_write es seguro para subprocesos .
Lo único que debe importarle es que la posición de ese archivo, el puntero al que pasa a la función como argumento pos , no debe cambiarse durante la llamada a la función.
Puede, por ejemplo, usar una variable local como la posición del archivo, cargar la posición real antes de la llamada, pasarle un puntero como argumento de la función y actualizar la posición real después de la llamada. Esta técnica se utiliza en la implementación de syscall de write :
loff_t pos = file_pos_read(f.file); ret = vfs_write(f.file, buf, count, &pos); if (ret >= 0) file_pos_write(f.file, pos); Como puede ver, vfs_write no sincroniza las compensaciones en el archivo entre escritores simultáneos. Los posibles escenarios de uso útil de escritores simultáneos incluyen:
O_APPEND para el archivo. En ese caso, la posición en el archivo, pasada a vfs_write , se ignora y cada escritor agrega datos al archivo.O_APPEND para el archivo y permita que cada escritor simultáneo modifique solo su propia parte del archivo.