Professional Documents
Culture Documents
h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define MAX_TAREAS 5
#define MAX_LINEAS 600
#define LINEAS_PAG 100
struct Memoria
{
int marco;
int loc;
int edo;
struct Memoria *nxt;
};
struct Marco
{
int id;
int loc;
struct Marco *nxt;
};
struct Tarea
{
int id;
int lineas;
int locPMT;
struct Marco *marco;
struct Tarea *nxt;
};
int totalMarcos = 0;
void crearMapaMemoria();
void crearTablaTarea();
void asignarMemoria();
void imprimirMapaMemoria();
void imprimirTablaTarea();
void imprimirMarcos();
int main()
{
crearMapaMemoria();
crearTablaTarea();
imprimirMapaMemoria();
imprimirTablaTarea();
asignarMemoria();
imprimirMapaMemoria();
imprimirMarcos();
getch();
return 0;
}
void crearMapaMemoria()
{
int tamMem = 0,TAM_MARCO=0,Particion=0;
if(Particion==1)
{
TAM_MARCO=512;
totalMarcos = (tamMem * 1024) / TAM_MARCO;
}
if(Particion==2)
{
printf("Defina el tamaño del marco: ");
scanf("%d",&TAM_MARCO);
totalMarcos = tamMem/TAM_MARCO;
}
memRef->nxt->marco = i;
memRef->nxt->loc = i * TAM_MARCO;
memRef->nxt->edo = i > 1 ? 0 : 1;
memRef->nxt->nxt = NULL;
memRef = memRef->nxt;
}
}
void crearTablaTarea()
{
srand(time(NULL));
if (tablaTarea.lineas == 0) {
tablaTarea.lineas = (rand() % MAX_LINEAS) + 1;
}
tareaRef->nxt->id = i;
tareaRef->nxt->lineas = (rand() % MAX_LINEAS) + 1;
tareaRef->nxt->locPMT = i;
tareaRef->nxt->marco = NULL;
tareaRef->nxt->nxt = NULL;
tareaRef = tareaRef->nxt;
}
tareaRef = &tablaTarea;
do {
int totalLineas = tareaRef->lineas;
int totalMarcos = int(totalLineas / LINEAS_PAG);
tareaRef->marco = new(Marco);
tareaRef->marco->id = 0;
tareaRef->marco->loc = 0;
tareaRef->marco->nxt = NULL;
marcoRef->nxt->id = j;
marcoRef->nxt->loc = 0;
marcoRef->nxt->nxt = NULL;
marcoRef = marcoRef->nxt;
}
tareaRef = tareaRef->nxt;
} while (tareaRef != NULL);
}
void asignarMemoria()
{
struct Tarea *tareaRef = &tablaTarea;
struct Memoria *memoriaRef = mapaMemoria.nxt->nxt;
marcoRef = marcoRef->nxt;
memoriaRef = memoriaRef->nxt;
}
marcoDisponible -= conteoMarcos;
}
tareaRef = tareaRef->nxt;
}
}
void imprimirMapaMemoria()
{
char *titulos[] = {
"NO. MARCO",
"LOC. MARCO",
"EDO"
};
int titulosTam = sizeof titulos / sizeof titulos[0];
printf("%c", 218);
if (strlen(titulos[i]) <= 5) {
tamCelda = 5;
} else {
tamCelda = strlen(titulos[i]);
}
if (i < titulosTam - 1) {
printf("%c", 194);
} else {
printf("%c", 191);
}
}
printf("\n");
printf("%c", 179);
for (int i = 0; i < titulosTam; i++) printf("%*s%c", 5, titulos[i], 179);
printf("\n");
printf("%c", 195);
if (strlen(titulos[i]) <= 5) {
tamCelda = 5;
} else {
tamCelda = strlen(titulos[i]);
}
if (i < titulosTam - 1) {
printf("%c", 197);
} else {
printf("%c", 180);
}
}
printf("\n");
do {
printf("%c", 179);
printf("\n");
memoriaRef = memoriaRef->nxt;
if (memoriaRef != NULL) {
printf("%c", 195);
if (strlen(titulos[i]) <= 5) {
tamCelda = 5;
} else {
tamCelda = strlen(titulos[i]);
}
if (i < titulosTam - 1) {
printf("%c", 197);
} else {
printf("%c", 180);
}
}
} else {
printf("%c", 192);
if (strlen(titulos[i]) <= 5) {
tamCelda = 5;
} else {
tamCelda = strlen(titulos[i]);
}
printf("\n");
void imprimirTablaTarea()
{
char *titulos[] = {
"TAREA",
"NO. LINEAS",
"LOC. PMT"
};
int titulosTam = sizeof titulos / sizeof titulos[0];
printf("%c", 218);
if (i < titulosTam - 1) {
printf("%c", 194);
} else {
printf("%c", 191);
}
}
printf("\n");
printf("%c", 179);
for (int i = 0; i < titulosTam; i++) printf("%*s%c", 5, titulos[i], 179);
printf("\n");
printf("%c", 195);
if (i < titulosTam - 1) {
printf("%c", 197);
} else {
printf("%c", 180);
}
}
printf("\n");
do {
printf("%c", 179);
printf("\n");
tareaRef = tareaRef->nxt;
if (tareaRef != NULL) {
printf("%c", 195);
if (i < titulosTam - 1) {
printf("%c", 197);
} else {
printf("%c", 180);
}
}
} else {
printf("%c", 192);
if (i < titulosTam - 1) {
printf("%c", 193);
} else {
printf("%c", 217);
}
}
}
printf("\n");
void imprimirMarcos()
{
char *titulos[] = {
"PAGINA",
"MARCO"
};
int titulosTam = sizeof titulos / sizeof titulos[0];
struct Tarea *tareaRef = &tablaTarea;
printf("\nJ%i\n\n", tareaRef->id);
printf("%c", 218);
for (int i = 0; i < titulosTam; i++) {
for (int j = 0; j < strlen(titulos[i]); j++) printf("%c", 196);
if (i < titulosTam - 1) {
printf("%c", 194);
} else {
printf("%c", 191);
}
}
printf("\n");
printf("%c", 179);
for (int i = 0; i < titulosTam; i++) printf("%*s%c", 5, titulos[i], 179);
printf("\n");
printf("%c", 195);
if (i < titulosTam - 1) {
printf("%c", 197);
} else {
printf("%c", 180);
}
}
printf("\n");
printf("\n");
marcoRef = marcoRef->nxt;
if (marcoRef != NULL) {
printf("%c", 195);
if (i < titulosTam - 1) {
printf("%c", 197);
} else {
printf("%c", 180);
}
}
} else {
printf("%c", 192);
if (i < titulosTam - 1) {
printf("%c", 193);
} else {
printf("%c", 217);
}
}
}
printf("\n");
}
printf("\n");
tareaRef = tareaRef->nxt;
}
}