LABORATÓRIO SISTEMAS OPERACIONAIS

Documentos relacionados
LABORATÓRIO SISTEMAS DE TEMPO REAL

Universidade Federal do ABC MCTA Sistemas Operacionais 2019.Q1

Trabalhando com Processos e Threads em Ambiente LINUX


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

Processos Volnys B. Bernal Versão de 20/03/2015. Agenda. Processos. Programa x Processo. Programa x Processo. Programa.

SVCs para Controle de Processos no Unix

! Os primeiros computadores permitiam a execução de apenas um programa de cada vez, com acesso completo aos recursos do sistema

Processos. (c) 2005 Volnys B. Bernal Versão de 15/3/2006. Agenda. Processos. Introdução aos Processos. Introdução aos Processos

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

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

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Processos. Processo (1) Processo (2) Processo (3) Conceitos Básicos

Processos. Conceitos Básicos

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Processos. Conceitos Básicos

Licenciatura em Eng.ª Informática Sistemas Operativos - 2º Ano - 1º Semestre. Trabalho Nº 4 Desenvolvimento de um mini-shell

Sistemas Operacionais II

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Threads em Ambiente LINUX. Estudo e testes com a biblioteca pthreads

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Chamadas de Sistema (SYSCALL)

SSC0640 Sistemas Operacionais I

Técnicas Avançadas de Programação

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

Ponteiros. Baseado nos slides do Prof. Mauro.

3. Criação e terminação de processos

DAS5102 Fundamentos da Estrutura da Informação

Tipos Abstratos de Dados. Estrutura de Dados

Sistemas Operacionais

Introdução à Programação Aula 07. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Sistemas de Operação (2018/2019) Teste de Auto-Avaliação Prática

Sistemas Operacionais

Sistemas Operacionais I Parte V Operações nos Processos. Roteiro. Prof. Gregorio Perez Introdução. Operações nos Processo

6. Comunicação entre processos - Pipes

Um processo sob UNIX ocupa uma área de memória formada basicamente por 3 partes:

Comunicação entre Processos Memória Compartilhada

Sistemas Operacionais

Processos. Conceitos Básicos

Material sobre Funções AEDS 1

Arquitetura de Sistemas Operativos

Na Aula Anterior... O Conceito de Threads

Manipulação de processos

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.

Carlos Eduardo Batista Centro de Informática - UFPB

MÓDULO 02 PROCESSOS E THREADS PROCESSOS e THREADS

Linguagem C: Introdução

OO Engenharia Eletrônica

Criação de Processos Fork( ) Exec( )

Curso de Introdução à Liguagem de. Grupo PET-Tele. Universidade Federal Fluminense. July 16, 2012

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

Aula 03 -Introdução àlinguagc Programação: Estrutura-Repetição. OPL e IC1 Prof: Anilton Joaquim da Silva

Comunicação entre Processos Memória Compartilhada

SVCs para Controle de Processos no Unix

ponteiros INF Programação I Prof. Roberto Azevedo

SVCs para Controle de Processos no Unix. Sistemas Operacionais

Na Aula Anterior... Interrupções por software e hardware; Temporizadores; RTC; Temporizadores via software. Relação Processos Multiprogramação

Algoritmos e Programação

1 System Calls no Linux

Linguagem C Funções. André Tavares da Silva.

Curso de Programação C em Ambientes Linux Aula 05

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Sistemas Operacionais Prof. Fabrício Sérgio de Paula

Algoritmos e Estruturas de dados

LISTA DE EXERCÍCIOS 02

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

SISTEMAS OPERATIVOS I

Conhecendo a Linguagem de Programação C

Linguagem de Programação II

SOP - TADS Processos. Revisão Ultima aula

Programação de Computadores II. Cap. 5 Vetores

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Algoritmos e Estruturas de Dados I (DCC/003) Funções

Sistemas Operacionais

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

Apontadores/ponteiros

Computação 2. Aula 5. Profª. Fabiany defines vetor, strings e matriz por parâmetros de função

Programação: Vetores

Programação Estruturada Aula - Estruturas de Repetição

Introdução à Programação

INF 1005 Programação I

Aula 6 Oficina de Programação Estruturas Condicionais no C. Profa. Elaine Faria UFU

Caracteres e Cadeias de Caracteres

Controle de Fluxo Utilizando C

Recursividade. Recursividade

Módulo 3 Controle de Fluxo

Métodos de Sincronização

Sistemas Operacionais INF Prof. José Gonçalves

Estruturas Dinâmicas - Ponteiros Parte I

Laboratório de Introdução à Ciência da Computação I

Exercícios sobre textos; Alocação dinâmica.

Leandro Soares de Sousa (DSc.) Página: Aula 04 - desenvolvimento multithread

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Transcrição:

FACULDADE: CENTRO UNIVERSITÁRIO DE BRASÍLIA UniCEUB CURSO: CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: SISTEMAS OPERACIONAIS CARGA HORÁRIA: 75 H. A. ANO/SEMESTRE: 2016/02 PROFESSOR: EDUARDO FERREIRA DOS SANTOS HORÁRIOS: Terça às 07h20 e Sexta às 09h40 LABORATÓRIO SISTEMAS OPERACIONAIS RESUMO Dentro de um Sistema Operacional as tarefas podem ser organizadas em processos e threads. A sincronia entre as tarefas é realizada através de troca de mensagens ou memória compartilhada, dependendo do mecanismo de sincroniza utilizado. O laboratório vai trabalhar os conceitos de processos, threads e a interação entre eles. OBJETIVOS Objetivo Geral Compreender os elementos conceituais relacionados aos eventos e trocas de mensagem em sistemas de tempo real. Objetivos Específicos 1. Entender o conceito de tarefas; 2. Entender o conceito de threads; 3. Entender o conceito de eventos; 4. Introduzir a linguagem de programação C. EXERCÍCIO 1 PROCESSOS Para o exercício serão executadas rotinas na linguagem C. Considere o seguinte cabeçalho para seus programas: 2 int main() { 3 int i = 0; 4 } O programa contém os elementos como se segue 1. Define as bibliotecas a serem utilizadas no programas; 2. Define a função main, que é executada ao chamar o script; 3. Declaração de variáveis; 4. Fecha os parênteses da função main Crie um programa que execute uma tarefa na máquina e consuma o máximo de

EXERCÍCIO 1 PROCESSOS processador possível. Ex.: Conte todos os números até 1000. EXERCÍCIO 2 COMUNICAÇÃO ENTRE PROCESSOS As seguintes funções estão disponíveis para serem utilizadas nos códigos da linguagem C: fork() Cria dois processos idênticos: pai e filho wait() Força o processo pai a esperar pela execução do filho exit() Finaliza o processo que chama a função e retorna o valor de saída exit. Considere o seguinte trecho de código na linguagem C: 2 #include <unistd.h> 3 #include <sys/types.h> 4 5 int main() 6 { 7 pid_t pid; 8 9 /* fork a child process */ 10 pid = fork(); 11 12 if (pid < 0) { /* error occurred */ 13 fprintf(stderr, "Fork Failed\n"); 14 return 1; 15 } 16 else if (pid == 0) { /* child process */ 17 printf("i am the child %d\n",pid); 18 execlp("/bin/ls","ls",null); 19 } 20 else { /* parent process */ 21 /* parent will wait for the child to complete */ 22 printf("i am the parent %d\n",pid); 23 wait(null); 24 25 printf("child Complete\n"); 26 } 27 28 return 0; 29 } Você é capaz de identificar os trechos executados por pai e filho? Considere ainda o exemplo a seguir:

EXERCÍCIO 2 COMUNICAÇÃO ENTRE PROCESSOS 2 3 int main() 4 { 5 printf("%d\n",getpid()); 6 fork(); 7 printf("%d\n",getpid()); 8 9 10 fork(); 11 printf("%d\n",getpid()); 12 13 fork(); 14 printf("%d\n",getpid()); 15 16 return 0; 17 } Quantos processos serão criados? EXERCÍCIO: Construa um exemplo, na linguagem C, onde os processos pai e filho trocam algum tipo de mensagem. Na linguagem C, em sistemas Linux a criação de uma thread pode ser feita executando uma chamada à função clone() clone() Faz uma cópia compartilhada do processo (similar ao fork) mas mantém uma área de memória compartilhada. Em sistemas Linux utilizamos o termo task para se referir a processos e threads. A principal diferença é o tipo de recurso que será compartilhado. Figura 1: Flags para criação de threads

O trecho abaixo apresenta uma criação de thread no Linux: 1 #define _GNU_SOURCE 2 #include <stdlib.h> 3 #include <malloc.h> 4 #include <sys/types.h> 5 #include <sys/wait.h> 6 #include <signal.h> 7 #include <sched.h> 8 #include <stdio.h> 9 10 // 64kB stack 11 #define FIBER_STACK 1024*64 12 13 // The child thread will execute this function 14 int threadfunction( void* argument ) 15 { 16 printf("child thread exiting\n"); 17 return 0; 18 } 19 20 int main() 21 { 22 void* stack; 23 pid_t pid; 24 25 // Allocate the stack 26 stack = malloc( FIBER_STACK ); 27 if ( stack == 0 ) 28 { 29 perror("malloc: could not allocate stack"); 30 exit(1); 31 } 32 33 printf( "Creating child thread\n" ); 34 35 // Call the clone system call to create the child thread 36 pid = clone( &threadfunction, (char*) stack + FIBER_STACK, 37 SIGCHLD CLONE_FS CLONE_FILES CLONE_SIGHAND CLONE_VM, 0 ); 38 if ( pid == -1 ) 39 { 40 perror( "clone" ); 41 exit(2); 42 } 43 44 // Wait for the child thread to exit 45 pid = waitpid( pid, 0, 0 ); 46 if ( pid == -1 ) 47 { 48 perror( "waitpid" ); 49 exit(3); 50 } 51 52 // Free the stack 53 free( stack );

54 printf( "Child thread returned and stack freed.\n" ); 55 56 return 0; 57 } EXERCÍCIO: Incremente o exemplo acima para representar a troca de informações de contexto entre a thread e o processo pai. Considere o programa fatorial abaixo: # include <stdio.h> int main() { int i, num, j; printf ("Enter the number: "); scanf ("%d", &num ); for (i=1; i<num; i++) j=j*i; EXERCÍCIO PARA CASA } printf("the factorial of %d is %d\n",num,j); 1. Transforme o problema em um exemplo multiprocessado; 2. Compare o desempenho das chamadas fork() e clone(). Qual possui melhor desempenho? Por quê? BIBLIOGRAFIA SILBERSCHATZ, Abraham et al. Operating system concepts. Reading: Addison-Wesley, 1998. TANENBAUM, Andrew S.; MACHADO FILHO, Nery. Sistemas operacionais modernos. Prentice-Hall, 1995.