Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pra1 Sol
Pra1 Sol
Presentación
Esta práctica plantea una serie de actividades con el objetivo que el estudiante
pueda aplicar sobre un sistema UNIX algunos de los conceptos introducidos en
los primeros módulos de la asignatura.
El estudiante deberá realizar diversos experimentos y responder a las preguntas
planteadas. También deberá escribir un programa en lenguaje C.
La práctica puede desarrollarse sobre cualquier sistema Unix (la UOC os facilita
la distribución Ubuntu 14.04). Se aconseja que mientras desarrolléis los experi-
mentos no haya otros usuarios trabajando en el sistema porque el resultado de
algunos experimentos puede depender de la carga del sistema.
Cada pregunta sugiere una posible temporización para poder acabar la práctica
antes de la fecha lı́mite ası́ como el peso de la pregunta en la evaluación final.
El peso de esta práctica sobre la nota final de prácticas es del 40 %.
Competencias
Transversales:
Capacidad para adaptarse a las tecnologı́as y a los futuros entornos ac-
tualizando las competencias profesionales
Especı́ficas:
Capacidad de analizar un problema en el nivel de abstracción adecuado a
cada situación y aplicar las habilidades y conocimientos adquiridos para
abordarlo y resolverlo
Capacidad de diseñar y construir aplicaciones informáticas mediante técni-
cas de desarrollo, integración y reutilización
Enunciado
Para realizar esta práctica os facilitamos el fichero pr1so.zip que contiene
ficheros fuente. Descompactadlo con la orden unzip pr1so.zip. Para compilar,
por ejemplo prog.c, debéis ejecutar la orden gcc -o prog prog.c
1. Módulo 2 [ Del 2 al 14 d’octubre ] (25 % = 5 % + 5 % + 5 % + 10 %)
Os facilitamos los programas count1.c, count2.c y el shellscript launch.sh
(no es necesario que estudiéis cómo están implementados).
count1.c ejecuta un bucle infinito donde cada iteración incrementa
un contador (inicializado a 0). Cuando count1.c recibe la notifica-
ción ası́ncrona que indica que ha de finalizar, imprime el valor del
contador y finaliza. count1 emula un proceso de cálculo intesivo.
count2.c ejecuta un bucle infinito donde cada iteración incrementa
un contador (inicializado a 0) y espera un milisegundo (bloqueándo-
se). Cuando count2.c recibe la notificación ası́ncrona que indica que
1
75.566 · Sistemas Operativos · PRA1 · 20201 · Grado en Ingenierı́a informática
2
75.566 · Sistemas Operativos · PRA1 · 20201 · Grado en Ingenierı́a informática
1.1.2. De forma análoga a 1.1.1., dibujad el grafo que muestre los cam-
bios de estado que puede experimentar un proceso que ejecute
count2.
3
75.566 · Sistemas Operativos · PRA1 · 20201 · Grado en Ingenierı́a informática
1.3.2. ¿Siguen la misma tendencia los números que escriben los procesos
count2 (los N últimos números)? Justificad la respuesta.
4
75.566 · Sistemas Operativos · PRA1 · 20201 · Grado en Ingenierı́a informática
5
75.566 · Sistemas Operativos · PRA1 · 20201 · Grado en Ingenierı́a informática
2.2. Escribid un programa que lea strings del teclado hasta detectar que
6
75.566 · Sistemas Operativos · PRA1 · 20201 · Grado en Ingenierı́a informática
/∗ i n s e r t s a s t r i n g i n t o t h e l i s t ∗/
struct e l e m e n t ∗ i n s e r t ( char ∗ i n p u t , struct e l e m e n t ∗ l i s t )
{
struct e l e m e n t ∗tmp ;
tmp = m a l l o c ( s i z e o f ( struct e l e m e n t ) ) ;
i f ( tmp == NULL) p a n i c ( ”memory” ) ;
7
75.566 · Sistemas Operativos · PRA1 · 20201 · Grado en Ingenierı́a informática
tmp−>i n p u t = m a l l o c ( s t r l e n ( i n p u t ) + 1 ) ;
i f ( tmp−>i n p u t == NULL) p a n i c ( ”memory” ) ;
s p r i n t f ( tmp−>i n p u t , ” %s ” , i n p u t ) ;
tmp−>n e x t = l i s t ;
return ( tmp ) ;
}
/∗ D e t e c t s i f a s t r i n g i s a l r e a d y p r e s e n t i n t h e l i s t ∗/
i n t r e p e a t e d ( char ∗ i n p u t , struct e l e m e n t ∗ l i s t )
{
struct e l e m e n t ∗tmp = l i s t ;
int idx = 1 ;
/∗ Free a l l o c a t e d memory ∗/
void f r e e l i s t ( struct e l e m e n t ∗ l i s t )
{
struct e l e m e n t ∗tmp = l i s t , ∗ aux ;
8
75.566 · Sistemas Operativos · PRA1 · 20201 · Grado en Ingenierı́a informática
3.3. Substituid en args.c las dos apariciones de stderr por stdout. Com-
pilad el programa y volved a ejecutar el tercer ejemplo. Explicad a
qué se debe el nuevo comportamiento.
Recursos
Módulos 1, 2, 3 y 4 de la asignatura.
El aula ”Laboratorio de Sistemas Operativos” (dudas de Unix, C,...).
Documento ”Intérprete de comandos UNIX” (disponible en el aula) o cual-
quier otro manual similar.
Cualquier manual básico de lenguaje C.
9
75.566 · Sistemas Operativos · PRA1 · 20201 · Grado en Ingenierı́a informática
10