Você está na página 1de 30

SISTEMAS OPERACIONAIS

AULA 1

Prof. André Roberto Guerra


CONVERSA INICIAL

Computadores são dispositivos eletrônicos criados para auxiliar nas


tarefas do cotidiano das pessoas. São máquinas incríveis, com grande poder de
processamento e capacidade de armazenamento. Os denominados sistemas de
computação são compostos basicamente pelo hardware (dispositivos físicos) e
software (tarefas e rotinas previamente programadas) de forma dependente, ou
seja, só funcionam juntos, sendo praticamente inúteis sozinhos.
Essa interdependência é inicialmente comprovada pela necessidade de
gerenciar os componentes do hardware para funcionar corretamente, pois,
quando ligados, os circuitos eletrônicos ficam disponíveis para receber
instruções ou tarefas, mas, se não forem enviadas, tornam-se apenas uma peça
decorativa.
Os sistemas computacionais eram a princípio grandes mainframes ou
desktops, mas atualmente, com o advento da internet das coisas (internet of
things – IoT), eles estão presentes em quase todos os dispositivos que
utilizamos, como smartphones, tablets, smartwatches, smartTVs, consoles de
jogos, entre outros. Mesmo tão presentes no cotidiano das pessoas, poucos
sabem que, para que todos esses equipamentos nos auxiliem nas tarefas a que
se propõem, são necessárias rotinas de gestão e controle, implementadas em
software e denominadas sistemas operacionais.
Eles são responsáveis pela inicialização do hardware pelo kernel, e
também pelo controle e gestão segura dos dispositivos, dos processadores
(CPU), das memórias e da entrada e saída de dados. Também é responsável
pela gestão e pelo controle do armazenamento e do uso de arquivos,
escalonamento de tarefas e gerenciamento de processos e recursos. Em
síntese, é um grande gestor das atividades do computador que interage com o
usuário.
É importante conhecer e entender essas tarefas de gestão e seus
conceitos relacionados para compreendermos o que é necessário para escolher,
instalar, configurar e administrar sistemas operacionais, desde a inicialização até
a utilização pelo usuário final.
Nesta disciplina, além de desenvolver as competências necessárias para
essas atividades, apresentaremos e definiremos diversas outras rotinas. O
conteúdo previsto contempla inicialmente os conceitos e as definições de

2
sistema operacional, numa visão geral, com um breve histórico e evolução,
apresentando seus objetivos e funções. Também apresentaremos sua
classificação pela arquitetura e pelos tipos e exemplos de sistemas operacionais.
Seguindo a definição de gestão apresentada, nesta disciplina veremos a
gerência:

• De processador e de processos;
• De memória;
• De dispositivos de entrada e saída;
• De arquivos;
• De proteção de usuários.

E os temas desta aula são:

1. Conceitos e definições de sistema operacional – visão geral;


2. Histórico e evolução;
3. Objetivos e funções;
4. Arquitetura e classificação;
5. Tipos e exemplos.

Aproveite o conteúdo e bons estudos!

TEMA 1 – CONCEITOS E DEFINIÇÕES INICIAIS – VISÃO GERAL

Segundo Tanenbaum e Bos (2016), sistema operacional é um programa


que, do ponto de vista do programador, acrescenta uma variedade de novas
instruções e características acima e além do que o nível ISA fornece.
Normalmente, o sistema operacional é implementado, em grande parte, em
software, mas não há nenhuma razão teórica para não ser colocado em
hardware, como acontece com os microprogramas (quando estão presentes).
Para abreviar, chamamos o nível que ele implementa de operating system
machine (OSM), ou seja, “nível de máquina de sistema operacional”.
Stallings (2017) define sistema operacional como um programa que
gerencia os recursos do computador, fornece serviços para os
programadores e estabelece uma ordem de execução de outros programas. É
essencial certo conhecimento sobre sistemas operacionais para entender os
mecanismos pelos quais a CPU controla o computador – em particular, o efeito
das interrupções e o gerenciamento da hierarquia de memória.

3
Sistema operacional é o software que controla a execução de programas
num processador e gerencia os recursos do computador. Diversas funções
desempenhadas pelo sistema operacional, incluindo as duas mais relevantes
para estudar a arquitetura e organização de computadores – escalonamento de
processos e gerenciamento de memória –, só podem ser executadas de modo
rápido e eficiente se ele dispuser de um suporte adequado do hardware do
processador.
Quase todos os processadores dispõem desse suporte, em maior ou
menor extensão, incluindo hardware de gerenciamento de memória virtual e
de gerenciamento de processos. Isso inclui registradores de propósito especial
e áreas de armazenamento temporário, além de um conjunto de circuitos para
tarefas básicas de gerenciamento de recursos.
Assim, um sistema de computação é constituído basicamente de dois
elementos interdependentes: o hardware e o software. O primeiro é
basicamente composto de circuitos eletrônicos internos: CPU (processador),
memórias (primárias e secundárias), portas de comunicação (entrada/saída),
entre outros, como os periféricos externos (teclado, mouse, monitor, câmera,
microfone, dispositivos USB etc.). O segundo, por sua vez, é composto
basicamente de duas categorias:

1. Software de aplicação, representado por programas destinados ao


usuário do sistema, que constitui a razão final de seu uso (exemplo:
editores de texto, multimídia players, editores de imagem, jogos etc.);
2. Software de sistema, que está entre os aplicativos e o hardware. Trata-
se de uma camada de software multifacetada e complexa, denominada
genericamente de sistema operacional, como ilustra a Figura 1.

4
Figura 1 – Sistema operacional

Fonte: I000S_Pixels; Hani Suwaryo; Crystal Eye Studio; Marisha; Den Rozhnovsky; Weera.OTP;
DND_Project; Nerthuz/Shutterstock.

A Figura 1 apresenta o sistema operacional como uma fronteira, uma


interface entre o hardware e os aplicativos. É ele que gerencia e orienta a
fantástica transformação de pulsos elétricos do hardware (representados pelos
binários 0 e 1) nas mais diversas aplicações.
São essenciais para o funcionamento de todos os sistemas de
computação, desde os smartphones aos supercomputadores. Mesmo sendo
muitos os sistemas operacionais existentes, eles têm e seguem as mesmas
regras e princípios. Devido à sua complexidade e ao seu tamanho, o aprendizado
de sistemas operacionais é tido como algo reservado a especialistas ou hackers,
contudo, é na verdade essencial para todos os profissionais de computação, pois
as ferramentas implementadas nos algoritmos dos sistemas operacionais afetam
diretamente o comportamento e o desempenho das aplicações. São também
responsáveis pelos serviços de rede e pela segurança do sistema e dos
utilizadores.

