¡Descarga Asignación preventiva de recursos en un sistema operativo multiprogramado y más Ejercicios en PDF de Sistemas Operativos solo en Docsity!
NOMBRE:
Mayerly Ginnela Orbe Masache
PARALELO:
“D”
SEMESTRE:
Segundo
ACTIVIDAD:
Asignación preventiva de recursos en un sistema operativo multiprogramado
SISTEMAS OPERATIVOS
ING. GABRIELA CUZME ROMERO, MG.
ING. WENDY VIVIANA OBREGÓN MARTÍNEZ, MG.
TEMA (ASIGNACIÓN PREVENTIVA DE RECURSOS EN UN SISTEMA OPERATIVO
MULTIPROGRAMADO)
- RESUMEN
En esta actividad se intentará resolver problemas de sincronización en concurrencia, como las
condiciones de carrera, aplicando técnicas de sincronización en lenguaje de programación C++.
Del código propuesto se modificará, se agrega los MUTEX y garantizar la asignación preventiva de
recursos. Se ejecuta, se muestra y se describe el resultado final de la ejecución del código modificado
anteriormente para demostrar cómo se evita el interbloqueo.
Se contestará una serie de preguntas, para reforzar los conocimientos.
- REQUISITOS PREVIOS
Para el desarrollo de esta práctica se necesitará lo siguientes recursos tecnológicos por cada sistema
operativo:
Un computador 4 GB de RAM y 20 GB de espacio en
disco duro disponible.
Conexión a Internet
Entorno de desarrollo C++. Repl.it o
Conocimientos básicos de
programación en C++
Familiaridad con las llamadas del
sistema POSIX
- PROCEDIMIENTO PARA EL DESARROLLO DE LA PRÁCTICA
1. Se introduce el problema de asignación de recursos en un sistema con múltiples procesos y
cómo se puede evitar el interbloqueo utilizando la asignación preventiva de recursos.
CÓDIGO ORIGINAL
#include #include #include using namespace std; // Estructura para representar un proceso (PCB simplificado) struct Proceso { string nombre; int memoria; int velocidadCPU; int solicitudMemoria; int solicitudCPU; }; int main () { // Definir el número de procesos en la simulación
3. Me modifica el código agregando #include esta línea incluye la librería estándar
de C++ para manejo de exclusión mutua.
CODIGO MODIFICADO CON LA CLASE MUTEX Y THREAD
#include #include #include #include #include using namespace std; // Estructura del proceso struct Proceso { string nombre; int memoria; int velocidadCPU; int solicitudMemoria; int solicitudCPU; }; // Recursos compartidos int memoriaDisponible = 500 ; int velocidadCPU = 4 ; // Mutex para proteger los recursos mutex mtxRecursos; // Función que ejecuta el proceso void ejecutarProceso (Proceso p) { // Bloquear la sección crítica mtxRecursos.lock(); if (p.solicitudMemoria <= memoriaDisponible && p.solicitudCPU <= velocidadCPU) { memoriaDisponible - = p.solicitudMemoria; velocidadCPU - = p.solicitudCPU; cout << "Proceso " << p.nombre << " obtiene " << p.solicitudMemoria << " MB de memoria y " << p.solicitudCPU << " GHz de CPU." << endl; } else { cout << "Proceso " << p.nombre << " no puede obtener los recursos solicitados." << endl; } // Desbloquear al salir de la sección crítica mtxRecursos.unlock(); } int main () { int numProcesos = 3 ; vector procesos(numProcesos); procesos[ 0 ] = {"Proceso1", 100 , 2 , 50 , 1 };
procesos[ 1 ] = {"Proceso2", 150 , 3 , 80 , 2 }; procesos[ 2 ] = {"Proceso3", 200 , 1 , 100 , 3 }; vector< thread > hilos; // Crear un hilo por proceso for ( int i = 0 ; i < numProcesos; i++) { hilos.push_back( thread (ejecutarProceso, procesos[i])); } // Esperar a que todos los hilos terminen for ( int i = 0 ; i < numProcesos; i++) { hilos[i].join(); } return 0 ; }
4. Se ejecuta el código donde se visualiza cada proceso obtener los recursos. Si los recursos están
disponibles, se asignan y se imprime el mensaje correspondiente. El uso de mutex evita
conflictos entre procesos concurrentes.
5. Se analiza gráficamente de cómo se pueden bloquear los recursos necesarios antes de
asignarlos para garantizar que no se produzca el interbloqueo.
Proceso Proceso1 obtiene 50 MB de memoria y 1 GHz de CPU.
Proceso Proceso2 obtiene 80 MB de memoria y 2 GHz de CPU.
Proceso Proceso3 no puede obtener los recursos solicitados.
- CONCLUSIONES
En conclusión, utilizar MUTEX permite un mejor control a la hora de acceder recursos compartidos con
múltiples procesos. En esta práctica, se demostró como el uso de MUTEX garantiza que los procesos
no accedan a recursos como la memoria y la CPU, así evitando interbloqueos y condiciones de carrera.
Además, se representó gráficamente cómo funciona la asignación preventiva de recursos, al verificar
la disponibilidad de recursos antes de asignarlo, el sistema puede rechazar solicitudes inseguras como
vimos con el proceso 3, sin afectar a los demás procesos. Esto demuestra que la ejecución es confiable,
ordenada y eficiente con los procesos concurrentes.
- EVIDENCIAS Código modificado
Simulación
La implementación de std::mutex garantiza que solo un proceso pueda modificar o verificar los
recursos compartidos (memoria y CPU) a la vez. De esta forma se previenen condiciones de carrera y
se evita el interbloqueo, asegurando que los recursos se asignen correctamente y que los procesos
que no puedan obtenerlos reciban una respuesta clara sin afectar al sistema.