Practica 1 - Procesos Windows y Linux PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 7

UNIVERSIDAD DEL VALLE SEDE YUMBO

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.

PRIMERA PARTE (WINDOWS) – 40%


1.1 Procesos de sistema
Durante el proceso de arranque del computador, el sistema operativo, una vez cargado,
pone en ejecución un conjunto de procesos que realizan funciones vitales dentro del
sistema. Estos procesos reciben el nombre de procesos de sistema. Vamos a observar
estos procesos con el Administrador de tareas.

✓ Asegúrate de que no tienes ninguna aplicación abierta en el sistema. Ahora abre el


Administrador de tareas y elige la ficha Procesos. En este momento observarás todos
los procesos que se están ejecutando actualmente en el sistema.
Como en este momento no tienes ninguna aplicación abierta, todos los procesos que
observas son procesos de sistema.
Para cada proceso se muestran varios campos de información. Lo normal es que los
campos mostrados sean los siguientes:
· Nombre de imagen: Es el nombre del programa ejecutable desde el que se cargó el
proceso.
· Nombre de usuario: Es la cuenta de usuario utilizada por el proceso en su ejecución.
Dicha cuenta establece el entorno de seguridad del proceso.
· CPU: Indica el porcentaje de CPU consumida por un proceso.
· Uso de memoria: Es la cantidad de memoria utilizada por el proceso.

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.

✓ Si el Administrador de tareas no muestra el PID, reconfigúralo para que lo muestre


utilizando la opción Seleccionar columnas de su menú Ver.

Ahora vamos a reconocer algunos de estos procesos de sistema. Comenzaremos por el


Proceso inactivo del sistema. Este proceso es el que se ejecuta cuando la CPU no tiene
trabajo útil que llevar a cabo.

Indica a continuación el identificador de este proceso y el porcentaje de CPU utilizado por


él:
Pregunta 1

PID : ________________

PORCENTAJE DE USO DE LA CPU: _______________

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.

✓ Asegúrate de que has observado estos tres procesos en el Administrador de tareas.


Quédate con sus nombres porque siempre estarán presentes en toda sesión de
trabajo.

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 Administrador de tareas y comprueba que el explorer.exe está de nuevo en


ejecución. Hasta aquí hemos visto los siguientes procesos de sistema: proceso
inactivo, CSRSS, WINLOGON y explorer. Como puedes observar en el Administrador de
tareas, hay otros procesos de sistema.

Proceso frente a programa


Un programa, en su versión ejecutable, es un conjunto de instrucciones máquina y datos
almacenados en un fichero. En Windows los programas ejecutables se nombran con la
extensión “.exe”. A la versión ejecutable de un programa se le llama también la imagen
binaria del programa. Un ejemplo de programa ejecutable es el Bloc de notas. Veamos
ahora cuál es su imagen binaria.

✓ 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.

Tenemos entonces una imagen binaria de un programa, denominada notepad.exe, que se


encuentra almacenada en algún lugar del sistema de disco del computador. Ahora vamos
a poner esa imagen binaria en ejecución, convirtiéndola por tanto en un proceso.
✓ Abre el Administrador de tareas, ficha Procesos. Ahora vas a ordenar los procesos por
el nombre de su imagen binaria. Pulsa sobre Nombre de imagen. Observarás que los
procesos quedan ordenados por nombre. Ejecuta el Bloc de notas y observa cómo
aparece el nombre de su imagen (notepad.exe) en el Administrador de tareas.

En este momento el programa notepad.exe se ha convertido en un proceso porque lo


hemos puesto en ejecución en el sistema. Ahora veremos cómo a partir de un único
programa podemos generar tantos procesos como queramos, sin más que ejecutar el
programa múltiples veces.

Pregunta 3
Anota a continuación el PID del proceso notepad.exe que acabas de poner en ejecución.

PID = Cualquier número entero

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.

PID = Cualquier número entero, pero diferente del PID anterior

A partir de un único programa hemos generado dos procesos diferentes. El sistema


operativo los diferencia porque ha asignado un PID distinto a cada uno de ellos. Podrías
seguir generando tantos procesos notepad.exe como quisieses.

Este último experimento habrá servido para dejar bien clara la diferencia entre programa
y proceso.

Pregunta 5

Uso de la CPU por parte de los procesos

Es habitual que los procesadores actuales dispongan de más de un núcleo (core) de


procesamiento. En concreto, los procesadores de los ordenadores del Laboratorio
disponen de dos núcleos. Cada núcleo representa una CPU completa y, por tanto,
nuestros ordenadores cuentan con dos CPUs. El número de núcleos activos en un sistema
puede observarse mediante el Administrador de tareas.