5
TEMA 2 – HISTÓRIA E EVOLUÇÃO

A primeira geração de computadores – também chamada de Geração 0 –


foi a geração dos computadores mecânicos, acionados por engrenagens e
manivelas, dependendo totalmente do usuário – o operador do sistema. Todas
as tarefas eram manuais, e ainda não havia recursos para automatizá-las
eletronicamente.
Descrever a história e a evolução dos sistemas operacionais e dos
computadores é muito conveniente pois, até a 3ª geração dos computadores
(1965-1980), descrita pelo cientista Robert Noyce na integração de circuitos – o
chip –, os computadores dependiam exclusivamente do conhecimento e da
habilidade de seus operadores – os usuários. Foi somente na 3ª geração que os
sistemas operacionais iniciaram seu desenvolvimento, como descreveremos
aqui.
Os computadores têm sua história descrita e apresentada em 6 gerações.
As 3 primeiras são de computadores sem sistemas operacionais. Eram as
seguintes:

0. Mecânicos (1642-1945);
1. Válvulas (1945-1955);
2. Transistores (1955-1965).

As 3 gerações seguintes são as de computadores com sistemas


operacionais:

3. Integração (1965-1980);
4. Muita integração (1980-?);
5. Computadores invisíveis (atualmente).

2.1 Geração 0 (mecânicos) (1642-1945): máquinas sem sistema


operacional

Surgiram no século XVII e eram compostos exclusivamente de elementos


mecânicos, com grande rigidez nos programas a executar. Hoje são chamadas
de máquina dedicadas. As Figuras 2, 3 e 4 ilustram alguns exemplos dessa
geração:

6
Figura 2 – Calculadora de Pascal (1642)

Crédito: © CC-20/Edal Anton Lefterov.

Figura 3 – Máquina diferencial Babbage (1823)

Crédito: © CC-20/GFDL CC-BY-SA.

7
Figura 4 – Máquina Hollerith (1886)

Crédito: © CC-20/Adam Schuster.

A geração dos mecânicos tem como marco histórico a máquina de


Turing.
Colossus: o primeiro computador, mas ainda considerado mecânico, foi
criado em 1946 por Allan Turing, semelhante a um autômato finito, com
memória ilimitada e irrestrita. Era capaz de fazer tudo que um computador real
faz, entretanto não resolvia certos problemas. O modelo de Turing usava uma
fita infinita como memória, tendo uma cabeça de fita que podia se mover, ler e
escrever símbolos.
Inicialmente, a fita continha apenas a entrada, e todo o restante estava
em branco. Para armazenar informação, escrevia sobre a fita, e para ler
informação escrita, movia a cabeça para a posição em que a informação era
escrita, continuando a computar até produzir uma saída. As saídas “aceite” e
“rejeite” eram obtidas entrando em estados designados de aceitação e rejeição.
Se não entrasse em estado de aceitação ou rejeição, continuava para sempre,
sem parar.

2.2 Geração 1 (válvulas) (1945-1955): computadores eletrônicos, ainda


sem sistema operacional

Essa é a primeira geração de computadores modernos. As válvulas


necessitavam de muito tempo para aquecer e consumiam muita energia elétrica.
Eram grandes, porém frágeis, sua manutenção era cara, e sua programação,
8
feita com a ligação de fios ou cartões. Seus circuitos eram interligados por
quilômetros de fios instalados manualmente, atingindo velocidades na ordem de
milissegundos (1/1.000).
John Mauchley (1907-1980) e Presper Eckert (1919-1995) construíram o
Eniac em 1946, o 1º computador eletrônico.

Figura 5 – Eniac

Crédito: Everett Historical/Shutterstock.

Ele tinha 18 mil válvulas e 1,5 mil relés, pesava 30 toneladas e tinha 20
registradores. Consumia 140 quilowatts, e sua programação era feita em 6 mil
chaves (Figura 6).

Figura 6 – Operação do Eniac

Crédito: © CC-20/U.S. Army Photo.

O matemático John von Neumann (1903-1957) foi colaborador do projeto


Eniac, cujo aperfeiçoamento foi o IAS, referência ao local onde foi desenvolvido

9
– o Institute for Advanced Studies, da universidade de Princeton. Credita-se a
von Newmann a definição de uma arquitetura de computadores com programa
armazenado, utilizado até hoje. A Figura 7 ilustra essa definição:

Figura 7 – Arquitetura de von Neumann

Memória

Unidade Unidade
de controle aritmética e lógica
(acumulador)

Entrada Saída

Fonte: Guerra, 2020.

Ele é considerado o “pai” do computador, pois em sua arquitetura utiliza


aritmética binária e a organização em quatro unidades:

1. Memória;
2. Unidade aritmética e lógica;
3. Unidade de controle;
4. Parte de E/S.

A arquitetura de von Neumann apresenta computadores de programa


armazenado, armazenando dados e programas na memória, e com ciclo de
instrução repetitivo, executando cada instrução com base numa sequência de
etapas programadas. As características básicas do IAS o apresentam como
fundamental no estudo de arquitetura de computadores. Suas especificações
continuam válidas até hoje e têm memória com mil posições, denominadas
palavras, cada uma com valor de 40 bits. Seu dados e suas instruções são
representadas em binários e gravadas (memória); 21 instruções de 20 bits, com
2 campos de 8 bits (código de operação); e outro com 12 bits (endereço) para
localizar cada uma das mil palavras, com endereços de 000 a 999.

10
2.3 Geração 2 – Transistores (1955-1965): os primeiros projetos de
sistema operacional

John Bardeen (1908-1991), Walter Brattain (1902-1987) e William


