Está en la página 1de 8

Universidad de Panamá

Facultad de Informática, Electrónica y Comunicación


Sistemas Operativos - Cuestionario – Investigación del Capítulo 3

Nombre: Pineda, Michael Cedula: 8-976-16 Fecha: 31 de mayo de 2020

Preguntas de autoevaluación

1. ¿Qué diferencias y similitudes hay entre un programa y un proceso, y


entre un proceso y un hilo?
Programa y Procesos
Diferencias
 Un programa es una colección de instrucciones que explica la tarea que debe
realizar la CPU. Un proceso es un programa en ejecución.
 Por el “tiempo de vida” útil, un programa por ser un conjunto de instrucciones tiene
una vida más larga. El tiempo de vida en un proceso es más corto dependiendo de
la ejecución
 El disco duro almacena los programas y estos programas no requieren recursos.
Los procesos requieren recursos como memoria, dispositivos de E/S y CPU
Similitudes
 Ambos son utilizados para cumplir con una tarea específica.
 Un ordenador puede contemplar el hecho de utilizar más de un programa y
proceso.
 Pueden llegar a combinar durante su estadía la combinación de más de un
programa o de un proceso.
Proceso e Hilo
Diferencias
 Todos los hilos de un programa están contenidos lógicamente dentro de un
proceso.
 Un proceso es pesado, pero un hilo es ligero.
 Un programa es una unidad de ejecución aislada mientras que el hilo no está
aislado y comparte memoria.
 Un hilo no puede tener una existencia individual; Se adjunta a un proceso. Por otro
lado, un proceso puede existir individualmente.
 En el momento de la expiración de un hilo, su pila asociada podría recuperarse, ya
que cada hilo tiene su propia pila. En contraste, si un proceso muere, todos los
hilos mueren, incluido el proceso.
Similitudes
 Los hilos operan, en muchos sentidos, igual que los procesos.
 Pueden estar en uno o varios estados: listo, bloqueado, en ejecución o terminado.
 También comparten la CPU.
 Cada hilo y proceso tiene su propia pila y contador de programa.
 Pueden crear sus propios hilos hijos.
2. Un proceso puede estar en uno de seis estados. Indique cuáles son estos
estados (describiendo brevemente sus características) y cuáles las transiciones
definidas entre ellos.

