Sistema operacional - Operating system

Um sistema operacional ( SO ) é um software de sistema que gerencia hardware de computador , recursos de software e fornece serviços comuns para programas de computador .

Os sistemas operacionais de compartilhamento de tempo programam tarefas para uso eficiente do sistema e também podem incluir software de contabilidade para alocação de custos de tempo de processador , armazenamento em massa , impressão e outros recursos.

Para funções de hardware, como entrada e saída e alocação de memória , o sistema operacional atua como um intermediário entre os programas e o hardware do computador, embora o código do aplicativo seja geralmente executado diretamente pelo hardware e frequentemente faça chamadas de sistema para uma função do sistema operacional ou seja interrompido por isto. Os sistemas operacionais são encontrados em muitos dispositivos que contêm um computador - de telefones celulares e consoles de videogame a servidores da Web e supercomputadores .

O sistema operacional de computador pessoal de uso geral dominante é o Microsoft Windows, com uma participação de mercado de cerca de 76,45%. O macOS da Apple Inc. está em segundo lugar (17,72%), e as variedades de Linux estão coletivamente em terceiro lugar (1,73%). No setor móvel (incluindo smartphones e tablets ), a participação do Android é de até 72% no ano de 2020. De acordo com dados do terceiro trimestre de 2016, a participação do Android em smartphones é dominante com 87,5 por cento com também uma taxa de crescimento de 10,3 por cento ao ano, seguido pelo iOS da Apple com 12,1 por cento, com redução anual na participação de mercado de 5,2 por cento, enquanto outros sistemas operacionais somam apenas 0,3 por cento. As distribuições Linux são dominantes nos setores de servidores e supercomputação. Outras classes especializadas de sistemas operacionais (sistemas operacionais para fins especiais), como sistemas incorporados e em tempo real, existem para muitos aplicativos. Também existem sistemas operacionais voltados para a segurança . Alguns sistemas operacionais têm requisitos de sistema baixos (por exemplo, distribuição Linux leve ). Outros podem ter requisitos de sistema mais elevados.

Alguns sistemas operacionais requerem instalação ou podem vir pré-instalados com os computadores adquiridos (instalação do OEM ), enquanto outros podem ser executados diretamente da mídia (ou seja, live CD ) ou memória flash (ou seja, pen drive).

Tipos de sistemas operacionais

Tarefa única e multitarefa

Um sistema de tarefa única pode executar apenas um programa por vez, enquanto um sistema operacional multitarefa permite que mais de um programa seja executado simultaneamente . Isso é obtido por compartilhamento de tempo , em que o tempo disponível do processador é dividido entre vários processos. Cada um desses processos é interrompido repetidamente em fatias de tempo por um subsistema de agendamento de tarefas do sistema operacional. A multitarefa pode ser caracterizada em tipos preventivos e cooperativos. Na multitarefa preemptiva , o sistema operacional divide o tempo da CPU e dedica um slot para cada um dos programas. Os sistemas operacionais do tipo Unix, como Solaris e Linux - bem como não do tipo Unix, como o AmigaOS - suportam multitarefa preemptiva. A multitarefa cooperativa é alcançada confiando em cada processo para fornecer tempo aos outros processos de uma maneira definida. As versões de 16 bits do Microsoft Windows usavam multitarefa cooperativa; As versões de 32 bits do Windows NT e do Win9x usavam multitarefa preemptiva.

Único e multiusuário

Os sistemas operacionais de usuário único não têm recursos para distinguir os usuários, mas podem permitir que vários programas sejam executados em conjunto. Um sistema operacional multiusuário estende o conceito básico de multitarefa com recursos que identificam processos e recursos, como espaço em disco, pertencentes a vários usuários, e o sistema permite que vários usuários interajam com o sistema ao mesmo tempo. Os sistemas operacionais de compartilhamento de tempo programam tarefas para uso eficiente do sistema e também podem incluir software de contabilidade para alocação de custos de tempo de processador, armazenamento em massa, impressão e outros recursos para vários usuários.

Distribuído

Um sistema operacional distribuído gerencia um grupo de computadores distintos em rede e os faz parecer um único computador, já que todos os cálculos são distribuídos (divididos entre os computadores constituintes).

Modelado

No contexto de computação distribuída e em nuvem de um sistema operacional, o modelo se refere à criação de uma única imagem de máquina virtual como um sistema operacional convidado e, em seguida, salvá-la como uma ferramenta para várias máquinas virtuais em execução . A técnica é usada em virtualização e gerenciamento de computação em nuvem e é comum em grandes depósitos de servidores.

Integrado

Os sistemas operacionais embutidos são projetados para serem usados ​​em sistemas de computador embutidos . Eles são projetados para operar em máquinas pequenas com menos autonomia (por exemplo, PDAs). Eles são muito compactos e extremamente eficientes por design, e podem operar com uma quantidade limitada de recursos. Windows CE e Minix 3 são alguns exemplos de sistemas operacionais incorporados.

Tempo real

Um sistema operacional em tempo real é um sistema operacional que garante o processamento de eventos ou dados em um momento específico. Um sistema operacional em tempo real pode ser único ou multitarefa, mas quando multitarefa, ele usa algoritmos de agendamento especializados para que uma natureza determinística de comportamento seja alcançada. Esse sistema orientado por eventos alterna entre as tarefas com base em suas prioridades ou eventos externos, enquanto os sistemas operacionais de compartilhamento de tempo alternam as tarefas com base nas interrupções do relógio .

Biblioteca

Um sistema operacional de biblioteca é aquele em que os serviços que um sistema operacional típico fornece, como rede, são fornecidos na forma de bibliotecas e compostos com o aplicativo e o código de configuração para construir um unikernel : um espaço de endereço único especializado, imagem de máquina que pode ser implantado em nuvem ou ambientes integrados.

História

Os primeiros computadores foram construídos para realizar uma série de tarefas únicas, como uma calculadora. Os recursos básicos do sistema operacional foram desenvolvidos na década de 1950, como funções de monitor residente que podiam executar programas diferentes em sucessão para acelerar o processamento. Os sistemas operacionais não existiam em suas formas modernas e mais complexas até o início dos anos 1960. Recursos de hardware foram adicionados, permitindo o uso de bibliotecas de tempo de execução , interrupções e processamento paralelo . Quando os computadores pessoais se tornaram populares na década de 1980, os sistemas operacionais foram feitos para eles de conceito semelhante aos usados ​​em computadores maiores.

Na década de 1940, os primeiros sistemas digitais eletrônicos não tinham sistemas operacionais. Os sistemas eletrônicos dessa época eram programados em fileiras de interruptores mecânicos ou por fios elétricos em painéis de encaixe . Esses eram sistemas para fins especiais que, por exemplo, geravam tabelas de balística para os militares ou controlavam a impressão de cheques de folha de pagamento a partir de dados em cartões perfurados. Depois que os computadores programáveis ​​de uso geral foram inventados, as linguagens de máquina (consistindo em cadeias de dígitos binários 0 e 1 em uma fita de papel perfurada) foram introduzidas, o que acelerou o processo de programação (Stern, 1981).

OS / 360 foi usado na maioria dos computadores mainframe IBM a partir de 1966, incluindo computadores usados ​​pelo programa Apollo .

No início da década de 1950, um computador só podia executar um programa por vez. Cada usuário tinha uso exclusivo do computador por um período limitado e chegava em um horário programado com seu programa e dados em cartões de papel perfurados ou fita perfurada . O programa seria carregado na máquina e a máquina seria configurada para funcionar até que o programa fosse concluído ou travado . Os programas geralmente podem ser depurados por meio de um painel frontal usando interruptores e luzes do painel. Diz-se que Alan Turing era um mestre nisso nas primeiras máquinas Manchester Mark 1 e já estava derivando a concepção primitiva de um sistema operacional dos princípios da máquina universal de Turing .

