-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdefinitions.h
159 lines (126 loc) · 5.46 KB
/
definitions.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
* -------------------------------------------------
* ~ ARQUIVO DE CABEÇALHO DE DEFINIÇÕES
* -------------------------------------------------
*
* Descrição: Arquivo de cabeçalho contendo definições de bibliotecas, macros e tipos.
* Arquivo: definitions.h criado em 5 de Setembro de 2015, às 12:03.
* Professor: Luiz Fernando Bessa Seibel
* Instituição: Pontifícia Universidade Católica do Rio de Janeiro
* Disciplina: Sistemas de Computação (INF1019)
* Autoras:
* - - - - - - - - - - - - - - - - - - - - - - - - -
* -> Daniela Brazão Maksoud
* -> Curso: Ciência da Computação
* -> Matrícula: 1321873
* - - - - - - - - - - - - - - - - - - - - - - - - -
* -> Thaíssa Falbo
* -> Curso: Engenharia da Computação
* -> Matrícula: 1421110
* - - - - - - - - - - - - - - - - - - - - - - - - -
*
* Este arquivo é parte do programa principal do Simulador de Gerenciador
* de Memória.
*
* O Simulador de Gerenciador de Memória é um software livre; você
* pode redistribuí-lo e/ou modificá-lo dentro dos termos da Licença
* Pública Geral GNU como publicada pela Fundação do Software Livre
* (FSF); na versão 3 da Licença.
*
* Este programa é distribuído na esperança de que possa ser útil,
* mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO
* a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
* Licença Pública Geral GNU para maiores detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU junto
* com este programa, Se não, veja <http://www.gnu.org/licenses/>.
*
*/
#ifndef DEFINITIONS_H
#define DEFINITIONS_H
/* BIBLIOTECAS */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <signal.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <termios.h>
#include <time.h>
#include <pthread.h>
/* MACROS */
/* Booleano */
#define TRUE 1
#define FALSE 0
/* Cores */
#define ANSI_COLOR_RED "\x1b[31m"
#define ANSI_COLOR_GREEN "\x1b[32m"
#define ANSI_COLOR_YELLOW "\x1b[33m"
#define ANSI_COLOR_BLUE "\x1b[34m"
#define ANSI_COLOR_MAGENTA "\x1b[35m"
#define ANSI_COLOR_CYAN "\x1b[36m"
#define ANSI_COLOR_RESET "\x1b[0m"
/* Tamanhos fixos */
#define TAM_STR 100 /* Tamanho da string máxima */
#define TAM_VET 50 /* Tamanho do vetor máximo */
#define TAM_MEM 16 /* Tamanho da memória em Mb */
#define QTD_BLOC 5 /* Quantidade de blocos de memória */
#define FATIA_TEMPO 10 /* Time slice dos processos */
#define NUM_THREADS 2 /* Quantidade de threads */
/* Erros tratados */
#define ERR_FOPEN 1 /* Erro na abertura de um arquivo */
#define ERR_DUP 2 /* Erro na duplicação de uma entrada ou saída com dup */
#define ERR_DUP2 3 /* Erro na duplicação de uma entrada ou saída com dup2 */
#define ERR_INPUT 4 /* Arquivo de entrada inválido */
/* ESTRUTURAS */
/* Estrutura de uma informação sobre um processo */
struct estrutura_info {
char nome[5]; /* Nome da informação (exec ou io) */
int tempo; /* Tempo de execução para exec ou de espera para io */
};
typedef struct estrutura_info info;
/* Estrutura de um processo */
struct estrutura_processo {
int numero; /* Número identificador do processo */
int tamanho; /* Tamanho do processo em Mb */
int qtd_info; /* Quantidade de informações do processo */
time_t inicio_execucao; /* Horário do início da execução do processo em segundos */
time_t fim_execucao; /* Horário do fim da execução do processo em segundos */
info *infos; /* Vetor de informações do processo */
int tempo_total; /* Tempo total do processo */
int bloq; /* Indica se o processo está bloqueado ou não.
* 0 => Não está bloqueado.
* 1 => Está bloqueado.
*/
};
typedef struct estrutura_processo processo;
/* Estrutura de um processo bloqueado */
struct estrutura_fila_bloq {
int numero; /* Número identificador do processo */
int tamanho; /* Tamanho do processo em Mb */
int qtd_info; /* Quantidade de informações do processo */
time_t inicio_execucao; /* Horário do início da execução do processo em segundos */
time_t fim_execucao; /* Horário do fim da execução do processo em segundos */
info *infos; /* Vetor de informações do processo */
int tempo_total; /* Tempo total do processo */
};
/* Vetor de estruturas de processos bloqueados */
struct estrutura_fila_bloq fila_bloq[TAM_VET];
/* Estrutura de um bloco (partição fixa) de memória */
struct estrutura_bloco_memoria {
int tamanho; /* Tamanho do bloco de memória em Mb */
int isAlocado; /* Equivale:
* - a 0, caso o bloco de memória não esteja alocado.
* - ao número identificador do processo alocado no bloco de memória.
*/
};
typedef struct estrutura_bloco_memoria bloco_mem;
/* Estrutura da memória */
struct estrutura_memoria {
int tamanho; /* Tamanho da memória em Mb */
bloco_mem bloco[QTD_BLOC]; /* Vetor de partições da memória */
};
typedef struct estrutura_memoria mem;
#endif /* DEFINITIONS_H */