2009-02-06 9 views
6

Esto es para una tarea en la que estoy trabajando, y NO, no estoy buscando simplemente que ME DEN la respuesta. Solo necesito que alguien me señale en la dirección correcta, tal vez con una o dos líneas de código de muestra.Linux & C: ¿Cómo establecer la prioridad de lectura de archivos en el programa multiproceso?

Necesito averiguar cómo establecer la prioridad de una operación de lectura de archivos desde mi programa. Hasta el punto:

  • proceso de servidor recibe un mensaje y genera un hijo a manejarlo
  • niño trata de abrir el nombre de archivo del mensaje y empieza a cargar el contenido del archivo en la cola de mensajes
  • puede haber varios niños que se ejecutan al mismo tiempo, y el mensaje inicial contiene una prioridad por lo que algunos mensajes pueden obtener más acceso al dispositivo

la única manera que puedo pensar para hacer esto (en este momento, de todos modos) sería la de incrementar un contador cada vez que creo un mensaje y hago algo ng como sched_yield después de que el contador alcanza un valor determinado para la prioridad asignada de ese proceso. Es muy probable que sea un enfoque horrible, horrible, pero es todo lo que puedo pensar en este momento. La tarea es más sobre las colas de mensajes que cualquier otra cosa, pero todavía tenemos que tener prioridad de transferencia de datos.

Cualquier ayuda/orientación se aprecia :)

Respuesta

1

¿Está seguro de su asignación está hablando de archivos y no las colas de mensajes del sistema V?

Lea las páginas del manual para:

msgctl(2), msgget(2), msgrcv(2), msgsnd(2), capabilities(7), 
    mq_overview(7), svipc(7) 

Aunque creo que se puede utilizar un archivo como una clave para crear una cola de mensajes, de forma que varios procesos tienen una manera de encontrarse a través de la cola de mensajes, una Sys La cola de mensajes V no es un archivo.

Solo me pregunto porque mencionas "colas de mensajes" específicamente, y hablas de "prioridades", que posiblemente se puedan asignar al campo msgtyp de, por ejemplo. msgsnd y msgrcv, aunque es difícil decir con qué información has dado de qué se trata realmente la tarea.

+0

Ya tengo el servidor recibiendo mensajes de varios clientes, por lo que msgget/snd/rcv y ftok no son un problema para mí. El reto al que me enfrento es cómo tomar un valor de prioridad de mi mensaje y aplicarlo, ya sea en la velocidad a la que los mensajes dejan cada hijo del servidor, o en la velocidad en que se leen los datos – David

+0

... desde el disco. – David

2

Hasta hace poco, no había priorización de IO en Linux. Ahora está ionice. Pero dudo que tengas la intención de usarlo en tu tarea.

6

Haga que el conjunto de procesos secundarios comparta un semáforo. Una vez que un niño adquiere el semáforo, puede leer un número predefinido de bytes del recurso y devolverlo al cliente. El número de bytes leídos se puede relacionar con la prioridad de la solicitud. Una vez que el proceso ha leído, el número predefinido de bytes libera el semáforo.

+0

Eso es en realidad ... ¡no está mal! ¡Gracias! Y por su nombre de usuario, supongo que usted conoce al instructor que me dio esta tarea? – David

+0

+1 por ser un commie –

+0

Y estoy en clase justo al lado del laboratorio de opciones ... :-P – TofuBeer

Cuestiones relacionadas