34
Page 1 Paulo Ferreira - INESC/IST 1 Sistemas Sistemas Operativos Operativos IST - LEIC - 1º IST - LEIC - 1º Semestre Semestre Paulo Ferreira - INESC/IST 2 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.

Sistemas Operativos - gsd.inesc-id.ptpjpf/slides-sync-2.pdf · leccionado a disciplina de Sistemas Operativos: Paulo Ferreira, André Zúquete, ... wutilitários para controlo de

Embed Size (px)

Citation preview

Page 1

Paulo Ferreira - INESC/IST 1

SistemasSistemasOperativosOperativos

IST - LEIC - 1ºIST - LEIC - 1º SemestreSemestre

Paulo Ferreira - INESC/IST 2

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 2

Paulo Ferreira - INESC/IST 3

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)

Paulo Ferreira - INESC/IST 4

Funções Principais de um Sistema Operativoð gestão da concorrênciawcontrolar diversos fluxos de actividade independentes que se executam “em

paralelo” sem que os mesmos interfiram não intencionalmente

ð partilha de recursos com protecçãowfísicos: processador, memória, discos, periféricos diversoswlógicos: programas de uso geral (editores, compiladores) e bibliotecas partilhadas

por diversos programas

ð gestão de informação persistentewarmazenamento fiável e seguro da informação não volátil em suportes magnéticos,

ópticos, etc.

ð controlo dos gastoswcontabilização e limitação da utilização dos recursos físicos

Page 3

Paulo Ferreira - INESC/IST 5

Recursos Físicos (hardware)ð processador (CPU)ð memória volátil (RAM)ð periféricos:wterminaiswdiscoswoutros (diskettes, bandas, CDs, impressoras, scanners, etc.)

ð especiais:winterrupções do processadorwrelógio de tempo realwinstruções privilegiadaswsuporte para memória virtual e protecção de memória

Paulo Ferreira - INESC/IST 6

19501946 1960 1970 1980

Tempo Partilhado

Memória Virtual (UNIX)

Sistemas Distribuídos

Multiprogramação (Multics)

Tratamento por Lotes (IBM 7090)

Tratamento por Lotes Rudimentar

Sem Sistema Operativo (UNIVAC, IBM 701, IBM 650)

1ª Geração:Interruptores

e válvulas

2ª Geração:Transístores

3ª Geração:Circuitos integrados

4ª Geração:Computadores pessoais

Evolução histórica

Page 4

Paulo Ferreira - INESC/IST 7

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 comandowcompiladorweditor 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

Paulo Ferreira - INESC/IST 8

Tratamento em Lotes (Batch)ð impessoras, leitores/perfuradores de fita são muito lentosð monitor de controlo: tempo de execução de um programa é

determinado pelas E/Sð solução:wrecolha de dados num computador auxiliar onde os dados são lidos para banda

magnéticawcomputador central lê a banda magnética e escreve resultados numa outra que é

lida pelo computador auxiliar produzindo listagens

ð evolução:wperiféricos executam tarefas autónomas e avisam o processador do fim da sua

execução através de interrupções (comunicação assíncrona)wexecução em paralelo dos programas e das E/S

Page 5

Paulo Ferreira - INESC/IST 9

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 processadorwex.: P1 acede ao disco e ica bloqueado enquanto o controlador de disco funciona;

durante esse tempo, P2 pode ser executado pelo processadorwimplica 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)

Paulo Ferreira - INESC/IST 10

Tempo Partilhado e Memória Virtualð tempo partilhado:wmultiplexagem entre vários utilizadoreswdivisão do tempo disponível do processadorwsensação de dispôr de um computador apenas para siwimplica considerar novos aspectos: sistemas de ficheiros, protecção dos dados

ð memória virtual:wgestão da memória muito complexa (programas/utilizadores distintos)wespaço de endereçamento virtual muito superior à memória física

Page 6

Paulo Ferreira - INESC/IST 11

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 é relevantewtem 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 industriaiswsistemas transaccionaiswetc.

Paulo Ferreira - INESC/IST 12

Critérios de Qualidadeð fiabilidade:wnão existência de erros intrínsecoswtolerância a faltas/falhas nos recursos físicos

ð eficiência:wtempo de resposta nos sistemas de tempo partilhadowtempo de processador aproveitado/desaproveitadowdesempenho - trabalhos/unidade de tempowpartilha dos recursoswdegradação do desempenho com o aumento da carga

ð capacidade/facilidade de manutenção:wconfiguraçãowcorrecção de erroswevolução

Page 7

Paulo Ferreira - INESC/IST 13

Gestão de Processos

Gestão de Memória

Comunicação e E/S

Sistema de Ficheiros

Interface do Sistema

Aplicações

Realização

Paulo Ferreira - INESC/IST 14

Modelo Computacional

Modelo Computacional

Gestão de Processos

Gestão de Memória

Comunicação e E/S

Sistema de Ficheiros

Gestão de Processose

Sincronização

Gestão de Memória

Comunicação e E/S

Sistema de Ficheiros

ð conjunto de objectos do sistema operativo e operações que ospermitem manipular

Page 8

Paulo Ferreira - INESC/IST 15

Gestão de Processos: conceitos de baseð processadorwelemento físico que executa uma acção definida numa instrução máquina

ð processowentidade “activa” no sistema operativo no âmbito da qual é executada uma

sequência de acções determinada por um programa

ð programawsequência de acções, descritas numa determinada linguagem, sem actividade

própria

ð aplicaçãowconjunto 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

Paulo Ferreira - INESC/IST 16

Processo: abstracção de máquina virtualð espaço de endereçamento:wconjunto de posições de memória a que um programa executado num processo pode

acederwregião de memória onde está o código, os dados e a pilha (stack) do processo

ð reportório de instruções:wcódigo (programa compilado)wtambém designado por imagem

ð contexto de execução:wvalor dos registos do processador e de outras unidades de controlo (memória, etc.)

em cada instante

Page 9

Paulo Ferreira - INESC/IST 17

Utilizador 1processo inicial

subprocesso 1

subprocesso 3subprocesso 2

Utilizador 2processo inicial

subprocesso 1

subprocesso 3

Gestor de Processos: objectivoð criação e eliminação de processosð suportar a co-existência de processos:watribuição do processador aos processoswtratamento das interrupções da actividade dos processoswfornecimento de mecanismos de sincronização entre processoswlimitação das interferências destrutivas entre processos

ð manutenção de uma hierarquia de processos em curso

Paulo Ferreira - INESC/IST 18

Utilizador 1processo inicial

subprocesso 1

subprocesso 3subprocesso 2

Utilizador 2processo inicial

subprocesso 1

subprocesso 3

Estrutura Hierárquica dos Processosð hierarquia traduz-se por informações que são mantidas no contexto

dos processosð tratamento da relação hierárquica depende dos sistemas:wfim de um processo elimina todos os processos filhoswfim de um processo não altera estado dos processos fihos

ð estrutura hierárquica facilita a criação de processos:wgrande parte do ambiente pode ser herdado

Page 10

Paulo Ferreira - INESC/IST 19

Gestor de Processos: modelo computacionalð criação de processoswIdProcesso = 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 processoswEliminarProc ( IdProcesso )

Paulo Ferreira - INESC/IST 20

Concorrênciað competição entre processos no acesso a um recursoð só um processador => pseudo-concorrênciawintercalação ou paralelismo lógico; ilusão de uma concorrência efectiva

ð comutação de processoswo processo a executar é sucessivamente retirado do processador para dar lugar a

outro

ð salvaguarda do contexto de execuçãowquando um processo perde o processador há que guardar um conjunto de

informações (contexto de execução) que possibilitem o seu retorno como se nadativesse acontecido

ð programação concorrentewdesenvolvimento de programas incluindo partes que podem ser executadas em

paralelo

Page 11

Paulo Ferreira - INESC/IST 21

t

P2

P1

P3

Tempo real de execução dos processos

t

P2

P1

P3

Utilização do processador

Pseudo-concorrência

Paulo Ferreira - INESC/IST 22

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.)

Page 12

Paulo Ferreira - INESC/IST 23

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 determinadoprocesso)

•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

Paulo Ferreira - INESC/IST 24

Funções Sistema (system calls)ð interface aos serviços do sistema operativoð protecção (duas entidades funcionais):wfunção propriamente dita, pertence ao programa do núcleo do sistema operativowrotina de interface que é ligada com o código do utilizador e que usa instruções

especiais (traps) para mudar de modo utilizador para modo sistema

ð vantagens:wpartilha das funções sistema por todos os processoswmodificação transparente do sistema operativo desde que não se altere a interface

ð protecção => não utilização de endereços de memória com dados dosistema operativo

Page 13

Paulo Ferreira - INESC/IST 25

Rotina de biblioteca dechamada à função sistema X

Programa do UtilizadorExecutável

Sistema operativo

Agulhagem

Funçãosistema A

Funçãosistema Z

trap

Modo utilizador (não privilegiado)Modo utilizador (não privilegiado)

Modo sistema (privilegiado)Modo sistema (privilegiado)

Chamada a Funções Sistema

Paulo Ferreira - INESC/IST 26

Suporte Hardware para a Realização do SOð interrupçõeswcomunicação assíncrona de eventos

ð relógio de tempo realwtemporização das diversas actividades a executar

ð mecanismos de protecçãowevitar a corrupção do código e dados do sistema operativowlimitação das capacidades de endereçamento dos processos

ð gestão de endereçamentowprotecção de blocos de memória principalwpossibilidade de recolocar código e dados na memória principalwdetecção de endereçamentos inválidos

Page 14

Paulo Ferreira - INESC/IST 27

Diagrama de Estados de um Processo

EmExecução

Executável Não executável(bloqueado)

Seleccionado peloDespacho

Retirado peloDespacho

Bloquear

Desbloquear

Paulo Ferreira - INESC/IST 28

Lista dosLista dosProcessosProcessos

ExecutáveisExecutáveis

Contexto doContexto doprocesso iprocesso i

Contexto doContexto doprocesso i+1processo i+1

Contexto doContexto doprocesso i+2processo i+2

Tabela noTabela noSistemaSistema

OperativoOperativo

Lista dos Processos Executáveis

Page 15

Paulo Ferreira - INESC/IST 29

Núcleo do SO: gestão dos processos

Restantes Níveis

Aplicações

Gestão das

Interrupções

Multiplexagem(scheduling)

Sincronização

Paulo Ferreira - INESC/IST 30

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çãowé 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 processadorwcontrola a prioridade dos processos de modo a optimizar a utilização de todos os

recursos do computador

Page 16

Paulo Ferreira - INESC/IST 31

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ávelwestado do núcleo do sistema operativo tem de estar consistente quando se dá a

preempção

Paulo Ferreira - INESC/IST 32

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

Page 17

Paulo Ferreira - INESC/IST 33

ð 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 doprocessador; é necessário ter em conta outros recursos (ex.:memória)

ð teoricamente seria interessante que a função de escalonamentofosse invocada sempre que um recurso do sistema é atribuídoou libertado (memória, prefiféricos, etc.)

ð o problema é que a própria função de escalonamento consomerecursos

Políticas de Escalonamento (1)

Paulo Ferreira - INESC/IST 34

Políticas de Escalonamento (2)ð políticas para ambientes de tempo partilhado interactivos:wtempo de execução partilhado:

•tempo de execução contínua limitado a um quantum (time-slice)•lista de processos executáveis é gerida em round-robin•pode conduzir a tempos de resposta elevados em situações de muita carga

wpreempção:•primazia ao processo mais prioritário•indispensável em sistemas de tempo real•despacho é chamado na sequência de todas as acções susceptíveis de modificarem os

estado dos processos

Page 18

Paulo Ferreira - INESC/IST 35

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

Paulo Ferreira - INESC/IST 36

Gestão Multilista

utiliza o processador

utiliza o processador

utiliza o processador

lista de maiorprioridade (menosprocessador usado)

lista demenorprioridade

Page 19

Paulo Ferreira - INESC/IST 37

Gestão Multilista com Quantum Variável

Prioridade Máxima tcpu = 0,02 s

Prioridade Média tcpu = 0,25 s

Prioridade Mínima tcpu = 2 s

Despacho

Paulo Ferreira - INESC/IST 38

Função dos Mecanismos de Sincronizaçãoð aplicações eficientes implica decomposição em vários processosð potencialmente melhor desempenhoð cooperação:wpermitir a um processo assinalar a um outro o final de uma etapa, de forma a que o

segundo possa prosseguir na execução do algoritmo da aplicação (ex.: reserva debilhete de avião)

ð competição por/gestão de um recurso:wcompetição pela obtenção de um recurso único ou limitado no sistema (o recurso

pode ser um periférico, um ficheiro, zona de memória, etc.)wbloquear os processos consumidores quando não há recursoswassinalar a existência de recursos disponíveis quando há processos bloqueados

ð exclusão mútua:wgarantir a coerência na modificação de variáveis partilhadas (ex., teste e alteração

do valor de uma variável)

Page 20

Paulo Ferreira - INESC/IST 39

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ómicawdados 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 processoswindirectos: trincos lógicos e semáforos

Paulo Ferreira - INESC/IST 40

Alocador de Memória

pilha com descritores dos blocos livres

livre

livre

livre

livre

mapa de memória

Page 21

Paulo Ferreira - INESC/IST 41

Alo

cado

r de

Mem

ória

(con

t.)

char

* pe

deM

em()

{ch

ar*

ptr

= 0;

if (t

opo

>= 0

) {pt

r =

pilh

a[to

po];

topo

--;

} retu

rn p

tr;

}

void

dev

olve

Mem

(cha

r* p

tr) {

if (t

opo

< M

AX

_PIL

HA

) {to

po++

;pi

lha[

topo

]= p

tr;

}}

#def

ine

MA

X_P

ILH

A 1

00ch

ar*

pilh

a[M

AX

_PIL

HA

];in

t top

o;

funç

ões/

dado

s par

tilha

dos p

or to

dos o

s pro

cess

os!

Paulo Ferreira - INESC/IST 42

Violação de uma Secção Crítica

Processo A (devolveMem) Processo B (pedeMem)

Instr. n topo++;

interrupção => despacho seleciona outro processo (B neste exemplo)

Instr. n

Instr. n+1

ptr = pilha[topo];

topo--;

t

ð conjunto de instruções que se devem executar de forma atómicað estruturas de dados partilhadas devem ser actualizadas no interior duma

secção crítica que garanta a exclusão mútua no acesso às variáveis

Page 22

Paulo Ferreira - INESC/IST 43

Exclusão Mútua: solução alg. básica

void procUm() { while (TRUE) { /*testar possibilidade de acesso*/ while (nProc == SEGUNDO) ;

/* secção crítica */ nProc = SEGUNDO; /*permite acesso ao outro proc.*/

} }