Estados
1. Nuevo (new): Cuando el proceso es creado.
2. Ejecutando (running): El proceso tiene asignado un procesador y está
ejecutando sus instrucciones.
3. Bloqueado (waiting): El proceso está esperando por un evento (que se complete
un pedido de E/S o una señal).
4. Listo (ready): El proceso está listo para ejecutar, solo necesita del recurso
procesador.
5. Finalizado (terminated): El proceso finalizó su ejecución.
Transiciones
Nuevo –> Listo – Al crearse un proceso pasa inmediatamente al estado listo.
Listo –> Ejecutando – En el estado de listo, el proceso solo espera para que se le
asigne un procesador para ejecutar (tener en cuenta que puede existir más de un
procesador en el sistema.
Ejecutando –> Listo – Ante una interrupción que se generé, el proceso puede perder
el recurso procesador y pasar al estado de listo.
Ejecutando –> Bloqueado – A medida que el proceso ejecuta instrucciones realiza
pedidos en distintos componentes (ej.: genera un pedido de E/S). Teniendo en cuenta
que el pedido puede demorar el proceso es puesto en una cola de espera hasta que
se complete su pedido.
Bloqueado –> Listo– Una vez que ocurre el evento que el proceso estaba esperando
en la cola de espera, el proceso es puesto nuevamente en la cola de procesos listos.
Ejecutando -> Terminado – Cuando el proceso ejecuta sus última instrucción pasa al
estado terminado. El sistema libera las estructuras que representan al proceso.
3. Presente un ejemplo de cada uno de los tres patrones de trabajo para la
paralelización de la ejecución en varios hilos.
Jefe/Trabajador
Un thread oficia de “jefe” asignando tareas a threads trabajadoras
Cada thread trabajadora realiza tareas hasta finalizar, interrumpiendo al jefe para
indicar que se encuentra disponible nuevamente. Alternativamente, el jefe consulta
periódicamente a los threads para ver si se encuentran ociosas
Equipo de Trabajo
Múltiples threads trabajan conjuntamente para realizar una tareas única. La tarea es
dividida en piezas que se ejecutan en paralelo, cada thread ejecuta una pieza
Ejemplo: thread=personas tarea=limpiar una casa
línea de ensamblado
Una tarea es dividida en pasos. Los pasos deben ser realizados en secuencia para
producir un único resultado. El trabajo realizado en cada paso basado en el resultado
generado por el paso anterior y es necesario para el siguiente
Un ejemplo es cualquier proceso de ensamblado, como ser la línea de producción de
automóviles.
4. Defina los siguientes conceptos, e ilustre las relaciones entre ellos:
Concurrencia:
Concurrencia: es la capacidad de diferentes partes o unidades de un programa,
algoritmo o problema para ejecutarse fuera de orden o en orden parcial, sin afectar el
resultado final.
Un ejemplo de un problema de concurrencia sería el siguiente: dados dos
procesos A (productor) y B (consumidor) que se ejecutan indefinidamente en el
tiempo, el proceso A debe recibir tiempo de ejecución antes que B. Tras esto, el
proceso B debe recibir su oportunidad de ejecución, dando paso de nuevo al
proceso A y así sucesivamente, siguiendo un esquema de alternancia estricta.
Operación atómica
Una operación atómica es una
operación que se ejecuta "todo a la
vez", sin ninguna posibilidad de que
otros hilos observen o modifiquen el
estado durante la ejecución de la
operación atómica.
Condición de carrera
La condición de carrera ocurre cuando dos o más procesos acceden un recurso
compartido sin control, de manera que el resultado combinado de este acceso
depende del orden de llegada.
Por ejemplo, que dos clientes de un banco realizan cada uno una operación en
cajeros diferentes al mismo tiempo.
Sección crítica
se define como a la porción de código de un programa de computador el cual accede
a un recurso compartido que no debe de ser accedido por más de un hilo en ejecución
(thread).
Un ejemplo de sección crítica es la sección de código en la que se accede a un
recurso compartido. Para evitar el acceso simultaneo a la sección crítica se
emplean mecanismos que garantizan la exclusión mutua.
Espera activa
“La espera activa es una técnica en la cual un proceso comprueba continuamente si
una condición se cumple o si se produce un evento”

6. Los bloqueos mutuos no sólo ocurren en el campo del cómputo.


Identifique, basándose en las condiciones de Coffman, situaciones de la vida
real que (de no ser por el ingenio o la impredecibilidad humana) constituirían
bloqueos mutuos. Describa por qué considera que se cumple cada una de las
condiciones.
a. Un ejemplo puede ser que dos personas quieran jugar squash que es un deporte
en el que se golpea con raqueta una bola de goma contra una pared.
b. Uno de ellos toma la raqueta y el otro toma la pelota
c. Ninguno puede jugar hasta que alguno libero lo que tomo
d. Los procesos compiten por dos recursos que necesitan para funcionar que solo
pueden ser utilizados por un proceso a la vez
e. El primer jugador obtiene el permiso de su amigo para utilizar la pelota y adquiero
y puede usar ese recurso
f. Ahora el segundo jugar toma la raqueta del primer jugador y luego intenta utilizar
la raqueta del primer jugador y se queda en espera.
g. Ahora el primer jugador trata de utilizar la pelota del segundo jugador y ahora se
produce un interbloqueo.
Ninguno de los dos jugadores podrá jugar correctamente hasta que uno de los dos
libere el recurso que el otro esta utilizando
Temas de investigación sugeridos
1. Sistemas de arranque modernos en sistemas tipo Unix Un tema no
directamente relacionado con el expuesto en este capítulo, pero que puede
ligarse con varios de los conceptos aquí abordados, es la gestión del
arranque del sistema: una vez que el núcleo carga y hace un recorrido
básico del hardware creándose un mapa de cómo es el sistema en que está
corriendo, tiene que llevar el equipo a un estado funcional para sus usuarios.
¿Cómo ocurre esto?
Tradicionalmente, los sistemas Unix se dividían entre dos filosofías de arranque (los
sistemas SysV y los sistemas BSD).
Pero la realidad del cómputo ha cambiado con el tiempo. Tras una etapa de largas
discusiones al respecto, la mayor parte de las distribuciones están migrando a
SystemD, desarrollado originalmente por RedHat.
1.1 ¿Cuáles son los planteamientos básicos de los arranques tipo SysV y BSD
El sistema de inicio System V controla el arranque de los programas en el instante de
inicio de la máquina. Este sistema de inicio es considerado por muchos más fácil de
usar, más potente y flexible que el sistema de inicio BSD tradicional.
1.2 ¿A qué tipo de cambios en la realidad es que se hace referencia?
Comparado con el init de System V, SystemD puede tomar ventaja de nuevas
técnicas:
Los servicios de activación de sockets y la activación de buses, que conduce a una
mejor paralelización de servicios independientes.
cgroups se utilizan para realizar un seguimiento de los procesos de servicio, en lugar
de PIDs. Esto significa que los demonios no pueden “escapar” de SystemD, aunque
estén doblemente-bifurcados.
1.3 ¿Por qué los esquemas tradicionales ya no son suficientes para los
sistemas actuales?
SystemD es el sistema de inicio y administración del sistema, que han adoptado la
mayoría de las distribuciones Linux. Más moderno, más complejo, y quizás con un
excesivo control sobre el sistema generó una gran polémica en su implantación y esto
ya no lo contaban los enfoques tradicionales como SysV y otros.
Lo que está claro, es que le pese a quien le pese SystemD ganó la batalla sobre el
administrador tradicional de init, SysV init. SystemD es compatible con los scripts de
inicio SysV y LSB, además funciona como reemplazo directo de SysV init.

1.4 ¿En qué se parecen y en qué se diferencian los sistemas clásicos y


SystemD?
Los desarrolladores de SystemD destinadas a sustituir el sistema de inicio de Linux
heredado de UNIX System V y sistemas operativos Berkeley Software Distribution
(BSD). Init, SystemD es un demonio que gestiona otros demonios. Todos los
demonios, incluyendo SystemD, son procesos en segundo plano . SystemD es el
primer demonio se arranque (durante el arranque) y el último demonio para terminar
(durante el apagado ).
Lennart Poettering y Kay Sievers , los ingenieros de software que desarrolló
inicialmente SystemD, trataron de superar la eficiencia del demonio init de varias
maneras. Ellos querían mejorar el marco software para las dependencias que
expresan, para permitir más procesamiento que se realiza en paralelo durante el
arranque del sistema, y para reducir la sobrecarga computacional de la cáscara .
1.5 ¿Qué ventajas y desventajas conllevan?
SysV - Ventajas
También puedes comprobar que los scripts o procesos a ejecutar durante el arranque
se guardan en ficheros rc. En algunas distros varían su localización, usando enlaces
simbólicos para /etc/init.d. Por ejemplo, en openSUSE están en /etc/init. d/rc y en
Debian en /etc/rc-. d.
Desventajas

SystemD va en contra de la
filosofía Unix: "haz una cosa
y hazla bien",
representando una colección
compleja de docenas de
binarios fuertemente
acoplados
El proceso de inicio de servicios es estrictamente síncrono. Se espera a que un
daemon esté corriendo antes de iniciar el próximo). Esto impacta en el tiempo de
inicio.
Necesidad de chequear dependencias antes de iniciar un servicio. Por ejemplo, que el
servicio de red esté disponible antes de iniciar un web server.
Cualquier evento posterior al inicio del equipo (identificación y montaje de dispositivos
extraíbles, por ejemplo) necesitan intervención manual del usuario.
SystemD – Ventajas
A su favor tengo que decir que SystemD es eficiente y hace uso de cgroups para
evitar procesos zombies.
SystemD es que se compone de unidades (*. servicies, *. sockets, *.targets…). Son
elementos básicos que podrás encontrar en /lib/SystemD/system o
/usr/lib/SystemD/system/. También te recomiendo que eches un vistazo a
/etc/SystemD/system.
Desventajas
Este sustituto del tradicional init no ha gustado a muchos, pero se ha impuesto en la
mayoría de las distros. Algunas de las cosas que no gustan son su mayor complejidad
al no respetar la filosofía KISS, que los logs se almacenan en formato binario y eso
puede dejarlos corruptos en caso de algún fallo, por lo que no se podrían leer, se
entromete en la gestión de energía, cifrado, etc.
2. Problemas adicionales de sincronización De todo el libro, es en este capítulo
en el que más se trata directamente con código. Si bien para presentar como
casos de ejemplo se emplearon cinco de los casos clásicos (el jardín
ornamental, el problema productor-consumidor, el problema lectores-
escritores, la cena de los filósofos y los fumadores compulsivos), hay
muchos otros casos ampliamente analizados.
El libro libremente redistribuible The little book of semaphores (Downey 2008)
tiene más de 20 problemas de sincronización, planteados junto con su
implementación empleando semáforos en el lenguaje Python. Profundizar en
alguno de estos problemas adicionales ayudará al aprendizaje de los temas
expuestos.
Un semáforo ilimitado. Opcionalmente, inicialice con un recuento de recursos, luego
acquire y release recursos según sea necesario. Intentar acquire cuando el recuento
es cero suspende el hilo verde de llamada hasta que el recuento vuelva a ser distinto
de cero.
Un semáforo acotado verifica para asegurarse de que su valor actual no exceda su
valor inicial. Si lo hace, se genera ValueError. En la mayoría de las situaciones, los
semáforos se utilizan para proteger recursos con capacidad limitada. Si el semáforo
se libera demasiadas veces, es un signo de error. Si no se proporciona, el valor
predeterminado es

También podría gustarte