Shockley (1910-1989), funcionários da AT&T, criaram o transistor. Com as
mesmas funções das válvulas, mas com custo menor, consumem menos
energia, são mais rápidos e confiáveis, sendo utilizados até hoje.
Nessa geração foram criados os barramentos, um conjunto de fios
paralelos usados para conectar os componentes de um computador. Trata-se de
uma ruptura importante em relação à arquitetura da máquina IAS, centrada na
memória e, desde então, foi adotada pela maioria dos computadores de pequeno
porte.
Foi apenas em 1953 que se iniciou o desenvolvimento do primeiro sistema
operacional – por sua simplicidade, chamado de monitor –, desenvolvido pelos
usuários do computador IBM 701, do Centro de Pesquisas da General Motors,
para tentar automatizar tarefas até então manuais. Posteriormente, esse sistema
seria reescrito para um computador IBM 704, pelo grupo de usuários da IBM
(Weizer, 1981).
Em 1961, o pesquisador Fernando Corbató, do Massachusetts Institute of
Technology (MIT), com seu grupo de pesquisa, anunciou o desenvolvimento do
compatible time-sharing system (CTSS), o primeiro sistema operacional com
compartilhamento de tempo (Corbató; Daggett; Daley, 1962).

2.4 Geração 3 – Integração (1965-1980): início dos sistemas operacionais

Essa foi a geração das “famílias de computadores”: mesmo tipo de


máquina, com diferentes capacidades e preços. Tinham uma unidade de
controle com microprogramação e multiprogramação, e vários programas
compartilhavam a memória e dividiam CPU.
Com alta capacidade de processamento, utilizavam 32 bits e instrução de
250 nanossegundos, com memória de 16 Mbytes. Sua memória principal
era orientada a byte, com um conjunto de programas gerenciadores de recursos
de hardware – o sistema operacional.
Essa geração tornou-se muito importante pois, além do sistema
operacional, integrou os circuitos pelo chip. Em 1968, Robert Noyce e Gordon
Moore fundaram a Intel Corporation, criadora do chip de memória de 1 KB e da
11
lei de Moore: a integração de transistores em circuito integrado dobra a cada 24
meses, mantendo-se os custos.
Em 1965, a IBM lançou o OS/360, um sistema operacional avançado, com
compartilhamento de tempo e um excelente suporte a discos. No mesmo ano,
um projeto conjunto entre MIT, General Electric (GE) e Bell Labs definiu o
multiplexed information and computing service (Multics), que por décadas
influenciou vários outros sistemas operacionais.
Em 1969, Ken Thompson e Dennis Ritchie, pesquisadores da Bell Labs,
desenvolveram a primeira versão do Unix.

2.5 Geração 4 – Muita integração (1980-?): popularização dos


computadores e dos sistemas operacionais

Marcian Hoff Junior, engenheiro da Intel, criou o Intel 4004, um


microprocessador de 4 bits e 108 KHz, que tinha 2.300 transistores, velocidade
de 60 mil operações/s e preço inicial de US$ 200. Desde 1980, a miniaturização
dos componentes internos e os avanços se relacionaram à escala de integração
dos circuitos integrados. A partir daqui, os sistemas operacionais ganharam
destaque e tiveram sua importância reconhecida. É nessa geração que famosas
empresas foram fundadas e conceitos foram criados. Acompanhe.
O primeiro destaque é o lançamento do sistema operacional da empresa
Microsoft, o MS-DOS, em 1981. Três anos após, em 1984, a Apple lançou o
Mac OS 1.0, desenvolvido para os computadores da linha Macintosh, o primeiro
sistema operacional a ter uma interface gráfica incorporada ao sistema. No ano
seguinte, a Microsoft lançou o aplicativo com interface gráfica MS-Windows 1.0.
Em 1987, Andrew S. Tanenbaum, professor de computação e autor de
vários best-sellers, desenvolveu o Minix, um sistema operacional didático
simplificado, baseado na API do Unix. No mesmo ano, a IBM e a Microsoft
apresentaram a primeira versão de um sistema multitarefa destinado a substituir
o MS-DOS e o Windows: o OS/2. A parceria foi rompida em seguida, e a IBM
deu sequência ao OS/2, enquanto a Microsoft investiu no Windows.

2.6 Geração 5 (atual): computadores invisíveis

Tanenbaum e Bos (2016) definem nossa atual geração como a geração


dos computadores invisíveis. Foi dado esse nome porque antigamente se falava

12
que, no futuro (que é hoje), os computadores estariam por toda parte, embutidos
nos mais diversos locais, executando inusitadas funções, como abertura de
portas, acendimento de luzes, enfim, escondidos nos componentes (invisíveis).
Em 1991, um estudante de graduação em ciência da computação, Linus
Torvalds (aluno de Tanenbaum), utilizou o Minix como base para iniciar o
desenvolvimento do Linux.

Figura 8 – Logotipo do Linux

Fonte: Rose Carson/Shutterstock.

A Microsoft só retornou em 1993, com o lançamento do Windows NT, o


primeiro sistema 32 bits da empresa. No mesmo ano, houve o lançamento dos
Unix de código aberto – FreeBSD e NetBSD –, e a Apple lançou o Newton OS,
considerado o primeiro sistema operacional móvel, com gestão de energia e
suporte para tela de toque.
Nos anos seguintes, muitos novos sistemas operacionais surgiram.
Listamos alguns a seguir:

• 1995: Windows 95;


• 1996: Windows NT 4.0; Mac OS 7.6 (first officially-named Mac OS);
• 1998: Windows 98; Novell NetWare 5;
• 2000: Windows Millennium Edition; Windows 2000;
• 2001: Windows XP; Mac OS X Cheetah (v. 10.0) – o novo SO da Apple,
com arquitetura distinta de suas versões anteriores, derivada da família
Unix BSD;

13
• 2006: Windows Vista;
• 2007: iPhone OS 1 – lançamento do sistema operacional iOS, derivado
do sistema operacional Darwin;
• 2008: Android 1.0 – SO baseado em Linux para dispositivos móveis;
• 2009: Windows 7;
• 2011: Solaris 11 11/11;
• 2012: Windows 8; Windows Phone 8;
• 2013: Windows CE 8.0; BlackBerry 10;
• 2015: Windows 10;
• 2017: Windows 10 Mobile Fall Creators Update;
• 2018: Windows Server 2019; iOS 13.1 – iPadOS 13.1;
• 2019: macOS Catalina (v10.15);
• 2020: Linux 5.6; NetBSD 9.0; Android 11.

Apresentamos o registro histórico de apenas alguns destaques.


