Sistemas Operacionais - Introdução Aplicações Compiladores Editores Interpretadores de comando Sistema Operacional Linguagem de Máquina Microarquitetura Dispositivos Físicos Sistemas Operacionais - Funções SO como Máquina Estendida oferece uma máquina virtual mais simples de programar do que o hardware SO como Gerenciador de Recursos fornece uma alocação controlada de processadores, memória e dispositivos de entrada/saída (E/S) Todo computador possui uma camada chamada sistema operacional cujo objetivo é gerenciar todos os dispositivos (processador, memória, disco, impressora, teclado, monitor, etc.) e prover uma interface simples para o usuário manipular o hardware. O sistema operacional é um software que oferece ao programador um ambiente agradável e mais conveniente para trabalhar. A função do sistema operacional pode ser apresentada ao usuário como máquina estendida ou máquina virtual que facilita a programação provendo uma variedade de serviços que os programas podem obter usando instruções especiais (system calls). O sistema operacional também pode ser visto como um gerenciador de vários pedaços de um sistema complexo (processador, memória, relógios, duscis, etc.) e deve decidir quais pedidos podem alocar os recursos para que o sistema possa operar sem conflitos. Profa. Tiemi Christine Sakata 1
História dos Sistemas Operacionais Primeira Geração (1945 55) Válvulas e Painéis de Conectores História dos Sistemas Operacionais Terceira Geração (1965 80) Circuitos Integrados e Multiprogramação Segunda Geração (1955 65) Transistores e Sistema Batch Card reader Tape drive Input tape System tape Output tape Printer Job 3 Job 2 Job 1 Operating system Memory partitions 1401 7094 1401 (a) (b) (c) (d) (e) (f) Quarta Geração (1980 atual) Computadores Pessoais Os primeiros computadores surgiram no início da Segunda Gerra Mundial e eram formados por milhares de válvulas que ocupavam enores áreas. Não existia o conceito de sistemas operacionais e para trabalhar nessas máquinas era necessário um profundo conhecimento do hardware. A criação do transitor permitiu o aumento da velocidade e a confiabilidade do processamento e as memórias tinham maior capacidade permitindo computadores menores. O sistema operacional era bem simples e era armazenado na memória. A multiprogramação compartilha a memória principal e o processador, o que permitiu o aumento da utilização da CPU. O sistema operacional mantém vários jobs na memória ao mesmo tempo e gerencia a execução de cada job. Com a evolução de microprocessadores, surgiram os primeiros microcomputadores, muito mais baratos. Os dois sistemas operacionais que inicialmente dominaram o computador pessoal foram MS-DOS e Unix. O hardware foi ficando cada vez mais sofisticado, com vários processadores exigindo sistemas operacionais com novos mecanismos de controle e sincronismo. A década de 90 foi definitiva para a consolidação de sistemas operacionais baseados em interfaces gráficas. As interfaces são cada vez mais simples e eficiente. Profa. Tiemi Christine Sakata 2
Chamadas do Sistema (System Calls) Porta de entrada para ter acesso ao núcleo do sistema operacional. Gerenciamento de Processos fork, waitpid, exit Gerenciamento de Arquivos open, close, read Gerenciamento de Diretórios mkdir, link, mount Proteção chmod Gerenciamento de Tempo time(&second) Estrutura do Sistema Operacional 1 Monoĺıtico um programa principal que invoca os serviços um conjunto de serviços para executar as chamadas do sistema um conjunto de procedimentos para ajudar as chamadas de serviços. Main procedure Service procedures Utility procedures O usuário solicita um serviço do sistema operacional através do uso das chamadas do sistema. Cada sistema operacional possui seu próprio conjunto de chamadas. Através dos parâmetros fornecidos nas chamadas do sistema, a solicitação é processada e uma resposta é retornada à aplicação. É a organização mais comum. O sistema operacional é escrito como uma coleção de procedimentos, cada um dos quais pode chamar uns aos outros. O programa-objeto do sistema é formado por vários procedimentos que são compilados separadamente e linkados, formando um grande e único executável. Profa. Tiemi Christine Sakata 3
Estrutura do Sistema Operacional 2 Em Camadas Camada Função 5 Usuário 4 Programas de usuário 3 Gerenciamento de E/S 2 Comunicação operador-processo 1 Gerenciamento de memória 0 Alocação de processador e Multiprogramação Estrutura do Sistema Operacional 3 Máquinas Virtuais cópias exatas do hardware básico executa qualquer sistema operacional mais simples, flexível e fácil de manter Virtual 370s System calls here I/O instructions here CMS CMS CMS Trap here Trap here VM/370 370 Bare hardware Um sistema em camadas divide o sistema operacional em camadas sobrepostas formando uma hierarquia. Cada módulo oferece um conjunto de funções que podem ser utilizadas por outros módulos. Módulos em camadas podem fazer referência apenas a módulos das camadas inferiores. A vantagem desta estrutura é isolar as funções do sistema operacional. Um sistema de tempo compartilhado oferece multiprogramação e uma máquina estendida com interface mais conveniente que o hardware básico. A essência das máquinas virtuais é a separação dessas duas funções. Assim, o coração do sistema, conhecido como monitor de máquina virtual, executa no hardware básico e faz a multiprogramação, oferecendo não apenas uma, mas várias máquinas virtuais à camada superior. Porém, ao contrário de todos os outros sistemas operacionais, essas máquinas não são máquinas estendidas com recursos amigáveis. Em vez disso, elas são cópias exatas do hardware básico, incluindo o modo kernel/usuário, E/S, interrupções, etc. Profa. Tiemi Christine Sakata 4
Estrutura do Sistema Operacional 4 Modelo Cliente-Servidor Client process núcleo mais simples cliente solicita serviços ao servidor comunicação troca de mensagens Client process Process server Terminal server Kernel File server Memory server Client obtains service by sending messages to server processes User mode Kernel mode Processos programa seqüência de instruções processo abstração da execução do programa contexto do programa corrente (status de execução) diretório de trabalho do programa corrente arquivos e diretórios aos quais o programa tem acesso direitos de acesso do programa corrente memória e outros recursos alocados ao processo sistema multiprogramado - pseudoparalelismo O sistema é dividido em processos, cada um responsável por um serviço. O cliente pode ser uma aplicação de usuário ou um outro componente do sistema operacional. A solicitação é feita através de envio de uma mensagem ao servidor, que responde através de uma outra mensagem. A utilização deste modelo permite que os servidores executem em modo usuário, ou seja, não tenham acesso direto ao hardware. Outra vantagem é que este modelo é facilmente adaptável para uso de sistemas distribuídos. Computadores modernos podem fazer várias coisas ao mesmo tempo: executar um programa, ler dados do disco e imprimir dados na tela ou na impressora. Em sistemas multiprogramados, a CPU também pode dividir seu tempo (na ordem de milisegundos) para diversos programas dando ao usuário a impressão de paralelismo (pseudoparalelismo). Um processo é um programa em execução e é a unidade básica de escalonamento do sistema operacional. Um processo é um elemento ativo (altera o seu estado à medida que executa o programa). Profa. Tiemi Christine Sakata 5
One program counter A B C D Process switch Multiprogramação A Four program counters B C D Process D C B A Time (a) (b) (c) (a) memória (b) execução independente (c) execução x tempo Estados do Processo Executando 1 3 2 Bloqueado 4 Pronto 1 Processo bloqueado para entrada 2 Gerenciador desativa um processo 3 Gerenciador ativa outro processo 4 Entrada se torna disponível Todo processo possui um contador de programa lógico que é armazenado na memória. Apenas o contador do processo executado em um determinado instante é carregado no contador de programa real. Podemos notar que em um intervalo todos os processos progrediram, mas em um instante de tempo apenas um processo está realmente sendo executado. O tempo de execução de um processo pode variar de acordo com a forma em que a CPU decide executar os processos. Os processos que requerem tempo crítico necessitam tomar certas medidas especiais para garantir uma resposta esperada. A diferença entre o estado executando e pronto é que o estado executando está utilizando a CPU enquanto que no estado pronto, não há temporariamente CPU disponível para sua execução. Existem métodos para divir o uso da CPU para a execução dos processos prontos. O estado bloqueado não será executado mesmo com CPU disponível. Profa. Tiemi Christine Sakata 6
FCFS Escalonamento de Processos Deadlock Job mais curto primeiro Menor tempo restante primeiro Round Robin Prioridade (múltiplas filas) Cuidado com starvation (a) (b) Quando um programa é multiprogramado, freqüentemente possui vários processos competindo pela CPU ao mesmo tempo. Isso ocorre quando dois ou mais processos estão prontos para serem executados. O escalonamento de processos tem por objetivo instruir a CPU para executar os processos que foram inseridos em uma fila de processos prontos. A parte do sistema operacional que faz a escolha de qual processo executar é chamado de escalonador e o algoritmo usado é chamado de algoritmo de escalonamento. Deadlock - Condições necessárias 1. exclusão mútua: pelo menos um recurso deve ser atribuído a um único processo por vez 2. posse e espera: deve haver um proc. que possui um recurso e espera recursos adicionais 3. não-preempção: recursos não podem ser retirados de forma forçada 4. espera circular: 2 ou mais processos, cada um esperando pelo recurso em posse de outro proc. Profa. Tiemi Christine Sakata 7
Gerência de Memória Alocação de memória: partições fixas Memória grande vetor de palavras (bytes), cada um com seu próprio endereço Multiple input queues Partition 4 700K Partition 4 Multiprogramação compartilhamento de memória Partition 3 400K Single input queue Partition 3 Memória física Partition 2 Partition 2 Memória lógica MMU (Memory Management Unit) Partition 1 Operating system (a) 100K 0 Partition 1 Operating system (b) Na multiprogramação é preciso manter vários processos prontos para execução na memória. A gerência de memória do SO provê os mecanismos necessários para que os diversos processos compartilhem a memória de forma segura e eficiente. A memória física é aquela implementada pelos circuitos integrados de memória. O endereço físico é o que vai para a memória física, ou seja, usado para endereçar os circuitos integrados de memória. O endereço lógico é o endereço gerado pela CPU. A MMU é o componente de hardware que provê mecanismos usados pelo SO para gerenciar a memória. A MMU mapeia os endereços lógicos gerados pelos processos nos correspondentes endereços físicos. A memória principal é dividida em partições: uma para o sistema operacional e outra para os processos do usuário. Como na multiprogramação existem vários processos na memória é necessário encontrar maneiras de alocar os processos que estão na fila de entrada esperando para serem carregados na memória. Um dos métodos mais simples de alocação de memória é dividir a memória em partições de tamanhos fixos. Cada partição pode conter apenas um processo e portanto o grau da multiprogramação está limitado pelo número de partições. Quando um processo termina, a partição fica disponível para outro processo da fila. A fila pode ser construída por partição (o processo fica na fila da menor partição que ele pode ser alocado) e neste caso pode existir partições sem nenhum processo e outras com muitos processos na fila; ou uma fila única para todas as partições onde um processo pequeno pode estar usando uma partição de tamanho grande. Profa. Tiemi Christine Sakata 8
Alocação de memória: part. variáveis Paginação Proc 1-174K Proc 2-98K Proc 3-23K Livre - 80K SO Proc 4-85K Proc 1-174K Proc 4-85K Livre - 13K Proc 3-23K Livre - 80K SO Em geral, existe um conjunto de partições de memórias livres de vários tamanhos. Quando um processo chega é feita uma busca para encontrar uma partição grande o suficiente para o processo. Se a partição é grande demais, ela será dividida em dois e uma parte é devolvida para o conjunto de partições livres. A paginação é um esquema que permite que o espaço de endereçamento físico de um processo seja não contíguo. Esse mecanismo elimina a fragmentação externa e reduz a fragmentação interna. A memória física (sistema) e a memória lógica (processo) são quebradas em blocos de tamanhos fixos e idênticos. Os blocos da memória física são chamados de quadros (frames) e da memória lógica de páginas. O tamanho desses blocos é definido pelo hardware. Cada endereço gerado pela CPU (endereço lógico) é dividido em duas partes: número de página (p) e deslocamento de página (d). O número de página é usado como índice em uma tabela de página. Profa. Tiemi Christine Sakata 9
Segmentação com compactação Memória Virtual sistema operacional 3 Segment 4 (7K) Segment 3 (8K) Segment 2 Segment 1 (8K) Segment 0 Segment 4 (7K) Segment 3 (8K) Segment 2 (3K) Segment 7 Segment 0 (3K) Segment 5 Segment 3 (8K) Segment 2 (3K) Segment 7 Segment 0 (3K) Segment 5 Segment 6 Segment 2 (3K) Segment 7 Segment 0 (10K) Segment 5 Segment 6 Segment 2 Segment 7 Segment 0 carregar M 1 6 i 5 2 quadro livre 4 (a) (b) (c) (d) (e) mem. física Pode-se utilizar o esquema de bit válido/inválido para determinar se uma página está na memória ou não. Se o bit é válido, então a página é legal e está na memória. Se o bit for inválido, a página não é válida ou é válida mas no momento está no disco. Um procedimento simples para tratar a falta de página é descrita a seguir: A segmentação pode causar fragmentação externa já que o tamanho dos segmentos é variável. Neste caso, o processo pode simplesmente ter que esperar até que mais memória se torne disponível, ou a compactação pode ser usada para criar um bloco de memória livre maior. 1. verificação da tabela para determinar se a referência é válida ou inválida. 2. se a referência é inválida, o processo é terminado. Se é válida mas não está na memória, a página deve ser carregada 3. procura de um quadro livre 4. escalonamento de uma operação de disco para ler a página desejada no quadro recém alocado 5. a tabela é modificada indicando que a página está na memória 6. reiniciar a instrução que foi interrompida pela exceção de endereço ilegal. Profa. Tiemi Christine Sakata 10
Sistema de Arquivos User directory A B Root directory C alocação contíua Alocação de blocos A B B B C C B C C User subdirectories C C C C User file Lista ligada de blocos File Allocation Table (FAT) I-node A solução para armazenar a informação em discos é criar arquivos. A informação deve ser persistente, ou seja, um arquivo desaparecerá quando for removida explicitamente. O sistema de arquivos (parte do SO) é responsável pelo modo como arquivos são estruturados, nomeados, acessados, usados, protegidos e implementados. A capacidade dos usuários criar um número arbitrário de subdiretórios propicia uma ferramenta poderosa de estruturação para organizar seu trabalho. Quase todos os modernos sistemas de arquivos são organizados assim. O esquema mais simples de alocação é armazenar cada arquivo em blocos contíguos de disco. O disco é dividido em blocos de mesmo tamanho. Se um arquivo ocupa um bloco e meio, a outra metade do bloco é desperdiçada. Vantagens: simples de implementar e bom desempenho de leitura. Desvantagem: os arquivos não podem crescer e há fragmentação do disco. Os arquivos podem ser mantidos como uma lista encadeada de blocos de disco. A primeira palavra de cada bloco é usada como ponteiro para um próximo. O restante do bloco é usado para dados. Neste método não há fragmentação externa e para manter uma entrada de diretório é suficiente armazenar apenas o endereço em disco do primeiro bloco. Por outro lado, o acesso aleatório é extremamente lento, pois para chegar ao bloco n de um arquivo, o SO, a partir do início, deve ler os n 1 blocos antes dele. Tabela de índice na memória usando essa organização todo bloco fica disponível para dados e o acesso aleatório se torna mais fácil. Para encontrar um bloco de um arquivo, é necessário percorrer o encadeamento, porém, como a tabela está na memória, a localização do bloco pode ser feita rapidamente. A principal desvantagem deste método é que a tabela deve estar na memória o tempo todo. A tabela pode ser alocada em memória paginada, mas mesmo assim, ocuparia muito espaço de memória virtual e de espaço em disco gerando tráfego extra de paginação. O i-node é uma estrutura de dados associado a cada arquivo que relaciona os atributos e os endereços em disco dos blocos de arquivo. Dado o i-node, é possível encontrar todos os blocos do arquivo. A grande vantagem desse esquema é que o i-node só precisa estar na memória quando o arquivo estiver aberto. Profa. Tiemi Christine Sakata 11
Entrada/Saída Acesso Direto à Memória (DMA) emitir comandos para os dispositivos Drive interceptar interrupções e tratar erros fornecer interface entre os dispositivos e o restante do sistema CPU 1. CPU programs DMA the DMA controller controller Address Count Control 4. Ack Disk controller Buffer Main memory interfaces padronizadas x variedade de dispositivos Interrupt when done 2. DMA requests transfer to memory 3. Data transferred Bus Uma das principais funções de um computador é solucionar problemas. Para tanto, é necessário que algum tipo de mecanismo exista para que possamos informar esse problema ao computador e recuperar sua solução. Esse mecanismo constitui o que denominamos de dispositivos de entrada e saída (E/S) de um computador. Alguns desses dispositivos são para a comunicação do homem com o computador (teclado, mouse, monitor de vídeo, etc.), outros são para a comunicação entre computadores (modem, placa de rede, etc.) e temos também os dispositivos para armazenar informações (disquetes, fita, disco rígido, CD-ROM, etc.). A tecnologia de E/S apresenta duas tendências conflitantes. Por um lado, há uma crescente padronização de interfaces de software e hardware. Por outro lado, há uma variedade cada vez maior de dispositivos de E/S. Para um dispositivo que realiza grandes transferências de dados (disco) parece desperdício usar um processador caro de uso geral para fornecer ao registrador do controlador, 1 byte de cada vez. Muitos computadores passam parte desse trabalho para um processador especial chamado controlador de acesso direto (DMA). O DMA deve pode acessar diretamente a memória e está conectado fisicamente ao barramento de dados e de endereços do computador. Para começar uma transferência DMA, a CPU programa o controlador de DMA inserindo valores em seus registradores. O DMA inicia a transferência emitindo pelo barramento uma requisição de leitura para o controlador de disco. Normalmente o endereço de memória para onde escrever está nas linhas do barramento. Quando a escrita está completa, o controlador de disco envia um sinal de confirmação para o DMA. Profa. Tiemi Christine Sakata 12
I/O request Camadas do Sistema E/S Layer User processes Device-independent software Device drivers I/O reply I/O functions Make I/O call; format I/O; spooling Naming, protection, blocking, buffering, allocation Set up device registers; check status O que foi visto História dos Sistemas Operacionais Processos Deadlock Gerência de Memória memória virtual Interrupt handlers Hardware Wake up driver when I/O completed Perform I/O operation Sistema de Arquivos Gerência de E/S O software de E/S é normalmente organizado em quatro camadas. Cada camada tem sua função bem definida para executar e uma interface também bem definida para as camadas adjacentes. A funcionalidade e as interfaces diferem de um sistema para outro. Quando, por exemplo, o programa do usuário tenta ler um bloco de um arquivo, o SO é requisitado para realizar a chamada. O software independente de dispositivo procura pelo bloco na cache do buffer. Se o bloco requisitado não está lá, ele chama o driver do dispositivo para emitir uma requisição a fim de que o hardware o obtenha do disco. Quando o disco termina, o hardware gera uma interrupção. O tratador de interrupção é executado para descobrir o que aconteceu, isto é, qual dispositivo está requerendo atenção naquele momento. Ele então obtém o status do dispositivo e acorda o processo que estava dormindo para finalizar a requisição de E/S. Referências Andrew S. Tanenbaum. Modern Operating Systems. Prentice Hall. 2001 Segunda edição Abraham Silberschatz, Peter Galvin e Greg Gagne. Sistemas Operacionais. Editora Campus, 2000 Profa. Tiemi Christine Sakata 13