Baixe o app para aproveitar ainda mais
Prévia do material em texto
SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 1 SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO “A Faculdade Católica Paulista tem por missão exercer uma ação integrada de suas atividades educacionais, visando à geração, sistematização e disseminação do conhecimento, para formar profissionais empreendedores que promovam a transformação e o desenvolvimento social, econômico e cultural da comunidade em que está inserida. Missão da Faculdade Católica Paulista Av. Cristo Rei, 305 - Banzato, CEP 17515-200 Marília - São Paulo. www.uca.edu.br Nenhuma parte desta publicação poderá ser reproduzida por qualquer meio ou forma sem autorização. Todos os gráficos, tabelas e elementos são creditados à autoria, salvo quando indicada a referência, sendo de inteira responsabilidade da autoria a emissão de conceitos. Diretor Geral | Valdir Carrenho Junior SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 3 SUMÁRIO AULA 01 AULA 02 AULA 03 AULA 04 AULA 05 AULA 06 AULA 07 AULA 08 AULA 09 AULA 10 AULA 11 AULA 12 AULA 13 AULA 14 AULA 15 AULA 16 05 13 19 24 32 37 43 49 55 60 66 73 79 85 91 97 CONCEITOS, FUNÇÕES E HISTÓRICO DOS SISTEMAS OPERACIONAIS TIPOS DE SISTEMAS OPERACIONAIS GERENCIAMENTO DE PROCESSOS GERENCIAMENTO DE MEMÓRIA GERENCIAMENTO DE ARQUIVOS GERENCIAMENTO DE ENTRADA E SAÍDA GERENCIAMENTO DE PROTEÇÃO E SEGURANÇA THREADS UTILIZANDO THREADS SISTEMAS OPERACIONAL COM VÁRIOS PROCESSADORES ESCALONADOR DA CPU ALGORITMOS AVANÇADOS DE ESCALONAMENTO INTRODUÇÃO A DEADLOCKS VIRTUALIZAÇÃO E MÁQUINAS VIRTUAIS SISTEMAS OPERACIONAIS MULTIMÍDIA SISTEMAS OPERACIONAIS PARA DISPOSITIVOS MÓVEIS SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 4 INTRODUÇÃO Antes de ter acesso às casas de milhões de pessoas, os computadores passaram por considerável evolução e por muitas adaptações: de artefatos enormes, lentos e pouco confiáveis para dispositivos leves, rápidos e absolutamente precisos; de má- quinas em trabalho isolado a componentes ativos de uma enorme rede mundial e, por fim, de executores de tarefas simples a sofisticadas plataformas científicas e de multimídia. Fica difícil imaginar o que os computadores não sejam capazes de fazer em nossos dias e essa variedade de funções contribuiu para que todos nós desenvol- vêssemos a necessidade de ter um deles por perto. Embora sejam muito importantes, as transformações visíveis e palpáveis não fo- ram as únicas que nos impulsionaram até aqui. A evolução do software contribuiu de forma decisiva para tornar simples a utilização da máquina e, neste contexto, o papel mais importante cabe aos Sistemas Operacionais. Afinal, são eles que gerenciam todos os recursos de um sistema computacional e que constituem a ponte entre o hardware e o usuário comum, possibilitando que a experiência de uso de um compu- tador seja agradável e produtiva. Foi justamente para esclarecer os meios pelos quais um Sistema Operacional atua que criamos este material. Com um viés objetivo e de fácil compreensão, os encon- tros se iniciam com a abordagem histórica do nosso tema principal, avança na direção dos seus tipos e chega até o conceito de processos, elemento essencial na constru- ção de um Sistema Operacional e que será recorrente em nossas abordagens. Nosso conteúdo segue tratando das formas de gerenciamento que um SO exerce sobre os recursos do computador e é finalizado com threads, multiprogramação, virtualização e Sistemas Operacionais multimídia e mobile. Esperamos que esta aventura pelos caminhos dos Sistemas Operacionais seja muito proveitosa a você e que o conteúdo que por aqui será conhecido seja decisivo no restante da sua vida acadêmica, além de te credenciar a uma jornada profissional de muito sucesso. Seja muito bem-vinda e seja muito bem-vindo! SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 5 AULA 1 CONCEITOS, FUNÇÕES E HISTÓRICO DOS SISTEMAS OPERACIONAIS De todos os recursos que um sistema de computação possui, o Sistema Operacional talvez seja aquele que ofereça as funções mais desconhecidas para o usuário comum. Ainda que sua interface gráfica seja a porta de entrada para o uso de qualquer aplicação, a utilidade de um Sistema Operacional vai muito além da conveniência dos ícones, das teclas de atalho e uso do mouse. Embora silenciosas e independentes de alguma ação do usuário, são essas “funções desconhecidas” que viabilizam interações que, de outra forma, seriam extremamente trabalhosas e comprometeriam seriamente a experiência de uso de um computador. Para que nosso conhecimento sobre Sistemas Operacionais comece a ser construído pela base e de forma bem gradativa, trataremos neste nosso encontro dos conceitos introdutórios e das suas principais funções, sem nos esquecermos do necessário resgate histórico dos fatos e das circunstâncias que contribuíram para que nosso objeto de estudo alcançasse o atual estado da arte em que se encontra, e o habilitaram à franca evolução nos anos que se seguirão. Sigamos em frente e bom estudo! 1.1 Conceitos e principais funções dos Sistemas Operacionais Definitivamente, um Sistema Operacional não é um programa comum. Em um ambiente complexo e formado por dispositivos com diversas funções é dele a missão de exercer a coordenação entre esses elementos e de viabilizar a criação de outras aplicações para o computador. Sem o Sistema Operacional, um desenvolvedor deveria, por exemplo, criar mecanismos de gerenciamento de todos os periféricos e outros dispositivos que a sua aplicação utilizaria, antes de aventurar-se a efetivamente desenvolvê-la. Inviável, para dizer o mínimo. O Sistema Operacional é um programa que gerencia o hardware de um SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 6 computador. Ele também fornece uma base para os programas aplicativos e atua como intermediário entre o usuário e o hardware do computador. Considerando que um sistema computacional pode ser mais facilmente entendido através da separação entre componentes, o Sistema Operacional exerce o papel de intermediário entre aplicativos de usuário e o hardware da máquina, possibilitando a comunicação entre estas partes e viabilizado o trabalho do desenvolvedor, conforme já mencionado (SILBERSCHATZ, GALVIN, GAGNE, 2015). A figura 1 nos oferece visão de um sistema computacional típico que inclui usuários fazendo uso de aplicativos, que se conectam ao hardware por meio do Sistema Operacional. Figura 1: Visão de um sistema computacional Fonte: (SILBERSCHATZ; GALVIN; GAGNE, 2015) Embora pareça simples na figura, a atuação de um Sistema Operacional é bastante complexa e inclui funções não exatamente afins, conforme logo examinaremos. Essa multiplicidade de funções acaba, inclusive, dificultando sua própria conceituação. Tanenbaum e Bos (2016) afirmam ser difícil dizer com absoluta precisão o que é um Sistema operacional, em parte por realizarem duas funções essencialmente não SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 7 relacionadas: (i) fornecer aos programadores de aplicativos (e aos próprios aplicativos, naturalmente) um conjunto de recursos claros e fáceis de serem utilizados, ao invés de recursos confusos de hardware, e (ii) gerenciar esses recursos de hardware. Este cenário nos impele a observar os Sistemas Operacionais considerando duas grandes funções (TANENBAUM; BOS, 2016): • Sistema Operacional como uma máquina estendida: neste contexto, o Sistema Operacional é tido como um fornecedor de abstrações que viabilizará a utilização da máquina para fins de desenvolvimento de aplicações. As abstrações criadas tornam tarefas extremamente complexas em atividades viáveis para o desenvolvedor e, por consequência, para o usuário comum. Uma interface gráfica de usuário é um exemplo clássico dessasabstrações. • Sistema Operacional como um gerenciador de recursos: é neste item que um Sistema Operacional assume o papel de gerenciador de todos os recursos de um sistema computacional, incluindo a memória da máquina. Conforme investigaremos em aulas seguintes, o controle da memória permitirá que vários programas a ocupem simultaneamente, e que o usuário tenha a sensação de que estão sendo executados também ao mesmo tempo. Feitas essas considerações, avançamos agora para a abordagem histórica dos Sistemas Operacionais. 1.2 Histórico dos Sistemas Operacionais Ao fazermos o resgate histórico de um tema é comum que uma consideração importante deva ser feita antes: a divisão das fases resultantes da evolução de um objeto de estudo são quase sempre produto de análise posterior dos fatos e nunca resultado de um registro ou apontamento feito no calor dos acontecimentos. Em outras palavras, a organização dos períodos evolutivos é fruto de convenções de datas criadas por observadores que podem sequer ter participado do evento que motivou a virada de fase do objeto de estudo. Bons exemplos para ilustrar essa realidade não faltam. Em 1789, a Revolução SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 8 Francesa inaugurou um novo período histórico, que hoje chamamos Idade Contemporânea. No entanto, não é difícil de imaginar que essa divisão tenha sido convencionada anos depois, e não quando o fato ocorria. Quando se trata de datas, sempre devemos considerar certa imprecisão e eventuais sobreposições de fatos, o que não exclui a importância do estudo histórico. Em nosso contexto é muito comum que a evolução dos Sistemas Operacionais esteja relacionada diretamente à evolução do próprio hardware dos computadores, tamanho o grau de interdependência entre ambos. Autores diferentes costumam expor esta evolução de formas diferentes, mas alguns valem mais a menção. Tanenbaum e Bos (2016) usam o histórico de evolução dos computadores para explicarem a própria evolução dos Sistemas Operacionais e dividem a trajetória de ambos em gerações, como segue: • Primeira Geração (1945 a 1955): na década de 1940 os computadores operavam sem Sistemas Operacionais e se caracterizavam pelo seu funcionamento com válvulas. Foi a Segunda Guerra Mundial (1939 a 1945) que deu motivos para a evolução dos computadores, justamente pela necessidade de criar um artefato que pudesse fazer cálculos balísticos com maior precisão e decifrar o código usado nas transmissões feitas entre os alemães. Contam os autores que, no começo da década de 1940, o professor John Atanasoff e seu aluno de graduação, Clifford Berry, construíram o que hoje é tido como o primeiro computador digital funcional do mundo. Pouco tempo depois, outras criações se sucederam, todas muito rudimentares e que não usavam linguagem de programação, pois elas simplesmente não existiam. Como você pode imaginar, os Sistemas Operacionais também era algo de que nunca se tinha ouvido falar. ISTO ESTÁ NA REDE O filme chamado O Jogo da Imitação (2015) retrata parte da história de Alan Turing e sua busca por construir uma máquina que pudesse decifrar o código nazista usado para comunicação durante a Segunda Guerra Mundial. Esta máquina foi a base para o que hoje conhecemos como computador. O trailer oficial do filme está disponível em: https://www.youtube.com/watch?v=YIkKbMcJL_4. Acesso em: 1 de jun. de 2021. https://www.youtube.com/watch?v=YIkKbMcJL_4 SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 9 • Segunda Geração (1955 a 1965): esta geração é caracterizada pelo uso de transistores na construção dos computadores e pelo processamento em lotes (ou batch). Além disso, foi nesta época que os computadores se tornaram confiáveis o suficiente para serem fabricados e vendidos a clientes com muitos recursos financeiros e com uma equipe técnica altamente capacitada para operar a máquina. Um procedimento comum de entrada de dados nestes computadores incluía a presença de um cartão perfurado que continha o tempo máximo de processamento para aquela tarefa e o nome do programador. Após a leitura destes dados iniciais, um outro cartão perfurado transmitia ao computador o comando para carregar o compilador FORTRAN a partir da fita magnética do sistema, e o programa a ser compilado era também carregado para o computador. Por fim, um cartão com o comando de execução do programa era carregado e só então a tarefa terminava. Por primitivo que possa parecer, este procedimento realizado por cartões foi o precursor das linguagens de controle de tarefas e dos interpretadores de comando modernos, bases para os nossos Sistemas Operacionais. Completam Tanenbaum e Bos (2016) que os grandes computadores de segunda geração eram usados na maior parte para cálculos científicos e comumente programados FORTRAN. Os Sistemas Operacionais mais comuns eram o FMS (Fortran Monitor System) e o IBSYS, da IBM. Terceira Geração (1965 a 1980): a possibilidade de se implementar a multiprogramação foi uma das características mais importantes desta geração. Foi nessa época também que os fabricantes resolveram criar famílias de computadores compatíveis com o trabalho científico e com processamento de dados e rotinas comerciais. Antes dessa tendência, os fabricantes costumavam manter linhas distintas e quase sempre incompatíveis entre sim. Com a intenção de permitir o funcionamento de programas de múltiplas naturezas, a IBM lançou um Sistema Operacional que deveria funcionar em toda as suas famílias de computadores, tanto os de pequeno porte quanto os de grande porte. Há que se registrar que, naquela época, essa premissa fez surgir um Sistema Operacional extremamente grande, complexo e cheio de bugs, batizado de OS/360. Apesar do tamanho enorme e dos problemas, o OS/360 e os Sistemas Operacionais de terceira geração similares proporcionaram um grau de satisfação relativamente bom para a maioria de seus clientes. Eles também popularizaram várias técnicas-chave ausentes nos sistemas operacionais de segunda geração. Talvez a mais importante SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 10 dessas técnicas tenha sido a multiprogramação (TANENBAUM, BOS, 2016). Foi pela multiprogramação que os projetistas da época conseguiram minimizar o tempo de espera ociosa entre os procedimentos de entrada e de processamento próprios de um programa. A implementação desta solução veio com a divisão da memória em várias partes, cada uma responsável por armazenar uma tarefa distinta, conforme exibido na figura 2. Figura 2: Um sistema de multiprogramação com três tarefas na memória Fonte: (TANENBAUM; BOS, 2016, p.8) Enquanto uma tarefa aguardava pela finalização do processo de entrada ou saída, outra tarefa poderia fazer uso da CPU o que tornava sua ocupação muito mais otimizada. Outra evolução importante foi a possibilidade de se transferir tarefas contidas em cartões perfurados para discos rígidos, o que, por sua vez, facilitada a transferência da tarefa para a partição de memória disponível. Oliveira (2010) contribui com essa discussão ao afirmar que o surgimento dos discos magnéticos foi, de fato, muito importante para a viabilização do conceito da multiprogramação. Segundo o autor, a velocidade de resposta do meio magnético favoreceu a diminuição do tempo para a realização de operações de entrada e saída, diminuindo assim o tempo ocioso dos processadores. Como consequência natural da evolução dos meios de fabricação dos computadores, era natural esperar que eles também tivessem seu tamanho e complexidade estrutura diminuídos. Foi assim que a família PDP, formadas por minicomputadores, tornou-se um absoluto sucesso de vendas desta terceira geração. SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 11 ANOTE ISSO Foi em um computador PDP-7 que o Cientista da Computação Ken Thompson desenvolveuuma versão do Sistema Operacional MULTICS para um único usuário. Mais tarde, essa versão foi aprimorada e então batizada como UNIX. Quarta Geração (1980 a 1990): esta geração é marcada pelo surgimento dos computadores pessoais, em grande parte impulsionado pelo extraordinário progresso obtido nos processos de miniaturização dos circuitos integrados. A possibilidade de que um usuário comum pudesse ter um computador em casa era algo impensável em gerações anteriores. Antes, porém, que os computadores pessoais invadissem a casa das pessoas, muita criação e evolução foram aplicadas nos Sistemas Operacionais. O lançamento do processador 8080, da Intel, deu oportunidade para que o primeiro microcomputador com um disco fosse produzido. Neste cenário, era natural que um novo Sistema Operacional tivesse que ser criado e assim surgiu o CP/M (Control Program for Microcomputers ou programa de controle para microcomputadores). O contexto de negócios que se originou da criação do CP/M foi bastante curioso, para dizer o mínimo, e é assim contada por Tanenbaum e Bos (2016): no início da década de 1980, a IBM projetou o IBM PC e, por causa da necessidade de encontrar um software para ser executado nele, seu pessoal contatou Bill Gates, na esperança de que ele pudesse indicar um sistema operacional para ser executado no PC. Gates, então, sugeriu que a IBM contatasse a Digital Research, então a empresa de Sistemas Operacionais dominante e proprietária do CP/M. Ocorre que os dirigentes da Digital Research se recusaram a receber a IBM, e novamente Bill Gates foi acionado. Quando a IBM voltou Gates lembrou-se que um fabricante de computadores local, a Seattle Computer Products tinha um Sistema Operacional adequado, o DOS (Disk Operating System ou Sistema Operacional de Disco). Ele os procurou e pediu para comprar o DOS e, por US$ 75.000, iniciou a história de maior sucesso da Computação. Quinta Geração (1990 até o presente): esta geração incorpora toda a evolução das anteriores e é fortemente caracterizada pelos dispositivos móveis. A incorporação de um Sistema Operacional nestes dispositivos (junto com os aplicativos adequados) foi o que possibilitou que usássemos nosso telefone para enviar e receber e-mails e mensagens instantâneas, além de encontrarmos o melhor caminho entre dois pontos SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 12 e, claro, acessarmos nossas redes sociais. Empresas como a Apple, Samsung e Windows (este último por um período curto) desenvolveram ou aprimoraram Sistemas Operacionais para seus dispositivos e os tornaram um absoluto sucesso de vendas. Bem, este foi o conteúdo que queríamos compartilhar com você neste nosso primeiro encontro. Desejamos que este tenha sido um bom início em sua caminhada para se tornar uma verdadeira referência em Sistemas Operacionais. Não se esqueça de aprimorar seus conhecimentos com leituras de fontes diversas em com o zelo nas atividades que se seguirão. Obrigado e até a próxima! SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 13 AULA 2 TIPOS DE SISTEMAS OPERACIONAIS Olá! Seja bem-vinda e seja bem-vindo ao nosso segundo encontro! Conforme abordamos na primeira aula, Sistemas Operacionais são artefatos sofisticados de software construídos para exercer gerenciamento do hardware e estabelecer uma conexão amigável entre ele e os programas criados para os usuários finais. Dada a variedade de tipos e perfis de aplicações com as quais um Sistema Operacional lida é natural imaginarmos que existam também tipos distintos destes sistemas, a fim de que sejam contempladas as mais diversas finalidades de uso. Por isso, nesta segunda aula trataremos dos tipos de Sistemas Operacionais, considerando as mais diversas plataformas de hardware e a variedade de aplicações que deles se utilizarão. O Sistema Operacional que gerencia um servidor, por exemplo, deve oferecer ao administrador recursos diferentes daqueles disponíveis em um sistema de computador pessoal. Da mesma forma, um Sistema Operacional sendo executado em um televisor moderno será diferente daquele que se presta a gerenciar um sistema de tempo real. Sigamos adiante e bons estudos! 2.1 Classificação dos Sistemas Operacionais O principal objetivo a ser alcançado neste estudo é a familiarização com os diversos tipos de Sistemas Operacionais, com suas especificidades e com os aspectos diferenciais entre eles. Nossa primeira abordagem investigará as características dos Sistemas Operacionais para computadores de grande porte, situado no topo da hierarquia da capacidade de processamento entre todas as máquinas que aqui serão mencionadas. SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 14 2.1.1 Sistemas Operacionais para Computadores de Grande Porte Imagine uma instituição bancária com 100 milhões de clientes. Agora imagine o aparato computacional que este banco deve possuir para fornecer serviços de qualidade a todos eles! Tanto no caso dos bancos, como no caso de uma operadora de telefonia celular ou de um órgão federal, os computadores que dão suporte às operações destas instituições devem ser de grande porte e com recursos extraordinários de entrada e saída. Certamente o Sistema Operacional que suporta tais máquinas deve ser capaz de controlar o processamento simultâneo de muitas tarefas e de dar conta da alta carga de transações de entrada e de saída de dados. Segundo Tanenbaum e Bos (2016), estes sistemas oferecem geralmente três tipos de serviços: em lote (batch), processamento de transações e tempo compartilhado (timesharing). Embora o detalhamento destes serviços não seja parte do nosso objetivo aqui, vale uma rápida apresentação de cada um. O suporte ao processamento em lote ocupa-se das tarefas rotineiras sem qualquer interação de usuário e seu funcionamento se baseia no enfileiramento de tarefas dispostas em lotes (daí o termo batch), que serão executadas uma após outra. Um exemplo típico de uso do batch está relacionado ao processamento das transações bancárias. Ainda conforme a lição de Tanenbaum e Bos (2016), os sistemas de processamento de transações lidam com grandes números operações comerciais ou que envolvem baixa complexidade computacional, por exemplo, de forma muito rápida e eficiente. Já o sistema de tempo compartilhado permite que múltiplos usuários remotos executem tarefas no computador ao mesmo tempo, como na realização de consultas a um grande banco de dados. Os Sistemas Operacionais que atendem a computadores de grande porte atuais são capazes de executar todos estes tipos de processamentos de forma eficiente. Um exemplo de sistema operacional de computadores de grande porte é o OS/390, uma derivação do OS/360. 2.1.2 Sistemas Operacionais para Servidores Antes de tratarmos especificamente deste tipo de Sistema Operacional, vale o resgate dos conceitos relacionados a servidores: trata-se de um computador dotado de hardware com alto poder de processamento e adequado para centralizar o armazenamento de dados e de aplicações, de modo que possa distribui-los aos seus SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 15 clientes da rede. O conceito de servidor pode se estender também para serviços de impressão: por meio de uma aplicação específica sendo executada em um hardware servidor é possível controlar todas as tarefas de impressão originadas das estações da rede. Além disso, servidores podem fornecer serviços de arquivo ou de acesso à internet. Um Sistema Operacional projetado para servidores tem a capacidade de servir a múltiplos usuários ao mesmo tempo, possibilitando, inclusive, que estes usuários compartilhem recursos de hardware e de software. Sistemas operacionais típicos de servidores são Solaris, FreeBSD, Linux e Windows Server 201x (TANENBAUM; BOS, 2016). E quais seriam os Sistemas Operacionais próprios para servidores maisutilizados em todo o mundo? O site statista.com, uma grande plataforma de dados de negócios, nos oferece levantamento que responde a esta questão. Ao apresentar três conjuntos de dados, a figura 3 exibe o market share (ou a fatia de mercado) de cada um dos mais importantes Sistemas Operacionais entre os anos de 2018 e 2019. Figura 3: Divisão de mercado de Sistemas Operacionais para servidores. Fonte: https://www.statista.com/statistics/915085/global-server-share-by-os/ Como se pode observar, o Windows detém larga vantagem na liderança, seguido de longe pelo Linux. O OS/390, classificado como um Sistema Operacional para computadores de grande porte, também aparece na lista, com uma fatia em torno de 2%. SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 16 2.1.3 Sistemas Operacionais para multiprocessadores Em certo dia, um projetista de hardware pensou: “E se colocássemos para trabalhar em conjunto dois ou mais processadores?”. Uma vez viabilizada a ideia, surgiram os computadores com várias unidades de processamento em um único hardware. Com isso, seria natural que o Sistema Operacional tivesse que ser adaptado para esta nova realidade. Segundo Tanenbaum e Bos (2016), computadores com vários processadores precisam de Sistemas Operacionais especiais. No entanto, muitas vezes eles são variações dos Sistemas Operacionais de servidores, com aspectos especiais para comunicação, conectividade e consistência. Embora os efeitos benéficos da presença de múltiplos processadores tenham sido mais perceptíveis de início nos servidores, logo a tendência se espalhou para computadores pessoais e os Sistemas Operacionais destas máquinas também passaram a dar suporte a essa tecnologia. No momento em que lê este texto em seu computador é possível que você esteja também escutando uma música ou, quem sabe, aguardando a chegada de uma mensagem importante por e-mail. A execução simultânea de várias tarefas é possível graças também ao Sistema Operacional do seu computador, seja ele Windows, Linux ou MacOs. Parece bem lógico que dois ou mais processadores são capazes de obter um desempenho melhor do que apenas um, consideradas as similaridades técnicas entre eles. No entanto, a lista de benefícios vai além: sistemas multiprocessados tendem a ser mais confiáveis, já que a falha em um dos processadores não levaria o sistema todo ao colapso. Como consequência desta característica, será perceptível o aumento da disponibilidade. Por fim, sempre haverá a possibilidade de se aumentar a quantidade de processadores no caso de se desejar aumentar o desempenho do sistema. Com isso, evita-se a troca de um equipamento por outro de maior desempenho. 2.1.4 Sistemas Operacionais embarcados Não é de hoje que dispositivos que guardamos na cozinha, na sala ou na garagem de nossas casas são dotados de capacidade de processamento. E se o seu forno de micro-ondas, sua TV e seu carro são capazes de processar dados, isso se dá em boa medida por causa do Sistema Operacional que dá suporte a eles. Neste cenário, algumas características devem ser mencionadas. Em primeiro lugar, estes SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 17 dispositivos citados não costumam aceitar programas instalados pelo usuário. Ensinam Tanenbaum e Bos (2016) que a principal propriedade que distingue sistemas embarcados dos portáteis é a certeza de que nenhum software não confiável vá ser executado nele um dia. Não é possível para um usuário comum, por exemplo, atualizar o aplicativo do forno de micro-ondas, pois todo o software está na ROM (Read-Only Memory). Essa característica leva à simplificação do projeto, já que não há necessidade de se prever mecanismos de proteção para o software. 2.1.5 Sistemas Operacionais de nós sensores (sensor-node) Este tipo de Sistema Operacional reúne características de sistemas embarcados e sistemas de uso geral e os dispositivos por eles servidos são geralmente são pequenos computadores que se comunicam entre si e com uma estação-base usando comunicação sem fio. Por causa da sua utilização em locais possivelmente sem alimentação elétrica e com condições climáticas adversas, esses dispositivos devem usar pouca energia e serem resistentes às condições ambientais. De acordo com Tanenbaum e Bos (2016), redes de sensores são usadas para proteger os perímetros de prédios, guardar fronteiras nacionais, detectar incêndios em florestas, medir a temperatura e a precipitação para a previsão de tempo e muito mais. Um dos Sistemas Operacionais mais utilizados para dispositivos que requerem baixo consumo de energia e se comunicam sem a utilização de fios (incluídos os nós sensores) é o TinyOS. Segundo Han et. al. (2005), no TinyOS os componentes reutilizáveis implementam serviços comuns, mas cada nó executa uma única imagem de sistema vinculada estaticamente, tornando difícil executar vários aplicativos ou atualizar aplicativos de forma incremental. Este Sistema Operacional foi escrito usando em NesC, uma linguagem orientada a eventos. Bem, o critério de separação de tipos de Sistemas Operacionais que acabamos utilizar está relacionado a algumas variedades de plataformas de hardware em que esses sistemas são executados. No entanto, há outro tipo de classificação muito comum, e que leva em consideração a quantidade de atendimentos simultâneos a usuários e a tarefas, mais do que o ambiente de hardware em que o sistema é executado. Neste tipo de classificação é comum que os Sistemas Operacionais SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 18 em Batch apareçam como o primeiro tipo, seguido pelos Sistemas que suportam multiprogramação. Depois, a classificação apresenta os sistemas multitarefa, os sistemas multiprocessados e, por fim, os Sistemas Operacionais de tempo real. Como observação final vale pontuar que, ao procurar por tipos de sistemas na web, você poderá encontrar uma terceira classificação, com menção aos seus respectivos desenvolvedores, como Windows, Linux, Unix, Android e Apple, entre outros. De qualquer maneira, o conhecimento de todas essas classificações ajudará você tomar a decisão correta quando for chamado a escolher por um tipo ou por um desenvolvedor, com base nas características e funcionalidade de cada um. Este, portanto, era o conteúdo que queríamos compartilhar com você. Bom estudo e até a próxima. SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 19 AULA 3 GERENCIAMENTO DE PROCESSOS Uma abordagem adequada de Sistemas Operacionais deve resgatar conceitos elementares sempre que precisar introduzir um novo tema que a eles esteja relacionado. Neste nosso encontro trataremos do gerenciamento de processos e, antes de nos aprofundarmos neste assunto, vale a pena voltarmos nosso foco novamente para o que estudamos em nossa primeira aula. Com isso, estaremos preparados para trilharmos novos caminhos rumo à excelência em Sistemas Operacionais. Sigamos adiante, pois! 3.1 Processos De maneira didática e objetiva, Flynn e Mchoes (2002) nos ensinam que o sistema operacional é uma espécie de gerente executivo que administra todos os componentes de hardware e software de um sistema de computador. Usando termos mais específicos, ele controla cada arquivo, dispositivo, seção de memória principal e tempo de processamento. O sistema operacional controla quem pode utilizar o sistema e de que maneira. Resumindo, ele é o chefe! Já Deitel et al. (2005), usando abordagem mais técnica, conceituam Sistema Operacional como um software que habilita as aplicações a interagir com o hardware de um computador. Em alto nível de abstração, os autores descrevem assim seu funcionamento: um usuário requisita ao computador que realize uma ação (imprimir um documento ou tocar uma música, por exemplo), e o sistema operacional gerencia o software e o hardware necessários para que o resultadodesejado seja produzido. Os sistemas operacionais são compostos por partes distintas e, por ora, seus componentes centrais são objetos de nosso interesse. De acordo com Deitel (2005), alguns dos componentes centrais de um sistema operacional incluem: • Gerenciador de entrada e saída: componente que atende às solicitações de E/S de e para os dispositivos de hardware. • Gerenciador de memória: ele determina quando e como a memória será alocada aos processos. SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 20 • Escalonador de processo: componente que determina quando e por quanto tempo um processo será executado no processador da máquina. Pois bem, são justamente os processos os objetos do nosso interesse agora. O que são? Como são criados? Eles duram para sempre? Que estados podem assumir? Antes de respondermos a estas questões, vale investirmos alguns parágrafos na definição de thread, como parte integrante do conteúdo aqui desenvolvido. De fato, os processos são fundamentais para que a concorrência seja possível nas aplicações. De acordo com MACHADO e MAIA (2013), os sistemas operacionais utilizam três maneiras diferentes para implementá-la: processos independentes, subprocessos e threads. Embora importantes, as duas últimas maneiras não serão tratadas aqui, mas faremos uma breve menção aos threads. Da mesma forma que os processos, eles também assumem estados diferentes entre seu ciclo de vida e são essenciais para a execução paralela de rotinas em aplicações de usuários. Além disso, eles se distinguem dos processos tradicionais pelo modo como os espaços de endereçamento são alocados. Em encontros futuros trataremos dos threads com maior detalhamento. Feitas essas considerações, passamos da criação, finalização e estados de um processo. 3.1.1 Criação e finalização de um processo É provável que você já tenha se deparado com algumas expressões que fizeram menção ao conceito de processo. “Controle de um programa em execução” e “atividade assíncrona” talvez tenham sido as mais comuns. Embora não estejam incorretas, estas definições carecem de um complemento, de um “algo a mais” para se tornarem compreensíveis em si. A primeira definição que Deitel et al. (2005) dão para processo é a de uma entidade que possui seu próprio espaço de endereço, que normalmente consiste em uma porção de texto, uma de dados e outra de pilha. A porção de texto armazena o código que o processador executa. A porção dos dados armazena variáveis que o processo usa durante a execução. A porção de pilha – completam os autores – armazena instruções e variáveis locais a para chamadas ao procedimento. A segunda é a de um programa em execução. Uma das principais funções do sistema operacional é fazer a gerência dos processos (MACHADO; MAIA, 2013) e parte fundamental dessa tarefa é controlar o ciclo de execução de um processo. Ele começa quando o processador busca a instrução que está na memória para ser executada, armazena-a no registrador de instruções, SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 21 decodifica seus bits e, enfim, executa a instrução. No entanto, o ciclo de execução das instruções não distingue de qual programa ela se origina, fato que gera duas situações: (i) como normalmente haverá mais de um programa para ser executado, o acesso de suas instruções ao processador causará concorrência entre elas e (ii) o sistema operacional será o responsável por controlar a alternância da execução das instruções no processador. Assim, conforme sustentam Machado e Maia (2013), o conceito de processo torna- se essencial para que os sistemas multiprogramáveis implementem a concorrência provocada por diversos programas. Segundo os autores, um processo é formado por três partes: software, hardware e endereçamento. A figura 4 ilustra a ideia. Figura 4: estrutura de um processo Fonte: adaptado de (MACHADO; MAIA, 2013) ISTO ESTÁ NA REDE Um bom vídeo relacionado ao assunto de processos pode ser encontrado em https://www.youtube.com/watch?v=JmNxFf_96xY (Acesso em: 19 jun. 2021). Nele o autor trata do conceito de processo e simula a alternância entre quatro processos sequenciais, com abordagem do que ocorre na memória e na CPU. Como já conhecemos o conceito de processos, além do tratamento que o sistema operacional deve dispensar a ele e dos contextos em que são inseridos, devemos SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 22 tratar agora pontualmente de sua criação e finalização. De acordo com Machado e Maia (2013), um processo é criado a partir da inclusão de um novo bloco de controle do processo (Process Control Block – PCB) em sua própria estrutura e da alocação de espaço de endereçamento de memória. Neste instante, o sistema operacional já reconhece o processo e pode gerenciá-lo. Depois que assume vários estados (trataremos deles na sequência) e passa pela execução, um processo é finalizado. A finalização se dá quando todos os recursos associados ao processo são desalocados e o PCB é eliminado pelo Sistema Operacional. 3.1.2 Estados de um processo Conforme citado, um processo passa por diferentes estados ao longo do seu processamento (MACHADO; MAIA, 2013). Quando chega a vez de um processo ser remetido à CPU, diz-se que ele fez uma transição de estado, passando de pronto para o estado de execução. O terceiro estado que um processo pode assumir é o de espera, que se efetiva quando o prosseguimento do processamento depende de algum evento externo ou da disponibilização de algum recurso. As mudanças de estado de um processo são mostradas na figura 5. Figura 5: mudanças de estado de um processo. Fonte: adaptado de (MACHADO; MAIA, 2013) SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 23 A melhor maneira de entendermos os processos é colocando-os em perspectiva prática e inserindo-os no contexto da multiprogramação. Imagine-se como um usuário que escolhe um programa para converter em outro formato um vídeo longo e gravado em alta definição. Enquanto este programa é executado, você resolve navegar na web e, em algum momento, seu programa de e-mail desperta um processo em segundo plano verificar a chegada de mensagens na caixa de entrada. Assim, podemos identificar três processos em atividade: o editor de vídeo, o navegador e o programa de e-mail. Os Sistemas Operacionais que usamos em computadores pessoais e/ou servidores mantêm as informações sobre processos em uma tabela mantida pelo próprio sistema. Nesta tabela – chamada Tabela de Processos – fica armazenado, entre outros dados, o conteúdo do espaço de endereçamento do processo. Tanenbaum e Bos (2016) ensinam que as principais chamadas de sistema de gerenciamento de processos são as que lidam com a criação e o término de processos. Por exemplo, o processo do shell (ou interpretador de comandos) do sistema recebe uma requisição do usuário para que um programa seja compilado. Ele (o shell) cria um processo para executar o compilador e, ao término da compilação, ele próprio executa uma chamada de sistema para finalizar a si próprio. Este foi o conteúdo que queríamos compartilhar com você. Para que a abordagem deste tema não pare por aqui, não deixe de ler nas referências bibliográficas indicadas o conteúdo que abordamos no texto. Bom estudo! SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 24 AULA 4 GERENCIAMENTO DE MEMÓRIA Olá! Aqui estamos para mais uma aula de Sistemas Operacionais. Em nosso último encontro tratamos dos processos e os posicionamos como uma parte elementar de um programa em execução. Descobrimos também que o Sistema Operacional mantém informações de espaço de endereço, dados do programa e o estado em que se encontra o processo guardadas em uma tabela de processo. Como cada processo concorre com outro processo para execução, é necessário que seja implementadoum eficiente gerenciamento da memória ocupada pelos processos, a fim de que o máximo desempenho seja alcançado com a máxima segurança. É por isso que neste encontro estudaremos juntos os meios usados pelo Sistema Operacional para gerenciar a memória principal da máquina. Vamos nessa? 4.1 Introdução O gerenciamento de memória é a funcionalidade de um sistema operacional que manipula ou gerencia a memória primária e move os processos entre a memória principal e o disco durante a execução de um programa. O gerenciamento de memória mantém o controle de cada local de memória, independentemente de estar alocado para algum processo ou de estar livre. Ele verifica quanta memória deve ser alocada aos processos e decide qual processo obterá memória em que momento. Além disso, o gerenciamento de memória é capaz de identificar quando uma parte da memória é liberada ou não está alocada e, instantaneamente, atualiza o status daquela porção de memória. Na sequência, trataremos de elementos que compõem esse gerenciamento. 4.2 Espaço de Endereçamento O tema que abordaremos nesta seção está relacionado à organização dos processos na memória do computador. Um sistema computacional usa sua RAM (Random Access Memory) para armazenar, de forma temporária, os programas em execução na máquina. Considerando que vários programas estarão em execução de forma simultânea, algum tipo de organização desses programas na memória deve ser implementado. Usando termos mais próximos da realidade dos processos, este SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 25 mecanismo está relacionado ao gerenciamento de espaços de endereçamento dos processos. Conforme Tanenbaum e Bos (2016), cada processo tem geralmente algum conjunto de endereços que ele pode usar, tipicamente indo de 0 até algum máximo previamente definido. Quando um processo precisa ocupar a memória, algumas situações podem ocorrer. Na situação mais simples, a quantidade máxima de espaço de endereços que um processo tem é menor do que o espaço disponível na memória da máquina. Quando isso acontece, o processo poderá ocupar todo o espaço que necessita e não será necessária nova alocação. No entanto, nos computadores atuais os endereços são de 32 ou de 64 bits, o que implica em um espaço de endereçamento de 232 e 264, respectivamente. Com este cenário, uma pergunta em especial se coloca na frente das outras: qual a providência tomada pelo Sistema Operacional para resolver o caso de um processo que tem mais espaço de endereçamento do que o computador tem de memória principal? A resposta, dada por Tanenbaum e Bos (2016), inclui o conceito de memória virtual, técnica por meio da qual o sistema operacional mantém parte do espaço de endereçamento na memória principal e parte no disco, enviando trechos entre um e outro conforme a necessidade. Para implementar essa técnica, o Sistema Operacional cria a abstração de um espaço de endereçamento como o conjunto de endereços ao qual um processo pode se referir. O espaço de endereçamento é desacoplado da memória física da máquina e pode ser maior ou menor do que a memória física. O sistema operacional se encarrega de mapear os endereços lógicos para endereços físicos no momento da alocação de memória para o programa. Existem três tipos de endereços usados em um programa antes e depois de a memória ser alocada. A Tabela 1 dá nome e sintetiza estes tipos de endereços. Nome Descrição Endereços simbólicos Trata-se dos endereços usados em um código-fonte. Os nomes de variáveis, constantes e rótulos de instrução são os elemen- tos básicos do espaço de endereço simbólico. Endereços relativos Em tempo de compilação, o compilador converte endereços simbólicos em endereços relativos. Endereços físicos O processo de carregamento gera estes endereços quando um programa é carregado na memória principal da máquina. Tabela 1 – Tipos de endereços de memória e suas descrições Fonte: Tutorials Point (s.a.) SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 26 Os endereços virtuais e físicos são os mesmos em esquemas de vinculação de endereços em tempo de compilação e tempo de carregamento. Os endereços virtuais e físicos diferem no esquema de vinculação de endereço em tempo de execução. O conjunto de todos os endereços lógicos gerados por um programa é conhecido como espaço de endereço lógico. O conjunto de todos os endereços físicos correspondentes a esses endereços lógicos é conhecido como espaço de endereço físico. O mapeamento de tempo de execução do endereço virtual para o físico é feito pela unidade de gerenciamento de memória (MMU), que é um dispositivo de hardware. A MMU usa o seguinte mecanismo para converter o endereço virtual em endereço físico. O valor no registro base é adicionado a cada endereço gerado por um processo do usuário, que é tratado como deslocamento quando é enviado para a memória. Por exemplo, se o valor do registro base for 10000, uma tentativa do usuário de usar a localização de endereço 100 será realocada dinamicamente para a localização 10100. O programa do usuário lida com endereços virtuais; ele nunca vê os endereços físicos reais (TUTORIALS POINT, s. a.). 4.3 Carregamento estático e dinâmico A escolha entre Carregamento Estático ou Dinâmico deve ser feita no momento do desenvolvimento do programa de computador. Se você tiver que carregar seu programa estaticamente, então, no momento da compilação, os programas completos serão compilados e vinculados sem deixar nenhum programa externo ou dependência de módulo. O vinculador combina o programa de objeto com outros módulos de objeto necessários em um programa absoluto, que também inclui endereços lógicos. Se você estiver escrevendo um programa carregado dinamicamente, então seu compilador irá compilar o programa e para todos os módulos que você deseja incluir dinamicamente, apenas referências serão fornecidas e o resto do trabalho será feito no momento da execução. No momento do carregamento, com o carregamento estático, o programa absoluto (e os dados) são carregados na memória para que a execução comece. Se você estiver usando o carregamento dinâmico, as rotinas dinâmicas da biblioteca serão armazenadas em um disco de forma realocável e carregadas na memória apenas quando forem necessárias para o programa. 4.4 Swapping O swapping – cuja tradução deve ser entendida como troca - é um mecanismo SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 27 no qual um processo pode ser movido temporariamente da memória principal para o armazenamento secundário (disco) e disponibilizar essa memória para outros processos. Mais tarde, o sistema volta o processo do armazenamento secundário para a memória principal. Embora o desempenho geralmente seja afetado pelo processo de swapping, ele ajuda a executar quantidades maiores de processos em paralelo e essa é a razão pela qual este mecanismo também é conhecido como uma técnica de compactação de memória. A figura 6 ilustra a ideia. Figura 6: Exemplo de aplicação da técnica de Swapping Fonte: adaptado de Tutorials Point (s. a.). O tempo total gasto pelo processo de swapping inclui o tempo que leva para mover todo o processo para a memória secundária e, em seguida, para copiar o processo de volta para a memória principal. Vamos supor que o processo do usuário tenha 2048 SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 28 KB e um disco rígido padrão onde a troca ocorrerá tenha uma taxa de transferência de dados em torno de 1 MB por segundo. A transferência real do processo de 1000K para ou da memória levará: 2048 KB / 1024 KB por segundo = 2 segundos = 2.000 milissegundos Assim, considerando o tempo de entrada e saída serão necessários 4.000 milissegundos completos para a conclusão da operação. 4.5 Alocação de Memória A memória principal geralmente tem duas partições: Memória baixa (LowMemory): o Sistema Operacional reside nesta memória. Memória alta (High Memory): os processos do usuário são mantidos nesta partição. O sistema operacional usa o seguinte mecanismo de alocação de memória. Alocação de partição única: neste tipo de alocação, o esquema de registro de relocação é usado para proteger os processos do usuário uns dos outros e de alterar o código e os dados do sistema operacional. O registro de relocação contém o valor do menor endereço físico, enquanto o registro de limite contém o intervalo de endereços lógicos. Cada endereço lógico deve ser menor que o registro de limite. Alocação de múltiplas partições: neste tipo de alocação, a memória principal é dividida em várias partições de tamanho fixo, onde cada partição deve conter apenas um processo. Quando uma partição está livre, um processo é selecionado da fila de entrada e carregado na partição livre. Quando o processo termina, a partição fica disponível para outro processo. 4.6 Fragmentação Conforme os processos são carregados e removidos da memória, o espaço livre da memória é dividido em pequenos pedaços. Às vezes acontece que os processos não podem ser alocados aos blocos de memória, considerando seu pequeno tamanho, e os blocos de memória permanecem sem uso. Esse problema é conhecido como fragmentação. A fragmentação ocorre de duas maneiras: SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 29 Fragmentação externa: o espaço total da memória é suficiente para satisfazer uma solicitação ou para residir um processo nela, mas não é contíguo, portanto, não pode ser usado. Fragmentação interna: o bloco de memória atribuído ao processo é maior. Parte da memória é deixada sem uso, pois não pode ser usada por outro processo. As figuras 7a e 7b ilustram como a fragmentação pode causar desperdício de memória e uma técnica de compactação pode ser usada para criar mais memória livre a partir da memória fragmentada. Figura 7a: Memória fragmentada antes da compactação Fonte: adaptado de Tutorials Point (s. a.) Figura 7b: Aspecto da memória após a compactação Fonte: adaptado de Tutorials Point (s. a.) A fragmentação externa pode ser reduzida pela compactação do conteúdo da memória para colocar toda a memória livre em um grande bloco. Para viabilizar a compactação, a realocação deve ser dinâmica. Já a fragmentação interna pode ser reduzida atribuindo efetivamente a menor partição, mas grande o suficiente para o processo. 4.6 Paginação de Memória Um computador pode endereçar mais memória do que a quantidade fisicamente instalada no sistema. Essa memória extra é, na verdade, chamada de memória virtual e é uma seção de um disco rígido que é configurado para emular a RAM do computador. A técnica de paginação desempenha um papel importante na implementação da memória virtual. Paginação é uma técnica de gerenciamento de memória na qual o espaço de SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 30 endereço do processo é dividido em blocos do mesmo tamanho chamados de páginas (o tamanho é a potência de 2, entre 512 bytes e 8192 bytes). O tamanho do processo é medido pelo número de páginas. Da mesma forma, a memória principal é dividida em pequenos blocos de memória (física) de tamanho fixo chamados frames e o tamanho de um frame é mantido igual ao de uma página para ter uma utilização ótima da memória principal e evitar fragmentação externa. Quando o sistema aloca um quadro para qualquer página, ele traduz esse endereço lógico em um endereço físico e cria uma entrada na tabela de páginas para ser usada durante a execução do programa. Quando um processo deve ser executado, suas páginas correspondentes são carregadas em qualquer quadro de memória disponível. Suponha que você tenha um programa de 8KB, mas sua memória possa acomodar apenas 5 KB em um determinado momento, então o conceito de paginação aparecerá. Quando um computador fica sem RAM, o Sistema Operacional move páginas ociosas ou indesejadas de memória para a memória secundária para liberar RAM para outros processos e trazê-los de volta quando necessário para o programa. Este processo continua durante toda a execução do programa: o Sistema Operacional continua removendo páginas ociosas da memória principal e as grava na memória secundária e as traz de volta quando exigido pelo programa. A paginação reduz a fragmentação externa, mas ainda sofre de fragmentação interna. Além disso, a paginação é simples de implementar e considerada uma técnica de gerenciamento de memória eficiente. Devido ao tamanho igual das páginas e frames, a troca torna-se muito fácil. Por fim, a tabela de páginas requer espaço de memória extra, portanto pode não ser boa para um sistema com pouca RAM. 4.7 Segmentação de Memória A segmentação é uma técnica de gerenciamento de memória na qual cada trabalho é dividido em vários segmentos de tamanhos diferentes, um para cada módulo que contém peças que executam funções relacionadas. Cada segmento é, na verdade, um espaço de endereço lógico diferente do programa. Quando um processo deve ser executado, sua segmentação correspondente é carregada na memória não contígua, embora cada segmento seja carregado em um bloco contíguo de memória disponível. O gerenciamento de memória de segmentação funciona de forma muito semelhante à paginação, mas aqui os segmentos são de comprimento variável, enquanto na paginação as páginas são de tamanho fixo. Um segmento de programa contém a SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 31 função principal do programa, funções de utilidade, estruturas de dados e assim por diante. O sistema operacional mantém uma tabela de mapa de segmento para cada processo e uma lista de blocos de memória livres junto com números de segmento, seu tamanho e localizações de memória correspondentes na memória principal. Para cada segmento, a tabela armazena o endereço inicial do segmento e o comprimento do segmento. Uma referência a um local de memória inclui um valor que identifica um segmento e um deslocamento. Este foi o conteúdo que queríamos compartilhar com você. Bons estudos e até a próxima! SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 32 AULA 5 GERENCIAMENTO DE ARQUIVOS Seja-bem-vinda e seja bem-vindo a mais um encontro de Sistemas Operacionais! Iniciamos aqui nossa quinta aula e, neste ponto, vale pena voltarmos brevemente nossa atenção para o que já foi abordado em nossos encontros anteriores. A aula 1 abordou conceitos fundamentais do tema e posicionou os Sistemas Operacionais como uma espécie de “gerente” de um sistema computacional. Na segunda aula foram colocados os tipos mais comuns de Sistemas Operacionais, utilizando o critério de classificação de hardware em que eles atuavam. Na sequência, os processos foram conceituados e seus estados foram apresentados. Por fim, tratamos de gerenciamento de memória e seus mecanismos em nosso último encontro. 5.1 Arquivos O tema que agora se apresenta está relacionado aos meios pelos quais um Sistema Operacional gerencia os arquivos e torna transparentes aos usuários as complexas operações que a eles se aplicam. Conforme pontuam Tanenbaum e Bos (2016), uma função importante do sistema operacional é esconder as peculiaridades dos discos e outros dispositivos de E/S e apresentar ao programador um modelo agradável e claro de arquivos que sejam independentes dos dispositivos. Um arquivo é uma coleção nomeada de informações relacionadas que são gravadas no armazenamento secundário, como os discos rígidos ou os SSD (Solid- State Drive ou Unidade de Estado Sólido). Em geral, um arquivo é uma sequência de bits, bytes, linhas ou registros cujo significado é definido pelo criador e usuário do arquivo (TUTORIALSPOINT, S. A.). A estrutura de arquivo deve estar de acordo com um formato necessário que o sistema operacional possa entender. Neste sentido,alguns pontos merecem destaque: um arquivo possui uma determinada estrutura definida de acordo com seu tipo. 5.2 Tipos de arquivos Neste sentido, é possível destacar três tipos de arquivos: • Um arquivo de texto é uma sequência de caracteres organizados em linhas. • Um arquivo-fonte é uma sequência de procedimentos e funções. SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 33 • Um arquivo-objeto é uma sequência de bytes organizados em blocos que são compreensíveis pela máquina. O tipo de arquivo refere-se à capacidade do sistema operacional de distinguir diferentes tipos de arquivo, como arquivos de texto, arquivos-fonte e arquivos binários, por exemplo. Muitos sistemas operacionais suportam muitos tipos de arquivos. Sistemas operacionais como MS-DOS e UNIX possuem os seguintes tipos de arquivos: Arquivos comuns: estes são os arquivos que contêm informações do usuário. Podem conter texto, bases de dados ou programa executável. O usuário pode aplicar várias operações em tais arquivos, como adicionar, modificar ou até mesmo remover o arquivo inteiro. Arquivos de diretório: estes arquivos contêm uma lista de nomes de arquivos e outras informações relacionadas a esses arquivos. Arquivos especiais: estes arquivos também são conhecidos como arquivos de dispositivo. Eles oferecem configuração a dispositivos físicos como discos, impressoras, redes e unidade de backup, entre outros. 5.3 Mecanismos de acesso a arquivos O mecanismo de acesso a arquivos refere-se à maneira como os registros de um arquivo podem ser acessados. Existem várias maneiras de acessar arquivos e algumas serão abordadas na sequência: Acesso sequencial: o acesso sequencial é aquele em que os registros são acessados em alguma sequência, ou seja, as informações do arquivo são processadas em ordem, um registro após o outro. Este método de acesso é o mais primitivo. Compiladores geralmente acessam arquivos desta maneira. Acesso direto ou aleatório: a organização dos arquivos em disco deve ser adequada para fornecer acesso aleatório, ou seja, com acesso direto ao registro desejado. Cada registro tem seu próprio endereço no arquivo, o que possibilita ser acessado diretamente para leitura ou escrita. Os registros não precisam estar em nenhuma sequência dentro do arquivo e não precisam estar em locais adjacentes na mídia de armazenamento. Acesso sequencial indexado: este mecanismo é construído com base no acesso sequencial e um índice é criado para cada arquivo que contém ponteiros para vários blocos. O índice é pesquisado sequencialmente e seu ponteiro é usado para acessar o arquivo diretamente. SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 34 5.4 Alocação de espaço Outra forma de enxergarmos os arquivos é na forma de espaços em disco alocados pelo Sistema Operacional. Eles (os Sistemas Operacionais) implementam três maneiras principais de alocar espaço em disco para arquivos: Alocação Contígua: neste tipo de alocação, cada arquivo ocupa um espaço de endereço contíguo no disco. O endereço de disco atribuído está em ordem linear e, embora sua implementação seja pouco complexa, a fragmentação externa é um grande problema com esse tipo de técnica de alocação. Alocação vinculada (linked allocation): neste caso, cada arquivo carrega uma lista de links para blocos de disco e um diretório guarda o link (ou ponteiro) para o primeiro bloco de um arquivo. Apenas de não provocar fragmentação externa, essa modalidade de alocação apresenta-se ineficiente em caso de arquivo de acesso direto. Alocação Indexada: o terceiro modo de alocação fornece soluções para problemas de alocação contígua e vinculada, por meio da utilização de um bloco de índices que contêm todos os ponteiros para arquivos. Cada arquivo tem seu próprio bloco de índice que armazena os endereços do espaço em disco ocupado pelo arquivo e o diretório contém os endereços dos blocos de índice de arquivos. 5.4 Diretório O principal elemento – e possivelmente o mais conhecido entre os usuários – do gerenciamento de arquivos executado pelo Sistema Operacional é a organização de arquivos em diretórios. Para organizar e localizar arquivos de forma rápida e eficiente, sistemas de arquivos usam diretórios, que são arquivos que contém os nomes e as localizações de outros arquivos do sistema de arquivos. Diferentemente de outros arquivos, um diretório não armazena dados de usuários. ISTO ESTÁ NA REDE Neste vídeo de pouco mais de 23 minutos é possível ter contato com uma abordagem interessante de sistemas de arquivos mantidos pelos Sistemas Operacionais. Assista ao vídeo disponível em: https://www.youtube.com/ watch?v=PKox6AlVTT8. Acesso em: 23 jun. 2021. De acordo com Deitel (2005), a organização mais simples de sistemas de arquivo consiste em uma estrutura de diretório de um único nível, o que faz com que todos os https://www.youtube.com/watch?v=PKox6AlVTT8 https://www.youtube.com/watch?v=PKox6AlVTT8 SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 35 arquivos sejam armazenados em um único diretório. Esta característica torna essa estruturação bastante incomum, já que dois arquivos não poderiam ter o mesmo nome e a organização dos arquivos seria bastante precária. Um sistema de arquivo mais apropriado é aquele hierarquicamente organizado e que se inicia com um diretório- raiz e dele se estendem diversos outros subdiretórios. Um bom meio de abordar uma possível organização de diretório é fornecer exemplo relacionado ao meio acadêmico, conforme ilustrado na figura 8. Todo arquivo dentro de uma hierarquia de diretório pode ser identificado e encontrado por meio do seu nome de caminho a partir do topo da hierarquia do diretório, que é o diretório-raiz. Os nomes de caminho absolutos efetivam-se pela lista de diretórios que precisam ser percorridos a partir do diretório-raiz para se chegar ao arquivo, com uma barra separando cada elemento da hierarquia. A primeira barra indica que o caminho é absoluto, isto é, começando no diretório-raiz. Como nota, no Windows, o caractere barra invertida (\) é usado como o separador em vez do caractere da barra (/) por razões históricas, então o caminho do arquivo acima seria escrito como \Professores\ Prof.Brown\Cursos\CS101. Figura 8: Um sistema de arquivos para um departamento universitário Fonte: Tanenbaum e Bos (2016). SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 36 Conforme podemos observar na figura 8, as entradas de diretório podem ser de arquivos ou de outros diretórios, e a organização de arquivos e diretórios é baseada em uma estrutura hierárquica, conforme já mencionamos. Apenas para fins de comparação os processos também assumem uma organização hierárquica, mas a estrutura formada dificilmente apresenta mais do que três níveis e a hierarquia sempre tem um ciclo muito curto, de alguns poucos minutos, no máximo. Por sua vez, hierarquias de diretório podem existir por anos e apresentam condições ideais para a composição em muitos níveis. O entendimento de como um Sistema Operacional organiza os arquivos e a necessidade de tornar essa organização semelhante a uma árvore hierárquica é essencial para a compreensão dos nossos próximos assuntos, especialmente o gerenciamento de Entrada e Saída feito por um Sistema Operacional. Bons estudos e até a próxima! SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 37 AULA 6 GERENCIAMENTO DE ENTRADA E SAÍDA Ao mencionarmos entrada e saída no contexto dos Sistemas Operacionais, a expressão poderia se tornar vaga se não houvesse a devida especificação dos seus tipos. A fim de permitir que os usuários possam interagir com o sistema, os computadores implementam meios para que sejam informadas entradas e obtidas saídas através de dispositivos apropriados, incluindo teclados, monitores, impressoras e alguns outros. Como o gerenciamento destesdispositivos é de responsabilidade do Sistema Operacional, tornou-se necessária a implementação de um subsistema de E/S, que contêm softwares de uso geral entre vários dispositivos e outros que gerenciam dispositivos específicos. Sigamos adiante! 6.1 Software de Entrada e Saída O software de E/S é usado para interação com dispositivos de como mouse, teclado, dispositivos USB e impressoras, entre outros. Sua organização é feita como segue (TUTORIALSPOINT, s.a.): Bibliotecas de nível de usuário: fornecem uma interface simples para que o programa de usuário execute entradas e saídas. Se você estudou (ou está estudando) a linguagem C, sabe que a biblioteca stdio fornece recursos para entradas e saídas nesta linguagem e constitui, portanto, exemplo de biblioteca utilizada pelo usuário. Módulos de nível de kernel: fornece drivers de dispositivo para interagir com o controlador de dispositivo e módulos de E/S, independentes de dispositivo usados pelos drivers de dispositivo. Hardware: esta camada inclui hardware real e controlador de hardware que interage com os drivers de dispositivo e promove a possibilidade de interação com o hardware. Um conceito bastante importante no projeto de software de E/S é que ele deve ser independente do dispositivo, o que torna possível escrever programas que podem SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 38 acessar qualquer dispositivo de entrada e saída sem ter que especificar o dispositivo com antecedência. Por exemplo, um programa que lê um arquivo como entrada deve ser capaz de ler um arquivo em um disco rígido convencional ou em um SSD (Solid- State Drive ou Drive de Estado Sólido), sem que seja necessário modificar o programa para cada dispositivo diferente. A representação da organização do software de Entrada e Saída é ilustrada na figura 9. Figura 9: Representação da organização de um software de E/S Fonte: TUTORIALSPOINT (s. a.). Ainda no contexto dos elementos da figura 9, três deles devem ser detalhados, como segue: 6.1.1 Device Driver (Driver de dispositivo) Device Drivers (ou Drivers de Dispositivo) são módulos de software que podem ser conectados a um sistema operacional para lidar com um dispositivo específico. O sistema operacional recebe ajuda de drivers de dispositivo para lidar com todos os dispositivos de E/S. Os drivers de dispositivo encapsulam o código dependente do dispositivo e implementam uma interface padrão de tal forma que o código contém SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 39 leituras / gravações de registro específicas do dispositivo. O driver do dispositivo é geralmente escrito pelo fabricante do dispositivo e entregue junto com o dispositivo em um CD-ROM. Tipicamente, um device driver interage com o controlador do dispositivo para viabilizar entradas e saídas via dispositivo e para realizar o adequado tratamento de erros. Além disso, ele lida com requisições do dispositivo e o faz da seguinte maneira: suponha que uma solicitação venha a ler um bloco N. Se o driver estiver ocioso quando uma solicitação chega, ele começa a executá-la imediatamente. Caso o driver já estiver ocupado com alguma outra solicitação, ele coloca a nova solicitação na fila de solicitações pendentes. 6.1.2 Software independente de dispositivo A função básica do software independente de dispositivo é realizar as funções de entrada e saída que são comuns a todos os dispositivos e fornecer uma interface uniforme para o software em nível de usuário. Embora seja difícil escrever um software totalmente independente do dispositivo, podemos escrever alguns módulos que são comuns a todos eles. TutorialsPoint (s.a.) fornece uma lista de funções de software de E/S independente de dispositivo: - Estabelecimento de uma interface uniforme para drivers de dispositivo. - Padronização de nomenclatura de dispositivos por meio do estabelecimento de nomes mnemônicos mapeados para números de dispositivos principais e secundários. - Disponibilização de proteção ao dispositivo. - Fornecimento de um tamanho de bloco independente de dispositivo. - Oferecimento de uma memória temporária para os dispositivos (também chamada buffer), já que os dados que saem de um dispositivo não podem ser armazenados no destino. - Alocação de armazenamento em dispositivos de bloco. - Oferecimento de relatório comum de erros. 6.1.3 Bibliotecas de Usuário de Entrada e Saída Estas são as bibliotecas que fornecem uma interface mais rica, simplificada e interativa para acesso às funcionalidades dos drivers de dispositivo. A maior parte dos softwares de E/S de nível de usuário consiste em procedimentos de biblioteca, SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 40 com algumas exceções, como sistema de spool, que é uma maneira de lidar com dispositivos de E / S dedicados em um sistema de multiprogramação. Bibliotecas de entrada e saída (por exemplo, stdio) estão no espaço do usuário para fornecer uma interface para o software de E/S, independentemente de dispositivo. Por exemplo, putchar(), getchar(), printf() e scanf() são exemplos de biblioteca de E/S de nível de usuário stdio disponível em programação C e que não estão vinculadas a nenhuma marca ou configuração de periférico. 6.2 Hardware de entrada e saída Uma das tarefas mais importantes de um Sistema Operacional é a de gerenciar vários dispositivos de E/S, incluindo mouse, teclado, unidades de disco, adaptadores de vídeo, impressoras e dispositivos USB, entre outros. Um sistema de E/S é necessário para receber solicitações do aplicativo e enviá-la ao dispositivo físico. Em seguida, ele deve capturar qualquer resposta que vier do dispositivo e enviá-la para o aplicativo. Os dispositivos de entrada e saída podem ser divididos em duas categorias: Dispositivos de bloco: um dispositivo de bloco é aquele com o qual o driver se comunica enviando blocos inteiros de dados. Por exemplo, discos rígidos, câmeras e USB, entre outros. Dispositivos de caracteres: um dispositivo de caracteres é aquele com o qual o driver se comunica enviando e recebendo caracteres únicos (bytes, octetos). Por exemplo, portas seriais, portas paralelas, placas de som etc. 6.2.1 Controladores de dispositivo Controladores de dispositivo são módulos de software que podem ser conectados a um Sistema Operacional para lidar com um dispositivo específico. O sistema operacional recebe ajuda de drivers de dispositivo para lidar com todos os dispositivos de E/S. O Controlador de dispositivo funciona como uma interface entre um dispositivo e um driver de dispositivo. As unidades de E/S (teclado, mouse, impressora, por exemplo) geralmente consistem em um componente mecânico e um componente eletrônico, onde o componente eletrônico é chamado de controlador de dispositivo. Sempre há um controlador de dispositivo e um driver de dispositivo para cada dispositivo para se comunicar com os Sistemas Operacionais. Um controlador de dispositivo pode ser capaz de lidar com vários dispositivos. Como interface, sua SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 41 principal tarefa é converter o fluxo de bits serial em bloco de bytes, realizar a correção de erros conforme necessário. Qualquer dispositivo conectado ao computador é conectado por um plugue e soquete, e o soquete é conectado a um controlador de dispositivo. A figura 10 ilustra um modelo para conectar a CPU, memória, controladores e dispositivos de entrada e saída. Figura 10: Conexão entre dispositivos e seus controladores Fonte: TUTORIALSPOINT (s. a.) Embora a ilustração nos faça imaginar que a comunicação da CPU com os dispositivos seja simples, há alguma diversidade de abordagens que precisaram ser implementadas e que serão abordadas na sequência. O ponto central aqui é que a CPU deve ter uma maneira de passar informações para um dispositivo de entrada e saída. Instrução especial:esta abordagem usa instruções de CPU que são feitas especificamente para controlar dispositivos de entrada e saída. Essas instruções normalmente permitem que os dados sejam enviados a um dispositivo de E/S ou lidos de um dispositivo de E/S. Entrada e saída mapeada em memória: a abordagem de E/S mapeada em memória, o mesmo espaço de endereço é compartilhado entre a memória e os dispositivos de entrada e saída. O dispositivo é conectado diretamente a determinados locais da memória principal para que seja possível a ele transferir blocos de dados a partir da memória (ou para ela) sem passar pela CPU. Ao usar esta técnica, o sistema operacional aloca o buffer na memória e informa o dispositivo de entrada e saída para usá-lo ao enviar dados à CPU. O dispositivo de E/S SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 42 opera de forma assíncrona com a CPU, ocorrerá uma interrupção na CPU quando o processo estiver concluído. A vantagem desse método é que cada instrução que pode acessar a memória pode ser usada para manipular um dispositivo de entrada e saída, o que viabiliza seu uso na maioria dos dispositivos de alta velocidade, como discos e interfaces de comunicação. Direct Access Memory (DMA ou Acesso Direto à Memória): dispositivos lentos (como teclados, por exemplo) irão gerar uma interrupção na CPU após cada byte ser transferido. Se um dispositivo rápido, como um disco, gerasse uma interrupção para cada byte, o Sistema Operacional gastaria a maior parte do tempo tratando dessas interrupções. Portanto, um computador típico usa hardware de acesso direto à memória (DMA) para reduzir essa sobrecarga. O mecanismo de acesso direto à memória (DMA) implica que a CPU concede autoridade ao módulo de E/S para ler ou gravar na memória sem que ela (a CPU) participe do processo. O próprio módulo DMA controla a troca de dados entre a memória principal e o dispositivo. A CPU está envolvida apenas no início e no final da transferência e é interrompida apenas após a transferência do bloco inteiro. O acesso direto à memória precisa de um hardware especial denominado controlador DMA (DMAC) que gerencia as transferências de dados e controla o acesso ao barramento do sistema. Os controladores são programados com ponteiros de origem e de destino, ou seja, que apontam onde ler e onde gravar os dados, mais os contadores para rastrear o número de bytes transferidos. Este foi, portanto, o conteúdo a ser compartilhado. Mantenha-se firme nos estudos e até a próxima! SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 43 AULA 7 GERENCIAMENTO DE PROTEÇÃO E SEGURANÇA Vai longe o tempo em que desenvolver e implantar medidas de segurança aos computadores e seus dispositivos periféricos eram providências secundárias e restritas a atuação de alguns poucos profissionais. Com a crescente valorização de um ativo chamado informação, intensificaram-se os esforços para o aumento da segurança da CPU, memória principal, disco e programas. Como não poderia deixar de ser, o Sistema Operacional exerce importante função neste contexto. Seja bem-vinda e seja bem-vindo a este encontro em que trataremos dos meios e dos objetivos de segurança e proteção aplicados aos Sistemas Operacionais e das principais ameaças que podem comprometer a segurança de todo um sistema computacional. 7.1 Proteção Embora a necessidade de proteção direcionada a um sistema de computação possa parecer óbvia é conveniente investirmos tempo para investigarmos com mais detalhes algumas razões. A primeira – e mais imediata – é que preciso impedir a violação maldosa e intencional de uma restrição de acesso por um usuário. Como sabemos, nem todos os usuários atendidos por um Sistema Operacional podem ter acesso irrestrito aos recursos por ele oferecidos e uma violação dos limites impostos pode comprometer seriamente o sistema. Ocorre que a questão da proteção envolve um objetivo mais genérico, de elevada importância e que deve ser perseguido pelos projetistas: a garantia de que os programas executados no computador usem os recursos do sistema em estrito acordo com as políticas estabelecidas e este requisito é fundamental para um sistema confiável e, ainda neste sentido, medidas adequadas de proteção irão aumentar a confiabilidade geral do sistema ao detectarem eventuais erros nas interfaces dos subsistemas que também interagem neste contexto. Conforme nos ensinam Silberschatz, Baer e Gagne (2015), um recurso desprotegido não pode se defender contra a sua incorreta utilização por um usuário não autorizado. De forma oposta, um sistema orientado à proteção está preparado para diferenciar o uso autorizado do não autorizado e, neste contexto, vale diferenciarmos mecanismos de proteção de políticas de proteção: o papel da proteção em um sistema de computação é SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 44 fornecer um mecanismo para a imposição das políticas que governam o uso de recurso e que podem ser estabelecidas durante o projeto do sistema, ou pelos próprios usuários individuais, a fim de protegerem seus arquivos e programas. Completam os autores que a proteção não é uma preocupação apenas do projetista de um sistema operacional. O programador de aplicações também precisa usar mecanismos de proteção para proteger os recursos criados e suportados por um subsistema de aplicação contra a má utilização. As políticas podem (e devem) ser alteradas com o tempo e em função de determinadas situações e elas se diferem dos mecanismos de segurança nos seguintes termos: os mecanismos determinam como algo será feito; as políticas decidem o que será feito. Para que o entendimento do conceito de proteção e do seu alcance seja mais abrangente, podemos posicionar os elementos de um sistema de computação como uma coleção de processos e de objetos. Blocos de memória, periféricos, discos, programas, drivers de dispositivo e tudo mais que se puder identificar no contexto podem fazer parte desta coleção e cada um deles possui um nome que o diferencia dos demais. Feita essa separação é possível então estabelecer de forma rigorosa as operações que se aplicam a cada objeto. Alguns exemplos nos ajudam a esclarecer a prática: em uma CPU pode- se apenas executar programas; em trechos da memória principal pode-se ler dou gravar dados e arquivos podem ser criados, abertos, lidos, gravados, fechados e excluídos. Ainda no contexto do domínio de uma política de proteção, um processo deve ter permissão para acessar os recursos computacionais para os quais lhe foi dada a permissão de acesso. No mesmo sentido, um processo deve ter acesso aos recursos de que necessita para executar sua tarefa e a nenhum mais. A este princípio dá-se o nome de “conhecer-o-necessário” e seu objetivo é o de limitar eventuais danos que um processo incorreto pode ocasionar. ISTO ACONTECE NA PRÁTICA Silberschatz, Baer e Gagne (2015) nos dão o seguinte exemplo prático da limitação de acesso de recursos: quando o processo p invoca o procedimento A(), o procedimento deve ser autorizado a acessar somente suas próprias variáveis e os parâmetros formais passados a ele. Assim, ele não deve ser capaz de acessar todas as variáveis do processo p. Da mesma forma, considere o caso em que o processo p invoca um compilador para compilar um arquivo específico. O compilador não deve ser capaz de acessar arquivos arbitrariamente, mas deve ter acesso apenas a um subconjunto bem definido de arquivos (tais como o arquivo- fonte, o arquivo de listagem, e assim por diante) relacionado com o arquivo a ser compilado. Inversamente, o compilador pode ter arquivos privados usados para fins de contabilização ou otimização que o processo p não deve ser capaz de acessar. SISTEMA OPERACIONAL PROF. ROQUE MAITINO NETO FACULDADE CATÓLICA PAULISTA | 45 Como o próprio título desta nossa aula sugere, o conceito e as práticas de proteção estão profundamente
Compartilhar