Transcript SO 3
SISTEMAS OPERACIONAIS Prof. Alan Péterson P. Bruno [email protected] Estrutura e Funcionamento dos Sistemas Operacionais Funcionamento dos Sistemas Operacionais Os sistemas operacionais reagem a eventos, que representam solicitação de serviços. Por exemplo, uma operação de leitura no programa de usuário será realizada por uma chamada de sistema que corresponderá a uma função executada pelo sistema operacional que solicitará ao controlador do periférico a transferência dos dados para o endereço de memória informado no pedido do serviço. Quando a transferência se completar, o controlador do periférico pode gerar uma interrupção, que será sentida pelo processador e que fará com que o sistema operacional execute uma rotina de tratamento da interrupção. Neste exemplo, os dados solicitados pelo programa do usuário se encontram na memória principal, na área de dados do programa que solicitou ou na área de buffers gerenciada pelo sistema operacional. Se for na área de buffers, o sistema operacional os copiará para a área de dados do programa. Estando os dados na área do programa, o mesmo poderá novamente executar. A figura abaixo esquematiza o funcionamento de um sistema operacional. Visão esquemática do funcionamento de um Sistema Operacional Estrutura dos Sistemas Operacionais Um sistema operacional é um programa, formado por diversos processos concorrentes, situados entre os programas de aplicação e o hardware, que virtualiza o hardware tornando-o mais simples de ser utilizado. Desta forma, o desempenho do sistema operacional tem uma influência fundamental na performance das aplicações. A forma de estruturação dos sistemas operacionais têm evoluído, na tentativa de encontrar a estrutura mais apropriada. A seguir serão apresentadas as principais formas de estruturação dos sistemas operacionais. Monolíticos O SO é organizado como uma coleção de processos seqüenciais cooperantes, que recebem as solicitações dos usuários (chamadas de sistema), as executam e devolvem um resultado. Sistema Operacional Monolítico Hierárquico Um sistema operacional pode ser organizado sob a forma de um conjunto de processos seqüenciais cooperantes, cada um executando uma função bem definida. Assim, cada programa de usuário, cada driver de periférico, a gerência de memória, o escalonamento, etc. é executado por um processo. O funcionamento do sistema é o resultado da cooperação entre os processos seqüenciais e a ação coordenada destes. Como as velocidades de execução dos diferentes processos que formam o sistema operacional é indeterminada, existe a necessidade de mecanismos explícitos de sincronização, para estabelecer o perfeito funcionamento do sistema. No sistema operacional THE, construído por Dijkstra em 1968, todas as atividades do sistema são divididas em um certo número de processos seqüenciais. Estes processos implementam as abstrações dos diferentes componentes do sistema e são colocados nos vários níveis lógicos nos quais o sistema foi organizado. O sistema possui seis níveis lógicos: Nível 0: responsável pela alocação do processador para os processos em execução e pelo tratamento das interrupções. Nível 1: responsável pela gerência de memória. No sistema foi utilizado o conceito de páginas e foi feita uma distinção entre páginas de memória e páginas de tambor magnético. Uma página de tambor magnético possui exatamente o tamanho de uma página de memória e um mecanismo de identificação de segmento permite a existência de um número maior de páginas na memória secundária. Uma variável indica se a página está na memória principal ou não. Nível 2: interpretador de mensagens: trata da alocação da console do sistema ao operador, para permitir a comunicação deste com os processos em execução. Quando o operador aperta uma tecla, um caractere é enviado ao interpretador de comandos, que pode então estabelecer uma conversação com um processo. Nível 3: neste nível encontram-se os processos responsáveis pelos input streams e pelos output streams. Este nível implementa uma console virtual para cada processo, os quais compartilham uma mesma console física. O sistema permite uma única conversação por vez, usando para tal mecanismos de exclusão mútua. Este nível utiliza as funcionalidades do nível 2 (interpretador de comandos) para se comunicar como operador. Isto é necessário, por exemplo, no caso de problemas com um periférico. Nível 4: formado pelos programas de usuário. Nível 5: representa o operador do sistema. A figura a seguir ilustra a estrutura do sistema. Operador Programas de usuário Processos de E/S Interpretador de mensagens Controlador de segmentos Alocação do processador Hardware Organização do sistema operacional THE A organização hierárquica, pelo fato de ser formada por processos independentes, é interessante de ser utilizada, pois é adequada a verificação da correção do funcionamento e permite o desenvolvimento modular, visto que cada processo seqüencial pode ser implementado de maneira completamente independente dos demais. Máquinas virtuais Máquinas virtuais são abstrações construídas por um monitor de máquinas virtuais, que distribui os recursos de hardware, permitindo a existência de vários ambientes de execução. Uma máquina virtual é formada por recursos virtuais que são mapeados para recursos reais pelo monitor. Desta forma, uma máquina com grande capacidade de memória, disco, etc. pode ser particionada em várias máquinas virtuais, com menos recursos que a máquina real. O acesso a uma página de memória na máquina virtual é mapeado (traduzido) em um acesso a uma página de memória real. As instruções da máquina virtual são traduzidas para instruções da máquina real e executadas. O VM (Virtual Machine) da IBM [Creasy, 1981] é um exemplo de sistema operacional que utiliza o conceito de máquinas virtuais. Cada sistema operacional VM é controlado por um programa chamado de Control Program, que gerencia o hardware físico, cria uma máquina virtual para cada usuário do sistema, sendo esta máquina virtual uma simulação exata de um sistema operacional (IBM/370 ou IBM/390). Cada usuário executa seus programas armazena seus dados, etc. sem interferência e sem interferir com os outros usuários. O Control Program é o componente fundamental do sistema e roda diretamente no hardware do computador. Suas funções são gerenciar o hardware do computador, gerenciar máquinas virtuais (criação, deleção, ...), fazer o escalonamento, etc. Microkernel A organização Microkernel é baseada no modelo cliente/servidor, na qual os serviços do sistema são implementados por servidores especializados. Um Microkernel (mínimo) é responsável pelo tratamento das interrupções, pela gerência de memória nos seus aspectos mais básicos, e pelas funções de mais baixo nível do escalonamento. Todos os serviços do sistema são implementados por servidores, em um nível lógico acima do Microkernel. Os clientes (programas de aplicação) solicitam os serviços ao SO (Microkernel) que os encaminha aos servidores. Os servidores executam um loop eterno, no qual recebem a solicitação de um serviço, o executam, enviam o resultado ao Microkernel e voltam a esperar a solicitação de um novo serviço. O Microkernel recebe do servidor o resultado e o transmite ao cliente, que de posse do resultado do serviço pedido, volta a executar o código da aplicação. A figura a seguir exemplifica uma organização Microkernel. As vantagens da organização Microkernel são a modularidade e a facilidade de se acrescentar novos serviços, que consiste na incorporação de um novo servidor. Organização Microkernel Exokernel A estruturação de um sistema operacional em exokernel elimina a noção de que o mesmo deve fornecer uma abstração total do hardware sobre a qual são construídas todas as aplicações. A idéia é que, devido às necessidades distintas de diferentes aplicações, o sistema operacional deve, adequadamente, fornecer os recursos necessários a cada aplicação. Desta forma, o exokernel possui um conjunto básico de primitivas de baixo nível, com as quais gerencia completamente o hardware e, cada aplicação, utiliza somente o subconjunto adequado às suas necessidades. Assim, por exemplo, servidores podem implementar abstrações tradicionais, adequadas às aplicações às quais se destinam. Organização do sistema operacional Linux O Linux é um sistema operacional do tipo Unix, livremente distribuído. O nome Linux é uma combinação do nome de seu idealizador, Linus Torwalds e Unix. A primeira versão do Linux se tornou disponível em 1991. Em 1994 foi tornada pública a primeira versão estável do sistema. A evolução e a manutenção do sistema é realizada por voluntários, que trabalham no desenvolvimento, na depuração de erros e testando novas versões. O linux é hoje um moderno sistema operacional do tipo Unix, com suporte para: o Multitarefa; o Multiprocessamento; o Diferentes arquiteturas; o Diferentes file systems (MS/DOS, Ext2, Ext3, ..) o Permite a carga de novos módulos; o IPC (pipes, sockets,..) o Um grande número de periféricos o Gerência de memória com paginação por demanda o Bibliotecas dinâmicas e compartilhadas o TCP/IP; O sistema operacional Linux é formado por seis grandes níveis lógicos,apresentados na figura Programas de Aplicação Gerencia de Memória Gerencia de Arquivos Escalonador Entrada e Saída Rede IPC Hardware As funções de cada subsistema são: 1. Escalonador (sched), responsável por selecionar processos para execução e entregar o processador ao processo selecionado. 2. Gerencia de memória, que permite a existência de vários processos na memória principal. O MM implementa memória virtual, que permite a execução de processos maiores que a memória real. 3. Gerencia do sistema de arquivos. Um conceito implementado é o de independência do dispositivo, que cria uma interface uniforme, comum a todos os diferentes tipos de dispositivos. Implementa também diferentes formatos de arquivos, compatíveis com outros sistemas operacionais. 4. Interface de rede, que permite o acesso as redes de comunicação. 5. Inter-Process Communication (IPC), subsistema que implementa os diversos mecanismos de comunicação entre processos. 6. Entrada e Saída, formado pelos drivers dos diferentes periféricos. Organização do sistema operacional Windows NT •Windows NT designa uma família de sistemas operacionais da Microsoft, que evoluiu a partir de 1993, ano da sua primeira versão, conforme apresentado a seguir: • NT 3.1 Windows NT 3.1 Workstation (denominado Windows NT), Advanced Server de 1993 ; • NT 3.5 Windows NT 3.5 Workstation, Server de 1994; • NT 3.51 Windows NT 3.51 Workstation, Server de 1995; • NT 4.0 Windows N T 4.0 Workstation, Server, Server Enterprise Edition, Terminal Server, Embedded de 1996; • NT 5.0 Windows 2000 Professional, Server, Advanced Server, Datacenter Server de 2000; • NT 5.1 Windows XP Home, Professional, IA-64, Media Center (2002, 2003, 2004, 2005), Tablet PC, Starter, Embedded, de 2001; • NT 5.2 Windows Server 2003 Standard, Enterprise, Datacenter, Web, Small Business Server de 2003; • NT 5.2 Windows XP (x64) Professional x64 Edition de 2005; • NT 6.0 Windows Vista Starter, Home Basic, Home Premium, Business, Enterprise, Ultimate Empresas: November 2006. Lançamento oficial: 30de Janeiro de 2007. A arquitetura do Windows NT é fortemente baseada na idéia de microkernel, na qual componentes do sistema implementam funcionalidades que são tornadas disponíveis a outros componente. Utiliza também o conceito de níveis lógicos de maneira que cada nível pode utilizar funcionalidades do nível inferior e oferece funcionalidades ao nível superior. O conceito de objetos também é utilizado, sendo que arquivos, dispositivos de I/O, etc. são implementados por objetos e acessados por métodos a eles associados. A estrutura do Windows NT possui duas partes: modo usuário, formada pelos programas de aplicação e pelos subsistemas protegidos (servidores) do sistema, e o modo kernel, chamado de executivo. Os subsistemas protegidos de ambiente fornecem API’ s específicas dos sistemas operacionais suportados. Existem subsistemas (servidores) Win32, POSIX, Win16, OS/2 e MS-DOS. A figura 1.15 a seguir mostra um servidor Win32 se comunicando com um cliente Win32 através do Executivo do NT, e um servidor POSIX, a espera de solicitações de clientes.