Sistemas Operativos, 3. o MIEIC 2009/10, FEUP

Documentos relacionados
Ficheiros de texto 1. Ficheiros de texto. 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro.

Programação. Folha Prática 10. Lab. 10. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

Sistema de Controlo com Acesso Remoto

ADTs (Abstract Data Types): Motivação

Teste de Sistemas de Operação 30 de Maio de 2009

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

Relatório Trabalho Final Reservas de Viagens de Avião

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Manual de Utilização

1.a) Qual a diferença entre uma linguagem de programação de alto nível e uma linguagem de programação de baixo nível?

Conselho Regional do Norte Câmara dos Solicitadores. Plataforma Moodle de apoio aos Estágios Introdução

Legibilidade do código fonte

Programação: Vetores

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Linguagem de Programação C

Objectivos. Programação I (2010/2011) 2 o Trabalho de Programação

Programação de Sistemas. Tubos

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Strings e Arrays POO

Leitura Segura de Strings

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

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

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

IPCA MANUAL DO UTILIZADOR

Projecto de Laboratório de Computadores

Ambientes de Execução

1ª Lista de Exercícios

Modularidade - Fun ções e Procedimentos

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Acronis Backup & Recovery 10 Server for Linux. Manual de introdução rápido

Disciplina: Introdução aos Sistemas Operacionais Professor: Fernando H. Santorsula

Fábio da Fontoura Beltrão Felipe Augusto Chies Lucas Fialho Zawacki Marcos Vinicius Cavinato Matheus de Carvalho Proença

Segundo trabalho prático de implementação Sistema de reserva de assentos

Instituto Superior de Engenharia de Lisboa

Simulação de Caixa Automático

Revisão de Programação em C++ Leandro Tonietto Estruturas de Dados em C++ Segurança da Informação

Algoritmos e Linguagem de Programação em C. Professor: Bernard Cardoso Oliveira

Fundamentos de Programação

Introdução e Conceitos

Guia e Utilização do Visual Studio.NET 2003

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Programas Interativos

Dicas para implementação do Trabalho 6

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Questão 01 (Neilor Tonin) Aula Prática 3: Estrutura Condicional. Entrada. Saída. Exemplo de entrada e Saída. - Procedimento para a entrega:.

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

Como usar o P-touch Transfer Manager

Sistema Rodoviário Tabajara

Recuperação P1 de Estrutura de Dados

4. Estruturas Fundamentais de Programação em C

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 1º Semestre 2007/2008

Breve Introdução aos Sistemas Operativos. Disciplina de Informática PEUS, U.Porto

Projeto Testes Intermédios (TI) 2013/2014. Manual de utilização da Extranet TI. Diretores e Gestores de Projeto

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2003 / 2004

Sistemas de Operação

Elementos de Linguagem C

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

Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07

Ana Paula Tomás. Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto 2010/2011

Curso de C para Engenharias

system("pause"); //Envia comando para o sistema operacional solicitando parada de execução do programa } //limitador do corpo do programa

Linguagem C: Introdução

Manual Rápido do Sistema GPC Gestão de Classificações 2011 (Clube Columbófilo de São Miguel)

Arquitetura de Sistemas Operativos

Planificação Anual da Disciplina de Sistemas Operativos - 12º 1PI

Threads ou Processos Leves

DELEGAÇÃO REGIONAL DO ALENTEJO CENTRO DE FORMAÇÃO PROFISSIONAL DE ÉVORA REFLEXÃO 5

Ficha de Avaliação Sumativa. Notas Gerais:

PLANIFICAÇÃO SEMESTRAL

Thread. Thread. Sistemas Operacionais. Leonard B. Moreira. UNIVERSIDADE ESTÁCIO DE SÁ fevereiro, / 41

Gilberto A. S. Segundo. 24 de agosto de 2011

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Primeira Aula Prática

1) Operadores de auto incremento ++ e auto decremento --

Modulo 2 Leitura, Escrita e IF

Introdução a Linguagem C

Sistema de Entrada/Saída

ponteiros INF Programação I Prof. Roberto Azevedo

Sintaxe Básica de Java Parte 2

Algoritmos e Estruturas de Dados I

Guia de Instalação do Google Cloud Print

Aula 9: Shell Script