Máquinas posteriores vieram com bibliotecas de programas, que seriam vinculadas ao programa de um usuário para auxiliar em operações como entrada e saída e compilação (geração de código de máquina a partir de código simbólico legível ). Esta foi a gênese do sistema operacional moderno. No entanto, as máquinas ainda executam um único trabalho por vez. Na Universidade de Cambridge, na Inglaterra, a fila de empregos era outrora um varal (varal) onde fitas eram penduradas com prendedores de roupas de cores diferentes para indicar a prioridade do trabalho.

Uma melhoria foi o Supervisor Atlas . Introduzido com o Manchester Atlas em 1962, é considerado por muitos como o primeiro sistema operacional moderno reconhecível. Brinch Hansen o descreveu como "o avanço mais significativo na história dos sistemas operacionais".

Mainframes

Durante a década de 1950, muitos recursos importantes foram pioneiros no campo de sistemas operacionais em computadores mainframe , incluindo processamento em lote , interrupção de entrada / saída , buffer , multitarefa , spool , bibliotecas de tempo de execução , carregamento de link e programas para classificar registros em arquivos. Esses recursos foram incluídos ou não no software aplicativo por opção dos programadores do aplicativo, em vez de em um sistema operacional separado usado por todos os aplicativos. Em 1959, o sistema operacional SHARE foi lançado como um utilitário integrado para o IBM 704 e, posteriormente, nos mainframes 709 e 7090 , embora tenha sido rapidamente suplantado pelo IBSYS / IBJOB nos 709, 7090 e 7094.

Durante a década de 1960, o OS / 360 da IBM introduziu o conceito de um único sistema operacional abrangendo toda uma linha de produtos, o que foi crucial para o sucesso das máquinas System / 360. Os atuais sistemas operacionais de mainframe da IBM são descendentes distantes deste sistema original e as máquinas modernas são compatíveis com versões anteriores de aplicativos escritos para OS / 360.

O OS / 360 também foi pioneiro no conceito de que o sistema operacional rastreia todos os recursos do sistema que são usados, incluindo a alocação de programa e espaço de dados na memória principal e espaço de arquivo no armazenamento secundário e bloqueio de arquivo durante as atualizações. Quando um processo é encerrado por qualquer motivo, todos esses recursos são reivindicados novamente pelo sistema operacional.

O sistema alternativo CP-67 para o S / 360-67 deu início a toda uma linha de sistemas operacionais IBM focados no conceito de máquinas virtuais . Outros sistemas operacionais usados ​​em mainframes IBM série S / 360 incluíram sistemas desenvolvidos pela IBM: DOS / 360 (Sistema operacional de disco), TSS / 360 (Sistema de compartilhamento de tempo), TOS / 360 (Sistema operacional de fita), BOS / 360 (operação básica System) e ACP (Airline Control Program), bem como alguns sistemas não IBM: MTS (Michigan Terminal System), MUSIC (Sistema Multiusuários para Computação Interativa) e ORVYL (Stanford Timesharing System).

A Control Data Corporation desenvolveu o sistema operacional SCOPE na década de 1960, para processamento em lote . Em cooperação com a Universidade de Minnesota, o Kronos e mais tarde os sistemas operacionais NOS foram desenvolvidos durante a década de 1970, que suportavam o uso simultâneo em lote e compartilhamento de tempo. Como muitos sistemas comerciais de compartilhamento de tempo, sua interface era uma extensão dos sistemas operacionais Dartmouth BASIC , um dos esforços pioneiros em compartilhamento de tempo e linguagens de programação. No final da década de 1970, a Control Data e a University of Illinois desenvolveram o sistema operacional PLATO , que usava telas de plasma e redes de compartilhamento de tempo de longa distância. O Plato foi notavelmente inovador para a época, apresentando bate-papo em tempo real e jogos gráficos multiusuário.

Em 1961, a Burroughs Corporation apresentou o B5000 com o sistema operacional MCP (Master Control Program). O B5000 era uma máquina de pilha projetada para suportar exclusivamente linguagens de alto nível sem montador; na verdade, o MCP foi o primeiro sistema operacional a ser escrito exclusivamente em uma linguagem de alto nível ( ESPOL , um dialeto do ALGOL ). O MCP também introduziu muitas outras inovações revolucionárias, como ser a primeira implementação comercial de memória virtual . Durante o desenvolvimento do AS / 400 , a IBM fez uma abordagem à Burroughs para licenciar o MCP para rodar no hardware AS / 400. Esta proposta foi recusada pela administração da Burroughs para proteger sua produção de hardware existente. O MCP ainda está em uso hoje na linha de computadores MCP / ClearPath da empresa Unisys .

UNIVAC , o primeiro fabricante comercial de computadores, produziu uma série de sistemas operacionais EXEC. Como todos os primeiros sistemas de estrutura principal, este sistema orientado por lote gerenciava tambores magnéticos, discos, leitores de cartão e impressoras de linha. Na década de 1970, o UNIVAC produziu o sistema Real-Time Basic (RTB) para suportar o compartilhamento de tempo em grande escala, também padronizado após o sistema Dartmouth BC.

A General Electric e o MIT desenvolveram o General Electric Comprehensive Operating Supervisor (GECOS), que introduziu o conceito de níveis de privilégio de segurança em anel. Após a aquisição pela Honeywell, ele foi renomeado como General Comprehensive Operating System (GCOS).

A Digital Equipment Corporation desenvolveu muitos sistemas operacionais para suas várias linhas de computadores, incluindo os sistemas de compartilhamento de tempo TOPS-10 e TOPS-20 para os sistemas da classe PDP-10 de 36 bits. Antes do uso generalizado do UNIX, o TOPS-10 era um sistema particularmente popular nas universidades e na comunidade ARPANET inicial . RT-11 era um sistema operacional em tempo real de usuário único para o minicomputador classe PDP-11 e RSX-11 era o sistema operacional multiusuário correspondente.

Do final da década de 1960 até o final da década de 1970, vários recursos de hardware evoluíram, permitindo que softwares semelhantes ou portados rodassem em mais de um sistema. Os primeiros sistemas utilizaram a microprogramação para implementar recursos em seus sistemas, a fim de permitir que diferentes arquiteturas de computador subjacentes parecessem iguais a outras em uma série. Na verdade, a maioria dos 360s após o 360/40 (exceto os 360/44, 360/75, 360/91, 360/95 e 360/195) foram implementações microprogramadas.

O enorme investimento em software para esses sistemas feito desde 1960 fez com que a maioria dos fabricantes originais de computadores continuasse a desenvolver sistemas operacionais compatíveis com o hardware. Os notáveis ​​sistemas operacionais de mainframe suportados incluem:

Microcomputadores

PC DOS foi um dos primeiros sistemas operacionais de computador pessoal que apresentava uma interface de linha de comando.
O Mac OS da Apple Computer se tornou o primeiro sistema operacional difundido a apresentar uma interface gráfica de usuário . Muitos de seus recursos, como janelas e ícones, mais tarde se tornariam comuns em GUIs.

