Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

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 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.
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.
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.
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.1GERAÇÃ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:
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.
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, 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 – 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
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.
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 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 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;
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.
É 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.
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.
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:
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. Dispositivosde 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 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:
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.
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, umaaplicação pode ser carregada em
qualquer posição livre da memória, sem que 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 ), comuns na internet. É 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
[1]
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.
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.
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.
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 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 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 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 desenvolvidaspelos sistemas computacionais. Assim, futuramente ampliaremos nosso conhecimento com os
conceitos das principais atividades de gerência feitas pelos sistemas operacionais, individualmente
apresentadas e descritas.
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.
 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
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.
[1]

Mais conteúdos dessa disciplina