Sugerimos que você consulte a bibliografia para conhecer muitas outras datas e
sistemas operacionais.

TEMA 3 – OBJETIVOS E FUNÇÕES

Agora veremos os objetivos básicos do sistema operacional, como ele é


estruturado para alcançá-los e quais desafios ele deve resolver.
Existe uma grande distância entre circuitos eletrônicos, dispositivos de
hardware e os programas aplicativos em software. Os circuitos são complexos,
acessados por interfaces de baixo nível (geralmente usando as portas de
entrada/saída do processador), e muitas vezes suas características e seu
comportamento dependem da tecnologia usada em sua construção
(Maziero, 2019).
Por exemplo, a forma de acessar dados em disco (HD ou SSD) via
hardware de baixo nível (Sata III) é muito diferente do acesso a dados
semelhantes em cartão de memória ou leitores de discos óticos (DVD ou blu-
ray). Toda essa grande diversidade de hardware pode tornar-se uma grande
dificuldade para quem o utiliza (como desenvolvedores de aplicativo). Então é
desejável que todas essas características e diferenças tecnológicas sejam
abstraídas e se tornem invisíveis aos aplicativos e aos utilizadores do sistema
computacional.

14
É aqui que entra em cena o sistema operacional. Trata-se de uma camada
de software que opera entre o hardware e os aplicativos, como vimos no Tema 1
e conforme a Figura 10. É um software de estrutura ampla e complexa que
incorpora aspectos de baixo nível (como drivers de dispositivos e gerência de
memória física) e de alto nível (como softwares utilitários e interface gráfica).

Figura 10 – Estrutura típica de sistema operacional (Android)

Fonte: Guerra, 2020.

Stallings (2017) descreve que o sistema operacional é um programa que


controla a execução de aplicativos e age como interface entre o usuário e o
hardware do computador. Tem basicamente dois objetivos:

1. Conveniência: um sistema operacional visa tornar mais conveniente o


uso do computador;
2. Eficiência: um sistema operacional permite uma utilização mais eficiente
dos recursos do sistema.

15
Os objetivos básicos de um sistema operacional, descritos por Maziero
(2019), podem ser sintetizados em duas palavras-chave: abstração e gerência.
Vejamos em detalhes seus principais aspectos.
Abstração de recursos: acessar os recursos de hardware de um sistema
de computação pode ser uma tarefa complexa, devido às características
específicas de cada dispositivo físico e à complexidade de suas interfaces.
Assim, o sistema operacional deve definir interfaces abstratas para os recursos
do hardware, visando atender os seguintes objetivos:

• Prover interfaces de acesso mais simples que as de baixo nível, para


simplificar a construção de aplicativos. Por exemplo: para ler dados de
um disco rígido, um programador de aplicação usa o conceito de arquivo,
que implementa uma visão abstrata do disco rígido, acessível por
operações como open, read e close. Se tivesse que acessar o disco
diretamente, seria necessário manipular portas de entrada/saída e
registradores com comandos para o controlador de disco (sem falar na
dificuldade de localizar os dados desejados dentro do disco);
• Tornar os aplicativos independentes do hardware. Ao definir uma
interface abstrata de acesso a um dispositivo de hardware, o sistema
operacional desacopla o hardware dos aplicativos e permite que ambos
evoluam de forma mais autônoma. Por exemplo, o código de um editor de
textos não deve depender da tecnologia de discos utilizada no sistema;
• Definir interfaces de acesso homogêneas para dispositivos com
tecnologias distintas. Com suas abstrações, o sistema operacional
permite aos aplicativos usar a mesma interface para dispositivos diversos.
Por exemplo, um aplicativo acessa dados em disco por meio de arquivos
e diretórios, sem precisar se preocupar com a estrutura real de
armazenamento dos dados, que podem estar num disquete, num disco
Sata, numa máquina fotográfica digital conectada à porta USB, num CD
ou mesmo num disco remoto, compartilhado pela rede.

O hardware e o software usados para fornecer aplicações aos usuários


podem ser vistos sob a forma de uma organização hierárquica (ou em camadas),
conforme a Figura 11.

16
Figura 11 – Camadas e visões de um sistema de computação

Fonte: Stallings, 2017.

O usuário final – que vai utilizar essas aplicações – geralmente não se


interessa pela arquitetura do computador nem pelos detalhes do hardware. Ele
vê o sistema de computação como uma aplicação, pois os aplicativos são a
última camada entre o sistema e o usuário, trazendo assim a interface entre eles.
Os softwares de aplicação (apps) são desenvolvidos numa linguagem de
programação por um analista/desenvolvedor. Se fossem escritos usando o
conjunto de instruções do processador e, além disso, tivessem também que
controlar o hardware do computador, a tarefa de desenvolver programas seria
extremamente complexa, quase impossível.
Para facilitar essa tarefa, existe um conjunto de programas de sistema.
Alguns desses programas são conhecidos como utilitários, que implementam
funções usadas frequentemente e criam programas, gerenciam arquivos e
controlam dispositivos de E/S. Um programador usa esses recursos para
desenvolver uma aplicação que, ao ser executada, invoca os utilitários para
desempenhar certas funções.
O software de sistema mais importante é o sistema operacional, que
esconde os detalhes do hardware do programador, fornecendo uma interface
conveniente para o uso do sistema. Ele age como um mediador, facilitando o
acesso e o uso de aplicativos e serviços para o programador. O sistema
operacional tipicamente fornece serviços para as seguintes atividades, que
descrevem algumas de suas funções:

