Академический Документы
Профессиональный Документы
Культура Документы
Processo
Tarefa
http://www.dei.isep.ipp.pt/~orlando/so2/threads.htm
Uma tarefa é uma unidade escalonável que possui o código a ser executado e também concorre
pelo processador. Pode-se dizer que uma tarefa/thread é um procedimento que é executado
dentro de um processo de uma forma independente.
Uma thread pode conter um controlo de fluxo independente e ser escalonável, porque mantêm
o seu próprio:
1. Pilha
2. Propriedades de escalonamento
Na multitarefa existem múltiplas tarefas por processo, e passa a existir comutação de tarefas,
enquanto o processo deixa de ser a entidade escalonável. É mais fácil e rápido comutar tarefas
que processos.
Vantagens da multitarefa
• tempo de criação
• tempo de libertação
• comutação
Programas concorrentes que utilizam múltiplos threads são mais rápidos do que implementados
como múltiplos (sub)processos. Como as threads compartilham os recursos do processo, as
operações de criação, troca de contexto e eliminação das threads geram um ganho de
desempenho.
As threads podem ser divididas em duas categorias: existem as tarefas do utilizador (ou seja, ao
nível do utilizador) puras e tarefas de kernel (ou seja, ao nível do núcleo).
Com as tarefas de utilizador, o kernel não sabe da sua existência e o seu suporte é através de
uma biblioteca de rotinas, que é um suporte interno num dado processo por software e que faz
a gestão interna das mesmas.
As tarefas de kernel são implementadas pelo núcleo do sistema, por chamadas ao sistema que
oferecem todas as funções de gestão e sincronização (o seu trabalho de gestão é efetuado pelo
kernel). O SO sabe da existência de cada thread e pode escaloná-las individualmente. Precisam
da comutação de modo, qualquer aplicação pode ser multitarefa, e a tarefa é a entidade
escalonável.
Vantagens e desvantagens das tarefas de utilizador puras
Vantagens:
Desvantagens:
Quando uma tarefa efetua uma chamada de sistema pode bloquear todo o processo.
Não tira partido do multiprocessamento, o kernel não sabe da existência de tarefas, comuta
processos, o tempo de alocação do processo mantem-se constante e a alocação de um processo
a um processador não permite execução concorrente de tarefas do mesmo processo.
Tarefas de Kernel
Quanto às tarefas de kernel, o trabalho de gestão é efetuado pelo kernel, que pode ser
considerado como o núcleo do SO. Consiste em programas que executam as atividades básicas,
alocação de recursos e a monitorização dos recursos do computador.
O kernel tem esta função(gerir as tarefas por processo) em todos os SO, como Windows, Linux,
e Mac OS X.
Qualquer aplicação pode ser multitarefa, e o escalonamento é feito com base na tarefa. Nas
tarefas do kernel, é também necessária a comutação de modo, o que implica a escolha da
próxima tarefa a ter tempo de processador.
Relacionamento Tarefa-Processo
SMP
No SMP, o kernel pode ser executado em qualquer processador, e cada processador efetua
autoescalonamento, o que é controlado pelo SO.
Preocupações do SO
Usa interfaces uniformes, possibilita a extensibilidade, é portátil, é fiável na medida que pode
ser testado mais facilmente, suporta sistemas distribuídos, suporte a SO orientado ao objeto.
Princípios da concorrência
Recurso partilhado/recurso crítico, pois apenas uma EE o pode usar em cada momento, as
variáveis partilhadas são chin e chout e o código que manipula o recurso corresponde à secção
critica, neste caso é utilizado a exclusão mútua, onde apenas 1 EE pode aceder à secção crítica,
excluindo o acesso a todas as outras.
Estas EEs são independentes, pois não existe a partilha de recursos, neste caso o SO deve de
regular os acessos aos recursos que as EEs estão a competir.
Estas EEs não sabem a identificação umas das outras, sabem que existem mais EEs além dela a
manipular o objecto, neste caso exibem cooperação na partilha do objecto e devem de assegurar
a coerência dos dados, poderão ocorrer problemas de controlo tais como, a exclusão mutua,
deadlock e starvation, e clara consistência de dados.
As EEs tem conhecimento direto umas das outras
Estas EEs estão habilitadas a comunicar umas com as outras, conhecem os seus identificadores
e trabalham juntas numa dada tarefa, exibindo assim cooperação que pode ser além da partilha
de um objecto. A comunicação é uma forma que as EEs tem em se sincronizar, normalmente é
realizada através de mensagens, tais como primitivas de envio/receção (SO ou linguagem de
programação).
• Performance
• Eficiência da execução
• Resposta
Não funciona em ambientes multiprocessador, porque se dá um bloqueio em cada processador.
Vantagens:
Semáforos
Representam uma comunicação por sinais. Uma EE bloqueia até receber um dado sinal.
Considerações
Weak Semaphore
Strong semaphore
Monitores
Composição
Um ou mais procedimentos
Sequência de inicialização
EE
Apenas uma pode residir dentro do monitor (o monitor garante exclusão mútua)
Análise:
Produtor e consumidor não têm acesso ao objeto partilhado – buffer faz parte do
monitor
Csignal implica perda de tempo de processamento na EE, pois se ainda não terminou o
trabalho, implica 2 comutações adicionais
O escalonamento não é fiável, pois a EE desbloqueada por csignal tem de ser a próxima a
ter o processador
Passagem de Mensagens
Adequação
Sistemas uniprocessador
Sistemas multiprocessador com memória partilhada
Sistemas distribuídos
Primitivas
Sincronização
Endereçamento
Necessidade de especificar as EE
Endereçamento directo
Endereçamento indirecto
Estruturas partilhadas > Mailboxes
Disciplina da Fila
FIFO
• Algoritmo clássico
• Mais simples de todas
Especificação de prioridade
Aula 7 – Deadlock
Principios do Deadlock
Recursos utilizáveis
Exclusão mútua
Guardar e esperar
Consequência potencial
Espera circular
Prevenção de Deadlock
Decisão dinâmica – prever se o recurso, uma vez atribuído, pode levar a deadlock
Duas formas básicas de evitar o deadlock – não iniciar o processo e não fornecer o recurso
Detecção de deadlock
Muito liberal
Starvation
Ocorre quando um processo nunca é executado, por haverem outros com prioridade mais
elevada.
Evitar o deadlock
Memória principal
Pipes
Buffer circular
Tipos de pipe
• Mensagens
Mailbox
Níveis de permissão
Leitura
Leitura/Escrita
Exclusão Mútua
• Semáforos
Apresentam-se em conjuntos
Generalização das primitivas signal e wait
- Operações de incremento/decremento
• Sinais
Mecanismo de software
Objetos de Sincronização
• Processo
• Tarefa
• Ficheiro
• Console Input
• File change notification-uma notificação de uma mudança no sistema de
ficheiros, quando tem sinal a mudança ocorre no sistema de ficheiros, uma
tarefa é libertada
• Mutex- suporta a exclusão mutua, quando tem sinal liberta o mutante, uma
tarefa é libertada
• Semáforo- contador que regula acesso a um recurso, quando tem sinal o valor
do semáforo desce até 0, todas as tarefas são libertadas
• Evento- anuncio que um evento de sistema ocorreu, quando tem sinal a tarefa
define o evento, todas as tarefas são libertadas
• Temporizador- contador que regista a passagem de tempo, quando tem sinal o
tempo expira, todas as tarefas são libertadas
A maneira que a memória é utilizada pelos processos é gerenciada pelo Sistema Operacional,
sua responsabilidade é alocar pedaços da memória para cada processo de acordo com o
tamanho necessário para execução do programa. Existem diversas formas de atribuir pedaços
da memória para um processo, abaixo seguem exemplos:
– Partições Fixas
O modelo de partição fixa divide o espaço da memória em lacunas bem definidas atribuindo um
tamanho específico para cada lacuna. Um processo de 5 kb precisaria de uma lacuna com
tamanho igual ou maior para poder existir.(desvantagem) Contudo esse modelo de partição gera
desperdícios como fragmentação interna e externa. A fragmentação interna ocorre quando o
tamanho do processo é menor que a área alocada, ou seja, uma lacuna com 6kb seja utilizada
para alocar um processo de 5kb desperdiçando memória. Outra maneira de fragmentação é a
externa que ocorre devido a não existência de uma área contígua na memória, ou seja, um
processo qualquer precisa de 5kb porém existem duas lacunas sendo uma de 2kb e uma 3kb,
porém em lugares separados.
– Partições Variáveis
Partições variáveis semelhantemente a partições fixas dividem o espaço da memória em lacunas,
porém quando um processo criado é menor que a lacuna o mesmo é dividido em duas partes
uma sendo a primeira ocupada pelo processo e a segunda com o espaço remanescente. Esse
modo de divisão da memória permite que o processo esteja em um espaço ideal eliminando a
fragmentação interna, contudo a fragmentação externa permanece pois o processo precisa de
uma área contíg0ua.
Partições de Tamanho Fixo - Desvantagens
Se uma partição não chega para o processo, é utilizado o overlaying
• fragmentação interna
Algoritmos de Colocação
BEST FIT
Esse mecanismo escolhe a melhor partição (bestfit), ou seja, aquela em que o processo deixa o
menor espaço sem utilização.
Next FIT
Algoritmo para partição dinâmica que inicia a busca a partir da posição da última alocação até
encontrar o primeiro bloco
FIRST FIT
Esse mecanismo escolhe a primeira partição (firstfit) livre, de tamanho suficiente para carregar
o processo.
Paginação:
A paginação é um processo de virtualização que permite que o programa possa ser espalhado
por áreas não contíguas de memória. Com isso, o espaço de endereçamento lógico de um
processo é dividido em páginas lógicas de tamanho fixo e a memória física é dividida em páginas
com tamanho fixo, com tamanho igual ao da página lógica. Nisso, o programa é carregado página
a página, cada página lógica ocupa uma página física e as páginas físicas não são
necessariamente contíguas. O endereço lógico é inicialmente dividido em duas partes: um
número de página lógica e um deslocamento dentro da página. Não existe fragmentação
externa, porém existe fragmentação interna. Além da localização a tabela de páginas armazena
também o bit de validade, “1” se a página está na memória “0” se a página não está na memória.
Segmentação:
trashing http://memoriavirtualunisc.blogspot.pt/p/trashing.html
Vantagens da segmentação
- Com memória virtual segmentada, uma estrutura de dados pode ter o seu próprio segmento,
simplificando a manipulação.
Paginação
A memória central é dividida por zonas de pequena dimensão, designadas por molduras ou
páginas físicas, todas do mesmo tamanho.
Para cada processo, o SO mantém na memória central uma tabela de páginas. Para cada página
virtual, a tabela de páginas indica a moldura onde a página está carregada
Endereço virtual
Algoritmos de paginação
Sua principal vantagem é a facilidade de implementação: uma lista de páginas ordenada pela
“idade”. Dessa forma, na ocorrência de uma falta de página a primeira página da lista será
substituída e a nova será acrescentada ao final da lista.
Algoritmo de substituição de páginas LRU
O LRU (Least Recently Used) é um algoritmo de substituição de página que apresenta um bom
desempenho substituindo a página menos recentemente usada. Esta política foi definida
baseada na seguinte observação: se a página está sendo intensamente referenciada pelas
instruções é muito provável que ela seja novamente referenciada pelas instruções seguintes e,
de modo oposto, aquelas que não foram acessadas nas últimas instruções também é provável
que não sejam acessadas nas próximas.
A implementação do LRU também pode ser feita através de uma lista, mantendo as páginas mais
referenciadas no início (cabeça) e a menos referenciadas no final da lista. Portanto, ao substituir
retira-se a página que está no final da lista. O maior problema com esta organização é que a lista
deve ser atualizada a cada nova referência efetuada sobre as páginas, o que torna alto o custo
dessa manutenção.
Este algoritmo mantém todas as páginas em uma lista circular (em forma de relógio). A ordem
mantida segue a sequência em que elas foram carregadas em memória. Além disso, é adicionado
um bit de uso que indica se a página foi referenciada novamente depois de ter sido carregada.
Ao precisar substituir uma página o algoritmo verifica se a página mais antiga está com o bit
zerado (o que significa que a página não foi mais referenciada) para ser substituída. Se ela não
estiver o bit é zerado e a próxima página da fila mais antiga será verificada. Esse processo
continua até que uma página antiga com o bit zerado seja encontrada para ser substituída.
Aula 12 – Escalonamento em Sistemas Uniprocessador
Determina quais os programas a serem admitidos para processamento que podem ser:
- Processos admitidos são suspenso são adicionados à fila para o escalonador de medio
prazo, este escalonamento faz parte da função de swapping tipicamente depende da
multiprogramação desejada.
O longo prazo em sistemas de partilha de tempo, exige um nível de saturação, este quando
atingido os pedidos são recusados, quando não atingidos o pedido é aceite.
RR - é preemptivo orientado ao time slice, a sua fila de espera dos processos vai sendo
rodada, entrando o novo processo na fila esta é rodada
SPN -não preemptivo, favorecendo o processo que demora menos tempo a ser
executado
SRT - é preemptivo, quando um processo novo chega a fila este seleciona o que demora
menos tempo para terminar
E/S
- Interno
- Comunicação
- Ritmo de transmissão
- Aplicação
- Complexidade do controlo
- Unidade de transferência
- Condições de erro
Escalonamento de disco
O disco físico possui numero de pistas, uma posição inicial do braço e direção inicial de
deslocamento do braço. As suas tarefas é designado a indicação dos pedidos a satisfazer e tem
como simplificações a não consideração da cabeça e o sector.
• LIFO: em que os pedidos são satisfeitos pela ordem inversa de chegada o sentido de
deslocamento inicial é irrelevante.
• SSTF: atende o pedido mais próximo da pista actual o sentido de deslocamento inicial é
irrelevante
• SCAN: em que atende os pedidos numa direção segundo SSTF até ao ultimo pedido,
começa baseado no sentido inicial de deslocamento se possível e ao usar o SSTF satisfaz
o pedido mais próximo, o sentido inicial neste caso já é relevante, inverte o sentido e
atende todos os restantes pedidos segundo o SSTF, pedidos adicionais são aceites
quando chegam.
• C-SCAN: em que atende os pedidos numa direção segundo o SSTF até ao ultimo pedido,
começa baseado no sentido inicial de deslocamento se possível e ao usar o SSTF satisfaz
o pedido mais próximo, neste caso o sentido inicial também é relevante, desloca-se para
o sentido oposto, mas não atende pedidos no sentido de deslocamento inverso ao inicial
retomando o processamento no sentido inicial, pedidos adicionais são aceites quando
chegam.
• F-SCAN: em que atende os pedidos numa direção segundo o SSTF até ao ultimo pedido,
começa baseado no sentido inicial de deslocamento se possível e o SSTF satisfaz o
pedido mais próximo, o seu sentido inicial é relevante, inverte o sentido e atende todos
os restantes pedidos segundo SSTF, pedidos adicionais são aceites depois de satisfeitos
todos os anteriores.
O ficheiro tem uma coleção de registos que possuem campos, é tratado como uma entidade
única, referenciado pelo nome, e pode-se fazer operações tais como a sua criação, manipulação
e remoção, também possuem permissões de acesso.
Faz parte do software do sistema, fornecendo serviços a aplicações e utilizadores, acesso aos
ficheiros efetuado através do gestor, e tem como vantagens o SO controlar mais facilmente o
recurso ficheiro e as aplicações possuírem forma uniforma de acesso, sem necessidade de
software adicional.
• Ficheiro pilha: stack file, mais simples de todos, os registos são colocados à medida
que são introduzidos, o registo consiste num burst de dados, ou seja a sua acumulação
e armazenamento, e a sua pesquisa de registo é uma busca exaustiva, pois o ficheiro
não tem uma estrutura ordenada.
• Ficheiro sequencial: forma mais comum de organização, usa uma formatação fixa para
os registos a ordem é determinada por campo chave, o seu armazenamento do valor
dos campos, possui tamanho e nome sendo os atributos do próprio ficheiro, a sua
procura é até ser encontrado o registo pretendido, pois a ordenação de registos facilita
o acesso.
Características: