Sistemas Operativos
Processos, threads e eventos
Multi-tarefa
•
execução, em paralelo, de programas nomesmo computador
•
cada instância em execução denomina-seprocesso (conceito central num SO!)
•
pseudo-paralelimo: execução de sistemasmultiprograma num computador com um único processador
Pseudo-paralelismo
•
Porquê pseudo?Processos vs. Programas
•
programa é um ficheiro executável•
um processo é um objecto do sistema operativoque suporta a execução dos programas
•
um processo pode executar vários programas•
um programa ou partes dele podem serProcesso como
máquina virtual
•
um processo tem•
espaço de endereçamento•
repertório de instruçõesHierarquia
•
informação nos subprocessos são herdadasProcessos
•
o contexto de execução de um processo(ou seja, o seu estado) compreende
•
código•
dados•
estado do processador (registos)•
recursos (ficheiros, ...)Informação sobre um
processo
Processo
•
SO deverá ser capaz de•
criar, suspender, e reiniciar a execução deprocessos
•
suportar comunicação entre processosProcessos
•
competem por recursos para executar assuas tarefas
•
cabe ao sistema operativo fazer o escalonamentoEstados de um processo
•
em execução•
foi-lhe atribuído CPU•
bloqueado•
o processo está logicamente impedido deprosseguir, porque lhe falta um recurso
•
do ponto de visto do SO, transição voluntáriaPrimitivas de despacho
•
bloqueia(evento)•
coloca processo na fila de processosparados à espera do evento
•
invoca próximo processo•
liberta(evento) ou liberta(processo, evento)•
se processo não esta a espera de maisPrimitivas de despacho
•
proximo_processo()•
selecciona um dos processos existentesna lista de processos prontos a executar
•
executa a comutação de contexto•
salvaguarda contexto volátil doprocesso corrente
•
carrega contexto do processoPrincipais decisões
•
Qual o próximo processo?•
Quando começa a executar?•
Durante quanto tempo?Criação de um
processo
Eliminação de
processos
•
eliminação do processo quando o programatermina, eliminando dados e recursos
•
sair([estado]), estado = erro \/ !erro•
eliminação de outro processo•
eliminarProc(id)Terminação de
processo filho
•
em certos casos, o processo pai podequerer bloquear esperando a terminação do processo filho
Multiprogramação
Benefícios
-•
maximiza o tempo de utilização do CPU•
utilização do CPU = 1 - pn•
n é o número de processos•
p fracção de tempo em espera por I/OUnix - Processos
Processos em Unix
•
identificação de um processo•
inteiro pid•
alguns pid’s estão pre-atribuídos•
0 é o swapper (gestão de memória)Processos em Unix
•
os processos relacionam-se de forma hierárquica•
o processo herda o ambiente do pai•
o processo sabe o pid do pai•
se processo pai terminar, os subprocessos sãoProcessos em Unix
•
espaço de endereçamento (modo utilizador)•
três zonas (segmentos)•
.text, dados, e stack•
espaço de endereçamento (modo kernel)Processos em Unix
•
processos também tem associado umcontexto de execução em modo utilizador contendo as variáveis de ambiente
•
HOME, SHELL, PATH, ...•
herdado do processo pai•
em C é acessível através do parâmetro domain ou de uma variável externa
main (arc, arv, envp) extern char **environ
Criação de um Processo
•
id = fork()•
retorna o pid do processo•
pai = pid do filho•
filho = 0•
-1 erro•
sem parâmetros ; imagem do filho é umaTerminação
•
termina o processo, e liberta todos os recursosdetidos pelo processo
•
assinala ao processo pai a terminação•
void exit(status)•
status permite passar ao pai o estado emTerminação
•
em unix existe uma função para o processo paise sincronizar com a terminação de um processo filho
•
bloqueia o processo pai até que o filho termine•
int wait(int *status)•
status - estado de terminação do filhoExecução de um programa
•
o fork apenas permite lançar processo com omesmo código!
•
a função exec permite substituir a imagem doprocesso onde é invocada
•
não há retorno numa chamada com sucesso•
parâmetros: valores passadosExecução de um programa
•
int execl(char *fich, arg0,...argn, 0)•
int execv(char *fich, *argv[])•
fich = caminho do ficheiroShell
•
shell é um bom exemplo de fork e execAutenticação
•
um processo tem associado 2 ids atribuídosaquando do login (uid, gid)
•
uid e gid são obtidos no ficheiro /etc/passwd•
uid e gid são herdados pelos filhos•
superuser é um uid especial (0, associado aoProtecção
•
protecção de recursos em unix é semelhanteao modelo listas de controlo de acesso
•
protecção definida em três categorias•
dono (owner)•
grupo (group)Set uid
•
mecanismo de set uid (suid) permite alterardinamicamente o utilizador
•
duas variantes•
bit de setuidBit setuid
•
ficheiro executável pode conter uma indicaçãoespecial para provocar a alteração do uid
•
processo assume identidade do dono•
exemplo: passwdThreads
•
... múltiplos fluxos de execução no mesmoThreads
•
mecanismo para criar fluxos de execução,partilhando um contexto comum
Threads vs. processos
•
Porque não usar processos?•
processos obrigam ao isolamento•
espaços de endereçamento disjuntos•
dificuldade em partilharThreads: exemplos
•
servidor (e.g., web)•
processador de textoThreads: operações
•
operações sobre as threads•
id = criarThread(procedimento)•
eliminarThread(id)API POSIX
•
err = pthread-create(&tid, attr, func, arg)•
tid = id da tarefa ; attr = atributos•
func = função a executar•
arg = parâmetros para a função•
pthread-exit(void *value_ptr)•
int pthread-join(pthread_t thread, void **value_ptr)Threads
POSIX vs. Windows
Tarefas Criar Sincronizar com Terminacao Transferir controlo adormecer terminar POSIX pthread create pthread join pthread yield sleep pthread exit Windows CreateThread WaitForSingleObject SwitchToThread sleep ExitThread
Programação em
ambiente multitarefa
•
threads partilham o mesmo endereçamento•
acesso às mesmas variáveis globais•
modificação de variáveis globais deve ser feitocom precaução
•
para resolver estes problemas, sincronizaçãoImplementação
•
threads núcleothreads utilizador
•
as tarefas são implementadas numa biblioteca noespaço de endereçamento do utilizador
•
ideia proveniente das LP•
núcleo apenas vê um processothreads utilizador
•
comutação entre tarefas é explicita•
thread-yield•
pode ser contornado usando interrupções•
problema: e se uma tarefa faz chamadabloqueante??
threads núcleo
•
implementação no núcleo do SO•
mais comunsthreads núcleo vs. utilizador
•
capacidade de utilização em diferentes SO?•
velocidade de criação e comutação?•
tirar partido da execução paralela emmultiprocessadores?
•
aproveitamento do CPU quando uma tarefaEventos
•
... Rotinas para tratamento de acontecimentosRotinas assíncronas
•
certos acontecimentos devem ser tratados,embora não seja possível prever a sua ocorrência
•
ctr-c, time-out, div-0•
como tratá-los na programação sequencial?•
uma thread por acontecimento?Eventos
Rotinas Assíncronas
Signals
•
... são acontecimentosassíncronos em unix
•
definidos em signal.hTratamento de signals
•
omissão - termina o processo•
ignorado - alguns sinais não podem serignorados (ex., SIGKILL)
•
associado a uma rotina de tratamento(handler)
Chamada de sistema:
signal
Chamada de sistema: kill
•
envia um signal ao processo pid•
nome da função bem escolhido?!Outras funções
associadas aos signals
•
unsigned alarm(unsigned int sec)•
depois de sec segundos SIGALARM é enviadopara o processo