17
• Criação de programas: o sistema operacional apresenta uma variedade
de recursos e serviços para auxiliar o programador a desenvolver
programas, como editores e depuradores. Esses serviços tipicamente são
oferecidos na forma de programas utilitários, que na verdade não são
parte do sistema operacional, mas podem ser acessados por ele;
• Execução de programas: várias tarefas precisam ser cumpridas para um
programa ser executado. Instruções e dados devem ser carregados na
memória principal. Dispositivos de E/S e arquivos precisam ser
inicializados, e outros recursos devem ser preparados. O sistema
operacional cumpre todas essas tarefas para o usuário;
• Acesso a dispositivos de E/S: cada dispositivo de E/S tem seu próprio
conjunto peculiar de instruções ou sinais de controle para operação. O
sistema operacional cuida dos detalhes do uso de cada dispositivo, de
modo que o programador possa pensar apenas em termos de operações
simples de leitura e de escrita;
• Acesso controlado aos arquivos: no caso de arquivos, o controle deve
incluir não apenas um entendimento sobre a natureza do dispositivo de
E/S (unidade de disco ou de fita), mas também sobre o formato dos
arquivos no meio de armazenamento. Mais uma vez, o sistema
operacional cuida dos detalhes. Além disso, no caso de sistemas usados
simultaneamente por vários usuários, ele fornece mecanismos de
proteção para controlar o acesso aos arquivos;
• Acesso ao sistema: no caso de sistemas compartilhados ou públicos, o
sistema operacional controla o acesso ao sistema como um todo e a
recursos específicos também. A função de acesso deve proteger o
sistema contra o uso não autorizado, tanto para recursos quanto para
dados de usuários, e resolver conflitos em caso de contenção de um
recurso;
• Detecção e reação aos erros: diversos erros podem ocorrer durante a
operação de um sistema de computação, incluindo erros de hardware
internos e externos, como erro de memória e falha, ou mau funcionamento
de dispositivo, além de vários erros de software, como overflow em
operação aritmética, tentativa de endereçar uma área de memória não
permitida e a impossibilidade de o sistema operacional atender à
requisição de uma aplicação. Em cada caso, o sistema operacional deve

18
reagir no sentido de eliminar a condição de erro, com o menor impacto
possível sobre as aplicações em execução. Essa reação pode variar,
desde terminar a execução do programa que causou o erro até tentar
executar novamente a operação ou, simplesmente, relatar a ocorrência
do erro à aplicação;
• Monitoração: um bom sistema operacional mantém estatísticas de uso
de vários recursos e monitora parâmetros de desempenho, como o tempo
de resposta. Em qualquer sistema, essa informação é útil para antecipar
a necessidade de futuros melhoramentos e para a sintonia do sistema,
aumentando seu desempenho. Num sistema multiusuário, essa
informação também pode ser usada para tarifação, pela utilização de
recursos.

3.1 Sistema operacional como gerente de recursos – um objetivo e uma


função

Os aplicativos utilizam o hardware para atingir seus objetivos e tarefas,


como criar, editar e imprimir documentos, tocar músicas, exibir vídeos e imagens,
ler e armazenar arquivos de dados e informações, conectar-se à internet, entre
outros. Num sistema com várias atividades simultâneas (multitarefas), podem
ocorrer conflitos na utilização do hardware, quando duas ou mais tarefas
precisam dos mesmos recursos para ser executadas. Uma das funções do
sistema operacional é definir políticas para gerenciar o uso dos recursos de
hardware pelos aplicativos e resolver eventuais disputas e conflitos.
O sistema operacional é o responsável por gerenciar o uso desses
recursos. Portanto, é o sistema operacional que controla o processamento, o
armazenamento e a transferência de dados, pois, gerenciando os recursos do
computador, o sistema detém o controle das suas funções básicas.
Esse controle é exercido de maneira curiosa. Normalmente, pensamos no
mecanismo de controle como algo externo ao que é controlado ou, pelo menos,
como algo que é uma parte distinta e separada do que é controlado (por
exemplo, um sistema de aquecimento residencial é controlado por um
termostato, que é completamente distinto do sistema de geração de calor e do
aparato de distribuição de calor). Não é o caso do sistema operacional que, como
mecanismo de controle, é incomum em dois aspectos:

19
O sistema operacional é um software como outro qualquer, sendo
executado pelo processador, e o sistema operacional frequentemente renuncia
ao controle do processador para, em seguida, obter o controle novamente; nada
mais é do que um programa de computador. Semelhante a outros softwares, ele
contém instruções para o processador; a diferença-chave está na intenção do
programa.
O sistema operacional direciona o processador no uso dos recursos do
sistema, assim como na execução de outros programas. Mas, para que o
processador execute outros programas, ele deve interromper a execução do
sistema operacional. Dessa maneira, ele libera o controle ao processador, para
que ele possa executar algum trabalho “útil”, e então retoma o controle por tempo
suficiente para preparar o processador e executar uma próxima tarefa.
A Figura 12 apresenta os principais recursos gerenciados pelo sistema
operacional:

Figura 12 – Camadas e visões de um sistema de computação

Fonte: Stallings, 2017.

Uma parte do sistema operacional reside na memória principal (RAM).


Essa parte inclui o núcleo (kernel), que contém as funções mais usadas pelo
sistema operacional, além de outras partes do sistema operacional em uso
naquele momento. Outros dados e programas de usuário ocupam o restante da
memória principal (RAM). Então, a gestão da memória é feita com a alocação
controlada, em conjunto, pelo sistema operacional e pelo hardware de
gerenciamento de memória da CPU.
A gestão de recursos (dispositivos) de E/S é outra tarefa do sistema
operacional, que decide quando um dispositivo de E/S pode (ou não) ser usado
pelo programa em execução, controlando o acesso e o uso de arquivos.
A seguir, apresentamos exemplos de gestão de recursos do hardware.
20
A concorrência pela utilização do tempo de CPU (que futuramente
estudaremos) é essencial para que ocorra um grande número de tarefas pelo
mesmo computador, que normalmente tem mais tarefas a processar do que a
quantidade de processadores disponíveis, complementando o conceito de
redução da ociosidade da CPU. O gerenciamento de recursos é fundamental
para balancear sua utilização, com distribuição justa entre os aplicativos e para
que cada um deles seja executado na velocidade adequada, cumprindo suas
funções sem prejudicar as demais. No caso de um sistema de computação com
múltiplos processadores, essa decisão se estende a todos eles.
Essa função é a gerência do processador – também conhecida como
gerência de processos, de tarefas ou de atividades –, que visa distribuir a
capacidade de processamento de forma justa entre as aplicações, evitando que
uma aplicação monopolize esse recurso, respeitando, assim, as prioridades
definidas pelos usuários. O sistema operacional provê a ilusão de que existe um
processador independente para cada tarefa, o que facilita o trabalho dos
programadores de aplicações e permite construir sistemas mais interativos.
Também faz parte da gerência de atividades fornecer abstrações para
sincronizar atividades interdependentes e prover formas de comunicação entre
elas.
O mesmo ocorre com a memória RAM, que também deve ser distribuída
de forma justa entre as aplicações. Aqui é descrita então a gerência de
memória, cujo objetivo é fornecer a cada aplicação uma área de memória
própria, independente e isolada das demais aplicações, inclusive do sistema
operacional. O isolamento das áreas de memória das aplicações melhora a
estabilidade e segurança do sistema como um todo, pois impede aplicações com
erros (ou aplicações maliciosas) de interferir no funcionamento das demais
aplicações. Além disso, caso a memória RAM existente seja insuficiente para as
aplicações, o sistema operacional pode aumentá-la de forma transparente às
aplicações, usando o espaço disponível num meio de armazenamento
secundário (como um disco rígido). Uma importante abstração construída pela
gerência de memória (com o auxílio do hardware) é a noção de memória virtual,
que desvincula os endereços de memória vistos por cada aplicação dos
endereços acessados pelo processador na memória RAM. Com isso, uma
aplicação pode ser carregada em qualquer posição livre da memória, sem que