void procDois() { while (TRUE) {

while (nProc == PRIMEIRO) ; /* secção crítica */ nProc = PRIMEIRO; /*

} }

enum {PRIMEIRO = 1, SEGUNDO}; enum {FALSE, TRUE}; int nProc = PRIMEIRO

ð processos comutam explicitamente o direito de acesso à secção críticað um processo pode atrasar indefinidamente a entrada do outro na secção críticað o algoritmo só se aplica a dois processosð o processo impedido de entrar fica em espera activað instruções não são indivisíveis

Paulo Ferreira - INESC/IST 44

Exclusão Mútua: algoritmo de Dekker

void procUm() {while (TRUE) { P1QuerEntrar = TRUE; /*assinalar tentativa de acesso*/ while (P2QuerEntrar) { /*verificar disponibilidade*/ if (procPrioritario == SEGUNDO) { /*proc. proritario*/ P1QuerEntrar = FALSE; /*desistir temporariamente*/ while (procPrioritario == SEGUNDO); P1QuerEntrar = TRUE;

} }

/* secção crítica */ procPrioritario = SEGUNDO; P1QuerEntrar = FALSE;

}}

void procDois() {while (TRUE) { P2QuerEntrar = TRUE; while (P1QuerEntrar) { if (procPrioritario == PRIMEIRO) { P2QuerEntrar = FALSE; while (procPrioritario == PRIMEIRO); P2QuerEntrar = TRUE;

} } /* secção crítica */

procPrioritario = PRIMEIRO; P2QuerEntrar = FALSE;

} }

enum {PRIMEIRO = 1, SEGUNDO}; enum {FALSE, TRUE}; int procPrioritario = PRIMEIRO, P1QuerEntrar = FALSE, P2QuerEntrar = FALSE;

Page 23

Paulo Ferreira - INESC/IST 45

ð vantagens:wnão impõe uma sequência de utilização alternada do recurso partilhado

ð desvantagens:wapenas se aplica a dois processoswo processo impedido de entrar fica em espera activawinstruções não são indivisíveis

Algoritmo de Dekker

Paulo Ferreira - INESC/IST 46

Exlusão Mútua: algoritmo de Lamport

int compara(int a, int b) { if (senha[a] < senha[b] || (senha[a] == senha[b] && a < b )) return TRUE; else return FALSE; }

int max() { int maximo=0, i; for (i=0; i < N; i++) if (senha[i] > maximo) maximo = senha[i]; return maximo; }

void proc (int i) {int j;while (TRUE) { /*atribuição da senha*/ escolha[i] = TRUE;

senha[i] = max() + 1; escolha[i] = FALSE;

/*espera até deter a senha de número menos elevado*/ for (j=0; j < N; j++ ) {

while (escolha[j]); while (senha[j] != 0 && compara(j, i));

} /* secção critica */ senha[i] = 0;}

}

#define N 10 enum {FALSE, TRUE}; int senha[ N ]; int escolha[ N ];

Page 24

Paulo Ferreira - INESC/IST 47

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íticawsemáforos: variável inteira e fila de espera

ð mecanismos directos:wfunções que actuam directamente sobre o estado dos processos

Paulo Ferreira - INESC/IST 48

Dis

trib

uido

r de

Mem

ória

com

Tri

nco

char

* pe

deM

em()

{fe

char

(tri

ncoM

em);

ch

ar*

ptr

= 0;

if (t

opo

>= 0

) {pt

r =

pilh

a[to

po];

topo

--;

} abri

r(tr

inco

Mem

);re

turn

ptr

;} vo

id d

evol

veM

em(c

har*

ptr

) {fe

char

(tri

ncoM

em);

if (t

opo

< M

AX

_PIL

HA

) {to

po++

;pi

lha[

topo

]= p

tr;

} abri

r(tr

inco

Mem

);}#d

efin

e M

AX

_PIL

HA

100

char

* pi

lha[

MA

X_P

ILH

A];

int t

opo;

void

fech

ar (i

nt tr

inco

) {

whi

le (t

rinc

o ==

TR

UE

);

tri

nco

= TR

UE

; } vo

id a

brir

(int

trin

co) {

trin

co =

FA

LSE

; }

Page 25

Paulo Ferreira - INESC/IST 49

Violação da Sincronização com um Trinco

