Prévia do material em texto
Universidade Zambeze Faculdade de Ciência e Tecnologia Departamento de Eletromecânica Curso de Engenharia Mecatrónica Disciplina de Sistemas Operativos e Redes de Computadores 2° Ano Laboral Grupo 9 Docente: Eng. Essitone Lote Gimo Beira, Outubro de 2024 Tema do Trabalho em estudo: Dispositivos de Entrada/Saida 2° Ano Laboral Estudantes: · Aires Edvaldo Abel Artur · Elias Júnior Alberto · Maciel Ernesto Paulo Sousa · Matilda Osvaldo Mussa · Steven Rodrigues Ucucho Trabalho investigativo de carácter avaliativo na disciplina de Sistemas Operativos e Redes de Computadores, sobre o conceito de Dispositivos de Entrada e Saida (E/S) . Beira, Outubro de 2024 Índice Introdução 5 Objetivo Geral 5 Objetivos Específicos 5 1. Dispositivos de E/S: Definição e classificação 6 1.1. Conceito de Dispositivos de E/S 6 1.2. Classificação dos Dispositivos de E/S 6 2. Software de E/S independente de dispositivo 7 2.1. Interface Uniforme para os drivers dos dispositivos 7 2.2. Utilização de buffer 9 2.3. Relatório de erros 11 2.4. Alocação e liberação de dispositivos dedicados 12 2.5. Tamanho de bloco independente de dispositivo 12 3. Software de E/S do espaço do usuário 13 3.1. Rotinas de E/S e Bibliotecas 13 3.2. Sistema de Spooling 13 3.3. Vantagens do Software de E/S do Espaço do Usuário 14 3.4. Desvantagens do Software de E/S do Espaço do Usuário 15 4. Hardware de disco 15 4.1. Discos magnéticos 16 4.2. RAID 18 5. Formatação de disco 21 5.1. Estrutura Física do Disco Rígido 21 5.2. O que é a Formatação de Baixo Nível? 21 5.2.1. Setores Sobressalentes e Defeitos de Fabricação 22 5.2.2. Deslocamento de Cilindro e Otimização de Desempenho 22 5.3. Capacidade Real do Disco e Confusões de Tamanho 23 5.4. Entrelaçamento de Setores e Buffers de Controlador 23 5.5. Formatação de Alto Nível e Partições 24 5.5.1. Master Boot Record (MBR) e Tabela de Partições GUID (GPT) 24 Conclusão 25 Referências Bibliográficas 26 Introdução O tema dos Dispositivos de Entrada/Saída (E/S) é fundamental para a compreensão da interação entre o hardware e o software em sistemas computacionais. Os dispositivos de E/S são responsáveis pela transferência de informações entre o computador e o mundo externo, desempenhando um papel crucial na eficiência e funcionalidade dos sistemas operacionais. Este trabalho visa investigar os diversos aspectos relacionados ao software de E/S, à sua interação com o hardware do disco e ao processo de formatação de discos, fornecendo uma visão abrangente sobre o tema. Objetivo Geral O objetivo geral deste trabalho é analisar e compreender os princípios e as práticas dos dispositivos de entrada e saída, em particular, os softwares e hardware que os suportam, com foco na operação de discos. Objetivos Específicos · Investigar as características do software de E/S do espaço do usuário e como este se diferencia de outros tipos de software. · Analisar o hardware dos discos, incluindo sua arquitetura e seu funcionamento, e discutir a sua relevância na eficiência do sistema. · Explorar o processo de formatação de disco, seus tipos e a importância da formatação adequada para o uso eficiente do armazenamento em disco. 2 1. Dispositivos de E/S: Definição e classificação 1.1. Conceito de Dispositivos de E/S De acordo com Tanenbaum e Austin (2013), "os dispositivos de E/S são a porta de entrada e saída de um computador, responsáveis por conectar o hardware ao ambiente externo". Os dispositivos de Entrada/Saída (E/S) são elementos cruciais em um sistema computacional, pois servem como interface entre o usuário e a máquina. Eles permitem a transferência de dados entre o mundo exterior e o sistema computacional, facilitando tanto a entrada de informações quanto a saída de resultados processados. Essa troca de informações é fundamental para a operação de qualquer sistema, pois sem os dispositivos de E/S, o usuário não teria como interagir ou utilizar as capacidades computacionais da máquina. 1.2. Classificação dos Dispositivos de E/S Os dispositivos de E/S podem ser classificados em três categorias principais: 1. Dispositivos de Entrada: Esses dispositivos são utilizados para inserir dados no computador. Exemplos comuns incluem teclados, mouses, scanners e microfones. Segundo Patterson e Hennessy (2017), "os dispositivos de entrada convertem dados do mundo real em sinais que o computador pode entender e processar". 1. Dispositivos de Saída: Os dispositivos de saída permitem que o computador forneça resultados aos usuários. Exemplos incluem monitores, impressoras e alto-falantes. Conforme indicado por Stallings (2020), "os dispositivos de saída desempenham um papel crucial na apresentação da informação processada, tornando-a acessível ao usuário final". 1. Dispositivos de entrada e saída: Existem dispositivos que podem atuar tanto como entrada quanto como saída. Um exemplo é o disco rígido, que pode ler e gravar dados. Como relembra Silberschatz et al. (2018), "os dispositivos de E/S, que operam em ambas as direções, são essenciais para a operação de sistemas de armazenamento e de comunicação em rede". Os dispositivos de E/S podem variar em complexidade e tecnologia, desde simples teclados e mouses até dispositivos avançados, como scanners 3D e monitores de realidade aumentada. Essa diversidade reflete a ampla gama de aplicações computacionais, desde ambientes de escritório até sistemas de controle industrial e entretenimento. Além da categoria funcional, é importante considerar a velocidade e a capacidade desses dispositivos. A eficiência na operação de um sistema computacional pode ser significativamente impactada pela rapidez com que os dispositivos E/S conseguem transferir dados. Como destacado por Patterson e Hennessy (2017), "a latência e a largura de banda dos dispositivos de E/S podem se tornar um gargalo para o desempenho do sistema se não forem otimizados". 2. Software de E/S independente de dispositivo Segundo Silberschatz et al. (2018), "o software de E/S independente de dispositivo proporciona uma interface uniforme, permitindo que aplicações acessem dispositivos de maneira consistente, independentemente de suas características específicas de hardware". O software de E/S independente de dispositivo refere-se a uma camada de software que permite que as operações de entrada e saída sejam realizadas sem depender de um hardware específico. Essa abstração é crucial em sistemas operacionais, pois permite que o mesmo software possa interagir com diferentes dispositivos de E/S sem necessitar de reprogramação para cada tipo de dispositivo. A função básica do software independente do dispositivo é realizar as funções de E/S que são comuns a todos os dispositivos e fornecer uma interface uniforme para o software no nível do usuário. 2.1. Interface Uniforme para os drivers dos dispositivos Uma questão importante em um sistema operacional é como fazer todos os dispositivos de E/S e drivers pare- cerem mais ou menos o mesmo. Se discos, impressoras, teclados e assim por diante possuem todos interfaces diferentes, sempre que um dispositivo novo aparece, o sistema operacional tem de ser modificado para o novo dispositivo. Ter de modificar o sistema operacional para cada dispositivo novo não é uma boa ideia. Um aspecto dessa questão é a interface entre os drivers do dispositivo e o resto do sistema operacional. Figura 1. (a) Sem uma interface-padrão para o driver. (b) Com uma interface-padrão para o driver. Na Figura 1. (a), surgem várias complicações: 1. Complexidade de Integração: Cada novo dispositivo requer um esforço considerável para integrar seu driver ao sistema operacional, pois é necessário desenvolver uma nova interface. 1. Inconsistência: As funções disponíveis para o sistemaoperacional variam de driver para driver, dificultando a programação e a manutenção. 1. Aumento do Erro: A diversidade de interfaces aumenta a probabilidade de erros, uma vez que os desenvolvedores precisam entender diferentes implementações. A Figura 1. (b) ilustra um sistema onde todos os drivers seguem uma interface padronizada. Nesse caso fica muito mais fácil acoplar um driver novo, desde que ele esteja em conformidade com a interface do driver, e pode incluir as seguintes vantagens: 1. Facilidade de Integração: A adição de novos drivers torna-se mais simples, desde que eles sigam a interface definida. Isso reduz o tempo e o esforço de programação. 1. Consistência para Desenvolvedores: Os desenvolvedores têm um conjunto claro de expectativas sobre o que é necessário para cada driver, o que facilita o desenvolvimento e a manutenção. 1. Eficiência no Desenvolvimento: Com uma interface comum, os desenvolvedores podem reutilizar código e técnicas, acelerando o processo de criação de drivers. Para cada classe de dispositivos, como discos ou impressoras, o sistema operacional define um conjunto de funções que o driver deve implementar. Por exemplo, um driver de disco deve incluir funções para leitura, gravação, formatação e controle de energia. O driver geralmente contém uma tabela de ponteiros para essas funções, que é registrada pelo sistema operacional quando o driver é carregado. Isso permite que o sistema faça chamadas indiretas para as funções do driver, garantindo uma comunicação eficiente. A nomeação de dispositivos é outro aspecto importante. O software independente do dispositivo mapeia nomes simbólicos (como `/dev/disk0` no UNIX) para os drivers apropriados. Cada dispositivo é associado a um i-node que contém informações sobre o driver e o número do dispositivo, permitindo que o sistema operacional localize rapidamente o driver necessário. A proteção é igualmente crucial. Tanto no UNIX quanto no Windows, os dispositivos são tratados como objetos nomeados no sistema de arquivos, aplicando as mesmas regras de proteção que se aplicam a arquivos comuns. Isso permite que administradores do sistema definam permissões específicas para cada dispositivo, garantindo que apenas usuários autorizados possam acessá-los. 2.2. Utilização de buffer A utilização de buffers é uma técnica fundamental para otimizar a comunicação entre processos e dispositivos de E/S. As figuras ilustram como diferentes abordagens de buffering, como o uso de buffers no espaço do usuário, no núcleo e a técnica de buffer duplo, melhoram a eficiência e a organização do fluxo de dados. No entanto, é importante gerenciar o uso de buffers para evitar problemas de desempenho, especialmente em operações de rede, onde múltiplas cópias de dados podem atrasar a transmissão. Figura 2. (a) Entrada não enviada para buffer. (b) Utilização de buffer no espaço do usuário. (c) Utilização de buffer no núcleo. (d) Utilização de buffer duplo no núcleo. 1. Entrada não enviada para buffer: 1. O processo do usuário realiza uma chamada de sistema `read` e bloqueia a espera por cada caractere que chega. Cada caractere gera uma interrupção, resultando em ineficiência, pois o processo é ativado repetidamente. 1. Utilização de buffer no espaço do usuário: 1. O usuário fornece um buffer de `n` caracteres. A rotina de interrupção armazena os caracteres recebidos nesse buffer até que esteja cheio, momento em que o processo do usuário é desbloqueado. Isso melhora a eficiência, mas pode causar problemas se o buffer for paginado para o disco. 1. Utilização de buffer no núcleo: 1. Um buffer é criado no núcleo, onde os caracteres são armazenados. Quando o buffer do usuário precisa ser acessado, ele é trazido para a memória. Isso é mais eficiente, mas ainda pode haver problemas se novos caracteres chegarem enquanto o buffer do usuário está sendo carregado. 1. Utilização de buffer duplo no núcleo: 1. Dois buffers são utilizados. Enquanto um buffer é copiado para o espaço do usuário, o outro acumula novos caracteres. Isso permite que os dados sejam processados de forma contínua, aumentando a eficiência. A utilização de buffer é uma técnica amplamente utilizada, mas ele tem uma desvantagem também: se os dados forem armazenados em buffer vezes demais, o desempenho sofre. Considere, por exemplo, a rede da Figura 3. Aqui um usuário realiza uma chamada de sistema para escrever para a rede. Figura 3. O envio de dados pela rede pode envolver muitas cópias de um pacote. O núcleo copia um pacote para um buffer do núcleo para permitir que o usuário proceda imediatamente (passo 1). Nesse ponto, o programa do usuário pode reutilizar o buffer. Quando o driver é requisitado, ele copia o pacote para o controlador para saída (passo 2). A razão pela qual ele não transfere da memória do núcleo direta- mente para o barramento é que uma vez inicializada uma transmissão do pacote, ela deve continuar a uma velocidade uniforme. O driver não pode garantir essa velocidade uniforme, pois canais de DMA e outros dispositivos de E/S podem estar roubando muitos ciclos. Uma falha na obtenção de uma palavra a tempo arruinaria o pacote. A utilização de buffer para o pacote dentro do controlador pode contornar esse problema. Após o pacote ter sido copiado para o buffer interno do controlador, ele é copiado para a rede (passo 3). Os bits chegam ao receptor logo após terem sido enviados, de maneira que logo após o último bit ter sido enviado, aquele bit chega ao receptor, onde o pacote foi armazenado no buffer do controlador. Em seguida o pacote é copiado para o buffer do núcleo do receptor (passo 4). Por fim, ele é copiado para o buffer do processo receptor (passo 5). Em geral, o receptor envia de volta uma confirmação do recebimento. Quando o emissor obtém a confirmação, ele está livre para enviar o próximo pacote. No entanto, deve ficar claro que toda essa operação de cópia vai retardar a taxa de transmissão de modo considerável, pois todos os passos devem acontecer sequencialmente. 2.3. Relatório de erros Erros em Entrada/Saída (E/S) são mais comuns do que em outros contextos, e o sistema operacional deve lidar com eles de maneira eficaz. A gestão de erros é fundamental e se divide em duas categorias principais: · Erros de Programação: Esses erros ocorrem quando um processo solicita operações impossíveis, como tentar escrever em um dispositivo de entrada (por exemplo, teclado ou mouse) ou ler de um dispositivo de saída (como impressora). Outros exemplos incluem fornecer endereços de buffer inválidos ou especificar dispositivos inexistentes. A solução para esses erros é simples: o sistema retorna um código de erro ao processo chamador. · Erros de E/S Reais: Esses erros acontecem durante operações reais, como escrever em um bloco de disco danificado ou ler de um dispositivo desligado. Se o driver não souber como proceder, ele pode repassar o problema para um software de nível superior. A resposta a esses erros pode variar conforme o ambiente e a situação. Se houver um usuário interativo, o software pode apresentar uma caixa de diálogo solicitando a ação a ser tomada, como tentar novamente, ignorar o erro ou encerrar o processo. Se não houver interação do usuário, a única ação geralmente é relatar um código de erro indicando a falha na chamada de sistema. Além disso, há casos em que um erro significativo pode comprometer a integridade do sistema, como a destruição de estruturas de dados essenciais (por exemplo, o diretório-raiz). Nesses casos, o sistema pode ser incapaz de se recuperar e precisará exibir uma mensagem de erro e desligar. 2.4. Alocação e liberação de dispositivos dedicados Alguns dispositivos, como impressoras, podem ser usados somente por um único processo a qualquer dado momento. Cabe ao sistema operacional examinar solicitações para o uso de dispositivos e aceitá-los ou rejeitá-los, dependendo de o dispositivo solicitado estar disponível ou não. Abordagens para Gerenciamento de Acesso 1. Chamadas de Sistema Diretas: 0. Os processos fazem chamadas de sistema open para acessararquivos especiais que representam os dispositivos. Se o dispositivo estiver ocupado, a chamada open falha, e o processo deve esperar até que o dispositivo seja liberado. 1. Mecanismos Especiais de Solicitação e Liberação: 1. Nesta abordagem, a tentativa de adquirir um dispositivo não disponível bloqueia o processo chamador em vez de falhar. Os processos que não conseguem acessar o dispositivo são colocados em uma fila de espera. Quando o dispositivo se torna disponível, o primeiro processo na fila é autorizado a utilizá-lo e pode continuar sua execução. 2.5. Tamanho de bloco independente de dispositivo Discos diferentes podem ter tamanhos de setores diferentes. Cabe ao software independente do dispositivo esconder esse fato e fornecer um tamanho de bloco uniforme para as camadas superiores, por exemplo, tratando vários setores como um único bloco lógico. Dessa maneira, as camadas superiores lidam apenas com dispositivos abstratos, que usam o mesmo tamanho de bloco lógico, independentemente do tamanho do setor físico. 3. Software de E/S do espaço do usuário O software de Entrada/Saída (E/S) no espaço do usuário desempenha um papel fundamental na operação e eficiência dos sistemas operacionais modernos. Esse tipo de software permite que os usuários interajam com dispositivos de hardware de maneira eficaz, utilizando as bibliotecas e rotinas de E/S apropriadas. 3.1. Rotinas de E/S e Bibliotecas Como afirmam Silberschatz et al. (2018), "as rotinas de biblioteca não apenas simplificam a interação do programador com os dispositivos de E/S, mas também proporcionam um nível de abstração que esconde as complexidades do funcionamento interno do sistema operacional". Isso resulta em uma programação mais eficiente e menos propensa a erros. As rotinas de E/S são interfaces que permitem que os aplicativos do usuário realizem operações como leitura, escrita e manipulação de arquivos. Essas rotinas são frequentemente disponibilizadas através de bibliotecas, que encapsulam a complexidade das chamadas de sistema, facilitando a programação. Por exemplo, a chamada `printf` em C serve como um meio para formatar e exibir informações na tela, demonstrando o poder das rotinas de E/S em interações básicas do usuário com o sistema. 3.2. Sistema de Spooling Um componente essencial do software de E/S é o sistema de spooling, que gerencia a comunicação entre processos e dispositivos de E/S dedicados, como impressoras. O spooling permite que um processo envie dados para um dispositivo sem precisar aguardá-lo diretamente. O processo gera o conteúdo a ser impresso e o coloca em um diretório de spooling. Um daemon, que é um processo em segundo plano, é então responsável por acessar esse diretório e enviar os arquivos para a impressora conforme a disponibilidade. O spooling é crucial em ambientes de multiprogramação, onde múltiplos processos podem estar solicitando acesso a recursos de E/S simultaneamente. Como destacado por Tanenbaum e Austin (2013), "o uso de spooling evita que um único processo monopolize um dispositivo de E/S, permitindo que múltiplos processos enviem suas solicitações para um buffer que gerencia essas requisições de forma organizada". Figura 4.Camadas do sistema de E/S e as principais funções de cada camada. A Figura 4 resume o sistema de E/S, mostrando todas as camadas e as principais funções de cada uma. Começando na parte inferior, as camadas são o hardware, tratadores de interrupção, drivers do dispositivo, software independente de dispositivos e, por fim, os processos do usuário. As setas na Figura 4 mostram o fluxo de controle. Quando um programa do usuário tenta ler um bloco de um arquivo, por exemplo, o sistema operacional é invocado para executar a chamada. O software independente de dispositivos o procura, digamos, na cache do buffer. Se o bloco necessário não está lá, ele chama o driver do dispositivo para emitir a solicitação para o hardware ir buscá-lo do disco. O processo é então bloqueado até que a operação do disco tenha sido completada e os dados estejam seguramente disponíveis no buffer do chamador. Quando o disco termina, o hardware gera uma interrupção. O tratador de interrupção é executado para descobrir o que aconteceu, isto é, qual dispositivo quer atenção agora. Ele então extrai o estado do dispositivo e desperta o processo dormindo para finalizar a solicitação de E/S e deixar que o processo do usuário continue. 3.3. Vantagens do Software de E/S do Espaço do Usuário 1. Maior flexibilidade: O software de E/S do espaço do usuário é flexível e pode ser facilmente adaptado para diferentes dispositivos e sistemas operacionais. 1. Reutilização de código: O software de E/S do espaço do usuário pode ser reutilizado em diferentes projetos e aplicações, reduzindo o tempo e o custo de desenvolvimento. 1. Maior eficiência: O software de E/S do espaço do usuário pode ser otimizado para diferentes dispositivos e sistemas operacionais, melhorando o desempenho e a eficiência. 3.4. Desvantagens do Software de E/S do Espaço do Usuário 1. Segurança: O software de E/S do espaço do usuário pode ter acesso direto aos dispositivos de E/S, o que pode representar um risco de segurança. Se o software for mal projetado ou contiver vulnerabilidades, pode permitir que os dispositivos de E/S sejam acessados de forma não autorizada. 1. Incompatibilidade: O software de E/S do espaço do usuário pode não ser compatível com todos os dispositivos e sistemas operacionais. Isso pode limitar a sua utilização e exigir que os desenvolvedores criem diferentes versões do software para diferentes plataformas. 1. Complexidade: O software de E/S do espaço do usuário pode ser mais complexo do que o software de E/S do espaço do kernel, pois precisa lidar com as características específicas dos dispositivos de E/S e do sistema operacional. 1. Desempenho: O software de E/S do espaço do usuário pode ter um desempenho inferior ao software de E/S do espaço do kernel, pois precisa passar por mais camadas de software antes de acessar os dispositivos de E/S. 1. Limitações de recursos: O software de E/S do espaço do usuário pode ter limitações de recursos, como memória e processamento, o que pode afetar o seu desempenho e a sua capacidade de lidar com grandes volumes de dados. 1. Dependência de bibliotecas: O software de E/S do espaço do usuário pode depender de bibliotecas específicas para funcionar, o que pode limitar a sua portabilidade e exigir que os desenvolvedores criem diferentes versões do software para diferentes plataformas. 4. Hardware de disco O hardware de disco é um dos componentes mais essenciais em sistemas de computação, responsável pelo armazenamento e recuperação de dados. Existe uma série de tipos de discos. Os mais comuns são os discos rígidos magnéticos. Eles se caracterizam pelo fato de que leituras e escritas são igualmente rá- pidas, o que os torna adequados como memória secundária (paginação, sistemas de arquivos etc.). Arranjos desses discos são usados às vezes para fornecer um armazenamento altamente confiável. Para distribuição de programas, dados e filmes, discos ópticos (DVDs e Blu-ray) também são importantes. Por fim, discos de estado sólido são cada dia mais populares à medida que eles são rápidos e não contêm partes móveis. Nas seções a seguir discutiremos discos magnéticos como um exemplo de hardware e então descreveremos o software para dispositivos de discos em geral. 4.1. Discos magnéticos Os discos magnéticos são organizados em cilindros, com cada cilindro contendo várias trilhas, que, por sua vez, são divididas em setores. Nos discos flexíveis, o número de setores por trilha varia de 8 a 32, enquanto nos discos rígidos pode chegar a várias centenas. O número de cabeçotes de leitura/gravação varia de 1 a 16. Os discos mais antigos possuem eletrônica básica e operam com um fluxo de bits serial, dependentes principalmente do controlador para as operações. Em contraste, discos mais modernos, como os de tecnologia IDE (Integrated Drive Electronics) e SATA (Serial ATA), incorporam microcontroladoresque realizam funções como controle de cache e remapeamento de blocos defeituosos, permitindo um conjunto de comandos mais avançado. Uma característica importante dos discos magnéticos é a capacidade de realizar buscas sobrepostas (overlapped seeks), onde o controlador pode iniciar uma nova busca em outra unidade enquanto espera que uma busca em uma unidade seja concluída. Embora muitos controladores modernos consigam ler ou escrever em uma unidade enquanto buscam em outra, controladores de discos flexíveis têm limitações quanto à execução simultânea de operações. Para discos rígidos com controladores integrados, múltiplas unidades podem operar simultaneamente até a transferência entre o disco e o buffer de memória do controlador. Essa capacidade de realizar várias operações em paralelo ajuda a reduzir consideravelmente o tempo de acesso médio aos dados. Figura 5. Parâmetros de disco para o disco flexível original do IBM PC 360 KB e um disco rígido Western Digital WD 3000 HLFS A evolução dos discos rígidos ao longo das últimas três décadas é notável, refletindo avanços significativos em tecnologia e design. A Figura 5.18 apresenta uma comparação entre os parâmetros de um disco flexível original do IBM PC 360 KB e um disco rígido moderno, o Western Digital WD 3000 HLFS. Essas melhorias são atribuídas a avanços nas partes móveis e, principalmente, ao aumento das densidades de bits nas superfícies de gravação. Em discos antigos, o número de setores por trilha era o mesmo para todos os cilindros. Discos modernos são divididos em zonas com mais setores nas zonas externas do que nas internas. Figura 6. (a) Geometria física de um disco com duas zonas. (b) Uma possível geometria virtual para esse disco. A Figura 6 (a) ilustra um disco pequeno com duas zonas. A zona externa tem 32 setores por trilha; a interna tem 16 setores por trilha. Um disco real, como o WD 3000 HLFS, costuma ter 16 ou mais zonas, com o número de setores aumentando em aproximadamente 4% por zona à medida que se vai da zona mais interna para a mais externa. Para esconder os detalhes de quantos setores tem cada trilha, a maioria dos discos modernos tem uma geometria virtual que é apresentada ao sistema operacional. O software é instruído a agir como se houvesse x cilindros, y cabeçotes e z setores por trilha. O controlador então realiza um remapeamento de uma solicitação para (x, y, z) no cilindro, cabeçote e setor real. Uma geometria virtual possível para o disco físico da Figura 6(a) é mostrada na Figura 6(b). Em ambos os casos o disco tem 192 setores, apenas o arranjo publicado é diferente do real. Para os PCs, os valores máximos para esses três parâmetros são muitas vezes (65535, 16 e 63), pela necessidade de eles continuarem compatíveis com as limitações do PC IBM original. Nessa máquina, campos de 16, 4 e 6 bits foram usados para especificar tais números, com cilindros e setores numerados começando em 1 e cabeçotes numerados começando em 0. Com esses parâmetros e 512 bytes por setor, o maior disco possível é 31,5 GB. Para contornar esse limite, todos os discos modernos aceitam um sistema chamado endereçamento lógico de bloco (logical block addressing), no qual os setores do disco são numerados consecutiva- mente começando em 0, sem levar em consideração a geometria do disco. 4.2. RAID Em seu estudo de 1988, Patterson et al. sugeriram seis organizações de disco específicas que poderiam ser usadas para melhorar o desempenho do disco, sua confiabilidade, ou ambos (PATTERSON et al., 1988). Essas ideias foram rapidamente adotadas pela indústria e levaram a uma nova classe de dispositivo de E/S chamada RAID. Patterson et al. definiram RAID como arranjo redundante de discos baratos (Redundant Array of Inexpensive Disks), mas a indústria redefiniu o I como “Independent” em vez de “Inexpensive” (barato). A ideia fundamental por trás de um RAID é instalar uma caixa cheia de discos junto ao computador, em geral um grande servidor, substituir a placa controladora de disco com um controlador RAID, copiar os dados para o RAID e então continuar a operação normal. Em outras palavras, um RAID deve parecer com um SLED para o sistema operacional, mas ter um desempenho melhor e mais confiável. No passado, RAIDs consistiam quase exclusivamente em um controlador SCSI RAID mais uma caixa de discos SCSI, pois o desempenho era bom e o SCSI moderno suporta até 15 discos em um único controlador. Hoje, muitos fabricantes também oferecem RAIDs (mais baratos) baseados no SATA. Dessa maneira, nenhuma mudança no software é necessária para usar o RAID, um grande atrativo para muitos administradores de sistemas. Hoje, a maioria dos fabricantes refere-se às sete configurações padrão com RAID nível 0 a RAID nível 6. Figura 7. Níveis RAID 0 a 6. Os discos de backup e paridade estão sombreados. RAID Nível 0 (Figura 7(a)) 1. O RAID nível 0 utiliza striping, onde os dados são distribuídos em faixas (k setores cada) entre múltiplos discos. 1. Os dados são gravados em um estilo round-robin, permitindo E/S paralela. 1. Excelente para grandes solicitações, mas não oferece redundância. Se um disco falhar, todos os dados são perdidos. 1. Menor que um SLED, pois não há proteção contra falhas. RAID Nível 1 (Figura 7(b)) 1. O RAID nível 1 duplica todos os dados, criando cópias em discos de backup. 1. Durante a escrita, os dados são gravados em dois discos; na leitura, ambos podem ser utilizados. 1. Leitura pode ser duas vezes mais rápida que um disco único, mas a escrita não melhora. 1. Alta, pois se um disco falhar, o outro pode ser usado. RAID Nível 2 (Figura 7(c)) 1. Utiliza palavras e códigos de paridade Hamming para correção de erros. 1. Cada bit de dados é distribuído entre múltiplos discos, com bits de paridade para correção. 1. Alta taxa de dados, mas requer sincronização dos discos. 1. Complexidade e necessidade de muitos discos. RAID Nível 3 (Figura 7(d)) 1. Similar ao nível 2, mas utiliza um único bit de paridade por palavra de dados. 1. Discos devem estar sincronizados; um bit de paridade permite correção de erros em caso de falha de um disco. 1. Alta taxa de dados, mas não melhora o número de solicitações de E/S. RAID Nível 4 (Figura 7(e)) 1. Utiliza striping com paridade em um disco separado. 1. A paridade é calculada para cada faixa e armazenada em um disco extra. 1. Bom para leitura, mas ruim para atualizações pequenas, pois requer múltiplas leituras e gravações. 1. O disco de paridade pode se tornar um gargalo. RAID Nível 5 (Figura 7 (f)) 1. Distribui a paridade entre todos os discos, eliminando o gargalo do disco de paridade. 1. A paridade é calculada e armazenada de forma circular. 1. Melhor que o nível 4, mas a reconstrução após falha de disco é complexa. RAID Nível 6 (Figura 7(g)) 1. Similar ao nível 5, mas com dois blocos de paridade. 1. Oferece maior confiabilidade, pois pode tolerar a falha de dois discos. 1. Escritas são um pouco mais lentas devido ao cálculo adicional de paridade, mas as leituras não são afetadas. 5. Formatação de disco A formatação de disco é o processo de preparar um disco rígido para armazenar dados. Isso envolve a criação de uma estrutura de dados no disco, incluindo a criação de partições, a alocação de espaço em disco e a configuração do sistema de arquivos. (HAMACHER, 2017) Esse procedimento envolve duas etapas principais: a formatação de baixo nível e a formatação de alto nível, ambas essenciais para preparar o disco para o uso. 5.1. Estrutura Física do Disco Rígido Um disco rígido é composto por pratos (ou discos), que podem ser feitos de materiais como alumínio, vidro ou ligas metálicas. Esses pratos têm uma camada de material magnetizável, onde os dados são armazenados. Os tamanhos mais comuns desses pratos são de 8,9 cm de diâmetro (usados em desktops) e 6,35 cm (usados em notebooks). Cada prato é subdividido em trilhas concêntricas, e cada trilha é dividida em pequenas unidades chamadas setores. Um setor é a menor unidade de armazenamento no disco e normalmente armazena 512 bytes de dados. Cada setor contém, alémdos dados do usuário, informações auxiliares importantes, como um preâmbulo (que indica o início do setor) e um código ECC (Error Correction Code) que ajuda a detectar e corrigir erros de leitura. 5.2. O que é a Formatação de Baixo Nível? Antes de um disco rígido ser utilizado, ele precisa passar por um processo chamado formatação de baixo nível. Esse processo organiza fisicamente o disco criando trilhas e setores. A formatação de baixo nível define o layout físico, ou seja, onde cada setor e trilha estarão localizados no disco. O formato de um setor contém: 1. Preâmbulo: um conjunto de bits que o hardware usa para identificar o início do setor. 1. Dados do setor: a parte principal, que armazena os dados do usuário. 1. ECC (Error Correction Code): que contém informações redundantes para detectar e corrigir possíveis erros de leitura. 5.2.1. Setores Sobressalentes e Defeitos de Fabricação Os discos rígidos não são perfeitos, e alguns setores podem apresentar defeitos de fabricação. Para lidar com isso, durante a formatação de baixo nível, alguns **setores sobressalentes** são reservados para substituir setores defeituosos. Isso garante que o disco ainda funcione corretamente mesmo que alguns setores estejam danificados. 5.2.2. Deslocamento de Cilindro e Otimização de Desempenho Para melhorar o desempenho do disco, existe uma técnica chamada deslocamento de cilindro (cylinder skew). Quando o disco rígido lê dados de uma trilha, ele pode precisar mover o cabeçote de leitura para a próxima trilha. No entanto, esse movimento leva tempo, e se o setor 0 da nova trilha já passou, o cabeçote terá que esperar uma rotação completa do disco para alcançá-lo novamente, o que gera atraso. O deslocamento de cilindro resolve esse problema deslocando ligeiramente o setor 0 de cada trilha, de forma que, quando o cabeçote de leitura se mover para a próxima trilha, ele já esteja no ponto certo para continuar lendo sem esperar uma rotação completa. A magnitude do deslocamento depende da velocidade de rotação do disco (geralmente medida em rotações por minuto, ou RPM) e do número de setores por trilha. Por exemplo, em um disco de 10.000 RPM, a cada 20 microssegundos um novo setor passa sob o cabeçote de leitura. Se o tempo necessário para mover o cabeçote entre as trilhas for de 800 microssegundos, então o deslocamento de cilindro precisaria ser grande o suficiente para compensar a perda de 40 setores. 5.3. Capacidade Real do Disco e Confusões de Tamanho Após a formatação de baixo nível, a capacidade disponível do disco é menor do que a capacidade "bruta" anunciada pelo fabricante. Isso ocorre porque parte do espaço do disco é usada para armazenar o preâmbulo, o ECC, os setores sobressalentes e os intervalos entre os setores. Assim, a **capacidade formatada** é geralmente cerca de 20% menor do que a capacidade total antes da formatação. Além disso, há uma confusão adicional sobre o tamanho relatado pelos sistemas operacionais. Fabricantes de discos frequentemente usam uma definição decimal de gigabyte (1 GB = 1 bilhão de bytes), enquanto os sistemas operacionais usam a definição binária (1 GB = 1.073.741.824 bytes). Isso pode fazer com que, por exemplo, um disco de 200 GB seja relatado pelo sistema operacional como 186 GB, devido à diferença na forma como os tamanhos são calculados. 5.4. Entrelaçamento de Setores e Buffers de Controlador O desempenho do disco não depende apenas da velocidade de rotação, mas também da capacidade do controlador de disco de processar dados. Se o controlador não conseguir transferir dados rapidamente o suficiente para a memória principal, ele pode perder a oportunidade de ler setores consecutivos que estão passando pelo cabeçote de leitura. Para evitar esse problema, em discos mais antigos, os setores eram organizados de forma entrelaçada. Em vez de numerar os setores de forma consecutiva, eles eram espaçados para dar tempo ao controlador de processar os dados. Isso era especialmente útil em controladores com buffers pequenos, que só podiam armazenar um setor por vez. Nos discos modernos, essa técnica geralmente não é mais necessária, já que os controladores atuais podem armazenar uma trilha inteira em seus buffers. 5.5. Formatação de Alto Nível e Partições Após a formatação de baixo nível, o próximo passo é a formatação de alto nível, que é realizada separadamente para cada **partição** do disco. Na formatação de alto nível, é criado o sistema de arquivos, que organiza como os dados serão armazenados e acessados dentro de cada partição. Cada partição pode ser vista como um "mini-disco", e o sistema operacional trata cada uma como uma unidade de armazenamento independente. O processo de formatação de alto nível inclui: 1. Inserir um bloco de inicialização, que contém as informações necessárias para carregar o sistema operacional. 1. Criar um diretório raiz para organizar os arquivos. 1. Estabelecer um sistema de gerenciamento de espaço livre, que pode ser uma lista de blocos livres ou um mapa de bits. 5.5.1. Master Boot Record (MBR) e Tabela de Partições GUID (GPT) No setor 0 do disco, está o **Master Boot Record** (MBR), que contém um código de inicialização e a tabela de partições. Essa tabela indica onde cada partição começa e termina, permitindo que o sistema operacional gerencie múltiplos sistemas de arquivos no mesmo disco. O MBR, porém, tem uma limitação: ele só consegue lidar com discos de até 2 terabytes (TB). Para discos maiores, é utilizada a **GUID Partition Table** (GPT), que suporta discos de até 9,4 zettabytes (ZB), uma quantidade absurdamente grande de espaço de armazenamento. Quando o computador é ligado, o BIOS carrega o MBR e verifica qual partição está ativa. A partir daí, ele carrega o setor de inicialização dessa partição, que contém um programa responsável por carregar o sistema operacional. Conclusão Em conclusão, a investigação sobre dispositivos de entrada e saída revela a complexidade e a importância crítica desses sistemas na arquitetura de computadores modernos. Através da análise do software de E/S independente de dispositivo e do espaço do usuário, podemos entender como essas ferramentas facilitam a comunicação entre o usuário e o hardware. Além disso, um estudo aprofundado do hardware dos discos e do processo de formatação reforça a ideia de que uma gestão eficiente dos recursos de armazenamento é essencial para o desempenho do sistema. Referências Bibliográficas Tanenbaum, A. S., & Bos, H. (2016). Sistemas operacionais modernos (4ª ed., J. Ritter, Trad.). Pearson Education do Brasil. SILBERSCHATZ, Abraham; GALVIN, Peter B.; GAGNE, Greg. *Operating System Concepts*. 10. ed. Wiley, 2018. TANENBAUM, Andrew S.; AUSTIN, Herbert. *Operating Systems: Design and Implementation*. 3. ed. Prentice Hall, 2013. KUROSE, James F.; ROSS, Keith W. *Computer Networking: A Top-Down Approach*. 7. ed. Pearson, 2017. Patterson, D. A., & Hennessy, J. L. (2017). *Computer Organization and Design: The Hardware/Software Interface*. Morgan Kaufmann. image2.png image3.png image4.png image5.png image6.png image7.png image8.png image9.png image10.png image1.png