Practica 1 - Procesos Windows y Linux PDF
Practica 1 - Procesos Windows y Linux PDF
Practica 1 - Procesos Windows y Linux PDF
SISTEMAS OPERATIVOS
PRACTICA 1. PROCESOS
OBJETIVOS:
➢ Monitorizar los procesos existentes en Windows y en una máquina Linux.
➢ Comprender la información mostrada por mostrada por el Administrador de tareas
acerca de los procesos y aplicaciones que se encuentran en ejecución en el sistema
en un momento dado.
Otro campo que puede visualizarse mediante el Administrador de tareas es el PID. Se trata
de un número entero que identifica al proceso dentro del sistema. A cada proceso se le
asigna un número diferente. PID es el acrónimo de Process Identifier.
PID : ________________
Pregunta 2
¿Qué conclusión sacas del porcentaje de CPU utilizado por este proceso? Escríbela a
continuación.
Otros procesos críticos del sistema son el CSRSS y WINLOGON. El csrss.exe es el Client
Server Runtime SubSystem ( Proceso en tiempo de ejecución del cliente-servidor),
Cuando una aplicación hace una llamada al API Win32, este usa csrss.exe, el cual la
comunica con el núcleo del sistema operativo para ejecutar el API. Finalmente,
WINLOGON es el que controla las sesiones de usuario. Así por ejemplo, este proceso
controla la ventana en la que introducimos nuestro nombre de usuario y clave para
comenzar una sesión en el sistema.
Vamos a ver ahora otro proceso fundamental que es el explorer.exe. Este proceso
controla la interfaz gráfica con el usuario, proporcionando así una de las funciones
principales del sistema operativo Windows. Vamos a eliminar este proceso a ver que
ocurre.
✓ Pulsa con el botón derecho sobre el proceso explorer.exe. Elige la opción Terminar
proceso. ¿Qué ocurre? Observarás que desaparecen todos los iconos del Escritorio, así
como la Barra de tareas y el menú Inicio. Al eliminar este proceso hemos cortado
prácticamente toda posibilidad de comunicación con el usuario. Una opción para
continuar trabajando con el sistema es eliminar la presente sesión de usuario y poner
en marcha una nueva sesión. Esto podemos hacerlo sin problemas porque quien
controla las sesiones de usuario es el proceso WINLOGON, que sigue activo. Este
proceso se activa con la pulsación de Ctrl-Alt-Supr.
✓ Pulsa Ctrl-Alt-Supr. WINLOGON se activa mostrando la ventana Seguridad de
Windows, que es la que usas para lanzar el Administrador de tareas, pero que también
te permite cerrar la sesión de usuario. Elige Cerrar sesión. Ahora comienza como
siempre una nueva sesión. Observa que todo vuelve a estar como estaba. WINLOGON
ha dirigido todo este proceso. Al crearse una nueva sesión de usuario se ha cargado de
nuevo el explorer.exe y por tanto se ha habilitado una nueva interfaz con el usuario
para atender a nuestras peticiones.
✓ Abre el menú Inicio, Todos los programas, Accesorios. Entonces observarás la opción
Bloc de notas. Pincha sobre ella con el botón derecho y elige la opción Propiedades.
En la ficha General observas en el campo Tipo de archivo que el elemento del menú
Bloc de notas es en realidad un acceso directo. En la ficha Acceso directo puedes ver el
programa al que hace referencia dicho acceso. Se trata de notepad.exe. Es decir, este
es el programa (imagen binaria) que se cargará en memoria y se ejecutará cuando
pulsemos sobre la opción Bloc de notas.
Pregunta 3
Anota a continuación el PID del proceso notepad.exe que acabas de poner en ejecución.
Pregunta 4
Vuelve a ejecutar el Bloc de notas. Observarás que un nuevo proceso notepad.exe ha sido
puesto en ejecución. Anota el PID de este nuevo proceso.
Este último experimento habrá servido para dejar bien clara la diferencia entre programa
y proceso.
Pregunta 5
Abrir ejecutar y escribe MSCONFIG damos <<Enter>> luego vamos a la pestaña Arranque y
selecciona Opciones Avanzadas – Numero de procesadores, observamos si está activo, si
aparecen 2 seleccionamos 1, le damos click en Aceptar.
Ahora realizaremos una serie de experimentos con esta configuración del sistema y luego
dejaremos las cosas como estaban inicialmente. Para hacer las pruebas de planificación
vamos a realizar dos programas. Prog1.c, prog2.c.
Empezaremos las pruebas con prog1.exe. El programa ejecuta dos bucles FOR anidados.
El bucle interior no ejecuta ninguna sentencia. El bucle exterior sólo ejecuta el bucle
interior. Cada bucle incrementa una variable de tipo entero desde 0 hasta 200000000.
Esto asegura que el programa tarda mucho tiempo en ejecutarse.
Ahora vas a observar la ejecución de este programa con el Administrador de tareas.
Abre el Administrador de tareas. Observa que en este momento la CPU está siendo
ocupada, casi al cien por cien, por el Proceso inactivo. Ejecuta prog1.exe. Observarás que
se abre una ventana en la que no hay ningún tipo de actividad. Esto es debido a que el
proceso no realiza ninguna operación de E/S. ¿Qué ocurre con el uso de la CPU? Indica a
continuación el porcentaje de CPU que utilizan en este momento el Proceso inactivo y
prog1-1.exe.
Pregunta 5
Abre el Administrador de tareas. Pulsa sobre Nombre de imagen para ordenar los
procesos por nombre. Ahora vas a poner varias imágenes del programa prog1.exe en
ejecución. A continuación anotarás el porcentaje de CPU que se asigna a cada proceso
correspondiente a este programa cuando hay una, dos, tres y cuatro imágenes de él en
ejecución. Es posible que tras lanzar cada imagen tengas que esperar un poco de tiempo
hasta que se estabilice la planificación.
Pregunta 6
Una imagen en ejecución. % de CPU asociado a la imagen:
Termina la ejecución de todos estos procesos utilizando el botón derecho del ratón y la
opción Terminar proceso.
Pregunta 7
• ¿Qué mecanismo utiliza el sistema operativo para que un programa como prog1.exe
no monopolice totalmente la CPU cuando se ejecuta?
• El programa Prog2.exe la parte de este programa que usa intensivamente la CPU está
formada por dos bucles for anidados. El bucle interior incrementa la variable j de 0 a
200000000. El bucle exterior incrementa la variable i hasta que ésta iguale a la variable
iter. Este programa hace también E/S, ya que el usuario debe introducir por consola el
valor de la variable iter. La E/S es realizada por las funciones printf() y scanf_s(), que
pertenecen a la librería estándar del lenguaje C. printf() envía a la consola la cadena
“Numero de iteraciones: ” y scanf_s() recoge el número que el usuario introduce por
teclado, almacenándolo en la variable iter. La clave está precisamente en scanf_s().
Cuando esta función se ejecuta, el proceso queda bloqueado esperando la entrada de
datos del usuario. Mientras esto ocurre el proceso no consume CPU.
Tanto los bucles for anidados como las funciones de E/S se encuentran dentro de un bucle
while, que se ejecuta infinitamente, por lo que podremos repetir el proceso de E/S y
computación indefinidamente. Mientras se produce la espera en la función scanf_s() se
puede pulsar Ctrl-C, lo que rompe la ejecución del programa.
Pregunta 8
Pregunta 9
mkdir practica2
$ cd practica2
I. PROCESO POSIX
El siguiente código, muestra las acciones internas de la llamada fork:
2. Ejecute el programa forkprog en segundo plano (o background). Para ello, se debe añadir al
nombre del programa el carácter &(ampersand)
$ ./forkprog &
Preguntas:
10. a) Anote el valor mostrado por el Shell inmediatamente después de lanzar al proceso en
segundo plano e indique que representa dicho valor.
b) ¿Cuáles son los PID de los procesos padre e hijo?
c) ¿Qué tamaño de memoria ocupan los procesos padre e hijo?
d) ¿Qué realiza la función sleep? ¿Qué proceso concluye antes su ejecución?
e) ¿Qué ocurre cuando la llamada al sistema fork devuelve un valor negativo?
f) ¿Cuál es la primera instrucción que ejecuta el proceso hijo?
g) Modifique el código del programa para asegurar que el proceso padre imprime su mensaje de
presentación (“Soy el proceso…”) antes de que el hijo imprima el suyo.
11 a) ¿Las variables enteras i y j del proceso padre son las mismas que las del proceso hijo?
b)¿Qué cambios deberían realizarse en el código para que ambos procesos partieran de igual valor
de la variable entera i, y además un proceso realizase su cuenta de uno en uno y el otro proceso
de dos en dos? Editar el programa, compilarlo y comprobar su ejecución.
DATOS Y MEMORIA
Hemos dicho que el proceso hijo es una copia exacta de su padre, lo que implica ejecutar un
código igual y tener una estructura en memoria igual. En este programa vamos a crear tres
procesos y a comprobar algunas cosas sobre la memoria.
12. Compila, ejecuta, y analiza los resultados que obtengas, explica que sucede.
La llamada exec produce la sustitución del programa invocador por el nuevo programa invocado.
Mientras fork crea nuevos procesos, exec sustituye la imagen de memoria del proceso por otra
nueva(sustituye todos los elementos del proceso: código del programa, datos, pila, montículo).
De las 6 posibles llamadas tipo exec se usará en este apartado de la práctica la llamada execv, cuya
sintaxis es :
Int execv (const char *filename, char *const argv [ ] );
El seguimiento de ejecución del proceso, mediante la orden ps del sistema usada antes y después
de la llamada execv, permite comprobar cómo se efectúa la sustitución de la imagen de memoria.
El nuevo programa activado mantiene el mismo PID, identificador de proceso, asi como otras
propiedades asociadas al proceso, sin embargo, el tamaño de memoria de la imagen del proceso
cambia dado que el programa en ejecución es diferente.
Ejecute el programa en segundo plano (o background). Para ello, se debe añadir al nombre del
programa el carácter &(ampersand)
Para observar cuánta memoria ocupa cada programa, realice un “ps –l” una vez el proceso ha
escrito en pantalla el mensaje correspondiente (hay 10 segundos de plazo antes de realizar el
execv en prog1.c y antes de terminar en prog2.c).
14 a) Escriba el contenido de los elementos del vector argv que recibe prog1 y los que recibe
prog2.
b) ¿Qué PID tiene el proceso que ejecuta prog1.c? ¿Y el de prog2.c?
c) ¿Qué tamaño de memoria ocupa el proceso, según ejecute prog1 o prog2?
d) Modifique el programa prog1.c para introducir código inalcanzable (p.e printf (“Hola \n”);) y
compruebe que efectivamente no se alcanza. ¿La última línea de prog1.c (la que dice exit(0); ),
puede llegar a ejecutarse alguna vez?
15. Modifique el código del programa espe1.c para que el proceso padre imprima el mensaje de
finalización de su ejecución 10 segundos más tarde que el proceso hijo.
III. CONOCIMIENTO
16. Encuentra un comando que presente todos los procesos ejecutándose actualmente en
el sistema según relación padre-hijo.
18. Abre una terminal, desde ahí arranca Firefox . Con la ayuda del comando ps, investiga
el proceso de creación del navegador, iniciando todos sus ancestros.
19. Fíjate en el resto de procesos y encuentra alguno que sea padre de varios procesos.
Escribe que proceso es, y si puedes, que función tiene. Identifica también sus ancestros.
20. Después de todas estas pruebas, describe con tus propias palabras qué es un proceso,
¿Ha cambiado en algo tu percepción respecto a lo que habías visto en teoría? ¿Qué te ha
aportado? ¿Qué dudas te quedan todavía?