Os primeiros microcomputadores não tinham capacidade ou necessidade para os elaborados sistemas operacionais que haviam sido desenvolvidos para mainframes e minis; sistemas operacionais minimalistas foram desenvolvidos, geralmente carregados de ROM e conhecidos como monitores . Uma notável início Disk Operating System foi CP / M , que foi apoiado em muitos microcomputadores precoce e estava intimamente imitado por Microsoft 's MS-DOS , que se tornou muito popular como o sistema operacional escolhido para o IBM PC (versão da IBM do que foi chamado IBM DOS ou PC DOS ). Na década de 1980, a Apple Computer Inc. (agora Apple Inc. ) abandonou sua popular série de microcomputadores Apple II para apresentar o computador Apple Macintosh com uma interface gráfica de usuário (GUI) inovadora para o Mac OS .

A introdução do chip CPU Intel 80386 em outubro de 1985, com arquitetura de 32 bits e recursos de paginação , proporcionou aos computadores pessoais a capacidade de executar sistemas operacionais multitarefa , como os de minicomputadores e mainframes anteriores . A Microsoft respondeu a esse progresso contratando Dave Cutler , que havia desenvolvido o sistema operacional VMS para a Digital Equipment Corporation . Ele lideraria o desenvolvimento do sistema operacional Windows NT , que continua servindo como base para a linha de sistemas operacionais da Microsoft. Steve Jobs , co-fundador da Apple Inc. , fundou a NeXT Computer Inc., que desenvolveu o sistema operacional NEXTSTEP . NEXTSTEP seria posteriormente adquirido pela Apple Inc. e usado, junto com o código do FreeBSD, como o núcleo do Mac OS X (macOS após a última mudança de nome).

O Projeto GNU foi iniciado pelo ativista e programador Richard Stallman com o objetivo de criar uma substituição completa de software livre para o sistema operacional UNIX proprietário . Embora o projeto tenha obtido grande sucesso na duplicação da funcionalidade de várias partes do UNIX, o desenvolvimento do kernel GNU Hurd provou ser improdutivo. Em 1991, o estudante finlandês de ciência da computação Linus Torvalds , com a cooperação de voluntários que colaboraram na Internet, lançou a primeira versão do kernel Linux . Ele logo foi fundido com os componentes do espaço do usuário GNU e software de sistema para formar um sistema operacional completo. Desde então, a combinação dos dois componentes principais tem sido chamada simplesmente de "Linux" pela indústria de software, uma convenção de nomenclatura à qual Stallman e a Free Software Foundation se opõem, preferindo o nome GNU / Linux. O Berkeley Software Distribution, conhecido como BSD , é o derivado do UNIX distribuído pela University of California, Berkeley, começando na década de 1970. Distribuído livremente e portado para muitos minicomputadores, ele eventualmente também ganhou seguidores para uso em PCs, principalmente como FreeBSD , NetBSD e OpenBSD .

Exemplos

Unix e sistemas operacionais semelhantes ao Unix

Evolução dos sistemas Unix

O Unix foi originalmente escrito em linguagem assembly . Ken Thompson escreveu B , principalmente com base em BCPL , com base em sua experiência no projeto MULTICS . B foi substituído por C , e Unix, reescrito em C, desenvolvido em uma família grande e complexa de sistemas operacionais inter-relacionados que foram influentes em todos os sistemas operacionais modernos (consulte a História ).

A família semelhante ao Unix é um grupo diversificado de sistemas operacionais, com várias subcategorias principais, incluindo System V , BSD e Linux . O nome " UNIX " é uma marca comercial do The Open Group, que o licencia para uso com qualquer sistema operacional que tenha demonstrado estar de acordo com suas definições. "Semelhante ao UNIX" é comumente usado para se referir ao grande conjunto de sistemas operacionais que se assemelham ao UNIX original.

Os sistemas do tipo Unix são executados em uma ampla variedade de arquiteturas de computador . Eles são amplamente usados ​​para servidores em empresas, bem como estações de trabalho em ambientes acadêmicos e de engenharia. Variantes gratuitas do UNIX, como Linux e BSD , são populares nessas áreas.

Quatro sistemas operacionais são certificados pelo The Open Group (detentor da marca comercial Unix) como Unix. O HP-UX da HP e o AIX da IBM são ambos descendentes do System V Unix original e são projetados para serem executados apenas no hardware de seus respectivos fornecedores. Em contraste, o Solaris da Sun Microsystems pode ser executado em vários tipos de hardware, incluindo servidores x86 e Sparc e PCs. O macOS da Apple , um substituto para o Mac OS anterior (não Unix) da Apple, é uma variante BSD baseada em kernel híbrido derivada de NeXTSTEP , Mach e FreeBSD .

A interoperabilidade do Unix foi buscada estabelecendo o padrão POSIX . O padrão POSIX pode ser aplicado a qualquer sistema operacional, embora tenha sido originalmente criado para várias variantes do Unix.

BSD e seus descendentes

O primeiro servidor da World Wide Web rodou em NeXTSTEP, baseado em BSD.

Um subgrupo da família Unix é a família Berkeley Software Distribution , que inclui FreeBSD , NetBSD e OpenBSD . Esses sistemas operacionais são mais comumente encontrados em servidores web , embora também possam funcionar como um sistema operacional de computador pessoal. A Internet deve muito de sua existência ao BSD, já que muitos dos protocolos agora comumente usados ​​por computadores para conectar, enviar e receber dados em uma rede foram amplamente implementados e refinados no BSD. A World Wide Web também foi demonstrada pela primeira vez em vários computadores que executam um sistema operacional baseado em BSD chamado NeXTSTEP .

Em 1974, a University of California, Berkeley instalou seu primeiro sistema Unix. Com o tempo, alunos e funcionários do departamento de ciência da computação começaram a adicionar novos programas para tornar as coisas mais fáceis, como editores de texto. Quando Berkeley recebeu novos computadores VAX em 1978 com Unix instalado, os alunos de graduação da escola modificaram o Unix ainda mais para aproveitar as possibilidades de hardware do computador. A Agência de Projetos de Pesquisa Avançada de Defesa do Departamento de Defesa dos Estados Unidos se interessou e decidiu financiar o projeto. Muitas escolas, empresas e organizações governamentais perceberam e começaram a usar a versão do Unix de Berkeley em vez da versão oficial distribuída pela AT&T.

Steve Jobs , ao deixar a Apple Inc. em 1985, formou a NeXT Inc. , uma empresa que fabricava computadores de ponta rodando em uma variação do BSD chamada NeXTSTEP . Um desses computadores foi usado por Tim Berners-Lee como o primeiro servidor da Web a criar a World Wide Web.

Desenvolvedores como Keith Bostic encorajaram o projeto a substituir qualquer código não livre originado do Bell Labs. Feito isso, entretanto, a AT&T processou. Após dois anos de disputas legais, o projeto BSD gerou uma série de derivados livres, como NetBSD e FreeBSD (ambos em 1993) e OpenBSD (do NetBSD em 1995).

Mac OS

macOS (anteriormente "Mac OS X" e posteriormente "OS X") é uma linha de sistemas operacionais gráficos de núcleo aberto desenvolvidos, comercializados e vendidos pela Apple Inc. , o último dos quais é pré-carregado em todos os computadores Macintosh atualmente despachados . O macOS é o sucessor do Mac OS clássico original , que era o principal sistema operacional da Apple desde 1984. Ao contrário de seu predecessor, o macOS é um sistema operacional UNIX baseado em tecnologia desenvolvida na NeXT durante a segunda metade da década de 1980 e até A Apple comprou a empresa no início de 1997. O sistema operacional foi lançado pela primeira vez em 1999 como Mac OS X Server 1.0 , seguido em março de 2001 por uma versão cliente ( Mac OS X v10.0 "Cheetah" ). Desde então, mais seis edições distintas de "cliente" e " servidor " do macOS foram lançadas, até que as duas foram fundidas no OS X 10.7 "Lion" .

Antes de sua fusão com o macOS, a edição do servidor - macOS Server  - era arquitetonicamente idêntica à sua contraparte de desktop e geralmente funcionava na linha de hardware de servidor Macintosh da Apple . O servidor macOS incluiu ferramentas de software de gerenciamento e administração de grupos de trabalho que fornecem acesso simplificado aos principais serviços de rede , incluindo um agente de transferência de correio , um servidor Samba , um servidor LDAP , um servidor de nome de domínio e outros. Com o Mac OS X v10.7 Lion , todos os aspectos de servidor do Mac OS X Server foram integrados à versão cliente e o produto foi alterado para "OS X" (retirando "Mac" do nome). As ferramentas do servidor agora são oferecidas como um aplicativo.

Linux

Linux , um sistema operacional semelhante ao Unix, foi lançado pela primeira vez em 17 de setembro de 1991, por Linus Torvalds . Imagem de Tux o pinguim , mascote do Linux.

O kernel Linux surgiu em 1991, como um projeto de Linus Torvalds , enquanto um estudante universitário na Finlândia. Ele postou informações sobre seu projeto em um grupo de notícias para alunos e programadores de informática e recebeu apoio e assistência de voluntários que tiveram sucesso na criação de um kernel completo e funcional.

O Linux é semelhante ao Unix , mas foi desenvolvido sem nenhum código Unix, ao contrário do BSD e suas variantes. Por causa de seu modelo de licença aberta, o código do kernel do Linux está disponível para estudo e modificação, o que resultou em seu uso em uma ampla gama de máquinas de computação, de supercomputadores a relógios inteligentes. Embora as estimativas sugiram que o Linux seja usado em apenas 1,82% de todos os PCs "desktops" (ou laptops), ele foi amplamente adotado para uso em servidores e sistemas embarcados, como telefones celulares. O Linux substituiu o Unix em muitas plataformas e é usado na maioria dos supercomputadores, incluindo os 385 principais. Muitos dos mesmos computadores também estão no Green500 (mas em ordem diferente) e o Linux é executado nos 10 primeiros computadores com baixo consumo de energia, como smartphones e smartwatches . O kernel Linux é usado em algumas distribuições populares, tais como Red Hat , Debian , Ubuntu , Linux Mint e Google 's Android , Chrome OS , e Chromium OS .

Microsoft Windows

O Microsoft Windows é uma família de sistemas operacionais proprietários projetados pela Microsoft Corporation e voltados principalmente para computadores baseados na arquitetura Intel, com um compartilhamento de uso total estimado de 88,9% em computadores conectados à web. A versão mais recente é o Windows 11 .

Em 2011, o Windows 7 superou o Windows XP como a versão mais comum em uso.

O Microsoft Windows foi lançado pela primeira vez em 1985, como um ambiente operacional rodando em cima do MS-DOS , que era o sistema operacional padrão distribuído na maioria dos computadores pessoais com arquitetura Intel na época. Em 1995, o Windows 95 foi lançado, usando apenas o MS-DOS como bootstrap. Para compatibilidade com versões anteriores, o Win9x pode executar os drivers do MS-DOS em modo real e do Windows 3.x de 16 bits . O Windows ME , lançado em 2000, foi a última versão da família Win9x. Todas as versões posteriores foram baseadas no kernel do Windows NT . As versões clientes atuais do Windows são executadas em microprocessadores IA-32 , x86-64 e ARM . Além disso, o Itanium ainda é compatível com a versão de servidor mais antiga do Windows Server 2008 R2 . No passado, o Windows NT oferecia suporte a arquiteturas adicionais.

As edições de servidor do Windows são amplamente utilizadas. Nos últimos anos, a Microsoft gastou um capital significativo em um esforço para promover o uso do Windows como sistema operacional de servidor . No entanto, o uso do Windows em servidores não é tão difundido quanto em computadores pessoais, já que o Windows compete com o Linux e o BSD por participação no mercado de servidores.

ReactOS é um sistema operacional alternativo ao Windows, que está sendo desenvolvido nos princípios do Windows - sem usar nenhum código da Microsoft.

De outros

Muitos sistemas operacionais foram significativos em seus dias, mas não são mais, como o AmigaOS ; OS / 2 da IBM e Microsoft; Mac OS clássico , o precursor não-Unix do macOS da Apple; BeOS ; XTS-300 ; RISC OS ; MorphOS ; Haiku ; BareMetal e FreeMint . Alguns ainda são usados ​​em nichos de mercado e continuam a ser desenvolvidos como plataformas minoritárias para comunidades de entusiastas e aplicativos especializados. OpenVMS , anteriormente a partir de dezembro , ainda está em desenvolvimento ativo por VMS Software Inc . No entanto, outros sistemas operacionais são usados ​​quase exclusivamente na academia, para educação de sistemas operacionais ou para fazer pesquisas sobre conceitos de sistema operacional. Um exemplo típico de sistema que cumpre ambas as funções é o MINIX , enquanto, por exemplo, Singularidade é usada exclusivamente para pesquisa. Outro exemplo é o Sistema Oberon projetado na ETH Zürich por Niklaus Wirth , Jürg Gutknecht e um grupo de alunos do antigo Instituto de Sistemas de Computação na década de 1980. Era usado principalmente para pesquisa, ensino e trabalho diário no grupo de Wirth.

Outros sistemas operacionais não conseguiram conquistar uma fatia significativa do mercado, mas introduziram inovações que influenciaram os sistemas operacionais convencionais, principalmente o Plano 9 da Bell Labs .

Componentes

Todos os componentes de um sistema operacional existem para fazer as diferentes partes de um computador funcionarem juntas. Todo software do usuário precisa passar pelo sistema operacional para usar qualquer hardware, seja ele simples como um mouse ou teclado ou complexo como um componente da Internet.

Núcleo

Um kernel conecta o software do aplicativo ao hardware de um computador.

Com a ajuda do firmware e dos drivers de dispositivo , o kernel fornece o nível mais básico de controle sobre todos os dispositivos de hardware do computador. Ele gerencia o acesso à memória para programas na RAM , determina quais programas têm acesso a quais recursos de hardware, configura ou redefine os estados operacionais da CPU para uma operação ideal em todos os momentos e organiza os dados para armazenamento não volátil de longo prazo com sistemas de arquivos em mídia como discos, fitas, memória flash, etc.

Execução do programa

O sistema operacional fornece uma interface entre um programa aplicativo e o hardware do computador, de forma que um programa aplicativo possa interagir com o hardware apenas obedecendo às regras e procedimentos programados no sistema operacional. O sistema operacional também é um conjunto de serviços que simplificam o desenvolvimento e a execução de programas aplicativos. A execução de um programa aplicativo envolve a criação de um processo pelo kernel do sistema operacional que atribui espaço de memória e outros recursos, estabelece uma prioridade para o processo em sistemas multitarefa, carrega o código binário do programa na memória e inicia a execução do programa aplicativo que em seguida, interage com o usuário e com os dispositivos de hardware.

Interrupções

As interrupções são fundamentais para os sistemas operacionais, pois fornecem uma maneira eficiente para o sistema operacional interagir e reagir ao seu ambiente. A alternativa - fazer com que o sistema operacional "observe" as várias fontes de entrada em busca de eventos (pesquisa) que requerem ação - pode ser encontrada em sistemas mais antigos com pilhas muito pequenas (50 ou 60 bytes), mas é incomum em sistemas modernos com pilhas grandes. A programação baseada em interrupção é diretamente suportada pela maioria das CPUs modernas. As interrupções fornecem ao computador uma maneira de salvar automaticamente contextos de registro local e executar códigos específicos em resposta a eventos. Mesmo os computadores mais básicos suportam interrupções de hardware e permitem que o programador especifique o código que pode ser executado quando o evento ocorre.

