• Nenhum resultado encontrado

Sistemas Operativos. Processos, threads e eventos. Rui Maranhão

N/A
N/A
Protected

Academic year: 2021

Share "Sistemas Operativos. Processos, threads e eventos. Rui Maranhão"

Copied!
63
0
0

Texto

(1)

Sistemas Operativos

Processos, threads e eventos

(2)

Multi-tarefa

execução, em paralelo, de programas no

mesmo computador

cada instância em execução denomina-se

processo (conceito central num SO!)

pseudo-paralelimo: execução de sistemas

multiprograma num computador com um único processador

(3)

Pseudo-paralelismo

Porquê pseudo?

(4)

Processos vs. Programas

programa é um ficheiro executável

um processo é um objecto do sistema operativo

que suporta a execução dos programas

um processo pode executar vários programas

um programa ou partes dele podem ser

(5)

Processo como

máquina virtual

um processo tem

espaço de endereçamento

repertório de instruções

(6)

Hierarquia

informação nos subprocessos são herdadas

(7)

Processos

o contexto de execução de um processo

(ou seja, o seu estado) compreende

código

dados

estado do processador (registos)

recursos (ficheiros, ...)

(8)

Informação sobre um

processo

(9)

Processo

SO deverá ser capaz de

criar, suspender, e reiniciar a execução de

processos

suportar comunicação entre processos

(10)

Processos

competem por recursos para executar as

suas tarefas

cabe ao sistema operativo fazer o escalonamento

(11)
(12)

Estados de um processo

em execução

foi-lhe atribuído CPU

bloqueado

o processo está logicamente impedido de

prosseguir, porque lhe falta um recurso

do ponto de visto do SO, transição voluntária

(13)

Primitivas de despacho

bloqueia(evento)

coloca processo na fila de processos

parados à espera do evento

invoca próximo processo

liberta(evento) ou liberta(processo, evento)

se processo não esta a espera de mais

(14)

Primitivas de despacho

proximo_processo()

selecciona um dos processos existentes

na lista de processos prontos a executar

executa a comutação de contexto

salvaguarda contexto volátil do

processo corrente

carrega contexto do processo

(15)

Principais decisões

Qual o próximo processo?

Quando começa a executar?

Durante quanto tempo?

(16)

Criação de um

processo

(17)

Eliminação de

processos

eliminação do processo quando o programa

termina, eliminando dados e recursos

sair([estado]), estado = erro \/ !erro

eliminação de outro processo

eliminarProc(id)

(18)

Terminação de

processo filho

em certos casos, o processo pai pode

querer bloquear esperando a terminação do processo filho

(19)

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/O

(20)

Unix - Processos

(21)

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)

(22)

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ão

(23)

Processos em Unix

espaço de endereçamento (modo utilizador)

três zonas (segmentos)

.text, dados, e stack

espaço de endereçamento (modo kernel)

(24)

Processos em Unix

processos também tem associado um

contexto 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 do

main ou de uma variável externa

main (arc, arv, envp) extern char **environ

(25)

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 é uma

(26)
(27)

Terminação

termina o processo, e liberta todos os recursos

detidos pelo processo

assinala ao processo pai a terminação

void exit(status)

status permite passar ao pai o estado em

(28)

Terminação

em unix existe uma função para o processo pai

se 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 filho

(29)
(30)

Execução de um programa

o fork apenas permite lançar processo com o

mesmo código!

a função exec permite substituir a imagem do

processo onde é invocada

não há retorno numa chamada com sucesso

parâmetros: valores passados

(31)

Execução de um programa

int execl(char *fich, arg0,...argn, 0)

int execv(char *fich, *argv[])

fich = caminho do ficheiro

(32)
(33)

Shell

shell é um bom exemplo de fork e exec

(34)

Autenticação

um processo tem associado 2 ids atribuídos

aquando 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 ao

(35)

Protecção

protecção de recursos em unix é semelhante

ao modelo listas de controlo de acesso

protecção definida em três categorias

dono (owner)

grupo (group)

(36)

Set uid

mecanismo de set uid (suid) permite alterar

dinamicamente o utilizador

duas variantes

bit de setuid

(37)

Bit setuid

ficheiro executável pode conter uma indicação

especial para provocar a alteração do uid

processo assume identidade do dono

exemplo: passwd

(38)

Threads

... múltiplos fluxos de execução no mesmo

(39)

Threads

mecanismo para criar fluxos de execução,

partilhando um contexto comum

(40)

Threads vs. processos

Porque não usar processos?

processos obrigam ao isolamento

espaços de endereçamento disjuntos

dificuldade em partilhar

(41)

Threads: exemplos

servidor (e.g., web)

processador de texto

(42)

Threads: operações

operações sobre as threads

id = criarThread(procedimento)

eliminarThread(id)

(43)

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)

(44)
(45)
(46)

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

(47)

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 feito

com precaução

para resolver estes problemas, sincronização

(48)

Implementação

threads núcleo

(49)

threads utilizador

as tarefas são implementadas numa biblioteca no

espaço de endereçamento do utilizador

ideia proveniente das LP

núcleo apenas vê um processo

(50)

threads utilizador

comutação entre tarefas é explicita

thread-yield

pode ser contornado usando interrupções

problema: e se uma tarefa faz chamada

bloqueante??

(51)

threads núcleo

implementação no núcleo do SO

mais comuns

(52)

threads núcleo vs. utilizador

capacidade de utilização em diferentes SO?

velocidade de criação e comutação?

tirar partido da execução paralela em

multiprocessadores?

aproveitamento do CPU quando uma tarefa

(53)

Eventos

... Rotinas para tratamento de acontecimentos

(54)

Rotinas 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?

(55)

Eventos

(56)

Rotinas Assíncronas

(57)

Signals

... são acontecimentos

assíncronos em unix

definidos em signal.h

(58)

Tratamento de signals

omissão - termina o processo

ignorado - alguns sinais não podem ser

ignorados (ex., SIGKILL)

associado a uma rotina de tratamento

(handler)

(59)

Chamada de sistema:

signal

(60)
(61)

Chamada de sistema: kill

envia um signal ao processo pid

nome da função bem escolhido?!

(62)

Outras funções

associadas aos signals

unsigned alarm(unsigned int sec)

depois de sec segundos SIGALARM é enviado

para o processo

pause()

aguarda a chegada de um signal

unsigned sleep(unsigned int sec)

(63)

Sumário

programa vs. processo vs. thread

mecanismos em sistemas unix

eventos

Referências

Documentos relacionados