Você está na página 1de 78

Sistemas Operacionais

Processos e Threads
Thiago Leite
<thiago.leite@udf.edu.br>
Processos e Threads
• Processo

• Programa em execução

• Todo processo é um programa?

• Mais: o programa é apenas parte do estado.

• Menos: programas podem gerar vários


processos.
Processos e Threads

• Abstração de processo

• permite execução de múltiplas tarefas


(multiprogramação)

• prevenir que um processo interfira em outro


Processos e Threads

• Cada processo possui um espaço de


endereçamento

• recursos de auxílio ao processo

• O processo e seu respectivo espaço de


endereçamento chamam-se “imagem do núcleo”
Processos e Threads
• Espaço de endereçamento

• Programa executável

• Dados do programa

• Registradores

• Arquivos abertos

• Alarmes pendentes

• Listas de processos relacionados


Processos e Threads
• Segmentos de um processo Unix

• Pilha

• conjunto de instruções de uma sub-rotina

• Heap

• extensão da memória

• BSS (Block Memory Starting with Symbol)

• variáveis não inicializadas

• Data

• variáveis inicializadas

• Texto

• instruções do programa
Processo Unix
Área de Endereçamento
Processos e Threads
• Multiprogramação

• vários processos em memória

• vários fluxos de execução

• processos desconhecem o momento que serão


executados

• apenas um contador de programa real


Multiprogramação
Somente um processo ativo em um determinado
instante
Processos e Threads

• Sistema operacional lida com a Tabela de


Processos

• estruturas de cada processo em execução


Processos e Threads

• Árvore de Processos

• Pode criar um ou mais processos filhos

• Processos filhos também podem criar processos


filhos
Árvore de Processos
Relação entre processos
Processos e Threads

• Hierarquias de processos

• Em Unix todos os processos


compõe uma árvore com a
raíz o INIT

• Em Windows todos os
processos são iguais
Processos e Threads

• Chamadas de sistema de gestão de processos

• criação e término de processos

• requisitar mais memória ou esperar o término de


outro processo
Processos e Threads
• Momentos em que os processos geralmente são
criados

• Início do sistema

• Execução de uma chamada de sistema de


criação

• Requisição do usuário

• Início de tarefa em lote (batch)


Processos e Threads

• Processos podem ser criados em

• Foreground

• Background
Processos e Threads

• Processos em Foreground

• processos sujeitos a interação do usuário

• usualmente processos do terminal de comandos


ou GUI
Processos e Threads

• Processos em Background

• daemons em Unix

• Disk And Execution


MONitor

• serviços em Windows
Processos e Threads

• Fluxo de dados para processos em Unix

• entrada padrão
saída de

• saída normal entrada Processo

saída
• saída com erro
Processos e Threads
• Término de processo

• Saída normal (voluntário)

• Saída por erro (voluntário)

• Erro fatal (involuntário)

• Cancelamento por outro processo (involuntário)


Processos e Threads
• Comunicação entre processos

• processo envia saída para entrada de outro


processo

• dois processos solicitando o mesmo recurso

• um processo depende de outro para realizar


uma tarefa
Pipe Unix
Saída de um processo e entrada de outro
Processos e Threads

• Processos em Unix

• PID (Process IDentifier)

• identificação de um processo

• número utilizado para manipular os processos


e enviar sinais (alarmes)
Processos e Threads
• Processos em Unix

• Possui um UID (User IDentifier) associado

• Vários UIDs podem pertencer a um GID


(Group IDentification)

• Sistemas baseados em Unix possuem um UID


especial com super-poderes.
Processos e Threads
• Outros elementos de processos em Unix

• Ambiente de execução (Ex: PATH)

• Diretório de trabalho

• Instruções do programa

• Registradores e Pilha de instruções

• Heap (alocação de memória dinâmica)

• Descritores de arquivos

• Ações de sinais

• Bibliotecas compartilhadas

• Sistema de comunicação entre processos (filas de mensagens, pipes ou memória


compartilhada)
Informações sobre Processos
comando “ps”
Processos e Threads

• A Tabela de Processos em sistemas Unix-like


usualmente é representada por /proc

• Em Linux procfs é um sistema de arquivos virtual


com a Tabela de Processos
Tabela de Processos
Sistema virtual de arquivos que representa a tabela de
processos
Processos e Threads
• Significado de alguns elementos de /proc

• cmdline - comando e opções associados ao processo

• cwd - diretório de trabalho do processo.

• environ - variáveis de ambiente criadas pelo processo

• exe - executável do processo

• fd - descritores de arquivos utilizados

• maps - regiões de memória ocupadas pelo processo


Ciclo de vida de um processo
da concepção do processo ao término
Processos e Threads

• Estados principais de um processo

• Em execução (realmente usando a CPU)


• Pronto (executável; esperando seu momento)
• Bloqueado (esperando recursos)
Ciclo de vida de um processo
Mudança possíveis de estados de um processo
Processos e Threads

• O momento das interrupções depende do tipo de


sistema a adotar

• Preemptivo (processos podem ser interrompidos


sem consentimento)