Quando uma interrupção é recebida, o hardware do computador suspende automaticamente qualquer programa em execução no momento, salva seu status e executa o código de computador anteriormente associado à interrupção; isso é análogo a colocar um marcador em um livro em resposta a um telefonema. Em sistemas operacionais modernos, as interrupções são tratadas pelo kernel do sistema operacional . As interrupções podem vir do hardware do computador ou do programa em execução.

Quando um dispositivo de hardware dispara uma interrupção, o kernel do sistema operacional decide como lidar com esse evento, geralmente executando algum código de processamento. A quantidade de código executado depende da prioridade da interrupção (por exemplo: uma pessoa geralmente responde a um alarme de detector de fumaça antes de atender o telefone). O processamento de interrupções de hardware é uma tarefa geralmente delegada a um software denominado driver de dispositivo , que pode ser parte do kernel do sistema operacional, parte de outro programa ou ambos. Os drivers de dispositivo podem então retransmitir informações para um programa em execução por vários meios.

Um programa também pode desencadear uma interrupção no sistema operacional. Se um programa deseja acessar o hardware, por exemplo, ele pode interromper o kernel do sistema operacional, o que faz com que o controle seja devolvido ao kernel. O kernel então processa a solicitação. Se um programa deseja recursos adicionais (ou deseja eliminar recursos), como memória, ele dispara uma interrupção para chamar a atenção do kernel.

Modos

Anéis de privilégio para a arquitetura de microprocessador x86 disponível no modo protegido . Os sistemas operacionais determinam quais processos são executados em cada modo.

Os computadores modernos oferecem suporte a vários modos de operação. As CPUs com esse recurso oferecem pelo menos dois modos: modo de usuário e modo de supervisor . Em termos gerais, a operação no modo supervisor permite acesso irrestrito a todos os recursos da máquina, incluindo todas as instruções MPU. A operação do modo de usuário define limites para o uso de instruções e normalmente proíbe o acesso direto aos recursos da máquina. As CPUs também podem ter outros modos semelhantes ao modo de usuário, como os modos virtuais para emular tipos de processadores mais antigos, como processadores de 16 bits em um de 32 bits ou processadores de 32 bits em um de 64 bits .

Ao ligar ou reiniciar, o sistema começa no modo supervisor. Depois que um kernel do sistema operacional é carregado e iniciado, o limite entre o modo de usuário e o modo de supervisor (também conhecido como modo de kernel) pode ser estabelecido.

O modo supervisor é usado pelo kernel para tarefas de baixo nível que precisam de acesso irrestrito ao hardware, como controlar como a memória é acessada e se comunicar com dispositivos como unidades de disco e dispositivos de exibição de vídeo. O modo de usuário, em contraste, é usado para quase tudo o mais. Os programas aplicativos, como processadores de texto e gerenciadores de banco de dados, operam no modo de usuário e só podem acessar os recursos da máquina transferindo o controle para o kernel, um processo que causa uma mudança para o modo supervisor. Normalmente, a transferência de controle para o kernel é obtida executando uma instrução de interrupção de software , como a TRAPinstrução Motorola 68000 . A interrupção do software faz com que o processador mude do modo de usuário para o modo de supervisor e comece a executar o código que permite que o kernel assuma o controle.

No modo de usuário, os programas geralmente têm acesso a um conjunto restrito de instruções do processador e geralmente não podem executar nenhuma instrução que possa causar a interrupção da operação do sistema. No modo supervisor, as restrições de execução da instrução são normalmente removidas, permitindo ao kernel acesso irrestrito a todos os recursos da máquina.

O termo "recurso de modo de usuário" geralmente se refere a um ou mais registros da CPU, que contêm informações que o programa em execução não tem permissão para alterar. As tentativas de alterar esses recursos geralmente causam uma mudança para o modo supervisor, onde o sistema operacional pode lidar com a operação ilegal que o programa estava tentando, por exemplo, encerrando à força ("matando") o programa.

Gerenciamento de memória

Entre outras coisas, um kernel de sistema operacional de multiprogramação deve ser responsável por gerenciar toda a memória do sistema atualmente em uso pelos programas. Isso garante que um programa não interfira com a memória já em uso por outro programa. Como os programas compartilham o tempo, cada programa deve ter acesso independente à memória.

O gerenciamento cooperativo de memória, usado por muitos sistemas operacionais antigos, assume que todos os programas fazem uso voluntário do gerenciador de memória do kernel e não excedem sua memória alocada. Este sistema de gerenciamento de memória quase nunca é visto mais, uma vez que os programas freqüentemente contêm bugs que podem fazer com que excedam sua memória alocada. Se um programa falhar, pode fazer com que a memória usada por um ou mais outros programas seja afetada ou substituída. Programas maliciosos ou vírus podem alterar propositalmente a memória de outro programa ou podem afetar a operação do próprio sistema operacional. Com o gerenciamento de memória cooperativo, leva apenas um programa malcomportado para travar o sistema.

A proteção de memória permite que o kernel limite o acesso de um processo à memória do computador. Existem vários métodos de proteção de memória, incluindo segmentação de memória e paginação . Todos os métodos requerem algum nível de suporte de hardware (como o MMU 80286 ), que não existe em todos os computadores.

Tanto na segmentação quanto na paginação, certos registros de modo protegido especificam para a CPU qual endereço de memória ela deve permitir que um programa em execução acesse. As tentativas de acessar outros endereços disparam uma interrupção que faz com que a CPU volte a entrar no modo supervisor , colocando o kernel no comando. Isso é chamado de violação de segmentação ou Seg-V para abreviar, e uma vez que é difícil atribuir um resultado significativo a tal operação e porque geralmente é um sinal de um programa com comportamento incorreto, o kernel geralmente recorre a encerrar o programa ofensivo e relata o erro.

As versões 3.1 a ME do Windows tinham algum nível de proteção de memória, mas os programas podiam facilmente contornar a necessidade de usá-lo. Uma falha de proteção geral seria produzida, indicando que uma violação de segmentação ocorreu; no entanto, o sistema costuma travar de qualquer maneira.

Memória virtual

Muitos sistemas operacionais podem "enganar" os programas para que usem memória espalhada no disco rígido e na RAM como se fosse um bloco contínuo de memória, chamado de memória virtual.

O uso de endereçamento de memória virtual (como paginação ou segmentação) significa que o kernel pode escolher qual memória cada programa pode usar a qualquer momento, permitindo que o sistema operacional use os mesmos locais de memória para várias tarefas.

Se um programa tentar acessar a memória que não está em sua faixa atual de memória acessível, mas ainda assim foi alocada a ela, o kernel é interrompido da mesma forma que faria se o programa excedesse a memória alocada. (Consulte a seção sobre gerenciamento de memória.) No UNIX, esse tipo de interrupção é conhecido como falha de página .

Quando o kernel detecta uma falha de página, ele geralmente ajusta a faixa de memória virtual do programa que a disparou, concedendo-lhe acesso à memória solicitada. Isso dá ao kernel poder discricionário sobre onde a memória de um aplicativo em particular é armazenada, ou mesmo se ela já foi ou não alocada.

Em sistemas operacionais modernos, a memória que é acessada com menos frequência pode ser temporariamente armazenada em disco ou outra mídia para disponibilizar esse espaço para uso por outros programas. Isso é chamado de troca , pois uma área da memória pode ser usada por vários programas e o que essa área de memória contém pode ser trocado ou trocado sob demanda.

A "memória virtual" fornece ao programador ou ao usuário a percepção de que há uma quantidade muito maior de RAM no computador do que realmente existe.

