Diferencia entre revisiones de «Ejercicio de concurrencia de procesos»
(matíz sobre supuesto) |
(→Ejercicio 3) |
||
(No se muestran 8 ediciones intermedias de 5 usuarios) | |||
Línea 5: | Línea 5: | ||
<source lang="c"> | <source lang="c"> | ||
for (int i=0; i<2; i++) { /* instrucción 1 */ | for (int i=0; i<2; i++) { /* instrucción 1 */ | ||
− | + | lock(); /* instrucción 2 */ | |
funcion(); /* instrucción 3 */ | funcion(); /* instrucción 3 */ | ||
− | + | unlock(); /* instrucción 4 */ | |
} | } | ||
</source> | </source> | ||
Línea 13: | Línea 13: | ||
Suponga que: | Suponga que: | ||
− | * El | + | * El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución. |
* Se sabe que el hilo h1 es seleccionado en primer lugar por el planificador para ejecutarse. | * Se sabe que el hilo h1 es seleccionado en primer lugar por el planificador para ejecutarse. | ||
* La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución. | * La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución. | ||
Línea 19: | Línea 19: | ||
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución. | El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución. | ||
− | [[ | + | (''[[Solución de los ejercicios de concurrencia|Solución]]'') |
+ | |||
+ | == Ejercicio 2== | ||
+ | ''[Este ejercicio formó parte del Segundo Control de Evaluación Contínua en el curso 2010/11, del 11 de mayo de 2011]'' | ||
+ | |||
+ | Dados dos hilos h1 y h2 de un mismo proceso P cuyos códigos son los siguientes: | ||
+ | |||
+ | '''Código del hilo h1''' | ||
+ | <source lang="c"> | ||
+ | for(int i=0; i<2; i++){ /* #1 */ | ||
+ | while(cerrojo_p2); /* #2 */ | ||
+ | cerrojo_p1 = 1; /* #3 */ | ||
+ | f(); /* #4 */ | ||
+ | cerrojo_p1 = 0; /* #5 */ | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | '''Código del hilo h2''' | ||
+ | <source lang="c"> | ||
+ | for(int i=0; i<2; i++){ /* #1 */ | ||
+ | while(cerrojo_p1); /* #2 */ | ||
+ | cerrojo_p2 = 1; /* #3 */ | ||
+ | f(); /* #4 */ | ||
+ | cerrojo_p2 = 0; /* #5 */ | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | Suponga que: | ||
+ | |||
+ | * El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución. | ||
+ | * Se sabe que el hilo h1 es seleccionado en primer lugar por el planificador para ejecutarse. | ||
+ | * La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución. | ||
+ | |||
+ | Realice: | ||
+ | |||
+ | * El cronograma temporal que represente la ejecución del proceso P que dispone de dos hilos, h1 y h2. El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución. Considere que el valor de ambos cerrojos inicialmente es de cero. | ||
+ | |||
+ | * ¿Se produce algún problema derivado de la implementación de cerrojos que se usa en este ejercicio? Indique brevemente de qué se trata el problema. | ||
+ | |||
+ | (''[[Solución de los ejercicios de concurrencia#Ejercicio 2|Solución]]'') | ||
+ | |||
+ | == Ejercicio 3== | ||
+ | ''[Este ejercicio formó parte del Segundo Control de Evaluación Contínua en el curso 2010/11, del 11 de mayo de 2011]'' | ||
+ | |||
+ | Si el planificador empleara turno rotatorio con quantum de 2 unidades de ejecución, ¿qué sucedería? | ||
+ | |||
+ | (''[[Solución de los ejercicios de concurrencia#Ejercicio 3|Solución]]'') | ||
+ | |||
+ | |||
+ | 6.5[[Semáforos | Semáforos]] |
Revisión actual del 10:43 4 dic 2016
Ejercicio 1
Realice el cronograma temporal que represente la ejecución de un proceso P1 que dispone de dos hilos, h1 y h2. Ambos hilos sincronizan su ejecución mediante cerrojos y ejecutan el mismo código:
for (int i=0; i<2; i++) { /* instrucción 1 */
lock(); /* instrucción 2 */
funcion(); /* instrucción 3 */
unlock(); /* instrucción 4 */
}
Suponga que:
- El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.
- Se sabe que el hilo h1 es seleccionado en primer lugar por el planificador para ejecutarse.
- La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.
El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución.
(Solución)
Ejercicio 2
[Este ejercicio formó parte del Segundo Control de Evaluación Contínua en el curso 2010/11, del 11 de mayo de 2011]
Dados dos hilos h1 y h2 de un mismo proceso P cuyos códigos son los siguientes:
Código del hilo h1
for(int i=0; i<2; i++){ /* #1 */
while(cerrojo_p2); /* #2 */
cerrojo_p1 = 1; /* #3 */
f(); /* #4 */
cerrojo_p1 = 0; /* #5 */
}
Código del hilo h2
for(int i=0; i<2; i++){ /* #1 */
while(cerrojo_p1); /* #2 */
cerrojo_p2 = 1; /* #3 */
f(); /* #4 */
cerrojo_p2 = 0; /* #5 */
}
Suponga que:
- El planificador emplea turno rotatorio estricto con quantum de 3 unidades de ejecución.
- Se sabe que el hilo h1 es seleccionado en primer lugar por el planificador para ejecutarse.
- La ejecución de cada línea de código representado anteriormente supone una unidad de ejecución, por tanto, todas las instrucciones toman el mismo tiempo de ejecución.
Realice:
- El cronograma temporal que represente la ejecución del proceso P que dispone de dos hilos, h1 y h2. El cronograma deberá incluir qué instrucción se ejecuta en cada unidad de ejecución. Considere que el valor de ambos cerrojos inicialmente es de cero.
- ¿Se produce algún problema derivado de la implementación de cerrojos que se usa en este ejercicio? Indique brevemente de qué se trata el problema.
(Solución)
Ejercicio 3
[Este ejercicio formó parte del Segundo Control de Evaluación Contínua en el curso 2010/11, del 11 de mayo de 2011]
Si el planificador empleara turno rotatorio con quantum de 2 unidades de ejecución, ¿qué sucedería?
(Solución)
6.5 Semáforos