Semáforos em Unix. Criar um conjunto (vetor) de semáforos: semid = semget ( chave, nsems, flag); onde:

Documentos relacionados
Sistemas de Computação Semáforos

Memória partilhada em Unix SysV

Memória compartilhada

- pid do último processo a manipular o semáforo (através de semop/semctl); - o número de processos que estão à espera que o valor do semáforo seja 0.

Comunicação entre Processos Memória Compartilhada

Pthreads API. Criação de Threads: usando Pthreads

Sincronização e memória compartilhada no Linux

Comunicação entre Processos Memória Compartilhada

Memória Compartilhada

MAC422/5753 Sistemas Operacionais

Exercícios Avaliativos Memória Compartilhada

SISTEMAS OPERATIVOS I

Semáforos. Walter Fetter Lages.

Este pdf contém o código, em linguagem C, de 6 ficheiros.

Paralela e Distribuída. Memória Partilhada com Processos

Inter-process Communication (IPC)

Memória Compartilhada (Shared Memory) (1) Memória Compartilhada (2) Memória Compartilhada (3)

time_t shm_ctime; /* hora da última alteração de atributod da MP através de shmctl + IPC_SET */

Matrizes Esparsas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Sistemas de Computação Mecanismos IPC

7. Memória partilhada e sincronização em UNIX

Aula 10 Oficina de Programação Matrizes. Profa. Elaine Faria UFU

tutorial. man fork man pthread_create man pthread_join man wait man sleep

Matrizes Esparsas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Aula 9 Oficina de Programação Matrizes. Profa. Elaine Faria UFU

Anexo 1 Processos UNIX Anexo 2 Pipes UNIX Anexo 3 IPC UNIX ANEXOS

UNIVERSIDADE ESTADUAL DE PONTA GROSSA SETOR DE CIÊNCIAS AGRÁRIAS E DE TECNOLOGIA DEPARTAMENTO DE INFORMÁTICA JEFERSON AUGUSTO WISBISKI JOÃO DAVI MAYER

Apresentar os comandos de controle associados com as estruturas de repetição.

Linguagem C Princípios Básicos (parte 1)

Arquitetura de Computadores Sistemas Operacionais II

Copiar para o ficheiro ArvoreBinaria.h e adaptar as funções associadas às operações sobre árvores binárias (3.1 a 3.12)

Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos

Comunicação entre processos 2ª parte (IPC InterProcess Communication)

Listas ligadas/listas encadeadas

Organizam dados de forma hierárquica. Acontecem com frequência na natureza. Fáceis de representar e manipular com computadores

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

INF 1620 P1-13/09/02 Questão 1 Nome:

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 7 Arrays. Arrays

Programação de Sistemas Carris

Memória partilhada em Unix SysV

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

A regra de acesso aos dados de uma fila é a seguinte: O primeiro elemento que entra (na fila) é o primeiro que sai (FIFO first in, first out).

Aula teórica: /6. Enunciado

Arquitetura de Sistemas Operativos

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Funções em Linguagem C Parte II

Computação 2. Aula 5. Diego Addan Estrutura de Dados Registros (structs)

Processos. Programas e Processos. Aula 1 - Chamadas ao sistema. José Pedro Oliveira fork exit getpid, getppid wait, waitpid

Estruturas (Registros)

PROGRAMAÇÃO DE MICROPROCESSADORES 2009 / 2010

3. Linguagem de Programação C

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

INSTITUTO SUPERIOR TÉCNICO Introdução aos Algoritmos e Estruturas de Dados

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Funções Vetores Matrizes

ponteiros INF Programação I Prof. Roberto Azevedo

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Tratamento de Sinais

Instituto Superior Técnico Introdução aos Algoritmos e Estruturas de Dados

Ponteiros. Embora o programador não tenha acesso ao endereço de uma variável, existem algumas situações onde é necessário a utilização deste endereço.

Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo

Trabalho 2 Matriz Esparsa

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

