Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
*************************
****** OBSERVAES ******
*************************
************************/
/*
1. As estrutura de fila, no armazena a prioridade. Toda vez que for armazenar na
FILA DE EXECUTADOS, deve-se concatenar
a prioridade da funo ao nome, conforme no exemplo da Rosseti, e.g. "celso:
0:". Dessa forma mais fcil do que
armazenar em todas as filas esse nmero. Mas essecutar essa tarefa fcil, s t
rabalhar sempre com a prioridade
seja da fila de prioridade, seja da lista de filas de prioridades.
*/
/************************
*************************
********** FIM **********
****** OBSERVAES ******
*************************
************************/
//
//
//
//
//
//
//
//
//
//
//
//
//
/************************
******** FUNES ********
****** estruturas *******
************************/
/*
TNO -> estrutura n da fila
TFila -> fila de estrutura TNO
TFila * cria (void);
int vazia (TFila *f);
void insere (TFila *f, char* owner, char *cmd);
TNO* retira (TFila *f);
*/
/************************
********** FIM **********
******** FUNES ********
**** fim estruturas *****
************************/
//
//
//
//
//
//
//
//
//
//
//
//
//
/*
/*
/*
/*
/*
/*
//
//
//
//
//
//
//
//
//
//
//
**********************
**********************
**********************
**********************
**********************
**********************
*/
*/
*/
*/
*/
*/
//
//
/************************
****** ESTRUTURAS *******
************************/
//funes de fila
//criando tipo fila
typedef struct no{
char usuario[20];
char codigo[30];
struct no *prox;
}TNO;
typedef struct fila{
TNO *ini, *fim;
}TFila;
//fim da criao tipo fila
/************************
********* FIM ***********
****** ESTRUTURAS *******
************************/
//
/*************************************************************************/
//
/*
/*
/*
/*
/*
/*
**********************
**********************
**********************
**********************
**********************
**********************
*/
*/
*/
*/
*/
*/
//
//
/************************
****** funes Fila *******
************************/
//funo para criar fila
TFila *processos;
//TFila *processos = cria();
}TLF;
//termino da parte que cria a lista de contem filas de prioridade
//
//
//funes de lista//
/************************
****** funes Lista ******
************************/
//Funo para iniciar lista
TLF* inicializa_l (void){
return NULL;
}
//funo para inserir novos processos
//temos que verificar se j existe um n para a prioridade do processo
//se existir, inserimos no final da fila desse n
//caso no exista, criamos o n da prioridade e inserimos na fila de processos
TLF* insere_processo_l (TLF *l, char *owner, char *cmd, int priority){
//caso a lista de prioridade esteja vazia
if (!l){
TLF* novo = (TLF*) malloc (sizeof(TLF));
novo->prox = NULL;
novo->prioridade = priority;
novo->processos = cria();
insere (novo->processos, owner, cmd);
return novo;
}
//busca se j existe um n para a prioridade
TLF *p = l, *q = NULL;
while((p)&&(p->prioridade <=priority)){
q = p;
p = p->prox;
}
/*if ((p) && (p->prioridade <= priority)){
q = p;
p = p->prox;
}*/
//se entrar aqui, quer dizer que ir ser criado um n no final da lista
//a prioridade a ser criada ser a menos privilegiada
if (!p){
TLF* novo = (TLF*) malloc (sizeof(TLF));
novo->prox = NULL;
novo->prioridade = priority;
novo->processos = cria();
insere (novo->processos, owner, cmd);
q->prox = novo;
return l;
}
//se entrar aqui sinal que no existe a prioridade ainda mas no o fim da fi
la
//ou insere na primeira posicao a prioridade
if ((q->prioridade < priority)||(!q)){
TLF* novo = (TLF*) malloc (sizeof(TLF));
novo->prox = q->prox;
novo->prioridade = priority;
novo->processos = cria();
insere (novo->processos, owner, cmd);
q->prox = novo;
return l;
}
//se entrar aqui sinal que j existe a prioridade
if (q->prioridade == priority){
insere (novo->processos, owner, cmd);
return l;
}
printf("Se exibir isso, deu problema!!!!!!\n");
return l;
}
//falta colocar uma funo para colocar o processo executado na lista de processos e
xecutados
//funo para executar os processos de prioridade diferente de zero (0)
TLF* executa_l (TLF *l, TFila *wow){
if (!l){
printf("No existe processos para serem executados\n UFAAAA!\n");
return l;
}
else{
TNO* process = retira (l->processos);
system(process->codigo);
printf("O processo de codigo %s do usuario %s foi executado\n",
process->codigo, process->usuario);
/*************************************************
//falta codigo aqui para inserir na lista de executados
/*************************************************
//falta inserir na lista de processos executados
*************************************************/
insere (wow, process->usuario, process->codigo);
//rotina para remover o no de prioridade x, caso ele no possua pr
ocessos para serem executados
if (vazia(l->processos)){
TLF *aux = l->prox;
libera(l->processos);
free (l);
l = aux;
}
free(process);
}
return l;
}
/************************
********** FIM **********
**** fim funes Lt *****
************************/
//
//
//
//
//
//
//
//
//
//
//
//
//
/*
/*
/*
/*
/*
/*
**********************
**********************
**********************
**********************
**********************
**********************
*/
*/
*/
*/
*/
*/
/*
/*
/*
/*
/*
/*
**********************
**********************
**********************
**********************
**********************
**********************
*/
*/
*/
*/
*/
*/
/* ********************** */
/*
/*
/*
/*
/*
//
//
//
//
//
//
//
//
//
//
//
//
//
**********************
**********************
**********************
**********************
**********************
*/
*/
*/
*/
*/
MAIN
MAIN
MAIN
}
fclose(f);
//Fim da funcao para ler os processos do arquivo
//Se tudo estiver correto, o arquivo acabou de ler todo
o arquivo e preencher corretamente todas as filas de execuo de acordo com a priori
dade
//Aps as listas estarem preenchidas, vamos retornar ao me
nu, para que o usuario possa escolher uma nova opcao entre executar, imprimir as
listas
}
/*************************************************************/
if (choose == 2){
//Funcao para executar o processo
if(!vazia(processo_zero)
executa_processo(processo_zero, executado);
else
processo executa_l (processo, executado);
//Fim da funcao para executar o processo
}
/***************************************************************
/
if (choose == 3){
//Funcao para ler as filas de processos de todas as prio
ridades
if(vazia(processo_zero))
printf("Nao temos processo de prioridade ZERO pa
ra ser executado\n");
else
imprime(processo_zero);
TLF *p = processo;
while(!p){
printf("Processos de prioridade %d: \n", p->prio
ridade);
imprime(p->processos);
p = p->prox;
}
//Fim da funcao para imprimir as filas de processos
}
/***********************************************************/
if (choose == 4){
//Funcao para imprimir os processo executados
printf("Imprimindo os processos que ja foram executados\
n");
if(vazia(executado))
printf("Ainda nao foi executado nenhum processo"
);
else
imprime(executado);
//Fim da funcao para imprimir os processos executados
}
/**********************************************************/
else{
printf("Codigo invalido\n");
}
choose = menu();
}
return 0;
}
/************************
******* fim MAIN ********
************************/