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;
}
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Instalando Discord no Debian 13
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Software livre - será que eu estou tão errado assim? (10)
Boot do PosRog so funciona em notebook (1)