Escolar Documentos
Profissional Documentos
Cultura Documentos
Operativos
IST - LEIC - 1º Semestre
Autoria
ð estes transparentes:
wsão baseados no livro “Fundamentos de Sistemas Operativos”, de José Alves
Marques e Paulo Guedes, Editorial Presença ;
wabrodam apenas a primeira parte da matéria, i.e., introdução aos sistemas
operativos, noção de processo, gestão de processos e sincronização;
wresultam do esforço de vários docentes do IST que, ao longo de vários anos, têm
leccionado a disciplina de Sistemas Operativos: Paulo Ferreira, André Zúquete,
Luís Veiga;
wsão disponibilizados livremente para fins didácticos em www.rnl.ist.utl.pt/~ic-so;
wserão constantemente melhorados de modo a satisfazer as necessiadades de
aprendizagem dos alunos.
Page 1
Introdução
ð o que é um sistema operativo?
wconjunto de programas que servem para gerir e vigiar a execução dos programas de
diversos utilizadores e que promovem a gestão dos recursos de um computador
ð quais os objectivos?
winterface com o utilizador simples e fácil de utilizar (máquina virtual)
wexploração eficiente dos recursos hardware da máquina (tempo de processamento,
memória volátil e de massa, periféricos de comunicação)
Page 2
Recursos Físicos (hardware)
ð processador (CPU)
ð memória volátil (RAM)
ð periféricos:
wterminais
wdiscos
woutros (diskettes, bandas, CDs, impressoras, scanners, etc.)
ð especiais:
winterrupções do processador
wrelógio de tempo real
winstruções privilegiadas
wsuporte para memória virtual e protecção de memória
Evolução histórica
Sem Sistema Operativo (UNIVAC, IBM 701, IBM 650)
Multiprogramação (Multics)
Tempo Partilhado
Memória Virtual (UNIX)
Sistemas Distribuídos
Page 3
Monitor de Controlo
ð permite ao utilizador: carregar programas em memória, editá-los e
verificar a sua execução
ð cada utilizador tem um determinado tempo atribuído durante o
qual tem o computador apenas para si
ð resultados dos programas: listagens, fitas perfuradas
ð monitor é formado por um conjunto de utilitários:
winterpretador de linguagem de comando
wcompilador
weditor de ligações (linker)
wcarregador de programas em memória (loader)
wutilitários para controlo de periféricos (consola, leitor de cartões, etc.)
ð desvantagem: computador está parado a maior parte do tempo
Page 4
Multiprogramação
ð mecanismo de interrupções permite multiplexar o processador
entre várias actividades concorrentes
ð execução concorrente de vários programas:
wpermite optimizar a utilização do processador
wex.: P1 acede ao disco e ica bloqueado enquanto o controlador de disco funciona;
durante esse tempo, P2 pode ser executado pelo processador
wimplica mudança de contexto rápida, logo os programas têm de estar em memória
ð memória é limitada:
wswapping (guardar P1 em disco e carregar P2 em memória)
wimplica código recolocável (numa outra posição de memória)
Page 5
Sistemas Operativos: tempo virtual e real
ð tempo virtual:
wtempo de execução dos programas não tem relação com o tempo cronológico
exterior ao computador
ð tempo real:
wnoção do tempo é relevante
wtem como objectivo garantir que o computador pruduz uma resposta a um
acontecimento externo num intervalo de tempo limitado previamente especificado
ð várias gradações de tempo real:
wcontrolo de processos industriais
wsistemas transaccionais
wetc.
Critérios de Qualidade
ð fiabilidade:
wnão existência de erros intrínsecos
wtolerância a faltas/falhas nos recursos físicos
ð eficiência:
wtempo de resposta nos sistemas de tempo partilhado
wtempo de processador aproveitado/desaproveitado
wdesempenho - trabalhos/unidade de tempo
wpartilha dos recursos
wdegradação do desempenho com o aumento da carga
ð capacidade/facilidade de manutenção:
wconfiguração
wcorrecção de erros
wevolução
Page 6
Realização
Aplicações
Interface do Sistema
Sistema de Ficheiros
Comunicação e E/S
Gestão de Memória
Gestão de Processos
Modelo Computacional
ð conjunto de objectos do sistema operativo e operações que os
permitem manipular
Sistema de Ficheiros
Modelo Computacional
Comunicação e E/S
Sistema de Ficheiros
Gestão de Memória
Comunicação e E/S
Page 7
Gestão de Processos: conceitos de base
ð processador
welemento físico que executa uma acção definida numa instrução máquina
ð processo
wentidade “activa” no sistema operativo no âmbito da qual é executada uma
sequência de acções determinada por um programa
ð programa
wsequência de acções, descritas numa determinada linguagem, sem actividade
própria
ð aplicação
wconjunto de actividades cooperantes a decorrer em um ou mais processos segundo
as directivas de um ou mais programas
ð executável (ficheiro)
wbloco de instruções máquina e dados resultantes da tradução (compilação) de um
programa
Page 8
Gestor de Processos: objectivo
ð criação e eliminação de processos
ð suportar a co-existência de processos:
watribuição do processador aos processos
wtratamento das interrupções da actividade dos processos
wfornecimento de mecanismos de sincronização entre processos
wlimitação das interferências destrutivas entre processos
ð manutenção de uma hierarquia de processos em curso
Utilizador 1 Utilizador 2
processo inicial processo inicial
subprocesso 1 subprocesso 1
subprocesso 2
subprocesso 3 subprocesso 3
Utilizador 1 Utilizador 2
processo inicial processo inicial
subprocesso 1 subprocesso 1
subprocesso 2
subprocesso 3 subprocesso 3
Page 9
Gestor de Processos: modelo computacional
ð criação de processos
wIdProcesso = CriarProc ( Código, Prioridade, ... )
•IdProcesso - identificador do processo no sistema.
•Código - ficheiro executável com o programa a executar pelo processo.
•Prioridade - importância relativa do processo no sistema.
ð eliminação de processos
wEliminarProc ( IdProcesso )
Concorrência
ð competição entre processos no acesso a um recurso
ð só um processador => pseudo-concorrência
wintercalação ou paralelismo lógico; ilusão de uma concorrência efectiva
ð comutação de processos
wo processo a executar é sucessivamente retirado do processador para dar lugar a
outro
ð salvaguarda do contexto de execução
wquando um processo perde o processador há que guardar um conjunto de
informações (contexto de execução) que possibilitem o seu retorno como se nada
tivesse acontecido
ð programação concorrente
wdesenvolvimento de programas incluindo partes que podem ser executadas em
paralelo
Page 10
Pseudo-concorrência
P1
P2
P3
P1
P2
P3
Utilização do processador t
Representação de Processos
ð os programas do núcleo fazem a gestão do “ambiente” onde os
processos são executados
ð estes programas manuseiam estruturas de dados que representam a
estrutura física dos processos
ð cada processo é representado por uma descrição que contém toda a
informação relevante:
wcontexto de hardware
• registos do processador (acumulador, uso geral, contador de programa, stack pointer,
estado do CPU) e da unidade de gestão de memória
wcontexto de software (permanente e volátil)
•identificação
•ficheiro executável
•prioridade
•estado do processo
•outras informações (periféricos em uso, ficheiros abertos, directório por omissão,
programa em execução, etc.)
Paulo Ferreira - INESC/IST 22
Page 11
Gestão das Interrupções e Excepções
ð mecanismos de comunicação assíncrona entre o sistema e o
processador:
winterrupções
•notificações de acontecimentos globais à máquina (não dirigidas a um determinado
processo)
•controladas e tratadas exclusivamente pelo núcleo do sistema operativo
wexcepções
•notificações de acontecimentos relacionados com um processo e que devem ser
tratadas no seu contexto.
•controladas e tratadas pelo sistema operativo e (opcionalmente) pelos processos.
ð processamento de interrupções:
winterrupção gestor de interrupções rotina de tratamento/escalonamento
despacho
Page 12
Chamada a Funções Sistema
Programa do Utilizador
Executável
Rotina de biblioteca de
chamada à função sistema X
trap
Modo utilizador (não privilegiado)
Sistema operativo
Função Função
sistema A sistema Z
Page 13
Diagrama de Estados de um Processo
Em
Execução
Seleccionado pelo
Bloquear
Despacho
Retirado pelo
Despacho
Não executável
Executável
(bloqueado)
Desbloquear
Page 14
Núcleo do SO: gestão dos processos
Aplicações
Restantes Níveis
Multiplexagem
(scheduling)
Gestão
das Sincronização
Interrupções
Multiplexagem do Processador
ð despacho:
wverifica se o processo em execução é o mais prioritário; caso não seja (preempção):
•guarda o contexto hardware do processo em execução no respectivo descritor
•escolhe o processo mais prioritário entre os executáveis
•carrega o seu contexto hardware no processador
•transfere o controlo para o novo processo (instrução a executar: program counter)
wexecuta o processo em execução
wé activado sempre que existe a possibilidade de o processador ser comutado:
•quando o processo corrente termina ou fica bloqueado
•após uma interrupção ou uma chamada ao núcleo
ð escalonamento (scheduling):
wgestor do processador
wcontrola a prioridade dos processos de modo a optimizar a utilização de todos os
recursos do computador
Page 15
Escalonamento
ð objectivos:
wmaximizar a utilização do processador sem descurar o estado dos restantes
componentes do sistema (memória, periféricos, etc.)
wminimizar o custo computacional do algoritmo de escalonamento
ð time-slice:
wintervalo de tempo máximo que é atribuído a um processo
ð prioridade:
wrepresenta a importância do processo no algoritmo de atribuição do processador
ð preempção:
wretira o processador ao processo em execução sempre que um processo mais
prioritário fica executável
westado do núcleo do sistema operativo tem de estar consistente quando se dá a
preempção
Preempção
ð o que é:
wacção de retirar o processador a um processo em execução devido à existência de
outro mais prioritário
ð objectivo:
wpermite que os processos mais prioritários reajam rapidamente a um dado
acontecimento (reactividade aos acontecimentos externos)
ð custo:
wassociado à mudança de contexto (ex.: um processo só é retirado de execução
depois de ter usado processador durante um tempo mínimo)
ð quando ocore:
wna sequência de todas as acções susceptíveis de modificarem o estado dos
processos
ð exemplo (Unix):
wquando o processo em execução retorna a modo utilizador e existe um processo
mais prioritário executável
Paulo Ferreira - INESC/IST 32
Page 16
Políticas de Escalonamento (1)
ð categorias dos sistemas operativos:
wtempo real (tempo de resposta limitado perante eventos externos)
wtempo partilhado
ð as políticas não podem ter em conta apenas o uso do
processador; é necessário ter em conta outros recursos (ex.:
memória)
ð teoricamente seria interessante que a função de escalonamento
fosse invocada sempre que um recurso do sistema é atribuído
ou libertado (memória, prefiféricos, etc.)
ð o problema é que a própria função de escalonamento consome
recursos
Page 17
Políticas de Escalonamento (3)
wmultilista:
•usado em sistemas mistos de tempo partilhado (gestão circular) e tratamento por lotes
(gestão baseada na menor duração do trabalho)
•utilização de várias listas consoante o tipo de processos em execução
(fundamentalmente segundo o nível de interactividade)
•despacho escolhe sempre um processo da lista mais prioritária
wprioridades dinâmicas:
•ajuste da prioridade de acordo com o consumo de recursos (fundamentalmente tempo
de CPU)
•processos apenas numa lista que é ordenada em função das prioridades
wquantum variável:
•adaptar o valor do quantum ao comportamento dos processos
•aumentar o valor do quantum quando o sistema está muito carregado (limitar o custo
dos context-switch e aumentar a probabilidade do processo terminar)
•complexidade acrescida no sistema operativo
Gestão Multilista
lista de maior
utiliza o processador
prioridade (menos
processador usado)
utiliza o processador
lista de
menor
prioridade utiliza o processador
Page 18
Gestão Multilista com Quantum Variável
Prioridade Máxima tcpu = 0,02 s
Page 19
Exclusão Mútua
ð não-determinismo:
wum processo pode ser interrompido em instantes impossíveis de prever
ð secções críticas:
wconjuntos de instrucções que se devem executar de forma atómica
wdados partilhados devem ser manipulados no interior de secções críticas que
garantam uma exclusão mútua no acesso aos mesmos
ð sincronização:
wcontrolo do não-determinismo entre processos concorrentes
ð mecanismos:
wdirectos: funções que actuam directamente sobre o estado dos processos
windirectos: trincos lógicos e semáforos
Alocador de Memória
livre
livre
livre
livre
pilha com descritores
dos blocos livres
mapa de memória
Page 20
Alocador de Memória (cont.)
pilha[topo]= ptr;
char* pedeMem() {
if (topo >= 0) {
char* ptr = 0;
topo--;
topo++;
return ptr;
int topo;
}
}
}
Paulo Ferreira - INESC/IST 41
Instr. n topo++;
topo--;
Instr. n+1
Page 21
Exclusão Mútua: solução alg. básica
enum {PRIMEIRO = 1, SEGUNDO}; enum {FALSE, TRUE}; int nProc = PRIMEIRO
void procUm() { void procDois() {
while (TRUE) { /*testar possibilidade de acesso*/ while (TRUE) {
while (nProc == SEGUNDO) ; while (nProc == PRIMEIRO) ;
/* secção crítica */ /* secção crítica */
nProc = SEGUNDO; /*permite acesso ao outro proc.*/ nProc = PRIMEIRO; /*
} }
} }
Page 22
Algoritmo de Dekker
ð vantagens:
wnão impõe uma sequência de utilização alternada do recurso partilhado
ð desvantagens:
wapenas se aplica a dois processos
wo processo impedido de entrar fica em espera activa
winstruções não são indivisíveis
Page 23
Soluções Algorítmicas vs.
Modelo Computacional
ð são muito complexas
ð o programador tem uma carga adicional de trabalho
ð instruções de linguagens de alto nível não são indivisíveis
ð o modelo computacional do sistema operativo deve incorporar os
mecanismos necessários à implementação da exclusão mútua:
wé mais simples e mais eficaz
ð mecanismos indirectos:
wtrincos lógicos: variável booleana partilhada por vários processos que indica se
algum deles está numa determinada secção crítica
wsemáforos: variável inteira e fila de espera
ð mecanismos directos:
wfunções que actuam directamente sobre o estado dos processos
trinco = TRUE;
com Trinco
}
}
ptr = pilha[topo];
pilha[topo]= ptr;
#define MAX_PILHA 100
fechar(trincoMem);
fechar(trincoMem);
abrir(trincoMem);
abrir(trincoMem);
char* pedeMem() {
if (topo >= 0) {
topo++;
char* ptr = 0;
topo--;
return ptr;
int topo;
}
}
Page 24
Violação da Sincronização com um Trinco
Processo A: void fechar (int trinco) {
void fechar (int trinco) { while (trinco == TRUE);
while (trinco == TRUE); trinco = TRUE;
}
interrupção entre iteracções
rotina de interrupção => despacho void abrir (int trinco) {
trinco = FALSE;
Processo B: }
void fechar (int trinco) {
while (trinco == TRUE);
trinco = TRUE; ð trincos lógicos precisam
} de suporte especial para a
execução da secção crítica sua implementação:
interrupção
rotina de interrupção => despacho wteste e atribuição indivisível
whardware: instrução especial
Processo A:
trinco = TRUE; wsistema: inibição das
} interrupções
wmultiprocessador implica
t execução da secção crítica
gestão do bus
Paulo Ferreira - INESC/IST 49
Page 25
Diagrama de Estados de um Processo
Espera Activa/Starvation
Em
Execução
Seleccionado pelo Bloquear
Despacho
Retirado pelo
Despacho
Não executável
Executável
(bloqueado)
Desbloquear
Semáforo (Dijkstra)
ð um semáforo é constituído por
wuma variável de controlo s e por uma fila de espera (processos bloqueados)
ð que, para além da atribuição inicial, só pode ser modificada através
das primitivas
wesperar(s) = wait(s) = p(s)
wassinalar(s) = signal(s) = v(s)
ð semântica:
ws negativo ou nulo força o bloqueio do processo
ws positivo indica possibilidade de continuar a execução
Page 26
Operações Sobre os Semáforos
void Esperar () {
i = i -1; s <= 0 => bloqueia processo
if (i < 0) {
/* aceder ao descritor do processo em causa, retirar de
execução e colocar na fila de espera do semáforo */ s >0 => processo continua
}
}
void Assinalar () {
i = i + 1;
if (i <= 0) {
/* aceder ao primeiro descritor na fila de espera do
semáforo e transferir para fila de executáveis */
}
}
Implementação de Semáforos
fechar(trinco) fechar(trinco)
Esperar Assinalar
i = i - 1; i = i + 1;
s <= 0
abir(trinco) abir(trinco)
Page 27
Implementação de Semáforos (cont.)
void Esperar () {
fechar(trincoSem);
i = i - 1;
if (i < 0) {
/* aceder ao descritor do processo em causa, retirar de
execução e colocar na fila de espera do semáforo */
}
abrir(trincoSem);
}
void Assinalar () {
fechar(trincoSem);
i = i + 1;
if (i <= 0) {
/* aceder ao primeiro descritor na fila de espera do
semáforo e transferir para fila de executáveis */
}
abrir(trincoSem);
}
ð objectivo: ð objectivo:
wprimitivas gerais de sincronização wexclusão mútua de
processos nas primitivas de
sincronização
ð implementação: ð implementação:
wsoftware whardware
ð mecanismos de atraso: ð mecanismos de atraso:
wfila de espera wespera activa
ð tempo de atraso típico: ð tempo de atraso típico:
walguns segundos walguns microsegundos
Page 28
Sincronização com Semáforos
ð exclusão mútua no acesso a regiões críticas:
wsemáforo: ExcMut, inicialmente: ExcMut = CriarSemáforo (1)
wprograma: esperar (ExcMut) ... secção crítica ... assinalar (ExcMut)
ð cooperação:
wpermitir a um processo assinalar a outro o final de uma etapa de processamento
para que o segundo prossiga a execução do seu programa
wrequisito: P1 não passa do ponto L1 antes de P2 chegar a L2
wsemáforo: Cont, inicialmente: Cont = CriarSemáforo (0)
wcódigo de P1: ... esperar (Cont) L1: ...
wcódigo de P2: ... L2: assinalar (Cont) ...
ð gestão de recursos:
wimplementar uma política de gestão de recursos que permita:
•bloquear os consumidores na ausência de recursos livres
•assinalar a existência de recursos livres a consumidores à espera
ptr = pilha[topo];
pilha[topo]= ptr;
#define MAX_PILHA 100
assinalar(semExMut);
assinalr(semExMut);
esperar(semExMut);
esperar(semExMut);
char* pedeMem() {
if (topo >= 0) {
topo++;
char* ptr = 0;
topo--;
return ptr;
}
}
}
Page 29
Distribuidor de Memória com
assinalar(semExMut);
assinalr(semExMut);
esperar(semExMut);
esperar(semExMut);
assinalar(semMem);
esperar(semMem);
ptr = pilha[topo];
char* pedeMem() {
pilha[topo]= ptr;
return ptr;
topo++;
topo--;
}
Paulo Ferreira - INESC/IST 59
Page 30
Leitores-Escritores
}
enum {FALSE, TRUE};
}
int nLeitores, leitoresEspera, escritoresEspera;
int emEscrita;
semaforo Mutex, Leitores, Escritores; /* inicializados a 1, 0, 0 */
return j;
if (emEscrita || if (nLeitores > 0 ||
(escritoresEspera > 0)) { (leitoresEspera > 0) ||
estado[k] = Comer;
assinalar (semPriv[k]);
escritoresEspera ++;
Assinalar(Mutex); Assinalar(Mutex);
if (j == MAX) return 0;
Esperar(Leitores); Esperar(Escritores);
if ((estado[k] == pensarComer) &&
Esperar(Mutex);
leitoresEspera--; escritoresEspera --;
(estado[mod(k-1, MAX)] != Comer)) {
}
if (leitoresEspera > 0)
(estado[mod(k+1, MAX)] != Comer) &&
emEscrita = TRUE;
semaforo semPriv[MAX]; /* inicializado a 0 */
Page 31
} }
}
nLeitores ++;
Assinalar (Mutex);
}
for(;;) {
void acabaEscrita(){
testa(i);
Esperar(Mutex);
testa(i-1);
testa(i+1);
/* comer */
/* pensar */
Assinalar(Leitores);
assinalar(mutex);
assinalar(mutex);
nLeitores --;
Jantar dos Filósofos - solução
estado[i] = Pensar;
else
esperar(semPriv[i]);
Assinalar(Escritores);
Assinalar(Mutex) ; Assinalar(Mutex);
} }
62
61
Impasse ou Interblocagem (deadlock)
ð acontece quando as seguintes situações podem ocorrer:
wvários processos tentam aceder em exclusivo a diversos recursos
wos processos mantêm o acesso aos recursos já adquiridos enquanto esperam a
obtenção de acesso a outros
wos recursos não podem ser retirados aos processos que os detêm até serem
completamente utilizados
wexiste uma cadeia circular de processos na qual cada processo possui um ou mais
recursos que são pretendidos pelo processo seguinte
ð soluções:
wprevenção:
•aquisição de vários recursos sempre pela mesma ordem
•caso falhe a aquisição de um recurso, libertar todos os recursos detidos e recomeçar
wdetecção e eliminação forçada de estados de interblocagem
Interblocagem (deadlock)
Processo P1 Processo P2
Esperar(semA)
Esperar(semB)
Esperar(semA)
P2 fica bloqueado
t Esperar(semB)
P1 fica bloqueado
Page 32
Mecanismos de Sincronização Directos
ð funções que actuam directamente sobre os estado dos processos
ð suspensão e reactivação de processos:
wsuspender (IdProcesso)
wacordar (IdProcesso)
ð a capacidade de suspensão é frequentemente utilizada para realizar
mecanismos de atraso que funcionam como uma auto-suspensão:
wadormecer (Período)
ð não é de uso geral:
winterferência com outros utilizadores
widentidade do processo só é conhecida em tempo de execução
Em
Selecionado Execução
Suspender
pelo
Despacho Bloquear
Preempção Suspender
Não executável
Executável Suspenso
(bloqueado)
Desbloquear Acordar
Suspender
Acordar
Page 33
Controlador de Tarefas
ð processos:
wum processo com funções de relógio - função relogio
wum processo controlador - finção controlador
wNTAR processos, cada um desempenhando uma determinada tarefa - função tarefa
NTAR processos:
assinalar assinalar
relogio
Page 34