Enviado em 19/12/2018 - 12:07h
Galera estou fazendo um trabalho para a facul sobre gerencia de memoria swap, estou com dificuldade em 2 funções, quem puder ajudar agradeceria muito.int gera_processo_e_inicia(queue_t** memoria_principal, queue_t** memoria_secundaria, int tamanho_bloco,
int tamanho_max_memoria_secundaria, queue_t* func(queue_t*, int)) {
queue_t* processo;
processo.cria_no(tamanho_bloco, 1);
queue_t* no = func(no, tamanho_bloco);
if (!no) {
//swap
} else {
}
}
// ideia é trazer um processo da memoria secundaria para executar, muda processo de um lado para o outro, não tem retorno.
/**
* - simula a execução de um processo que estava na memória secundaria
* + traz o próximo processo da memória secundária
* + localiza o próximo espaço disponÃvel, utilizando a estratégia passada como parâmetro
* + se não tiver espaço disponÃvel, realiza swap do primeiro bloco grande o bastante para alocação
* - Caso o bloco livre seja maior que o novo processo, deve-se fazer o ajuste do espaço disponÃvel,
* eventualmente aglutinando áreas livres
*
* PARÂMETROS:
* - Ponteiro de ponteiro para memória principal
* - Ponteiro de ponteiro para memória secundária
* - Função com estratégia recuperação de espaço disponÃvel (first-fit, best-fit e worst-fit)
*
*/
void executa_proximo_processo_memoria_secundaria(queue_t** memoria_principal, queue_t** memoria_secundaria, queue_t* func(queue_t*, int)) {
}
/**
* - localiza o próximo bloco utilizado na memória principal e o libera
* - Realiza a devida aglutinação de memória nos espaços livres
* RETORNA:
* - 1 se conseguiu remover
* - 0 se ocorreu algum problema caso o processo não esteja na memória principal
*/
int remove_processo_memoria_principal(queue_t** memoria_principal, queue_t* processo_memoria) {
}
/**
* Procura na fila um espaço disponÃvel para reserva a fim de comportar o bloco passado como parâmetro.
* Faz uso do algoritmo worst_fit.
*
* RETORNO:
* - ponteiro para o bloco de memória disponÃvel
* - NULL caso nenhum bloco disponÃvel comporte a reserva
*
*
*/
queue_t* worst_fit(queue_t* fila, int tamanho_bloco)
{
queue_t* atual = fila;
queue_t* maior = cria_no(0, 0);
while(atual->prox) {
if (atual->qtd_memoria > maior->qtd_memoria && atual->qtd_memoria >= tamanho_bloco && !atual->usado) {
maior = atual;
}
atual = atual->prox;
}
if (!maior->qtd_memoria) {
return NULL;
}
return maior;
}
/**
* Procura na fila um espaço disponÃvel para reserva a fim de comportar o bloco passado como parâmetro.
* Faz uso do algoritmo first_fit.
*
* RETORNO:
* - ponteiro para o bloco de memória disponÃvel
* - NULL caso nenhum bloco disponÃvel comporte a reserva
*
*
*/
queue_t* first_fit(queue_t* fila, int tamanho_bloco)
{
queue_t* atual = fila;
queue_t* primeiro;
while(atual->prox) {
if (atual->qtd_memoria >= tamanho_bloco && !atual->usado) {
primeiro = atual;
break;
}
atual = atual->prox;
}
if (!primeiro->qtd_memoria) {
return NULL;
}
return primeiro;
}
/**
* Procura na fila um espaço disponÃvel para reserva a fim de comportar o bloco passado como parâmetro.
* Faz uso do algoritmo best_fit.
*
* RETORNO:
* - ponteiro para o bloco de memória disponÃvel
* - NULL caso nenhum bloco disponÃvel comporte a reserva
*
*
*/
queue_t* best_fit(queue_t* fila, int tamanho_bloco)
{
queue_t* atual = fila;
queue_t* melhor = worst_fit(fila, tamanho_bloco);
while(atual->prox) {
if (atual->qtd_memoria >= tamanho_bloco && !atual->usado) {
if (atual->qtd_memoria < melhor->qtd_memoria) {
melhor = atual;
}
}
atual = atual->prox;
}
if (!melhor->qtd_memoria) {
return NULL;
}
return melhor;
}
tux-gpt - Assistente de IA para o Terminal
Instalação e configuração do Chrony
Programa IRPF - Guia de Instalação e Resolução de alguns Problemas
Como instalar no Linux Jogos da Steam só para Windows
Instalando o Team Viewer no Debian Trixie - problema no Policykit
O Que Fazer Após Instalar Ubuntu 25.04
Alguém poderia me ajudar a escolher peças pra montar um desktop? [RESO... (34)
Copiar Layout do Teclado para aplicar em outra Distribuição (4)