Multitarefa

Multitarefa refere-se à execução de vários programas de computador independentes no mesmo computador; dando a impressão de que está executando as tarefas ao mesmo tempo. Como a maioria dos computadores pode fazer no máximo uma ou duas coisas ao mesmo tempo, isso geralmente é feito por compartilhamento de tempo, o que significa que cada programa usa uma parte do tempo do computador para ser executado.

Um kernel do sistema operacional contém um programa de agendamento que determina quanto tempo cada processo gasta em execução e em que ordem o controle de execução deve ser passado para os programas. O controle é passado para um processo pelo kernel, o que permite que o programa acesse a CPU e a memória. Posteriormente, o controle é devolvido ao kernel por meio de algum mecanismo, para que outro programa possa usar a CPU. Essa chamada passagem de controle entre o kernel e os aplicativos é chamada de troca de contexto .

Um modelo antigo que governava a alocação de tempo para os programas era chamado de multitarefa cooperativa . Nesse modelo, quando o controle é passado para um programa pelo kernel, ele pode ser executado pelo tempo que desejar antes de retornar explicitamente o controle ao kernel. Isso significa que um programa malicioso ou com defeito pode não apenas impedir que outros programas usem a CPU, mas pode travar todo o sistema se entrar em um loop infinito .

Os sistemas operacionais modernos estendem os conceitos de preempção de aplicativo aos drivers de dispositivo e ao código do kernel, de modo que o sistema operacional também tenha controle preventivo sobre os tempos de execução internos.

A filosofia que rege a multitarefa preemptiva é garantir que todos os programas recebam tempo regular na CPU. Isso significa que todos os programas devem ser limitados em quanto tempo podem ficar na CPU sem serem interrompidos. Para fazer isso, os kernels dos sistemas operacionais modernos usam uma interrupção cronometrada. Um temporizador de modo protegido é definido pelo kernel, o que dispara um retorno ao modo supervisor após o tempo especificado ter decorrido. (Consulte as seções acima sobre interrupções e operação em modo duplo.)

Em muitos sistemas operacionais de usuário único, a multitarefa cooperativa é perfeitamente adequada, pois os computadores domésticos geralmente executam um pequeno número de programas bem testados. O AmigaOS é uma exceção, tendo multitarefa preemptiva desde sua primeira versão. O Windows NT foi a primeira versão do Microsoft Windows que impôs multitarefa preventiva, mas não alcançou o mercado de usuários domésticos até o Windows XP (já que o Windows NT era voltado para profissionais).

Acesso ao disco e sistemas de arquivos

Os sistemas de arquivos permitem que usuários e programas organizem e classifiquem arquivos em um computador, geralmente por meio do uso de diretórios (ou "pastas").

O acesso aos dados armazenados em discos é um recurso central de todos os sistemas operacionais. Os computadores armazenam dados em discos por meio de arquivos , que são estruturados de maneiras específicas para permitir acesso mais rápido, maior confiabilidade e melhor aproveitamento do espaço disponível no disco. A maneira específica como os arquivos são armazenados em um disco é chamada de sistema de arquivos e permite que os arquivos tenham nomes e atributos. Também permite que sejam armazenados em uma hierarquia de diretórios ou pastas organizadas em uma árvore de diretórios .

Os primeiros sistemas operacionais geralmente suportavam um único tipo de unidade de disco e apenas um tipo de sistema de arquivos. Os primeiros sistemas de arquivos eram limitados em sua capacidade, velocidade e tipos de nomes de arquivos e estruturas de diretório que podiam usar. Essas limitações geralmente refletem limitações nos sistemas operacionais para os quais foram projetados, tornando muito difícil para um sistema operacional oferecer suporte a mais de um sistema de arquivos.

Enquanto muitos sistemas operacionais mais simples oferecem suporte a uma gama limitada de opções para acessar sistemas de armazenamento, sistemas operacionais como UNIX e Linux oferecem suporte a uma tecnologia conhecida como sistema de arquivos virtual ou VFS. Um sistema operacional como o UNIX oferece suporte a uma ampla variedade de dispositivos de armazenamento, independentemente de seu design ou sistemas de arquivos , permitindo que sejam acessados ​​por meio de uma interface de programação de aplicativo (API) comum. Isso torna desnecessário que os programas tenham qualquer conhecimento sobre o dispositivo que estão acessando. Um VFS permite que o sistema operacional forneça programas com acesso a um número ilimitado de dispositivos com uma variedade infinita de sistemas de arquivos instalados neles, por meio do uso de drivers de dispositivo e drivers de sistema de arquivo específicos .

Um dispositivo de armazenamento conectado , como um disco rígido , é acessado por meio de um driver de dispositivo . O driver do dispositivo entende o idioma específico da unidade e é capaz de traduzir esse idioma para um idioma padrão usado pelo sistema operacional para acessar todas as unidades de disco. No UNIX, esse é o idioma dos dispositivos de bloco .

Quando o kernel possui um driver de dispositivo apropriado, ele pode acessar o conteúdo da unidade de disco em formato bruto, que pode conter um ou mais sistemas de arquivos. Um driver do sistema de arquivos é usado para traduzir os comandos usados ​​para acessar cada sistema de arquivos específico em um conjunto padrão de comandos que o sistema operacional pode usar para se comunicar com todos os sistemas de arquivos. Os programas podem então lidar com esses sistemas de arquivos com base em nomes de arquivos e diretórios / pastas, contidos em uma estrutura hierárquica. Eles podem criar, excluir, abrir e fechar arquivos, bem como reunir várias informações sobre eles, incluindo permissões de acesso, tamanho, espaço livre e datas de criação e modificação.

Várias diferenças entre os sistemas de arquivos dificultam o suporte a todos os sistemas de arquivos. Caracteres permitidos em nomes de arquivo, distinção entre maiúsculas e minúsculas e a presença de vários tipos de atributos de arquivo tornam a implementação de uma única interface para cada sistema de arquivos uma tarefa assustadora. Os sistemas operacionais tendem a recomendar o uso (e, portanto, dar suporte nativo) aos sistemas de arquivos projetados especificamente para eles; por exemplo, NTFS no Windows e ext3 e ReiserFS no Linux. No entanto, na prática, drivers de terceiros geralmente estão disponíveis para dar suporte aos sistemas de arquivos mais amplamente usados ​​na maioria dos sistemas operacionais de uso geral (por exemplo, NTFS está disponível no Linux por meio de NTFS-3g , e ext2 / 3 e ReiserFS estão disponíveis no Windows por meio de software de terceiros).

O suporte para sistemas de arquivos é muito variado entre os sistemas operacionais modernos, embora existam vários sistemas de arquivos comuns para os quais quase todos os sistemas operacionais incluem suporte e drivers. Os sistemas operacionais variam quanto ao suporte ao sistema de arquivos e aos formatos de disco em que podem ser instalados. No Windows, cada sistema de arquivos é geralmente limitado em aplicação a certas mídias; por exemplo, os CDs devem usar ISO 9660 ou UDF e, a partir do Windows Vista , o NTFS é o único sistema de arquivos no qual o sistema operacional pode ser instalado. É possível instalar o Linux em muitos tipos de sistemas de arquivos. Ao contrário de outros sistemas operacionais, o Linux e o UNIX permitem que qualquer sistema de arquivos seja usado independentemente da mídia em que esteja armazenado, seja um disco rígido, um disco (CD, DVD ...), uma unidade flash USB ou mesmo contido dentro de um arquivo localizado em outro sistema de arquivos.

Drivers de dispositivo

