Você está na página 1de 20

FESURV UNIVERSIDA DE RIO VERDE FACULDADE DE CINCIA DA COMPUTAO

Minix Entrada e Sada

Kleber de Souza Das Chagas Maickon Alexsander Almeida Dias Samuel Gomes De Morais Junior Renato Alves Faria ORIENTADOR: Prof. Fabian Correa Cardoso

RIO VERDE 2012

Minix
Entrada e Sada
Entrada e sada um tema frequentemente negligenciado, mas importante. Uma parte significativa de qualquer sistema operacional cuida da E/S. Uma das principais funes de um sistema operacional controlar todos os dispositivos e E/S (entrada/sada). Ele deve enviar comandos para os dispositivos, capturar interrupes e tratar erros. Tambm deve oferecer uma interface entre os dispositivos e o restante do sistema que seja simples e fcil de usar. Na medida do possvel a interface deve ser a mesma para todos os dispositivos (endependencia de dispositivo). O cdigo de E/S representa uma frao significativa do total do sistema operacional. Mdulos de E/S Funo do Mdulo Um mdulo de E/S a entidade dentro de um computador responsvel pelo controlo de um ou mais dispositivos externos e pela transferncia de dados entre aqueles dispositivos e a memria principal e os registos da CPU. Assim, o mdulo de E/S tem de ter uma interface interno ao computador (da CPU e a memria principal) e um interface externo para o computador (ao dispositivo externo). As categorias principais de funes ou requisitos para um mdulo de E/S caem dentro das seguintes: Temporizao e Controlo Comunicao com a CPU Comunicao com o Dispositivo Temporizao dos Dados Deteco de Erros. Durante qualquer perodo de tempo, a CPU pode comunicar com um ou mais dispositivos externos de forma imprevisvel, dependendo das necessidades de E/S. Os recursos internos, tais como, a memria principal e o barramento de sistema, tm de ser partilhados entre um certo nmero de atividade incluindo o processamento de informao de E/S. Assim, a funo

de E/S inclui um requisito de temporizao e controlo, para controlar o fluxo de trfego entre os recursos internos e os dispositivos externos. Por exemplo, o controlo da transferncia de dados de um dispositivo externo para a CPU pode envolver a seguinte sequncia de passos: A CPU interroga o mdulo de E/S para testar o status do dispositivo associado. O mdulo de E/S retorna o status do dispositivo. Se o dispositivo estiver operacional e pronto para transmitir, a CPU requer a transferncia de dados, atravs de um comando para o mdulo de E/S. O mdulo de E/S obtm uma unidade de dados (e.g. 8 ou 16 bits) do dispositivo externo. Os dados so transferidos do mdulo de E/S para a CPU. Se o sistema usa um barramento, ento cada uma das interaes entre a CPU e o mdulo de E/S envolve uma ou mais arbitragens do barramento. O anterior cenrio simplificado ilustra, tambm, que o mdulo de E/S tem de ter a capacidade de se envolver em comunicao com a CPU e com o dispositivo externo. A comunicao com a CPU envolve: Descodificao de Comandos: O mdulo de E/S aceita comandos da CPU. Estes comandos so geralmente enviados como sinais no barramento de controlo. Por exemplo, um mdulo de E/S para um controlador de disco pode aceitar os seguintes comandos: READ SECTOR (ler sector), WRITE SECTOR (escrever sector), SEEK (procura) nmero de pista e SCAN (obtm) ID (identificao) de registo. Cada um dos dois ltimos comandos inclui um parmetro que enviado pelo barramento de dados. Dados: Os dados so trocados entre a CPU e o mdulo de E/S atravs do barramento de dados. Relato de status: Uma vez que os perifricos so lentos, importante saber o estado do mdulo de E/S. Por exemplo, se for pedido a um mdulo de E/S para enviar dados para a CPU (leitura), este pode no estar pronto a faz-lo, porque ainda est a trabalhar no comando de E/S anterior. Este facto pode ser relatado atravs de um sinal de status. Sinais de status comuns so: BUSY (ocupado) e READY (pronto). Pode, tambm, haver sinais para reportar vrias condies de erro. Deteco de Erros: Cada dispositivo de E/S possui um endereo, tal como acontece com cada palavra na memria. Assim, um mdulo de E/S tem de reconhecer um nico endereo para cada perifrico sobre o seu controlo. Numa outra perspectiva, o mdulo de E/S tem de ser capaz de efetuar comunicao com o dispositivo. Esta comunicao envolve comandos.

