2. Introdução aos Sistemas Operacionais No passado, a eficiência era o principal aspecto (custo do hardware). Isto está mudando em função da relação entre o custo do hardware e o custo do software. Por razões históricas, a maior parte da teoria de sistemas operacionais está voltada para o aspecto eficiência. • O que é um Sistema Operacional ? Usuário 1 Compilador Usuário 2 Usuário 3 Editor de texto Browser ... Ao longo do tempo, a área de sistemas operacionais influenciou e foi influenciada pela área de arquitetura. A introdução de novas características no hardware foi a solução natural para muitos problemas encontrados na área de sistemas operacionais. Diversos aspectos da computação são tratados em ambas as disciplinas, de forma ligeiramente diferente. Usuário n Quake • Histórico Aplicativos Primeiros sistemas - somente hardware: Sistema Operacional (infraestrutura) Nos primórdios da computação, havia apenas o hardware. Grandes máquinas (volumosas) dirigidas de um console. Eram utilizadas da seguinte forma: Hardware Hardware = Recurso Computacional Aplicação = Resolve os diversos problemas dos usuários Sistema Operacional = Controla e coordena o uso do hardware pelas aplicações Programador e operador eram a mesma pessoa (normalmente, um cientista). Existia uma tabela de horário onde era feita a reserva de horas de máquina. Com o passar do tempo, mais hardware e software ficaram disponíveis. As fitas magnéticas passaram a ser empregadas com bastante intensidade. Surgiram bibliotecas de funções, contendo principalmente rotinas para acessar os dispositivos de E/S. Cada novo periférico exigia que novas rotinas fossem escritas e adicionadas à biblioteca existente. Recursos gerenciados pelo SO: • • • • tempo de CPU espaço de memória espaço em disco periféricos (impressora, etc.) O SO é um programa de controle, pois controla os dispositivos de entrada e saída (I/O devices) e os programas que resolvem os problemas dos usuários. Ele previne erros e o uso impróprio do computador (por exemplo, um usuário não pode destruir os arquivos de outros usuários). O SO existe porque é útil: ele cria um sistema computacional usável. As aplicações possuem necessidades em comum que são atendidas pelo sistema operacional. Estas necessidades correspondem exatamente à alocação e controle dos recursos. O objetivo do SO é permitir o uso do computador de forma fácil e eficiente. Pode-se dizer que o SO de um computador é a parte de software que estende os recursos de hardware da máquina, tornando a utilização do equipamento mais fácil, mais eficiente e mais confiável. AMBIENTES OPERACIONAIS Revisão de arquitetura dos computadores Prof. Simão Sirineo Toscani Programa é carregado na memória através de chaves, fita de papel ou cartões perfurados; Através de botões se inicia a execução; O andamento da execução é acompanhado através de luzes no painel; O resultado da computação é obtido através de impressora, fita de papel ou cartão perfurado; Se ocorrer um erro durante a computação, deve-se parar o programa, examinar a memória e os registradores, consertar o programa e repetir todo o processo. p. 1 Com o aparecimento das linguagens de alto nível FORTRAN e COBOL, a programação ficou mais fácil, mas a operação ficou mais difícil. A execução de um JOB (programa) em FORTRAN era feita da seguinte forma: Carrega a fita magnética que contém o compilador; Lê o programa de cartões, gera assembler em fita magnética ou cartão perfurado; Carrega a fita magnética que contém o montador; Lê o programa montado e gera código de máquina, sem as rotinas da biblioteca; Carrega a fita magnética que contém o ligador; Lê o código gerado antes e inclui as rotinas da biblioteca que serão executadas, gerando código executável; Carrega o código executável e executa o programa. AMBIENTES OPERACIONAIS Revisão de arquitetura dos computadores Prof. Simão Sirineo Toscani p. 2 As características deste ambiente são: Grande tempo de preparação para colocar e retirar fitas magnéticas, colocar e retirar maços de cartão; Um erro em qualquer etapa significa volta ao início; Durante a preparação a CPU fica parada. Em uma época que os computadores custavam milhões de dólares, todo este tempo de CPU parada era inaceitável. Era necessário buscar uma melhor utilização da CPU, o que foi obtido através de duas medidas: • • Operadores especializados foram contratados. Isto significa que a preparação é mais rápida. Não existe mais perdas devido a pequenos espaços na planilha de horário. Entretanto, o programador deixa de ser ele mesmo o operador. Passa a existir diferença entre as duas funções. A depuração deve agora ser feita a partir das listagens geradas, pois o programador não tem mais acesso ao console. Os jobs com necessidades parecidas são reunidos em batches (lotes), para minimizar a necessidade de trocar fitas magnéticas. Apesar destas duas alterações, na transição entre jobs a CPU fica parada. O operador deve perceber quando um job termina e então iniciar a execução do job seguinte. O Monitor Residente: O passo seguinte foi o surgimento do sequenciador automático de jobs, o primeiro sistema operacional criado, ainda que bastante rudimentar. O sequenciamento automático de jobs é feito por um monitor residente, ou seja, um pequeno programa que fica o tempo todo na memória do computador e que transfere o controle automaticamente de um job para o outro. Quando o computador é ligado, o controle é entregue ao monitor residente, que inicia a execução de um programa. Quando o programa termina, o controle volta ao monitor residente, que ativa o programa seguinte, e assim por diante. Antes, o programador informava ao operador o que devia ser feito através de um pedaço de papel contendo a descrição do job (que compilador utilizar, que módulos de biblioteca usar, etc.). Agora o programador deve fornecer uma descrição semelhante para o monitor residente. Isto era feito na forma de cartões de controle. Os cartões de controle utilizavam algum caractere especial para se diferenciar dos demais (cartões de programa e de dados). Abaixo está um exemplo de job: $JOB $FTN prog $LOAD $RUN dados $END (Identifica o job que inicia) (Executa o compilador FORTRAN) (Programa a ser compilado) (Carrega o resultado da compilação na memória) (Executa o programa compilado) (Dados para o programa) (Marca o fim do job) AMBIENTES OPERACIONAIS Revisão de arquitetura dos computadores Prof. Simão Sirineo Toscani A maior vantagem do monitor residente é a redução do tempo entre 2 jobs do mesmo batch, pois automatiza a transição entre jobs. A organização do monitor residente é a seguinte: Tabela de interrupção Controladores de Dispositivos (Device Drivers) Interpretador de cartões e Seqüenciador de jobs Área para programas dos usuários O controle da CPU fica parte do tempo com o monitor residente e parte do tempo com o programa do usuário. Eventualmente, pode ser solicitada a ação do operador para, por exemplo, carregar determinada fita magnética. • Performance O objetivo de todas as mudanças feitas até agora é obter um melhor desempenho do computador, uma vez que trata-se de uma máquina cara. Como humanos são muito lentos, a operação humana foi substituída por um software, no caso, o sistema operacional. Entretanto, dispositivos mecânicos de I/O (em geral na faixa milisegundos) são mais lentos que os dispositivos eletrônicos (microsegundos). Isto faz com que a CPU acabe parada boa parte do tempo esperando pelo I/O. Por exemplo, se um compilador é capaz de processar 300 cartões/segundo e a leitora somente é capaz de ler 2 cartões/segundo, a CPU ficará parada 93,3% do tempo durante a compilação. Algumas técnicas foram utilizadas para minimizar este problema. Entre elas estão a operação off-line, a bufferização e o spooling. Operação off-line: Na operação chamada (na época) on-line, a CPU recebe dados diretamente da leitora de cartões e envia resultados diretamente para a impressora. Na operação off-line, a CPU recebe e envia dados para fitas magnéticas. Como unidades de fita são mais rápidas que leitoras de cartões e impressoras, a CPU fica menos tempo parada. Dispositivos especiais ou pequenos computadores são responsáveis pela transferência dos cartões para a fita e da fita para a impressora. A passagem de operação on-line para operação off-line não exige mudança nos aplicativos, mas apenas no sistema operacional (device drivers). O aplicativo pensa estar lendo dados de cartões, mas na verdade o sistema operacional está acessando uma fita magnética. O mesmo acontece com a impressora. Bufferização: A bufferização tenta manter a CPU e o dispositivo de I/O o tempo todo ocupados. Enquanto a CPU está processando um item, o próximo item já está sendo lido. O mesmo é feito com respeito à saída dos dados. A operação de I/O (feita por um canal de E/S) acontece em paralelo com a computação (feita pela UCP), e a comunicação é p. 3 AMBIENTES OPERACIONAIS Revisão de arquitetura dos computadores Prof. Simão Sirineo Toscani p. 4 feita através de buffers. Um sistema que use bufferização apresenta as seguintes características: Não é pior que sem bufferização; O buffer pode ser grande, mas sempre é limitado; Normalmente, o uso do buffer está associado com interrupções. Quando o dispositivo (canal) termina de realizar o I/O, interrompe a CPU. Esta salva o contexto de execução na pilha e busca o endereço do tratador de interrupções na tabela de interrupção. A rotina de tratamento é executada, dando início a uma nova operação de I/O. A CPU volta então para a computação que foi interrompida. É necessário que a CPU seja capaz de tratar a ocorrência de diversas interrupções simultâneas; Uma ainda maior eficiência pode ser obtida através do acesso direto à memória (DMA). Neste caso, ocorre uma interrupção por bloco de caracteres e não uma interrupção por caractere. Tudo funciona como antes, só que agora a CPU é interrompida a cada bloco transferido e não mais a cada caractere; Os tratadores de interrupção fazem parte do sistema operacional; Este mecanismo minimiza as variações na velocidade de processamento, mas ajuda pouco no caso de jobs do tipo I/O-bound (job que faz muito I/O) ou CPUbound (job que faz pouco I/O). • Spooling Com o aparecimento dos discos magnéticos, a operação off-line deixou de ser feita. Nas fitas magnéticas não é possível ler em uma ponta e escrever na outra. Isto impede o acesso simultâneo pela CPU e pelo dispositivo de I/O. Ela deve ser escrita completamente, enrolada e então lida completamente. No disco magnético é possível acessar qualquer posição a qualquer momento. O disco magnético permitiu o aparecimento do spooling. Esta técnica utiliza o disco como um grande buffer. Tudo é feito simultaneamente: Os cartões são lidos e suas imagens são guardadas no disco (input spooling); A CPU executa os programas, retirando as instruções e os dados do disco e enviando para este o resultado da computação; O resultado da execução dos programas é retirado do disco e enviado para a impressora (output spooling). O spooling exige tabelas para localizar no disco os dados de cada job (mantidos pelo sistema operacional). Enquanto a bufferização sobrepõe a computação de um job com o seu I/O, o spooling sobrepõe a computação de um job com o I/O correspondente a colocação de outros jobs no disco. Isto permitiu maior eficiência e foi um passo importante na direção da multiprogramação. os que estão prontos, de forma a melhorar o desempenho do sistema. Isto não é possível com fita ou cartão, onde os jobs devem necessariamente ser executados na ordem original. Este processo de escolha é chamado de job scheduling ou long term scheduling (outros tipos de escalonadores serão vistos mais tarde). • Multiprogramação A operação off-line, bufferização e spooling, mesmo utilizadas em conjunto, não garantem uma utilização eficiente do computador. Um único programa não consegue manter a CPU o tempo todo ocupada. Por isso surgiu a multiprogramação, que é a execução “simultânea” de vários programas (vários programas na memória). A multiprogramação aumenta a utilização da CPU, fazendo com que ela tenha sempre algo para executar. Os primeiros sistemas multiprogramados foram implementados através de uma extensão da técnica de spooling, conforme é descrito a seguir. O SO possuía três grandes processos, denominados input spooler, executive e output spooler. A função do input spooler era ler, continuamente, cartões colocados em leitoras de cartões e gravar suas imagens no disco. Todos os cartões de um job (cartões de controle, programa fonte e dados) eram copiados para arquivos em disco. No disco podiam existir várias filas, uma para cada classe de job, por exemplo. A função do executive era carregar e executar os jobs colocados no disco, de forma multiprogramada. O executive procurava manter na memória tantos jobs quantos fossem permitidos pelos recursos disponíveis. Toda vez que um job necessitava ler um cartão, a leitura era feita do arquivo em disco que continha as imagens dos cartões desse job. Toda vez que um job imprimia uma linha, o executive providenciava que a imagem da linha fosse gravada em um arquivo de saída em disco. Assim, tudo se passava como se cada job tivesse a sua leitora e a sua impressora particulares. Esses dispositivos de E/S virtuais eram implementados por arquivos de spooling em disco. O terceiro e último componente do SO, o output spooler, tinha a função de providenciar a saída dos jobs já executados. Este componente ficava, continuamente, pegando no disco os jobs já executados, um de cada vez, e fazendo a saída das suas linhas na impressora. A multiprogramação funciona da seguinte maneira: O SO escolhe um job e inicia a sua execução; Eventualmente o job pára, devido ao I/O; Sem multiprogramação, a CPU pararia também, mas neste caso o sistema operacional escolhe um novo job e inicia sua execução; Quando o primeiro job é liberado – pois terminou o I/O que ele estava esperando – este volta a ficar apto a receber a CPU para continuar a sua execução. Para obter maior eficiência, o SO procura manter na memória uma mistura de jobs CPU-bound e I/O-bound. A multiprogramação aumenta a complexidade do sistema, mas aumenta muito a sua eficiência. A multiprogramação é o tema central em qualquer curso de sistemas operacionais. O emprego de spooling cria uma importante estrutura de dados: o job pool, ou seja, a identificação dos jobs que se encontram no disco prontos para serem executados. Isto permite que o sistema operacional escolha o próximo a executar entre AMBIENTES OPERACIONAIS p. 5 Revisão de arquitetura dos computadores AMBIENTES OPERACIONAIS Revisão de arquitetura dos computadores Prof. Simão Sirineo Toscani Prof. Simão Sirineo Toscani p. 6 • Tipos de sistemas operacionais Sem considerar os sistemas para redes de computadores, os sistemas distribuídos e os sistemas paralelos, pode-se dizer que existem três tipos básicos de SOs. Um SO tempo real utiliza conceitos de multiprogramação e oferece facilidades para as aplicações de tempo real. Entre as facilidades está um escalonador preemptivo (a ser estudado no cap. 4) que leva em conta as prioridades dos processos. - Sistemas Operacionais tipo Batch • Proteção Os primeiros sistemas operacionais eram chamados de sistemas batch devido ao fato dos jobs semelhantes estarem agrupados em lotes. Isto simplificava a operação do computador quando todo o I/O era feito através de fitas magnéticas ou cartões perfurados, dispositivos essencialmente seqüenciais. Com o surgimento dos discos magnéticos, não havia mais a necessidade de reunir os jobs em lotes, pois agora o sistema operacional poderia obter diretamente no disco qualquer programa solicitado. A palavra batch passou então a designar os sistemas onde não há interação entre usuário e programa. Nos primeiros sistemas havia apenas um usuário por vez, o qual possuía controle completo sobre a máquina. O sistema operacional foi, aos poucos, assumindo funções, principalmente ligadas ao I/O. Para que fosse possível obter uma maior eficiência, o sistema operacional começou a compartilhar recursos entre usuários (por exemplo, espaço em disco no spooling). O compartilhamento de recursos, se por um lado melhorou a utilização do sistema, por outro aumentou os problemas de segurança. O erro de um usuário pode agora prejudicar n usuários. Isto cria a necessidade de proteger os usuários uns dos outros. O sistema operacional não pode permitir que um programa incorreto ou malicioso faça com que outros programas funcionem de forma incorreta. Neste tipo de sistema existe uma medida importante que é o tempo de turnaround, ou seja, o tempo entre a entrega dos cartões e o recebimento da listagem com os resultados. Não existe a possibilidade de comunicação entre o usuário e o seu programa em execução, o que dificulta a depuração de programas. Um sistema operacional batch é apropriado para jobs longos, que não necessitam de comunicação com o usuário. Para jobs curtos, onde a ação a seguir depende da decisão do usuário, o ideal é um sistema operacional interativo. - Sistemas Operacionais Time-sharing A busca por maior eficiência no desenvolvimento de programas levou ao surgimento dos sistemas interativos. Os sistemas operacionais do tipo time-sharing permitem interação de uma forma eficiente. Eles são implementados da seguinte forma: O sistema operacional dispõe de multiprogramação; Cada usuário possui um job ativo vinculado a um terminal; A comunicação via terminal é lenta, sobra CPU para os outros; Os usuários, ao longo do tempo, compartilham a CPU (time-sharing); A idéia de um sistema time-sharing foi demonstrada no início dos anos 60 e tornou-se comum no início da década seguinte. Alguns sistemas operacionais suportavam os dois ambientes (batch e time-sharing). - Sistemas Operacionais Real-time Em um sistema de tempo real, o computador está ligado a processos externos (processos industriais, equipamentos cirúrgicos, etc.) que dependem fundamentalmente dos tempos de resposta do computador. Sinais dos processos externos acionam o computador através do sistema de interrupção; se estes sinais não são respondidos prontamente (em microsegundos ou milisegundos, dependendo da aplicação), os processos externos podem prosseguir de forma errada ou degradada. Nas aplicações de tempo real, o computador é apenas uma das peças do sistema (não a mais importante, em geral) e os “usuários” são os processos externos controlados pelo computador. AMBIENTES OPERACIONAIS Revisão de arquitetura dos computadores Prof. Simão Sirineo Toscani p. 7 A proteção é implementada parte em software e parte em hardware. No caso do hardware, são utilizadas interrupções geradas internamente pela CPU, chamadas de traps. Elas são geradas sempre que uma situação de erro é detectada. - Proteção de I/O: A programação de rotinas de E/S é uma programação de baixo nível (detalhada) muito sujeita a erros. Por isso, desde os primeiros tempos (desde os primeiros SOs) estas rotinas passaram a fazer parte do sistema operacional. Isto resulta em duas vantagens: (1) garante segurança para o SO e (2) facilita a tarefa de programação para os usuários. Mas o que garante que um programa de usuário (por erro ou por malícia) não tente acessar um dispositivo de E/S diretamente? A solução para este problema é criar dois modos de operação para o hardware: modo usuário e modo monitor. Um bit é adicionado ao registrador de estado da UCP para indicar o modo corrente de operação. As instruções de I/O são privilegiadas, e só podem ser executadas no modo monitor. Se o usuário tenta executar uma destas instruções, ocorre um trap. O trap comuta para o modo monitor, e a CPU passa a executar o monitor residente (hoje em dia, denominado Kernel). O monitor residente sempre comuta para o modo usuário antes de passar o controle da UCP para um programa de usuário. O programa do usuário irá realizar I/O através do monitor. Uma chamada de sistema (uma instrução cujo efeito é o de uma interrupção gerada por software) ativa o monitor. O monitor então verifica se o pedido é legal e realiza o I/O. Este modo dual de operação permite que o sistema operacional mantenha sempre o controle do computador. Como toda operação de I/O passa necessariamente pelo sistema operacional, ele pode facilmente implementar spooling, bufferização e esconder do usuário os detalhes dos dispositivos que estão sendo acessados. - Proteção de memória: Para que o usuário não receba a CPU em modo monitor ou corrompa o funcionamento do sistema, é necessário proteger os vetores de interrupção a as rotinas do monitor. Isto pode ser feito, por exemplo, através de um fence register (registrador cerca ou AMBIENTES OPERACIONAIS p. 8 Revisão de arquitetura dos computadores Prof. Simão Sirineo Toscani limite). Neste esquema, o monitor carrega o fence register através de uma instrução privilegiada. Em modo usuário, cada endereço é comparado como fence register. Se o programa do usuário tenta acessar um endereço menor que o contido no fence register, ocorre um trap e o sistema operacional obtém o controle da CPU. O monitor residente pode acessar qualquer endereço. Isto é necessário para que ele possa, entre outras coisas, carregar o programa do usuário. 3 Serviços dos Sistemas Operacionais Pode-se dizer que o principal objetivo de um sistema operacional é criar um ambiente para execução de programas. Seu objetivo é fornecer a infraestrutura e os mecanismos necessários para levar programas para a memória e supervisionar as execuções dos mesmos. A infraestrutura resultante fornece diversos tipos de serviços aos aplicativos e aos programadores. Tabela de interrupção • Tipos de Serviços Device Drivers Sequenciamento dos jobs Interpretador de comandos Área para programas dos usuários Serviços para facilitar o uso (aumentar a conveniência de uso do sistema): Fence Register Este mecanismo pode ser adaptado para multiprogramação, conforme mostrado na figura abaixo. Agora, em modo usuário, cada endereço é comparado com dois registradores (a figura ilustra a situação em que a execução está com o job2). Limite inferior Job 2 Job 3 - Proteção contra monopolização da CPU: É necessário impedir que um job pegue a CPU para sempre. Isto é feito através de um temporizador que interrompe a CPU a cada x milisegundos. Quando o temporizador interrompe, ele ativa o monitor, que decide ou não continuar com o programa do usuário. O acesso ao temporizador deve ser feito através de uma instrução privilegiada. • A Arquitetura resultante Ao longo da história dos computadores, surgiram diversas técnicas cujo objetivo foi aumentar a eficiência na utilização dessas máquinas: sistemas batch, operação offline, bufferização, spooling, multiprogramação, time-sharing. Estas técnicas levaram a um maior compartilhamento dos recursos entre os usuários. Isto trouxe a necessidade de uma maior proteção do sistema, através de mecanismos como: operação em modo usuário e modo monitor, registradores limite, instruções privilegiadas e temporizador. Em resumo, foi necessário realizar mudanças na arquitetura para garantir que o sistema operacional sempre mantivesse o controle sobre o equipamento. Prof. Simão Sirineo Toscani Alocação de recursos; Contabilizações; Proteção • A visão do usuário Limite superior Job 4 AMBIENTES OPERACIONAIS Revisão de arquitetura dos computadores Execução de programas; Operações de I/O; Sistema de arquivos; Detecção de erros. Serviços para aumentar a eficiência: Monitor Job 1 p. 9 Pode-se olhar o sistema operacional de diferentes ângulos. A visão do usuário é formada pelas chamadas de sistema disponíveis e pelos programas de sistema (também denominados utilitários). Hoje em dia, com a utilização de interfaces gráficas, o usuário se comunica com o SO através de ícones e menus (via mouse e teclado). Com isso, deixou de haver a visão mais detalhada que havia quando a comunicação era textual (via linhas de comandos). Contudo, mesmo que isto fique escondido, o usuário se comunica com o SO sempre através de chamadas de sistema. Chamadas de sistema: Os programas utilizam as chamadas de sistema para solicitar serviços ao sistema operacional. Existem diversos tipos de chamadas de sistema. - Chamadas de sistema para controle de processo ou job: Término ou cancelamento de programa; Carregar e executar programas; Criar e terminar processos; Obter e alterar atributos de processos; Esperar a passagem de um certo tempo; Esperar ou sinalizar a ocorrência de eventos. AMBIENTES OPERACIONAIS Revisão de arquitetura dos computadores Prof. Simão Sirineo Toscani p. 10 • A visão do programador de sistema -Chamadas ligadas à manipulação de arquivos: A visão do programador de sistema é diferente. Ele percebe o sistema operacional como um servidor de interrupções cujo objetivo é administrar os recursos físicos de maneira a criar facilidades de uso para os usuários. Criar e remover arquivos; Abrir, fechar, ler e escrever em arquivos; Obter e alterar atributos de arquivos. O sistema operacional é um programa conduzido por eventos. Se não existem programas para executar ou E/S para fazer, o sistema operacional não faz nada. Neste contexto, um evento é a ocorrência de uma interrupção (de hardware ou de software). O sistema operacional é, portanto, dirigido por interrupções. Quando uma interrupção ou um trap ocorre, o sistema operacional é ativado. O evento sinalizado pode ser uma chamada de sistema, ou a indicação do término de uma determinada operação de dispositivo, ou ainda um erro na execução de um programa. - Chamadas ligadas à manipulação de dispositivos: Requisitar ou liberar dispositivo; Ler e escrever em dispositivo; Obter e alterar atributos de dispositivos. - Chamadas ligadas à manutenção de informações: - Chamada de sistema: Obter e alterar hora e data; Obter e alterar dados do sistema; Implementação das chamadas de sistema: As chamadas de sistema são normalmente implementadas através de instruções de máquina especiais, que mudam o modo de execução para privilegiado e transferem o controle para pontos bem definidos do SO (interrupções de software). Em uma linguagem de alto nível, as rotinas da biblioteca já trazem embutidas as chamadas de sistema necessárias. - Interrupção de dispositivo de E/S (I/O devices): As interrupções causadas por dispositivos de I/O acontecem no seguinte contexto: Programas do sistema (utilitários): Os programas do sistema resolvem problemas comuns aos usuários, facilitando o uso do computador. Existem diversos tipos de programas de sistema: As interrupções por chamada de sistema podem ou não ser atendidas na hora. Por exemplo, uma chamada de sistema para ler a data pode ser atendida imediatamente. Entretanto, uma chamada de sistema para ler um setor de disco não poderá ser atendida imediatamente. O pedido feito será inserido na fila do driver. Enquanto o processo solicitante aguarda a realização da E/S, o sistema operacional entrega a CPU para outro programa. Manipulação de arquivos (por exemplo, criar pasta, copiar arquivo, etc.); Informação de estado; Carregadores; Interpretador de comandos. Antigamente, os compiladores, montadores e ligadores eram considerados utilitários (hoje em dia não são considerados assim). Em um sistema batch antigo, o usuário informava ao SO o que ele desejava através de cartões de controle. Em um sistema time-sharing, isto passou a ser feito através de comandos digitados no terminal. No sistema batch era necessário um interpretador de cartões de controle para identificar o que o usuário desejava. Nos ambientes time-sharing era necessário um interpretador de linhas de comando. O programa usuário solicita I/O através de uma chamada de sistema; O sistema operacional bloqueia o programa e envia um comando para o dispositivo; Outro programa é executado (multiprogramação); Quando termina a tarefa solicitada, o dispositivo de I/O interrompe a CPU e o programa de usuário que estava bloqueado volta a ficar apto para execução; Podem haver diversas solicitações simultâneas de I/O; O sistema operacional deve manter uma tabela com a situação de cada dispositivo de I/O; Quando termina o I/O, o sistema operacional consulta a tabela, e se existe pedido pendente, envia um novo comando para o dispositivo imediatamente. A maneira usual de estruturar as atividades de E/S de um SO é ter um processo para controlar cada dispositivo. O processo controlador é denominado driver do dispositivo e é o único que executa operações de E/S nesse dispositivo. Toda operação de E/S resulta no envio de uma requisição ao driver correspondente. - Interrupção por erro em programa: Todo SO possui um interpretador de comandos (talvez escondido atrás de uma interface gráfica). Pode-se citar como exemplos o programa shell, no UNIX, e o programa command.com, no MS-DOS. Para os usuários, o sistema operacional é definido pelos programas de sistema que ele utiliza e, principalmente, pela visão que o interpretador de comandos lhe dá. Corresponde à tentativa de executar uma operação ilegal (por exemplo, tentativa de divisão por zero, tentativa de acessar uma área de memória protegida). Neste caso, o SO deve terminar o programa, avisando de alguma forma que o término foi por erro. Estes erros são detectados pelo hardware e geram interrupções de software, conhecidas como traps (observe que tratam-se de falhas no software). AMBIENTES OPERACIONAIS Revisão de arquitetura dos computadores AMBIENTES OPERACIONAIS Revisão de arquitetura dos computadores Prof. Simão Sirineo Toscani p. 11 Prof. Simão Sirineo Toscani p. 12