21
seu programador se preocupe com os endereços de memória em que ela irá
executar.
A gerência de dispositivos, por sua vez, recebe destaque, pois cada
periférico do computador tem suas particularidades; assim, o procedimento de
interação com uma placa de rede é completamente diferente da interação com
um disco rígido Sata. Todavia, existem muitos problemas e abordagens em
comum para o acesso aos periféricos. Por exemplo, é possível criar uma
abstração única para a maioria dos dispositivos de armazenamento, como cartão
de memória, SSD, CD-ROMs etc., na forma de um vetor de blocos de dados.
A função da gerência de dispositivos (também conhecida como gerência
de entrada/saída) é implementar a interação com cada dispositivo por meio de
drivers e criar modelos abstratos que permitam agrupar vários dispositivos
similares sob a mesma interface de acesso. Outro recurso em que o acesso deve
ser mutuamente exclusivo (apenas um aplicativo por vez) é a impressão. O
sistema operacional resolve essa questão utilizando o recurso de spooling (que
estudaremos futuramente), além de definir uma fila de trabalhos a imprimir (print
jobs), normalmente executados de forma sequencial (first in, first out).
A gerência de arquivos é construída sobre a gerência de dispositivos e
visa criar arquivos e diretórios, definindo sua interface de acesso e as regras
para seu uso. É importante observar que os conceitos abstratos de arquivo e
diretório são tão importantes e difundidos que muitos sistemas operacionais
costumam usá-los para permitir o acesso a recursos que nada têm a ver com
armazenamento. Exemplos disso são as conexões de rede (nos sistemas Unix
e Windows, cada socket TCP é visto como um descritor de arquivo, com o qual
pode-se ler ou escrever dados) e as informações internas do sistema operacional
(como o diretório Proc do Unix).
A gerência de proteção de dados e usuários é outra importante tarefa de
gestão de recursos. Com computadores conectados em rede e compartilhados
por vários usuários, é importante definir claramente os recursos que cada usuário
pode acessar, as formas de acesso permitidas (leitura, escrita etc.), além de
garantir que essas definições sejam cumpridas. Por exemplo, a proteção contra
os ataques de negação de serviço (denial of service – DoS 1), comuns na internet.

1
Formas de ataque virtual que utilizam diversas técnicas para forçar um servidor de rede a
dedicar seus recursos para atender um determinado usuário em detrimento dos demais. Por
exemplo, ao abrir milhares de conexões simultâneas num servidor de e-mail, um atacante pode
22
É responsabilidade do sistema operacional do servidor detectar e impedir
ataques como esses, em que todos os recursos do sistema são monopolizados
por um único usuário.
Para proteger os recursos do sistema contra acessos indevidos, é
necessário:

• Definir usuários e grupos de usuários;


• Identificar os usuários que se conectam ao sistema por procedimentos de
autenticação;
• Definir e aplicar regras de controle de acesso aos recursos, relacionando
todos os usuários, recursos e formas de acesso, aplicando essas regras
por procedimentos de autorização;
• Registrar o uso dos recursos pelos usuários, para fins de auditoria e
contabilização.

Assim, um sistema operacional visa abstrair o acesso e gerenciar os


recursos de hardware, provendo aos aplicativos um ambiente de execução
abstrato, no qual o acesso aos recursos se faz por interfaces simples,
independentes das características e detalhes de baixo nível, minimizando os
conflitos no uso do hardware (Maziero, 2019).
As principais funções dos sistemas operacionais estão diretamente
ligadas aos objetivos, pois, para cumprir os objetivos de abstração e gerência,
eles devem atuar em várias frentes. Cada um dos recursos do sistema tem suas
particularidades, que impõem exigências específicas para gerenciá-los e abstraí-
los. Essas são as principais funcionalidades implementadas por um sistema
operacional típico.
Além dessas funcionalidades básicas oferecidas pela maioria dos
sistemas operacionais, várias outras se agregam aos sistemas modernos, para
cobrir aspectos complementares, como a interface gráfica, suporte de rede,
fluxos multimídia, fontes de energia etc.
As funcionalidades do sistema operacional geralmente são
interdependentes: por exemplo, a gerência do processador depende de aspectos
da gerência de memória, assim como a gerência de memória depende da
gerência de dispositivos e da gerência de proteção.

reservar para si todos os recursos do servidor (processos, conexões de rede, memória e


processador), fazendo com que os demais usuários não sejam mais atendidos.
23
TEMA 4 – ARQUITETURA: CLASSIFICAÇÃO

É essencial conhecer as diferenças entre as arquiteturas dos sistemas