Dispositivos de E/S

Os dispositivos de E/S podem ser divididos, grosso modo, em duas categorias: dispositivos de bloco e dispositivos de caractere. Um dispositivo de bloco armazena informaes em blocos de tamanho fixo. Um dispositivo de bloco que possvel ler ou gravar cada bloco independentemente de todos os outros. Os discos so os dispositivos de bloco mais comuns. Controladoras de Dispositivo As unidades de E/S geralmente consistem em um componente mecnico e em outro eletrnico. possvel separar as duas partes para oferecer um projeto mais modular e genrico. Em computadores pessoais, esse frequentemente toma a forma de uma placa de circuito impresso que pode ser inserida em um slot na parenteboard do computador (placame).

O trabalho da controladora converter o fluxo serial de bits em um bloco de bytes e executar qualquer correo de erro necessria. O bloco de bytes tipicamente primeiro montado, bit por bit, em um buffer dentro da controladora. Depois que sua soma de verificao foi verificada e o bloco foi declarado livre de erros, ele pode, ento, ser copiado para a memoria principal. Cada controladora tem alguns registradores que so utilizados para comunicar-se com a cpu. Em alguns computadores, esses registradores so parte do espao normal de endereamento de memoria. Esse esquema chamado E/S mapeada em memoria. Acesso direto a memoria (DMA) Muitas controladoras, especialmente as de dispositivos de bloco, suportam acesso a direto a memoria ou dma. Para explicar como o dma funciona vejamos primeiro como as leituras de disco ocorrem quando o dma no utilizado. Primeiro a controladora l o bloco (um ou mais setores) da unidade serialmente, bit a bit, ate que o bloco inteiro esteja no buffer interno da controladora. Em seguida, ela calcula a soma de verificao para certificar-se de que no ocorreram erros de leitura. Ento, a controladora gera uma interrupo. Quando o sistema operacional comea a executar, ele pode ler o bloco de disco do buffer da controladora, um byte ou uma palavra por vez executando um lao com cada iterao lendo um byte ou uma palavra de um registrador de controladora de dispositivo e armazenando-o na memoria.

A controladora simplesmente no armazena os bytes na memoria principal logo que os recebe porque ela precisa de um buffer interno

Software de entrada e sada Metas do software de E/S Um conceito-chave no projeto de software de E/S conhecido como independncia de dispositivo. Isso significa que deve ser possvel escrever programas que podem ler arquivos em um disquete, em um disco rgido ou em um CDROM, sem que seja necessrio modificar os programas para cada tipo de dispositivo diferente. Qualquer um deve ser capaz de digitar um comando como Sort<imput> output E faze-lo funcionar com a entrada proveniente de um disquete de um disco rgido ou teclado e a sada indo para o disquete, para o disco rgido ou ate para a tela, cabe ao sistema operacional cuidar dos problemas causados pelo fato que esses dispositivos realmente so diferentes e requerem drivers de dispositivos muito diferentes para realmente gravar os dados no dispositivos de sada. Outra questo importante para o software de E/S o tratamento de erros. Em geral devem ser tratados o mais perto possvel do hardware. Se a controladora descobrir um erro de leitura, ela

