Baixe o app para aproveitar ainda mais
Prévia do material em texto
SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA Prof. Marcelo Henrique dos Santos SISTEMAS OPERACIONAIS Marília/SP 2023 “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 SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 5 SUMÁRIO CAPÍTULO 01 CAPÍTULO 02 CAPÍTULO 03 CAPÍTULO 04 CAPÍTULO 05 CAPÍTULO 06 CAPÍTULO 07 CAPÍTULO 08 CAPÍTULO 09 CAPÍTULO 10 CAPÍTULO 11 CAPÍTULO 12 CAPÍTULO 13 CAPÍTULO 14 CAPÍTULO 15 08 18 29 41 52 62 74 84 96 108 118 130 142 152 164 HISTÓRICO E FUNÇÕES DOS SISTEMAS OPERACIONAIS TIPOS DE SISTEMAS OPERACIONAIS ARQUITETURA DE SISTEMAS OPERACIONAIS PROGRAMAÇÃO CONCORRENTE DEADLOCK GERENCIAMENTO DE PROCESSOS COMUNICAÇÃO DE PROCESSOS GERENCIAMENTO DE MEMÓRIA GERENCIAMENTO DE ARQUIVOS GERENCIAMENTO DE ENTRADA/SAÍDA GERENCIAMENTO DE SEGURANÇA E PROTEÇÃO SISTEMAS OPERACIONAIS MULTIMÍDIAS SISTEMAS OPERACIONAIS MOBILE VIRTUALIZAÇÃO E MÁQUINA VIRTUAL PROCESSOS / ESCALONAMENTO SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 6 INTRODUÇÃO O sistema operacional serve como um link entre os usuários, hardware e o software aplicativo. Ele fornece uma aparência e mecanismo padrão para usuários e aplicativos e, ao mesmo tempo, gerencia cada recurso, como hardware, memória e CPU com eficiência. Ou seja, é um tipo de interface de software entre o usuário e o hardware do dispositivo. Ele permite que o usuário se comunique com o dispositivo e execute as funções desejadas. Dentre as funções do sistema operacional são: gerenciamento de arquivos, gerenciamento de memória, gerenciamento de processos como multitarefa, interfaces de usuário, redes como TCP/IP etc., que conectam o hardware e o usuário ao operar o computador. Veremos que os sistemas operacionais são usados internamente por vários computadores e sistemas embarcados, desde smartphones e consoles de jogos até supercomputadores. Pode-se dizer que a evolução das funções e operabilidade dos PCs e smartphones acompanhou a evolução do SO. O sistema operacional não deve ser considerado como sendo apenas a base do software que conecta hardware e software, mas também desempenha um papel importante na ponte entre o usuário e o computador. A partir desse contexto, ao longo dos capítulos iremos discutir as funções do sistema operacional, dentre os elementos, podemos relacionar os seguintes itens: • Gerenciamento do calendário e progresso de tarefas: É responsável pela gestão do calendário e gestão do progresso das tarefas (unidades de trabalho do computador). • Gerenciamento de memória: O local de trabalho é a memória. O sistema operacional é responsável pelo gerenciamento de memória. • Gerenciamento de arquivos: O sistema de arquivos é uma das funções fornecidas pelo sistema operacional. • Gerenciamento de dispositivos periféricos: O gerenciamento de conexões com dispositivos periféricos, como teclados e mouses, também é uma função do sistema operacional. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 7 • Fornecimento das APIs: Fornecemos APIs que servem como funções comuns para o desenvolvimento de aplicativos. Veremos ainda que o sistema operacional utiliza dois componentes para gerenciar programas e aplicativos de computador. O kernel é o principal componente interno que processa dados no nível do hardware. Ele executa o gerenciamento de entrada/ saída, gerenciamento de memória e gerenciamento de processos. Além disso, será possível refletir que um shell é a camada externa que gerencia a interação entre o usuário e o sistema operacional. O shell se comunica com o sistema operacional por meio de entrada do usuário ou por meio de scripts de shell. Um script de shell é uma série de comandos do sistema armazenados em um arquivo. Ao longo da leitura do material, você vai encontrar informações que o ajudarão a refletir sobre o histórico, funções, tipos e arquitetura de Sistemas Operacionais, programação concorrente e deadlock, Comunicação e gerenciamento de processos, memória, arquivos, entrada/saída, segurança e proteção, sistemas operacionais multimídias e mobile, virtualização e máquina virtual, processos e escalonamento. Bons estudos! SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 8 CAPÍTULO 1 HISTÓRICO E FUNÇÕES DOS SISTEMAS OPERACIONAIS O Sistema Operacional (SO) se trata de um programa ou uma coleção de programas (software) que, ao inicializar o computador, é responsável por gerenciar os recursos do sistema do computador, sejam discos rígidos, memória, teclado, mouse, ou seja, representa uma comunicação direta entre o computador e o usuário (ANDLEIGH, 1990). Sistemas operacionais como o MS-DOS funcionavam a partir de linhas de comando, hoje são muito mais intuitivos já que funcionam a partir de uma interface gráfica, embora também tenhamos a opção de usar o console de comando (esta opção seria para usuários avançados). De acordo com DEITEL et. al. (2005), o SO é responsável por iniciar os processos que nosso computador executa. Podemos definir os processos quando nosso software é carregado na memória. Se o programa não fosse carregado na memória, não funcionaria. Existem 2 tipos diferentes de processos: • Em primeiro plano: Este tipo de processo requer execução e interação do usuário, um exemplo seria nosso navegador de internet, um processador de texto, um programa de compartilhamento de arquivos. Título: Representação de um usuário utilizando a internet Fonte: https://br.freepik.com/fotos-premium/tempo-para-voce-jovem-adulta-linda-mulher-afro-americana-em-camiseta-olhando-sorrindo-para-o-smartphone- sentado-no-sofa_15961359.htm#page=3&query=usar%20a%20internet&position=9&from_view=search&track=robertav1_2_sidr SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 9 • Em segundo plano: Não requerem nenhuma ação do usuário, pois como o próprio nome sugere são executados em segundo plano, geralmente não possuem interface gráfica, para vê-los teríamos que entrar no gerenciador de tarefas e lá apareceriam, um exemplo de software antivírus seria um exemplo. Título: Representação da utilização do Windows Defender Fonte: https://unsplash.com/pt-br/fotografias/p0vN2xCvJNg Os recursos que ele gerencia são tanto hardware (peças físicas, disco rígido, tela, teclado etc.) quanto software (programas e instruções). Por exemplo, computadores, laptops, tablets, celulares e servidores possuem e requerem um sistema operacional. Os outros programas que não são sistemas operacionais são chamados de aplicativos, esses programas são instalados em nosso sistema operacional, sem eles esses aplicativos não poderiam ser executados em nosso computador. 1.1 Funcionalidades do sistema operacional Os sistemas operacionais usam imagens e botões para poder se comunicar facilmente com o computador, para poder enviar instruções ao nosso computador a qualquer momento sobre o que queremos fazer. O objetivo principal é fornecer as https://unsplash.com/pt-br/fotografias/p0vN2xCvJNg SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADECATÓLICA PAULISTA | 10 ferramentas necessárias para monitorar nosso computador e usá-lo de maneira fácil para o usuário final, em suma, o sistema facilita a vida do usuário (DEITEL et. al. 2005). As funções básicas do sistema operacional são gerenciar, coordenar o hardware e organizar arquivos e diretórios nos dispositivos de armazenamento do nosso computador. Certas coisas mais concretas que um sistema operacional pode fazer são: • É o único software importante que executa os programas e cuida de todo o resto. Por exemplo, o sistema operacional controla os arquivos e outros recursos que esses programas podem acessar quando estiverem em execução. • Quando temos vários programas que podem rodar ao mesmo tempo, ele determina quais aplicativos rodar exatamente, em que ordem e por quanto tempo. • Gerencia o compartilhamento de armazenamento interno entre vários aplicativos. • Ele lida com a entrada e saída de dados de e para dispositivos de hardware conectados, como discos rígidos, impressoras, portas de comunicação, teclados etc. • Ele envia mensagens sobre o status operacional e quaisquer erros ocorridos para qualquer aplicativo ou usuário (ou para um operador do sistema). • Em computadores que permitem processamento paralelo, um sistema operacional pode lidar com o particionamento do programa para ser executado em mais de um processador por vez. Por exemplo, quando um aplicativo deseja imprimir algo, ele envia esse trabalho para o sistema operacional. • Envia as instruções para a impressora e usa os drivers da impressora para enviar os sinais corretos. • O aplicativo que imprime não precisa se preocupar com qual impressora precisa imprimir ou entender como essa impressora funciona, ou seja, ele cuida de cada detalhe. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 11 ISTO ACONTECE NA PRÁTICA Quando executamos um jogo em nosso computador, ele é processado a partir de um sistema operacional. O jogo não deve saber exatamente como funcionam os componentes de hardware individuais do nosso computador. Título: Representação de um usuário jogando em um computador. Fonte: https://unsplash.com/pt-br/fotografias/SXGVliZGS7I Normalmente o jogo utiliza uma variedade de recursos do sistema operacional, e o sistema operacional os traduz em instruções de como usar nosso hardware. Isso evita muitos problemas para os desenvolvedores e qualquer outro programa executado em um sistema operacional. 1.2 História e desenvolvimento de sistemas operacionais Os primeiros computadores não tinham um sistema operacional. Todos os programas executados nesses primeiros computadores deveriam conter o código necessário para executar o computador inteiro, comunicar-se com o hardware conectado e realizar os cálculos necessários para o programa. Essa situação dificultava a gestão até dos programas mais simples (TANENBAUM, 2003). https://unsplash.com/pt-br/fotografias/SXGVliZGS7I SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 12 Respondendo a esse problema, os proprietários de computadores mainframe começaram a desenvolver programas de sistema que tornavam mais fácil escrever e executar programas no computador e, assim, nasceram os primeiros sistemas operacionais. O primeiro sistema operacional foi desenvolvido pela General Motors para executar um único computador IB (nesse período a IBM se tornou a primeira fabricante de computadores a assumir o desenvolvimento de sistemas operacionais e começou a fornecer sistemas operacionais que acompanhavam seus computadores). Nas décadas seguintes, os computadores começaram a incluir cada vez mais softwares, às vezes chamados de bibliotecas, que juntos formaram o início dos sistemas operacionais modernos. A primeira versão do sistema operacional Unix foi desenvolvida no final dos anos 1960. Escrito na linguagem de programação C e disponível gratuitamente nos primeiros anos. O Unix adaptou-se facilmente a novos sistemas e rapidamente ganhou ampla aceitação. Muitos sistemas operacionais modernos, incluindo o Apple OS e todas as várias versões do Linux, derivam ou são baseados no sistema semelhante ao Unix. O Windows foi desenvolvido em resposta ao pedido da IBM para criar um sistema operacional para seus computadores pessoais ou de mesa. O primeiro sistema operacional desenvolvido pela Microsoft não foi o Windows, mas o MS-DOS, que foi desenvolvido em 1981, adquirindo o sistema operacional 86-DOS da Seattle Computer Products e adaptando-o aos requisitos da IBM. O nome Windows foi usado pela primeira vez, quando uma interface gráfica do usuário foi criada e combinada com o MS-DOS (TANENBAUM e WOODHULL, 2008). Título: Representação da utilização do sistema operacional MS-DOS Fonte: https://br.freepik.com/fotos-gratis/pessoa-usando-computador-retro_34134827.htm#query=MS-DOS&position=31&from_ view=search&track=robertav1_2_sidr SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 13 A Apple, OS X, Microsoft Windows e várias formas de Linux (incluindo Android) agora dominam a maior parte do mercado de sistemas operacionais modernos. ISTO ESTÁ NA REDE De acordo com Fortune Business Insights (2023), o mercado global de sistemas operacionais para servidores está projetado para atingir um volume de 54.748 mil em 2030, com um CAGR de 12,7% durante o período de previsão, 2023-2030 O volume global do mercado de sistemas operacionais para servidores foi de 21.578 mil em 2022 e deve atingir o patamar de 54.748 mil em 2030, exibindo um CAGR de 12,7% durante o período de previsão. Uso crescente de plataforma e infraestrutura em nuvem para impulsionar o mercado (FORTUNE BUSINESS INSIGHTS, 2023). Muitas empresas líderes que operam no mercado estão envolvidas no desenvolvimento de sistemas operacionais inovadores baseados em servidores para servidores web. Os sistemas operacionais de servidor geralmente funcionam em uma arquitetura cliente/servidor para atender à demanda de computadores na rede entre os clientes. Muitos servidores, como correio, arquivo, web, banco de dados, impressão e aplicativo, dependem de sistemas operacionais para ajudar os usuários a realizar várias funções. Espera-se que esses fatores acelerem o crescimento do mercado de sistemas operacionais para servidores. Para ler a matéria na íntegra, acesse o seguinte link: https://finance.yahoo.com/ news/server-operating-system-market-surpass-070500343.html. 1.2.1 Unix: O sistema operacional que estabeleceu novos padrões O desenvolvimento do Unix é sem dúvida um dos marcos mais importantes da história da computação. O sistema operacional não apenas introduziu conceitos rudimentares de TI, como um sistema de arquivos hierárquico com uma estrutura de diretório; foi também a base para o desenvolvimento de vários outros sistemas, como os sistemas operacionais macOS e iOS da própria Apple, ou o projeto open source Linux, que deu origem a diversos derivados como Ubuntu, Debian e Android (TANENBAUM e WOODHULL, 2008). Em 1965, o grupo de trabalho apresentou sua ideia para um novo sistema operacional na conferência de informática do outono. O grupo era formado por funcionários do Massachusetts Institute of Technology (MIT), General Electric Company e AT&T Bell Laboratories (Bell Labs) (desde 2016 parte do departamento Nokia PandD). Eles https://finance.yahoo.com/news/server-operating-system-market-surpass-070500343.html https://finance.yahoo.com/news/server-operating-system-market-surpass-070500343.html SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 14 chamaram o sistema operacional Multiplexed Information and Computing Service, ou Multics, para abreviar. Eles se esforçam para abordagens completamente novas, focando em particular no conceito de compartilhamento de tempo (TANENBAUM e WOODHULL, 2008). O Multics deve ser um dos primeiros sistemas a permitir que vários usuáriostrabalhem em um computador ao mesmo tempo, compartilhando o tempo de computação do processador subjacente. Para o projeto, o grupo de trabalho Multics precisava de um computador que atendesse a uma série de requisitos específicos: por um lado, precisava ter um conjunto de instruções claramente estruturadas para poder usar a programação de alto nível PL/I da IBM linguagem destinada ao desenvolvimento. Por outro lado, tinha que suportar a operação multiusuário planejada e trabalhar de forma assíncrona para manter a perda de desempenho no gerenciamento de memória o mais baixo possível. Por esta razão, o GE-635 e posteriormente o GE-645 da General Electric foram escolhidos. O desenvolvimento foi realizado no já executável sistema multiusuário CTSS, desenvolvido pelo MIT no início dos anos 1960. O Multics foi desenvolvido no MIT e mais tarde vendido comercialmente em máquinas Honeywell 6180 (até 1986) pela empresa Honeywell International Inc. - após sua compra da General Electric. No entanto, o cientista da computação Ken Thompson, que na época era funcionário dos extintos Bell Labs, não desistiu da ideia de um sistema multiusuário: junto com Dennis Ritchie e uma pequena equipe das instalações da AT&T, ele começou a planejar seu próprio sistema baseado nos princípios do Multics. No entanto, a busca por um computador adequado inicialmente provou ser infrutífera - e como a Bell Labs resistiu em comprar uma cópia adequada, os desenvolvedores inicialmente registraram seus pensamentos e progresso do sistema de arquivos planejado em papel e quadro-negro (TANENBAUM e WOODHULL, 2008). Finalmente, o minicomputador PDP-7 usado para o projeto proposto foi implementado pela Digital Equipment Corporation (DEC). Esse sistema de computador do tamanho de um gabinete usava o sistema operacional GECOS (General Electric Comprehensive Operating System), que foi a plataforma de desenvolvimento desde então. Ferramentas de software valiosas como a linha de comando, editor e sistema de arquivos apareceram rapidamente. Como o novo sistema operacional, ao contrário do Multics, permitia apenas dois usuários que podiam executar apenas um processo por vez, a equipe o chamou de Unics com base no modelo. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 15 1.2.2 Sistemas operacionais de computador De acordo com OLIVEIRA et. al. (2004), os sistemas operacionais para computadores ou desktops variam muito e são muitos, mas os mais comuns são Windows, Mac e LINUX. A partir desse contexto, podemos observar os sistemas operacionais que são mais utilizados para PC: • Linux ou Ubuntu: Como sistema operacional, foi desenvolvido para oferecer aos usuários de computadores pessoais uma alternativa gratuita ou muito barata. O Linux tem a reputação de ser um sistema muito eficiente e rápido. Existem muitas versões diferentes, sendo as mais populares o Ubuntu ou o Fedora. As versões podem ser modificadas livremente por qualquer usuário. • Microsoft Windows: Usar o Windows é o carro-chefe do sistema operacional da Microsoft, o sistema padrão para computadores pessoais e empresariais. Foi fundada em 1985, é a grande responsável e pioneira do rápido desenvolvimento da informática no lar. • Mac OS: é o sistema operacional Apple Macintosh para computadores pessoais e estações de trabalho. A maçã identifica esse sistema operacional porque é seu logotipo. ISTO ACONTECE NA PRÁTICA O Linux é usado para gerenciar vários serviços, incluindo agendamento de processos, agendamento de aplicativos, dispositivos periféricos básicos e sistemas de arquivos. Os produtos baseados em Linux tiveram um grande impacto no espaço de TI e muitos se tornaram essenciais para um grande número de pilhas de tecnologia das organizações, com Kubernetes (um gerenciador de cluster de contêiner do Google), Docker (um programa de contêiner de software) e Open Daylight ( usado para acelerar a adoção de SDNs e virtualização de funções de rede), todos com uso generalizado. Além disso, os sistemas operacionais baseados em Linux são os favoritos entre os provedores de serviços em nuvem devido à sua natureza gratuita e de código aberto. Para ler a matéria na íntegra, acesse o seguinte link: https://builtin.com/ software-engineering-perspectives/linux. https://builtin.com/software-engineering-perspectives/linux https://builtin.com/software-engineering-perspectives/linux SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 16 1.2.3 Sistemas operacionais móveis Entre os sistemas operacionais usados em dispotivos móveis, como celulares e tablets, podemos citar o Android, iOS, Windows Phone (que inclusive já foi descontinuado), entre outros: • Android: Este sistema operacional foi criado pelo Linux por ser de código aberto e ser utilizado em dispositivos móveis e tablets. Foi criado pela Android Inc. Um pouco depois foi comprado pelo Google e se tornou tão popular que as vendas dispararam e é o sistema operacional móvel mais usado atualmente. • IOS: É o sistema operacional da empresa Apple Inc. O primeiro lançamento foi em junho de 2007, a primeira versão foi lançada porque hoje já estamos na versão 15 desse sistema operacional. Este sistema operacional é menos usado que o Android, mas lendo várias análises de usuários, chegamos à conclusão de que o IOS é muito mais estável que o Android e mais rápido. • Windows Phone: Foi um sistema operacional desenvolvido pela empresa Windows. Inicialmente teve bastante sucesso e muitos celulares e tablets foram vendidos com esse sistema operacional. Hoje não é mais usado, pois está obsoleto em comparação com os outros dois SO que mencionamos acima. Havia também outros sistemas operacionais, como o Blackberry OS, que já existiam há alguns anos e estavam completamente desatualizados e agora esquecidos. 1.2.4 Sistema operacional Dependendo do PC e gênero de aplicativo De acordo com TANENBAUM e WOODHULL (2008), deste tipo temos: • Sistema operacional em tempo real (RTOS - Real Time Operating System): Os sistemas operacionais em tempo real são usados para monitorar máquinas, instrumentos científicos e sistemas industriais. Uma parte muito importante de um RTOS é direcionar os recursos do computador para que uma determinada operação seja executada exatamente na mesma quantidade de tempo toda vez que ela ocorrer. • Único usuário, única tarefa: como o nome sugere, este sistema operacional foi projetado para gerenciar o computador de forma que um usuário possa fazer apenas uma coisa por vez. • Único usuário, multitarefa: a maioria das pessoas usa esses tipos de sistemas operacionais em seus desktops e laptops. As plataformas Windows da Microsoft SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 17 e MacOS da Apple são exemplos de sistemas operacionais que permitem que um único usuário execute vários programas simultaneamente. • Multiusuário: Um sistema operacional multiusuário permite que muitos usuários diferentes usem os recursos do computador ao mesmo tempo. Unix, VMS e sistemas operacionais de mainframe como MVS são exemplos de sistemas operacionais multiusuário. 1.2.5 As partes de um sistema operacional Um sistema operacional consiste em vários componentes e/ou funções diferentes. As peculiaridades definidas como parte do sistema operacional mudam com cada sistema operacional. Segundo Silberschatz (2001), as três partes de um sistema operacional mais fáceis de definir e usar em qualquer sistema operacional são: • Kernel: Ele pode ser considerado o coração do seu sistema operacional, por isso também é chamado de kernel do sistema operacional. O kernel é carregado primeiro quando o sistema operacional é iniciado e fornece controle básico sobre todo o hardware do computador. Suas principais funções incluem ler e escrever dados na memória, processar comandos de execução, operar dispositivos como display, teclado e mouse, recebê-lose enviá-los e interpretar dados recebidos de redes. O kernel geralmente é executado remotamente para que outros programas de computador não possam corrompê-lo. O kernel do sistema operacional é necessário, mas é apenas uma parte do sistema operacional. • User Interface: Este componente permite a interação com o usuário, que pode ser feita através de ícones gráficos e um desktop, ou através de uma linha de comando. • Interfaces de Programação de Aplicativos: Este componente permite que os desenvolvedores de aplicativos escrevam código modular (parcial). SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 18 CAPÍTULO 2 TIPOS DE SISTEMAS OPERACIONAIS Um sistema operacional é um programa que, após ser carregado na inicialização, controla todos os outros aplicativos. Os programas usam o sistema operacional comunicando-se com ele por meio de interfaces de programação (APIs). Além disso, os usuários podem interagir diretamente com o sistema operacional por meio de uma interface de usuário, como uma linha de comando ou uma interface gráfica de usuário (GUI). A partir desse contexto, de acordo com SILBERSCHATZ (2010), um sistema operacional pode executar os seguintes serviços: • Em um sistema operacional multitarefa, em que vários programas podem ser executados simultaneamente, o sistema operacional determina quais aplicativos são executados, em que ordem e quanto tempo é permitido para cada aplicativo antes que outro seja iniciado. • Ele gerencia o compartilhamento de armazenamento interno entre vários aplicativos. • Ele processa entrada e saída de e para dispositivos de hardware conectados, como discos rígidos, impressoras e monitores. • Ele envia mensagens para cada aplicativo ou usuário interativo (ou para um operador do sistema) sobre o status operacional e quaisquer erros ocorridos. • Ele pode descarregar o gerenciamento de trabalhos em lote (por exemplo, impressão) para que o aplicativo inicial seja liberado desse trabalho. • Em computadores que permitem processamento paralelo, um sistema operacional pode controlar como o programa é particionado para que seja executado em mais de um processador por vez. Todas as principais plataformas de computador (hardware e software) requerem e incluem um sistema operacional. Os sistemas operacionais devem ser projetados com diferentes recursos para atender às necessidades específicas de diferentes formatos. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 19 2.1 Tipos de sistemas operacionais Existem sistemas operacionais para diferentes finalidades. Portanto, não existem apenas os sistemas operacionais conhecidos para PCs e dispositivos portáteis, mas também aqueles para mainframes, servidores, sistemas embarcados, sensores, cartões inteligentes etc. Dentre esses recursos, segundo SILBERSCHATZ (2010), podemos observar os seguintes sistemas operacionais: • Operação de programa único e operação de vários programas: No passado, no máximo um programa ou processo era executado a qualquer momento (tarefa única). Hoje em dia, computadores com desempenho suficiente normalmente funcionam em modo multitarefa. Vários processos são executados simultaneamente, ou pelo menos parecem ser, alternando entre os processos individuais em rápida sucessão. Este procedimento faz sentido, entre outras coisas, porque os processos geralmente esperam por eventos externos (por exemplo, entrada do usuário, de dispositivos periféricos ou outros processos) e bloqueariam o processador durante esse tempo. • Operação de usuário único e operação multiusuário: Mesmo o modo de usuário único é comum apenas com dispositivos de baixo desempenho. Em computadores com capacidade de computação pelo menos normal, há muito nos acostumamos com o modo multiusuário, no qual vários usuários estão ativos no computador ao mesmo tempo. Mesmo que o usuário pense que é o único usando o computador, uma olhada na lista de processos ativos mostra que há muito mais processos em execução do que ele próprio iniciou. Assim que for o caso, o uso dos recursos (agendamento) deve ser resolvido, bem como a questão das permissões de acesso. • Linha de comando e GUI (interface gráfica do usuário): até meados da década de 1970, havia apenas entrada e saída baseadas em caracteres. A primeira interface gráfica do usuário apareceu apenas no Apple Macintosh. Hoje, todos os computadores suficientemente poderosos lidam com entrada e saída de dados meio de interfaces gráficas do usuário. No entanto, os sistemas operacionais mais recentes quase sempre têm uma ou mais ferramentas de linha de comando. Administradores de sistema e usuários avançados gostam especialmente de usá-los para administração do sistema. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 20 Os dois nomes mais citados no campo dos sistemas operacionais são Windows e Linux. No entanto, na realidade, sistemas muito diferentes podem estar ocultos sob o mesmo nome. Existem cinco famílias de sistemas operacionais diferentes sob o nome Windows: MS-DOS, incluindo Windows 9x, Windows CE, Windows Mobile/Phone, Windows Server e Windows NT. Além de não fazer parte de uma grande família de sistemas operacionais (ou seja, aqueles derivados do UNIX, que também incluem macOS e iOS), o próprio Linux gerou diversas variantes próprias. Em particular, o sistema operacional Android mais comum (a partir de 2018) é um derivado do Linux. Com base nesse contexto, segundo SILBERSCHATZ (2010), podemos combinar os seguintes sistemas operacionais: Fonte: O próprio autor. ANOTE ISSO Um sistema operacional é um software que oferece suporte e gerencia todos os programas e aplicativos usados por um computador ou dispositivo móvel. Um sistema operacional usa uma interface gráfica do usuário (GUI), uma combinação de gráficos e texto, que permite interagir com o computador ou dispositivo. Todo computador ou dispositivo inteligente precisa de pelo menos um sistema operacional para executar aplicativos e executar tarefas. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 21 2.1.1 Sistema operacional de compartilhamento de tempo Os sistemas operacionais de compartilhamento de tempo permitem que as pessoas trabalhem simultaneamente em diferentes computadores usando o mesmo sistema operacional. Eles compartilham o tempo de CPU e respostas. Os sistemas operacionais de compartilhamento de tempo podem executar tarefas únicas ou múltiplas. Os sistemas operacionais monotarefa podem executar apenas uma tarefa por vez, enquanto os sistemas multitarefa podem executar várias tarefas ao mesmo tempo. 2.1.2 Sistemas operacionais distribuídos Esses sistemas operacionais usam várias CPUs para permitir que mais de um aplicativo em tempo real e mais de um usuário acessem ao mesmo tempo. As tarefas são distribuídas aos processadores via barramento de alta velocidade ou linhas terrestres. Algumas vantagens desses sistemas operacionais são que eles oferecem melhor usabilidade e reduzem a velocidade de processamento de dados. Segundo SILBERSCHATZ et. al. (2000), um sistema operacional distribuído (DOS - Distributed Operating System) é um tipo essencial de sistema operacional. Os sistemas distribuídos usam muitos processadores centrais para atender a vários aplicativos e usuários em tempo real. Como resultado, as tarefas de processamento de dados são distribuídas entre os processadores. Ele conecta vários computadores através de um único canal de comunicação. Além disso, cada um desses sistemas possui seu próprio processador e memória. Essas CPUs se comunicam por meio de barramentos de alta velocidade ou linhas telefônicas. Os sistemas individuais que se comunicam por meio de um único canal são considerados como uma única entidade. Eles também são conhecidos como sistemas fracamente acoplados. Este sistema operacional consiste em vários computadores,nós e sites unidos por meio de linhas LAN/WAN. Ele permite a distribuição de sistemas completos em alguns processadores centrais e suporta muitos produtos em tempo real e usuários diferentes. Os sistemas operacionais distribuídos podem compartilhar seus recursos de computação e arquivos de E/S enquanto fornecem aos usuários a abstração da máquina virtual. Existem vários exemplos de sistema operacional distribuído. Alguns deles são os seguintes: SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 22 Fonte: o próprio autor. 2.1.3 Sistemas batch multiprogramados Os sistemas batch multiprogramados forneciam um ambiente onde vários recursos do sistema eram usados de forma eficiente, mas não permitiam que o usuário interagisse com os sistemas de computador. O compartilhamento de tempo é uma extensão lógica da multiprogramação. O processador executa várias tarefas com switches com tanta frequência que o usuário pode interagir com cada programa enquanto ele está em execução. Um sistema operacional de compartilhamento de tempo permite que vários usuários compartilhem um computador ao mesmo tempo. Com cada operação ou pedido ao mesmo tempo, o sistema distribuído é reduzido para que apenas uma pequena quantidade de tempo de CPU seja necessária para cada usuário. Se o sistema mudar rapidamente de um usuário para outro, cada usuário terá a impressão de que todo o sistema computacional é dedicado ao seu uso, mesmo que seja compartilhado entre vários usuários (STALLINGS, 1998). Um sistema operacional de compartilhamento de tempo realiza o agendamento de CPU e multiprogramação para dar a cada usuário uma pequena parte de um computador compartilhado ao mesmo tempo. Cada usuário tem pelo menos um programa específico na memória. Esse curto período de tempo durante o qual o usuário recebe a atenção da CPU é chamado de fatia de tempo, slot ou quantum. Isso geralmente é da ordem de 10 a 100 milissegundos. Os sistemas operacionais de compartilhamento de tempo são mais complexos do que os sistemas operacionais de multiprogramação. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 23 Ambos devem ter vários trabalhos na memória ao mesmo tempo, portanto o sistema deve ter gerenciamento e proteção de memória. Para obter um bom tempo de resposta, as tarefas podem precisar ser movidas para dentro e para fora do disco de memória principal, que agora atua como um backup da memória principal. Um método comum para atingir esse objetivo é a memória virtual, uma técnica que permite realizar tarefas que podem não estar completamente na memória (STALLINGS, 1998). 2.1.4 Batch OS Esses sistemas operacionais são caracterizados pelo fato de que o usuário não pode interagir diretamente com o computador. As tarefas são preparadas em uma máquina off-line como se fossem cartões perfurados. Estes são então inseridos no computador. O sistema operacional agrupa as tarefas tematicamente, para que o usuário não possa definir prioridades. 2.1.5 Sistema operacional em tempo real Os sistemas operacionais de tempo real geralmente têm intervalos curtos para calcular as coisas ou responder às entradas em comparação com os processadores online. Esses sistemas operacionais são frequentemente usados em aplicações como controle de tráfego aéreo ou máquinas de ressonância magnética. Existem limites de tempo fixos aqui para evitar uma falha no sistema. Os sistemas operacionais de tempo real podem ser sistemas com limites rígidos de tempo real, que garantem a conclusão de uma tarefa em um determinado tempo, ou com limites flexíveis, nos quais uma tarefa pode ser interrompida para priorizar outra (OLIVEIRA et. al., 2004). ISTO ACONTECE NA PRÁTICA O Redhawk Linux -- um sistema operacional Linux em tempo real para sistemas x86 e ARM64 -- é amplamente usado em aplicativos incorporados que exigem alto desempenho e resposta determinística. O Jetson AGX Orin é um sistema em módulo de inteligência artificial (IA) baseado em ARM64, alimentado pela tecnologia Ampere GPU da NVIDIA com núcleos Tensor, permitindo alto desempenho em um fator de forma pequeno e com baixo SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 24 consumo de energia para dispositivos de ponta inteligentes, incluindo robôs, antenas não tripuladas (UASs) e câmeras inteligentes. De acordo com o anúncio da empresa, o ambiente de desenvolvimento integrado do RedHawk Linux inclui o conjunto de ferramentas NightStar da Concurrent Real- Time -- um conjunto de ferramentas totalmente integrado para depuração, análise e ajuste de aplicativos integrados sensíveis à latência -- que pode ser usado para para trazer aplicativos para o mercado mais rapidamente. Para ler a matéria na íntegra, acesse o seguinte link: https://militaryembedded. com/avionics/software/linux-rtos-from-concurrent-real-time-launches-to-support- jetson-agx-orin-platform. 2.1.6 Sistema operacional de rede Esses sistemas operacionais fornecem ao servidor a capacidade de gerenciar usuários, tarefas, dados, segurança, aplicativos e outras funções de rede. O principal objetivo desses sistemas operacionais é que os usuários possam acessar impressoras e arquivos compartilhados independentemente do PC em que estejam na rede. Alguns desses sistemas operacionais são Microsoft Windows Server 2008, Mac OS X, BSD, UNIX e Linux (OLIVEIRA et. al., 2004). Aprender mais sobre os diferentes tipos de sistemas operacionais é crucial para qualquer pessoa interessada em computadores e programação ou desenvolvimento de software, pois fornece a base perfeita para experimentar coisas novas e desenvolver suas próprias habilidades. 2.1.7 Sistemas Operacionais de Servidor Quando se trata de sistemas operacionais de servidor, o foco está principalmente em três sistemas operacionais: “Microsoft Windows”, Unix e Linux. No entanto, é difícil dar uma resposta geral sobre se um ou outro é mais adequado para uma rede ou centro de dados. As vantagens mais importantes do Windows na operação do servidor são a usabilidade nativa e os aplicativos que requerem um ambiente Windows ou são difíceis de emular. Além disso, muitos componentes já estão integrados no sistema e a maioria dos requisitos de software usuais são cobertos por padrões da Microsoft ou de outros fornecedores. Por outro lado, há muitas vantagens em um sistema baseado em Linux. Acima de tudo, isso inclui código aberto e, portanto, a capacidade de adaptá-lo e alterá-lo a qualquer momento, além da utilização do Linux ser gratuita. Além disso, o Linux oferece uma grande comunidade de código aberto com muitas inovações e atualizações de segurança muito rápidas. https://militaryembedded.com/avionics/software/linux-rtos-from-concurrent-real-time-launches-to-support-jetson-agx-orin-platform https://militaryembedded.com/avionics/software/linux-rtos-from-concurrent-real-time-launches-to-support-jetson-agx-orin-platform https://militaryembedded.com/avionics/software/linux-rtos-from-concurrent-real-time-launches-to-support-jetson-agx-orin-platform SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 25 Existem soluções de software de código aberto profissionais e gratuitas para quase todos os aplicativos de servidor. Muitos aplicativos Linux são mais eficientes, mais enxutos e mais rápidos do que os da concorrência. No entanto, o Linux requer significativamente mais know-how (conhecimento específico e técnico). Porque o Linux é estruturado de forma diferente em comparação aos servidores Windows e, portanto, é muito mais difícil de usar nativamente (OLIVEIRA et. al., 2004). A partir desse contexto, segundo OLIVEIRA et. al. (2004), os sistemas operacionais Unix continuam a desempenhar um papel importante nos data centers. Eles são essencialmente caracterizados pela estabilidade técnica e confiabilidade. Unix e derivados do Unix, como AIX e HP-UX, provaram seuvalor aqui - e os clientes ainda se apegam ao antigo sistema operacional da Sun, Solaris. Os sistemas operacionais Unix não são tão vulneráveis e vulneráveis em comparação com o Microsoft Windows. Enquanto isso, sistemas de código aberto para data centers, como os da Mesosphere, também estão enriquecendo o mercado. Os DC/OS (Data Center Operating Systems) são plataformas de código aberto para o desenvolvimento, operação e dimensionamento de aplicativos corporativos. Além disso, eles devem facilitar muito a operação de contêineres e aplicativos distribuídos. ISTO ESTÁ NA REDE O Windows é um sistema operacional bem conhecido com uma longa história. Na maioria dos computadores em uso hoje, é um dos sistemas operacionais mais prevalentes. A Microsoft criou a plataforma do sistema operacional Windows Server para lidar com gerenciamento, aplicativos, armazenamento de dados e comunicações em nível empresarial. Versões anteriores do Windows Server priorizavam rede, estabilidade, segurança e diferentes aprimoramentos do sistema de arquivos. A Microsoft certificou-se de incorporar sua Active Server Page como um dos recursos de seu produto (ASP). Leva apenas alguns cliques para usar este ASP para criar uma nova página ASP. Você pode começar instantaneamente a adicionar material ao site sem digitar uma palavra. Esta é uma vantagem significativa em comparação com outros sistemas operacionais que exigem codificação. Você pode ter certeza de que, com a ajuda desse recurso, poderá criar um site dinâmico que atenda às necessidades do usuário. Para ler a matéria na íntegra, acesse o seguinte link: https://militaryembedded. com/avionics/software/linux-rtos-from-concurrent-real-time-launches-to-support- jetson-agx-orin-platform. https://militaryembedded.com/avionics/software/linux-rtos-from-concurrent-real-time-launches-to-support-jetson-agx-orin-platform https://militaryembedded.com/avionics/software/linux-rtos-from-concurrent-real-time-launches-to-support-jetson-agx-orin-platform https://militaryembedded.com/avionics/software/linux-rtos-from-concurrent-real-time-launches-to-support-jetson-agx-orin-platform SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 26 2.2 Classificação dos sistemas operacionais A primeira geração de computadores (aprox. 1945-1955) não tinha sistema operacional. A programação ocorria de forma direta (breadboard, fita perfurada, cartão perfurado). A segunda geração (1955-1965) usou o processamento em lote. Um trabalho é montado de forma fechada, consistindo de um programa, dados e instruções de controle. O usuário só obtém os resultados após a conclusão do processamento (geralmente como uma impressão). O termo “processamento em lote” vem simplesmente do baralho de cartões perfurados que alguém escaneou (TANENBAUM e WOODHULL, 2008). As propriedades típicas são os seguintes elementos: Fonte: o próprio autor. A terceira geração (aprox. 1965-1980) domina o processamento de diálogos. O usuário se comunica com o computador por meio do teclado e da tela, com o qual pode iniciar, monitorar e influenciar programas. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 27 Fonte: o próprio autor. A quarta geração (por volta de 1975) é um sistema de diálogo como o conhecemos hoje. Primeiramente, o diálogo acontecia em modo texto via teclado e tela de texto. Interfaces gráficas de usuário foram posteriormente desenvolvidas (GEM pela Digital Research, Apple OS em “Lisa” e “Macintosh”, Windows pela Microsoft e “X” no UNIX). 2.2.1 Recursos do sistema operacional De acordo com TANENBAUM e WOODHULL (2008), podemos relacionar quatro funções principais de um sistema operacional, como segue a seguir: SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 28 Gerenciamento de memória: À medida que os sistemas operacionais evoluem, o usuário pode executar várias tarefas simultaneamente. Para manter as coisas funcionando sem problemas e melhorar a multitarefa, o sistema operacional deve gerenciar a memória da maneira mais eficiente possível. Gerenciamento da CPU: quando um usuário deseja realizar várias tarefas ao mesmo tempo, é tarefa do sistema operacional gerenciar e agendar os processos e entregá- los à CPU para processamento. Gerenciamento de dispositivos: O sistema operacional é responsável apenas pelo gerenciamento dos dispositivos de entrada/saída. Se algo não for suportado, o sistema operacional não o reconhecerá. O sistema operacional permite conectar ou desconectar facilmente qualquer dispositivo de E/S. Gerenciamento de documentos: O sistema operacional define a estrutura de como os arquivos e pastas são organizados. Quanto mais eficientemente for organizado, mais fácil será para o usuário acessar os arquivos e recursos armazenados. ISTO ESTÁ NA REDE Um exemplo de recursos do sistema em funcionamento pode ser visto quando você abre qualquer programa em seu computador. Quando um aplicativo é carregado, o sistema operacional aloca uma certa quantidade de memória e tempo de CPU de que o aplicativo precisa. Ele faz isso usando os recursos do sistema atualmente disponíveis. Para ler a matéria na íntegra, acesse o seguinte link: https:// militaryembedded.com/avionics/software/linux-rtos-from-concurrent-real- time-launches-to-support-jetson-agx-orin-platform. https://militaryembedded.com/avionics/software/linux-rtos-from-concurrent-real-time-launches-to-support-jetson-agx-orin-platform https://militaryembedded.com/avionics/software/linux-rtos-from-concurrent-real-time-launches-to-support-jetson-agx-orin-platform https://militaryembedded.com/avionics/software/linux-rtos-from-concurrent-real-time-launches-to-support-jetson-agx-orin-platform SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 29 CAPÍTULO 3 ARQUITETURA DE SISTEMAS OPERACIONAIS Os principais componentes de software de um sistema operacional são chamados coletivamente de kernel. O kernel tem acesso ilimitado a todos os recursos do sistema. Nos primeiros sistemas monolíticos, todos os componentes do sistema operacional estavam contidos no kernel, que se comunicava diretamente com todos os outros componentes e permitia acesso irrestrito ao sistema. Embora isso torne o sistema operacional muito eficiente, também significa que os erros são mais difíceis de isolar, aumentando o risco de corrupção por código ruim ou malicioso (ANDLEIGH, 1990). À medida que os sistemas operacionais se tornaram maiores e mais complexos, essa abordagem foi amplamente abandonada em favor de uma abordagem modular que agrupava componentes com funcionalidade semelhante em camadas para ajudar os projetistas de sistemas operacionais a gerenciar a complexidade do sistema. Nesse tipo de arquitetura, cada camada se comunica apenas com as camadas imediatamente acima e abaixo dela, e as camadas de nível inferior fornecem serviços às de nível superior usando uma interface que oculta sua implementação. A modularidade dos sistemas operacionais em camadas permite que a implementação de cada camada seja modificada sem exigir nenhuma modificação nas camadas adjacentes. Embora essa abordagem modular imponha estrutura e consistência ao sistema operacional, simplificando a depuração e a modificação, uma solicitação de serviço de um processo do usuário pode passar por muitas camadas do software do sistema antes de ser atendido e o desempenho se compara desfavoravelmente ao de um kernel monolítico. Além disso, como todas as camadas ainda têm acesso irrestrito ao sistema, o kernel ainda é suscetível a códigos errôneos ou maliciosos. Muitos dos sistemas operacionais atuais, incluindo Microsoft Windows e Linux, implementam algum nível de camadas. De acordo com SILBERSCHATZ (2010), os sistemas operacionais são a espinha dorsal dos dispositivos de computação modernos, de smartphones a servidores. No SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUEDOS SANTOS FACULDADE CATÓLICA PAULISTA | 30 entanto, nem todos são criados iguais e diferentes arquiteturas do sistema operacional podem afetar significativamente o desempenho, a flexibilidade e a segurança do sistema. Ao longo desse capítulo, exploraremos diferentes arquiteturas de sistema operacional e discutiremos os princípios fundamentais de design de cada arquitetura, vantagens e desvantagens e alguns exemplos de sistemas operacionais que usam cada abordagem. 3.1 Arquitetura monolítica Uma arquitetura de sistema operacional monolítica inclui todas as funcionalidades do sistema em um único módulo, com o kernel e os drivers de dispositivo como componentes-chave. Nessa arquitetura, o sistema operacional como um todo está trabalhando no espaço do kernel. O kernel controla diretamente todo o gerenciamento de arquivos, memória, dispositivos e processos. 3.1.1 Vantagens da Arquitetura Monolítica De acordo com DEITEL et. al. (2005), dentre as diversas vantagens da arquitetura monolítica, podemos relacionar os seguintes elementos: Fonte: o próprio autor. Rápido: os sistemas operacionais monolíticos são rápidos. Como tal, melhora o agendamento de processos, gerenciamento de memória, gerenciamento de arquivos e muito mais. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 31 Interação direta de componentes: todos os componentes e o kernel podem se comunicar diretamente. Também pode ajudar na velocidade. Fácil e Simples: Todos os componentes estão no mesmo espaço de endereço, então a estrutura é direta. Melhor para tarefas menores: a arquitetura monolítica é ideal para pequenas tarefas. 3.1.2 Desvantagens da Arquitetura Monolítica: De acordo com TANENBAUM (2003), dentre as diversas desvantagens da arquitetura monolítica, podemos relacionar os seguintes elementos: Fonte: o próprio autor. Propenso a falhas: uma arquitetura monolítica pode introduzir erros em seu sistema. Isso ocorre porque os programas do usuário usam o mesmo espaço de endereço que o kernel. Difícil de atualizar: O sistema operacional contém todos os ícones do sistema operacional em uma grande seção. Isso torna difícil adicionar ou remover recursos de um sistema operacional. Não portátil: o código escrito em um sistema operacional é muito difícil de portar ou transferir para outro sistema operacional. Isso ocorre porque todo o código é executado em um grande bloco e tudo precisa ser movido. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 32 Finalmente, podemos dar alguns exemplos de sistemas operacionais monolíticos: Windows, Linux, Mac OS etc. 3.2 Arquitetura de Microkernel A arquitetura do microkernel inclui apenas as principais funções, como memória e gerenciamento de processos no kernel. Nesta arquitetura, o gerenciamento de arquivos e o gerenciamento de entrada-saída estão incluídos no espaço do usuário. 3.2.1 Vantagens da Arquitetura de Microkernel De acordo com DEITEL et. al. (2005), dentre as diversas vantagens da arquitetura de microkernel, podemos relacionar os seguintes elementos: Fonte: o próprio autor. Desempenho: A arquitetura do Microkernel é compacta e isolada, pode ter um desempenho melhor. Segurança: Os microkernels são seguros, pois apenas são fornecidos os componentes que, de outra forma, perturbariam a funcionalidade do sistema. Escalável: é facilmente expansível em comparação com um kernel monolítico. Modularidade: Os microkernels são modulares e os vários módulos podem ser trocados, recarregados e modificados sem afetar o Kernel. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 33 Quando comparado aos sistemas monolíticos, há menos travamentos do sistema. A interface do Microkernel auxilia na implementação de uma estrutura de sistema mais modular. ISTO ESTÁ NA REDE Os microkernels indiscutivelmente se enquadram entre uma arquitetura baseada em microsserviços e uma monolítica - um microkernel contém apenas a quantidade necessária de software para implementar um sistema operacional. Uma arquitetura monolítica é fácil de construir porque todas as peças estão juntas. No entanto, ele deve ser testado como uma única unidade, o que torna a depuração e as atualizações potencialmente dolorosas. Os microsserviços são o oposto. Eles são fáceis de depurar, isolar e implantar, mas há muitas partes móveis para gerenciar. Com uma arquitetura de microkernel, há um núcleo e plugins. O aplicativo principal é centralizado, como um monólito. E a maior parte do desenvolvimento adicional é feito por meio de plug-ins que adicionam recursos ou modificam a funcionalidade existente. Geralmente, esses plug-ins não se conhecem e não se comunicam. No entanto, o microkernel fornece comunicação entre processos -- uma maneira de os processos se comunicarem. Para ler a matéria na íntegra, acesse o seguinte link: https://www.techtarget. com/searchapparchitecture/tip/What-is-a-microkernel-architecture-and- is-it-right-for-you#:~:text=A%20microkernel%20architecture%20is%20 called,can%20offer%20software%20lifecycle%20benefits. 3.2.2 Desvantagens da arquitetura de microkernel De acordo com OLIVEIRA et. al. (2004), dentre as diversas desvantagens da arquitetura de microkernel, podemos relacionar os seguintes elementos: SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 34 Fonte: o próprio autor. Sobrecarga de desempenho: A sobrecarga de desempenho ocorre devido à necessidade de comunicação entre processos (módulos centrais). Suporte de hardware limitado: a arquitetura de microkernel pode ser mais difícil de portar para novas plataformas de hardware. Custo mais alto: Comparado a um sistema monolítico, a execução de serviços em um sistema Microkernel é cara. Finalmente, podemos listar alguns exemplos de sistemas operacionais baseados em microkernel: • MINIX; • QNX; • GNU HurdGenericName. 3.3 Arquitetura Híbrida A arquitetura híbrida é uma abordagem combinada das arquiteturas de microkernel e kernel monolítico. Tem um design como o kernel monolítico. É rápido, como o kernel monolítico. Embora herde a modularidade e a estabilidade da arquitetura do microkernel. 3.3.1 Vantagens da Arquitetura Híbrida De acordo com SILBERSCHATZ (2010), dentre as diversas vantagens da arquitetura híbrida, podemos relacionar os seguintes elementos: SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 35 Fonte: o próprio autor. Flexibilidade: É flexível projetar uma arquitetura híbrida. Melhor desempenho: a arquitetura híbrida oferece melhor desempenho, pois possui os recursos da arquitetura monolítica e de microkernel. Segurança aprimorada: a arquitetura híbrida melhora a segurança do sistema isolando serviços críticos. Maior suporte de hardware: A arquitetura híbrida pode fornecer maior suporte de hardware do que uma arquitetura de microkernel pura. 3.3.2 Desvantagens da arquitetura híbrida De acordo com DEITEL et. al. (2005), dentre as diversas desvantagens da arquitetura híbrida, podemos relacionar os seguintes elementos: Fonte: o próprio autor. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 36 Complexidade: A inclusão de arquitetura monolítica e de microkernel aumenta a complexidade. Custo mais alto: a arquitetura híbrida pode ser mais cara de desenvolver do que uma arquitetura de microkernel pura devido à necessidade de mecanismos de comunicação entre processos mais complexos. Exemplos de sistemas operacionais baseados em uma arquitetura híbrida são: • Windows NT; • Mac OS; • IBM AIX; • Solaris. 3.4 Arquitetura em camadas Uma estrutura de sistema operacional em camadas é uma maneira de organizar os vários componentes de um sistema operacional como camadas separadas. Cada camada é responsável por funções específicas e se comunica com a camada acima e abaixo dela. A camadamais baixa é a camada de hardware, seguida pela camada de kernel, a interface de chamada do sistema e a camada de shell. Essa estrutura ajuda a modularizar o sistema operacional e facilita a manutenção, desenvolvimento e depuração. 3.4.1 Vantagens da Arquitetura em Camadas De acordo com TANENBAUM e WOODHULL (2008), dentre as diversas vantagens da arquitetura em camadas, podemos relacionar os seguintes elementos: Fonte: o próprio autor. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 37 Modularidade: Essa arquitetura promove a modularidade porque cada camada cumpre apenas as funções atribuídas. Depuração fácil: é relativamente simples depurar porque as camadas são discretas. Se ocorrer um erro na camada de escalonamento da CPU, o desenvolvedor pode apenas depurar essa camada, ao contrário de um sistema Monolítico onde todos os serviços estão presentes ao mesmo tempo. Atualização fácil: uma alteração feita em uma camada não terá efeito nas outras camadas. Sem acesso direto ao hardware: a camada de hardware é uma camada interna do projeto. Assim, ao contrário de um sistema simples onde o usuário tem acesso direto ao hardware, o usuário pode acessar os serviços de hardware, mas não pode modificar ou acessar diretamente os recursos. Abstração: Cada nível se concentra em suas próprias tarefas. Como resultado, as funções e implementações das outras camadas são abstratas. 3.4.2 Desvantagens da arquitetura em camadas De acordo com SILBERSCHATZ et. al. (2000), dentre as diversas desvantagens da arquitetura em camadas, podemos relacionar os seguintes elementos: Fonte: o próprio autor. Implementação complexa e cuidadosa: Como uma camada pode usar os serviços dos níveis abaixo dela, as camadas devem ser organizadas com cuidado. A camada SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 38 de gerenciamento de memória, por exemplo, é usada pela camada de armazenamento de backup. Como resultado, ele deve ser colocado atrás da camada de gerenciamento de memória. Como resultado, a modularidade significativa leva a uma implementação complicada. Mais lento na execução: Quando uma camada deseja se comunicar com outra camada, ela envia uma requisição que deve percorrer as camadas entre as duas camadas para ser atendida. Com isso, ao contrário do sistema Monolítico, que é mais rápido, ele aumenta o tempo de resposta. Como saída, aumentar o número de camadas pode resultar em um design ineficiente. A partir desse contexto, podemos relacionar alguns exemplos de sistemas operacionais baseados em camadas: • UNIX; • THEOS; • VMS. 3.5 Arquitetura da máquina virtual Uma arquitetura de máquina virtual é um tipo de arquitetura de sistema operacional que usa vários sistemas operacionais em uma única máquina física. Essa abordagem oferece flexibilidade e permite o uso eficiente dos recursos de hardware, mas também pode introduzir custos e complexidade adicionais. 3.5.1 Vantagens da arquitetura de máquina virtual De acordo com OLIVEIRA et. al. (2004), dentre as diversas vantagens da arquitetura de máquina virtual, podemos relacionar os seguintes elementos: SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 39 Fonte: o próprio autor. Utilização eficiente de recursos: a arquitetura da máquina virtual permite que vários sistemas operacionais sejam executados simultaneamente em uma única máquina física, melhorando a utilização dos recursos de hardware. Segurança aprimorada: essa arquitetura oferece maior segurança porque cada máquina virtual é isolada uma da outra. Easy Recovery: Como esta arquitetura utiliza máquinas virtuais, a recuperação do sistema é fácil. 3.5.2 Desvantagens da arquitetura da máquina virtual De acordo com DEITEL et. al. (2005), dentre as diversas desvantagens da arquitetura de máquina virtual, podemos relacionar os seguintes elementos: Fonte: o próprio autor. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 40 Sobrecarga: a arquitetura da máquina virtual apresenta sobrecarga devido à necessidade de camadas de software adicionais, como o hipervisor. Carga de trabalho: dependendo da carga de trabalho, uma máquina virtual pode ser afetada por outras máquinas virtuais em execução. Design Complexo: A arquitetura da máquina virtual pode ser complexa de projetar e manter devido à necessidade de várias camadas de software. Isso pode aumentar o tempo de desenvolvimento e os custos de manutenção. A partir desse contexto, podemos relacionar alguns exemplos de sistemas operacionais baseados em máquinas virtuais: • VMware ESXi; • Oracle VirtualBox; • Microsoft Hyper-V. ISTO ACONTECE NA PRÁTICA De acordo com NJUGUNA (2023), com o conceito de supercloud ganhando força, algumas pessoas acreditam que se trata de uma arquitetura que contém várias complexidades, enquanto outras pensam que é uma plataforma que oferece serviços consistentes de forma programática. No entanto, o supercloud deve ser considerado como um sistema operacional que abriga características arquitetônicas e de plataforma. Como as nuvens híbridas têm sua própria arquitetura, a supernuvem ajudará a resolver a contradição entre custo e desempenho. Portanto, o supercloud como sistema operacional ajudará a domar as complexidades da nuvem (NJUGUNA, 2023). Para ler a matéria na íntegra, acesse o seguinte link: https://siliconangle. com/2023/01/20/supercloud-debate-platform-architecture-operating- system-supercloud2/. https://siliconangle.com/2023/01/20/supercloud-debate-platform-architecture-operating-system-supercloud2/ https://siliconangle.com/2023/01/20/supercloud-debate-platform-architecture-operating-system-supercloud2/ https://siliconangle.com/2023/01/20/supercloud-debate-platform-architecture-operating-system-supercloud2/ SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 41 CAPÍTULO 4 PROGRAMAÇÃO CONCORRENTE Quando você e seus colegas fazem login em terminais conectados ao mesmo sistema de compartilhamento de tempo, cada um de vocês trabalha separadamente, mas todos estão usando o mesmo computador. Cada um de vocês tem a sensação de que o computador está trabalhando apenas em sua tarefa, mas muitos de vocês estão trabalhando simultaneamente. Como esse aparente paradoxo é possível? A ilusão de que você está sozinho no computador de tempo compartilhado é causada por uma combinação de computadores rápidos e programação inteligente. Suponha que você esteja usando o computador para editar um programa ou ler um e-mail. Você lê e digita na velocidade humana. Por exemplo, um digitador pode digitar 100 palavras por minuto, ou - em uma média de seis caracteres por palavra - cerca de 10 caracteres por segundo. No décimo de segundo entre duas teclas pressionadas, um computador moderno pode executar centenas de milhares de instruções de máquina. Se essas instruções de máquina “extras” pudessem ser usadas produtivamente, o computador teria muito tempo entre as teclas digitadas para atender a outros usuários humanos. Não é incomum um computador moderno de tempo compartilhado lidar com 100 ou mais usuários simultâneos, cada um trabalhando em velocidade humana. Gerenciar todas essas instruções e usuários faz parte da responsabilidade de um sistema operacional moderno. Um sistema operacional é, como você já sabe, apenas um programa sofisticado; na verdade, é um programa concorrente, capaz de gerenciar muitos dispositivos e usuários humanos para dar a ilusão de simultaneidade (TANENBAUM, 2003). Alguns computadores com tempo compartilhado consistem em uma única CPU; outros consistem em um conjunto de CPUs idênticas. Com mais de uma CPU, os programas podem ser executados em paralelo, ou seja, literalmente ao mesmo tempo. Com uma única CPU, nenhuma execução paralela real é possível, mas essa CPU pode ser compartilhada de tal forma que muitos programas parecemestar sendo executados em paralelo. A programação concorrente é a criação de programas que consistem SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 42 em segmentos com potencial para execução paralela; dependendo do número real de CPUs disponíveis, a execução de um programa concorrente pode ser literalmente paralela, totalmente compartilhada ou alguma combinação dos dois. 4.1 Conhecendo sobre a Programação Concorrente Os fluxos de controle lógico são concorrentes se eles se sobrepõem no tempo. Este fenômeno, conhecido como simultaneidade, aparece em muitos níveis diferentes de um sistema de computador. Os manipuladores de hardware de exceção, processos e manipuladores de sinal Unix são exemplos familiares. De acordo com TANENBAUM (2003), a simultaneidade pode ser vista principalmente como um mecanismo que o kernel do sistema operacional usa para executar vários programas aplicativos. Mas a simultaneidade não se limita apenas ao kernel. Pode desempenhar um papel importante também em programas aplicativos. Por exemplo, os manipuladores de sinal Unix permitem que aplicativos para responder a eventos assíncronos, como o usuário digitando ctrl-c ou o programa acessando uma área indefinida de memória virtual. A simultaneidade no nível do aplicativo também é útil de outras maneiras: Acessando dispositivos de E/S lentos. Quando um aplicativo está aguardando a chegada de dados de um dispositivo de E/S lento como um disco, o kernel mantém a CPU ocupada executando outros processos. Aplicações individuais podem explorar a simultaneidade de maneira semelhante, sobrepondo trabalho útil com solicitações de E/S. Interagir com humanos. As pessoas que interagem com computadores exigem a capacidade de executar várias tarefas ao mesmo tempo. Por exemplo, eles podem querer redimensionar uma janela enquanto imprimem um documento. Os sistemas de janelas modernos usam simultaneidade para fornecer esse recurso. Cada vez que o usuário solicita alguma ação (digamos, clicando com o mouse), um fluxo lógico concorrente separado é criado para executar a ação. Reduzindo a latência ao adiar o trabalho. Às vezes, os aplicativos podem usar simultaneidade para reduzir a latência de certas operações, adiando outras operações e executando-as simultaneamente. Por exemplo, um alocador de armazenamento dinâmico pode reduzir a latência de operações gratuitas individuais adiando a união para um fluxo de “união” simultâneo que é executado em uma prioridade mais baixa, absorvendo o excesso de ciclos de CPU à medida que se tornam disponíveis. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 43 Atendimento a vários clientes de rede. Os servidores de rede iterativos são irreais, porque eles só podem atender um cliente por vez. Assim, um único cliente lento pode negar o serviço a todos os outros clientes. Para um servidor real que pode atender centenas ou milhares de clientes por segundo, não é aceitável permitir que um cliente lento negue serviço aos outros. Uma abordagem melhor seria construir um servidor simultâneo que crie um fluxo lógico separado para cada cliente. Isso permite que o servidor consiga atender a vários clientes simultaneamente e impede que clientes lentos monopolizem o servidor. Computação em paralelo em máquinas multi-core. Muitos sistemas modernos são equipados com processadores multi-core que contêm várias CPUs. Os aplicativos que são particionados em fluxos simultâneos geralmente executam mais rápido em máquinas com vários núcleos do que em máquinas com um único processador porque os fluxos são executados em paralelo em vez de serem intercalados. Os aplicativos que usam simultaneidade em nível de aplicativo são conhecidos como programas simultâneos. De acordo com TANENBAUM e WOODHULL (2008), a operação moderna de sistemas fornece três abordagens básicas para a construção de programas concorrentes: • Processos. Com essa abordagem, cada fluxo de controle lógico é um processo agendado e mantido pelo kernel. Como os processos têm espaços de endereços virtuais separados, os fluxos que desejam se comunicar entre si devem usar algum tipo de mecanismo de comunicação entre processos explícitos (IPC). • Multiplexação de E/S. Esta é uma forma de programação concorrente em que os aplicativos agendam explicitamente seus próprios fluxos lógicos no contexto de um único processo. Os fluxos lógicos são modelados como máquinas de estado que o programa principal transita explicitamente de estado para estado como resultado da chegada de dados no arquivo descritores. Como o programa é um processo único, todos os fluxos compartilham o mesmo espaço de endereço. • Tópicos. Threads são fluxos lógicos executados no contexto de um único processo e são agendados pelo núcleo. Você pode pensar em threads como um processo híbrido das outras duas abordagens, agendadas pelo kernel como fluxos de processo e compartilhando o mesmo espaço de endereço virtual como fluxos de multiplexação de E/S. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 44 4.2 Programação Concorrente com Processos A maneira mais simples de construir um programa concorrente é com processos, usando funções familiares como fork, exec e waitpid. Por exemplo, uma abordagem natural para construir um servidor concorrente é aceitar as solicitações de conexão no pai e, em seguida, criar um processo filho para atender a cada novo cliente. Título: Representação da Programação Concorrente com Processos Fonte: https://br.freepik.com/vetores-gratis/ilustracao-com-conceito-de-multitarefa_6555998.htm#query=Programa%C3%A7%C3%A3o%20Concorrente%20 sistema%20operacional&position=14&from_view=search&track=ais Para ver como isso pode funcionar, suponha que temos dois clientes e um servidor que está ouvindo a conexão e as solicitações em um descritor de escuta. Agora suponha que o servidor aceite uma solicitação de conexão de um dos clientes e retorne um descritor conectado. Depois de aceitar a solicitação de conexão, o servidor bifurca um filho, que obtém uma cópia completa do servidor (tabela de descritores). O filho fecha sua cópia do descritor de escuta e o pai fecha sua cópia do descritor conectado, pois eles não são mais necessários. Como os descritores conectados no pai e no filho possuem cada ponto para a mesma entrada da tabela de arquivos, é crucial que o pai feche sua cópia do descritor conectado. Caso contrário, a entrada da tabela de arquivos para o descritor conectado nunca será liberada e o vazamento de memória resultante acabará por consumir a memória disponível e travar o sistema. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 45 4.2.1 Prós e Contras dos Processos Os processos têm um modelo limpo para compartilhar informações de estado entre pais e filhos: tabelas de arquivos são os espaços compartilhados e de endereço do usuário não são. Ter espaços de endereços separados para processos é uma vantagem e uma desvantagem. É impossível para um processo sobrescrever acidentalmente a memória virtual de outro processo, que elimina muitas falhas confusas – uma vantagem óbvia. Por outro lado, espaços de endereços separados tornam mais difícil para os processos compartilhar as informações de estado. Para compartilhar informações, eles devem usar mecanismos IPC (Inter-Process Communication - Comunicações entre processos) explícitos. Outra desvantagem dos projetos baseados em processos é que eles tendem a ser mais lentos porque a sobrecarga para controle de processo e IPC é alto. 4.2.2 Programação simultânea com multiplexação de E/S Suponha que você seja solicitado a escrever um servidor de eco que também possa responder a comandos interativos que o usuário, como por exemplo para os tipos de entrada padrão (TANENBAUM, 2003). Nesse caso, o servidor deve responder a dois eventos de E/S independentes: Fonte: o próprio autor.A partir desse cenário, podemos refletir sobre a seguinte pergunta: “Qual evento esperamos realizar primeiro?” Nenhuma das opções é ideal. Se estivermos esperando uma solicitação de conexão em aceitar, não podemos responder a comandos de entrada. Da mesma forma, se SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 46 estivermos esperando por um comando de entrada em leitura, não podemos responder a nenhuma solicitação de conexão. Uma solução para esse dilema é uma técnica chamada multiplexação de E/S. A ideia básica é usar a função select para pedir ao kernel que suspenda o processo, retornando o controle para o aplicativo somente após um ou mais eventos de E/S, como nos exemplos a seguir: Fonte: o próprio autor. ISTO ESTÁ NA REDE A multiplexação de E/S é a capacidade de executar operações de E/S em vários descritores de arquivo. Operações de entrada como ler, aceitar e chamadas para recebimento de mensagens são bloqueadas quando não há dados de entrada. Portanto, se uma chamada de entrada for feita e ela bloqueada, podemos perder dados de outros descritores de arquivo. Para contornar isso, são fornecidas chamadas de multiplexação de E/S. Um processo é bloqueado em uma chamada de multiplexação de E/S. Quando essa chamada retorna, o processo recebe um conjunto de descritores de arquivo que estão prontos para E/S. E o processo pode fazer E/S nesses descritores de arquivo antes de ir para a próxima iteração da chamada de multiplexação de E/S. Para ler a matéria na íntegra, acesse o seguinte link: https://www. softprayog.in/programming/io-multiplexing-select-poll-epoll-in-linux. 4.2.3 Um servidor controlado por eventos simultâneos baseado em multiplexação de E/S A multiplexação de E/S pode ser usada como base para programas simultâneos orientados a eventos, onde os fluxos progridem como resultado de certos eventos. A https://www.softprayog.in/programming/io-multiplexing-select-poll-epoll-in-linux https://www.softprayog.in/programming/io-multiplexing-select-poll-epoll-in-linux SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 47 ideia geral é modelar fluxos lógicos como máquinas de estado. Informalmente, um estado de máquina é uma coleção de estados, eventos de entrada e transições que mapeiam estados e eventos de entrada para estados (TANENBAUM e WOODHULL, 2008). Título: Representação de um servidor controlado por eventos simultâneos baseado em multiplexação de E/S Fonte: https://br.freepik.com/vetores-gratis/ilustracao-do-conceito-abstrato-do-data-center_12290884.htm#query=servidor%20 concorrente&position=31&from_view=search&track=ais De acordo com TANENBAUM e WOODHULL (2008), cada transição mapeia um par (estado de entrada, evento de entrada) para um estado de saída. Um self-loop é uma transição entre o mesmo estado de entrada e saída. As máquinas de estado são normalmente desenhadas como gráficos direcionados, onde os nós representam os estados, arcos direcionados representam transições e rótulos de arco representam eventos de entrada. Uma máquina de estado começa com a execução em algum estado inicial. Cada evento de entrada aciona uma transição do estado atual para o próximo estado. 4.3 Programação Concorrente com Threads Cada processo tem seu próprio espaço de endereço privado, o que dificulta o compartilhamento de dados pelos fluxos. Com a segunda abordagem, criamos nossos próprios fluxos lógicos e usamos a multiplexação de E/S para agendar explicitamente os fluxos. Como há apenas um processo, os fluxos compartilham todo o espaço de endereço. Um thread é um fluxo lógico executado no contexto de um processo. SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 48 De acordo com SILBERSCHATZ (2010), os sistemas modernos nos permitem escrever programas que tenham vários threads executando simultaneamente em um único processo. As threads são agendadas automaticamente pelo núcleo. Cada encadeamento tem seu próprio contexto de encadeamento, incluindo um ID de encadeamento inteiro exclusivo, pilha, ponteiro, contador de programa, registradores de uso geral e códigos de condição. Todos os threads em execução em um processo compartilham todo o espaço de endereço virtual desse processo. ANOTE ISSO Fluxos lógicos baseados em threads combinam qualidades de fluxos baseados em processos e multiplexação de E/S. Como processos, os encadeamentos são agendados automaticamente pelo kernel e são conhecidos pelo kernel por um ID inteiro. Como os fluxos baseados na multiplexação de E/S, vários threads são executados no contexto de um único processo e, portanto, compartilham todo o conteúdo do espaço de endereço virtual do processo, incluindo seu código, dados, heap, bibliotecas compartilhadas e arquivos. ISTO ACONTECE NA PRÁTICA Pense em um único processador que está executando seu IDE. Digamos que você edite um de seus arquivos de código e clique em salvar. Quando você clicar em salvar, ele iniciará um fluxo de trabalho que fará com que os bytes sejam gravados no disco físico subjacente. No entanto, a E/S é uma operação cara e a CPU ficará ociosa enquanto os bytes estão sendo gravados no disco. Enquanto a E/S ocorre, a CPU ociosa pode trabalhar em algo útil e é aqui que os encadeamentos entram - o encadeamento da E/S é trocado e o encadeamento da interface do usuário é agendada na CPU para que, se você clicar em outro lugar na tela, seu IDE ainda esteja responsivo e não parece travado ou congelado. Os threads podem dar a ilusão de multitarefa, mesmo que em um determinado momento a CPU esteja executando apenas um thread. Cada thread obtém uma fatia de tempo na CPU e, em seguida, também é trocada. Ele inicia uma tarefa, que requer espera e não utiliza a CPU ou completa seu intervalo de tempo na CPU. Para ler a matéria na íntegra, acesse o seguinte link: https://www.educative.io/ blog/multithreading-and-concurrency-fundamentals. https://www.educative.io/blog/multithreading-and-concurrency-fundamentals https://www.educative.io/blog/multithreading-and-concurrency-fundamentals SISTEMAS OPERACIONAIS PROF. MARCELO HENRIQUE DOS SANTOS FACULDADE CATÓLICA PAULISTA | 49 4.4 Processos simultâneos no sistema operacional O processamento simultâneo é um modelo de computação no qual vários processadores executam instruções simultaneamente para um melhor desempenho. A simultaneidade significa, que ocorre quando algo mais acontece. As tarefas são divididas em subtipos, que são então atribuídos a diferentes processadores para serem executados simultaneamente, de forma sequencial, pois teriam que ser executados por um único processador. Às vezes, o processamento simultâneo é sinônimo de processamento paralelo (TANENBAUM e WOODHULL, 2008). O termo simultaneidade real e virtual no processamento simultâneo: • Ambiente de Multiprogramação: Em um ambiente de multiprogramação, existem múltiplas tarefas compartilhadas por um processador. Enquanto um conceito virtual pode ser alcançado pelo sistema operacional, se o processador for alocado para cada tarefa individual, o conceito virtual é visível se cada tarefa tiver um processador dedicado. • Ambiente de Multiprocessamento: No ambiente de multiprocessamento, dois ou mais processadores são usados com memória compartilhada. Apenas um espaço de endereço virtual é usado, o que é comum para todos os processadores. Todas as tarefas residem na memória compartilhada. Nesse ambiente, a simultaneidade é suportada na forma de processadores em execução concorrente. As tarefas executadas em diferentes processadores são processadas entre si por meio de memória compartilhada. • Ambiente de processamento distribuído: em um ambiente de processamento distribuído, dois ou mais computadores são conectados entre si por uma rede de comunicação ou barramento de alta velocidade. Não há memória compartilhada entre os processadores e cada computador possui sua própria memória local.
Compartilhar