AULA 14 ESTRUTURA DE DADOS

INF 1620 P1-04/10/03 Questão 1 Nome:

Nome: Número: Computação e Programação Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas

UNIVERSIDADE DA BEIRA INTERIOR

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Programação de Computadores II. Cap. 5 Alocação Dinâmica

Comunicação entre Processos

Carlos Eduardo Batista. Centro de Informática - UFPB

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Linguagens de Programação

Funções. definição, declaração e chamada

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Computação 2. Aula 9. Diego Addan Arquivos

INF 1620 P2-01/11/03 Questão 1 Nome:

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

Função. Unidade autônoma do programa desenvolvida para executar alguma atividade. A estrutura de uma função C é semelhante à da função main( )

USP-ICMC-BInfo. Vetores em C. SCC501 - ICC-II 2011 Prof. João Luís

Manipulação de processos

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

Campus de Sorocaba. Lista de Exercícios Recuperação Introdução à Ciência da Computação 1º Semestre de 2016

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof a Karina Oliveira. Fonte: Prof a Ana Eliza

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof Márcio Bueno. / Material da Prof a Ana Eliza

1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C

UNIVERSIDADE DA BEIRA INTERIOR

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Instituto de Física Segundo Semestre de Diurno. Prova Substitutiva 15/12/2000

Linguagens de Programação I

Linguagem C. TGSI Lógica de Programação / Linguagem C Prof. Marcos Roberto

Introdução ao Fortran 90. Aula 3

Aula 04. Agregados Homogêneos. Agregados Heterogêneos. Matrizes

Comunicação Inter-Processo em Unix. Pipes FIFO (Named Pipes) Pipes

Nome: Número: Computação e Programação Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas

Tipos Abstratos de Dados. Estrutura de Dados

LEIC/LERC 2010/11 2º Exame de Sistemas Operativos

Transcrição:

Semáforos em Unix Criar um conjunto (vetor) de semáforos: onde: semid = semget ( chave, nsems, flag); semid identificador de acesso ao vetor de semáforos. chave identificador global que identifica este vetor de semáforos; se a chave for conhecida por outro processo, este pode com a execução de um novo semget() e mesma chave, ganhar acesso aos mesmos semáforos. nsems número de semáforos a criar no vetor (tamanho do vetor); flag condicionam o modo de uso dos semáforos: IPC_CREAT 0644, cria novos com permissões 0644; se for NULL, obtém um vetor já existente. O vetor começa na posição zero (0). DCC/FCUP Fernando Silva Sistemas de Operação 1

Semáforos em Unix Remover um vetor de semáforos: semctl ( semid, semnum, comando); com comando = IPC_RMID. Neste caso, o argumento semnum é ignorado. semctl pode ser usado com outros comandos diferentes de IPC_RMID. DCC/FCUP Fernando Silva Sistemas de Operação 2

Operações sobre Semáforos em Unix onde: status = semop (semid, semops, nsemops); semid identificador de acesso ao vetor de semáforos. semops: vetor de estruturas que definem as operações sobre os semáforos; nsemops número de semáforos que vão ser afetados pelas operações definidas no vetor de estruturas. Cada entrada do vetor de estruturas é do tipo: 1 struct sembuf { 2 short semnum ; / * num. sem. afetado por semop * / 3 short semop ; / * operação sobre semáforo 4 short SemFlag ; * / 5 } DCC/FCUP Fernando Silva Sistemas de Operação 3

Valores semop<0 implicam bloqueio do processo se houver mais algum processo usando a região crítica associada àquele semáforo OU acesso à região crítica; valores semop>0 libertam o semáforo. Semáforos binários (tomam apenas valores 0 e 1): 1 #define UP( sid, n ) { \ 2 struct sembuf up ={n, 1, 0 } ; \ 3 semop (sid, &up, 1) ; \ 4 } 5 #define DOWN( sid, n ) { \ 6 struct sembuf down ={n, 1, 0 } ; \ 7 semop (sid, &down, 1) ; \ 8 } 9 #define INIT ( sid, n ) UP( sid, n ) DCC/FCUP Fernando Silva Sistemas de Operação 4

Exemplo com shm e sem : Folha de Cálculo Consideremos uma matriz de N linhas e M colunas, em que cada elemento da última linha é a soma dos elementos da mesma coluna e cada elemento da última coluna é a soma dos elementos da mesma linha. Suponhamos que temos dois processos: um modificador: periodicamente modifica, de forma aleatória, o valor de uma célula da matriz e atualiza os totais na linha e coluna que contêm a célula. um verificador: periodicamente escreve a matriz, e verifica se os totais estão corretos. DCC/FCUP Fernando Silva Sistemas de Operação 5

bloqueado pelo modificador vector de semaforos coluna 10 5 32 4 51 bloqueado pelo verificador 7 12 14 6 16 7 16 25 53 50 bloqueado pelo modificador 8 3 20 5 36 37 28 75 50 celula a actualizar vector de semaforos linha DCC/FCUP Fernando Silva Sistemas de Operação 6

Potenciais dificuldades: modificador e verificador podem estar a usar valores da mesma linha ou coluna e ocasionar problemas de concorrência. 1 VERIFICADOR : MODIFICADOR : 2 para todas as linhas { escolhe aleatoriamente 3 entrar na zona crítica 1 célula e 1 valor 4 calcula soma de todas células na linha entrar na zona crítica 5 se (soma!= total na folha ) mod célula com novo valor 6 escreve mensagem atualiza total na linha 7 sair da zona crítica atualiza total na coluna 8 } sair da zona crítica 9 para todas as colunas { 10 entrar na zona crítica 11 calcula soma de todas células na coluna 12 se (soma!= total na folha ) 13 escreve mensagem 14 sair da zona crítica 15 } DCC/FCUP Fernando Silva Sistemas de Operação 7

1 #include < s t d i o. h> 2 #include <sys / types. h> 3 #include <sys / i p c. h> / * VARIAVEIS GLOBAIS * / 4 #include <sys / shm. h> int t o t a l L i n, t o t a l C o l ; 5 #include <sys / sem. h> int linsems, colsems ; 6 7 / * CONSTANTES * / / * PROTOTIPOS DAS FUNCOES * / 8 #define NLINS 8 void gera_nova_entrada (int * ) ; 9 #define NCOLS 8 void e s c r e v e _ e _ v e r i f i c a (int * ) ; 10 #define SKEY 123 int inicia_sems ( key_t, int ) ; 11 #define SSIZE NLINS * NCOLS * sizeof (int ) 12 13 / * MACROS * / 14 #define CELL( s, r, c ) ( * ( ( s ) + ( ( r ) * NCOLS) +( c ) ) ) 15 16 / * operações sobre semáforos * / 17 #define UP( sid, n ) { \ #define INIT ( sid, n ) UP( sid, n ) 18 struct sembuf up ={n, 1, 0 } ; \ 19 semop (sid, &up, 1) ; \ 20 } 21 #define DOWN( sid, n ) { \ 22 struct sembuf down ={n, 1, 0 } ; \ 23 semop (sid, &down, 1) ; \ 24 } DCC/FCUP Fernando Silva Sistemas de Operação 8

