Codigo de asignacion de memoria: Peor Ajuste

Iniciado por dato000, 15 Marzo 2011, 12:38 PM

0 Miembros y 1 Visitante están viendo este tema.

dato000

Buenas las tengan.

Se que no hacen "trabajos ni tareas" pero estoy atorado con un ejercicio, y la verdad es que se que es un detalle, uno con el que no puedo dar, por favor, denme una mano.

Se trata sobre un código con arreglos en el que debo entregar unos cuadros al usuario en donde se reasignen las tareas y se entregen las particiones con una fragmentación de memoria más alta, comprobando el concepto de "Peor Ajuste" al código, en particiones fijas.

Les agradezco, esto es lo que he adelantado:

El principal

#include <iostream>
#include <stdio.h>
#include <D:\Camilo\Unilibre\Quinto Semestre\Sistemas Operativos\Ejercicios\Primer Corte\particionfija.h>

/*
   MANUEL CAMILO CEPEDA MARTINEZ 066091006
   ERIKA CALDAS CODIGO 066062003
   PARTICION FIJA PEOR AJUSTE - VERSION 1.0
   SISTEMAS OPERATIVOS
   UNIVERSIDAD LIBRE DE COLOMBIA
*/

using namespace std;

int main(){
   
       int opcion;
       
           
       //MENU DE BIENVENIDA  
       printf("\t\t BIENVENIDO: ");    
       printf("OPCIONES \n\n");
       printf("\t 1.    PARTICION FIJA  \n");
       printf("\t 2.    SALIDA   \n\n");
       printf("digite una de las opciones: ");
       scanf( "%i", &opcion);
       
       switch (opcion){
           
           case 1:
               printf("PARTICION FIJA \n\n");
               printf("NO HAY RELOCALIZACION \n\n");
               partFija();
               break;
           
           case 2:
               printf("adios!!!! buen dia!!!");
               getchar();
               break;
               
           default:
               printf("ERROR DIGITANDO DATOS, EL PROGRAMA ESTALLARA!! ARRGHHH!!\n\n");
               getchar();
               break;
       }
       
       getchar();  
       return EXIT_SUCCESS;
}


La libreria de la particion fija que debe entregar el peor ajuste

void partFija();

void partFija(){

        int t[5];
        int p[5]={20,15,20,10,30};
        int contador=30;
        printf("HOLA!!\n\n");
       
        //IMAGEN DE PARTICIONES
        printf("\n\n");
        printf("PARTICION FIJA      MEDIDA       LOCALIZACION\n");
        printf("-------------------   0\n");
        printf("|        SO       | \n");
        printf("-------------------   30             %i\n", contador);
        for(int i=0; i<5; i++){
           contador += p[i];    
           printf("|        p%i       | \n", i+1);
           printf("-------------------   %i             %i\n", p[i], contador);
        }

       
         //INGRESO DE TAREAS
        printf("5 TAREAS MAXIMO \n\n");
        for(int i=0; i<5; i++){
           printf("TAREA %i:  ", i+1); scanf( "%i", &t[i]);
        }
       
       
        //INGRESO DE TAREAS EN PARTICIONES
        contador=30;
        printf("\n\n");
        printf("PARTICION FIJA      MEDIDA       LOCALIZACION\n");
        printf("-------------------   0\n");
        printf("|        SO       | \n");
        printf("-------------------   30             %i\n", contador);
        for(int i=0; i<5; i++){  
           if(t[i]==0){
               contador += p[i];
               printf("|        p%i       | \n", i+1);
               printf("|   ***********   | \n");
               printf("|     LIBRE: %i    | \n", p[i]);
               printf("-------------------   %i             %i\n", p[i], contador);
           }
           else{
               contador += p[i];    
               printf("|        p%i       | \n", i+1);
               printf("|   ***********   | \n");
               printf("|     Frag: %i    | \n", p[i]-t[i]);
               printf("-------------------   %i             %i\n", p[i], contador);
           }
        }
       
        //PEOR AJUSTE
       
       
       
       
        do{
               contador=30;
               fflush(stdin);
               printf("\n\nQUE TAREA DESEA ELIMINAR??  \n (Digite solo el numero de la tarea)  ");
               int borrar; scanf( "%i", &borrar);
               if(borrar == 1)
                   t[0]=0;
               else if(borrar == 2)
                   t[1]=0;
               else if(borrar == 3)
                   t[2]=0;
               else if(borrar == 4)
                   t[3]=0;
               else if(borrar == 5)
                   t[4]=0;
                   
               
               printf("PARTICION FIJA      MEDIDA       LOCALIZACION\n");                    
               printf("-------------------   0\n");
               printf("|        SO       | \n");
               printf("-------------------   30             %i\n", contador);
               
               for(int i=0; i<5; i++){
                     
                       //IMAGEN DE PARTICIONES FIJAS CON TAREA RETIRADA
                       if(t[i]==0){
                           contador += p[i];
                           printf("|        p%i       | \n", i+1);
                           printf("|   ***********   | \n");
                           printf("|     LIBRE: %i    | \n", p[i]);
                           printf("-------------------   %i             %i\n", p[i], contador);
                       }
                       else{    
                           contador += p[i];
                           printf("|        p%i       | \n", i+1);
                           printf("|   ***********   | \n");
                           printf("|     Frag: %i    | \n", p[i]-t[i]);
                           printf("-------------------   %i             %i\n", p[i], contador);
                       }
                   
                }
               
                //El programa pregunta si quiere continuar
                char opc;
                fflush(stdin);
                printf("\n\n\nDESEA RETIRAR OTRA TAREA?? (S/N) ");
                scanf("%c", &opc);
                if(opc=='n' or opc=='N')
                   break;
               
        }while(true);
        getchar();
               
}