Abre el Administrador de tareas. Elige la ficha Rendimiento. En la zona de esta ficha


identificada como Historial de uso de la CPU se muestran tantos recuadros como núcleos
activos hay en el sistema. En este momento debes observar dos recuadros, que
corresponden a los dos núcleos del procesador. Para comprender la planificación de
procesos en la CPU es mejor empezar experimentando con un sistema que tenga una sola
CPU. Esto podemos conseguirlo haciendo que nuestro sistema funcione con un solo
núcleo activo. Para ello, tenemos que modificar un fichero del sistema operativo en el que
se especifican diversos aspectos relativos a la carga e inicialización del sistema operativo.

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

%de CPU proceso inactivo:

%de CPU proceso Prog1.exe:

• Conmuta a la ficha Rendimiento del Administrador de tareas y observa que el uso


de la CPU se encuentra al 100%.
• Retorna a la ficha Procesos. Entonces pulsando con el botón derecho del ratón
sobre el proceso prog1.exe, termina su ejecución, comprobando cómo la CPU pasa
de nuevo a ser ocupada por el Proceso inactivo.
• Ahora vamos a comprobar cómo la CPU se reparte entre los procesos en ejecución.
Para ello vamos a lanzar varias ejecuciones del programa prog1.exe.

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:

Dos imágenes en ejecución. % de CPU asociado a la imagen:

Tres imágenes en ejecución. % de CPU asociado a la imagen:

Cuatro imágenes 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 prog1.exe no es un programa de estructura computacional típica, ya que no


hace operaciones de E/S. Ahora vamos a continuar las pruebas con el programa
prog2.exe, que tiene una estructura computacional más común, es decir, computa y hace
E/S alternativamente.

• 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

Abre el Administrador de tareas y elige su ficha Procesos. Ejecuta prog1-2.exe. En este


momento observarás que el proceso no consume CPU, ¿por qué?

Pregunta 9

Introduce 10 iteraciones. ¿Qué ocurre con el consumo de CPU y por qué?

Finalmente modificaremos de nuevo MSCONFIG y colocamos 2 procesadores (si es doble


nucleo) o el máximo que aparezca por defecto.

SEGUNDA PARTE (LINUX) – 60%

mkdir practica2
$ cd practica2

I. PROCESO POSIX
El siguiente código, muestra las acciones internas de la llamada fork:

1. Compile el código anterior mediante el comando gcc.


$ gcc -o forkprog forkprog.c

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 &

3. Verifique su ejecución con la orden ps que le permitirá comprobar su funcionamiento. Dicha


orden ha de ser ejecutada antes de que finalice la ejecución del proceso.
$ ps -l
Observe los valores PID y PPID de cada proceso e identifique qué atributos son heredados entre
padre e hijo y cuáles no.

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.

VISIBILIDAD DE RECURSOS ENTRE PROCESOS


Zona de datos entre procesos relacionados por una llamada FORK
Dos procesos vinculados por una llamada fork(padre e hijo) poseen zonas de datos propias , de uso
privado(no compartidas). Obviamente, al tratarse de procesos diferentes, cada uno posee un
espacio de direccionamiento independiente e inviolable. La ejecución del siguiente programa, en
el cual se asigna distinto valor a una misma variable según se trate de la ejecución del proceso
padre o del hijo, permitirá comprobar tal característica de la llamada fork.
En el programa forkprog2.c el proceso padre visualiza los sucesivos valores impares que toma su
variable i privada, mientras el proceso hijo visualiza los sucesivos valores pares que toma su
variable i privada y diferente a la del proceso padre.
Para ejecutar este programa, es necesario compilarlo y usar su nombre forkprog2:
$ gcc -o forkprog2 forkprog2.c
$ ./forkprog2

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.

II. INICIACION DE PROGRAMAS MEDIANTE EXEC

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.

13. Compile los programas prog1.c y prog2.c mediante el comando gcc.


$ gcc -o prog1 prog1.c
$ gcc –o prog2 prog2.c

Ejecute el programa en segundo plano (o background). Para ello, se debe añadir al nombre del
programa el carácter &(ampersand)

$ ./prog1 arg1 arg2 … argN &


$ ps -l

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?

EJECUCIÓN CON ESPERA


En el siguiente programa llamado espe1.c , se emplea la llamada al sistema wait. Esta llamada
provoca que el proceso invocador quede en suspenso hasta que concluya algún proceso hijo que
haya sido activado por él mismo.
Para compilar y ejecutar este programa realice lo siguiente:
$ gcc -o espe1 espe1.c
$ ./espe1&
$ ps -l

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.

17. Existe un proceso que no tenga ancestros? Especifica cuál?

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?

También podría gustarte