Um driver de dispositivo é um tipo específico de software de computador desenvolvido para permitir a interação com dispositivos de hardware. Normalmente, isso constitui uma interface para comunicação com o dispositivo, através do barramento de computador específico ou subsistema de comunicação ao qual o hardware está conectado, fornecendo comandos para e / ou recebendo dados do dispositivo e, na outra extremidade, as interfaces necessárias para o funcionamento sistema e aplicativos de software. É um programa de computador dependente de hardware especializado que também é específico do sistema operacional que permite que outro programa, normalmente um sistema operacional ou pacote de software de aplicativos ou programa de computador em execução no kernel do sistema operacional, interaja de forma transparente com um dispositivo de hardware e geralmente fornece o o manuseio de interrupções necessário para qualquer necessidade de interface de hardware dependente do tempo assíncrona.

O principal objetivo do design dos drivers de dispositivo é a abstração . Cada modelo de hardware (mesmo dentro da mesma classe de dispositivo) é diferente. Modelos mais novos também são lançados por fabricantes que fornecem desempenho mais confiável ou melhor e esses modelos mais novos são frequentemente controlados de forma diferente. Não se pode esperar que os computadores e seus sistemas operacionais saibam como controlar todos os dispositivos, tanto agora como no futuro. Para resolver esse problema, os sistemas operacionais essencialmente ditam como cada tipo de dispositivo deve ser controlado. A função do driver do dispositivo é, então, traduzir essas chamadas de função obrigatórias do sistema operacional em chamadas específicas do dispositivo. Em teoria, um novo dispositivo, que é controlado de uma nova maneira, deve funcionar corretamente se um driver adequado estiver disponível. Este novo driver garante que o dispositivo pareça operar normalmente do ponto de vista do sistema operacional.

Nas versões do Windows anteriores ao Vista e nas versões do Linux anteriores à 2.6, toda a execução do driver era cooperativa, o que significa que, se um driver entrasse em um loop infinito, o sistema seria congelado. As revisões mais recentes desses sistemas operacionais incorporam a preempção do kernel, em que o kernel interrompe o driver para dar-lhe tarefas e, em seguida, se separa do processo até receber uma resposta do driver do dispositivo ou dar a ele mais tarefas para fazer.

Networking

Atualmente, a maioria dos sistemas operacionais oferece suporte a uma variedade de protocolos de rede, hardware e aplicativos para usá-los. Isso significa que os computadores que executam sistemas operacionais diferentes podem participar de uma rede comum para compartilhar recursos como computação , arquivos, impressoras e scanners usando conexões com ou sem fio. As redes podem essencialmente permitir que o sistema operacional de um computador acesse os recursos de um computador remoto para suportar as mesmas funções que faria se esses recursos estivessem conectados diretamente ao computador local. Isso inclui tudo, desde a simples comunicação até o uso de sistemas de arquivos em rede ou até mesmo o compartilhamento de gráficos ou hardware de som de outro computador. Alguns serviços de rede permitem que os recursos de um computador sejam acessados ​​de forma transparente, como o SSH, que permite aos usuários da rede acesso direto à interface de linha de comando de um computador.

A rede cliente / servidor permite que um programa em um computador, denominado cliente, se conecte por meio de uma rede a outro computador, denominado servidor. Os servidores oferecem (ou hospedam) vários serviços a outros computadores e usuários da rede. Esses serviços geralmente são fornecidos por meio de portas ou pontos de acesso numerados além do endereço IP do servidor . Cada número de porta está geralmente associado a um máximo de um programa em execução, que é responsável por lidar com as solicitações para essa porta. Um daemon, sendo um programa do usuário, pode, por sua vez, acessar os recursos de hardware locais desse computador, passando solicitações ao kernel do sistema operacional.

Muitos sistemas operacionais também suportam um ou mais protocolos de rede específicos do fornecedor ou abertos, por exemplo, SNA em sistemas IBM , DECnet em sistemas da Digital Equipment Corporation e protocolos específicos da Microsoft ( SMB ) no Windows. Protocolos específicos para tarefas específicas também podem ser suportados, como NFS para acesso a arquivos. Protocolos como ESound ou esd podem ser facilmente estendidos pela rede para fornecer som de aplicativos locais, em um hardware de som de sistema remoto.

Segurança

A segurança de um computador depende de várias tecnologias que funcionam corretamente. Um sistema operacional moderno fornece acesso a uma série de recursos, que estão disponíveis para o software em execução no sistema, e para dispositivos externos, como redes, por meio do kernel.

O sistema operacional deve ser capaz de distinguir entre solicitações que devem ser processadas e outras que não devem ser processadas. Embora alguns sistemas possam simplesmente distinguir entre "privilegiado" e "não privilegiado", os sistemas geralmente têm uma forma de identidade do solicitante , como um nome de usuário. Para estabelecer a identidade, pode haver um processo de autenticação . Freqüentemente, um nome de usuário deve estar entre aspas e cada nome de usuário pode ter uma senha. Outros métodos de autenticação, como cartões magnéticos ou dados biométricos, podem ser usados ​​em seu lugar. Em alguns casos, especialmente conexões da rede, os recursos podem ser acessados ​​sem autenticação (como a leitura de arquivos em um compartilhamento de rede). Também coberto pelo conceito de identidade do solicitante está a autorização ; os serviços e recursos específicos acessíveis ao solicitante, uma vez conectado a um sistema, são vinculados à conta de usuário do solicitante ou aos grupos de usuários configurados de várias maneiras aos quais o solicitante pertence.

Além do modelo de segurança permitir ou não, um sistema com alto nível de segurança também oferece opções de auditoria. Isso permitiria o rastreamento de solicitações de acesso a recursos (como "quem está lendo este arquivo?"). A segurança interna ou a segurança de um programa já em execução só é possível se todas as solicitações possivelmente prejudiciais devem ser realizadas por meio de interrupções no kernel do sistema operacional. Se os programas podem acessar diretamente o hardware e os recursos, eles não podem ser protegidos.

A segurança externa envolve uma solicitação de fora do computador, como um login em um console conectado ou algum tipo de conexão de rede. As solicitações externas geralmente são passadas por meio de drivers de dispositivo para o kernel do sistema operacional, onde podem ser passadas para os aplicativos ou realizadas diretamente. A segurança dos sistemas operacionais há muito tempo é uma preocupação devido aos dados altamente confidenciais mantidos em computadores, tanto de natureza comercial quanto militar. O Departamento de Defesa do Governo dos Estados Unidos (DoD) criou o Trusted Computer System Evaluation Criteria (TCSEC), que é um padrão que define os requisitos básicos para avaliar a eficácia da segurança. Isso se tornou de vital importância para os fabricantes de sistemas operacionais, porque o TCSEC foi usado para avaliar, classificar e selecionar sistemas operacionais confiáveis sendo considerados para o processamento, armazenamento e recuperação de informações confidenciais ou classificadas .

Os serviços de rede incluem ofertas como compartilhamento de arquivos, serviços de impressão, e-mail, sites da Web e protocolos de transferência de arquivos (FTP), muitos dos quais podem ter a segurança comprometida. Na linha de frente da segurança estão os dispositivos de hardware conhecidos como firewalls ou sistemas de detecção / prevenção de intrusão. No nível do sistema operacional, há vários firewalls de software disponíveis, bem como sistemas de detecção / prevenção de intrusão. A maioria dos sistemas operacionais modernos inclui um firewall de software, que é ativado por padrão. Um firewall de software pode ser configurado para permitir ou negar tráfego de rede para ou de um serviço ou aplicativo em execução no sistema operacional. Portanto, pode-se instalar e executar um serviço inseguro, como Telnet ou FTP, e não ter que ser ameaçado por uma violação de segurança porque o firewall negaria todo o tráfego que tentasse se conectar ao serviço nessa porta.

