Prévia do material em texto
1 FUNDAMENTOS DA INFRAESTRUTURA DA TECNOLOGIA DA INFORMAÇÃO AULA 3 Prof. Rafael Vilas Boas Wiecheteck 2 CONVERSA INICIAL O sistema operacional é um software indispensável nos sistemas computacionais atuais, quer seja em um smartphone, notebook, desktop ou qualquer outro equipamento que realize algum tipo de processamento. Ele é importante porque é o responsável por integrar o hardware do equipamento com os softwares de usuários. Podemos fazer uma breve distinção das funcionalidades de um sistema operacional em função do nível de utilização do usuário. Para o usuário final, que irá utilizar o equipamento ou software, podemos descrever algumas características mais gerais. Por outro lado, para um usuário que irá desenvolver uma solução, como o engenheiro de software, há características técnicas de grande importância que devem ser consideradas. Na visão de usuário, o sistema operacional é considerado como uma interface amigável que permite acessar, de forma intuitiva e fácil, aplicativos, arquivos e configurações do sistema. O objetivo principal do usuário é realizar tarefas cotidianas, como navegar na web, criar documentos, assistir a vídeos e jogar. A Figura 1 apresenta um exemplo de sistema operacional com interface gráfica. Figura 1 – Sistema operacional com interface amigável ao usuário final Crédito: omihay/Shutterstock. Na visão de um engenheiro de software, o sistema operacional é visto como uma plataforma complexa que fornece os recursos básicos necessários 3 para a construção e execução de aplicativos. O enfoque é na escalabilidade, segurança, desempenho e compatibilidade do sistema, além da gestão de recursos do sistema, como memória, processadores e armazenamento. A Figura 2 apresenta um exemplo de sistema operacional com interface por linha de comando. Figura 2 – Sistema operacional com interface por linha de comando Crédito: Paolo De Gasperis/Shutterstock. Assim, enquanto o usuário final enxerga o sistema operacional como uma plataforma fácil de usar para realizar tarefas diárias, o engenheiro de software a enxerga como uma camada complexa de software que precisa ser otimizada e mantida para fornecer uma plataforma estável e segura para a construção de aplicativos. TEMA 1 – CONCEITUAÇÃO DE SISTEMAS OPERACIONAIS A maioria dos equipamentos que nos rodeia é, essencialmente, um sistema computacional. Dos tradicionais computadores e smartphones, passando pelos eletrodomésticos modernos e carros, por exemplo. Todos esses equipamentos possuem alguns itens em comum: pelo menos um processador, memória e dispositivos de entrada/saída. 4 As primeiras gerações de computadores possuíam um hardware mais simples, porém, o programador ou desenvolvedor de software precisava conhecer a fundo o equipamento para que pudesse escrever um programa eficiente. Nessa época, era necessário, por exemplo, conhecer o funcionamento da memória física, pois, caso contrário, o software poderia causar o travamento do equipamento ou a perda de informações. Com o avanço da tecnologia, o hardware desses produtos tem se tornado cada vez mais complexo, de modo que se torna inviável a um desenvolvedor de software conhecer todos os detalhes de cada equipamento para desenvolver uma aplicação. Esse é um dos motivos pelo qual o sistema operacional é tão importante. 1.1 Funções do sistema operacional Um sistema operacional é um software complexo que controla e gerencia a operação de um computador. Ele fornece uma camada de abstração entre o hardware e os aplicativos, tornando possível a esses aplicativos acessarem e controlarem os recursos de hardware de maneira eficiente e segura. Figura 3 apresenta onde um sistema operacional se encontra em um sistema computacional. Além disso, o sistema operacional gerencia tarefas básicas, como alocar memória, gerenciar processos, controlar a entrada e saída de dados, gerenciar arquivos e diretórios, além de prover segurança contra ameaças externas. Ele também fornece uma interface de usuário, como uma janela de interface gráfica ou linha de comando, que permite aos usuários interagir com o computador e os aplicativos instalados. Figura 3 – Sistema operacional em um sistema computacional 5 Como visto, o sistema operacional desempenha uma série de funções importantes para o funcionamento de um computador. Essas funções podem ser separadas em alguns grupos: • Gerenciamento de recursos: gerenciamento e alocação de recursos, como CPU, memória, armazenamento e periféricos, entre os aplicativos em execução. • Gerenciamento de processos: gerenciamento da execução de processos, alocando recursos de hardware de maneira justa e evitando conflitos. • Gerenciamento de memória: gerenciamento da memória RAM, alocando espaço para aplicativos em execução e garantindo que a memória seja utilizada de maneira eficiente. • Gerenciamento de arquivos: fornecimento de ferramentas para criar, armazenar, buscar e gerenciar arquivos e diretórios em disco. • Comunicação com periféricos: gerenciamento da comunicação entre o computador e os periféricos, como impressoras, câmeras, discos rígidos externos, entre outros. • Segurança: fornecimento de medidas de segurança para proteger o computador contra ameaças externas, como vírus, spyware e outros tipos de malware. • Interface de usuário: fornecimento de uma interface para que os usuários possam interagir com o computador, seja por meio de uma interface gráfica de usuário ou linha de comando. 1.2 Evolução dos sistemas operacionais A evolução dos sistemas operacionais reflete o desenvolvimento da tecnologia e as mudanças na forma como os usuários interagem com os computadores. Dependendo do autor consultado, os períodos e datas podem variar um pouco. Essas datas não são fixas porque, durante um tempo, as tecnologias foram surgindo e convivendo com as tecnologias anteriores. As datas aqui apresentadas dão uma noção da evolução dos sistemas operacionais: • Sistemas operacionais para mainframe (1950s–1960s): os primeiros sistemas operacionais foram projetados para computadores de grande 6 porte (mainframes). Esses grandes computadores comerciais eram compartilhados por muitos usuários e basicamente eram conjuntos de programas que gerenciavam o uso dos recursos do computador e permitiam que os usuários compartilhassem recursos, como periféricos. Nesse período, os sistemas operacionais eram desenvolvidos especificamente para cada equipamento. Os profissionais que desenvolviam os programas eram engenheiros, matemáticos e pesquisadores com alto conhecimento do hardware utilizado. • Sistemas operacionais para computadores pessoais (1970s–1980s): com o surgimento de computadores pessoais, como o Apple II e o IBM PC, surgiram sistemas operacionais para usuários individuais. Inicialmente, a interface de usuário desses sistemas operacionais era somente por linhas de comando. Com o passar dos anos, foi incorporada a interface gráfica de usuário, facilitando o modo de usar e permitindo que os usuários executassem aplicativos de escritório e de entretenimento, sem a necessidade de conhecer as linhas de comando e parâmetros a serem passados para os programas. • Sistemas operacionais para servidores (1980s–1990s): com o aumento da popularidade da internet e da utilização das redes de computadores, surgiram sistemas operacionais específicos para servidores, que forneciam recursos adicionais para gerenciar a largura de banda, compartilhar recursos, como impressoras, entre vários computadores, garantindo a segurança de acesso e de dados e permitindo a escalabilidade do sistema. • Sistemas operacionais para dispositivos móveis (2000s–atualidade): com o surgimento de smartphones e tablets, surgiram sistemas operacionais para dispositivosmóveis, que fornecem interfaces de usuário fáceis de usar e recursos de mobilidade, como gerenciamento de bateria e conectividade sem fio. • Sistemas operacionais para computação em nuvem (2010s– atualidade): com o advento da computação em nuvem, surgiram sistemas operacionais específicos para essa tecnologia, que fornecem recursos adicionais para gerenciar a infraestrutura de nuvem, escalabilidade e segurança. Esses sistemas operacionais permitem que 7 usuários acessem remotamente recursos de computação por intermédio da internet, sem precisar de hardware local. TEMA 2 – CLASSIFICAÇÃO DOS SISTEMAS OPERACIONAIS Os sistemas operacionais podem ser classificados em diferentes categorias. Essa classificação irá depender do objetivo, da arquitetura do hardware, do número de usuários ou da forma de utilização, por exemplo. Nesta abordagem, faremos uma classificação em relação aos itens a seguir: • Quanto ao tempo de resposta e entrada de dados. • Quanto à execução de tarefas. • Quanto à estrutura do núcleo. 2.1 Classificação em relação ao tempo de resposta e entrada de dados As categorias tempo de resposta e entrada de dados são conceitos importantes em sistemas operacionais. O tempo de resposta se refere ao intervalo de tempo entre a entrada de um comando ou um conjunto de dados e o retorno da resposta correspondente. A entrada de dados, por sua vez, se refere à forma como os dados são inseridos no sistema, podendo ser de forma manual por meio de teclado, mouse, touchpad ou de forma automática por intermédio de outro sistema ou equipamento. Os sistemas operacionais podem ser classificados da seguinte forma: • Sistemas operacionais em lote (batch): nesta categoria, os dados são processados em lotes e não fornecem interação com o usuário, como no caso de sistemas bancários. • Sistemas operacionais interativos: permitem que os usuários interajam com o sistema e esperam uma resposta imediata a cada entrada de dados, como no caso de sistemas operacionais para computadores pessoais. • Sistemas operacionais de tempo real: respondem a eventos em tempo real, como no caso de sistemas de radar eletrônico de tráfego ou de sistemas de automação industrial. • Sistemas operacionais de sistemas híbridos: nesta categoria, enquadram-se os sistemas operacionais que atuam de forma combinada entre duas ou mais categorias mencionadas anteriormente. 8 2.2 Classificação quanto à execução de tarefas A classificação dos sistemas operacionais quanto à execução de tarefas é importante porque permite aos desenvolvedores escolher o sistema operacional que atenda às suas necessidades específicas de processamento, capacidade de gerenciamento de recursos e velocidade. Essa classificação pode ser feita da seguinte forma: • Sistemas operacionais monotarefas: permitem a execução de uma tarefa de cada vez. • Sistemas operacionais multitarefas: permitem a execução de múltiplas tarefas ao mesmo tempo, por exemplo, alternando entre diferentes programas ou processos. • Sistemas operacionais multiusuários: permitem que vários usuários compartilhem recursos, como armazenamento e processamento, ao mesmo tempo. • Sistemas operacionais multithreading: permitem que uma tarefa seja dividida em vários segmentos, que podem ser executados paralelamente, aumentando a velocidade de processamento. • Sistemas operacionais de tempo real: respondem a eventos em tempo real, ou seja, respondem aos eventos no momento que ocorrem. 2.3 Classificação quanto à estrutura do núcleo A classificação dos sistemas operacionais quanto à estrutura do núcleo tem influência sobre a flexibilidade, escalabilidade, estabilidade e segurança do sistema. Em relação à estrutura do núcleo, pode fazer a classificação a seguir: • Sistemas operacionais monolíticos: possuem um núcleo único e integrado, em que todos os componentes são incorporados a ele. • Sistemas operacionais micronúcleos: possuem um núcleo pequeno e modular, permitindo a adição ou remoção de componentes, sem interferir no funcionamento do sistema. • Sistemas operacionais externos: possuem um núcleo separado, que fornece serviços aos programas e aplicativos. 9 Como exemplo, sistemas operacionais micronúcleos são ideais para sistemas de tempo real, enquanto sistemas operacionais monolíticos são ideais para sistemas de grande escala. TEMA 3 – CONCORRÊNCIA Em sistemas operacionais, a concorrência é um conceito que se refere à capacidade de vários processos compartilharem os recursos de um equipamento, de forma a evitar conflitos ou erros de execução. Dessa forma, a concorrência permite que vários processos sejam executados ao mesmo tempo, aumentando a eficiência e eficácia do sistema operacional. Por exemplo: um computador pessoal executa diversos processos, tais como: o navegador da web, um editor de texto, uma planilha eletrônica e um aplicativo de mensagens. Todos esses softwares podem ser executados concorrentemente, permitindo ao usuário alternar rapidamente entre eles e realizar tarefas simultâneas. Para o usuário, a sensação é que todos esses softwares estão sendo executados ao mesmo tempo. O gerenciamento da concorrência é feito por intermédio de técnicas, como a troca de contexto, que permite alternar rapidamente entre diferentes processos e atribuir recursos, como CPU, memória e dispositivos de entrada/saída, de forma justa e equilibrada. Além disso, os sistemas operacionais também implementam mecanismos de sincronização, que proporcionam a coordenação entre processos concorrentes e garantem a consistência de dados compartilhados. 3.1 Principais técnicas de concorrência Há diversas técnicas de concorrência que podem ser empregadas e, normalmente, várias delas são utilizadas por um mesmo sistema operacional. A seguir, veremos as principais dessas técnicas: • Interrupção: é uma forma de comunicação entre o hardware e o software. Ela permite que o hardware notifique o software sobre eventos importantes, como a conclusão de uma tarefa de entrada/saída, uma falha de hardware ou um timer que expirou. O software, então, pode reagir adequadamente a esses eventos, garantindo a continuidade do funcionamento do sistema. Interrupções são gerenciadas pelo sistema 10 operacional, que as redireciona para o software apropriado para lidar com o evento, com o objetivo de evitar o bloqueio ou a interrupção da execução de tarefas importantes. A Figura 4 exemplifica um processo de interrupção. Figura 4 – Esquema de funcionamento de um processo de interrupção Fonte: Rafael Vilas Boas Wiecheteck, 2023. • Exceção: é um tipo especial de evento de interrupção que indica uma condição anormal ou inesperada no sistema operacional ou software. É gerada em resposta a erros ou falhas no software ou hardware, tais como divisão por zero, acesso à memória inválida ou falha em alocar recursos. A ocorrência de uma exceção interrompe a execução normal do programa e é gerenciada pelo sistema operacional, que pode responder a ela de diferentes maneiras, incluindo a finalização da aplicação, a correção do erro ou a continuação da execução do programa após tratar a exceção. As exceções fornecem uma forma flexível e poderosa de lidar com erros e condições anormais no software. • Controladores: são componentes do sistema operacional que administram os recursos do sistema, como processadores, memória, 11 dispositivos de entrada/saída e armazenamento. Eles são responsáveis por gerenciar as solicitações de recursos feitas pelos programas e alocá- los de forma eficiente e equilibrada para todos os processos em execução. Além disso, os controladores também implementam e gerenciam algoritmos de escalonamento de processos, que determinam a ordem de execução dos processos e garantem a distribuição adequada dos recursos do sistema. Por isso, são uma parte críticado sistema operacional, assegurando o desempenho e a estabilidade. • Buffering: é uma técnica utilizada em sistemas operacionais para tratar a transferência de dados entre componentes do sistema com diferentes taxas de transferência. Nessa técnica, os dados são armazenados temporariamente em uma área de memória conhecida como buffer antes de serem transferidos para outro componente. O buffering é amplamente utilizado em sistemas de entrada/saída, como discos rígidos, dispositivos de armazenamento removíveis e dispositivos de rede, para garantir a velocidade e a eficiência da transferência de dados. • Spooling: é uma técnica que utiliza uma área em disco como se fosse um grande buffer. É aplicada em sistemas operacionais para gerenciar impressão e outras tarefas de saída de dados. • Reentrância: característica de um programa que permite que ele seja chamado novamente antes de ter concluído sua execução anterior, ou seja, pode ser executado várias vezes paralelamente. A reentrância é útil para os sistemas operacionais gerenciarem interrupções ou eventos assíncronos, em que é necessário que a sub-rotina responsável por executar a interrupção possa processar outras interrupções enquanto a anterior ainda está sendo executada. A concorrência é uma característica fundamental de sistemas operacionais modernos, pois atua diretamente no desempenho e eficiência de sistemas complexos, como servidores, bancos de dados, aplicativos em nuvem e sistemas de tempo real. TEMA 4 – PROCESSOS Podemos dizer que um processo é a forma como o sistema operacional representa uma tarefa ou aplicação em execução. Se estivermos, por exemplo, 12 com uma planilha eletrônica, um editor de texto e um navegador de internet abertos ao mesmo tempo, para o sistema operacional, significa que estaremos com três processos abertos. Cada um desses processos é uma entidade dinâmica que contém informações sobre o estado atual da aplicação, incluindo dados, código, recursos alocados, registros de pilha, arquivos abertos, entre outros. Portanto, o sistema operacional utiliza essa representação para gerenciar a execução dos processos, alocar recursos e garantir a segurança e isolamento entre eles. A compreensão da definição de processo é fundamental para o entendimento do funcionamento dos sistemas operacionais e para o desenvolvimento de aplicações eficientes e seguras. O sistema operacional gerencia os processos atribuindo recursos como CPU, memória e dispositivos de entrada/saída, além de garantir a segurança e isolamento entre eles. Os processos são criados, executados, suspensos, retomados e finalizados pelo sistema operacional, e podem ser coordenados para alcançar objetivos comuns, como a realização de tarefas em paralelo ou a compartilhamento de recursos. Os processos são considerados como o nível mais elevado de abstração na programação de sistemas operacionais, pois permitem que os programadores escrevam aplicações pensando apenas na lógica da tarefa a ser realizada, sem se preocupar com questões de baixo nível, como gerenciamento de memória e processamento de interrupções. A Figura 5 apresenta o gerenciador de tarefas do Microsoft Windows, em que é possível visualizar os processos (programas) de usuário que estão ativos no momento. 13 Figura 5 – Visualização de processos ativos no gerenciador de tarefas do Microsoft Windows 10 Fonte: Rafael Vilas Boas Wiecheteck, 2023. 4.1 Estrutura de um processo Quando um sistema operacional cria um processo, várias informações são necessárias para ser identificado e as informações gerenciadas. Basicamente, quando um processo é criado, há três componentes principais que podem ser identificados: informações de software, informações de hardware e informações de recursos necessários. A Figura 6 apresenta, de forma visual, a estrutura de um processo. Figura 6 – Principais componentes que compõem um processo Fonte: Rafael Vilas Boas Wiecheteck, 2023. 14 As informações de software incluem, por exemplo, o nome do processo, o ID do processo (PID), que é um identificador único atribuído pelo sistema operacional, quem é o proprietário daquele programa, qual a prioridade de execução, a data e hora de sua criação e o tempo de processador. Esses são alguns exemplos das principais informações, mas há muito mais. As informações de hardware contemplam as informações do dispositivo que será utilizado para executar o processo, tais como registrador de programa, ponteiro de instrução e dados armazenados na memória. É a descrição de onde o processo está no momento e o que está fazendo. Por fim, as informações de recursos englobam quaisquer informações sobre os recursos que precisam ser utilizados para realizar a tarefa, como, por exemplo, arquivos, dispositivos de entrada e saída, memória, entre outros. 4.2 Estados de um processo Conforme vimos, um sistema operacional precisa gerenciar os diversos processos abertos no sistema, pois esses processos não podem ser executados todos ao mesmo tempo. Para o usuário, por mais que pareça que todos os processos estão rodando de forma paralela, na prática, não é o que acontece. Os estados de um processo são as diferentes fases por onde um processo passa durante sua execução. As fases são as seguintes: • Novo: o processo é criado, mas ainda não está pronto para ser executado. • Pronto: o processo está aguardando o uso da CPU. • Execução: o processo está em execução, usando a CPU. • Espera: o processo está esperando por algum recurso externo, como entrada de dados ou acesso ao disco. • Terminado: o processo terminou sua execução. A Figura 7 apresenta, visualmente, os três estados principais em que os processos podem se encontrar: pronto, execução e espera. 15 Figura 7 – Representação dos três principais estados em que os processos podem se encontrar Fonte: Rafael Vilas Boas Wiecheteck, 2023. A mudança de estado é controlada pelo sistema operacional que gerencia a alocação dos recursos e a ordem de execução dos processos. O objetivo é maximizar a eficiência e evitar conflitos entre processos. TEMA 5 – THREADS Thread é uma unidade de execução independente dentro de um processo. Cada processo pode ter várias threads, cada uma realizando uma tarefa específica, sendo que elas compartilham o mesmo espaço de endereço e recursos do processo, mas possuem suas próprias estruturas de registro, tais como pilha de execução e registradores. A utilização de threads permite que o sistema operacional faça a alocação de múltiplos processos para a CPU de maneira mais eficiente, melhorando o desempenho geral do sistema. Além disso, ajuda a resolver problemas de concorrência, permitindo que múltiplas tarefas sejam executadas em paralelo dentro de um processo. Basicamente, podemos diferenciar um processo de uma thread da seguinte forma: • Processo: unidade básica de execução em um sistema operacional. Cada processo tem sua própria área de memória, recursos do sistema 16 (por exemplo, arquivos abertos) e estado de execução (por exemplo, prioridade). Cada processo é independente uns dos outros, o que significa que um não pode afetar diretamente o outro. • Thread: unidade de execução independente dentro de um processo. Cada processo pode ter várias threads, cada uma realizando uma tarefa específica. Essas threads compartilham o mesmo espaço de endereço e recursos do processo, mas possuem suas próprias estruturas de registro, tais como pilha de execução e registradores. Em resumo, os processos são independentes uns dos outros, enquanto as threads são dependentes de um processo e compartilham seus recursos, conforme pode ser visto na Figura 8. Figura 8 – À esquerda, um processo com somente um fluxo de execução e, à direita, um processo contendo três threads executadas simultaneamenteFonte: Rafael Vilas Boas Wiecheteck, 2023. As threads são criadas a partir do software ou aplicação que está sendo desenvolvida. A maioria das linguagens de programação possui funções próprias para a criação e o gerenciamento de threads. FINALIZANDO O sistema operacional é parte fundamental do software que controla e gerencia as operações de um computador. Ele permite a interação entre o 17 hardware e o software, fornecendo serviços aos programas de aplicação e ao usuário. É responsável, também, por gerenciar recursos do sistema, como memória, processamento, entrada e saída de dados, bem como a coordenação de tarefas. Essa camada de software oferece também outras funcionalidades, como a interface para que o usuário possa interagir com o computador, executar tarefas e a responsabilidade pela segurança do sistema, controlando o acesso de programas e usuários aos recursos e dados. A evolução dos sistemas operacionais foi marcada por mudanças significativas, incluindo a popularização da interface gráfica, o surgimento da computação em nuvem e a incorporação de tecnologias avançadas, como virtualização e processamento paralelo. 18 REFERÊNCIAS DEITEL, H. M. Sistemas operacionais. 3. ed. São Paulo: Pearson Prentice Hall, 2005. SILBERSCHATZ, A. Fundamentos de sistemas operacionais. 9. ed. Rio de Janeiro: LTC, 2015. TANENBAUM, A. S. Sistemas operacionais modernos. 4. ed. São Paulo: Pearson Education do Brasil, 2016. Conversa inicial FINALIZANDO REFERÊNCIAS