Programação. Folha Prática 5. Lab. 5. Departamento de Informática Universidade da Beira Interior Portugal Copyright 2010 All rights reserved.

REDES INTEGRADAS DE TELECOMUNICAÇÕES I 2008 / 2009

Domine o Word Professor: Rafael Henriques

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

Manual de Utilizador. Recolha de Subsídio de Turnos DIRECÇÃO GERAL DA ADMINISTRAÇÃO DA JUSTIÇA

Exercícios: Arquivos

Introdução à Computação MAC0110

Controlo de Execução. K&R: Capitulo 3

Gestão de Base de dados Formulários

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 3 de setembro de 2010

Laboratório 4 Correcção de erros sintácticos e tipos de dados primitivos

Fundamentos de Programação

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Manual de utilização para estudantes

Relatório Equipamento Externo

CENTRO REGIONAL DE BRAGA UCP

Transcrição:

Sistemas Operativos, 3. o MIEIC 2009/10, FEUP RMA, JVV, HSF December 20, 2009 2. o Trabalho Prático: SO Shell Stats (sosh s) Objectivos Completando com sucesso todas as fases deste trabalho, os alunos demonstram conhecer e saber utilizar a interface programática de UNIX para: criar programas multithread; promover a intercomunicação entre processos através de canais com nome (named pipes); evitar conflitos entre entidades concorrentes, por via de mecanismos de sincronização. Descrição Pretende-se obter uma aplicação do tipo cliente-servidor capaz de lidar com situações de conflito no acesso a zonas (recursos) partilhadas. A aplicação cliente será a sosh, desenvolvida no trabalho prático 1, que será estendida para comunicar com um servidor (freq). A aplicação servidor não será interactiva (toda a comunicação com ela deve ser feita via comandos da sosh), e tem como objectivo guardar informação necessária para o cálculo da análise de frequência de letras. Este é um método simples para decifrar mensagens criptografadas por meio da análise, no texto criptografado, de padrões que se repetem constantemente 1. O trabalho a desenvolver consiste nos seguintes pontos: 1. Estenda a sosh implementada no trabalho prático anterior para enviar para um canal com nome (named pipe), /tmp/sosh.canal, todos os comandos introduzidos pelo utilizador bem como os resultados dos mesmos. Deverá criar dois processos: um para executar o comando e outro para comunicar com o named pipe; 1 http://www.numaboa.com/criptografia/criptoanalise/310-frequencia-no-portugues 1

