Preguntas tipo test de exámenes anteriores
En este apartado vamos a repasar temas usando las preguntas tipo test de los exámenes anteriores, lo que también nos permite revisar sus respuestas correctas.
Respuestas a las preguntas tipo test
Sistemas Operativos y Conceptos Generales
- Si un sistema operativo solo lo puede utilizar un único usuario en cada instante, se denomina sistema operativo monoproceso. (F)
- Un sistema operativo monoproceso es aquel que solo puede ejecutar un proceso a la vez, no necesariamente un solo usuario. Un sistema monousuario permite un solo usuario, pero puede ser multitarea
- Lo que caracteriza a un sistema operativo multiusuario es que es capaz de ejecutar instrucciones en varios procesadores o núcleos. (F)
- Un sistema multiusuario permite que varios usuarios accedan al sistema simultáneamente, pero no necesariamente en varios procesadores. Eso corresponde a sistemas multiprocesador.
- Los sistemas multiprocesamiento ahorran dinero en comparación con los sistemas de un solo procesador, ya que los procesadores pueden compartir periféricos y fuentes de alimentación. (V)
- Los sistemas multiprocesador comparten recursos como memoria, discos y periféricos, reduciendo costos en comparación con múltiples sistemas independientes.
- Un sistema operativo distribuido está formado por máquinas conectadas en red, de forma que el hardware subyacente está alejado físicamente pero conectado a nivel lógico. (V)
- Los sistemas distribuidos integran múltiples máquinas autónomas que colaboran para ofrecer una única imagen del sistema.
- La mayoría de los sistemas operativos de escritorio y de servidor modernos son multiusuario, multitarea y multiproceso. (V)
- Sistemas como Linux, Windows y macOS permiten múltiples usuarios, tareas y procesos simultáneos.
- Un sistema operativo en tiempo real está orientado a resolver tareas que requieran una gran velocidad de respuesta. (V)
- Los sistemas en tiempo real garantizan respuestas dentro de plazos críticos, esenciales en aplicaciones como control industrial o robótica.
- Los servicios del sistema son programas que se ejecutan en segundo plano (en Linux, se llaman demonios). (V)
- Los servicios o demons (en Linux) se ejecutan en segundo plano, proporcionando funcionalidades como redes, impresión o logging.
- La gestión de hilos consume muy pocas o ninguna llamada al sistema debido a la comunicación entre ellos, que se puede lograr mediante la memoria compartida. (V)
- Los hilos de un mismo proceso comparten memoria, por lo que su comunicación no requiere llamadas al sistema, a diferencia de los procesos.
- El multiprocesamiento ayuda a aumentar la potencia informática, mientras que el multiproceso ayuda a crear subprocesos informáticos (hilos) de un solo proceso. (V)
- El multiprocesamiento usa múltiples CPUs para aumentar el rendimiento, mientras que el multiproceso permite ejecutar múltiples hilos dentro de un proceso.
- El Portapapeles de Windows es un medio de intercambio muy flexible, donde las aplicaciones solo necesitan aceptar el formato de los datos, pudiendo residir en el mismo equipo o en equipos diferentes de una misma red. (V)
- El Portapapeles permite transferir datos entre aplicaciones, siempre que estas soporten el formato de los datos copiados.
- Una interfaz hombre-máquina háptica de un sistema operativo es aquella en la que el usuario utiliza la voz para introducir las órdenes. (F)
- Una interfaz háptica se basa en el tacto (por ejemplo, retroalimentación de fuerza), no en la voz. La interfaz de voz se denomina «interfaz de usuario por voz».
- En Windows, el comando
taskkillsirve para finalizar solamente aquellos procesos que le pertenecen, a menos que sea un administrador. (V)- taskkill permite a los administradores terminar cualquier proceso, mientras que los usuarios normales solo pueden terminar sus propios procesos.
- La clase
Runtimedispone de un método para obtener el entorno de ejecución de la máquina sobre la que se esté ejecutando el programa. (V)- Runtime.getRuntime() proporciona acceso a información y recursos del entorno de ejecución, como memoria disponible o variables de entorno.
- Con la clase
Runtimeaccedemos a las variables del sistema, mientras que conProcessBuilderlo hacemos a las propiedades del sistema, que son diferentes. (V)- Runtime se usa para acceder al entorno de ejecución global, mientras que ProcessBuilder permite configurar el entorno específico del proceso hijo.
- En Java no se pueden redireccionar los flujos de E/S del proceso hijo a la E/S estándar del proceso padre. (F)
- Tanto Runtime como ProcessBuilder permiten redirigir los flujos de entrada/salida de los procesos hijos.
- La diferencia fundamental entre proceso y servicio es que un servicio permanece en ejecución todo el tiempo, a menos que ocurra una corrupción por parte del sistema. (V)
- Los servicios están diseñados para ejecutarse en segundo plano de forma continua, a diferencia de los procesos que pueden ser temporales.
- En Linux no hay manera de saber los procesos de un usuario en un momento determinado, ni tampoco de monitorizar los recursos que están utilizando. (F)
- Comandos como ps, top y htop permiten listar procesos y monitorizar el uso de recursos por usuario.
- Para que un proceso en Unix/Linux ignore una señal, debe usar en C la función
signal, pasando como argumentos la señal a ignorar y la constanteSIG_IGN. (V)- La función signal(sig, SIG_IGN) configura el proceso para ignorar la señal sig.
- La subrutina
kill()solo vale para matar al mismo proceso que la invoca. (F)- kill() puede enviar señales a cualquier proceso, siempre que el usuario tenga permisos (por ejemplo, el propietario o root).
Procesos e hilos
- Los hilos de Java no pueden crear nuevos procesos porque la máquina virtual no lo soporta. (F)
- Los hilos en Java sí pueden crear nuevos procesos utilizando clases como ProcessBuilder o Runtime. La máquina virtual de Java (JVM) no impide la creación de procesos desde hilos.
- La creación de un hilo es mucho más rápida y toma menos recursos que la creación de un proceso. (V)
- Crear un hilo es más ligero que crear un proceso, ya que los hilos comparten el mismo espacio de memoria y recursos del proceso padre, mientras que un proceso requiere su propio espacio de memoria y recursos.
- Los sistemas multiprocesamiento ahorran dinero en comparación con los sistemas de un solo procesador, ya que los procesadores pueden compartir periféricos y fuentes de alimentación. (V)
- Los sistemas multiprocesador comparten recursos como memoria, discos y periféricos, reduciendo costos en comparación con múltiples sistemas independientes.
- Todos los procesos deben pasar por cada uno de los estados antes de su finalización. (F)
- No todos los procesos pasan por todos los estados (por ejemplo, un proceso puede terminar sin llegar a bloquearse). Los estados típicos son: nuevo, listo, en ejecución, bloqueado y terminado.
- Un proceso que queda huérfano es aquel que perdura tras la finalización de su proceso padre. (V)
- Un proceso huérfano es aquel cuyo proceso padre ha terminado, pero el proceso hijo sigue ejecutándose. En sistemas Unix/Linux, estos procesos son adoptados por el proceso init (PID 1).
- El planificador del sistema operativo es el responsable de seleccionar qué proceso está en ejecución, de entre los que se encuentren en el estado «Listo». (V)
- El planificador elige el siguiente proceso a ejecutar entre aquellos que están en el estado «Listo», no entre los bloqueados.
- El planificador del sistema operativo es el responsable de seleccionar qué proceso está en ejecución, de entre los que se encuentren en el estado «Bloqueado». (F)
- El planificador solo selecciona procesos en el estado «Listo». Los procesos bloqueados no están disponibles para ejecución.
- Un proceso que se encuentre en estado «bloqueado» se guarda en memoria secundaria para liberar recursos en la memoria principal. (F)
- Los procesos bloqueados permanecen en memoria principal (RAM), ya que pueden desbloquearse en cualquier momento. Solo en casos de falta de memoria se recurre a la memoria secundaria (swapping).
- Un quantum es el tiempo mínimo que tarda un sistema operativo para el cambio de contexto de un proceso en ejecución al siguiente. (F)
- El quantum es el tiempo máximo que un proceso puede ejecutarse antes de ser interrumpido por el planificador, no el tiempo mínimo para el cambio de contexto.
- El PCB (Bloque de Control de Proceso) contiene la información sobre un proceso, como su PID, nombre, prioridad, estado, etc., y es diferente para cada proceso. (V)
- El PCB es una estructura de datos que almacena toda la información relevante de un proceso, y es única para cada proceso.
- Una llamada a fork() exitosa devuelve 2 valores diferentes, uno para el proceso que la invoca y otro para el nuevo proceso que se crea. (V)
- fork() devuelve el PID del hijo al proceso padre y 0 al proceso hijo. Si falla, devuelve -1.
- En Linux, varios procesos pueden tener el mismo valor de PID, pero no de PPID. (F)
- Cada proceso tiene un PID único. El PPID (PID del padre) puede repetirse si varios procesos son hijos del mismo padre.
Sincronización y mecanismos IPC
- Las señales SIGKILL y SIGSTOP no pueden ser ignoradas. (V)
- Estas señales son manejadas directamente por el kernel y no pueden ser capturadas, ignoradas o bloqueadas por un proceso.
- Para lograr la exclusión mutua de una sección crítica donde se accede a un recurso compartido inicialmente disponible, el semáforo binario que lo controle debe inicializarse a cero.(F)
- Un semáforo binario para exclusión mutua debe inicializarse a 1 (indicando que el recurso está disponible). Si se inicializa a 0, el primer proceso que intente acceder quedará bloqueado.
- Un semáforo es un mecanismo de sincronización que encapsula una variable entera que solo es accesible mediante dos operaciones atómicas estándar: wait y signal. (V)
- Los semáforos usan las operaciones wait (decrementar) y signal (incrementar) para controlar el acceso a recursos compartidos.
- Mediante el mecanismo de sincronización con semáforos siempre se garantiza que no se den situaciones de interbloqueo (deadlocks). (F)
- Los semáforos no evitan automáticamente los deadlocks. Su uso incorrecto (por ejemplo, no liberar un semáforo) puede causar interbloqueos.
- Los candados (mutex) son un mecanismo de sincronización que pueden usarse con condiciones y dan permiso o deniegan la ejecución de un código por parte de un proceso o de un hilo. (V)
- Un mutex permite que solo un hilo o proceso acceda a una sección crítica a la vez, evitando condiciones de carrera.
- Dentro de un monitor solo puede haber un proceso en cada momento. (V)
- Los monitores garantizan que solo un hilo o proceso pueda ejecutar su código crítico a la vez, usando bloqueos implícitos.
- Los procesos necesitan algún tipo de mecanismo explícito tanto para compartir información como para sincronizarse. (V)
- Los procesos no comparten memoria por defecto, por lo que requieren mecanismos como pipes, colas de mensajes, memoria compartida o semáforos para comunicarse y sincronizarse.
- Cuando un método en Java se declara como synchronized, la llamada al método implica la adquisición del monitor, evitando el acceso concurrente. (V)
- El modificador synchronized asegura que solo un hilo pueda ejecutar el método o bloque sincronizado a la vez.
- Los monitores en Java pueden utilizarse tanto con la disciplina signal and continue, como con otras como signal and exit o signal and wait. (F)
- En Java, los monitores usan la disciplina «signal and wait«, donde un hilo que libera el monitor pasa a estado de espera si es necesario.
- En Java solo se pueden crear hilos mediante la implementación de la interfaz Runnable (F)
- También se pueden crear hilos extendiendo la clase Thread.
- En Java se pueden crear hilos mediante herencia extendiendo de la clase Thread y mediante la implementación de la interfaz Runnable. (V)
- Ambas son formas válidas de crear hilos en Java.
Teoría importante para estas preguntas
1. Procesos y Hilos
Conceptos esenciales:
- Diferencias entre procesos e hilos:
- Un proceso es una instancia de un programa en ejecución, con su propio espacio de memoria.
- Un hilo es una unidad más ligera dentro de un proceso, que comparte memoria y recursos con otros hilos del mismo proceso.
- Crear un hilo es más rápido y consume menos recursos que crear un proceso.
- Estados de un proceso:
- Nuevo, listo, en ejecución, bloqueado y terminado.
- No todos los procesos pasan por todos los estados (ejemplo: un proceso puede terminar sin bloquearse).
- Procesos huérfanos y zombis:
- Huérfano: Proceso cuyo padre ha terminado, pero sigue ejecutándose (es adoptado por
initen Unix/Linux). - Zombie: Proceso que ha terminado pero su entrada en la tabla de procesos sigue existiendo (hasta que el padre lee su estado de salida).
- Huérfano: Proceso cuyo padre ha terminado, pero sigue ejecutándose (es adoptado por
- Llamadas al sistema:
fork(): Crea un proceso hijo. Devuelve el PID del hijo al padre y 0 al hijo.exec(): Reemplaza el espacio de memoria del proceso actual con un nuevo programa.wait(): El padre espera a que un hijo termine.
- Planificador (Scheduler):
- Selecciona el siguiente proceso a ejecutar entre los que están en estado «Listo», no entre los bloqueados.
- Quantum: Tiempo máximo que un proceso puede ejecutarse antes de ser interrumpido.
- PCB (Bloque de Control de Proceso):
- Contiene información como PID, estado, prioridad, registros, etc. Es único para cada proceso.
2. Sincronización y Mecanismos IPC
Mecanismos de sincronización:
- Semáforos:
- Variable entera accesible mediante operaciones atómicas:
wait()(decrementa) ysignal()(incrementa). - Para exclusión mutua, un semáforo binario debe inicializarse a 1 (no a 0).
- No garantizan la ausencia de deadlocks si se usan incorrectamente.
- Variable entera accesible mediante operaciones atómicas:
- Mutex (candados):
- Mecanismo que permite solo un hilo/proceso en una sección crítica a la vez.
- Monitores:
- Garantizan que solo un hilo/proceso acceda a un recurso compartido a la vez.
- En Java, los métodos
synchronizedusan monitores internamente.
- Señales:
- SIGKILL y SIGSTOP no pueden ser ignoradas o capturadas.
signal()en C: Permite ignorar señales (usandoSIG_IGN).
- Problemas clásicos:
- Interbloqueo (deadlock): Situación en la que dos o más procesos esperan indefinidamente por recursos que el otro posee.
- Inanición (starvation): Un proceso nunca recibe recursos porque otros siempre tienen prioridad.
3. Sistemas Operativos: Conceptos Generales
Tipos de sistemas operativos:
- Monousuario vs. multiusuario:
- Monousuario: Solo un usuario a la vez (ejemplo: MS-DOS).
- Multiusuario: Varios usuarios simultáneos (ejemplo: Linux, Windows Server).
- Monoproceso vs. multiproceso:
- Monoproceso: Solo un proceso a la vez.
- Multiproceso: Varios procesos simultáneos.
- Multiprocesamiento vs. multitarea:
- Multiprocesamiento: Uso de múltiples CPUs/núcleos para aumentar el rendimiento.
- Multitarea: Ejecución concurrentes de múltiples tareas (procesos/hilos) en un solo CPU.
- Sistemas distribuidos:
- Máquinas conectadas en red que trabajan como un único sistema lógico.
- Sistemas en tiempo real:
- Diseñados para responder a eventos en plazos críticos (ejemplo: control industrial, robótica).
4. Programación en Java
Hilos en Java:
- Dos formas de crear hilos:
- Extender la clase
Thready sobrescribirrun(). - Implementar la interfaz
Runnabley pasar el objeto a unThread.
- Extender la clase
- Métodos
synchronized:- Garantizan que solo un hilo ejecute el método o bloque sincronizado a la vez.
- Clases clave:
Runtime: Acceso al entorno de ejecución (ejemplo: memoria disponible, ejecutar comandos del sistema).ProcessBuilder: Permite ejecutar procesos externos con configuración detallada (ejemplo: redirección de E/S, variables de entorno).- Diferencia:
Runtimees más genérico, mientras queProcessBuilderofrece mayor control sobre el proceso hijo.
- Redirección de E/S:
- Tanto
RuntimecomoProcessBuilderpermiten redirigir la entrada/salida de procesos hijos.
- Tanto
5. Comandos y Herramientas del Sistema
Linux/Unix:
- Comandos útiles:
ps: Lista procesos en ejecución.top/htop: Monitoriza el uso de recursos (CPU, memoria).kill: Envía señales a procesos (ejemplo:kill -9 PIDpara terminar un proceso).taskkill(Windows): Similar akill, pero requiere permisos de administrador para procesos ajenos.
- Variables de entorno:
- En Java:
System.getenv()para acceder a variables de entorno. - En C:
getenv()para leer variables de entorno.
- En Java:
- Procesos en segundo plano (servicios/demonios):
- En Linux, los servicios se llaman demonios y se ejecutan en segundo plano.
6. Conceptos Avanzados
- Exclusión mutua:
- Garantizar que solo un proceso/hilo acceda a un recurso compartido a la vez.
- Mecanismos: semáforos, mutex, monitores.
- Deadlocks:
- Condiciones necesarias: exclusión mutua, retención y espera, no expropiación, espera circular.
- Soluciones: prevención, evitación, detección y recuperación.
- Comunicación entre procesos (IPC):
- Memoria compartida, pipes, colas de mensajes, sockets.