operacionais para escolher o mais adequado a cada situação. Algumas
características básicas diferenciam os vários tipos de sistemas operacionais, que
são classificados, segundo a arquitetura, quanto ao tempo de resposta e à
entrada de dados em sistema operacional, em lote (batch), interativos, tempo
real e híbridos.
Essas características envolvem dois aspectos independentes. O primeiro
especifica se o sistema de computação é interativo ou é se um sistema de
processamento em lotes (batch). Num sistema interativo, o programador/usuário
interage diretamente com o computador, normalmente com um teclado e um
monitor de vídeo, para requisitar a execução de tarefas (jobs) ou efetuar
transações. Além disso, ele pode, dependendo da natureza da aplicação,
comunicar-se com o computador durante a execução de uma tarefa.
Num sistema de processamento em lotes (batch), ocorre o oposto. O
programa de um usuário é agrupado com programas de outros usuários, e esse
lote de programas é submetido à execução por um operador de computador.
Quando a execução do programa termina, os resultados são impressos para ser
entregues ao usuário. Hoje em dia são raros os sistemas que fazem
processamento exclusivamente em lotes, no entanto, é útil examiná-los
brevemente para entendermos melhor os sistemas operacionais atuais.
O batch não exige interação com o usuário. A entrada de dados é feita por
um dispositivo, geralmente arquivos em disco, processamento de cálculos,
compilações, ordenações e backups. Os sistemas interativos – também
conhecidos como sistemas de tempo compartilhado – geralmente permitem a
interação com usuário por meio de terminais, vídeo, teclado e mouse.
Com os sistemas de processamento em tempo real, o tempo de resposta
é o fator principal do sistema, utilizado em monitoramentos, controle de tráfego
aéreo, de usinas nucleares etc. Os sistemas híbridos são uma combinação de
sistema batch com sistemas interativos.
Quanto à execução de tarefas, os sistemas operacionais são
classificados como sistemas monotarefa, multitarefa e multiprocessamento.
Trata-se de outro aspecto independente, que especifica se o sistema de
computação emprega multiprogramação ou não.

24
A multiprogramação é uma tentativa de deixar o processador ocupado o
maior tempo possível, mantendo-o trabalhando em mais de um programa de
cada vez. Diversos programas são simultaneamente carregados na memória, e
o tempo do processador é dividido entre eles. A alternativa para esse tipo é um
sistema de monoprogramação (uniprogramação), que executa apenas um
programa de cada vez.
Os sistemas monotarefa executam uma única aplicação de cada vez; já
nos sistemas multitarefa várias tarefas concorrem pelos recursos de
processamento. Os sistemas multiprocessados têm duas ou mais CPUs
interligadas, trabalhando em conjunto e fortemente ou fracamente acopladas.
Os sistemas com multiprocessadores fortemente acoplados têm duas
ou mais CPUs, que compartilham uma única memória e são controladas por um
único sistema operacional. Os fracamente acoplados têm duas ou mais CPUs,
cada uma com sua memória, sendo controladas por sistemas operacionais
independentes.
Quanto à estrutura, os sistemas operacionais são classificados
basicamente como monolíticos, em camadas, máquinas virtuais e cliente
servidor.
Os sistemas operacionais ainda são classificados como sistemas
operacionais de computadores de grande porte, servidores, computadores
pessoais e sistemas operacionais embarcados. Os embarcados são sistemas
que controlam dispositivos móveis ou que não são computadores, como micro-
ondas, geladeiras, PDAs etc.
Os sistemas operacionais modernos se dividem em várias camadas, e
cada uma prova serviços à camada superior mais próxima, protegendo a camada
mais inferior, o núcleo do sistema (ou kernel) do sistema operacional.
Os recursos do kernel são acessados por chamadas de sistema (system
calls) de forma protegida para não danificar o sistema. As instruções que têm o
poder de comprometer o sistema são conhecidas como instruções privilegiadas
(modo kernel), enquanto as instruções não privilegiadas não oferecem perigo.
Chamadas de sistema são os comandos de acesso às funções do sistema
operacional e podem ser divididos em chamadas: para gerenciar processos,
para sinalização, para gerenciar arquivos, manipular diretórios, proteger e
gerenciar o tempo.

25
TEMA 5 – TIPOS E EXEMPLOS

Já classificados e denominados, os sistemas operacionais passam então


a dividir-se em grupos especializados, sendo mais indicados a certas demandas
e menos a outras. A seguir, apresentamos alguns tipos de sistemas
operacionais. Muitos se encaixam em mais de um deles. Vejamos:

• Batch (de lote): os sistemas operacionais mais antigos trabalhavam “por


lote”, ou seja, todos os programas a executar eram colocados numa fila,
com seus dados e demais informações para a execução. O processador
recebia os programas e os processava sem interagir com os usuários, o
que permitia um alto grau de utilização do sistema. Atualmente, esse
conceito se aplica a sistemas que processam tarefas sem interação direta
com os usuários, como os sistemas de processamento de transações
bancárias. Além disso, o termo “em lote” também é usado para designar
um conjunto de comandos que deve ser executado em sequência, sem
interferência do usuário. Exemplos: os clássicos IBM OS/360 e o
VAX/VMS, entre outros;
• De rede: um sistema operacional de rede deve ter suporte à operação em
rede, ou seja, a capacidade de oferecer às aplicações locais recursos
localizados em outros computadores conectados à rede, como arquivos e
impressoras. Ele também deve disponibilizar seus recursos locais aos
demais computadores de forma controlada. A maioria dos sistemas
operacionais atuais oferece esse tipo de funcionalidade, dispensando
exemplos;
• Distribuído: num sistema operacional distribuído, os recursos de cada
computador estão disponíveis a todos que estejam conectados à rede, de
forma transparente aos usuários. Ao lançar uma aplicação, o usuário
interage com sua interface, mas não sabe onde está executando ou
armazenando seus arquivos: o sistema é quem decide, de forma
transparente ao usuário. Sistemas operacionais distribuídos já existem há
muito tempo (como o Amoeba) (Tanenbaum et al., 1991); recentemente,
os ambientes de computação em nuvem têm implementado esse
conceito. Numa aplicação cloud (nuvem), o usuário interage com a
interface da aplicação num computador ou telefone, mas não tem uma