2. Desenvolva um programa freq que lê do canal com nome /tmp/sosh.canal uma linha de texto (use o código disponibilizado no anexo A para ler uma linha de um descritor de ficheiro) e actualize a estrutura de dados com a frequência das letras. O programa deverá aceitar, através da linha de comandos, a opção -v que fará com que envie para o ecrã mensagens sempre que iniciar uma operação. Deverá ainda imprimir a lista de frequências após serem actualizadas; Não distinga entre letras maíusculas e minúsculas, ou seja, freq não é case sensitive; A estrutura de dados deverá ser um array de inteiros; Para efeitos do cálculo das frequências, considere somente as letras do alfabeto latino, ignorando todas as outras (ver http://pt. wikipedia.org/wiki/alfabeto_latino). 3. Desenvolva o comando stats que deverá listar em ordem crescente as frequências das letras até ao momento. O resultado a ser impresso no ecrã deverá ser enviado ao cliente (sosh s) pelo servidor (freq) através do named pipe /tmp/sosh.results. Sendo que pretende as frequências até ao momento em que o comando foi invocado, não é permitido alterar os valores das estruturas de dados durante a computação do ranking de frequências. Para facilitar a distinção entre o que é um comando e texto normal, crie um named pipe /tmp/sosh.cmd para enviar comandos ao servidor. O servidor poderá possuir um processo (ou thread) para ler dos named pipes /tmp/sosh.canal e /tmp/sosh.cmd. 4. Altere o programa freq por forma a conseguir processar do named pipe várias linhas de texto ao mesmo tempo (usando pthreads). O número de threads a ser criado deverá ser passado ao programa através da linha de comandos ( -t <num> ). Cada linha no named pipe só deverá ser processada uma única vez. 5. Desenvolva o comando realtime <on/off> que deverá notificar o utilizador da sosh s que o top 5 de letras mais frequentes sofreu uma alteração. Naturalmente, se o realtime estiver off (estado por defeito) o utilizador não será informado. Use o named pipe /tmp/sosh.results para a comunicação do top 5 se este sofrer alguma alteração. Crie um processo que leia da named pipe /tmp/sosh.results o resultado e imprima no ecrã (usando unnamed pipes). 2

Valorização Quem desejar obter o máximo da classificação estabelecida para este trabalho poderá estender sosh s (versão b) por forma que possa suportar as seguintes opções Dotar a sosh (e se necessário freq) com os mecanismos necessários para que seja possível recolher informação das várias shells; s hist [n] - crie e apresente no ecrã um histograma com a frequência das diferentes letras; se o for invocado sem argumentos, deverá apresentar o histograma de todas as letras, caso contrário somente o top n. Aquando da geração do histograma, nenhum processo poderá aceder à estrutura de dados. Faça uso da biblioteca Histograms da GNU Scientific Library ou do gnuplot para visualizar os histogramas. Produto final O trabalho total consiste na produção de ficheiro.tgz incluindo o código fonte, um makefile preparado para facilitar a geração do executável, e um ficheiro de texto README com os passos necessários para compilar e executar o código. Deverão também de entregar um breve relatório (inclua no relatório um esquema exemplificativo dos canais de comunicação e acessos as estrutura de dados) em formato pdf. O compacto, identificado com um nome do tipo TPnGX.tgz, onde n é o número do turno prático que estão inscritos e X é o número atribuído ao grupo pelo docente das teórico-práticas (e.g. TP1G2.tgz), deve ser entregue usando as facilidades disponíveis para a unidade curricular no moodle (http: //moodle.fe.up.pt/0910/) até ao final do dia 13/12/2009. Avaliação A classificação do trabalho será repartida em 90% para o programa normal e 10% para a parte de valorização. O programa normal será classificado relativamente aos seguintes aspectos: programação, incluindo estrutura, comentários, funcionalidades, etc. (60%); relatório curto, que deve consistir na apresentação dos objectivos, estrutura trabalho, testes, conclusão e declaração de autoria (20%); apresentação, brevemente efectuada pelos autores ao docente que apreciará, ele mesmo, na altura, as facilidades de compilação, utilização, etc. (20%). Código de Honra Espera-se que cada grupo obtenha a sua nota baseada exclusivamente no esforço e trabalho dos elementos do grupo. Consequentemente qualquer forma de plágio, constitui uma fraude inaceitável. Estes comportamentos não serão tolerados e os alunos serão punidos de acordo com a regulamentação da FEUP. Bom trabalho! RMA, JVV, HSF. 3

A O módulo readline readline.h 1 / r e a d l i n e. h r e a d l i n e command module 3 / 5 #ifndef READLINE H #define READLINE H 7 s s i z e t r e a d l i n e ( int fd, void vptr, s i z e t maxlen ) ; 9 #endif readline.c / 2 r e a d l i n e. c r e a d l i n e command module / 4 #include <s t d i o. h> #include <s y s / types. h> 6 #include <s y s / s t a t. h> #include <f c n t l. h> 8 #include r e a d l i n e. h 10 s s i z e t r e a d l i n e ( int fd, void vptr, s i z e t maxlen ) { 12 s s i z e t n, r c ; char c, ptr ; 14 ptr = vptr ; 16 for ( n = 1 ; n < maxlen ; n++) { i f ( ( r c = read ( fd, &c, 1) ) == 1) { 18 ptr++ = c ; i f ( c == \n ) 20 break ; } else i f ( r c == 0) { 22 i f ( n == 1) return ( 0 ) ; / EOF, no data read / 24 else break ; / EOF, some data was read / 26 } else return( 1) ; / e r r o r / 28 } 30 ptr = 0 ; return ( n ) ; 32 } 34 void example ( ) { 4

int fp ; 36 int l ; char buf [ 2 5 5 ] ; 38 fp = open ( pipe, O RDONLY) ; 40 l = r e a d l i n e ( fp, buf, 244) ; p r i n t f ( read \n\ t %s \n, buf ) ; 42 c l o s e ( fp ) ; } 5