Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIDADE I: AULAS Objetivos da Disciplina - Entender, analisar e recomendar a evolução dos sistemas operacionais; - Gerenciamento de: ● Processos ● Memória (hierarquia de memória, modos de endereçamento, estruturas de controle, memória virtual) ● Arquivos ● Entrada e saída Precursores dos computadores - O ábaco é um projeto datado em 300 a.C.; a sua ideia é considerar as contas (bolinhas) contidas na parte inferior, com valor unitário, e cada conta contida na parte superior, com valor de cinco unidades - Um segundo projeto é a Pascaline ou “as rodas dentadas de Pascal”; é como uma evolução do ábaco - A máquina de somar de Blaise Pascal adiciona ou subtrai quando as rodas dentadas se engrenam ao serem giradas Hardware x Software - Durante o processo de transformação do produto bruto até a saída e entrega do produto final, existem componentes físicos e lógicos trabalhando - Os componentes físicos são conhecidos como hardware e a parte lógica como software Hardware - Computador em si; discos; mouse; teclado; impressora; monitor; caixas de som… Software - Aplicativos que usamos para realizar tarefas - Ele instrui o hardware sobre a maneira como deve executar uma tarefa, inclusive SOs, processadores de textos e aplicações Sistemas Operacionais - O SO é a parte lógica que controla todo o hardware: ou seja, ele gerencia o hardaware e o software - Todo e qualquer programa se comunica com o sistema operacional - Cabe ao SO executar as tarefas necessárias para uso dos componentes físicos do computador (como memória, disco, controladores de vídeo, rede…) - Os programas usam o hardware para atingir seus objetivos por meio do SO: gravar, imprimir, armazenar dados… - Quando dois apps tentam acessar o mesmo hardware ao mesmo tempo, pode haver conflitos (como quando o meet e o zoom tentam acessar a câmera) - Nesses casos, é o SO que irá priorizar os recursos para determinado app História dos Computadores: Primeira Geração - Em ????, Charles Babbage projetou o primeiro computador de uso geral… Mas o projeto nunca saiu do papel - A primeira geração de computadores (1945- 1955) foi caracterizada pela introdução de válvulas - John Atanasoff e seu aluno Clifford Edward Berry criaram em Iowa, no período de 1937 a 42, o primeiro computador digital eletrônico da história - Os dois são conhecidos como pais dos computadores modernos - Deste projeto surge o ENIAC, o - de fato - primeiro computador eletrônico (construído por John Mauchly e seu aluno John Eckert) ENIAC - ENIAC: Eletronic Numerical Integrator and Computer; ocupava o espaço de uma sala inteira - Nesta primeira geração, não existia nenhum tipo de linguagem de programação nem sistema operacional - A operação era realizada de acordo com os seguintes passos: • O programador(a) reservava antecipadamente o tempo de máquina • O programador encaminhava-se até a sala de máquina • Aguardava horas monitorando (e torcendo para nenhuma das milhares de válvulas queimar durante a execução) Segunda Geração de Computadores - Datada de 1955 a 1965 - As principais características são: • as introduções dos transistores e sistemas em lote (batch) • 1/200 do tamanho das válvulas (redução do tamanho) • Consumo de manos de 1/100 de energia de uma válvula • Redução do tamanho das máquinas • Processamento em milissegundos - Foi elevada a confiabilidade - Criação da organização estruturada por funções específicas: projetistas, fabricantes, programadores e técnicos de manutenção IBM 1401; - IMB 7094 (versão de maior sucesso da segunda geração) pesava apenas 890kg, com mais de 10k unidades vendidas: Terceira Geração de Computadores - 1965 a 1980 - Sistemas integrados (Cis) e multiprogramação - Em 1964 a IBM lançou a linha de equipamentos da série IBM 360 que foi a primeira linha de computadores a usar circuitos integrados (Cis) em pequena escala 55219 Realce 55219 Realce 55219 Realce 55219 Realce 55219 Realce - Isso promoveu melhor custo-benefício em comparação às máquinas da segunda geração construídas com transistores - Para atender à linha de equipamentos, o SO OS/360 foi lançado - A multiprogramação foi muito significativa, facilitando a distribuição das tarefas simultaneamente - Nos equipos da linha 360, esta deficiência foi resolvida repartindo a memória em partes e alocando-as para as tarefas • Basicamente, enquanto uma tarefa estivesse esperando por uma operação de entrada e saída terminar, • A outra tarefa poderia usa o CPU - Principais características: • Introdução dos Circuitos Integrados • Grande contribuição no processo de miniaturização • Início da produção de minicomputadores • Sistema Operacional (orientado à arquitetura) • Tempo compartilhado • Programação em assembly • Criação dos primeiros softwares - Escala de integração: • SSI – Short Scale Integration • MSI – Medium Scale Integration • LSI – Large Scale Integration - Arquitetura plugável da série 360: - No final da terceira geração, a IBM (que até então liderava esse mercado) passou a perder espaço quando concorrentes passaram a vender periféricos mais baratos e compatíveis com sua arquitetura - Ou seja: os primeiros computadores pessoais começaram a surgir! Quarta Geração de Computadores - 1980 até atualmente: computadores pessoais - Teve como marco inicial o desenvolvimento de circuitos integrados contendo MILHARES de transistores em alguns cm² de silício - Computadores mais confiáveis, rápidos, menores e com maior capacidade de armazenamento - Geração marcada pela venda de PCs - Principais características: • Introdução dos microprocessadores • Desenvolvimento dos computadores pessoais • Sistemas operacionais (Macintosh, MS- DOS, UNIX) • Linguagens de programação orientadas a objeto, como C++ • Criação da impressora, mouse e teclado (nos modelos que conhecemos atualmente) - Escala de integração: • VLSI – Very Large Scale Integration - Disseminação de equipamentos que derivaram desta linha: smartphones, tablets, etc. UNIDADE I: LIVRO-TEXTO 1. Fundamentos de Sistemas Operacionais 1.1 Nivelamento - Hardware vs Software - “A maioria dos usuários de computador quando interagem com o aplicativo, baseado no ambiente shell (interpretador de comandos) em modo texto ou ambiente GUI (Graphical User Interface), usando ícones no ambiente gráfico, de fato NÃO estão atuando diretamente no SO.” - Objetivos básicos de um SO: abstração e gerência 1.2 Abstração - “Para o mundo lógico, o mundo físico é uma abstração, e, para o mundo físico, o mundo dos programas que fazem interface com os usuários é uma entidade completamente desconhecida.” - Os sistemas operacionais típicos, no caso, interagem servindo de conexão entre o hardware e os softwares SO -> define -> interfaces abstratas para os recursos do hardware - Objetivos: • Prover interfaces de acesso ao usuário mais intuitivas que as interfaces de baixo nível -> simplificar a construção de apps • Tornar apps independentes do hardware -> ao definir interfaces de acesso abstratas aos dispositivos físicos, o SO permite que hardware e software evoluam de forma autônoma • Definir interfaces de acesso homogêneas para dispositivos com tecnologias distintas 1.2.1 Gerência - O SO deve gerenciar o uso de recursos de hardware e administrar disputa e conflitos entre apps - Para o uso de uma impressora, por exemplo, o SO cria uma fila de trabalhos a imprimir (FIFO) 2. História dos SistemasOperacionais - Charles Babbage (1791-1871) -> primeiro computador -> máquina mecânica analítica 2.1 Primeira geração de computadores (1945- 1955) – Válvulas - Universidade do Estado de Iowa (1937-1942) -> criação do primeiro computador digital eletrônico -> Prof. John Atanaso e aluno Clifford Edward Berry - 1941, Berlim -> Zonrad Zuse -> contruiu o Z3 -> computador eletromecânico -> construído de eless - Colossus era um comp eletrônico usado pelos ingleses p/ decifrar mensagens alemãs (2ª GM) -> primeiro comp programável do mundo -> válvulas térmicas - Howard Aiken -> ASCC (Automatic Sequence Controlled Calculator) -> IBM -> 1944 - ENIAC -> Primeiro computador eletrônico -> John Mauchly e John Eckert 2.2 Segunda geração (1955-1965) – Transistores e sistemas em lote (batch) - Meados de 1950 - Criação da organização estruturada por funções - Computadores de grande porte (mainframes) - Valor elevadíssimo - Sistema em lote (batch): consiste em usar um comp de menor porte (como IBM 1401) para ler cartões, copiar fitas e imprimir saídas -> daí os cálculos numéricos eram executados pelos mainframe (como o IBM 7094) 2.3 Terceira geração (1965 -1980) – Cis e Multiprogramação - IBM lança em 1964 a linha 360 -> primeira a usar circuitos integrados (Cis) em pequena escala - Consequências: melhor custo-benefício em comp com a 2ª geração - Lançamento do SO/360 -> técnica de suporta à multiprogramação foi a mais significativa - Aqui, rodando o OS/360, há a repartição de memória em partes, alocando-as para tarefas - Crescimento de minicomputadores -> início com o DEC PDP-1 em 1961 que custava 5% de uma máquina 7079 2.4 Quarta geração (1980- atualmente) - Marco: desenvolvimento do circuito integrado com milhares de transistores em cm² de silício - “Era dos PCs” - O IBM PC foi lançado no início dos anos 80 -> IBM procurou Bill Gates para desenvolver um SO compatível com sua plataforma - Bill Gates comprou o SO DOS e vendeu para a IBM ajustado como MS-DOS (Microsoft Disk Operating System) - Em 83 foi lançado do PC/AT usando o processador Intel 80286 - Nos anos 60 foi criado o GUI por Doug Engelbart, adotada pela Xerox Parc - Após o lançamento e sucesso do Macintosh, a Microsoft desenvolveu o Windows (sucessor do MS-DOS) - As versões iniciais do Windows eram completamente montadas sobre o MS-Dos - Só no Windows 95 o sistema passou a usar o MS-DOS apenas para ser carregado e executar programas - Em 2001 foi lançado o Windows XP (atualização do Windows 2000 – Millenium Edition) 2001 – Windows XP 2007 – Windows Vista 2009 – Windows 7 2011 – Windows 8 2015 – Windows 10 2021 – Windows 11 - O SO UNIX é o seu grande competidor, com seus derivados (conhecidos como Linux) UNIDADE II: AULAS Tipos de Sistemas Operacionais - É possível classificar os SOs com base referencial em diversos parâmetros e perspectivas: • Velocidade • Suporte a recursos específicos • acesso à rede Batch (de lote) - Os SOs mais antigos trabalhavam por lote com programas a serem executados organizados em fila (FIFO) - O processador recebia um programa após o outro para ser processado em sequência: alto grau de utilização do sistema - Atualmente, “em lote” é usado para designar um conjunto de comandos que deve ser executado em sequência Sistemas de Rede - Devem suportar operações em rede: • Capacidade de oferecer às aplicações locais recursos que estejam localizados em outros computadores da rede o LAN (Local Area Network) o WAN (Wide Area Network) • Isso entre recursos distintos como o Serviços de autenticação remota o Acesso à arquivos o Acesso a banco de dados o Impressoras, etc... - Deve também disponibilizar seus recursos locais aos demais pcs de forma controlada - A maioria dos SOs atuais está dentro dessa perspectiva Sistemas Distribuídos - Aqui, os recursos utilizados por cada usuário em cada máquina estão disponíveis de forma transparente aos usuários - No caso, o usuário n tem muita noção de como o arquivo está sendo salvo, mas ele tem acesso e direcionamento para o diretório do mesmo SOs multiusuário e multitarefas - Nesse caso, cabe ao SO gerenciar os recursos disponíveis a todos os processos - Grande parte dos SOs atuais são multiusuários e multitarefas SOs Desktop (Personal Computer) - Projetado para atender ao usuário doméstico/corporativo que necessite realizar atividades triviais - Suas principais características são: • interface gráfica • suporte à interatividade • operação em rede - Mac OS x, Windows xp, Ubuntu Servidor - O SO classificado como servidor possibilita uma gestão eficiente de grandes qnt. de recursos físicos; exemplos: • disco • memória • processadores - Sempre gerindo as prioridades e limites sobre o uso dos recursos - Deve tb ter suporte à rede e multiusuários - Exemplos: Solaris, AIX, Linux, Windows Server 2008 SO Embarcado ou Embutido - É construído para operar sobre um hardware com poucos recursos de processamento e armazenamento - Exemplos: aparelhos de TV (smart TV), reprodutores de música (MP3, Alexa), consoles, eletrodomésticos em geral (microondas, etc)... - Ponto positivo: dificilmente será possível instalar um software que não seja extremamente compatível -> n é permitido o uso de software não confiável - Exemplos de SOs embarcados: QNX e VxWorks SO Tempo Real - Caracterizado por ter o tempo de execução como parâmetro principal - Subdividido em: • Sistemas de tempo real críticos o Voltados ao controle de processos industriais e militares • Sistemas de tempo real não-críticos o Aplicados em sistemas de áudio digital ou multimídia - No caso de sistemas críticos não podem ter degradação de desempenho (como em linhas de produção de veículos) SOs de Computadores de Grande Porte - Tipicamente utilizado por grandes corporações - Como características predominantes desses sistemas, pode-se considerar: • Elevada capacidade de E/S • Sistema em lote (batch) • Processamento de transações • Tempo compartilhado - Exemplos: OS/390 e S/400 SOs Multiprocessadores - Pode tratar múltiplas CPUs simultaneamente - Têm como objetivo principal: melhorar a capacidade computacional dos equipamentos, trazendo melhor desempenho para o ambiente - Com o advento dos processadores multinúcleo, PCs também estão começando a lidar com multiprocessadores - Alguns exemplos de sistemas operacionais multiprocessados são: Windows, Linux, Solaris e AIX SOs Portáteis - Voltados para computadores como os PDA (Personal Digital Assistant) e telefones celulares - Os PDA e celulares não possuem disco rígido multigigabyte -> menor espaço de armazenamento - Os sistemas operacionais para portáteis são: Android, iOS, Symbian OS, Windows Mobile e Palm OS Hardware de Computadores - O hardware e o SO devem ser extremamente compatíveis para que seja possível obter o melhor resultado - Faz-se necessária uma homogeneidade entre os desenvolvedores de hardware e software Processadores - A CPU traz das memórias instruções, decodifica, interpreta as instruções a serem executadas e as executa - Cada arquitetura de CPU tem um conjunto específico de instruções que pode executar - Todas as CPUs possuem registradores internos para armazenamento de variáveis importantes e de resultados temporários - Além dos registradores de propósito geral, a maioria dos computadores possuem vários registradores especiais disponíveis de forma aparente para os programadores- Alguns registradores especiais: • Contador de programa: contém o endereço de memória da próxima instrução a ser buscada • Ponteiro de pilha: contém os parâmetros de entrada, as variáveis locais e as variáveis temporárias • PSW (Program Status Word) - CPUs possuem recursos para executar mais de uma instrução em tempo concorrente - A isso damos o nome de Pipeline: elas podem executar uma busca, decodificação e, simultaneamente, a execução da instrução - Além do Pipeline, temos o Superescalar: • esse tipo de processador possui múltiplas unidades de execução • duas ou mais instruções são buscadas, decodificadas e armazenadas temporariamente em um buffer (até que possam ser executadas) Processadores multithread e multinúcleo - O Intel Pentium 4 e outros chips de processadores têm a propriedade chamada multithreading - A execução de um thread é a menor unidade de processamento que pode ser atendida por um SO - Múltiplos threads podem existir num mesmo processo e compartilhar recursos como a memória - O thread de um processo compartilha as instruções e contextos - Analogicamente, múltiplo thread de um processo é o mesmo que múltiplos alunos lendo instruções de um mesmo livro -> porém não necessariamente todos lendo a mesma página - Algo como uma divisão de tarefas simultâneas - Sistemas com CPU multinúcleo requerem SO para multiprocessadores Memória - Na teoria, a memória deveria ser mais performática do que a execução de uma instrução processada por uma CPU - Isso porque dessa forma a CPU jamais teria que esperar pela resposta da memória Opa! Mas na prática não é o que acontece... - Para resolver esse problema, a abordagem contemporânea é construir o sistema de memória seguindo uma hierarquia de camadas 55219 Realce 55219 Realce - Memória principal ou RAM (Random Acess Memory): todas as solicitações vindas da CPU e que não estão na memória cache são encaminhadas para a memória principal - A memória ROM (Ready Only Memory) é normamlmente usada pelos fabricantes para gravar códigos controladores de hardware - A memória CMOS é usada para manter data e hora atualizadas e parâmetros de configuração do hardware • Como sequência de boot e outros, mesmo que o computador esteja desligado • Necessita de uma bateria para manter seu conteúdo • Esta bateria pode ser trocada Discos magnéticos - Conhecidos como HD - O grande atrativo dos discos magnéticos em relação à memória é o preço bem menor se comparado R$/GB - O contraponto é a velocidade limitada para processar as informações por ser um dispositivo mecânico - As informações são escritas no disco em uma série de círculos que tem o mesmo centro (rotação de 2400 a 10000 rpm) - Cada cabeça pode ler e gravar uma região circular chamada trilha Fitas magnéticas - Muito utilizado como mídia de cópia de segurança (backup) - Transporta uma cópia daquilo que está nos discos magnéticos para fitas magnéticas - Com base nas normas de segurança ISSO 27001 é obrigatório o uso de sistemas de backup - Isso para garantir que a informação esteja disponível em caso de falha no sistema principal Dispositivos de E/S - São geralmente os controladores e os dispositivos - O controlador é formado por um ou mais chips numa placa - Funções: • Receber os comandos do SO • Gerar as instruções mais adequadas para os dispositivos • Exemplo: fornecendo orientação de como o HD armazena e acessa os dados - Os dispositivos possuem interfaces padronizadas - Entre o SO e o controlador, há um software chamado driver de dispositivo - O driver realiza a comunicação com o controlador, emitindo comandos e recebendo respostas 55219 Realce Barramento - Termo definido como elos de comunicação que consistem em um conjunto de vias - Ao longo da arquitetura computacional, os barramentos foram tomando forma mais heterogênea e estruturada para as necessidades modernas - Estrutura de barramentos de um computador típico: - A CPU se comunica com o barramento PCI por meio de um barramento local - Este barramento local se comunica com a memória por intermédio de um barramento dedicado - Esse sistema contém três barramentos específicos: IDE, USB e SCSI - O barramento IDE pode ser usado para conectar discos físicos e unidade de CD-ROM UNIDADE III: LIVRO-TEXTO INTRODUÇÃO A PROCESSOS - Dentro de um servidor de arquivos: • Dezenas/centenas de usuários estão fazendo milhares de requisições ao mesmo tempo • O antivírus está varrendo tudo que entra e sai • O software de gerenciamento de redes está monitorando e solicitando dados de desempenho do servidor • Diversos discos trabalhando em RAID necessitam processar as funcionalidades da tecnologia - Ou seja, é necessário que os processos estejam em plena ação para orquestrar tudo isso - Somente nos casos com sistemas com múltiplos processadores temos, de fato, múltiplos programas sendo atendidos no mesmo instante PROCESSO - Softwares de computador são organizados em processos sequenciais - Um processo é um programa em execução, acompanhado dos valores correntes: • Do contador de programa • Dos registradores • Das variáveis - Uma CPU pode executar um processo por vez; existem sistemas com dois cores ou + (que equivale a duas ou + CPUs) - Ainda assim, todas as CPUs podem executar apenas um processo por vez - Um processo constitui uma atividade: possui programa, entrada, saída e um estado - Os processos podem conter mais de uma tarefa, ou seja: Processo ≠ Programa ≠ Tarefa - No núcleo dos SOs, temos os PCBs (Process Control Blocks) -> armazenam as informações referentes aos processos ativos no ambiente - Cada processo tem um identificador único no sistema, o PID (Process Identifier) CRIAÇÃO DE PROCESSOS - Para sistemas de propósitos gerais é necessário algum mecanismo para criar e terminar processos (até mesmo durante a operação, se necessário) - Nos sistemas tem quatro eventos que fazem que processos sejam criados: 1) no início do sistema 2) um processo em execução procedendo a uma chamada de sistema de criação de um processo 3) requisição do usuário para criar novo processo 4) batch job (tarefa em lote) sendo iniciada - Ao iniciar um SO, vários processos são criados: alguns em primeiro plano e interagindo com o usuário; outros em segundo plano; - Ex. em segundo plano: servidor de FTP (file transfer protocol) -> fica inativo durante boa parte do tempo -> é ativado apenas quando um cliente FTP solicita abertura de nova conexão - Daemons: termo usado para descrever um processo que fica em segundo plano com finalidade de lidar com alguma atividade solicitada - Processos em execução podem fazer system calls para criar um ou mais processos novos - Os usuários podem iniciar um novo processo começando um programa no ambiente GUI ou no ambiente Shell - Em sistemas em lote, após o usuário submeter tarefa em lote para o sistema, o SO criará um novo processo e o executará quando: 1) tiver recurso disponível, ou 2) as prioridades no sistema forem redefinidas - No ambiente Unix, temos a chamada de sistema fork para criar um processo: cria uma réplica (processo filho) do processo solicitante (processo pai) - Depois o processo filho executará subsequentemente execve ou uma chamada de sistema similar para: • Mudar sua imagem de memória • Executar um novo programa Windows - Uma única chamada denominada CreateProcess de função do Win32 trata: • O processo de criação • Carga do programa correto no novo processo- O processo Win32 possui dezenas de funções para gerenciar e sincronizar processos e tópicos relacionados - Tanto no Unix quanto no Windows: quando um novo processo filho é criado, o processo pai e filho possuirão seus próprios espaços de endereçamento de memória - Isso permite que -> se o processo pai ou filho alterar uma palavra em seu espaço de endereçamento -> a mudança não vai impactar o outro processo TÉRMINO DE PROCESSOS - Após o término, o processo é finalizado com base nas quatro condições típicas: 1. Normal 2. Por erro 3. Erro fatal 4. Cancelado por terceiros - Processos terminados de forma involuntária não são comuns Condição normal - É verificado pela chamada exit no Unix e pelo ExitProcess no Windows - O processo termina após finalizar as tarefas que estavam previstas, ex.: • Usuário finalizando um programa • Fechando a janela no ambiente GUI... • ... Ou pela opção relativa no ambiente Shell - No Unix, a chamada exit serve para informar ao núcleo do SO que o processo não é mais necessário -> liberando os recursos a ele empregados - Processos podem solicitar ao núcleo o encerramento de outros processos -> aplicado apenas a processos do mesmo usuário -> ou se o usuário solicitante pertencer ao administrador do sistema Saída por erro - Os processos que interagem com outros não podem ser concluídos quando um parâmetro errado é fornecido - Ex.: se um usuário quer salvar um arquivo com nome duplicado -> abre uma caixa de diálogo e pergunta se ele quer tentar novamente Erro fatal - Causado pelo processo e normalmente por um erro de programa - Ex.: execução de uma instrução ilegal; referência à memória inexistente; divisão por zero Cancelamento por outro processo - Quando um processo x executa uma chamada de sistema determinando que o SO cancele outros processos - No Unix/Linux é a chamada kill - No Windows, a função Win31 correspondente é a TerminateProcess COMUNICAÇÃO ENTRE PROCESSOS - Frequente nos sistemas atuais -> comunicação estruturada e sem interrupções - Como um processo passa info para o outro? Como garantir que múltiplos processos não conflitem? Como haverá uma sequência adequada quando existirem dependências? Condição de corrida - Race conditions - O armazenamento compartilhado entre processos pode estar na memória principal ou em um arquivo compartilhado - Ocorre quando temos um cenário em que dois ou mais processos que estão lendo ou escrevendo algum dado compartilhado e cujo resultado final depende de quem executa – e quando executa - É extremamente exaustiva a atividade de análise, depuração e resolução de códigos de programa que apresentam condições de corrida EXCLUSÃO MÚTUA E REGIÃO CRÍTICA - É o modo de assegurar que processos sejam impedidos de usar uma variável ou um arquivo compartilhado que já estiver em uso por outro processo - Como evitar condições de corrida? Aplicando a exclusão mútua ou por modo abstração -> evitando que os programas usem a região crítica simultaneamente - Região ou seção crítica: parte dos programas em que há acesso à memória ou arquivo compartilhado - Porém, isso não é suficiente para que processos paralelos colaborem de forma correta e eficiente usando dados compartilhados Exclusão mútua com espera ociosa - Em sistemas antigos, para evitar que dois processos entrem, ao mesmo tempo, na região crítica (RC): • desativação das interrupções assim que o primeiro processo entrar na RC • consecutivamente reabilitá-las assim que sair da RC - Assim, quando se desativa a interrupção, a CPU não pode dar start em outro processo - Problema: se tivermos um problema num processo que desative as interrupções e nunca mais as atives, teremos o sistema todo literalmente parado - Conclusão: a desativação das interrupções é uma técnica coerente para o próprio SO, mas com alto nível de risco para os processos dos usuários - Esse processo não dá para ser aplicado nas novas arquiteturas de chips com múltiplos processadores! Outras opções - Existem outras opções para impedir que mais de um processo entre, simultaneamente, em sua RC - Por software: baseada em uma variável compartilhada chamada lock (trava); duas chaves de valores 0 e 1: • 0: indica que não há nenhum processo em sua RC • 1: indica que tem algum processo prévio em RC - O problema disso é se depender manualmente do usuário??? - Por chaveamento obrigatório: por meio de uma variável turn controla a vez de quem entra na RC, verificando a memória compartilhada - Nesse caso, um processo x precisa checar se já existe um processo y na RC, se tiver, precisa ficar checando toda hora até que o y não esteja mais na RC - Esse processo se chama busy waiting (espera ociosa) e despende muito tempo de CPU -> a trava que usa o busy waiting é chamada de spin lock - Instrução Test and Set Lock (TSL): a nível de hardware; lê no registrador RX a palavra lock do conteúdo de memória e armazena um valor diferente de 0 no endereço de memória lock - O TSL é a solução para o caso de múltiplos cores -> impede que outras CPUs acessem a memória enquanto ela não terminar a execução do seu processo em RC Semáforos - Conceito proposto para um tipo de variável inteira, objetivando contar o número de sinais de “acordar” salvos para o uso futuro - Ou seja, variável utilizada para controlar o acesso a recursos compartilhados (tipo de exclusão mútua) Insight! Pensa no uso de uma impressora: os processos que não conseguirem utilizar, vão ser postos para dormir; os processos que liberarem a impressora vão acordar os que estão dormindo e estes irão conseguir utilizar - Poderia conter valor 0 -> indicando que nenhum sinal de acordar foi salvo -> não há recurso livre -> nenhum wake-up armazenado - Conter algum valor positivo (>0) -> indicando que um ou mais sinais de acordar estão pendentes -> recurso tá livre -> se existe processo dormindo em função desse recurso, então ele precisa ser acordado - O idealizador Dijkstra propôs duas operações para os semáforos: P (down) e V (up), ou sleep e wake up - Operação Down (P): • o uso do recurso tá sendo requisitado (system call)! -> • então ele verifica se o valor contido é maior que 0 -> • se for maior que 0, subtrairá um sinal de Up (V) que estiver na variável e prosseguirá com as tarefas -> semáforo = semáforo – 1 • se o valor contido apresentar o valor 0, então o recurso não tá livre e o processo é instruído para dormir -> • sem terminar o ciclo Down ainda • fica em estado dormente, sem terminar o ciclo, esperando o recurso estar disponível - Para evitar condição de corrida deve ser garantido que, ao iniciar uma operação de semáforo, nenhum outro processo tenha acesso a este até que a operação: 1. Tenha terminado 2. Tenha sido bloqueada - Operação Up (V): • rola quando um recurso é liberado para um processo -> • é incrementado um valor no semáforo (semáforo = semáforo + 1) -> • se um ou mais processos estiverem dormentes ao ser iniciada a operação Up, então -> • o sistema escolhe um desses processos e dá permissão para que ele termine o ciclo Down - Ou seja, teremos um processo a menos dormindo - Se houver múltiplas CPUs, cada semáforo é protegido por uma variável lock, como na instrução TSL Monitores - Primitiva de alto nível para sincronizar processos - De fácil uso - Conjunto de procedimentos, variáveis e estruturas de dados agrupados em um único módulo ou pacote - Somente um processo pode estar ativo dentro do monitor em um mesmo instante - Outrosprocessos ficam bloqueados até que possam estar ativos no monitor - Coloca a cláusula monitor e o nome e tudo que tá dentro ali é sincronizado - Depende da linguagem de programação: existe em JAVA, mas não existe em C - Um processo que executar uma chamada ao monitor poderá entrar somente se não houver outro processo previamente ativo - Para o programador, basta saber que convertendo todas as RC em rotinas do monitor, 2 ou mais processos nunca poderão entrar em suas RCs ao mesmo tempo - Apresenta várias condicionais que possibilitam bloquear processos quando esses não puderem continuar - As condicionais apresentam duas condições: 1. wait: usado para definir que uma rotina não pode prosseguir 2. signal: abordado de duas formas distintas: a. deixa o processo recém- acordado executar e suspender o outro b. se é emitido sobre uma variável condicional pela qual vários processos estejam esperando, somente um deles será despertado - O signal não poderá acontecer até que o wait tenha terminado Limitações de monitores e semáforos - Não são boas soluções para sistemas distribuídos - Não proveem sincronização entre processos de máquinas diferentes, são para processos locais apenas - Monitores dependem de uma linguagem de programação: não são muitas que suportam monitores - Exigem mensagens de comunicação (passagem de mensagem) Troca de mensagens - Para a troca de informações entre máquinas temos o message passing que usa dois instrumentos: send e receive - São colocados em rotinas de biblioteca - Usa o mecanismo similar ao usado no protocolo TCP/IP camada 4 Transportes TCP: a mensagem enviada requer um sinal de aknowledge - Ou seja, se quem enviou não receber a confirmação, então uma nova mensagem será enviada Escalonamento - Algoritmo de escalonamento: ocorre quando temos uma única CPU disponível e mais de um processo estiver competindo para ser executado -> cabe ao SO escolher qual dos processos será privilegiado - Dois tipos de processos: 1. Computer bound: passam a maior parte do tempo computando (limitados pela CPU) 2. I/O bound: passam a maior parte do tempo esperando por entrada e saída (limitados à entrada e saída) 55219 Realce - Os processos devem ser escalonados nas seguintes situações: 1. Quando temos os processos pai e filho para serem executados 2. Quando temos um processo que terminou e não está mais no sistema 3. Quando um processo é bloqueado 4. Ao ocorrer uma interrupção de entrada/saída - Os algoritmos de escalonamento podem trabalhar de duas formas: 1. Não antecipado: o processo pode ficar executando pelo tempo que for necessário até que seja bloqueado ou que libere a CPU 2. Antecipado: o algoritmo escolhe um processo e o deixa em execução por tempo máximo fixado GERENCIAMENTO DE MEMÓRIA: INTRODUÇÃO - No SO, a parte parcialmente responsável por gerenciar a hierarquia de memória é o gerenciador de memória - Suas tarefas são: • Conhecer todo espaço de memória, • Alocar para os processos que estão necessitando • Liberar as partes que não estão mais em uso pelos processos RAM: random acess memory ROM: read only memory - Existem algumas variações na hierarquia: a. Variação por uso total de memória RAM b. Mix dos dois tipos (RAM e ROM) -> não há risco do usuário ou um problema na aplicação comprometer o SO -> comuns em dispositivos móveis c. Drivers de dispositivos em ROM - Nos sistemas precursores, não era possível mais de um programa ocupando a memória ao mesmo tempo - Solução: swapping -> troca de processos -> o SO pega o conteúdo da memória e move para um arquivo na memória em HD -> então libera a memória para o próximo processo - Avanço de hardware: dividir a memória principal em blocos de 2kb com chave de proteção e 4 bits para cada bloco -> mantidas em registradores especiais na CPU ABSTRAÇÃO: ESPAÇOS DE ENDEREÇAMENTO DA MEMÓRIA - Com a abstração da memória e implantação do espaço de endereçamento, cria-se uma memória abstrata para abrigar os programas - Esta possui um conjunto de endereços usado para que o processo realize endereçamento à memória - Individualmente, os processos possuem seu próprio espaço de endereçamento Permuta de memória - Além do swapping, outro método para gerir a sobrecarga da memória é: • o uso de memória virtual -> • permitindo que programas possam ser carregados na memória principal -> • e executados na íntegra ou parcialmente 55219 Realce - Ciclo de troca de processos entre memória principal e secundária: MEMÓRIA VIRTUAL - Overlays: módulos de sobreposição nos quais os programas eram criados diante da demanda elevada por memória - O método de memória virtual foi desenvolvido por John Fotheringham - Permite que programas usem mais RAM do que realmente está disponível fisicamente - É possível porque o SO mantém rodando na RAM somente as partes necessárias do programa -> as que não estão em uso ficam no HD - Quando precisa de outra parte que está no HD, então haverá o processo de swapping - Dois aspectos importantes: 1. Memória real: quantidade de memória fisicamente instalada 2. Memória virtual: muito mais capacidade que a memória real - No hardware temo a Unidade de Gerenciamento de Memória (MMU) - O MMU dá suporte ao SO na execução do mapeamento dos endereços da memória física e da memória virtual -> maestria no swapping Paginação - Técnica usada na maioria dos sistemas de memória virtual - Cada programa tem seu próprio espaçamento de endereços adjacentes -> páginas - A MV é dividida em unidades de espaçamento de endereços adjacentes -> ou seja, a MV é dividida em páginas - Frames: unidades da memória física que correspondem às páginas da MV - Tanto as páginas, quanto as suas “molduras” possuem o mesmo tamanho - Sistemas reais possuem páginas de 512 a 65.536 bytes; imagine um sistema com páginas de 8KB: - Isso porque usamos como exemplo um sistema que permite gerar endereços virtuais de 0 a 64 KB - Nos sistemas em que não é utilizado mecanismo de memória virtual, o endereço virtual é idêntico ao endereço físico - Nesse caso, o endereço virtual é colocado no barramento diretamente -> não é necessária uma adequação do mundo virtual para o físico - Em sistemas que usam memória virtual, o endereço virtual vai para o MMU -> este mapeia endereços virtuais em endereços físicos -> antes de colocá-lo no barramento 55219 Realce 55219 Realce 55219 Realce 55219 Realce 55219 Realce 55219 Realce 55219 Realce 55219 Realce 55219 Realce 55219 Realce 55219 Realce 55219 Realce 55219 Realce SEGMENTAÇÃO - É uma das formas mais simples para se obter a proteção da memória, além da paginação - São atendidos os requisitos: 1. Pode haver vários segmentos distintos 2. Cada segmento pode ter tamanho próprio 3. Cada seg. é constituído de uma sequência linear de endereços 4. O tamanho dos segmentos pode variar 5. O tamanho de cada segmento de pilha pode ser expandido sempre que algo é colocado sobre ela e diminuído sempre que algo é retirado da pilha 6. Seg. diferentes podem crescer ou diminuir independentemente -> quando for necessário - Para seu uso, programas tem que ter endereço composto de duas partes: (1) um número referindo-se ao segmento desejado e (2) endereço dentro do segmento UNIDADE IV: AULAS INTRODUÇÃO AO SISTEMA DE ARQUIVOS - Dá subsídio para acesso de arquivos - É o módulo do SO que vai armazenar dados de forma persistente no disco - Armazenar e recuperar big data (3 Vs) - Informação gerada por um processo: continuarapós finalização do processo (persistência) - Deve dar acesso à informação a múltiplos processos: concorrentemente - Definição: arquivo é um conjunto de dados armazenados em um dispositivo físico não volátil, com um nome e/ou referência que permita sua localização futura - Informações devem ser independentes de processos (técnicas de exclusão mútua) - Existem diversos sistemas de arquivo, ex.: FAT, FAT32, NTFS, Ext3, Ext4, JFS, JFFS, JFFS2, LogFS, Reiser4, ReiserFS e XFS, ISO9660 Info! Quando formatamos o PC, basicamente estamos resetando o Sistema de Arquivos dele. ARMAZENAMENTO PERSISTENTE: ARQUIVOS - Criados pelos processos -> estes podem ler ou escrever em arquivos ou ainda criar arquivos novos - Informações armazenadas devem ser persistentes!!!! Não podem ser afetadas pela criação ou finalização de um processo - Arquivos são gerenciados pelos SO: • São estruturados, nomeados, acessados, usados, protegidos, implementados e gerenciados • Por meio de chamadas (system calls) - Lembrando que é pelos systems calls que um sistema chama a atenção do kernel - Sistema de arquivos: • Parte do SO responsável por tratar de arquivos • Uma das partes mais visíveis ao usuário PONTOS DE VISTA DO SIST. DE ARQUIVOS Ponto de vista do usuário - Alto nível - Interface -> como os arquivos aparecem - Como são nomeados e protegidos - Operações que podem ser realizadas Ponto de vista do SO - Baixo nível - Indicam como arquivos são armazenados fisicamente (cilindros, setores, trilhas...) - Como arquivos são referenciados (links por onde um arquivo pode ser visto/acessado por um outro diretório) NOMES DE ARQUIVOS - Quando criados, nomes são dados aos arquivos (obrigatoriamente) - Referenciados pelos seus nomes - Tamanho máximo: 255 caracteres - Restrição do MS-DOS: aceita de 1-8 caracteres - Letras, números e caracteres especiais podem compor nomes de arquivos - Alguns SOs são case sensitives para nomes de arquivos, ex.: Unix - MS-DOS não é sensível e os Windows herdaram características do sistema de arquivos do MS- DOS - Em particular, WinNT/Win2000 usam um SA próprio: New Technology File System (NTFS) OUTROS ATRIBUTOS - Data: ajuda o usuário a saber quando o arquivo foi criado, mas também controlar a data e hora do último acesso, da última modificação e da última alteração de outro atributo - Tipo (extensão): indica se o arquivo é áudio, vídeo, imagem... O SA do Windows usam a extensão, que é parte do nome, para indicar o tipo do arquivo - Tamanho: determina quanto de espaço em bytes ou registros - Proprietário: atualmente, com sistemas em rede e multiusuários, cada arquivo tem um proprietário, que deve estar corretamente identificado - Permissões de acesso: determinam quais usuários têm acesso ao arquivo e quais permissões são atribuídas a cada usuário - Localização: indica o dispositivo físico onde o arquivo se encontra e a posição do arquivo dentro dele - Para o usuário do sistema, a localização parte da raiz, que é o pai de todos os demais repositórios filhos (estrutura hierárquica) ESTRUTURA DE ARQUIVO - Podem ser estruturados de várias formas - Para Windows e Unix, a estrutura de um arquivo nada mais é que uma sequência desestruturada de bytes - Isso oferece a máxima flexibilidade, tendo em vista que os programas dos usuários podem pôr qualquer coisa em seus arquivos e terem os nomes que forem convenientes - Sequência de estrutura em bytes: - Existe também uma forma estruturada: o arquivo é uma sequência de registros de tamanho fixo, cada um com alguma estrutura interna -> a operação de leitura retorna um registro e a operação de escrita sobrepõe ou anexa um registro -> não aplicado nos sistemas atuais - Árvore de registros: cada árvore contém um campo-chave em uma posição fixa no registro -> usado em alguns processamentos de dados comerciais - A árvore é ordenada pelo campo-chave OPERAÇÕES - Criar: demanda a alocação de espaço no dispositivo de armazenamento e a definição de seus atributos - Ler: permite transferir dados presentes no arquivo para uma área de memória da aplicação e, se necessário, enviar para um dispositivo de saída como monitor, impressora e outros - Abrir: antes que um aplicativo possa ler ou escrever dados em um arquivo, este deve solicitar ao sistema operacional que o arquivo seja aberto 1. O sistema verifica se o arquivo existe 2. Verifica se as permissões associadas permitem o acesso 3. Localiza seu conteúdo no dispositivo de armazenamento 4. Cria uma referência para ele na memória - Fechar: ao concluir o uso do arquivo, a aplicação deve informar ao SO que esse arquivo não é mais necessário -> liberar estruturas de gerência do arquivo na memória do núcleo - Mudar atributos: usado para modifica características do arquivo - Remover: elemina o arquivo do dispositivo, descarta seus dados e libera o espaço ocupado por ele - Entre outras operações, como copiar, mover, colar, renomear, etc. COMPARTILHAMENTOS - Em um sistema multitarefas e em redes, é frequente que se tenha arquivos sendo acessados por mais de um processo ou por mais de um usuário - O acesso simultâneo a recursos compartilhados pode gerar condições de disputa (race conditions) - Isso leva à inconsistência de dados e outros problemas TRAVAS EM ARQUIVOS - Os SOs oferecem um tipo de mecanismo de sincronização para acesso a arquivos - > por meio de travas (locks) - Pode ser aplicada no arquivo inteiro ou em trechos específicos - Assim, dois ou mais processos podem trabalhar partes distintas de um arquivo Travas obrigatórias - Impostas pelo núcleo do SO de forma compulsória - Assim, se um processo obtiver a trava do arquivo, então outros processos que solicitarem acesso ao arquivo serão suspensos até que a respectiva trava seja liberada Travas recomendadas - Não são impostas pelo núcleo do SO - Um processo pode acessar um arquivo, mesmo sem ter sua trava - Fica a cargo do programador implantar em suas aplicações os controles de trava necessários para impedir acessos conflitantes aos arquivos Trava exclusiva ou restritiva - Garante acesso exclusivo ao arquivo - Ou seja, enquanto estiver ativa, nenhum outro processo poderá obter uma trava sobre aquele arquivo Trava compartilhada ou de leitura - Impede outros processos de criar travas exclusivas sobre o arquivo - Permite apenas a existência de outras travas compartilhadas - As travas exclusivas e compartilhadas implementam um modelo de sincronização de leitores/escritores Voltando... - As travas de arquivos geralmente são atribuídas a processos - Um processo só pode possuir um tipo de trava sobre um mesmo arquivo - Todas as travas são liberadas quando o processo fecha o arquivo ou finaliza sua execução - Por default, os Windows oferecem travas obrigatórias sobre os arquivos – que podem ser exclusivas ou compartilhas –, e travas recomendadas sobre trechos SEMÂNTICA DE TRAVA DE ACESSO - Quando um dado é escrito no arquivo, ele está prontamente disponível para leitura Buffers de dados: locais da memória física em que os dados ficam armazenados temporariamente enquanto são movidos de um local para o outro - Arquivos podem ser abertos por vários processos ao mesmo tempo -> os dados escritos por um processo podem não estar imediatamente disponível aos demais - Isso ocorre pq a memória secundária em HD são lentas em comparação à memória principal - Nesse caso, os SOs usam buffers de dados intermediários para acumularos dados que deverão ser escritos/manipulados - Semântica de compartilhamento: forma como os dados escritos por um processo é notada pelos demais procesoss que abriram aquele determinado arquivo - Semântica imutável: um arquivo é chamado de imutável quando pode ser compartilhado por vários processos -> assim seu conteúdo não pode ser modificado - Isso garante a consistência do conteúdo do arquivo -> usada em alguns sistemas de arquivos distribuídos Outras semânticas possíveis - Semântica Unix: • Toda modificação em um arquivo é imediamente visível a todos os processos que mantem o arquivo aberto • Existe a possibilidade de vários processos compartilharem o mesmo ponteiro de posicionamento do arquivo • Comumente aplicada em sistemas de arquivos locais - Semântica de sessão: • Considera que todo processo usa o arquivo em uma sessão (abertura e fechamento) • Modificações em uma sessão só são visíveis na própria sessão ou nas que forem abertas depois que esta for fechada DIRETÓRIOS (FOLDER) - Definição: é uma estrutura de dados que contém entradas associadas aos arquivos -> cada entrada armazena informações como localização física, nome e demais atributos - São usados para permitir a organização dos arquivos dentro de uma partição - Um diretório/pasta/folder pode conter arquivos ou outros diretórios - Têm nomes e atributos assim como os arquivos - Cada espaço de armazenamento possui ao menos um diretório principal -> diretório raiz - Exemplo de árvore de diretórios de um sistema Linux -> estrutura definida nas normas Filesystem Hierarchy SISTEMA DE DIRETÓRIOS EM NÍVEL ÚNICO - Nível único: nível mais simples de uma estrutura de diretórios - Existe um único diretório contendo todos os arquivos do disco - É bastante limitado -> não permite criar arquivos com mesmo nome - O primeiro supercomputador da história foi um CDC 6600 que usava este sistema - Evolução: foi implantada uma estrutura na qual para cada usuário existiria um diretório particular, o Diretório de Arquivo do Usuário (sistema de diretório de dois níveis) - Mas, ainda assim, para o usuário a organização em um único diretório não permite uma organização adequada - Evolução para múltiplos níveis: estrutura de diretórios em árvore, adotada hoje na maioria dos sistemas TIPOS DE SISTEMAS DE ARQUIVOS Sistema de arquivos ISO 9660 - Padrão internacional e mais usado em tecnologia de CD-ROMs - Objetivo: tornar possível que todo CD-ROM fosse legível por todos os computadores -> independentemente do SO e da ordem em que os bytes estão armazenados - Diferença HD e CD-Roms: os CD-ROMs não possuem cilindros concêntricos, mas uma única espiral contínua que contém bits em uma sequência linear - Mesmo estruturado em espiral contínua, é possível buscar o CD-ROM transversalmente às espirais - Os bits são agrupados em blocos lógicos de 2.352 bytes Sistema de arquivo do FAT - Foi o mais usado mundialmente - Também chamado “Sistema de arquivos MS-DOS” - Os primeiros PCs da IBM já usavam o SA MS-DOS - Até o Windows 2000 e ME, a Microsoft usava esse SA; - A partir do Windows 2000, Vista e XP ele passa a ser suportado, mas não é mais padrão nos equipamentos atuais - Possui extensão FAT-32 -> vem sendo usada em máquinas fotográficas, MP3 e outros - O SA usado atualmente pela Microsoft é o NTFS Sistema de arquivos do ambiente Linux - Primeira versão de SA no Linux: Minix - Seguia os padrões Unix: • Arquivos com limites de nomes de 14 caracteres • Tamanho máximo de 64MB - O SA ext apesenta melhorias com relação ao tamanho do nome (até 255 caracteres) e tamanho do arquivo (até 2GB) - A desvantagem do sistema de arquivos ext, comparado com o Minix, era seu desempenho lento INTRODUÇÃO AO GERENCIAMENTO DE E/S - Tem como princípio básico a abstração • Torna a interação do programador com a máquina mais fácil • Permite que os programas de hardware evoluam de forma independente, porém estruturada 12 CONCEITOS Fonte do vídeo: https://www.youtube.com/watch?v=T7lCM3l 7vAQ O QUE É UM SO - Conjunto de softwares que permite a operação de um computador ou equipamento similar Funções • Permite acessar e controlar o hardware da máquina • Alocar recursos • Interagir com aplicações diversas • Gerencia processos e comunicação via rede -> permitindo a troca de dados entre programas e dispositivos, • Efetua tratamentos de erros KERNEL - Parte mais importante do SO; seu componente central - Primeira parte do SO a ser carregada e permanece na memória principal durante todo tempo de execução Funções • Gerenciamento de memória • Gerenciamento de processos • Gerenciamento de armazenamento • Gerenciamento de dispositivos Tipos de kernel • Monolítico • Microkernel • Híbrido • Exokernel https://www.youtube.com/watch?v=T7lCM3l7vAQ https://www.youtube.com/watch?v=T7lCM3l7vAQ • Nano Kernel PROCESSOS E THEREADS Processos - Processo é um programa em execução - São gerenciados pelo SO, o qual também controla o agendamento de processos (scheduling) Threads - Um thread é um fluxo de execução (como um trecho de um código, por exemplo) separado dentro de um processo - Um processo pode ter uma thread ou ser multithreading - Também chamada de lightweight process - Permite melhorar a performance de uma aplicação por meio de paralelismo TIPOS DE SO Classificação por forma de operação - SOs em lote (batch job): usados em mainframes - Tempo compartilhado: compartilha o tempo execução entre os processos - Distribuído: fazem uso de várias máquinas simultaneamente - De rede: permite controlar várias estações por rede, ex.: Linux e Windows server - De tempo real: precisam de resposta instantânea (militares e de airbags, por ex.) MULTITAREFAS E MULTIPROGRAMAÇÃO - Multitarefa: diversas tarefas podem ser executadas pela CPU simultaneamente -> pela comutação entre elas -> de forma muito rápida - Multiprogramação: a CPU será compartilhada por dois ou mais programas na memória ao mesmo tempo, aumentando sua utilização - Há, basicamente, duas grandes famílias de SOs: baseados em Unix e sistemas Windows - O MS-DOS não é Windows, mas é precursor de alguns Windows, como o 3.11 e o 98 - Só a partir do Windows NT (anterior ao XP) que surgiu um Windows completamente separado do DOS TIPOS DE INTERFACES: CLI, GUI E TERMINAIS Command-Line Interface (CLI): o Sistema é controlado por meio de comandos emitidos em um prompt Graphical User Interface (GUI): o sistema é controlado por meio de elementos gráficos acessados com um dispositivo apontador, como um mouse ou via touch Terminal: software que emula um terminal de hardware, geralmente com uma interface de linha de comandos que pode ser executada dentro de uma interface gráfica SEGURANÇA - Não fazem parte do SO propriamente dito, mas são parte essencial do sistema computacional em si - Ajudam a proteger o SO, programas e arquivos dos usuários Firewall: bloqueia pacotes suspeitos ou indesejados pela rede (E/S) Antivírus: protege contra ataques de malwares Backup: ferramenta para cópia de segurança dos dados - A maioria dos SOs possuem ferramentas básicas integradas que realizam essas funções
Compartilhar