Herramientas de usuario

Herramientas del sitio


procesos

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
procesos [2016/11/17 09:02] – [Ejercicio] lmateuprocesos [2018/07/12 11:00] (actual) – [Procesos] lmateu
Línea 8: Línea 8:
   * En el padre, fork retorna el pid del hijo.   * En el padre, fork retorna el pid del hijo.
   * Para el hijo se crea un nuevo espacio de direcciones de memoria que parte inicialmente con una copia de toda la memoria del padre.  De ahí en adelante las modificaciones que haga el hijo en su memoria no se verán reflejadas en la memoria del padre, y viceversa.  Son espacios de direcciones independientes.   * Para el hijo se crea un nuevo espacio de direcciones de memoria que parte inicialmente con una copia de toda la memoria del padre.  De ahí en adelante las modificaciones que haga el hijo en su memoria no se verán reflejadas en la memoria del padre, y viceversa.  Son espacios de direcciones independientes.
-  * El hijo hereda una copia de todos los archivos abiertos por el padre.+  * El hijo hereda todos los archivos abiertos por el padre.  Los fds (file descriptors) del padre siguen siendo válidos en el hijo (y también en el padre).
   * El tiempo de ejecución del proceso hijo parte de 0.   * El tiempo de ejecución del proceso hijo parte de 0.
   * El hijo parte sin alarmas ni señales pendientes.   * El hijo parte sin alarmas ni señales pendientes.
Línea 106: Línea 106:
  
 en donde fds es un arreglo de tamaño 2. Después de ejecutar esta llamada, se obtienen 2 fds: en donde fds es un arreglo de tamaño 2. Después de ejecutar esta llamada, se obtienen 2 fds:
- 
  
         fds[0] permite leer         fds[0] permite leer
Línea 159: Línea 158:
  
 Observe que si se reemplazara la llamada de la función leer por read, podría funcionar en algunas plataformas, pero sería incorrecto.  La llamada al sistema read no siempre entregará la cantidad de bytes pedidos.  Puede entregar menos bytes cuando se piden más bytes que la capacidad del buffer que utiliza un pipe.  Por otra parte, se garantiza que write siempre escribirá la cantidad de bytes pedidos.  Si se escribe menos es porque ocurrió un error.  Yo hice el experimento en Linux y read siempre leyó la cantidad de bytes pedidos. Observe que si se reemplazara la llamada de la función leer por read, podría funcionar en algunas plataformas, pero sería incorrecto.  La llamada al sistema read no siempre entregará la cantidad de bytes pedidos.  Puede entregar menos bytes cuando se piden más bytes que la capacidad del buffer que utiliza un pipe.  Por otra parte, se garantiza que write siempre escribirá la cantidad de bytes pedidos.  Si se escribe menos es porque ocurrió un error.  Yo hice el experimento en Linux y read siempre leyó la cantidad de bytes pedidos.
 +
 +Cuando user fork nunca olvide:
 +  - Invocar exit para terminar el hijo
 +  - Invocar waitpid en el padre para enterrar al hijo
 +  - Padre e hijo usan espacios de direcciones independientes así es que el padre no verá los cambios que el hijo haya hecho en la memoria.  Use un pipe para que el hijo entregue sus resultados al padre.
  
 ==== Ejercicio ==== ==== Ejercicio ====
procesos.1479387759.txt.gz · Última modificación: 2016/11/17 09:02 por lmateu