Processo A: void fechar (int trinco) { while (trinco == TRUE);

rotina de interrupção => despacho

Processo B: void fechar (int trinco) { while (trinco == TRUE); trinco = TRUE; }

execução da secção crítica

interrupção entre iteracções

rotina de interrupção => despacho

Processo A: trinco = TRUE; } execução da secção crítica

interrupção

t

ð trincos lógicos precisamde suporte especial para asua implementação:wteste e atribuição indivisívelwhardware: instrução especialwsistema: inibição das

interrupçõeswmultiprocessador implica

gestão do bus

void fechar (int trinco) { while (trinco == TRUE); trinco = TRUE; }

void abrir (int trinco) { trinco = FALSE; }

Paulo Ferreira - INESC/IST 50

Trinco Lógico (lock)ð objectivo: indicar se existe algum processo a utilizar a secção críticað variável booleana partilhada por vários processos que indica se

algum deles está numa determinada secção crítica:wos trincos lógicos precisam de suporte especial para a sua concretização:

•hardware - instrução especial - TSL (Test & Set Lock), Lock, etc.•sistema - inibição de interrupções.

ð espera activa:wum processo que tente fechar um trinco já fechado tem de continuar a tentar essa

operação até conseguir

ð sufocação ou míngua (starvation):wum processo pode ser indefinidamente preterido no acesso a uma região crítica

Page 26

Paulo Ferreira - INESC/IST 51

Diagrama de Estados de um Processo

EmExecução

Executável Não executável(bloqueado)

Bloquear

Desbloquear

Espera Activa/Starvation

Retirado pelo Despacho

Seleccionado pelo Despacho

Paulo Ferreira - INESC/IST 52

Semáforo (Dijkstra)ð um semáforo é constituído porwuma variável de controlo ss e por uma fila de espera (processos bloqueados)

ð que, para além da atribuição inicial, só pode ser modificada atravésdas primitivaswesperar(s) = wait(s) = p(s)wassinalar(s) = signal(s) = v(s)

ð semântica:wwss negativo ou nulo força o bloqueio do processowwss positivo indica possibilidade de continuar a execução

Page 27

Paulo Ferreira - INESC/IST 53

Operações Sobre os Semáforosvoid Esperar () { 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 */ }}

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 */ }}

ð os dados do semáforo são acedidos apenas por funções sistemað os dados do semáforo são acedidos em exclusão mútua

ss <= 0

ss > 0

=> bloqueia processo

=> processo continua

Paulo Ferreira - INESC/IST 54

Implementação de Semáforos

fechar(trinco)

i = i - 1;

i < 0 ?aceder ao descritordo processo em causa

retirar o processo de execução e colocar nafila de espera do semáforo

abir(trinco)

Esperar

fechar(trinco)

i = i + 1;

i <= 0 ?retirar o descritor dodo processo da fila deespera do semáforo

colocar o descritor do processo na fila dos executáveis

abir(trinco)

Assinalar

ss <= 0

SS

NN

ss > 0

Page 28

Paulo Ferreira - INESC/IST 55

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);}

Paulo Ferreira - INESC/IST 56

ð objectivo:wexclusão mútua de

processos nas primitivas desincronização

ð implementação:whardware

ð mecanismos de atraso:wespera activa

ð tempo de atraso típico:walguns microsegundos

semáforossemáforos trincostrincos

Comparação de Semáforos e Trincos

ð objectivo:wprimitivas gerais de sincronização

ð implementação:wsoftware

ð mecanismos de atraso:wfila de espera

ð tempo de atraso típico:walguns segundos

Page 29

Paulo Ferreira - INESC/IST 57

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 programawrequisito: P1 não passa do ponto L1 antes de P2 chegar a L2wsemá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

Paulo Ferreira - INESC/IST 58

Dis

trib

uido

r de

Mem

ória

com

Sem

áfor

o

char

* pe

deM

em()

