Professional Documents
Culture Documents
Resolvida
Conveniência
Execução de programas
Operações de I/O
Sistema de arquivos
Detecção de erros
Eficiência
Alocação de recursos
Proteção
Contabilizações
Espera sinal
Abre ou fecha arquivo
Lê relógio do sistema
Envia ou recebe mensagens
São extenções dos processadores que possibilitam separar os códigos sendo executados
na CPU por camadas. Nos CHIPs Intel Vão de RING0 (Kernel), passado por RING1
(Drivers), RING2 (Drivers) até RING3 (Aplicativos). O Kernel do Linux e do Windows
XP usam somente o RING0 e RING3. O código executado em RING0 é o que tem mais
privilégios (ou seja mais acesso ao hardware).
Um thread é uma unidade básica de execução na CPU. Um único processo pode ter
diferentes threads. Cada thread compreende um ID, um contador de programa, um
conjunto de registradores e uma pilha.
Os threads do mesmo processo compartilham com outros sua seção de código, sua seção
de dados, arquivos abertos e sinais.
int i;
i=fork();
if(i==0)
{
printf("Processo Filho\n");
}
else if(i>0)
{
printf("Processo Pai, que criou um filho numero: %i\n", i);
}
Significa dizer que operações de kernel (serviços ou funções) podem ser interrompidas.
Ocorre quando, um processo (ou mais) está em posse de um recurso não compartilhado
e esperando por outro recurso em posse de outro processo que também aguarda um
recurso. Essa espera pode ser do processo anterior ou outro processo de forma que feche
um ciclo. E conseqüentemente estes processos não sofrem preempção.
a) First-come, Fist-served
Pode ocorrer inanição (starvation), se o primeiro processo (que chega primeiro) da fila
for longo. Então o tempo de espera médio de todos os outros processos será muito
grande.
b) Shortest job first
c) Round Robin
d) Priority
Um processo que esteja pronto para executar, mas não tennha a posse da CPU pode ser
considerado bloqueado. Um algoritmo por prioridades pode deixar alguns processos de
baixa prioridade esperando indefinidamente pela CPU.
Define-se que os processos que estão esperando por muito tempo na fila de menor
prioridade são promovidos com maior prioridade.
Esta é uma solução a qual obriga que a região crítica seja dada a um dos processos por
vez,
em uma estrita alternância.
O problema com a solução de alternância estrita é que requer que os dois processos se
alternem precisamente, o que significa que o número de acessos de cada processo deve
ser exatamente igual ao do outro. Além disso pode acontecer de um dos processos não
poder prosseguir normalmente. Pois após entregar a seção crítica para o outro processo
não pode mais pedi-la novamente.
Região crítica é um segmento de código que enquanto está em execução não é permitido
a nenhum outro processo sua execução ao mesmo tempo. Pode ser a operação em
tabelas, arquivos e assim por diante.
P0: flag[0] = 1;
turn = 1;
P1: flag[1] = 1;
while (flag[1] == 1 && turn == 1)
turn = 0;
{
while (flag[0] == 1 && turn == 0)
// busy wait
{
}
// busy wait
// critical section
}
...
// critical section
// end of critical section
...
flag[0] = 0;
// end of critical section
flag[1] = 0;
O algoritmo utiliza duas variáveis, flag e turn. O valor de flag 1 indica que o processo
quer entrar na região crítica. A variável turn guarda o ID do processo com a vez. A
entrada na região crítica é garantida para P0 se P1 não quiser entrar na região crítica ou
se P1 deu prioridade para P0 atribuindo o valor de turn para 0.
/* PRODUTOR*/
do{
wait(empty);
wait(mutex);
insere_buffer(elemento);
signal(mutex);
signal(full);
}while(1);
/*CONSUMIDOR*/
do{
wait(full);
wait(mutex);
remove_buffer(elemento);
signal(mutex);
signal(empty);
}while(1);
27. Resolva pelo menos 3 problemas de sincronização do Livro "The Little Book of
Semaphores".
(wikipédia)
FIFO é uma fila normal onde o primeiro que entra é o primeiro que
sai. É simples e tem desempenho ruim (pode aumentar o
paginamento com aumento de memória o que é absurdo)
Ele não ficará mais acessível aos programas que quiserem o acessar
logo após o momento de remoção. Porém continuará acessível por
aqueles programas que já estavam com o arquivo aberto no
momento da remoção.
[] -> 1 bloco
[] -> 1 bloco
[] -> 1 bloco
[] -> 1 bloco
[] -> 1 bloco
[] -> 1 bloco
[] -> 1 bloco
[] -> 1 bloco
[] -> 1 bloco
[] -> 1 bloco
[] -> 1 bloco
[] -> 1 bloco
- Lista Encadeada
-Vetor de bits:
Mas são ineficientes a não ser que todo o vetor seja mantido na
memória principal.
-Lista Encadeada:
-Agrupamento:
Armazena os endereços de n blocos livres no primeiro bloco livre. Os
primeiros n-1 desses blocos estão realmente livres. O bloco final
contém os endereços de outros n blocos livres, e assim por diante.
Assim os endereços de um grande número de blocos livres podem ser
rapidamente encontrados.
-Contadores:
NOOP
ANTICIPATORY
DEADLINE
RAID5 faz paridade dos blocos, para isso tem que ter ao menos 3
discos. Com 1 bloco e a paridade (ou 2 blocos) é possível refazer o
outro bloco. As paridades ficam espalhadas nos discos.
Com RAID5 para cada 2 blocos tem 1 bloco de paridade. Então, como
os blocos estão espalhados, você teria 2000GB de espaço utilizável e
1 disco podendo falhar. Com RAID6 teria 1 paridade a mais que dá
(4-2)*750 = 1500GB de espaço utilzável, mas podendo falhar 2
discos.
Questão – Sistemas Operacionais –
Escalonamento
Depois de espairecer um pouco com os mapas mentais sobre História do Egito e da Grécia,
voltemos aos mapas mentais para concursos de TI.
Gabarito: A