devera tentar corrigir o erro se puder. Se no puder, ento o driver de dispositivo devera tratalo, talvez tentando simplesmente ler o bloco novamente. Muitos erros so transitrios, como aqueles de leitura causados por partculas de p no cabeote de leitura e desaparecem se a o operao repetida. Somente quando as camadas mais baixas no so capazes de lidar com o problema que as camadas superiores devem ser informadas. Em muitos casos, a recuperao de erros pode ser feita transparentemente em um nvel baixo, sem que os nveis superiores nem mesmo saibam sobre o erro. Manipuladores de interrupes Interrupes uma realidade desagradvel. Elas devem ser escondidas longe, no fundo das entranhas do sistema operacional, de modo que o mnimo possvel do sistema saiba sobre elas. A melhor maneira de oculta-las ter cada processo que inicia uma operao de E/S bloqueado ate que a E/S tenha-se completado e a interrupo tenha ocorrido. O processo pode bloquear-se fazendo um dowx em um semforo. Um wait em uma varivel de condio ou um receive em uma mensagem, por exemplo. Quando as interrupes acontecem, o procedimento de interrupo faz o que tem de fazer para desbloquear o processo que iniciou a E/S em alguns sistemas, ele fara um UP em um semforo. Em outros, ele fara um sinal em uma varivel de condio em um monitor. Em outros, ainda, ele enviara uma mensagem para o processo bloqueando. Em todos casos, o efeito geral da interrupo ser que um processo que anteriormente estava bloqueado agora ser capaz de executar. Software de E/S no espao do usurio Embora a maioria do software de E/S esteja dentro do sistema operacional, uma pequena parte consiste em bibliotecas vinculadas em programas de usurio, e ate mesmo programas inteiros que executam fora do Kernel. As chamadas de sistema, incluindo as chamadas de sistema de E/S, normalmente so feitas por procedimentos de biblioteca. Quando um programa de C contem a chamada Count=write(fd,buffer,nbytes); O procedimento de biblioteca write ser vinculado com o programa e estar contido no programa binrio presente na memoria em tempo de execuo. A coleo de todos esses procedimentos de biblioteca claramente parte dos sistemas de E/S. IMPASSES Os sistemas de computador esto repletos de recursos que podem ser utilizados apenas por um processo por vez. Exemplos comuns incluem plotadoras, leitores de cd-rom, gravadores de cd-rom sistema de backup em unidade de fita dat 8mm e entradas na tabela de processos do sistema. Ter dois processos simultaneamente gravando na impressora resulta em uma confuso. Ter dois processos que utilizam a mesma entrada na tabela de processos provavelmente levara a uma queda do sistema. Portanto, todos os sistemas operacionais tem a capacidade de temporariamente conceder acesso exclusivo a acerto recursos para um processo.

Suponha que o processo A solicita a unidade de cd-rom solicita a plotadora e obtm-na tambm. Agora o processo a solicita a plotadora e bloqueia, esperando por ela. Por fim, o processo B solicita a unidade de cd-rom e tambm bloqueia. Neste ponto, os dois processos esto bloqueados e permanecero assim eternamente. Essa situao e chamada de impasse (DEADLOCK) os impasses no so uma boa coisa para ter em seu sistema

Recursos Os impasses podem ocorrer quando se concede aos processos acesso exclusivo a dispositivos, a arquivos, etc. Os recursos dividem-se em dois tipos: preemptivel e no preempetivel. Um recurso preempetivel e aquele que pode ser tirado do processo que proprietrio dele sem nenhum problema. A memoria um exemplo de um recurso preemptivel. Considere, por exemplo, um sistema com 512k de memoria de usurio, uma impressora e dois processos a solicita e obtm a impressora, ento, comea a calcular os valores a imprimir. Antes de finalizar os clculos, ele excede seu quantum de tempo e comutado para o disco. O processo B agora executa e tenta, sem sucesso, obter a impressora. Potencialmente, agora temos uma situao de impasse, porque A tem a impressora e B tem a memoria e nem um nem outro pode prosseguir sem o recurso segurado pelo outro. Felizmente possvel tirar a memoria de b comutando a para o disco e comutando A para a memoria. A abordagem mais simples o ALGORITMO DE AVESTRUZ: enfie sua cabea na areia e finja que no h nenhum problema. Pessoas diferentes reagem a essa estratgia de maneiras diferentes. Os matemticos consideram-no totalmente inaceitvel e dizem que impasses devem ser evitados a todo custo