{es

pera

r(se

mE

xMut

);

char

* pt

r =

0;if

(top

o >=

0) {

ptr

= pi

lha[

topo

];to

po--

;} as

sina

lr(s

emE

xMut

);re

turn

ptr

;} vo

id d

evol

veM

em(c

har*

ptr

) {es

pera

r(se

mE

xMut

);if

(top

o <

MA

X_P

ILH

A) {

topo

++;

pilh

a[to

po]=

ptr

;} as

sina

lar(

sem

ExM

ut);

}#def

ine

MA

X_P

ILH

A 1

00ch

ar*

pilh

a[M

AX

_PIL

HA

];in

t top

o =

MA

X_P

ILH

A;

/* se

mE

xMut

inic

ializ

ado

a 1*

/

Page 30

Paulo Ferreira - INESC/IST 59

Dis

trib

uido

r de

Mem

ória

com

Sem

áfor

o (c

ont.)

char

* pe

deM

em()

{es

pera

r(se

mM

em);

e

sper

ar(s

emE

xMut

);

ptr

= pi

lha[

topo

];to

po--

;as

sina

lr(s

emE

xMut

);re

turn

ptr

;} vo

id d

evol

veM

em(c

har*

ptr

) {es

pera

r(se

mE

xMut

);to

po++

;

pilh

a[to

po]=

ptr

;

ass

inal

ar(s

emE

xMut

);

ass

inal

ar(s

emM

em);

}#def

ine

MA

X_P

ILH

A 1

00ch

ar*

pilh

a[M

AX

_PIL

HA

]; in

t top

o =

MA

X_P

ILH

A;

/* se

mE

xMut

inic

ializ

ado

a 1*

//*

sem

Mem

inic

ializ

ado

a M

AX

_PIL

HA

*/

Paulo Ferreira - INESC/IST 60

Jantar dos Filósofosð cinco filósofos jantam espargueteð cada filósofo precisa de dois

garfos para comerð existe apenas um garfo por

pessoa (i.e, cinco garfos)ð os filósofos têm lugar fixoð cada filósofo pode usar apenas os

garfos que se encontram à suaesquerda e à sua direita

ð os filósofos têm três estadospossíveis: pensar, pensar comer,comer

1

0

2

3

4

Page 31

Paulo Ferreira - INESC/IST 61

Jantar dos Filósofos - solução #define MAX 5 enum {Pensar, PensarComer, Comer}; int estado[MAX]; semaforo semPriv[MAX]; /* inicializado a 0 */ semaforo mutex; /* inicializado a 1 */

void testa (int k) { if ((estado[k] == pensarComer) && (estado[mod(k+1, MAX)] != Comer) && (estado[mod(k-1, MAX)] != Comer)) { estado[k] = Comer; assinalar (semPriv[k]); }}