• Não-preemptivo (processos que decidem o


momento de parar)
Processos e Threads
• Sistema preemptivo

• Escalonador (invisível ao processo)

• Interrupções

• Inicialização

• Bloqueio
Processos e Threads
• Escalonador

• Utiliza a Tabela de Processos

• Manipulador de processos (process handler)

• Salvar registradores

• Alterar ponteiro da pilha

• Rotinas em linguagem Assembly


Processos e Threads
• Escalonamento

1. Hardware guarda contador de programa atual

2. Hardware carrega o novo contador de programa

3. Rotinas Assembly salvam os registradores

4. Rotinas Assembly carregam novos registradores

5. Serviço de interrupção em C carrega os buffers

6. Escalonador decide quem será o próximo a executar

7. Procedimentos em C retornam comando às rotinas Assembly

8. Rotina Assembly inicia o processo atual


Processos e Threads
• Principais métodos de escalonamento

• FIFO (First-In-First-Out) ou FCFS (First-Come-First-Served)

• primeiro a chegar em pronto é o primeiro a ser executado

• SJF (Shortest Jog First), SPN (Shortest Process Next) e SRT (Shortest Remaning
Time)

• menor tarefa será executada primeiro

• Por prioridade

• processos são associados a prioridades. Processos com prioridades iguais


obedecem ao FIFO.

• Round-Robin ou circular

• revezamento com preempção


9.2 / SCHEDULING ALGORITHMS 415
0 5 10 15 20

A
First-come-first B
served (FCFS) C
D
E

A
Round-robin B
(RR), q ! 1 C
Tempo de Tempo de
D Processo
chegada Processament
E o

A A 0 3
Round-robin B
(RR), q ! 4 C
B 2 6
D C 4 4
E
D 6 5
A
Shortest process B E 8 2
next (SPN) C
D
E

Shortest remaining
time (SRT)
FIFO ou FCFS
A
B
C
D
Exemplo de escalonamento
E

A
Highest response B
ratio next (HRRN) C
Algoritmo de tarefa mais curta (SJF)
Processos de menor carga têm prioridade
D
E

A
Shortest process B
next (SPN) C
D
E

A
Shortest remaining B
time (SRT) C
D
E

A Tempo de Tempo de
Highest response B Processo Processament
chegada
ratio next (HRRN) C o
D A 0 3
E
B 2 6
A
Feedback B C 4 4
q!1 C
D D 6 5
E
E 8 2
A
Feedback
q ! 2i
Exemplo de Escalonamento por
B
C
SJF, SPN e SRT
D
E

Exemplo
0 de
5 escalonamento
10 15 20

Figure 9.5 A Comparison of Scheduling Policies

The normalized turnaround time for process Y is way out of line compared to the
Algoritmo por Prioridade
Processos de maior prioridade possuem preferencia
Processo B possui maior prioridade de execução

P = Pronto
E = Execução
W = Espera

Exemplo de Escalonamento por


Prioridade
Processos de menor prioridade apenas serão escalonados
se não houver outros processos de maior prioridade
Algoritmo Round-Robin ou Circular
Algoritmo “democrático”
C
D
E

A
Round-robin B
(RR), q ! 1 C
D
E

A
Round-robin B
(RR), q ! 4 C
D
E

A Tempo de Tempo de
Shortest process Processo Processament
B chegada
next (SPN) o
C
D A 0 3
E
B 2 6
A
Shortest remaining B C 4 4
time (SRT) C D 6 5
D
E E 8 2
A
Highest response B

Escalonamento Round-Robin
ratio next (HRRN) C
D
E
com Adiferentes tempos de preempção
Feedback B
q!1 C
D
E
Processos e Threads
• Métodos compostos de escalonamento

• Fila Múltipla (Multilevel Queue)

• divide a fila de prontos em várias filas separadas, com


base em alguma propriedade do processo. Cada fila
possui seu próprio algoritmo de escalonamento

• Fila Múltipla com Realimentação (Multilevel Feedback


Queue)

• identifica dinamicamente o comportamento de cada


processo, ajustando assim suas prioridades de execução
e mecanismos de escalonamento.
Algoritmo Fila Múltipla
diferentes filas para diferentes tipos de processos
Escalonador com Fila Múltipla
diferentes filas para diferentes tipos de processos podendo
os processos mudarem de fila em tempo de execução
Processos e Threads
• Tipos de processos

• CPU Bound

• Uso intensivo da CPU

• Poucas operações de Entrada/Saída

• Pode monopolizar a CPU dependendo do tipo de algoritmo de


escalonamento utilizado

• I/O Bound

• Orientado a Entrada/Saída

• Devolve deliberadamente o uso da CPU


Cenários de uso da CPU
grau de multiprogramação diante diferentes tipos de
processos
Processos e Threads
• Threads

• “Miniprocessos”

• Múltiplas atividades simultâneas

• Compartilhamento do espaço de endereçamento

• Criar threads é cem vezes mais rápido


Vida e Morte
Processos e Threads
Processos e Threads

• Exemplo do uso de Threads