26
visão clara das máquinas em que seus dados estão sendo processados
e armazenados. Exemplo: AWS (Amazon Web Services) e Docker;
• Multiusuário: um sistema operacional multiusuário deve suportar a
identificação do “dono” de cada recurso dentro do sistema (arquivos,
processos, áreas de memória, conexões de rede) e impor regras de
controle de acesso para impedir o uso desses recursos por usuários não
autorizados. Essa funcionalidade é fundamental para a segurança dos
sistemas operacionais de rede e distribuídos. Grande parte dos sistemas
atuais são multiusuários;
• Servidor: um sistema operacional servidor deve permitir a gestão
eficiente de muitos recursos (disco, memória, processadores), impondo
prioridades e limites sobre o uso dos recursos pelos usuários e seus
aplicativos. Normalmente um sistema operacional servidor também tem
suporte à rede e aos multiusuários. Exemplos: Windows Server 2019 e
Oracle Linux Server;
• Desktop: um sistema operacional “de mesa” é voltado ao atendimento do
usuário doméstico ou corporativo para atividades corriqueiras, como
editar textos e gráficos, e reproduzir mídia. Suas principais características
são a interface gráfica, o suporte à interatividade e a operação em rede.
Exemplos de desktops: Windows 10, Linux e macOS X;
• Móvel: um sistema operacional móvel é usado em equipamentos de uso
pessoal compactos, como smartphones e tablets. Nesse contexto, as
principais prioridades são a gestão eficiente da energia (bateria), a
conectividade nos diversos tipos de rede (wi-fi, GSM, bluetooth, NFC etc.)
e a interação com uma grande variedade de sensores (GPS, giroscópio,
luminosidade, tela de toque, leitor de digitais etc.). Android e iOS são
exemplos dessa categoria;
• Embarcado: um sistema operacional é dito embarcado (embutido ou
embedded) quando é construído para operar sobre um hardware com
poucos recursos de processamento, armazenamento e energia.
Aplicações típicas desse tipo de sistema aparecem em sistemas de
automação e controladores automotivos, equipamentos eletrônicos de
uso doméstico (leitores de DVD, TVs, micro-ondas, centrais de alarme
etc.). Muitas vezes um sistema operacional embarcado se apresenta na
forma de uma biblioteca a ser ligada ao programa da aplicação durante

27
sua compilação. LynxOS, TinyOS, Contiki e VxWorks são exemplos de
sistemas operacionais embarcados;
• Tempo real: são sistemas em que o tempo é essencial. Ao contrário da
ideia usual, um sistema operacional de tempo real não precisa ser
necessariamente ultrarrápido; sua característica essencial é ter um
comportamento temporal previsível, ou seja, seu tempo de resposta deve
ser previsível no melhor e no pior caso de operação. A estrutura interna
de um sistema operacional de tempo real deve ser construída de forma a
minimizar esperas e latências imprevisíveis, como tempos de acesso a
disco e sincronizações excessivas. Exemplos de sistemas operacionais
de tempo real incluem o QNX, RT-Linux e VxWorks.

Muitos sistemas embarcados têm características de tempo real, e vice-


versa. Existem sistemas de tempo real críticos (hard real-time systems), nos
quais a perda de um prazo pelo sistema pode perturbar seriamente o sistema
físico sob seu controle, com graves consequências humanas, econômicas ou
ambientais. Exemplos desse tipo de sistema são o controle de funcionamento de
uma turbina de avião ou um freio ABS.
Por outro lado, nos sistemas de tempo real não críticos (soft real-time
systems), a perda de um prazo é perceptível e degrada o serviço prestado, sem
maiores consequências. Exemplos desse tipo de sistema são os softwares de
reprodução de mídia: em caso de atrasos, podem ocorrer falhas na música que
está sendo tocada.

FINALIZANDO

Nesta aula apresentamos os conteúdos iniciais de sistemas


operacionais. No Tema 1, enfatizamos os conceitos e as definições por uma
visão geral; no Tema 2, o histórico e a evolução dos sistemas operacionais,
utilizando uma linha do tempo em paralelo à história e à evolução dos
computadores, descritas em suas gerações, visualizando as gerações das
máquinas e seus sistemas operacionais em cada período da história.
No Tema 3, vimos os objetivos, funções e princípios fundamentais que
estabelecem as atividades desenvolvidas pelos sistemas operacionais. O
destaque desse tema é o item 3.1, que descreve o sistema operacional como
gerente de recursos, seu principal objetivo e função, pois ele é responsável por

28
gerenciar o uso dos recursos computacionais. As principais atividades de gestão
foram descritas nesse tema e servirão como base para entendermos os temas
das aulas seguintes, quando estudarmos os processos (tarefas) de gestão.
Na sequência, definimos e apresentamos a classificação e a arquitetura
dos sistemas operacionais para, em seguida, finalizar o conteúdo introdutório
com a apresentação de tipos e exemplos atuais, permitindo o conhecimento
suficiente para a escolha correta de sistemas operacionais adequados às
necessidades de cada situação do cotidiano, nos mais diversos ambientes.
Enfim, compreender esses conceitos é o princípio para entender as
atividades desenvolvidas pelos sistemas computacionais. Assim, futuramente
ampliaremos nosso conhecimento com os conceitos das principais atividades de
gerência feitas pelos sistemas operacionais, individualmente apresentadas e
descritas.

29
REFERÊNCIAS

ARPACI-DUSSEAU, R.; ARPACI-DUSSEAU, A. Operating systems: three easy


pieces. Madison: Arpaci-Dusseau Books, 2014.

CORBATÓ, F.; DAGGETT, M.; DALEY, R. An experimental time-sharing system.


In: PROCEEDINGS OF THE SPRING JOINT COMPUTER CONFERENCE, 1.,
New York. Anais… New York: ACM, 1962.

MACHADO, F. B.; MAIA, P. L. Arquitetura de sistemas operacionais. 4. ed.


Rio de Janeiro: LTC, 2007.

MAZIERO, C. Sistemas operacionais: conceitos e mecanismos. Curitiba:


UFPR, 2019.

SILBERSCHATZ, A.; GAGNE, G.; GALVIN, P. B. Operating system concepts.


New Jersey: Wiley, 2018.

SILBERSCHATZ, A.; GALVIN, P. B.; GAGNE, G. Sistemas operacionais com


Java. 8. ed. Rio de Janeiro: Campus, 2016.

STALLINGS, W. Operating systems: internals and design principles. 9. ed.


London: Pearson, 2017.

TANENBAUM, A. S.; BOS, H. Sistemas operacionais modernos. 4. ed. São


Paulo: Pearson, 2016.

TANENBAUM, A. S. et al. The Amoeba distributed operating system – a status


report. Computer Communications, v. 14, p. 324-335, jul. 1991.

TANENBAUM, A. S.; WOODHULL, A. S. Sistemas operacionais: projeto e


implementação. 3. ed. Porto Alegre: Bookman, 2008.

WEIZER, N. A history of operating systems. Datamation, [S.l.], p. 119-126, jan.


1981.

30

Você também pode gostar