Cdigo fonte * Buffer de sada Vazio */ # Define clear_buffer () (out_count = 0) /* * Personagem de impresso no terminal */ # Define putchar (c) (void) write_char (std_out, (c)) /* * Sino tocar no terminal */ # Define ring_bell () putchar ('\ 07') /* * Seqncia de impresso no terminal */ # Define string_print (str) (void) WriteLine (std_out, (str)) /* * Buffer de sada flush */ # Define flush () (void) flush_buffer (std_out) /*

Um pequeno trecho de cdigo que envolve printf e scanf com sintaxe C para entrada e sada til para concursos de programao onde a velocidade extremamente importante. # include <cstdio> classe ostream { pblico: ostream (FILE * s): cstream (s) {} FILE * cstream; }; classe istream { pblico: istream (FILE * s): cstream (s) {} FILE * cstream; }; ostream cout (stdout); ostream cerr (stderr);

istream cin (stdin); classe endl_t {}; endl_t endl; linha ostream & operator << (ostream & s, const endl_t endl) {Putc (10, s.cstream); o retorno;} linha ostream & operator << (ostream & s, const char * d) {Fprintf (s.cstream, "% s", d); o retorno;} linha istream operador & >> (istream & s, char * str) {If (fscanf (s.cstream, "% s", str) <1) jogue 6; retorno s;} # define INT_IN_OUT (intType, formato) \ linha ostream & operator << (ostream & s, intType n) \ {Fprintf (s.cstream, "%" formato, n); o retorno;} \ linha istream operador & >> (istream & s, intType & n) \ {If (fscanf (s.cstream, "%" formato, & n) <1) jogue 6; retorno s;} INT_IN_OUT (char, "c") INT_IN_OUT (int, "d") INT_IN_OUT (int tempo "ld") INT_IN_OUT (int longo tempo ", Ld") INT_IN_OUT (int unsigned, "u") INT_IN_OUT (int unsigned long, "lu") INT_IN_OUT (long int unsigned long, "Lu")

Alterar o Minix de forma que toda vez que seja pressionada uma determinada tecla de funo, sejam mostrados na tela os ltimos acessos ao I/O, tendo em cada linha numero da porta de I/O, escrita/leitura e valor. I/O NO MINIXComo

funciona

Como funciona
No Minix 3, drivers de entrada e sada so feitos com passagem de mensagens, de forma que rodem em modo usurio e se comuniquem com o kernel. Isso garante que um driver tenha limites quanto ao que pode fazer e aumente a estabilidade do sistema. O software de I/O no Minix est organizado em quatro camadas, como mostra a figura abaixo:

Em que parte do cdigo isso implementado? Em nossa pesquisa, conclumos que o arquivo /usr/src/drivers/libdriver/driver.c o arquivo responsvel por se comunicar com os drivers e executar as requisies, que so passadas por mensagens. Driver.c

Teclas de funes Apresentam, por padro, diversas mensagens na tela do terminal. Funcionamento Para alterar a funcionalidade da tecla de funo f7, teramos que alterar trs arquivos, que descobrimos, pesquisando sobre alterao das teclas de funo:

Implementao Como salvar? Criar um arquivo de cabealho com a declarao de vetores que armazenem as chamadas e uma funo para poder enviar os cdigos das mensagens chamadas. Incluir esses cabealho nos arquivos das teclas de funo e criar uma funo que pegasse mensagens passadas pelos arquivos dos drivers Inserir o cabealho nos arquivos dos drivers e em seu cdigo chamar a funo das teclas de funo.

1passo: Salvar as chamadas

2 Passo: teclas de funo

3 Passo: entrada e sada