void filosofo (int i) { for(;;) {

/* pensar */

esperar(mutex); estado[i] = PensarComer; testa(i); assinalar(mutex); esperar(semPriv[i]);

/* comer */

esperar(mutex); estado[i] = Pensar; testa(i+1); testa(i-1); assinalar(mutex); }

int mod (j, max) { if (j == MAX) return 0; if (j == -1) return (MAX-1); return j;}

Paulo Ferreira - INESC/IST 62

Lei

tore

s-E

scri

tore

s

voi

d in

icia

Leitu

ra()

{

Esp

erar

(Mut

ex);

if

(em

Escr

ita |

|

(esc

rito

resE

sper

a >

0)) {

leito

resE

sper

a ++

;

A

ssin

alar

(Mut

ex);

Esp

erar

(Lei

tore

s);

Esp

erar

(Mut

ex);

leito

resE

sper

a--;

if (l

eito

resE

sper

a >

0)

A

ssin

alar

(Lei

tore

s);

}

n

Leito

res

++;

A

ssin

alar

(Mut

ex);

}

void

aca

baLe

itura

() {

E

sper

ar(M

utex

);

nLe

itore

s --

;

if (

escr

itore

sEsp

era

> &

&

nLe

itore

s ==

0)

A

ssin

alar

(Esc

rito

res)

;

Ass

inal

ar(M

utex

);}en

um {

FALS

E, T

RU

E};

int n

Leito

res,

leito

resE

sper

a, e

scri

tore

sEsp

era;

int e

mEs

crita

;se

maf

oro

Mut

ex, L

eito

res,

Esc

rito

res;

/* in

icia

lizad

os a

1, 0

, 0 *

/

void

aca

baEs

crita

(){

E

sper

ar(M

utex

);

em

Escr

ita =

FA

LSE;

if

(lei

tore

sEsp

era

> 0)

A

ssin

alar

(Lei

tore

s);

el

se

if

(esc

rito

resE

sper

a >

0)

A

ssin

alar

(Esc

rito

res)

;

Ass

inal

ar(M

utex

);}vo

id in

icia

Escr

ita()

{

Espe

rar(

Mut

ex);

if

(nLe

itore

s >

0 |

|

(leito

resE

sper

a >

0) ||

em

Escr

ita) {

escr

itore

sEsp

era

++;

Ass

inal

ar(M

utex

);

Es

pera

r(Es

crito

res)

;

Es

pera

r(M

utex

);

es

crito

resE

sper

a --

;

}

em

Escr

ita =

TR

UE;

A

ssin

alar

(Mut

ex);

}

Page 32

Paulo Ferreira - INESC/IST 63

Impasse ou Interblocagem (deadlock)ð acontece quando as seguintes situações podem ocorrer:wvários processos tentam aceder em exclusivo a diversos recursoswos processos mantêm o acesso aos recursos já adquiridos enquanto esperam a

obtenção de acesso a outroswos recursos não podem ser retirados aos processos que os detêm até serem

completamente utilizadoswexiste 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

Paulo Ferreira - INESC/IST 64

Interblocagem (deadlock)

t

Processo P1 Processo P2

Esperar(semA)

expira o quantum do processo P1

Esperar(semB)

Esperar(semA)P2 fica bloqueado

Esperar(semB)

P1 fica bloqueado

Page 33

Paulo Ferreira - INESC/IST 65

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 realizarmecanismos de atraso que funcionam como uma auto-suspensão:wadormecer (Período)

ð não é de uso geral:winterferência com outros utilizadoreswidentidade do processo só é conhecida em tempo de execução

Paulo Ferreira - INESC/IST 66

Mecanismos de Sincronização Directos

EmExecução

Executável Não executável(bloqueado)

Selecionadopelo

Despacho

Preempção

Bloquear

Desbloquear

Suspenso

Acordar

Acordar

Suspender

Suspender

Suspender

Page 34

Paulo Ferreira - INESC/IST 67

Controlador de Tarefasð processos:wum processo com funções de relógio - função relogiowum processo controlador - finção controladorwNTAR processos, cada um desempenhando uma determinada tarefa - função tarefa

tarefa 1 tarefa 2 tarefa i tarefa (i+1)

relogio

controlador

NTAR processos:

semPriv semPriv semPriv semPrivsemPriv

assinalar assinalar

adormecer

Paulo Ferreira - INESC/IST 68

Controlador de Tarefas (cont.)

void controlador() { for(;;) { esperar(impulso); for (int i = 0; i < NTAR; i++) { tempo[i]--; if (tempo[i] < 0) { tempo[i] = novoIntervalo(); assinalar(iniTarefa[i]); } } }}

define PERIODO 100int tempo[NTAR]; /* inicializado aleatoriamente *//* semaforo impulso inicializado a 0 *//* semaforos iniTarefa[NTAR] inicializados a 0 */

void tarefa (int i) { for (;;) { esperar (iniTarefa[i]); /* executa tarefa */ }}

void relogio () { for (;;) { assinalar(impulso); adormecer(PERIODO);}