• Editor WYSIWYG (What You See Is What You Get)

• Edição e resultado simultâneo

• O Microsoft Word e BrOffice.org são exemplos


de editores WYSIWYG
Editor de texto com três Threads
cada thread de forma concorrente realizando diferentes
instruções dentro do mesmo processo
Servidor Web Multithread
thread dispatcher delegando funções para threads
escravas
Processos e Threads
• Condições de corrida

• processos que compartilham dados

• ex: spool de impressão

• dois processos acessam a mesma região e


ocasionalmente entrem em conflito

• ex: dois processos acham o mesmo espaço


livre e gravam no local
Condição de corrida
Dois processos incluindo arquivos a serem impressos no
spool ao mesmo tempo
Processos e Threads

• Exclusão mútua

• apenas um processo poderá acessar


determinado recurso por vez

• o código de um processo que faz uso de recurso


compartilhado chama-se “região crítica”
Processos e Threads
• Condições para acesso a dados compartilhados

• dois processos nunca podem estar


simultaneamente em suas regiões críticas

• nenhum processo fora de sua região crítica


poderá bloquear outro processo

• nenhum processo deverá esperar eternamente


por sua região crítica
Condição de corrida
Exclusão mútua usando regiões críticas
Processos e Threads

• Espera ociosa

• espera para que um processo deixe sua região


crítica e possa realizar o mesmo

• expectativa de espera por um tempo razoável


Processos e Threads
• Semáforos

• proposto por Edsger


Dijkstra em 1965

• utilizada em sistemas
multiprogramados

• variável protegida para


controle de recursos
compartilhados
Processos e Threads

• Operações sobre semáforos são atômicas

• inicialização

• operação wait

• operação signal
Processos e Threads

• Inicialização de semáforo

• recebe valor inteiro indicando quantos


processos poderão ter acesso simultâneo a um
recursos compartilhado
Processos e Threads

• Operação wait em semáforos

• decrementa o valor do semáforo

• se esse possuir valor 0, esse é colocado em


estado de espera ociosa
Processos e Threads

• Operação signal em semáforos

• se houver um processo em espera ociosa, esse


é acordado

• se não houver processo em espera ociosa, o


valor do semáforo é incrementado
Processos e Threads

• Os processos fazem uso de


uma estrutura FIFO para uso
do Semáforo
Processos e Threads

• Mutex

• tipo mais simples de semáforo

• semáforo binário, onde o recurso está disponível


ou não
Condição de corrida
Chave de Acesso ao Recurso Compartilhado com Mutex
Revisão
• Processo • PID
• Estados de um processo em
• Concorrência • Processos em Unix Unix

• Multiprogramação • UID • Escalonador

• Espaço de endereçamento • GID • Manipulador de processos

• Tabela de processos • ps • Algoritmos de Escalonamento

• Imagem do núcleo • kill • Otimização do uso da CPU

• Árvore de processos • Término de processo • Threads

• Subprocessos • Shell Unix • Condições de corrida

• Chamadas de sistema (system • Hierarquias de processos • Região crítica


calls)
• Comunicação entre processos • Semáforos
• Criação de processos
• Estados de um processo • Exclusão mútua
• Foreground
• Diagrama de estados de • Mutex
• Background processo
Laboratório
• Comandos Bash Shell

• ls - listar o conteúdo de um diretório ou


informações sobre um arquivo

$ ls

• cd - navegar entre diretórios

$ cd diretorio
Laboratório
• Comandos Bash Shell

• cat - exibe e concatena arquivos

$ cat arquivo1 arquivo2

• grep - filtra uma entrada por uma string

$ grep filtro arquivo


Laboratório
• Comandos Bash Shell

• echo - imprime uma mensagem

$ echo “Ola Mundo”

• rm - remove arquivos do sistema

$ rm arquivo
Laboratório
• Comandos Bash Shell

• sudo - solicitar execução em modo Super


Usuário

$ sudo comando

• su - autenticar-se como Super Usuário

$ su
Laboratório

• Uso do pipe ( | ) em Bash Shell

$ cat arquivo1 arquivo2 | grep filtro


Laboratório
• Comandos Bash Shell

• ; - finalização de um comando

comando1 ; comando2

• \ - continuação de um mesmo comando em


várias linhas

comando \

continuaçãocomando;
Laboratório
• Redirecionamento de entradas e saídas em Bash Shell

• < - entrada padrão

comando < arquivo_com_argumentos

• > ou >> - saída padrão

comando > arquivo_saida

• 2> ou 2>> - saída de erro

comando 2>> arquivo_erro_apendice

• 2>&1 - saída padrão e de erros

comando 2>&1 arquivo_saidas


Laboratório
• Comandos em Bash Shell

• & - execução de um comando em segundo plano (background)

comando &

• jobs - apresenta comandos em background

[1]+ Running comando &

• fg - traz processo novamente para o foreground

fg 1

• bg - leva um processo para background

bg 1
Laboratório
• Comandos em Bash Shell

• ps - obtém informações sobre os processos do


sistema

ps aux

• kill - envia um sinal para um determinado PID

kill -9 1000