1 int main ( ) 2 { 3 int id, lin, col, * folha, i=0, j =0; 4 5 setbuf (stdout,null ) ; / * e v i t a b u f f e r i n g * / 6 totallin= NLINS 1; 7 totalcol= NCOLS 1; 8 / * seg. mem. p a r t i l h a d a para a m a t r i z * / 9 id = shmget (SKEY, SSIZE, IPC_CREAT 0600) ; 10 folha = (int * ) shmat (id, 0, 0 ) ; 11 for (lin =0; lin < NLINS ; lin ++) / * c e l u l a s a zero * / 12 for (col =0; col<ncols ; col ++) 13 CELL (folha, lin, col ) =0; 14 / * c r i a e i n i c i a vecs de sems * / 15 linsems= inicia_sems ( SKEY, NLINS ) ; 16 colsems= inicia_sems ( SKEY +1, NCOLS ) ; 17 if (fork ( ) ) { / * pai escreve e v e r i f i c a * / 18 escreve_e_verifica ( folha ) ; 19 } 20 else { / * f i l h o gera valores * / 21 gera_nova_entrada ( folha ) ; 22 exit ( 0 ) ; 23 } DCC/FCUP Fernando Silva Sistemas de Operação 9

1 wait ( 0 ) ; 2 semctl (linsems, 0,IPC_RMID ) ; / * l i b e r t a sems * / 3 semctl (colsems, 0,IPC_RMID ) ; 4 shmdt (folha ) ; / * l i b e r t a shm * / 5 shmctl (id,ipc_rmid, 0) ; 6 exit ( 0 ) ; 7 } / / fim do main DCC/FCUP Fernando Silva Sistemas de Operação 10

1 int inicia_sems (key_t k, int n ) 2 { 3 int semid, i ; 4 5 if ( (semid=semget (k,n, 0 ) )!= 1) / * se j a existem * / 6 semctl (semid, 0,IPC_RMID ) ; / * l i b e r t a os * / 7 / * c r i a novos * / 8 if ( (semid=semget (k,n,ipc_creat 0600) )!= 1) 9 for (i =0; i<n ; i++) / * i n i c i a sems do v e t o r * / 10 INIT (semid,i ) ; 11 return semid ; 12 } DCC/FCUP Fernando Silva Sistemas de Operação 11

1 void gera_nova_entrada (int * s ) 2 { 3 int lin, col, old, new ; 4 5 / * escolhe aleatoriamente c e l u l a e novo v a l o r 6 lin= rand ( ) % (NLINS 1) ; * / 7 col= rand ( ) % (NCOLS 1) ; 8 new= rand ( ) % 1000; 9 / * t e n t a e n t r a r na zona c r i t i c a * / 10 DOWN (linsems, lin ) ; 11 DOWN (colsems, col ) ; 12 old= CELL (s, lin, col ) ; / * a t u a l i z a c e l u l a e t o t a i s * / 13 CELL (s, lin, col ) = new ; 14 CELL (s, lin, totalcol ) += (new old ) ; 15 CELL (s, totallin, col ) += (new old ) ; 16 UP (colsems, col ) ; / * s a i da zona c r i t i c a * / 17 UP (linsems, lin ) ; 18 } DCC/FCUP Fernando Silva Sistemas de Operação 12

1 void escreve_e_verifica (int * s ) 2 { 3 int lin, col, soma, totalerrs ; 4 5 totalerrs =0; 6 for (lin =0; lin<nlins ; lin ++) { 7 soma= 0; 8 DOWN (linsems, lin ) ; 9 for (col =0; col<ncols ; col ++) { 10 if (col!= totalcol ) 11 soma += CELL (s, lin, col ) ; 12 printf ("%5d", CELL (s,lin,col ) ) ; 13 } 14 if (lin!= totallin ) 15 totalerrs += (soma!= CELL (s, lin, totalcol ) ) ; 16 UP (linsems, lin ) ; 17 printf ("\n" ) ; 18 } DCC/FCUP Fernando Silva Sistemas de Operação 13

1 for ( col =0; col <totalcol ; col ++) { 2 soma =0; 3 DOWN (colsems,col ) ; 4 for (lin =0; lin<totallin ; lin ++) 5 soma += CELL (s,lin, col ) ; 6 totalerrs += (soma!= CELL (s, totallin, col ) ) ; 7 UP (colsems, col ) ; 8 } 9 if (totalerrs ) 10 printf ("\nfolhacalculo falhou\n" ) ; 11 } DCC/FCUP Fernando Silva Sistemas de Operação 14