Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Asignación preventiva de recursos en un sistema operativo multiprogramado, Ejercicios de Sistemas Operativos

Resolver problemas de sincronización en concurrencia, como las condiciones de carrera, aplicando técnicas de sincronización en lenguaje de programación C++. Utilizando MUTEX para evitar el interbloqueo.

Tipo: Ejercicios

2024/2025

A la venta desde 19/06/2025

Mayerly-Orbe
Mayerly-Orbe 🇪🇨

4 documentos

1 / 9

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
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.
pf3
pf4
pf5
pf8
pf9

Vista previa parcial del texto

¡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)

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

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

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

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

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