-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
se agrega el codigo de FMQ y su README.md
- Loading branch information
1 parent
8f4edb8
commit a140103
Showing
2 changed files
with
152 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
class Proceso: | ||
def __init__(self, nombre, tiempo_burst): | ||
self.nombre = nombre | ||
self.tiempo_burst = tiempo_burst | ||
self.tiempo_espera = 0 | ||
self.tiempo_retorno = 0 | ||
|
||
def calcular_tiempos(procesos): | ||
tiempo_total = 0 | ||
for p in procesos: | ||
p.tiempo_espera = tiempo_total | ||
tiempo_total += p.tiempo_burst | ||
p.tiempo_retorno = p.tiempo_espera + p.tiempo_burst | ||
|
||
def imprimir_tabla(procesos, prioridad): | ||
print(f"\nResultado de la programación FMQ - {prioridad} Prioridad:") | ||
print("Proceso Tiempo de Espera Tiempo de Retorno") | ||
for p in procesos: | ||
print(f"{p.nombre} {p.tiempo_espera} {p.tiempo_retorno}") | ||
|
||
# Datos de entrada | ||
procesos = [ | ||
Proceso("P1", 10), | ||
Proceso("P2", 20), | ||
Proceso("P3", 30), | ||
Proceso("P4", 5), | ||
Proceso("P5", 7), | ||
Proceso("P6", 12) | ||
] | ||
|
||
# Separar procesos en alta y baja prioridad | ||
alta_prioridad = [p for p in procesos if p.tiempo_burst < 15] | ||
baja_prioridad = [p for p in procesos if p.tiempo_burst >= 15] | ||
|
||
# Calcular tiempos para alta prioridad | ||
calcular_tiempos(alta_prioridad) | ||
imprimir_tabla(alta_prioridad, "Alta") | ||
|
||
# Calcular tiempos para baja prioridad | ||
calcular_tiempos(baja_prioridad) | ||
imprimir_tabla(baja_prioridad, "Baja") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
<h1 align="center"> | ||
|
||
_Planificación Multinivel (FMQ)_ | ||
|
||
</h1> | ||
|
||
The FMQ (Fair Minimum Queue) scheduling algorithm is a non-preemptive scheduling algorithm that organizes processes based on their burst time. This algorithm prioritizes processes with shorter burst times and separates them into high and low priority categories. | ||
|
||
>***El algoritmo FMQ (Cola Mínima Justa) es un algoritmo de planificación no preventivo que organiza los procesos según su tiempo de ráfaga. Este algoritmo prioriza los procesos con tiempos de ráfaga más cortos y los separa en categorías de alta y baja prioridad.*** | ||
--- | ||
|
||
## 🌟 Features / Características | ||
- **Type**: Non-preemptive. | ||
- **Execution Order**: Processes are divided into high and low priority based on their burst times. | ||
- **Advantages**: Efficient for processes with shorter burst times, minimizes average waiting time. | ||
- **Disadvantages**: May lead to starvation for longer processes. | ||
|
||
> - **Tipo**: No preventivo. | ||
> - **Orden de Ejecución**: Los procesos se dividen en alta y baja prioridad según sus tiempos de ráfaga. | ||
> - **Ventajas**: Eficiente para procesos con tiempos de ráfaga más cortos, minimiza el tiempo de espera promedio. | ||
> - **Desventajas**: Puede provocar inanición en procesos más largos. | ||
--- | ||
|
||
## 🛠️ Program Function / Función del Programa | ||
|
||
This program implements the FMQ algorithm to simulate process scheduling. Given a set of processes with their burst times, the program will calculate: | ||
|
||
- Waiting time for each process. | ||
- Turnaround time for each process. | ||
|
||
> ***Este programa implementa el algoritmo FMQ para simular la programación de procesos. Dado un conjunto de procesos con sus tiempos de ráfaga, el programa calculará:*** | ||
> - Tiempo de espera de cada proceso. | ||
> - Tiempo de retorno de cada proceso. | ||
--- | ||
|
||
## 🛠️ Instructions for use / Instruccion de Uso | ||
|
||
1. **Run the program**: First, ensure you have python installed on your system. | ||
>**Ejecute el programa**: primero, asegúrese de tener Python instalado en su sistema. | ||
To run the FMQ script, navigate to the directory where the "FMQ.py" file is located and excute the following command in the terminal: | ||
>***Para ejecutar el script FMQ, navegue hasta el directorio donde se encuentra el archivo "FMQ.py" y ejecute el siguiente comando en la terminal:*** | ||
```bash | ||
python FMQ.py | ||
``` | ||
2. The program will generate a table similar to the following: | ||
>***El programa generará una tabla similar a la siguiente:*** | ||
|
||
```bash | ||
Resultado de la programación FMQ - Alta Prioridad: | ||
Proceso Tiempo de Espera Tiempo de Retorno | ||
P1 0 10 | ||
P4 10 15 | ||
P6 15 27 | ||
``` | ||
|
||
```bash | ||
Resultado de la programación FMQ - Baja Prioridad: | ||
Proceso Tiempo de Espera Tiempo de Retorno | ||
P2 0 20 | ||
P3 20 50 | ||
P5 50 75 | ||
``` | ||
|
||
--- | ||
|
||
## 🧩 [Program / Programa](/FMQ/FMQ.py) | ||
|
||
```python | ||
class Proceso: | ||
def __init__(self, nombre, tiempo_burst): | ||
self.nombre = nombre | ||
self.tiempo_burst = tiempo_burst | ||
self.tiempo_espera = 0 | ||
self.tiempo_retorno = 0 | ||
def calcular_tiempos(procesos): | ||
tiempo_total = 0 | ||
for p in procesos: | ||
p.tiempo_espera = tiempo_total | ||
tiempo_total += p.tiempo_burst | ||
p.tiempo_retorno = p.tiempo_espera + p.tiempo_burst | ||
def imprimir_tabla(procesos, prioridad): | ||
print(f"\nResultado de la programación FMQ - {prioridad} Prioridad:") | ||
print("Proceso Tiempo de Espera Tiempo de Retorno") | ||
for p in procesos: | ||
print(f"{p.nombre} {p.tiempo_espera} {p.tiempo_retorno}") | ||
procesos = [ | ||
Proceso("P1", 10), | ||
Proceso("P2", 20), | ||
Proceso("P3", 30), | ||
Proceso("P4", 5), | ||
Proceso("P5", 7), | ||
Proceso("P6", 12) | ||
] | ||
alta_prioridad = [p for p in procesos if p.tiempo_burst < 15] | ||
baja_prioridad = [p for p in procesos if p.tiempo_burst >= 15] | ||
calcular_tiempos(alta_prioridad) | ||
imprimir_tabla(alta_prioridad, "Alta") | ||
calcular_tiempos(baja_prioridad) | ||
imprimir_tabla(baja_prioridad, "Baja") | ||
``` |