La verdad es que no doy con el truco para reasignar las tareas de manera indicicada.




Akai

Parece que falla más el hecho de entender lo que se te plantea que otra cosa. Quizá deberías revisar a fondo la asignación de memoria por peor ajuste. Recalco que lo que parece estar fallando es la algoritmia (planteamiento del problema).

Por otro lado, como pequeño consejo, puede que te sirva el utilizar alguna clase de conjunto de estructuras donde tengas, por ejemplo, donde empieza cada partición libre y cuantos bloques libres ocupa dicha partición.

dato000

Cita de: Akai en 15 Marzo 2011, 14:03 PM
Parece que falla más el hecho de entender lo que se te plantea que otra cosa. Quizá deberías revisar a fondo la asignación de memoria por peor ajuste. Recalco que lo que parece estar fallando es la algoritmia (planteamiento del problema).

Por otro lado, como pequeño consejo, puede que te sirva el utilizar alguna clase de conjunto de estructuras donde tengas, por ejemplo, donde empieza cada partición libre y cuantos bloques libres ocupa dicha partición.

ummm dejando a un lado los mensajes de salida y todos los adornos, todo se reduce a un problemas de arreglos??

ummm cuando mencionas lo de las estructuras, como seria?? no soy muy entendido en struct??

pero practicamente el cuento son con 5 posiciones de particiones, y 5 de tareas... no tienes algun tip de ordenamiento para el caso de peor ajuste??



Akai

Básicamente, si quitas lo dicho, "todo" se reduce a un problema de vectores, si.

Sobre lo de las estructuras... Puedes utilizas structs, o no, o las mil opciones que se te puedan ocurrir.

No voy a dar ejemplos porque si los doy, te resuelvo la tarea, y no es mi intención. Que discurras y la resuelvas tu, si.

Creo que el propio "peor ajuste" en su definición y descripción te da ya todos los "tips" para implementarlo. Por ello, te sigo diciendo, revísate la teoría de tu asignatura de Sistemas Operativos.

dato000

Cita de: Akai en 15 Marzo 2011, 14:38 PM
Básicamente, si quitas lo dicho, "todo" se reduce a un problema de vectores, si.

Sobre lo de las estructuras... Puedes utilizas structs, o no, o las mil opciones que se te puedan ocurrir.

No voy a dar ejemplos porque si los doy, te resuelvo la tarea, y no es mi intención. Que discurras y la resuelvas tu, si.

Creo que el propio "peor ajuste" en su definición y descripción te da ya todos los "tips" para implementarlo. Por ello, te sigo diciendo, revísate la teoría de tu asignatura de Sistemas Operativos.

sabia que lo tenias resuelto desde el princpio!!

vale listo, le seguire porque pues que más puedo (como he estado haciendo en estos días.

Una vez lo tenga vectores me puedes pasar el dato en struct, yo no es para la clase, sino por curisiosidad, ni idea de structs (por lo menos no una muy clara).



Akai

Una cosa es que tenga planteado como lo haría si lo tuviese que hacer y otra que lo tenga hecho. Viendo tu problema se me ocurren formas de resolverlo usando esto y aquello, o esto y no aquello, o aquello y no esto, o ni esto ni aquello. (Siendo "esto" y "aquello" cualquier clase de método, tipo de dato, etc etc etc)

Pero siempre desde un punto de vista genérico y no centrado en el lenguaje (Hacerlo al revés ya me ha llevado en muchas ocasiones a perder el tiempo en cosas minúsculas)

Implementarlo ya es otro tema. Es pasar lo que se me ocurre a un lenguaje concreto, C++ en este caso.

Sobre el tema de estructuras, utilicé ese término de forma genérica, un vector, o "arreglo" como lo llamas tu, es una estructura. Creo que miras demasiado como lo harías en C/C++ y no la forma genérica de resolverlo.

Si quieres mirar sobre structs, hay bastantes tutoriales por ahí, o enlaces a libros en este mismo foro. Pero ahora termina lo que estés haciendo y no te marees con cosas nuevas.