Uma estratégia alternativa, e a única estratégia de sandbox disponível em sistemas que não atendem aos requisitos de virtualização Popek e Goldberg , é quando o sistema operacional não executa programas do usuário como código nativo, mas sim emula um processador ou fornece um host para um p sistema baseado em código , como Java.

A segurança interna é especialmente relevante para sistemas multiusuário; ele permite que cada usuário do sistema tenha arquivos privados que os outros usuários não podem alterar ou ler. A segurança interna também é vital para que a auditoria tenha alguma utilidade, uma vez que um programa pode potencialmente contornar o sistema operacional, inclusive contornar a auditoria.

Interface de usuário

Uma captura de tela da linha de comando do Bash . Cada comando é digitado após o 'prompt' e, em seguida, sua saída aparece abaixo, avançando na tela. O prompt de comando atual está na parte inferior.

Cada computador que deve ser operado por um indivíduo requer uma interface de usuário . A interface do usuário é geralmente chamada de shell e é essencial para o suporte à interação humana. A interface do usuário visualiza a estrutura de diretório e solicita serviços do sistema operacional que irá adquirir dados de dispositivos de hardware de entrada , como um teclado , mouse ou leitor de cartão de crédito , e solicita serviços do sistema operacional para exibir prompts , mensagens de status e outros no hardware de saída dispositivos , como um monitor de vídeo ou impressora . As duas formas mais comuns de interface do usuário têm sido historicamente a interface de linha de comando , onde os comandos do computador são digitados linha por linha, e a interface gráfica do usuário , onde um ambiente visual (mais comumente um WIMP ) está presente.

Interfaces gráficas do usuário

Uma captura de tela da interface gráfica do usuário do KDE Plasma 5 . Os programas assumem a forma de imagens na tela, e os arquivos, pastas (diretórios) e aplicativos assumem a forma de ícones e símbolos. Um mouse é usado para navegar no computador.

A maioria dos sistemas de computador modernos oferece suporte a interfaces gráficas com o usuário (GUI) e geralmente as inclui. Em alguns sistemas de computador, como a implementação original do Mac OS clássico , a GUI é integrada ao kernel .

Embora tecnicamente uma interface gráfica do usuário não seja um serviço do sistema operacional, a incorporação de suporte para um no kernel do sistema operacional pode permitir que a GUI seja mais responsiva, reduzindo o número de alternâncias de contexto necessárias para que a GUI execute suas funções de saída. Outros sistemas operacionais são modulares , separando o subsistema gráfico do kernel e do sistema operacional. Na década de 1980, UNIX, VMS e muitos outros tinham sistemas operacionais construídos dessa maneira. Linux e macOS também são construídos dessa maneira. Versões modernas do Microsoft Windows, como o Windows Vista, implementam um subsistema gráfico que fica principalmente no espaço do usuário; entretanto, as rotinas de desenho gráfico das versões entre o Windows NT 4.0 e o Windows Server 2003 existem principalmente no espaço do kernel. O Windows 9x tinha muito pouca distinção entre a interface e o kernel.

Muitos sistemas operacionais de computador permitem que o usuário instale ou crie qualquer interface de usuário que desejar. O X Window System em conjunto com GNOME ou KDE Plasma 5 é uma configuração comumente encontrada na maioria dos sistemas Unix e semelhantes a Unix (BSD, Linux, Solaris). Uma série de substituições de shell do Windows foram lançadas para o Microsoft Windows, que oferecem alternativas para o shell do Windows incluído , mas o shell em si não pode ser separado do Windows.

Numerosas GUIs baseadas em Unix existiram ao longo do tempo, a maioria derivada do X11. A competição entre os vários fornecedores de Unix (HP, IBM, Sun) levou a muita fragmentação, embora um esforço para padronizar na década de 1990 para COSE e CDE tenha falhado por várias razões, e acabou sendo eclipsado pela adoção generalizada do GNOME e K Desktop Environment . Antes dos kits de ferramentas e ambientes de desktop baseados em software livre , o Motif era a combinação predominante de kit de ferramentas / desktop (e foi a base sobre a qual o CDE foi desenvolvido).

As interfaces gráficas do usuário evoluem com o tempo. Por exemplo, o Windows modificou sua interface de usuário quase toda vez que uma nova versão principal do Windows é lançada, e a GUI do Mac OS mudou drasticamente com a introdução do Mac OS X em 1999.

Sistemas operacionais em tempo real

Um sistema operacional em tempo real (RTOS) é um sistema operacional destinado a aplicativos com prazos fixos ( computação em tempo real ). Essas aplicações incluem alguns pequenos sistemas embarcados , controladores de motores de automóveis, robôs industriais, espaçonaves, controle industrial e alguns sistemas de computação em grande escala.

Um dos primeiros exemplos de sistema operacional em tempo real em grande escala foi o Transaction Processing Facility, desenvolvido pela American Airlines e IBM para o Sabre Airline Booking System .

Os sistemas embarcados com prazos fixos utilizam um sistema operacional em tempo real , como VxWorks , PikeOS , eCos , QNX , MontaVista Linux e RTLinux . O Windows CE é um sistema operacional em tempo real que compartilha APIs semelhantes ao Windows desktop, mas não compartilha nenhum codebase do Windows desktop. O Symbian OS também possui um kernel RTOS (EKA2) a partir da versão 8.0b.

Alguns sistemas incorporados usam sistemas operacionais como Palm OS , BSD e Linux , embora esses sistemas operacionais não ofereçam suporte à computação em tempo real.

Desenvolvimento de sistema operacional como hobby

Um sistema operacional de hobby pode ser classificado como aquele cujo código não foi derivado diretamente de um sistema operacional existente e tem poucos usuários e desenvolvedores ativos.

Em alguns casos, o desenvolvimento de hobby apoia um dispositivo de computação " caseiro ", por exemplo, um computador de placa única simples alimentado por um microprocessador 6502 . Ou o desenvolvimento pode ser para uma arquitetura já amplamente utilizada. O desenvolvimento do sistema operacional pode vir de conceitos totalmente novos ou pode começar pela modelagem de um sistema operacional existente. Em ambos os casos, o aquarista é seu próprio desenvolvedor ou pode interagir com um pequeno e às vezes não estruturado grupo de indivíduos que têm interesses semelhantes.

Exemplos de um sistema operacional de hobby incluem Syllable e TempleOS .

Diversidade de sistemas operacionais e portabilidade

O software aplicativo geralmente é escrito para uso em um sistema operacional específico e, às vezes, até mesmo para hardware específico. Ao portar o aplicativo para ser executado em outro sistema operacional, a funcionalidade exigida por esse aplicativo pode ser implementada de forma diferente por esse sistema operacional (os nomes das funções, significado dos argumentos, etc.) exigindo que o aplicativo seja adaptado, alterado ou mantido de outra forma .

Unix foi o primeiro sistema operacional não escrito em linguagem assembly, tornando-o muito portátil para sistemas diferentes de seu PDP-11 nativo .

Esse custo de suporte à diversidade de sistemas operacionais pode ser evitado escrevendo aplicativos em plataformas de software como Java ou Qt . Essas abstrações já arcaram com o custo de adaptação a sistemas operacionais específicos e suas bibliotecas de sistema .

Outra abordagem é que os fornecedores de sistemas operacionais adotem padrões. Por exemplo, as camadas de abstração POSIX e OS fornecem semelhanças que reduzem os custos de portabilidade.

Quota de mercado

Veja também

Notas

Referências

Leitura adicional

links externos