Você está na página 1de 168

SISTEMAS

OPERACIONAIS

Autor
Carlos Eduardo Moreno

Indaial – 2022
1a Edição
Copyright © UNIASSELVI 2022

Elaboração:
Carlos Eduardo Moreno

Revisão, Diagramação e Produção:


Equipe Desenvolvimento de Conteúdos EdTech

Centro Universitário Leonardo da Vinci – UNIASSELVI


Ficha catalográfica elaborada pela equipe Conteúdos EdTech UNIASSELVI
Apresentação
Seja bem-vindo à disciplina de Sistemas Operacionais. Esperamos atender
às expectativas de aprendizado e contribuir para o enriquecimento de sua forma-
ção profissional!
Na Unidade 1, traremos breves conceitos e a história dos sistemas operacio-
nais e dos serviços e compreenderemos as camadas que os envolvem.
Em seguida, na Unidade 2, veremos os principais tipos de sistemas opera-
cionais: sistemas com múltiplos processadores e sistemas fortemente e fracamen-
te acoplados.
Por fim, na Unidade 3, abordaremos alguns princípios relacionados a dea-
dlock, administração e segurança em sistemas operacionais.
As competências que serão desenvolvidas nesta disciplina são relevantes
para o profissional que deseja trabalhar em área estratégica para o desenvolvimen-
to do país.
Bom trabalho!
Prof. Carlos Eduardo Moreno
SUMÁRIO
UNIDADE 1 SISTEMAS OPERACIONAIS – INTRODUÇÃO..........................11
TÓPICO 1 INTRODUÇÃO AO ESTUDO DE SISTEMAS OPERACIONAIS...........13
1 INTRODUÇÃO....................................................................................................13
2 CONCEITO DE SISTEMA OPERACIONAL (SO).......................................... 14
3 HISTÓRIA DOS SISTEMAS OPERACIONAIS...............................................15
3.1 PRIMEIRA GERAÇÃO (1945-1955).............................................................15
3.2 SEGUNDA GERAÇÃO (1955-1965)...........................................................16
3.3 TERCEIRA GERAÇÃO (1965-1980)...........................................................17
3.4 QUARTA GERAÇÃO (A PARTIR DE 1980)............................................... 18
4 CLASSIFICAÇÃO DOS SISTEMAS OPERACIONAIS..................................19
4.1 QUANTO AO TIPO DE SERVIÇOS OFERECIDOS AO USUÁRIO............19
4.2 QUANTO AO NÚMERO DE USUÁRIOS....................................................20
4.3 QUANTO AO TIPO DE INTERAÇÃO..........................................................20
4.4 QUANTO À APLICAÇÃO.............................................................................20
5 ESTRUTURA DO SISTEMA OPERACIONAL...............................................20
5.1 PROTEÇÃO DO SISTEMA.............................................................................21
5.1.1 SYSTEM CALLS...........................................................................................21
5.1.2 MODOS DE ACESSO.................................................................................23
5.2 ORGANIZAÇÃO DOS SISTEMAS OPERACIONAIS ............................... 24
5.2.1 SISTEMAS MONOLÍTICOS....................................................................... 24
5.2.2 SISTEMAS EM CAMADAS...................................................................... 25
5.2.3 SISTEMA CLIENTE-SERVIDOR............................................................ 25
RESUMO DO TÓPICO 1.............................................................................................. 27
AUTOATIVIDADE........................................................................................................28
TÓPICO 2 GERÊNCIA DO PROCESSADOR...........................................................30
1 INTRODUÇÃO...................................................................................................30
2 TIPOS DE SISTEMAS OPERACIONAIS.......................................................30
2.1 SISTEMAS MONOPROGRAMÁVEIS/MONOTAREFAS...........................30
2.2 SISTEMAS MULTIPROGRAMÁVEIS/MULTITAREFAS...........................31
2.2.1 SISTEMA BATCH.......................................................................................32
2.2.2 SISTEMA DE TEMPO COMPARTILHADO............................................34
2.2.3 SISTEMA DE TEMPO REAL ...................................................................34
3 SISTEMA COM MÚLTIPLOS PROCESSADORES.......................................36
3.1 SISTEMAS FORTEMENTE ACOPLADOS.................................................. 37
3.2 SISTEMAS FRACAMENTE ACOPLADOS................................................ 39
4 MULTIPROCESSADORES EM SISTEMAS FORTEMENTE ACOPLADOS.... 40
4.1 PROCESSAMENTO VETORIAL....................................................................41
4.2 PROCESSAMENTO PARALELO................................................................ 42
4.3 ORGANIZAÇÃO FUNCIONAL..................................................................... 42
4.3.1 BARRAMENTO COMUM...........................................................................43
4.3.2 BARRAMENTO CRUZADO......................................................................43
4.3.3 MEMÓRIA MULTIPORT............................................................................43
5 MULTIPROCESSADORES EM SISTEMAS FRACAMENTE ACOPLADOS.......44
5.1 ORGANIZAÇÃO FUNCIONAL......................................................................44
5.1.1 BARRAMENTO............................................................................................44
5.1.2 ORGANIZAÇÃO DISTRIBUÍDA................................................................44
RESUMO DO TÓPICO 2.............................................................................................46
AUTOATIVIDADE........................................................................................................ 47
TÓPICO 3 PROGRAMAÇÃO CONCORRENTE.......................................................49
1 INTRODUÇÃO...................................................................................................49
2 PROCESSO.......................................................................................................49
2.1 CONTEXTO DE HARDWARE......................................................................50
2.2 CONTEXTO DE SOFTWARE.......................................................................50
2.2.1 ESPAÇO DE ENDEREÇAMENTO.............................................................51
2.2.2 ESTADOS DO PROCESSO.......................................................................51
2.3 MUDANÇAS DE ESTADO DO PROCESSO...............................................51
2.4 SUBPROCESSO E THREAD..................................................................... 52
2.5 PROCESSOS DO SISTEMA.......................................................................53
2.6 COMUNICAÇÃO ENTRE PROCESSOS.....................................................54
2.6.1 ESPECIFICAÇÃO DE CONCORRÊNCIA EM PROGRAMAS................54
2.7 PROBLEMAS DE COMPARTILHAMENTO DE RECURSOS...................55
2.7.1 SOLUÇÃO PARA OS PROBLEMAS DE COMPARTILHAMENTO....... 57
2.7.1.1 STARVATION.............................................................................................58
2.7.1.2 SINCRONISMO CONDICIONAL.............................................................58
2.7.1.3 SOLUÇÕES DE HARDWARE.................................................................58
2.8 SOLUÇÕES DE SOFTWARE.......................................................................59
2.8.1 SEMÁFOROS..............................................................................................59
RESUMO DO TÓPICO 3.............................................................................................65
AUTOATIVIDADE........................................................................................................66
REFERÊNCIAS............................................................................................................69

UNIDADE 2 SISTEMAS OPERACIONAIS..................................................... 71


TÓPICO 1 GERENCIAMENTO DE MEMÓRIA.......................................................... 73
1 INTRODUÇÃO................................................................................................... 73
2 ESTRUTURAS DE MEMÓRIA........................................................................ 73
3 ENDEREÇOS LÓGICOS E FÍSICOS............................................................... 75
4 MODELO DE MEMÓRIA DOS PROCESSOS ............................................... 76
5 ESTRATÉGIAS DE ALOCAÇÃO..................................................................... 77
5.1 PARTIÇÕES FIXAS....................................................................................... 77
5.2 ALOCAÇÃO CONTÍGUA.............................................................................. 78
5.3 ALOCAÇÃO POR SEGMENTOS................................................................. 79
5.4 ALOCAÇÃO PAGINADA.............................................................................. 81
6 MEMÓRIA VIRTUAL........................................................................................82
RESUMO DO TÓPICO 1..............................................................................................83
AUTOATIVIDADE........................................................................................................84
TÓPICO 2 SISTEMAS DE ARQUIVOS.....................................................................86
1 INTRODUÇÃO...................................................................................................86
2 ARQUITETURA GERAL..................................................................................86
3 BLOCOS FÍSICOS E LÓGICOS..................................................................... 88
4 ALOCAÇÃO FÍSICA DE ARQUIVOS.............................................................89
4.1 POSICIONAMENTO OU ALOCAÇÃO CONTÍGUA....................................90
4.2 ENCADEAMENTO OU ALOCAÇÃO ENCADEADA DE MEMÓRIA........91
4.3 INDEXAÇÃO OU ALOCAÇÃO INDEXADA DE MEMÓRIA.....................92
5 SISTEMA DE ARQUIVOS VIRTUAL.............................................................. 93
RESUMO DO TÓPICO 2.............................................................................................95
AUTOATIVIDADE........................................................................................................96
TÓPICO 3 GERÊNCIA DE ENTRADA/SAÍDA........................................................98
1 INTRODUÇÃO...................................................................................................98
2 DISPOSITIVOS DE ENTRADA/SAÍDA.........................................................99
2.1 BARRAMENTOS..........................................................................................100
2.2 INTERFACE DE ACESSO..........................................................................100
2.3 ENDEREÇAMENTO.....................................................................................101
2.4 INTERRUPÇÕES......................................................................................... 102
3 SOFTWARES DE ENTRADA/SAÍDA..........................................................104
4 DISCOS RÍGIDOS........................................................................................... 105
RESUMO DO TÓPICO 3............................................................................................115
AUTOATIVIDADE.......................................................................................................116
REFERÊNCIAS...........................................................................................................119

UNIDADE 3 SISTEMAS OPERACIONAIS – SEGURANÇA........................ 121


TÓPICO 1 SEGURANÇA DE SISTEMAS OPERACIONAIS................................. 123
1 INTRODUÇÃO................................................................................................. 123
2 PROPRIEDADES E PRINCÍPIOS DE SEGURANÇA................................. 123
3 AMEAÇAS....................................................................................................... 126
4 VULNERABILIDADES................................................................................... 126
5 CONTROLE DE ACESSO...............................................................................127
5.1 POLÍTICAS, MODELOS E MECANISMOS DE CONTROLE DE ACESSO.......128
5.1.1 POLÍTICAS BASEADAS EM PAPÉIS..................................................... 129
5.1.2 CONTROLE DE ACESSO EM UNIX....................................................... 130
5.1.3 CONTROLE DE ACESSO EM WINDOWS............................................. 132
5.1.4 MUDANÇA DE PRIVILÉGIOS ................................................................ 133
RESUMO DO TÓPICO 1............................................................................................ 135
AUTOATIVIDADE...................................................................................................... 136
TÓPICO 2 VIRTUALIZAÇÃO DE SISTEMAS OPERACIONAIS..........................138
1 INTRODUÇÃO.................................................................................................138
2 UM BREVE HISTÓRICO................................................................................138
3 CONSTRUÇÃO DE MÁQUINAS VIRTUAIS................................................ 139
3.1 DEFINIÇÃO DE MÁQUINA VIRTUAL....................................................... 139
3.2 TÉCNICAS DE VIRTUALIZAÇÃO ............................................................141
3.2.1 EMULAÇÃO COMPLETA ....................................................................... 142
3.3 APLICAÇÕES DA VIRTUALIZAÇÃO....................................................... 142
3.4 AMBIENTES DE MÁQUINAS VIRTUAIS.................................................144
RESUMO DO TÓPICO 2...........................................................................................146
AUTOATIVIDADE.......................................................................................................147
TÓPICO 3 DEADLOCK, SISTEMAS NUMÉRICOS E CONVERSÃO DE BASES......149
1 INTRODUÇÃO................................................................................................. 149
2 DEFINIÇÃO DE DEADLOCK......................................................................... 150
3 SISTEMAS DE NUMERAÇÃO....................................................................... 151
3.1 SISTEMA DECIMAL..................................................................................... 151
3.2 SISTEMA BINÁRIO..................................................................................... 152
3.3 SISTEMA OCTAL........................................................................................ 153
3.4 SISTEMA HEXADECIMAL........................................................................ 153
3.5 CONVERSÃO ENTRE SISTEMAS DE NUMERAÇÃO........................... 154
3.5.1 CONVERSÃO DECIMAL-BINÁRIO........................................................ 154
3.5.2 CONVERSÃO BINÁRIO-DECIMAL....................................................... 155
3.5.3 CONVERSÃO DECIMAL-OCTALS........................................................ 156
3.5.4 CONVERSÃO OCTAL-DECIMAL.......................................................... 156
3.5.5 CONVERSÃO DECIMAL-HEXADECIMAL............................................157
3.5.6 CONVERSÃO HEXADECIMAL-DECIMAL............................................157
3.5.7 CONVERSÃO OCTAL-BINÁRIO............................................................. 158
3.5.8 CONVERSÃO BINÁRIO-OCTAL........................................................... 158
3.5.9 CONVERSÃO BINÁRIO-HEXADECIMAL............................................ 159
3.5.10 CONVERSÃO HEXADECIMAL-BINÁRIO........................................... 159
RESUMO DO TÓPICO 3........................................................................................... 165
AUTOATIVIDADE...................................................................................................... 166
REFERÊNCIAS..........................................................................................................168
UNIDADE 1

SISTEMAS
OPERACIONAIS –
INTRODUÇÃO

OBJETIVOS DE APRENDIZAGEM
A partir do estudo desta unidade, você deverá ser capaz de:
• Entender os conceitos históricos relacionados à evolução dos sistemas
operacionais;
• Compreender os conceitos de sistemas operacionais;
• Entender os serviços que envolvem os sistemas operacionais;
• Compreender as chamadas de sistema.

PLANO DE ESTUDOS
A cada tema de aprendizagem desta unidade, você encontrará autoativida-
des com o objetivo de reforçar o conteúdo apresentado.
TEMA DE APRENDIZAGEM 1 – INTRODUÇÃO AO ESTUDO DE SISTEMAS OPE-
RACIONAIS
TEMA DE APRENDIZAGEM 2 – GERÊNCIA DO PROCESSADOR
TEMA DE APRENDIZAGEM 3 – PROGRAMAÇÃO CONCORRENTE
TÓPICO 1

INTRODUÇÃO
AO ESTUDO
DE SISTEMAS
OPERACIONAIS
1 INTRODUÇÃO
Um sistema computacional é um conjunto indissolúvel formado por hard-
ware e software. Sendo assim, individualmente, cada um deles não tem serventia.
O hardware é formado pela conjunção dos elementos físicos do sistema (processa-
dor, memória, placas de interface, periféricos etc.), e o software é composto pelos
comandos a serem dados ao hardware para a execução do processo de computa-
ção.
Entre os elementos do software, encontra-se um conjunto de programas
destinados a servir de interface entre o usuário e o hardware. A esse conjunto de
programas, dá-se o nome de “sistema operacional”. Entre as atribuições do sistema
operacional, está o fornecimento de um ambiente adequado para que os usuários
possam executar programas de forma eficiente e conveniente.
Também é tarefa do sistema operacional a garantia da integridade do siste-
ma de computação, evitando operações incorretas e quebra da estrutura do siste-
ma. Assim, o hardware deve possuir estruturas adequadas para garantir o correto
funcionamento do sistema operacional.
Uma vez que o sistema operacional é vinculado diretamente ao hardware,
para cada hardware há uma versão específica dele. Essas versões podem ser total-
mente diferentes, como é o caso de linhas de processadores diferentes (Powerpc,
Intel e Spark) ou parcialmente diferentes, quando se trata de pequenas alterações
de hardware (placas de vídeo, placas de som, impressoras etc.), nas quais somente
alguns arquivos são alterados (drivers).

13
Entretanto, os sistemas operacionais partem de um conjunto de tarefas co-
muns. Assim, pode-se dizer que o sistema operacional tem como funções básicas:
extensão da máquina e gerenciamento de seus recursos.

2 CONCEITO DE SISTEMA OPERACIONAL (SO)


Independentemente do processador e da complexidade do sistema compu-
tacional, o primeiro passo é ter claras quais são as funções do sistema operacional
(SO).
O sistema operacional como máquina estendida tem o intuito de apresentar
uma máquina virtual mais fácil de ser programada do que a programação direta
sobre o hardware. Nessa função, o sistema operacional atua como uma plataforma
intermediária entre o hardware e o programa de aplicação. O sistema operacional
irá interpretar os comandos fornecidos na aplicação e traduzi-los para a linguagem
de máquina adequada, que irá executá-los.

Figura 1 – Sistema operacional como máquina estendida

Fonte: o autor

O sistema operacional como gerenciador de recursos oferece uma interface


adequada com os usuários e gerencia todos os dispositivos de hardware. Ele é que
determinará a prioridade do uso dos recursos de hardware e irá monitorar a dis-
ponibilidade destes. Para o usuário, torna-se transparente em qual localização da
memória encontra-se determinado aplicativo ou como será monitorada a instrução
enviada por meio do mouse.

14
Figura 2 – Dispositivos e periféricos

Fonte: https://img.freepik.com/vetores-gratis/colecao-de-icones-isometrica-de-
-dispositivos-modernos-com-dezesseis-imagens-isoladas-de-perifericos-de-
-computadores-e-varias-ilustracoes-de-eletronicos-de-consumo_1284-29118.
jpg?w=740&t=st=1666622496~exp=1666623096~hmac=eaaf4881c40620ba-
464f170a81d88e5dd098fa502ba2efeff1aa0e7678863c62. Acesso em: 2 dez. 2022.

3 HISTÓRIA DOS SISTEMAS OPERACIONAIS


Ao longo do tempo, os sistemas operacionais vêm evoluindo para tornar o
uso da máquina mais eficiente, com um melhor gerenciamento do hardware ou o
compartilhamento de recursos, criando uma interface mais amigável com o usuário
por meio de ícones e automatização de tarefas.
Contudo, nem sempre foi assim. Os primeiros computadores nem tinham
sistema operacional. Sua operação só podia ser realizada por técnicos especializa-
dos e treinados para essas tarefas.
A seguir, veremos brevemente os principais pontos da história dos sistemas
operacionais. Acompanhe.

3.1 PRIMEIRA GERAÇÃO (1945-1955)


A primeira geração dos computadores fazia uso de válvulas, bem como de
painéis de programação. Havia um grupo de profissionais responsáveis por projetar,
programar e realizar sua manutenção. O processo de codificação dos programas
era feito em código absoluto e, portanto, era necessária a utilização de plugs nos
painéis a fim de prover controle das funções básicas das máquinas. Não havia lin-
guagem de programação e muito menos sistema operacional.

15
Para que fosse possível operar essas máquinas, um programador deveria
reservar a máquina e inserir o painel com a programação no computador com o
programa já pré-elaborado. Assim, no início dos anos de 1950, surgiram os primei-
ros cartões perfurados, o que tornou possível construir programas nesses cartões
para, depois, serem carregados por meio de uma leitora de cartões específica.

3.2 SEGUNDA GERAÇÃO (1955-1965)


A segunda geração é lembrada pelo uso dos famosos transistores e dos
seus sistemas batch (sistemas em lote). A utilização dos transistores permitiu que
o computador se tornasse confiável e pudesse ser fabricado com propósitos co-
merciais.
As máquinas dessa geração eram acondicionadas em salas com ar-con-
dicionado e operadas por profissionais especialmente capacitados. Por terem um
valor extremamente elevado, somente órgãos governamentais e universidades
conseguiam custear os elevados preços, de milhões de dólares.

Figura 3 – Sistema de lotes: conjunto de cartões que formam um job

Fonte: Tanenbaum e Woodhull (2008, p. 25)

Havia muita perda de tempo no processo de preparação da máquina e no


deslocamento do operador. Como o computador era um produto caro, desenvol-
veu-se um sistema para melhorar seu tempo de uso. Surge, então, o processa-
mento em lote (batch). O processo consistia em utilizar um computador menor e
mais barato para ler vários conjuntos de cartões, o qual armazenava, em uma fita
magnética, a sequência de programas que finalmente eram lidos pelo computador
principal.

16
Figura 4 – Processamento em lotes (batch)

Fonte: Tanenbaum e Woodhull (2008, p. 24)

Os principais sistemas operacionais eram o Fortran Monitor System (FMS) e


o IBSYS, ambos da IBM.

3.3 TERCEIRA GERAÇÃO (1965-1980)


Em geral, os fabricantes de computadores tinham duas linhas de máquinas
totalmente incompatíveis. Uma linha era a dos computadores científicos, utilizados
para cálculos numéricos, e a outra era a dos computadores comerciais, emprega-
dos para classificar e imprimir informações.
Essa dualidade de produtos tornava-os caros e reduzia a possibilidade de
clientes. A IBM veio com uma solução por meio do desenvolvimento do System/360,
também conhecido como /360. Essa série de máquinas tinha o software totalmen-
te compatível; as máquinas variavam em capacidade. As principais diferenças nas
máquinas da série estavam no preço e no desempenho (memória máxima, veloci-
dade de processamento, número de dispositivos de entrada/saída (E/S) permitidos
etc.). Uma vez que todas as máquinas possuíam a mesma arquitetura e conjunto
de instruções, todos os programas desenvolvidos para uma máquina podiam ser
aproveitados nas demais da série, possibilitando uma melhor adequação às neces-
sidades de cada cliente e a expansão futura.
O /360 foi o primeiro computador em escala comercial a utilizar circuitos
integrados em baixa escala, o que proporcionou uma melhor relação preço/desem-
penho. O êxito alcançado pelo /360 na criação de uma família de computadores
compatíveis fez com que os outros fabricantes adotassem a mesma estratégia.
Entretanto, criar uma família de computadores que rodassem o mesmo
software e o mesmo sistema operacional resultou em um sistema operacional
complexo e grande, pois tinha que:

•  ser eficiente em máquinas com poucos periféricos e com muitos peri-


féricos;
•  funcionar em ambientes comerciais e científicos;

17
•  ser eficiente para qualquer uso.

Nessa época, temos o surgimento do SO/360. O ponto de destaque são os


desenvolvimentos dentro do conceito de multiprogramação, com o objetivo de se
evitar um processo ocioso da CPU (no momento das trocas das fitas ou demais
operações). O processo de memória era dividido em partições através de um outro
JOB especificamente para essa finalidade, ocupando o tempo que a CPU estaria
ociosa.
Também era utilizada a leitura de JOBs por meio de cartões de disco. As-
sim, quando uma determinada execução era finalizada, já era possível iniciar outra
execução. Essa técnica foi denominada de “spooling” (do inglês, “simultaneous pe-
ripheral operation on line”, ou “operação periférica simultânea on-line” em portu-
guês). Assim, a necessidade de se ter um tempo de resposta mais rápido abriu um
novo caminho ao processo da multiprogramação, o time-sharing ou compartilha-
mento de tempo. Nesse sistema compartilhado, se uma determinada quantidade
de usuários realizassem logon no sistema e uma determinada quantidade estivesse
ociosa, a CPU (Central Process Unit) poderia alocar os JOBs para os demais que
estivessem em operação.
Um outro importante passo que tivemos nesta etapa foi o crescimento dos
chamados minicomputadores, o que promoveu o surgimento de uma nova indús-
tria. Acompanhe.

3.4 QUARTA GERAÇÃO (A PARTIR DE 1980)


Com o desenvolvimento dos circuitos LSI (Large Scale Integration, Integra-
ção em Larga Escala), deu-se início à era do computador pessoal. Assim como o
minicomputador da terceira geração possibilitou que cada departamento de uma
empresa ou uma universidade tivesse seu computador, o microprocessador possi-
bilitou que as pessoas tivessem seu computador pessoal.
Os primeiros minicomputadores foram chamados de “estações de trabalho”,
que nada mais eram do que computadores pessoais de maior porte, normalmente
conectados por uma rede.
A disponibilidade do poder da computação para computadores pessoais
abriu caminho para o crescimento da indústria do software. A maioria desses soft-
wares foi projetada para usuários que não só ignoravam tudo sobre computadores
como também não tinham nenhuma intenção de aprender.
Inicialmente, dois sistemas operacionais dominaram a cena: o MS-DOS, da
Microsoft, e o Unix.
O MS-DOS era amplamente usado nas máquinas IBM PC e em outras que
empregavam os processadores Intel 8088 e seus sucessores (80286, 80386 e

18
80486); mais tarde, o Pentium e o Pentium PRO. O sucessor do MS-DOS, o Windo-
ws, originalmente rodava sobre o DOS e era mais como uma shell do que um SO.
Em 1995, a Microsoft lançou uma versão independente, o Windows 95, de
modo que o MS-DOS deixou de ser utilizado com suporte do Windows.
O Unix, já em sua versão multiusuário, dominava as estações de trabalho e
em outros computadores topo de linha, como os servidores de rede.
Um desenvolvimento importante iniciado em meados da década de 1980
foi o crescimento das redes de computadores pessoais que executavam sistemas
operacionais de rede e sistemas operacionais distribuídos. Em alguns sistemas
operacionais de rede, os usuários estão cientes da existência de múltiplos com-
putadores e podem se comunicar, se conectar com máquinas e copiar arquivos
de uma máquina para outra. Cada máquina executa localmente seu SO e tem seu
próprio usuário (ou usuários).

4 CLASSIFICAÇÃO DOS SISTEMAS OPERACIONAIS


Os sistemas operacionais podem ser classificados quanto a:

•  tipos de serviços oferecidos ao usuário;


•  número de usuários;
•  tipo de interação;
•  tipo de aplicação.

4.1 QUANTO AO TIPO DE SERVIÇOS OFERECIDOS


AO USUÁRIO
Vejamos a seguir.

•  Sistema de processamento de lotes (batch): um lote de várias ta-


refas a serem executadas é organizado em um dispositivo de entrada.
As tarefas são lidas e processadas em ordem sequencial de leitura. Ao
finalizar a última tarefa, o sistema está novamente pronto para ler e pro-
cessar mais tarefas.
•  Sistema de tempo compartilhado (time sharing): trabalha em mul-
tiprogramação, isto é, aceita várias tarefas residentes na memória ao
mesmo tempo, para serem processadas concorrentemente, através de
um mecanismo de divisão do tempo de UCP entre os processos.
•  Sistema de tempo real (real time): dedicado a um determinado tipo

19
de aplicação. Seus módulos são construídos para atender a requisitos
de tempo (ex.: controle de uma caldeira, de um míssil, do metrô, bolsa
de valores etc.).

4.2 QUANTO AO NÚMERO DE USUÁRIOS


•  Monousuário: apenas um usuário utiliza todo o sistema de cada vez.
•  Multiusuário: vários usuários podem utilizar o sistema de modo com-
partilhado em um dado instante.

4.3 QUANTO AO TIPO DE INTERAÇÃO


•  Batch: por submissão de tarefas (jobs) em lotes, através de uma lin-
guagem de controle de jobs (JCL), sem interação usuário e computador.
•  Interativo: pela interação direta do usuário com o sistema, via terminal
de entrada e saída (do tipo teleimpressora ou teclado e display).
•  Transacional: chegada de uma transação (ou comando, ou mensa-
gem) que “acorda” um módulo de tratamento ou execução apropriado.

4.4 QUANTO À APLICAÇÃO


•  Dedicado: tem uso restrito a determinada aplicação (ex.: controle de
processos).
•  De uso geral: tem uso indeterminado para qualquer aplicação, isto é,
executa todo tipo de programa.
•  Híbrido: combina os dois anteriores.

5 ESTRUTURA DO SISTEMA OPERACIONAL


Uma vez que os sistemas operacionais não são aplicações do tipo sequen-
cial (início, meio e fim), entender sua estrutura de funcionamento pode ser um
pouco complicado. Basicamente, os sistemas operacionais funcionam por meio de
rotinas disparadas por eventos assíncronos. Esses eventos estão associados com
o hardware e com as tarefas internas do próprio sistema operacional.
O SO é formado por um conjunto de rotinas (procedimentos) que oferecem
serviços aos usuários do sistema e suas aplicações, bem como a outras rotinas do

20
próprio sistema. Esse conjunto de rotinas é chamado de “núcleo do sistema” ou
“kernel” (cérebro). As principais funções do núcleo são:

•  tratamento de interrupções;
•  criação e eliminação de processos;
•  sincronização e comunicação entre processos;
•  escalonamento e controle dos processos;
•  gerência de memória;
•  gerência do sistema de arquivos;
•  operações de entrada e saída;
•  contabilização e segurança do sistema.

A estrutura do SO, ou seja, a maneira como o código do sistema é organiza-


do e o inter-relacionamento entre seus diversos componentes, pode variar confor-
me a concepção do projeto.

5.1 PROTEÇÃO DO SISTEMA


Uma preocupação, na grande maioria dos projetos de SO, é a implementa-
ção de mecanismos de proteção ao núcleo do sistema e de acesso aos seus servi-
ços. Essa proteção é fundamental para que uma aplicação ou usuário não venha a
destruir dados ou rotinas associadas ao SO.

5.1.1 SYSTEM CALLS


Para manter a integridade do sistema, criam-se rotinas cuja função é inter-
mediar as solicitações dos usuários ou aplicações com o núcleo do sistema. Essas
rotinas recebem o nome de “system call” (“chamada ao sistema”). Assim, quando o
usuário (ou aplicação) deseja solicitar algum serviço do sistema, realiza uma cha-
mada a uma de suas rotinas por meio do system call, que são as portas de entrada
para se ter acesso ao núcleo do SO.

21
Figura 5 – System Call

Fonte: o autor

Para cada serviço, existe um system call associado; cada SO tem o seu
próprio conjunto (biblioteca) de chamadas, com nomes, parâmetros e formas de
ativação específicas.
Os system calls podem ser divididos em grupos de funções. Vejamos o qua-
dro a seguir.

Quadro 1 – Funções dos System Calls

Função Gerência de entrada/saída

Gerência de processos Criação e eliminação de processos.


Alteração das características do processo.
Sincronização e comunicação entre proces-
sos.
Gerência de memória.
Alocação e desalocação de memória.

Gerência de entrada/saída Operações de entrada/saída.


Manipulação de arquivos e diretórios.

Fonte: o autor

22
5.1.2 MODOS DE ACESSO
Para manter a integridade do sistema, nem todas as instruções podem es-
tar disponíveis para as aplicações. Suponha que uma aplicação deseja gravar um
arquivo em disco. Como o disco é um recurso compartilhado, sua utilização deverá
ser realizada unicamente pelo SO, evitando que a aplicação tenha acesso a qual-
quer área do disco indiscriminadamente, o que poderia comprometer a segurança
do sistema. As operações que envolvem dispositivos de entrada/saída são sempre
efetuadas pelo SO para que não ocorram problemas com os aplicativos.
As instruções que têm o poder de comprometer o sistema são conhecidas
como “instruções privilegiadas” e as que não oferecem perigo, como “instruções
não privilegiadas”.
Para que uma aplicação execute uma instrução privilegiada, o processador
implementa o mecanismo de modos de acesso. Esses modos são divididos em dois:

•  modo usuário: executa as aplicações não privilegiadas;


•  modo kernel: executa as aplicações privilegiadas.

Quem determina o modo de acesso é um conjunto de bits, que fica em um


registrador especial da Central Processing Unit (CPU). Através desse registrador, o
hardware verifica se a instrução pode ou não ser executada pela aplicação.
O núcleo do SO sempre é executado em modo kernel, porque deve ter a ca-
pacidade de gerenciar e compartilhar todos os recursos, solucionando, em diversos
níveis, os problemas de acesso às instruções privilegiadas.

Figura 6 – Esquema de um System Call

Fonte: o autor

23
5.2 ORGANIZAÇÃO DOS SISTEMAS OPERACIONAIS
Projetar um sistema operacional requer a escolha de uma forma de organi-
zação para que as rotinas do SO possam operar adequadamente sem comprometer
a performance e mantendo a integridade do sistema.

5.2.1 SISTEMAS MONOLÍTICOS


São organizados de forma que os conjuntos de rotinas possam interagir
entre si. Essa é a organização mais comum de ser encontrada. A estrutura asse-
melha-se a um grande programa no qual os diversos processos são compilados e
linkados, formando um só executável. Assim, quando o usuário solicita a execução
de um procedimento, o programa de interface (system call) irá disparar o processo
solicitado, que poderá solicitar ou não a intervenção de outros processos.

Figura 7 – Estrutura de um sistema monolítico

Fonte: o autor

24
5.2.2 SISTEMAS EM CAMADAS
Como o próprio nome diz, é aquele em que o Sistema Operacional é dividi-
do em camadas sobrepostas. Cada módulo oferece um conjunto de funções que
podem ser utilizadas por outros módulos. Módulos de uma camada podem fazer
referência apenas a módulos das camadas inferiores.
A vantagem da estruturação em camadas é isolar as funções do SO, facili-
tando sua alteração e depuração, além de criar uma hierarquia de níveis de modos
de acesso, protegendo as camadas mais internas.

5.2.3 SISTEMA CLIENTE-SERVIDOR


Atualmente, busca-se tornar o núcleo do sistema operacional o menor e
o mais simples possível. Para solicitar um serviço, como a leitura de um bloco de
determinado arquivo, o processo usuários, agora denominado “processo cliente”,
envia uma requisição para um processo servidor, o qual realiza o trabalho solicitado
e envia a resposta de volta ao processo usuário.
As solicitações são feitas por meio de mensagem ao servidor, que, por sua
vez, responde também por meio de mensagem. O elemento responsável pela fun-
ção e comunicação entre cliente e servidor é o kernel.
Podemos observar que, nesse modelo, os servidores realizam execução em
modo usuário, assim, não têm acesso direto aos componentes internos do sistema;
desse modo, apenas o núcleo do sistema será executado no kernel. Assim, caso
ocorra algum problema, o serviço poderá parar sem comprometer o sistema. O pro-
cesso para implementação em sistemas cliente-servidor permite que os processos
sejam isolados dentro dos sistemas operacionais, facilitando a sua manutenção.
Os servidores estabelecem comunicação através de múltiplos servidores
(fortemente acoplados) e sistemas distribuídos (fracamente acoplados). O proces-
so para implementar sistemas cliente-servidor em ambientes distribuídos faz com
que “clientes” possam solicitar serviços de modo que suas respostas possam ser
obtidas de forma remota.
Apesar de todas as vantagens desse sistema, sua implementação, na prá-
tica, é difícil devido ao fato de que certas funções do SO exigem acesso direto ao
hardware, como operações de entrada e saída. Então, o que é implementado usual-
mente é uma combinação do modelo de camadas com o modelo cliente-servidor. O
núcleo do sistema, além de ser responsável pela comunicação entre cliente e ser-
vidor, passa a incorporar outras funções críticas do sistema, como escalonamento
e gerência de memória, além das funções dos device drivers.

25
NOTA
Sistema operacional pode ser definido como um conjunto de programas
que gerenciam recursos, processadores, armazenamento, dispositivos de
entrada e saída e dados da máquina e seus periféricos.

26
RESUMO DO TÓPICO 1

Neste tema de aprendizagem, você aprendeu:

• História dos sistemas operacionais: os primeiros computadores nem tinham sis-


tema operacional. Sua operação só podia ser realizada por técnicos especializa-
dos e treinados para essas tarefas.
• Conceitos relacionados a sistemas operacionais. Uma vez que os sistemas ope-
racionais não são aplicações do tipo sequencial (início, meio e fim), entender sua
estrutura de funcionamento pode ser um pouco complicado
• Serviços que envolvem sistemas operacionais. Projetar um sistema operacional
requer a escolha de uma forma de organização.

27
AUTOATIVIDADE

1. Independentemente do processador e da complexidade do sistema com-


putacional, o primeiro passo é ter claras as funções do sistema operacio-
nal. Baseado no entendimento dessas informações, assinale a alternativa
CORRETA:

a. ( ) O sistema operacional como máquina estendida tem a função


de apresentar uma máquina virtual mais fácil de ser programada
do que a programação direta sobre o hardware.
b. ( ) O sistema operacional como máquina estendida tem a função
de apresentar uma máquina física mais fácil de ser programada
do que a programação direta sobre o hardware.
c. ( ) O sistema operacional como máquina estendida tem a função
de apresentar uma máquina física mais fácil de ser programada
do que a programação direta sobre o software.
d. ( ) O sistema operacional como máquina estendida tem a função
de apresentar uma máquina virtual mais fácil de ser programada
do que a programação direta sobre o software.

2. O sistema operacional como gerenciador de recursos oferece uma in-


terface adequada com os usuários e gerencia todos os dispositivos de
hardware. Baseado no entendimento dessas informações, assinale a al-
ternativa CORRETA:

a. ( ) O sistema operacional é que irá determinar a prioridade do


uso dos recursos de hardware e irá monitorar a disponibilidade
destes. Para o usuário, torna-se transparente em qual localização
da memória encontra-se determinado aplicativo ou como será
monitorada a instrução enviada por meio do mouse.
b. ( ) O software de gerenciamento é que irá determinar a prioridade
do uso dos recursos de hardware e irá monitorar a disponibilidade
destes. Para o usuário, torna-se transparente em qual localização
da memória encontra-se determinado aplicativo ou como será
monitorada a instrução enviada por meio do mouse.
c. ( ) O hardware de gerenciamento é que irá determinar a prioridade
do uso dos recursos de hardware e irá monitorar a disponibilidade
destes. Para o usuário, torna-se transparente em qual localização
da memória encontra-se determinado aplicativo ou como será
monitorada a instrução enviada por meio do mouse.

28
d. ( ) O sistema operacional é que irá determinar a prioridade do uso
dos recursos de software e irá monitorar a disponibilidade destes.
Para o usuário, torna-se transparente em qual localização da me-
mória encontra-se determinado aplicativo ou como será monito-
rada a instrução enviada por meio do mouse.

3. A primeira geração dos computadores utilizava válvulas e painéis de


programação. Um grupo de pessoas projetava, programava, operava
e realizava a manutenção do computador. Baseado no entendimento
dessas informações, assinale a alternativa CORRETA:

a. ( ) A programação era feita em código absoluto e, muitas ve-


zes, conectando plugues em painéis para controlar as funções
básicas da máquina. Não existia linguagem de programação nem
sistema operacional.
b. ( ) Essa geração é marcada pelo uso de transistores e dos siste-
mas em lote (batch). O uso dos transistores tornou o computador
confiável para que pudesse ser fabricado e comercializado.
c. ( ) Em geral, os fabricantes de computadores tinham duas linhas
de máquinas totalmente incompatíveis. Uma linha era a dos com-
putadores científicos, utilizados para cálculos numéricos, e a ou-
tra era a dos computadores comerciais, utilizados para classificar
e imprimir informações.
d. ( ) Com o desenvolvimento dos circuitos LSI (Large Scale Inte-
gration, Integração em Larga Escala), deu-se início à era do com-
putador pessoal.

4. A segunda geração é marcada pelo uso de transistores e dos sistemas


em lote (batch). O uso dos transistores tornou o computador confiável
para que pudesse ser fabricado e comercializado. Disserte sobre os con-
ceitos que envolvem a segunda geração.
5. Em geral, os fabricantes de computadores tinham duas linhas de máqui-
nas totalmente incompatíveis. Uma linha era a dos computadores cientí-
ficos, utilizados para cálculos numéricos, e a outra era a dos computado-
res comerciais, utilizados para classificar e imprimir informações. Disserte
sobre os conceitos que envolvem a terceira geração.

29
TÓPICO 2

GERÊNCIA DO
PROCESSADOR
1 INTRODUÇÃO
A evolução do hardware tornou o computador mais barato, aumentou a
quantidade de recursos disponíveis e popularizou seu uso. Em contrapartida, essa
evolução exigiu que os sistemas operacionais o acompanhassem, incluindo em
suas estruturas as interfaces gráficas e o uso do mouse.
A criação das redes de computadores exigiu que os sistemas operacionais
tivessem funções específicas de controle e segurança, o que aumentou sua com-
plexidade intrínseca.

2 TIPOS DE SISTEMAS OPERACIONAIS


Quanto ao número de tarefas executadas, os sistemas operacionais podem
ser classificados em:

•  sistemas monoprogramáveis/monotarefas;
•  sistemas multiprogramáveis /multitarefas.

A seguir, veremos mais detalhes de cada um deles. Acompanhe.

2.1 SISTEMAS MONOPROGRAMÁVEIS/


MONOTAREFAS
São aqueles em que apenas um programa ou job é executado por vez. A
execução de uma nova tarefa ou programa só pode ser iniciada após o término da
tarefa anterior.
Inicialmente, esses sistemas operacionais foram desenvolvidos para traba-
lharem nos mainframes quando somente o operador tinha acesso à máquina. Eles

30
serviram de base para o desenvolvimento dos primeiros sistemas operacionais dos
computadores pessoais, uma vez que somente um usuário teria acesso à máquina,
não exigia-se segurança e não havia capacidade de processamento para mais de
uma tarefa. Vejamos o quadro a seguir, com as vantagens e desvantagens desse
sistema.

Quadro 2 – Vantagens e desvantagens do sistema monoprogramável / monotarefa

Vantagens Desvantagens

Todos os recursos Enquanto um programa aguarda por um evento,


da máquina ficam como a digitação de um dado, o processador perma-
disponíveis para a nece ocioso, sem realizar qualquer tipo de processa-
execução de uma mento.
única tarefa.
A memória é subutilizada caso o programa não a
preencha totalmente.
Os periféricos, como discos e impressoras, estão
dedicados a um único usuário, e nem sempre são
utilizados de forma integral, encarecendo o proces-
samento.

Fonte: o autor

Agora, veremos as características dos sistemas multiprogramáveis/multi-


tarefas.

2.2 SISTEMAS MULTIPROGRAMÁVEIS/


MULTITAREFAS
Se os computadores são elementos caros, a subutilização de seus recursos
é inadmissível. Dessa forma, foram criados os sistemas multiprogramáveis ou mul-
titarefas. Esses sistemas encadeiam uma série de tarefas para executá-las simul-
taneamente, compartilhando todos os recursos (memória, dispositivos de input/
output (I/O) e processador) entre as diversas tarefas em execução.
No quadro a seguir, temos as vantagens e desvantagens desse sistema.

31
Quadro 3 – Vantagens e desvantagens do sistema multiprogramável / multitarefa

Vantagens Desvantagens

Vários usuários podem O tempo de processamento individual de cada


trabalhar simultanea- tarefa aumenta.
mente, aumentando a
O sistema operacional torna-se mais comple-
produtividade e redu-
xo, uma vez que necessita de um programa de
zindo os custos de pro-
controle de execução. Essa complexidade exige
cessamento.
maior espaço em memória para o sistema ope-
racional.

Fonte: o autor

De acordo com o número de usuários que estejam trabalhando, o sistema


pode ser operado como monoprogramável ou multiprogramável.
Os sistemas multiprogramáveis/multitarefas podem ser classificados de
três maneiras, dependendo da forma como suas aplicações são gerenciadas:

•  sistema batch;
•  sistema de tempo compartilhado;
•  sistema de tempo real.

Na sequência, abordaremos cada um deles. Acompanhe.

2.2.1 SISTEMA BATCH


Os primeiros sistemas do tipo batch foram desenvolvidos para os mainfra-
mes. Esses sistemas tinham um controle de execução simples. Sua tarefa principal
era transferir o controle automaticamente de um job para outro. O sistema opera-
cional ficava residente na memória e, para acelerar o processamento, o operador
reunia um conjunto de jobs em lotes cujas necessidades de recursos operacionais
(compiladores e base de dados) eram semelhantes.

32
Figura 8 – Esquema de layout de memória de um sistema batch

Fonte: o autor

Devido a essas características, tais sistemas também são conhecidos como


“sistemas em lote”. Mesmo com a estrutura, processador, memória e dispositivos de
I/O não estão ocupados o tempo todo.
Os primeiros sistemas multiprogramáveis surgiram de uma derivação do
sistema em lote no qual as tarefas eram partilhadas entre os recursos existentes
de acordo com a necessidade. O princípio básico de funcionamento era:

1. Carrega-se na memória um conjunto de jobs a serem executados.


2. O primeiro job começa sua execução.
3. No primeiro momento que este exige uma operação de um dispositivo
mais lento que o processador, o sistema passa o controle do processa-
dor para o segundo job.
4. O segundo job entra em execução e, no momento que exige a operação
de um dispositivo mais lento, o controle do processador passa para o
job seguinte.
5. O processo segue até que o último job contido na memória seja execu-

33
tado e, assim, retorna ao primeiro job.

2.2.2 SISTEMA DE TEMPO COMPARTILHADO


Também conhecido como time-sharing, permite a interação dos usuários
com o sistema. Essa interação é feita basicamente por meio dos terminais, que, por
sua vez, são compostos por vídeos, teclado, mouse e um sistema de comunicação
com o computador.
Esse tipo de sistema trabalha reservando tempos determinados (time-slice)
para as aplicações de cada usuário. Caso o programa de um determinado usuário
não se encerre em seu espaço de tempo, o processador interrompe-o e inicia o
programa de um novo usuário.
Esse processo é feito de forma a atender todos os usuários da fila. Para que
o processador não tenha muitos jobs em sua fila, aumentando o tempo de espera
de cada usuário, a quantidade de trabalhos a serem executados é limitada por meio
da configuração do sistema.
Como cada ação ou comando tende a ser curta em um sistema de tempo
compartilhado, somente um pequeno tempo de CPU é necessário para cada usuá-
rio. Como o sistema alterna rapidamente de um usuário para outro, cada usuário
tem a impressão de que todo o sistema está dedicado para seu uso.
O desenvolvimento de sistemas de tempo compartilhado é uma tarefa ár-
dua. Entretanto, se levarmos em conta o tempo de desenvolvimento e a depuração
de uma aplicação, aumenta consideravelmente a produtividade dos usuários, redu-
zindo custos de utilização do sistema.

2.2.3 SISTEMA DE TEMPO REAL


São uma forma de sistema operacional no qual os requisitos de tempo de
operação do processador ou o fluxo de dados são as bases de seu desenvolvimen-
to.
Esses sistemas são utilizados como dispositivos de controle em aplicações
dedicadas, tais como sistemas de imagens médicas, sistemas de controle indus-
trial, sistemas de controle de experimentos científicos, sistemas de controle de in-
jeção de combustível etc.
Um sistema de tempo real ainda é empregado em situações nas quais os
requisitos de tempo de processamento ou fluxo de dados são rígidos. Conheci-
do como real-time, é semelhante ao sistema de tempo compartilhado, entretanto,
seus objetivos e suas exigências são diferentes. Como, em geral, monitoram sis-

34
temas críticos, o tempo de resposta exigido no processamento das aplicações é
muito rígido, não possibilitando utilizar o conceito de time- slice.
A principal função dos sistemas operacionais desse tipo é a de assegurar
o máximo de confiabilidade ao processo controlado, com o mínimo de intervenção
humana. Na eventualidade de um defeito do hardware, espera-se que o sistema
“falhe com a segurança”, ou seja, que haja uma degradação parcial das funções.
Além das situações já citadas, esse tipo de sistema está presente em con-
trole de processos, como monitoramento de refinaria de petróleo, controle de trá-
fego aéreo e controle de usinas termelétricas e nucleares.
No quadro a seguir, podemos conhecer a classificação dos sistemas de
tempo real de acordo com o tipo de aplicação. Acompanhe.

Quadro 4 – Classificação dos sistemas de tempo real quanto ao tipo de aplicação

Tipo Descrição

Sistemas de tempo real crítico São aqueles que devem garantir que as
tarefas consideradas críticas sejam exe-
cutadas a tempo.
Com o objetivo de atingir essa meta,
todos os atrasos no sistema devem ser
controlados.
Todos os tempos de recuperação dos
dados armazenados, transmissão ao
processador, processamento e resposta
do sistema operacional devem estar de
acordo com o limite estabelecido para a
aplicação.
Por conta dos limites de tempo de res-
posta, não é possível usar esses siste-
mas de forma compartilhada.
São indicados para os casos em que
qualquer atraso de resposta pode cau-
sar danos significativos, como é o caso
da robótica e dos controles de processos
industriais.

35
Sistemas operacionais de tempo A tarefa crítica tem prioridade sobre as
real não crítico demais tarefas e mantém essa priorida-
de até ser concluída.
Seu uso está limitado a aplicações em
que pequenos atrasos não causem da-
nos graves, como é o caso dos sistemas
multimídias e da realidade virtual.

Fonte: o autor

3 SISTEMA COM MÚLTIPLOS PROCESSADORES


A evolução do hardware e dos sistemas de comunicação tornou possível
a conexão de mais de um processador para execução de tarefas. Para atender
à demanda desse tipo de aplicação, foram criados os sistemas operacionais com
múltiplos processadores, os quais se caracterizam por possuir dois ou mais proces-
sadores interligados e trabalhando em conjunto.
Os sistemas com múltiplos processadores são utilizados em aplicações que
exigem um volume grande de processamento. Seu desenvolvimento baseia-se no
fato de que, com um número maior de processadores, pode-se reduzir o tempo
de término de uma tarefa e pode ser executado um maior número de tarefas ao
mesmo tempo.
Cabe ressaltar que, se for duplicada a quantidade de processadores, o tem-
po de processamento não vai se reduzir pela metade. Esse número é um pouco
maior devido à introdução de sistemas de controle de processamento, que aumen-
tam o tempo de resposta do sistema. Aplicações nas quais o número de usuários ou
o volume de dados compartilhados é grande fazem desse sistema uma boa opção.
Um fator-chave é a forma de comunicação entre os processadores e o grau
de compartilhamento da memória e dos dispositivos de entrada e saída. Em função
disso, esses sistemas podem ser classificados como fortemente acoplados ou fra-
camente acoplados.

36
Figura 9 – Sistemas com múltiplos processadores

Fonte: o autor

A seguir, veremos mais detalhes de cada um desses tipos. Vamos lá?

3.1 SISTEMAS FORTEMENTE ACOPLADOS


Os sistemas fortemente acoplados estão, em geral, dentro de um mesmo
hardware, no qual os processadores são gerenciados por um único sistema opera-
cional e compartilham uma única memória e dispositivos de I/O. O uso de múltiplos
processadores possibilita a execução de múltiplas tarefas simultaneamente ou a
divisão de uma tarefa em pequenas subtarefas.
A preocupação, nesse tipo de sistema, é o problema de concorrência, pois
vários processadores podem acessar o mesmo espaço de memória, além do fato
de como organizar de forma eficiente os processadores, a memória e os periféricos.
Os sistemas fortemente acoplados podem ser divididos conforme a simetria
existente entre seus processadores, ou seja, se todos os processadores podem
executar ou não as mesmas funções. Assim, podem ser assimétricos ou simétricos.
Vejamos o quadro a seguir.

37
Quadro 5 – Classificação dos sistemas fortemente acoplados quanto à simetria entre processadores

Tipo Descrição

Sistemas fortemente acoplados Os sistemas assimétricos (mestre/escravo)


assimétricos têm como característica o fato de que somen-
te um processador (mestre) tem a capacidade
de executar os serviços do SO, tais como as
operações e I/O. Sempre que o processador
escravo precisar realizar essas operações,
terá que solicitar ao processador mestre.
O sistema pode tornar-se ineficiente caso
ocorra um número excessivo de interrupções
geradas pelo processador escravo que solici-
tam operações de I/O.
Outro problema que pode ser percebido nesta
configuração está no fato de que, se o pro-
cessador mestre falhar, todo o sistema ficará
inoperante.

Sistemas fracamente acoplados Caracterizam-se por não haver uma hierar-


simétricos quia entre os processadores. Todas as tarefas
podem ser executadas em qualquer proces-
sador, ficando o SO responsável pelo geren-
ciamento dos recursos compartilhados.
O mesmo processo pode ser executado si-
multaneamente em mais de um processador,
aproveitando possíveis recursos de paralelis-
mo existentes na aplicação.
Esses sistemas permitem um melhor balan-
ceamento do volume de tarefas e, no caso da
falha de um processador, o volume de tarefas
é subdividido entre os restantes, impedindo a
falha total do sistema.
Somente poucas funções ficam a cargo de
um único processador, como é o caso da ini-
cialização do sistema.
Os sistemas simétricos são mais poderosos
que os assimétricos, possibilitando uma me-
lhor distribuição da carga de processamento
e das operações de I/O.

Fonte: o autor

38
3.2 SISTEMAS FRACAMENTE ACOPLADOS
Nesse caso, dois ou mais sistemas de computação são conectados por
meio de linhas de comunicação. Cada sistema funciona de maneira independente,
com seu próprio processador, memória, dispositivos de I/O e sistemas operacionais.
Os sistemas fracamente acoplados podem ser classificados segundo o
compartilhamento de recursos e dados em sistemas operacionais de rede e siste-
mas operacionais distribuídos. Observe o quadro a seguir.

Quadro 6 – Classificação dos sistemas fracamente acoplados quanto ao compartilhamento de


recursos e dados

Tipo Descrição

Sistemas operacio- Cada nó (computador) tem seu próprio sistema operacional, hardware
nais de rede e software, que possibilitam ao sistema ter acesso a outros componen-
tes da rede, compartilhando seus recursos.

Esses sistemas permitem as seguintes operações:

•  cópia remota de arquivos;

•  emulação de terminal;

•  impressão remota;

•  gerência remota;

•  correio eletrônico.

39
Sistemas operacio- Também possui cada componente da rede com seu sistema opera-
nais distribuídos cional, processador, memória e dispositivos de I/O. Entretanto, o forte
relacionamento existente entre os componentes dos sistemas e o uso
do mesmo sistema operacional em cada nó é o que o diferencia dos
sistemas em rede.

Para o usuário de um sistema operacional distribuído, tudo se passa


como se ele estivesse em contato com um computador central.

A principal vantagem desse sistema é o balanceamento de cargas; um


levantamento das atividades de cada processador dos computadores
pertencentes ao sistema irá determinar o processador para a realiza-
ção da próxima tarefa. O processador mais livre recebe a tarefa a ser
executada e a executa até seu término. Esse tipo de sistema também
é conhecido como “cluster”, e impressoras, discos e fitas são compar-
tilhados.

Podem ser considerados uma evolução dos sistemas fortemente aco-


plados, na qual uma aplicação pode ser executada por qualquer pro-
cessador. Os sistemas distribuídos permitem que uma aplicação seja
dividida em partes diferentes (aplicações distribuídas), comunicando-
-se por meio das linhas de comunicação. Cada parte da aplicação é
processada em um nó independente.

Uma grande vantagem é a capacidade de redundância do sistema.


Como as aplicações estão distribuídas por diversos nós, caso ocorra
algum problema com um dos componentes, é possível que outro nó
assuma o papel daquele defeituoso. Em aplicações de missão críticas,
como controle de tráfego aéreo, existem sistemas especialmente de-
senvolvidos para essa finalidade, conhecidos como “sistemas de tole-
rância a falhas”.

Alguns fabricantes, junto aos órgãos de padronização, definiram pa-


drões para a implementação de sistemas distribuídos. Distributed
Computing Environment (DCE), Common Object Request Broker Ar-
chitecture (CORBA) e Object Linking and Embedding (OLE) são alguns
desses padrões para o desenvolvimento de aplicações.

Fonte: o autor

4 MULTIPROCESSADORES EM SISTEMAS
FORTEMENTE ACOPLADOS
Os computadores apresentam a característica de serem máquinas sequen-
ciais nas quais o processador executa uma instrução por vez. Entretanto, sob a
ótica do hardware, essa característica não é real, uma vez que múltiplos sinais es-

40
tão ativos simultaneamente e, dessa forma, pode-se entender o processo como
paralelismo.
A necessidade de sistemas mais velozes e com maiores capacidades de
processamento fez com que os conceitos do paralelismo e da simultaneidade fos-
sem aplicados ao processador, fazendo com que uma determinada tarefa fosse
dividida em mais de um processamento ao mesmo tempo (pipeline).
Com a implementação de sistemas com múltiplos processadores, o concei-
to de simultaneidade ou paralelismo pode ser expandido a um nível mais amplo, em
que uma tarefa é dividida e executada ao mesmo tempo por mais de um processa-
dor, introduzindo o conceito de multiprocessamento.
O multiprocessamento pode ser analisado sob duas óticas:

•  processamento vetorial;
•  processamento paralelo.

Vejamos cada um deles a seguir.

4.1 PROCESSAMENTO VETORIAL


Em geral, os computadores trabalham com dados escalares (elementares), e
assim processam vetores sequencialmente. Esse tipo de processamento manipula
vetores por inteiro. Logo, ao combinar dois vetores, os processadores irão produzir
um vetor como saída.
Observe o fragmento de código:

FOR i := 1 TO N DO C[i]
:= A[i] + B[i];

Um processador escalar faria a soma dos vetores A e B por meio da soma


dos N elementos dos vetores, executando N processos de busca e execução. Já
os processadores vetoriais utilizam uma única instrução vetorial, na qual o vetor
A é somado ao vetor B e o resultado é atribuído ao vetor C. Assim, somente uma
instrução de busca e execução será executada.
Os computadores vetoriais usam os dois tipos de processamento (vetorial e
escalar), permitindo que a unidade de controle identifique a instrução e escolha o
processamento mais adequado.
Utilizam-se processadores vetoriais quando as aplicações apresentam um
grau elevado de códigos vetoriais, tais como problemas de cálculo numérico, pro-
cessamento de imagens, estudos meteorológicos e estudos de física nuclear.

41
4.2 PROCESSAMENTO PARALELO
Permite que uma aplicação seja executada em mais de um processador ao
mesmo tempo. Só existe ganho de tempo se a aplicação puder ser executada em
pares independentes para execução simultânea.
Vamos a um exemplo

X := Cos (beta) + (Delta / 4) – (Alfa * 3.14)

Utilizando um compilador adequado para sistemas de processamento para-


lelo, cada termo será traduzido em uma tarefa.
No caso de um computador com três processadores, tem-se:

•  Processador 1 executa a operação Cos(beta). Processador 2 executa


a operação (delta/4). Processador 3 executa a operação (alfa*3.14).
•  Processador 1 executa as operações de soma e subtração de acordo
com a equação e coloca o resultado na variável x.

A operação final é efetuada pelo processador que é o gerenciador do pro-


cesso.
O paralelismo pode ser do tipo implícito ou explícito. O paralelismo implícito
é aquele em que o compilador, junto com o sistema operacional, detecta o uso do
recurso. O paralelismo explícito é determinado pelo programador por meio de ins-
truções próprias da linguagem.

4.3 ORGANIZAÇÃO FUNCIONAL


Somente desenvolver um programa para os sistemas multiprocessados
não é o suficiente. O hardware deve ter a capacidade para tal processo. Assim, a
comunicação interna entre as CPUs, memória e dispositivos de entrada e saída é
fundamental, pois irá determinar quantos processadores o sistema poderá ter e
como será o acesso à memória.
Em geral, a memória é dividida em módulos ou unidades funcionais para que
múltiplos acessos simultâneos sejam permitidos. As unidades funcionais podem
ser divididas, basicamente, em três formas de organização: barramento comum,
barramento cruzado e memória multiport. Acompanhe.

42
4.3.1 BARRAMENTO COMUM
É a forma mais simples de fazer a comunicação entre os processadores e
as unidades funcionais. Esse tipo de organização apresenta alguns problemas, tais
como:

•  somente uma unidade funcional pode utilizar o barramento por vez no


mesmo instante;
•  caso um problema ocorra no barramento, todo o sistema é comprome-
tido;
•  quando várias unidades procuram o uso do barramento, ocorre um gar-
galo no sistema;
•  o sistema é limitado ao uso de poucos processadores.

Apesar de simples, econômico e flexível, sistemas assim dependem da ve-


locidade de transmissão do barramento.

4.3.2 BARRAMENTO CRUZADO


Foi desenvolvido para evitar o gargalo existente nos barramentos comuns.
Também é conhecido como “crossbar-switch matrix”, pois possui uma rede de in-
terconexões que formam uma matriz.
A solução de prováveis conflitos de acesso a uma unidade é resolvida pelo
hardware, que irá escolher o caminho para a comunicação simultânea entre as uni-
dades funcionais.
A princípio, o número de processadores do sistema é ilimitado. O preço de
seu alto desempenho está no custo e na complexidade do sistema.

4.3.3 MEMÓRIA MULTIPORT


Em sistemas de barramento cruzado, não é possível dois processadores
terem acesso a um mesmo módulo de memória no mesmo instante. Já o uso de
memórias do tipo multiport permite acessos simultâneos a um mesmo módulo de
memória.
Esses módulos de memória possibilitam acessos simultâneos por meio das
múltiplas portas existentes em cada módulo. Os possíveis conflitos de acesso são
resolvidos pelos próprios módulos através de prioridades a cada porta.

43
5 MULTIPROCESSADORES EM SISTEMAS
FRACAMENTE ACOPLADOS
Nos anos 1980, os sistemas operacionais e suas aplicações utilizavam os
computadores de grande porte com um ou mais processadores. Os operadores,
nesse sistema, utilizavam terminais não inteligentes conectados por meio de linhas
seriais dedicadas ou linhas telefônicas públicas para se comunicar com o compu-
tador.
A evolução tecnológica determinou uma nova configuração dos sistemas de
computação, chamada “rede de computadores” (computer network).
Em uma rede de computadores, existem um ou mais sistemas independen-
tes e capacidade própria de processamento — nós, host ou estações —, que estão
interligados pelas linhas de telecomunicações. Dependendo do grau de interligação
dos nós dentro da rede, os sistemas podem ser classificados em dois tipos: siste-
mas operacionais de rede e sistemas operacionais distribuídos.

5.1 ORGANIZAÇÃO FUNCIONAL


A organização funcional dos sistemas fracamente acoplados ou topologia
define como estão interligados fisicamente os diversos sistemas da rede. As princi-
pais organizações são descritas a seguir.

5.1.1 BARRAMENTO
Os sistemas são conectados por uma única linha de comunicação, e todos
compartilham o mesmo meio. Nessa topologia, caso haja algum problema no meio
de transmissão, todos os nós da rede ficarão incomunicáveis.

5.1.2 ORGANIZAÇÃO DISTRIBUÍDA


Existem linhas de comunicação ponto a ponto que ligam sistemas e cami-
nhos alternativos entre os diversos nós da rede. Caso uma linha de comunicação
falhe, linhas alternativas permitirão que a rede continue em funcionamento. Geral-
mente utilizada em redes distribuídas.

44
NOTA
A gerência do processador permite garantir o uso adequado do proces-
sador para atender a diversos processos em execução pelo sistema ope-
racional.

45
RESUMO DO TÓPICO 2

Neste tema de aprendizagem, você aprendeu:

• Os três sistemas operacionais mais comuns que existem para computadores e


que o mercado normalmente oferece.
• Os sistemas com múltiplos processadores podem ser divididos em sistemas com
processadores simétricos e assimétricos..
• Os sistemas fortemente acoplados estão, em geral, dentro de um mesmo har-
dware, no qual os processadores são gerenciados por um único sistema opera-
cional e compartilham uma única memória e dispositivos de I/O.
• Os sistemas fracamente acoplados podem ser classificados segundo o compar-
tilhamento de recursos e dados em sistemas operacionais de rede e sistemas
operacionais distribuídos.

46
AUTOATIVIDADE

1. Os sistemas operacionais podem ser classificados quanto ao seu tipo.


Acerca disso, assinale a alternativa CORRETA que indica essas classifi-
cações:

a. ( ) Sistema monoprogramável ou monotarefa e sistema multipro-


gramável ou multitarefa.
b. ( ) Sistema monoprogramável ou monotarefa e sistema virtual.
c. ( ) Sistema multiprogramável ou multitarefa e sistema virtual.
d. ( ) Sistema monoprogramável ou monotarefa e sistema inteligen-
te.

2. A execução de uma nova tarefa ou programa só poderá ser iniciada após


o término da tarefa anterior. Baseado nessa afirmação, assinale a alter-
nativa CORRETA:

a. ( ) Os sistemas monoprogramáveis ou monotarefas são aqueles


em que apenas um programa ou job é executado por vez.
b. ( ) Os sistemas multiprogramáveis ou monotarefas são aqueles
em que apenas um programa ou job é executado por vez.
c. ( ) Os sistemas multiprogramáveis ou multitarefas são aqueles em
que apenas um programa ou job é executado por vez.
d. ( ) Os sistemas monoprogramáveis ou monotarefas são aqueles
em vários programas ou job podem ser executados simultanea-
mente.

3. Tais sistemas encadeiam uma série de tarefas de forma a executá-las


simultaneamente, compartilhando todos os recursos (memória, dispo-
sitivos de I/O e processador) entre as diversas tarefas em execução.
Baseado nisso, assinale a alternativa CORRETA:

a. ( ) Se os computadores são elementos caros, a subutilização de


seus recursos é inadmissível. Por isso, foram criados os sistemas
multiprogramáveis ou multitarefas.
b. ( ) Os sistemas multiprogramáveis ou monotarefas são aqueles
em que apenas um programa ou job é executado por vez.
c. ( ) Os sistemas multiprogramáveis ou multitarefas são aqueles em
que apenas um programa ou job é executado por vez.

47
d. ( ) Os sistemas monoprogramáveis ou monotarefas são aqueles
em que vários programas ou job podem ser executados simulta-
neamente.

4. Os sistemas monoprogramáveis ou monotarefas são aqueles em que vá-


rios programas ou job podem ser executados simultaneamente.
5. Sabemos que os sistemas monoprogramáveis/monotarefas apresentam
a vantagem de que todos os recursos da máquina ficam disponíveis para
a execução de uma única tarefa. Disserte sobre as desvantagens desse
tipo de sistema.

48
TÓPICO 3

PROGRAMAÇÃO
CONCORRENTE
1 INTRODUÇÃO
Um processo dentro de um Sistema Operacional pode ser entendido como
um “programa em execução”.
Com o desenvolvimento dos sistemas multiprogramáveis, o termo “proces-
so” tornou-se mais amplo. Passou-se a chamar de “processo” a estrutura respon-
sável pela manutenção de todas as informações necessárias para a execução de
um programa. Uma vez que, em sistemas multiprogramáveis, cada usuário percebe
o sistema como sendo do tipo monoprogramável (todos os recursos estão disponí-
veis somente para ele), o Sistema Operacional é o responsável por manter a integri-
dade dos dados. Assim, quando o programa retornar para o processador, todos os
dados (conteúdo dos registradores, posição do apontador de programas, espaço de
memória, usuário do programa etc.) estarão corretos.

2 PROCESSO
Um determinado programa em execução poderá apresentar diferentes re-
sultados, por meio do processo no qual está sendo executado. Desse modo, quando
um determinado usuário executar um programa, o sistema operacional inicia a exe-
cução de um processo. Esse processo, por sua vez, criará uma estrutura denomi-
nada “process control block”, ou simplesmente PCB (bloco de controle de proces-
so). Assim, a partir desse BCP, o SO manterá todas as suas informações acerca do
processo e gerenciará também os demais processos originários das chamadas de
sistemas (system calls), nas quais irão realizar operações tais como criar, eliminar,
sincronizar, suspender execução de processos, entre outras atividades internas.
Por fim, o processo poderá ser dividido em três elementos: contexto de har-
dware, contexto de software e espaço de endereçamento.

49
2.1 CONTEXTO DE HARDWARE
É realizado o controle de conteúdo dos registradores do processador, que
são program counter (PC), stack pointer (SP) e bits de estado (Flag).
Esse contexto é extremamente importante no processo de implementação
dos sistemas de tempo compartilhado ou time-sharing. Aqui, os processos reali-
zam o revezamento de uso do processador e podem ser interrompidos para, em
seguida, serem restaurados de tal modo como se não tivesse ocorrido nada. Esse
processo é chamado de “context switching” ou “troca de contexto”. Essa mudança
de contexto consiste na execução de salvamento do conteúdo dos registradores
da CPU para, assim, serem carregados com valores referentes ao processo no qual
se está ganhando em uso do processador.

2.2 CONTEXTO DE SOFTWARE


Nesse caso, temos a tratativa das características dos processos que terão
influência na execução de um determinado programa, tal como o número máximo
de arquivos que podem ser abertos de forma simultânea, ou mesmo o tamanho do
buffer que será utilizado para realizar operações de entrada e saída (E/S).
Assim, o contexto de software contempla três grupos de informações:

•  Identificação: são armazenadas todas as informações que per-


mitem identificar os processos. Logo, uma vez criados os proces-
sos, o SO realiza atribuição a ele através de um process identifi-
cation, ou PID, e uma identificação ao usuário que criou o processo.
O PID é uma identificação numérica única. Alguns sistemas adicionam
ao PID um nome. Cada usuário tem uma identificação única do sistema
(UID – user identification), e essa identificação é atribuída ao processo
no momento de sua criação, o que faz com que seja implementado um
modelo de segurança no qual apenas os objetos com a mesma UID do
usuário podem ser acessados.
•  Quotas: são armazenados os valores dos limites de cada recurso do
sistema que o processo pode alocar. Caso a quota seja insuficiente, o
processo poderá ser executado lentamente ou não ser executado.
•  Privilégios: são armazenadas as definições do que o processo pode
ou não fazer em relação ao sistema e aos outros processos. Existem
privilégios associados à segurança que permitem a um usuário eliminar
processos de outros usuários e ter acesso a arquivos que não lhe per-
tencem.

50
2.2.1 ESPAÇO DE ENDEREÇAMENTO
A área de memória na qual determinado programa será executado e o es-
paço para os dados que esse programa utilizará em conjunto compõem o espaço
de endereçamento. Portanto, cada processo tem sua própria área designada para
terminação, que deve ser protegida do acesso de outros processos.

2.2.2 ESTADOS DO PROCESSO


Em um sistema multitarifário, nem sempre um processo é realizado pelo
processador; em vez disso, ele passa por três estados durante a execução:

•  execução: em execução na CPU;


•  logo: aguardando o sistema operacional alocar a CPU para que possa
ser executado;
•  aguardando que algum evento ou recurso externo seja disponibilizado
para que seu processamento possa continuar.

Um procedimento que está em andamento ou aguardando pode ser arma-


zenado na memória secundária; não é necessário que esteja na memória primária.
Quando não há espaço suficiente para que todos os processos sejam executados, o
processo de “troca” tem a capacidade de remover processos da memória primária.

2.3 MUDANÇAS DE ESTADO DO PROCESSO


Durante o processamento, um processo muda de estado diversas vezes por
conta de eventos originados por ele próprio (eventos voluntários) ou pelo sistema
operacional (eventos involuntários).
Basicamente, existem quatro mudanças de estado que podem ocorrer no
processo:

•  pronto execução: quando um processo é criado, o sistema o coloca


em uma lista de processo no estado de pronto, na qual aguarda uma
oportunidade para ser executado;
•  execução espera: um processo em execução passa para o estado de
espera por eventos gerados pelo próprio processo. Nesse caso, o pro-
cesso ficará nesse estado esperando pela conclusão do evento solici-
tado;
•  espera pronto: um processo no estado de espera passa para o estado
de pronto quando a operação solicitada é atendida ou o recurso espe-

51
rado é concedido;
•  execução pronto: um processo em execução passa para o estado de
pronto por eventos gerados pelo sistema.

2.4 SUBPROCESSO E THREAD


Os processos podem criar outros processos. Quando isso acontece, chama-
mos o processo criado de “subprocesso” ou “processo-filho”; este pode criar outros
processos. Isso serve para dividir uma aplicação em partes que podem trabalhar de
forma concorrente. O uso de subprocessos implica a criação de um novo processo
junto ao sistema operacional, portanto, há uma melhora no desempenho.
Na tentativa de diminuir o tempo gasto na criação/eliminação de proces-
sos, bem como de economizar recursos do sistema como um todo, foi introduzido
o conceito de thread (fluxo de controle). Em um ambiente com múltiplos threads
(multithread), não é necessário haver processos para se implementar aplicações
concorrentes. No ambiente multithread, cada processo pode responder a várias
solicitações concorrentemente ou mesmo simultaneamente, se houver mais de um
processador.
A grande diferença entre subprocessos e threads é em relação ao espaço
de endereçamento. Os subprocessos possuem, cada um, espaços independentes
e protegidos; já os threads compartilham o mesmo espaço de endereçamento de
processo, sem nenhuma proteção, permitindo que um thread possa alterar dados
de outro thread. Apesar dessa possibilidade, os threads são desenvolvidos para
trabalhar de forma cooperativa, desempenhando uma tarefa em conjunto.
Os benefícios da programação em múltiplos threads podem ser divididos
em:

•  capacidade de resposta: o multithreading pode permitir que um pro-


grama continue em execução mesmo que parte dele esteja bloqueada
ou executando uma operação mais demorada. Assim, aumenta-se a
capacidade de resposta para o usuário;
•  compartilhamento de recursos: em geral, os threads compartilham
a memória e os recursos do processo aos quais pertence. Logo, a apli-
cação pode ter vários threads de atividades diferentes dentro do mes-
mo espaço de endereçamento;
•  economia: alocar e deslocar memórias e recursos é mais demorado
para o processo do que para o thread;
•  utilização de arquiteturas com múltiplos processadores: para os
sistemas multiprocessados, os multithreads são benéficos, uma vez

52
que cada thread pode ser executado de forma paralela em mais de um
processador.

2.5 PROCESSOS DO SISTEMA


Para tornar o núcleo do sistema menor e mais estável, retiram-se algumas
funções do núcleo, as quais são implementadas como processos chamados pelo
SO. Algumas das funções que podem ser implementadas por processos são:

•  auditoria e segurança;
•  serviços de rede;
•  contabilização do uso de recursos;
•  gerência de impressão;
•  gerência de jobs batch;
•  temporização;
•  comunicação de eventos;
•  interface de comandos (shell).

No quadro a seguir, vejamos a classificação dos processos de acordo com o


tipo de processamento. Acompanhe.

Quadro 7 – Classificação dos processos quanto ao tipo de processamento

Tipo Descrição

CPU-bound Passa a maior parte do tempo no estado de execução, pois


realiza poucas operações de entrada/saída.

I/O-bound Passa a maior parte do tempo no estado de espera, pois rea-


liza elevado número de operações de entrada/saída.
Os processos interativos também são bons exemplos de
processos I/O-bound, pela forma de comunicação entre o
usuário e o sistema, normalmente lenta, devido à utilização
de terminais.

Fonte: o autor

53
2.6 COMUNICAÇÃO ENTRE PROCESSOS
Os processos que trabalham juntos (concorrentes) compartilham recursos
do sistema; de maneira geral, o compartilhamento de recursos entre processos
pode gerar situações indesejáveis, capazes até de comprometer o sistema.
Os mecanismos que garantem a comunicação entre processos concor-
rentes e o acesso a recursos compartilhados são chamados de “mecanismos de
sincronização”. Em um projeto de SO multitarefa, é fundamental o mecanismo de
sincronização que garanta sua integridade e confiabilidade.

2.6.1 ESPECIFICAÇÃO DE CONCORRÊNCIA EM


PROGRAMAS
Nos problemas e nas soluções decorrentes da comunicação entre proces-
sos, são utilizados diversos algoritmos. Para implementá-los, é necessária a utili-
zação de estruturas que permitam a especificação de concorrência em programas.
Uma das implementações mais simples de expressar concorrência em um
programa é a utilização dos comandos PARBEGIN e PAREND. Outra característica
importante dessa representação, além de sua simplicidade, é a clareza de sua sin-
taxe.
O comando PARBEGIN especifica que a sequência de comandos seja exe-
cutada concorrentemente em uma ordem imprevisível, através de criação de um
processo.
O comando PAREND define um ponto de sincronização, no qual o processa-
mento só continuará quando todos os processos criados já tiverem terminado suas
execuções.
Os comandos delimitados pelos comandos PARBEGIN e PAREND podem ser
simples, como atribuições ou chamadas a procedimentos. Observe o exemplo a
seguir.
X := sort (1024) + (35.4 * 0.23) – (302 / 7);
PROGRAMA Expressão;
VAR X, temp1, temp2, temp3 : REAL; BEGIN
PARBEGIN
Temp1 := sort (1024);
Temp2 := 35.4 * 0.23;
Temp3 := 302 / 7;

54
PAREND;
X := Temp1 + Temp2 – Temp3; WRITELN (‘X = ‘, X);

END

2.7 PROBLEMAS DE COMPARTILHAMENTO DE


RECURSOS
Aqui, veremos duas situações práticas para demonstrar o conceito. A pri-
meira envolve o compartilhamento de um arquivo em disco e a outra, de uma va-
riável em memória. Acompanhe.
READ (Arq_Contas, Reg_Cliente);
READLN (Valor_Dep_Ret);
Reg_Cliente.Saldo := Reg_Cliente.Saldo + Valor_Dep_Ret;
WRITE (Arq_Contas, Reg_Cliente);
No exemplo anterior, tem-se apenas um caixa registrando. Na tabela a se-
guir, tem-se dois caixas. Observe o que pode acontecer.

Tabela 1 – Processos concorrentes em execução simultânea por dois colaboradores de um deter-


minado banco, em atualização de saldo para um mesmo cliente

CAIXA COMANDO SALDO ARQ. VALOR DEPT. SALDO MEM.

1 READ 1.000 * 1.000

1 READLN 1.000 -200 1.000

1 := 1.000 -200 800

2 READ 1.000 * 1.000

2 READLN 1.000 +300 1.000

2 = 1.000 +300 1.300

1 WRITE 800 -200 800

2 WRITE 1.300 +300 1.300

Fonte: o autor

55
No exemplo da tabela, há um problema de acesso concorrente em variáveis.
Suponha-se que um processo vai somar 1 em uma determinada variável e o outro
processo vai diminuir 1 da mesma variável, e a variável está sendo compartilhada:
Processo A Processo B
x := x + 1; x := x – 1;
Vamos ver como ficaria esse processo escrito:
Processo A Processo B
LOAD x, Ra LOAD x, Rb
ADD 1, Ra SUB 1, Rb
STORE Ra,x STORE Rb, x
Agora, vamos observar o que aconteceu nesta tabela:

Tabela 2 – Variável sendo compartilhada por dois processos

PROCESSO COMANDO X Ra Rb

A LOAD x, Ra 2 2 *

A ADD 1, Ra 2 3 *
B LOAD x, Rb * 2

B SUB 1, Rb 2 * 1

A STORE Ra, x 3 3 *

B STORE Rb, x 1 * 1

Fonte: o autor

Para que isso não aconteça, deve-se ter mecanismos de controle que evi-
tem esses tipos de problemas.

56
2.7.1 SOLUÇÃO PARA OS PROBLEMAS DE
COMPARTILHAMENTO
A solução mais simples seria impedir que dois ou mais processos acessem
um mesmo recurso no mesmo instante. Com isso, quando um processo acessa de-
terminado recurso, todos os outros que queiram acessar deverão esperar o término
desse processo. Essa ideia de exclusividade de acesso é chamada de “exclusão
mútua” (mutual exclusion).
Essa exclusão deve afetar apenas os processos concorrentes quando um
deles estiver fazendo acesso ao recurso compartilhado. A parte do código do pro-
grama na qual é feito o acesso ao recurso é denominada “região crítica”.
Os mecanismos que implementam a exclusão mútua utilizam um protocolo
de acesso à região crítica. Com isso, todo processo, quando se inicia, executa um
protocolo de entrada nessa região e, quando termina, executa um protocolo de
saída. Acompanhe.
BEGIN
.
.
Entra_Regiao_Critica ; (* Protocolo e entrada *) Região_Criti-
ca;
Sai_Regiao_Critica; (* Protocolo de Saída *)
.
.
END
Portanto, pode-se dizer que, para garantir a implementação da exclusivida-
de mútua, os processos envolvidos devem fazer acesso aos recursos compartilha-
dos de forma sincronizada.
Na tentativa de implementar a exclusão mútua, algumas soluções introdu-
zem novos problemas, chamados de “problemas de sincronização”. Eles são tão
graves quanto os gerados pela ausência da exclusão mútua. Qualquer solução para
os problemas de compartilhamento de recursos entre processos passa necessa-
riamente pela solução dos problemas de sincronização.

57
2.7.1.1 STARVATION
Outro problema causado pela sincronização entre processos é o starvation
ou situações indefinidas, em que um processo não pode operar em uma região crí-
tica. Portanto, os recursos compartilhados são acessíveis pelo sistema operacional.
Isso pode acontecer quando uma seleção aleatória ou prioridade é atribuída
ao processo de acesso ao recurso.
Uma solução muito simples para esse problema é criar uma fila de requisi-
ções de alocação para cada recurso. Quando um processo necessita de recursos,
a requisição será colocada no final da fila correspondente. Quando os recursos são
liberados, o sistema seleciona o primeiro processo da fila.

2.7.1.2 SINCRONISMO CONDICIONAL


Aqui temos um sincronismo em que, caso os processos não estejam prontos
para serem executados, deve ser colocado em estado de espera, até que o recurso
esteja pronto para realizar o processamento. Nessa solução, a tarefa deverá realizar
a colocação e a retirada dos dados do buffer.

2.7.1.3 SOLUÇÕES DE HARDWARE


A seguir, temos duas outras alternativas para solucionar problemas de com-
partilhamento. Uma delas é desabilitar as interrupções e a outra se trata de realizar
uma instrução test-and-set. Acompanhe.

•  Desabilitação de interrupções: faz com que o processo de-


sabilite todas as interrupções externas antes de entrar em sua
região crítica e as habilite novamente após sair da região críti-
ca. Como a mudança de contexto só pode ser feita por meio de in-
terrupções, o processo que as desativou tem acesso exclusivo.
A maior parte das interrupções ocorre quando o processo que desabili-
ta as interrupções não as habilita novamente, mas também é útil para o
sistema operacional quando ele precisa manipular estruturas de dados
compartilhadas do sistema, como uma lista de processos. Dessa forma,
o sistema garante que não haverá problemas de inconsistência em seus
dados.
•  Instrução test-and-set: muitos processadores têm uma instrução
específica que os permite ler uma variável, armazenar seu conteúdo em
outra área e então atribuir um novo valor a essa variável. Esse tipo único
de instrução é conhecido como “instrução test-and-set” e se distingue

58
pelo fato de ser sempre realizado sem interrupção. É um comando au-
tomático, portanto não é possível que dois processos manipulem uma
variável compartilhada ao mesmo tempo, permitindo a implementação
de exclusão mútua. A instrução tem o seguinte formato e, quando exe-
cutada, o valor lógico da variável Y é copiado para a variável X, dando à
variável Y seu verdadeiro valor lógico.

2.8 SOLUÇÕES DE SOFTWARE


Podemos observar que três fatores são fundamentais para a solução dos
problemas de sincronização:

•  número de processadores e tempo de execução dos processos concor-


rentes;
•  o fato de que um processo não pode impedir que outros processos en-
trem em suas próprias regiões críticas;
•  o fato de que um processo não pode permanecer indefinidamente es-
perando.

2.8.1 SEMÁFOROS
Um semáforo é uma variável inteira não negativa que só pode ser manipula-
da por dois comandos: DOWN e UP, também chamados originalmente de comandos
P e V.
No caso de exclusão mútua, as instruções DOWN e UP atuam como proto-
colos de entrada e saída respectivamente, para permitir que um processo entre e
saia de uma região crítica. O semáforo foi atribuído a um compartilhamento e indica
quando algum dos processos simultâneos está acessando o compartilhamento. Se
seu valor for maior que 0, nenhum processo estará usando o recurso; caso contrá-
rio, o processo para. Toda vez que um processo deseja entrar em sua região crítica,
ele executa uma instrução DOWN.
Isso significa que o valor maior que 0 será decrementado para que nenhum
outro valor entre nesse intervalo. Se outro processo deseja executar sua seção
crítica e seu valor for igual a 0, o processo estará em estado de espera em uma fila
associada ao semáforo.
O processo que acessa sua seção crítica após a conclusão executa uma
instrução UP, incrementa o semáforo em 1 e libera o acesso ao recurso.
Essas operações são atômicas. Isso garante que, quando uma das opera-
ções for iniciada, nenhum outro processo poderá acessar o semáforo até que essa

59
operação seja concluída. As instruções DOWN e UP são normalmente implementa-
das como rotinas do sistema (chamadas do sistema), com o sistema desabilitando
todas as interrupções apenas para execução das instruções.
Os semáforos aplicados ao problema de exclusão mútua são mutexes (se-
máforos da exclusão mútua) ou binários (assumem apenas os valores 0 e 1).
Além de permitir a resolução de exclusão mútua, os semáforos podem ser
usados ​​para implementar a sincronização condicional. Em geral, é um processo que
precisa ser modificado antes que um evento ocorra; existe outro processo capaz de
detectar sua ocorrência. Podemos usar um semáforo associado ao evento espera-
do para sincronizar ambos os processos.
Da mesma forma, você faz um UP toda vez que libera um recurso para o
pool. Se o semáforo do contador for 0, significa que não mais recursos podem ser
usados, e o processo solicita que o recurso seja retido até que outro processo libere
recursos do pool.

NOTA
Programação concorrente ou programação simultânea é um paradigma de
programação para a construção de programas de computador que fazem
uso da execução simultânea de várias tarefas computacionais interativas.

60
LEITURA COMPLEMENTAR

O QUE É UM SISTEMA OPERACIONAL?


Ronaldo Gogoni
A resposta para esta pergunta vai um pouco além de “um programa para o
computador ou o celular”, como o Windows ou o Android. Esse tipo de software é
encarregado por fazer a interface entre usuário e hardware, sem código binário
ou linguagem de máquina. Saiba mais sobre o que são os sistemas operacionais.

Figura – Definição de sistema operacional

Fonte: Vitor Pádua/Tecnoblog

Definição de sistema operacional

O sistema operacional é um software, ou conjunto de softwares, cuja fun-


ção é administrar e gerenciar os recursos de um sistema, desde componentes de
hardware e sistemas de arquivos a programas de terceiros, estabelecendo a inter-
face entre o computador e o usuário.
Entenda como um “computador” qualquer máquina de processamento au-
tomático de dados, como um desktop, notebook ou celular e um console de video-
game, por exemplo.
O sistema operacional introduz uma camada de abstração entre o hardware
e o usuário, que transforma comandos no mouse, teclado e solicitações do sistema,

61
como gerenciamento de recursos (CPU, memória RAM), em linguagem de máquina,
enviando instruções ao processador.
Este último os traduz para código binário, executa os comandos e envia as
respostas como informações que aparecem na sua tela.
Um sistema operacional contém componentes divididos entre os para o
usuário (como bibliotecas, programas e interface) e as instruções que compõem o
seu núcleo (kernel).

O que é kernel?

A grosso modo é a ponte entre usuário e hardware, mas não somente. O


kernel compõe a parte central do programa e responde por tarefas cruciais, como:

•  estabelecer a camada de abstração de baixo nível (linguagem de má-


quina) com o hardware;
•  gerenciar recursos como processador, RAM, sistemas de arquivos e dis-
positivos de entrada e saída (monitor, teclado, mouse, impressora, etc.);
•  gerenciar processos (execução) de programas;
•  gerenciar o uso de dispositivos, memória do sistema e chamadas dos
programas, definindo quais têm prioridade.

Qual a diferença entre kernel e firmware?

Muita gente confunde kernel com firmware…


Embora possam conversar entre si, são coisas diferentes. Um firmware ou
software embarcado é um conjunto de instruções programadas diretamente no
hardware, que contém parâmetros específicos para a operação de um determinado
dispositivo.
Por exemplo, em um sistema operacional a BIOS (Sistema Básico de Entrada
e Saída) e a UEFI (Interface Extensível Unificada de Firmware) são exemplos de
firmware, pois comportam instruções voltadas para a operação do hardware de um
computador.

62
Figura – Tela de inicialização do sistema onde é possível encontrar informações sobre as BIOS

Fonte: Vitor Pádua/ Tecnoblog

Um firmware pode ser operado pelo usuário da mesma forma que um kernel
(o Linux per se é só o kernel, a interface varia conforme a empresa responsável pela
distribuição, também chamada de distro), mas suas aplicações são distintas.

3 exemplos de sistema operacional:

Tirando os que todo mundo conhece, vejamos 3 exemplos de sistemas ope-


racionais:

1. Unix

Desenvolvido por Ken Thompson, Dennis Ritchie, Douglas McIlroy e outros


programadores do Bell Labs, em 1969, o Unix foi um dos primeiros sistemas mul-
titarefa preemptiva, que encerra processos que esgotaram o tempo de uso e salva
seus dados para depois, passando a executar em fila. Deu origem a uma gigantesca
família de sistemas que inclui o Linux, o BSD e FreeBSD, que serviu de base tanto
para o macOS quanto para o Orbis OS (do PS4), o Solaris da Oracle e o Xenix da
Microsoft.

63
2. MS-DOS

Lançado em 1981, teve como base o 86-DOS de Tim Paterson e lançado em


1980, para computadores com o processador Intel 8086. A Microsoft o comprou
por US$ 75 mil e o modificou para embarcá-lo no IBM-PC 5150 (Bill Gates mentiu
ao fechar contrato com a IBM, sobre já ter o MS-DOS). Rodava em computadores
IBM-PC e foi o padrão até meados de 1990, quando foi absorvido pelo Windows 95
e permaneceu até o Windows ME; o Prompt de Comando, embora similar, não é um
sistema em segundo plano.

3. OS/2

Lançado em 1987 e desenvolvido por Microsoft e IBM, o OS/2 tinha interface


gráfica e sucedeu o IBM PC DOS (a versão licenciada do MS-DOS). Pouco tempo
depois, as empresas se separaram, por divergências. Os Windows 2.1 e 3.1 contavam
com soluções semelhantes às do OS/2 e por um bom tempo, e IBM e Microsoft
seguiram disputando o mercado de PCs, com alguns fatos estranhos no meio da
história.
O OS/2 foi descontinuado pela IBM em 2001 e o suporte só foi encerrado
em 2006, tanto que muitos caixas eletrônicos de bancos brasileiros ainda usam o
sistema.

Fonte: GOGONI, R. O que é um sistema operacional? Tecnoblog, 2019. Disponível


em: https://tecnoblog.net/responde/o-que-e-um-sistema-operacional/. Acesso
em: 14 out. 2022. (grifos do original)

64
RESUMO DO TÓPICO 3

Neste tema de aprendizagem, você aprendeu:

• Para tornar o núcleo do sistema menor e mais estável, retiram-se algumas fun-
ções do núcleo, as quais são implementadas como processos chamados pelo
SO.
• Durante o processamento, um processo muda de estado diversas vezes por
conta de eventos originados por ele próprio (eventos voluntários) ou pelo siste-
ma operacional (eventos involuntários).
• Os processos podem criar outros processos. Quando isso acontece, chamamos
o processo criado de “subprocesso” ou “processo-filho”; este pode criar outros
processos.
• Os processos que trabalham juntos (concorrentes) compartilham recursos do
sistema; de maneira geral, o compartilhamento de recursos entre processos
pode gerar situações indesejáveis, capazes até de comprometer o sistema.

65
AUTOATIVIDADE

1. Um mesmo programa pode produzir resultados diferentes em função do


processo no qual ele é executado. Quando um usuário solicita a execu-
ção de um programa, o SO inicia um processo. Baseado no entendimento
dessas informações, assinale a alternativa CORRETA:

a. ( ) Esse processo cria uma estrutura chamada “Bloco de Contro-


le de Processo” (Process Control Block – PCB). A partir do PCB,
o SO mantém todas as informações sobre esse processo, além
de gerenciar os demais processos oriundos das system calls, que
realizam operações como criação, eliminação, sincronização, sus-
pensão de processos, entre outras.
b. ( ) Esse processo cria uma estrutura chamada “Bloco de Controle
de Processo” (Process Control Block – PCB). A partir do PCB, o
SO mantém uma parte das informações sobre o processo, além
de gerenciar os demais processos oriundos das system calls, que
realizam operações como criação, eliminação, sincronização, sus-
pensão de processos, entre outras.
c. ( ) Esse processo cria uma estrutura chamada “Bloco de Controle
de Processo” (Process Control Block – PCB). A partir do PCB, o
SO mantém todas as informações sobre o processo, além de ge-
renciar os demais processos oriundos das remote function calls,
que realizam operações como criação, eliminação, sincronização,
suspensão de processos, entre outras.
d. ( ) Esse processo cria uma estrutura chamada “Bloco de Controle
de Processo” (Process Control Block – PCB). A partir do PCB, o SO
mantém todas as informações sobre o processo, além de geren-
ciar os demais processos oriundos das system calls, que realizam
apenas operações de eliminação e sincronização de processos.

2. O contexto de hardware controla o conteúdo dos registradores do pro-


cessador. São eles: program counter (PC), stack pointer (SP) e bits de
estado (Flag). Baseado nessa afirmação, assinale a alternativa CORRETA:

a. ( ) O contexto de hardware é fundamental para a implementação


dos sistemas de tempo compartilhado (time-sharing), nos quais
os processos se revezam na utilização do processador, podendo
ser interrompidos e, posteriormente, restaurados como se nada
tivesse acontecido. Essa troca é denominada “mudança de con-
texto” (context switching).

66
b. ( ) O contexto de hardware é fundamental para a implementação
dos sistemas de mudança de contexto (context switching), nos
quais os processos se revezam na utilização do processador, po-
dendo ser interrompidos e, posteriormente, restaurados como se
nada tivesse acontecido. Essa troca é denominada “mudança de
tempo compartilhado” (time-sharing).
c. ( ) O contexto de software é fundamental para a implementação
dos sistemas de tempo compartilhado (time-sharing), nos quais
os processos se revezam na utilização do processador, podendo
ser interrompidos e, posteriormente, restaurados como se nada
tivesse acontecido. Essa troca é denominada “mudança de con-
texto” (context switching).
d. ( ) O contexto de software é fundamental para a implementação
dos sistemas de mudança de contexto (context switching), nos
quais os processos se revezam na utilização do processador, po-
dendo ser interrompidos e, posteriormente, restaurados como se
nada tivesse acontecido. Essa troca é denominada “mudança de
tempo compartilhado” (time-sharing).

3. O contexto de software trata das características do processo que irão


influenciar a execução do programa, por exemplo, o número máximo de
arquivos abertos simultaneamente ou o tamanho do buffer para opera-
ções de E/S. Baseado nessa afirmação, assinale a alternativa CORRETA
quanto ao processo de identificação:

a. ( ) Nesse grupo são armazenadas todas as informações que iden-


tificam o processo. Ao ser criado o processo, o SO atribui uma
identificação a ele (PID – process identification) e uma identifica-
ção ao usuário ou processo que o criou (owner).
b. ( ) Nesse grupo são armazenados os valores dos limites de cada
recurso do sistema que o processo pode alocar.
c. ( ) Nesse grupo são armazenadas as definições do que o processo
pode ou não fazer em relação ao sistema e aos outros processos.
d. ( ) Nesse grupo, o espaço de endereçamento é a área de memória
do processo na qual o programa será executado. Cada processo
possui seu próprio espaço de endereçamento, que deve ser pro-
tegido do acesso dos demais processos.

67
4. Um processo, em um sistema multiprogramável (multitarefa), não é exe-
cutado todo o tempo pelo processador. Durante a execução, passa por
uma série de estados, e três deles são os principais. Disserte sobre o
processo de espera.
5. Durante seu processamento, sabemos que um processo muda de estado
diversas vezes em função de eventos originados por ele próprio (eventos
voluntários) ou pelo sistema operacional (eventos involuntários). Disserte
sobre “execução espera”.

68
REFERÊNCIAS

GOGONI, R. O que é um sistema operacional? Tecnoblog, 2019. Disponível em: ht-


tps://tecnoblog.net/responde/o-que-e-um-sistema-operacional/. Acesso em: 14
out. 2022. (grifos do original)

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


tação. 3 ed. São Paulo: Bookman, 2008.

69
70
UNIDADE 2

SISTEMAS
OPERACIONAIS

OBJETIVOS DE APRENDIZAGEM
A partir do estudo desta unidade, você deverá ser capaz de:
• Compreender os principais conceitos para o gerenciamento de políticas
básicas de memória;
• Entender os principais conceitos para o gerenciamento de memória vir-
tual;
• Compreender os principais conceitos para o gerenciamento de arquivos;
• Entender os principais conceitos para o gerenciamento de dispositivos de
entrada e saída.

PLANO DE ESTUDOS
A cada tópico desta unidade, você encontrará autoatividades com o objetivo
de reforçar o conteúdo apresentado.
TÓPICO 1 – GERENCIAMENTO DE MEMÓRIA
TÓPICO 2 – SISTEMAS DE ARQUIVOS
TÓPICO 3 – GERÊNCIA DE ENTRADA/SAÍDA
TÓPICO 1

GERENCIAMENTO
DE MEMÓRIA

1 INTRODUÇÃO
Como é de nosso conhecimento, a memória principal do computador é um
importante componente em quaisquer sistemas em computação. A memória prin-
cipal constitui, basicamente, o que chamamos de “espaço de trabalho” dentro do
sistema, do qual serão mantidos todos os processos (denominados threads), bi-
bliotecas compartilhadas e canais de comunicação, incluindo o próprio núcleo do
Sistema Operacional (SO).
O hardware envolvido na memória pode ser bem complexo, pois contempla
diversas estruturas, tais como cache e unidade de gerenciamento, exigindo um
elevado esforço no processo para o significativo gerenciamento pelo SO. Desse
modo, podemos afirmar que um processo de gerenciamento adequado de memória
é fundamental para que o desempenho do computador seja realizado corretamen-
te.

2 ESTRUTURAS DE MEMÓRIA
Existem tipos de memórias diversos dentro dos sistemas computacionais,
cada qual com suas particularidades, características e especificidades, contudo to-
dos têm um mesmo objetivo, que é o armazenamento de dados. Ao observarmos
um típico sistema computacional, podemos identificar diversos locais em que os
dados podem ser armazenados, tais como os registradores e o cache interno do
processador (cache L1), o cache externo da placa-mãe (cache L2) e a memória
principal (RAM). Também há os hard disks, ou discos rígidos, unidades de armaze-
namento externas (pendrives, CD-ROMs, DVD-ROMs etc.).
Todos esses componentes de hardware são construídos fazendo uso de
tecnologias diversas e, devido a isso, apresentam características bem específicas,
tais como capacidade de armazenamento, velocidade no processo de operação,
consumo de energia e custo por cada byte armazenado. Essas características pos-

73
sibilitam a definição do processo hierárquico de memória, como podemos observar
na Figura 1:

Figura 1 – Estruturas de memória

Fonte: Maziero (2014, p. 115)

Essa pirâmide mostra que memórias mais velozes, como registradores e


caches de CPU, são menores (menor capacidade de armazenamento), mais caras
e consomem mais energia do que memórias mais lentas, como memória principal
(RAM) e discos rígidos. Além disso, as memórias mais velozes são memórias volá-
teis, assim perderão conteúdo quando ficarem sem energia. Memórias que retêm
seu conteúdo mesmo quando não há energia são conhecidas como “memórias não
voláteis”.
Outra propriedade importante da memória é a sua velocidade. Isso pode ser
pormenorizado em duas dimensões: tempo de acesso (ou latência) e taxa de bits.
O tempo de acesso é o tempo necessário para iniciar uma transferência de dados
de/para um meio de armazenamento específico. A taxa de transferência indica o
número de bytes por segundo que podem ser lidos/escritos nesse meio, uma vez
iniciada a transferência de dados. Para ilustrar esses dois conceitos complementa-
res, vejamos o Quadro 1:

74
Quadro 1 – Tempos de acesso e taxas de transferência típicas

Fonte: Maziero (2014, p. 116)

3 ENDEREÇOS LÓGICOS E FÍSICOS


O processador registra as informações de endereço no barramento de en-
dereços do computador após executar uma série de instruções. Esse endereço é
usado não apenas para busca de instruções e operações, mas também para leitura
e escrita de valores em locais de memória e pontos de entrada/saída. Os endere-
ços de memória gerados pelo processador ao executar o programa são conhecidos
como “endereços lógicos”, porque seguem a lógica do programa, mas nem sempre
podem corresponder aos endereços verdadeiros das instruções e variáveis ​​na me-
mória real do computador, que são conhecidos como “posições físicas”.
A Unidade de Gerência de Memória (MMU – Memory Management Unit) é um
hardware especializado que intercepta os sinais lógicos que o processador emite.
Ela pode ser integrada ao próprio processador (como é o caso dos sistemas atuais)
ou funcionar como um dispositivo separado (como nas máquinas mais antigas). A
MMU analisa os endereços lógicos enviados pelo processador e encontra os en-
dereços físicos que correspondem a esses endereços na memória da máquina,
permitindo o acesso do processador. Quando um processador solicita acesso a
um endereço específico (não sendo isso possível), a MMU gera uma interrupção de
hardware para alertar o processador sobre a tentativa de acesso não autorizado.
Para a segurança e estabilidade dos sistemas mais sofisticados, nos quais
centenas ou milhares de processos podem ser executados simultaneamente, a
proteção da memória entre os processos é crucial. Uma área de memória exclusiva
pode ser implementada para cada tarefa do sistema graças ao ajuste rápido da
MMU para alterar a forma como os endereços lógicos e físicos são comunicados.
Como resultado, as regras de conversão da MMU devem ser adaptadas para permi-
tir apenas o acesso ao espaço de memória designado para cada novo processo em
execução após uma troca de contexto entre os processos.

75
4 MODELO DE MEMÓRIA DOS PROCESSOS
Cada processo é visto pelo sistema operacional como um espaço de me-
mória isolado, ou uma área de memória em que somente processos e núcleo do
sistema podem acessar. Essa área de memória é dividida nas seguintes seções:

•  TEXT: contém o código do programa que será executado pelo proces-


so, criado durante a compilação e a conexão com as bibliotecas. Essa
área tem um tamanho fixo determinado durante a compilação, e nor-
malmente só deve ser acessível para leitura e execução;
•  DATA: contém as variáveis ​​estáticas globais e locais do programa (que,
na linguagem de programação C, são as variáveis designadas
​​ como es-
táticas dentro das funções). Essa área deve ser acessível para leitura e
escrita, mas não para execução, pois o tamanho das outras variáveis​​
pode ser determinado durante a compilação;
•  HEAP: espaço usado para armazenar dados por alocação dinâmica
usando operadores como malloc e free ou equivalentes. O tamanho
dessa área é variável e pode aumentar ou diminuir dependendo de como
a memória é alocada e liberada durante o procedimento. Com o tempo,
essa área pode ficar fragmentada ou pode haver lacunas nos blocos de
memória alocados. Assim, são necessários algoritmos de alocação que
minimizem sua fragmentação;
•  STACK: área utilizada para manter a pilha de execução ou a estrutura
encarregada de gerenciar o fluxo de execução das chamadas funções,
bem como armazenar parâmetros, variáveis ​​específicas de localização
e valor de retorno das funções. Normalmente, uma pilha cresce “para
baixo”, ou para baixo da memória, começando pelo mais alto. No caso de
programas com várias threads, essa área contém apenas o corpo prin-
cipal do programa. Devido à criação e destruição dinâmica de threads,
a pilha de cada thread é mantida em sua própria área, normalmente
dentro do heap. Nela, podemos observar que as duas áreas de tamanho
variável (a pilha e o heap) estão em oposição uma à outra e não estão
alinhadas. Como resultado, o processo pode utilizar a memória livre dis-
ponível da melhor maneira possível, seja por heap, pilha ou ambos.

76
Figura 2 – Organização da memória de um processo

Fonte: Maziero (2014, p. 121)

5 ESTRATÉGIAS DE ALOCAÇÃO
Em um sistema de monoprocesso, no qual apenas um processo de cada vez
é carregado na memória para execução, alocar a memória principal é um problema
simples de resolver. Basta reservar um pouco de memória para o núcleo operacio-
nal do sistema e colocar o processo na memória restante, mantendo a disposição
de suas áreas internas.
A memória reservada para o núcleo operacional do sistema pode estar lo-
calizada no início ou no final do espaço de memória física disponível. A maioria das
arquiteturas de hardware especifica o vetor de interrupções nos endereços iniciais
da memória (às vezes conhecidos como “endereços inferiores”), portanto, o nexo
normalmente também está localizado lá. Como resultado, a memória disponível
após o núcleo do sistema é dedicada a processos em nível de usuário.
Em sistemas multiprocessados, vários processos podem ser armazenados
na memória para execução simultânea. Nesse caso, o espaço de memória dedicado
aos processos deve ser dividido entre eles utilizando uma estratégia que permita
eficiência e adaptabilidade de uso. As próximas seções irão abordar os principais
métodos de alocação de memória física.

5.1 PARTIÇÕES FIXAS


O método mais simples de alocação de memória é dividir a memória alocada
aos processos em n partes fixas, cada uma de tamanhos iguais ou diferentes. Cada
componente pode realizar um processo. A MMU recebe esse endereço e adicio-

77
na-o ao valor do registrador de realocação (110.000) para obter o endereço físico
124.257, que então fica acessível. Devemos notar que o valor contido no registrador
de realocação é o endereço inicial do componente ativo (3); esse registro deve ser
atualizado sempre que um processo ativo for trocado.
Essa estratégia é muito simples, porém sua simplicidade não supera suas
várias desvantagens:

•  os tamanhos dos processos podem diferir dos tamanhos das partes, o


que pode resultar em espaços de memória não utilizados na conclusão
de cada parte;
•  mesmo que os processos sejam pequenos, o número máximo de pro-
cessos permitidos na memória é limitado ao número de partições;
•  mesmo que todas as peças estejam livres, processos maiores que o
tamanho da maior peça não podem ser armazenados na memória.

5.2 ALOCAÇÃO CONTÍGUA


A estratégia anterior, que tinha peças fixas, pode se tornar muito mais fle-
xível se o tamanho de cada peça puder ser ajustado para atender aos requisitos
exclusivos de cada processo. Nesse caso, a MMU deve ser planejada para operar
com dois registradores independentes: um registrador-base, que especifica o en-
dereço inicial da seção ativa, e um registrador-limite, que especifica o tamanho em
bytes dessa parte. O algoritmo para traduzir endpoints lógicos em endpoints físicos
é muito simples: cada endpoint lógico gerado por um processo é comparado ao
valor do registrador de limite; se for maior ou igual a isso, uma interrupção é gerada
pelo retorno da MMU ao processador, sinalizando um endpoint inválido. No cenário
oposto, o endereço matemático é multiplicado pelo valor do registrador-base para
obter o endereço físico correspondente.
Toda vez que o processo ativo é substituído, ou toda vez que o contexto
muda, o despachante deve ajustar os valores dos registradores-base e limite da
MMU. Os valores-base e limite para cada processo do sistema devem ser arma-
zenados no TCB (Task Control Block) apropriado. Naturalmente, os valores-base e
limite devem ser ajustados para 0 e 1 respectivamente, quando o núcleo estiver em
execução, para permitir o acesso direto a toda a memória física.
O principal benefício da estratégia de alocação de contingência é sua sim-
plicidade. Pode ser implementado em hardware de baixo custo ou até integrado em
processadores mais simples, pois requer apenas dois registradores e uma teoria
direta para tradução de endereços.

78
5.3 ALOCAÇÃO POR SEGMENTOS
O termo “alocação por segmentos”, às vezes conhecido como “alocação
segmentada”, refere-se a uma variação de “alocação contígua”, na qual o espaço
de memória de um processo é dividido em áreas ou segmentos que podem ser
alocados separadamente na memória física. Além das quatro áreas funcionalmen-
te fundamentais da memória do processo (texto, dados, pilha e heap), segmentos
para tipos específicos de memória, como bibliotecas compartilhadas, máquinas vir-
tuais, variáveis ​​de matriz, pools de threads, buffers de entrada/saída etc., também
podem ser definidos.
Quando a memória é organizada em segmentos, o espaço de memória de
cada processo não é mais visto como uma coleção de segmentos lineares com
políticas de acesso distintas, mas como uma coleção de segmentos de vários ta-
manhos.
Os empregos gerados pelos processos no modelo de memória segmentada
devem identificar as posições de memória e os segmentos em que estão localiza-
dos. Em outras palavras, esse modelo emprega endereços lógicos bidimensionais
compostos de pares [segmento:o conjunto], nos quais “segmento” denota o nú-
mero do segmento desejado e “o conjunto”, a posição desejada dentro do segmen-
to. Os valores do conjunto variam de zero ao tamanho do segmento.
O método de tradução de terminais lógicos em coordenadas físicas na alo-
cação de memória segmentar é comparável à alocação contínua, mas como cada
segmento terá seus próprios valores iniciais e finais devido à possibilidade de dife-
rentes tamanhos de segmentos e posicionamento na memória física, é necessário
definir uma tabela de segmentação para cada operação do sistema. Essa tabe-
la inclui os valores-base e máximo para cada segmento utilizado pelo processo,
bem como sinalizadores com detalhes sobre cada segmento, como permissões de
acesso.
O compilador deve dividir os vários segmentos da fonte de código de cada
programa. Por exemplo, ele pode dar a cada vetor ou matriz seu próprio segmento.
Assim, erros comuns, como obter acesso a índices maiores que o tamanho de um
vetor, resultarão em endereços fora do segmento relevante, que serão descobertos
pelo hardware para gerenciamento de memória e reportados ao sistema operacio-
nal.
A implementação da tabela de segmentação varia de acordo com a arquite-
tura de hardware considerada. A tabela poderá ser transferida para os registrado-
res especializados do processador se o número de segmentos utilizados por cada
processo for pequeno. Por outro lado, se o número de segmentos por processo for
alto, será necessário armazenar as tabelas na memória RAM. O processador 80.386
usa duas tabelas baseadas em RAM: a LDT (Local Descriptor Table), que especifi-

79
ca os segmentos de processamento local (exclusivo) para cada processo, e a GDT
(Global Descriptor Table), que descreve os segmentos de processamento global
que podem ser compartilhados entre outros processos.
A tabela de segmentos deve ser acessada para obter os valores-base e li-
mite que correspondem a cada endereço de memória que o processo em execução
atualmente acessou, no entanto como as tabelas de segmentos são normalmente
encontradas na memória principal, esses acessos têm um custo significativo. Por
exemplo, em um sistema de 32 bits, cada acesso à memória exigiria pelo menos
duas leituras de memória adicionais para ler os valores-base e limite, o que torna-
ria o acesso à memória três vezes mais lento. Os processadores definem alguns
registradores de segmentos que permitem armazenar os valores-base e limite dos
segmentos mais utilizados para solucionar esse problema. Como resultado, o de-
sempenho do acesso à memória é mantido em um nível satisfatório, evitando a
necessidade de consultar a tabela de segmentação com frequência excessiva se o
número de segmentos em uso simultâneo for pequeno.
Existem até 8.192 segmentos em cada uma dessas duas tabelas. Os re-
gistradores específicos do processador definem as tabelas a serem utilizadas pelo
processo enquanto ele está sendo executado. Para refletir as regiões de memória
utilizadas pelo processo que será ativado a cada mudança de contexto, os registra-
dores que indicam a tabela de segmentos ativos devem estar ativos:

•  CS: segmento de Código, que denota a seção do programa na qual o


código está sendo executado; esse valor é ajustado automaticamente
no caso de chamadas para funções de biblioteca, chamadas de siste-
ma, interrupções ou operações semelhantes;
•  SS: Stack Segment, que designa a área da pilha que o processo atual
está usando; se o processo tiver muitas threads, esse registrador pre-
cisa ser ajustado para cada alternância de contexto entre as threads;
•  DS, ES, FS e GS: quatro segmentos de dados usados no
​​ processo atual
que podem conter elementos variáveis globalmente,
​​ áreas alocadas di-
namicamente ou ambos. Esses registradores podem ser ajustados se
necessário para acessar mais segmentos de dados.

O conteúdo desses registradores é salvo no TCB de cada processo em cada


switch de contexto, tornando o acesso à memória muito eficiente quando apenas
alguns segmentos são usados simultaneamente.
​​ Portanto, o compilador tem uma
grande responsabilidade na geração do código executável: minimizar o número de
segmentos necessários para executar o processo em um determinado momento
para não prejudicar o desempenho do acesso à memória.
Exemplos de processadores que utilizam alocação de segmento incluem o
80.386 e seu sucessor (486, Pentium, Athlon e novos correlatos).

80
5.4 ALOCAÇÃO PAGINADA
Conforme mencionamos na seção anterior, alocar memória em segmentos
requer o uso de endereços bidimensionais na forma [segmento:o set], o que não
é muito intuitivo para programadores e dificulta a construção de compiladores.
Além disso, é um método de alocação bastante suscetível à fragmentação externa.
Essas deficiências levaram os desenvolvedores de hardware a criar métodos alter-
nativos para alocar a memória principal.
Ao contrário da alocação baseada em segmentos, que utiliza endereços bi-
dimensionais, a alocação baseada em páginas e espaço unidimensional para pro-
cessos lógicos utiliza espaço de endereçamento lógico dos processos. Mantido de
forma linear e de forma clara para os processos, o espaço de endereços lógicos é
dividido em pequenos blocos idênticos conhecidos como “páginas”. Nas arquitetu-
ras atuais, as páginas normalmente têm um tamanho de 4 quilobytes (4.096 bytes),
porém existem alguns edifícios que possuem páginas maiores do que 2. O espaço
de memória física dedicado aos processos é dividido em blocos do mesmo tama-
nho de páginas, conhecidos como “quadros” (da palavra inglesa frames).
A colocação de processos na memória física é, portanto, feita simplesmente
indicando em qual quadro de memória física cada página de cada processo está
localizada. Processos podem ser associados a qualquer quadrante, permitindo uma
grande flexibilidade na alocação. Além disso, como as páginas não utilizadas pelo
processo não precisam ser mapeadas fisicamente na memória, seu uso é mais efi-
caz.
Uma tabela de páginas, na qual cada entrada corresponde a uma página e
inclui o número do quadro em que está localizada, é utilizada para mapear a rela-
ção entre as páginas de um processo e os quadros correspondentes na memória
física. Cada processo tem sua própria tabela de páginas; a tabela de páginas ativa,
que corresponde ao processo em execução, é referenciada por um registrador de
processador chamado PTBR (Page Table Base Register). Esse registro precisa ser
atualizado com o endereço das páginas do novo processo ativo durante cada troca
de contexto.
As seguintes etapas devem ser realizadas pela MMU para traduzir um ende-
reço lógico em seu endereço físico correspondente:

•  obtenção do número do quadro em que se encontra a página desejada;


•  decomposição do endereço lógico no número de páginas e no conjunto;
•  construção do endereço físico adicionando o número do quadro ao
conjunto. Como as páginas e quadros têm o mesmo tamanho, o valor
do conjunto é preservado durante a conversão;
•  se a página solicitada não estiver mapeada para um quadro de memó-

81
ria física, a MMU deve gerar uma interrupção de falta de página para o
processador. Essa interrupção faz com que a execução seja desviada
para o núcleo do sistema operacional, que deve então tratar a falha de
página.

6 MEMÓRIA VIRTUAL
A disponibilidade de memória física em computadores é um problema per-
sistente, pois os programas estão ficando maiores e mais processos estão sendo
executados ao mesmo tempo, consumindo a memória disponível. Além disso, a
crescente manipulação de informações multimodais (imagens, áudio e vídeo) con-
tribui para esse problema, pois esses dados geralmente são muito grandes e exi-
gem muita memória livre para processar. Como a memória RAM é um recurso caro
e consome uma quantidade significativa de energia, aumentar sua capacidade nem
sempre é uma opção viável.
Ao analisar o comportamento de um sistema computacional, fica claro que
nem todos os processos estão sempre ativos e que nem todas as áreas de me-
mória estão em uso constante. Como resultado, a memória que não é usada com
frequência pode ser movida para um tipo de armazenamento mais barato e mais
abundante, como um disco rígido ou um dispositivo de armazenamento flash de
memória, liberando RAM para outros fins. Quando um processo pertencente a uma
dessas áreas precisar acessá-la, ele deverá ser devolvido à memória RAM. “Memó-
ria virtual” é o termo para o uso de um dispositivo de armazenamento externo para
estender a RAM; essa tática pode ser implementada de forma eficaz e transparente
para usuários, processos e programadores.

NOTA
O sistema reserva um espaço chamado “memória virtual” no disco rígido
(HD, hard disk) para compartilhamento seguro e eficiente de memória, a
fim de permitir o salvamento das informações armazenadas na RAM e de
liberar memória para novos aplicativos.

82
RESUMO DO TÓPICO 1

Neste tópico, você aprendeu:

• Existem tipos de memórias diversos dentro dos sistemas computacionais, cada


qual com suas particularidades, características e especificidades, contudo todos
têm um mesmo objetivo, que é o armazenamento de dados.
• Os endereços de memória gerados pelo processador ao executar o programa
são conhecidos como “endereços lógicos”, porque seguem a lógica do progra-
ma, mas nem sempre podem corresponder aos endereços verdadeiros das ins-
truções e variáveis na
​​ memória real do computador, que são conhecidos como
“posições físicas”.
• Conceitos acerca de alocação contígua, por segmento e paginada.
• Memória virtual é o termo para o uso de um dispositivo de armazenamento ex-
terno para estender a RAM, essa tática pode ser implementada de forma eficaz
e transparente para usuários, processos e programadores.

83
AUTOATIVIDADE

1. Sabemos que o processador registra as informações de endereço no


barramento de endereços do computador após executar uma série de
instruções. Assinale a alternativa CORRETA em relação à MMU.

a. ( ) Contém o código do programa que será executado pelo pro-


cesso, criado durante a compilação e conexão com as bibliotecas.
Tem um tamanho fixo que foi determinado durante a compilação e
normalmente só deve ser acessível para leitura e execução.
b. ( ) Contém as variáveis estáticas globais e locais do programa
(que, na linguagem de programação C, são as variáveis designa-
das como estáticas dentro das funções).
c. ( ) É um hardware especializado que intercepta os sinais lógicos
que o processador emite. Pode ser integrada ao próprio proces-
sador (como é o caso dos sistemas atuais) ou funcionar como um
dispositivo separado (como nas máquinas mais antigas).
d. ( ) É utilizada para manter a pilha de execução, ou a estrutu-
ra encarregada de gerenciar o fluxo de execução das chamadas
funções, bem como para armazenar parâmetros, variáveis espe-
cíficas de localização e o valor de retorno das funções.

2. Cada processo é visto pelo sistema operacional como um espaço de me-


mória isolado, ou uma área de memória que somente ele e o núcleo do
sistema podem acessar. Assinale a alternativa CORRETA em relação à
memória heap.

a. ( ) É um espaço usado para armazenar dados por alocação di-


nâmica usando operadores como malloc e free ou equivalentes.
O tamanho dessa área é variável e pode aumentar ou diminuir
dependendo de como a memória é alocada e liberada durante o
procedimento.
b. ( ) Contém o código do programa que será executado pelo pro-
cesso, criado durante a compilação e conexão com as bibliotecas.
c. ( ) Contém as variáveis estáticas globais e locais do programa
(que, na linguagem de programação C, são as variáveis designa-
das como estáticas dentro das funções).
d. ( ) Contém as variáveis dinâmicas globais e locais do programa
(que, na linguagem de programação C, são as variáveis designa-
das como estáticas dentro das funções).

84
3. Cada processo é visto pelo sistema operacional como um espaço de
memória isolado, ou uma área de memória que somente ele e o núcleo
do sistema podem acessar. Assinale a alternativa CORRETA em relação
à memória data.

a. ( ) Corresponde a um espaço para armazenar dados por alocação


dinâmica que usa operadores como malloc e free ou equivalen-
tes. O tamanho da área é variável e pode aumentar ou diminuir
dependendo de como a memória é alocada e liberada durante o
procedimento.
b. ( ) Contém as variáveis estáticas globais e locais do programa
(que, na linguagem de programação C, são as variáveis designa-
das como estáticas dentro das funções).
c. ( ) Contém as variáveis estáticas globais e locais do programa
(que, na linguagem de programação C, são as variáveis designa-
das como estáticas dentro das funções).
d. ( ) É utilizada para manter a pilha de execução ou a estrutura
encarregada de gerenciar o fluxo de execução das chamadas
funções, bem como para armazenar parâmetros, variáveis espe-
cíficas de localização e valor de retorno das funções.

4. Em um sistema de monoprocesso, no qual apenas um processo de cada


vez é carregado na memória para execução, alocar a memória principal é
um problema simples de resolver. Disserte sobre os conceitos que envol-
vem um sistema de monoprocesso.
5. O termo “alocação por segmentos”, às vezes conhecido como “alocação
segmentada”, refere-se a uma variação de “alocação contígua” na qual o
espaço de memória de um processo é dividido em áreas, ou segmentos.
Disserte sobre os conceitos relacionados à alocação de memória por seg-
mentos.ão.

85
TÓPICO 2

SISTEMAS DE
ARQUIVOS
1 INTRODUÇÃO
Ao se construir um sistema de aplicativo para documentos, uma série de
problemas significativos, que vão desde o acesso de baixo nível a dispositivos de
armazenamento físico, até a implementação de uma interface de acesso de pro-
gramadores a documentos, deve ser resolvida. Ao implementar um sistema de do-
cumentos, lembre-se de que cada documento contém dados brutos e metadados.
Os dados de um arquivo são seu conteúdo real (uma música, uma fotografia,
um documento ou um plano), e os metadados de um arquivo incluem seus atribu-
tos (nome, datas, permissões de acesso etc.) e todas as informações de controle
necessárias para localizar e manter seu conteúdo no disco.

2 ARQUITETURA GERAL
Os componentes primários da geração de documentos estão dispostos em
caddies. Os dispositivos de armazenamento de dados e metadados para docu-
mentos, como discos magnéticos ou bancos de memória flash, estão localizados
no nível mais baixo dessa arquitetura. Esses dispositivos são acessados ​​por con-
troladores, que são circuitos eletrônicos criados especificamente para controlar e
interagir com os dispositivos. A interface entre dispositivos de armazenamento e
controladores segue padrões como SATA, ATAPI, SCSI, USB e outros.

86
Figura 3 – Camadas da implementação da gerência de arquivos

Fonte: Maziero (2014, p. 189)

Drivers para dispositivos, que são componentes de software capazes de


se comunicar com o driver, são usados ​​para configurar e acessar os controladores
de dispositivo a partir do núcleo do SO. Para se comunicar com os controladores
e realizar operações de controle de dados e entrada/saída, os drivers usam portas
de entrada/saída, interrupções e canais de acesso direto à memória (DMA). Cada
controlador define sua própria interface e também possui um driver exclusivo. Os
drivers ocultam essas interfaces e fornecem uma interface controlada para os ban-
cos de câmaras superiores do núcleo para acesso aos dispositivos de armazena-
mento. Ao fazer isso, as especificidades e as características tecnológicas de cada
dispositivo são isoladas, tornando os demais componentes do sistema operacional
independentes da tecnologia subjacente.

87
Uma camada de gerenciamento de blocos fica acima dos drivers e con-
trola o fluxo de blocos de dados entre a memória e os dispositivos de armazena-
mento. É vital ter em mente que os discos são dispositivos orientados a blocos, o
que significa que as operações de leitura e gravação de dados são sempre exe-
cutadas em blocos de dados, e não em bytes individuais. As principais funções
desse cache são implementar o mapeamento de blocos lógicos para blocos físicos
do dispositivo, fornecer aos caches superiores uma abstração de cada dispositivo
físico como um enorme repositório de blocos lógicos independentemente de sua
configuração real e implementar cache/buffer de blocos.
O cache de alocação de documentos é o próximo. Sua principal função é
alocar documentos aos blocos lógicos fornecidos pelo gerenciador de blocos. Cada
documento é visto como uma série de blocos lógicos que devem ser organizados
nos blocos dos dispositivos de forma efetiva, durável e flexível.
Acima da alocação de arquivos está o sistema de arquivos virtual (VFS),
que fornece acesso aos arquivos por meio de uma interface de usuário indepen-
dente dos dispositivos físicos e das estratégias de alocação de arquivos usadas
pelos gabinetes inferiores. Um VFS normalmente gerencia privilégios de acesso
compartilhados por usuários e pontos de acesso compartilhados, além de criar di-
retórios e abstrações de atlas. Outra função importante desta camada é manter
informações sobre cada recurso aberto pelos processos, como a posição da ope-
ração mais recente, o tipo de abertura empregada e o número de processos que
utilizam o recurso. Os processos têm acesso ao sistema de documentos virtuais por
meio de um conjunto de componentes denominado “interface do sistema”.
Finalmente, para criar acesso seguro aos documentos para cada linguagem
de programação, as bibliotecas de entrada/saída utilizam os sistemas de cha-
mada fornecidos pelo sistema operacional.

3 BLOCOS FÍSICOS E LÓGICOS


A forma como o conteúdo dos documentos é armazenado no disco rígido
ou em qualquer dispositivo de armazenamento secundário é um dos aspectos mais
cruciais dos sistemas de gerenciamento de documentos. Um disco rígido pode ser
visto como uma coleção de blocos de tamanho fixo (geralmente de 512 bytes). Os
blocos do disco rígido são comumente chamados de “blocos físicos”. Devido ao
pequeno tamanho desses blocos, o número de blocos físicos em um disco rígido
moderno pode ser enorme. Um disco rotativo de 250 gigabytes possui mais de 500
milhões de blocos físicos! Os sistemas operacionais normalmente trabalham com
blocos lógicos ou clusters, que são grupos de dois blocos lógicos consecutivos,
para simplificar o gerenciamento dessa quantidade de blocos físicos e melhorar o
desempenho das operações de leitura e escrita. Blocos com 4, 8, 16 e 32 quilobytes
são usados ​​com frequência. A maioria das operações e estruturas de dados defi-
88
nidas em discos pelos sistemas operacionais são baseadas em blocos lógicos, que
também estabelecem a unidade mínima de alocação para documentos e diretórios:
cada documento ou diretório ocupa um ou mais blocos lógicos para armazenamen-
to.
No momento de formatar a partição, o Sistema Operacional determina o
número de blocos físicos em cada bloco lógico da partição com base em vários pa-
râmetros, incluindo o tamanho da partição, o sistema de arquivos usado e o tama-
nho das páginas de memória RAM. Pequenos blocos lógicos indicam que há mais
blocos para gerenciar e menos bytes enviados durante cada operação de leitura
ou escrita, o que afeta negativamente o desempenho do sistema. Por outro lado,
blocos lógicos muito grandes podem resultar em fragmentação interna. Por exem-
plo, um arquivo de 200 bytes armazenado em um sistema de blocos lógicos de 32
quilobytes ocupará um bloco, dos quais 32.568 bytes serão desperdiçados porque
foram alocados ao arquivo, mas nunca foram usados.
A fragmentação interna deve ser evitada porque reduz o espaço útil no dis-
co rígido. Ao formatar um disco, um meio de evitar isso é selecionar um tamanho
de bloco lógico apropriado para o tamanho médio dos arquivos que serão armaze-
nados nele. Além disso, alguns sistemas de arquivos (como o ReiserFS, do Linux,
e o UFS, do Solaris) permitem alocar partes específicas de blocos lógicos por meio
de técnicas chamadas de “fragmentação de blocos” ou “alocação de sub-blocos”.

4 ALOCAÇÃO FÍSICA DE ARQUIVOS


As camadas superiores podem ver um dispositivo de armazenamento como
um grande volume de blocos lógicos de tamanho fixo. O problema com a alocação
de documentos é encaixar o conteúdo e os metadados dos documentos nesses
blocos lógicos. Devido ao pequeno tamanho dos blocos lógicos, cada aplicação
pode exigir vários blocos lógicos para serem armazenados em um disco. Os dados
e os metadados de um arquivo devem estar disponíveis nesses blocos para permitir
um acesso rápido e confiável. Dado que um único documento pode ocupar milhares
ou mesmo milhões de blocos, a forma como os documentos são organizados em
blocos de disco tem um impacto significativo no desempenho e na robustez do
sistema de documentos.
A definição de um bloco de controle de arquivo (FCB – File Control Black),
que nada mais é do que uma estrutura que contém os metadados do arquivo e a lo-
calização do seu conteúdo no disco, serve como ponto de partida para a colocação
de um arquivo em um disco. Em alguns sistemas de alocação de arquivos mais bá-
sicos, como o sistema FAT (File Alocation Table), usado em plataformas MS-DOS,
o FCB é bem pequeno e está localizado na entrada que corresponde ao arquivo
na tabela de diretórios na qual está definido. Em sistemas de gerenciamento de

89
documentos mais avançados, como o Master File Table, do NTFS, e os i-nodes, do
Unix, os blocos de controle de documentos são definidos em estruturas separadas.
Existem três métodos comuns de colocação de documentos nos blocos
lógicos do disco: posicionamento contíguo, encadeamento e indexação. Como as
diretivas são normalmente implementadas na forma de documentos, as estraté-
gias de alocação discutidas aqui também são aplicáveis ​​à alocação de diretivas.
Essas estratégias serão descritas e examinadas à luz de três critérios: a velocidade
oferecida por cada estratégia no acesso aos dados do documento, tanto de forma
sequencial quanto direta; a robustez de cada estratégia contra erros, como blocos
de disco defeituosos e dados corrompidos; e a flexibilidade oferecida por cada es-
tratégia na criação, modificação e exclusão de diretórios.

4.1 POSICIONAMENTO OU ALOCAÇÃO CONTÍGUA


Os dados do documento são dispostos de forma ordenada em um grupo de
blocos de disco consecutivos na alocação de contingência, sem “buracos” entre
os blocos. Como resultado, a localização do conteúdo do documento no disco é
determinada pelo endereço de seu primeiro bloco.
Como os blocos de cada documento estão localizados no disco em ordem,
o acesso sequencial aos dados do documento é rápido e requer pouco movimento
da cabeça de leitura do disco. O acesso direto a posições específicas dentro do
documento também é rápido, pois a posição de cada byte no documento pode ser
facilmente calculada a partir da posição do primeiro bloco.
Essa estratégia oferece boa resiliência a falhas de disco: se um bloco de
disco desenvolver uma falha e impedir a leitura de seus dados, apenas o conteúdo
desse bloco será perdido; o conteúdo dos blocos imediatamente antes e depois
do bloco problemático ainda pode ser acessado sem problemas. Por outro lado, o
ponto fraco dessa estratégia é a falta de adaptabilidade, pois o tamanho final de
cada documento deve ser conhecido no momento da criação.
Além disso, essa estratégia é vulnerável à fragmentação externa de maneira
semelhante à técnica de alocação contígua estudada em mecanismos de alocação
de memória. À medida que mais e mais arquivos são criados e destruídos, o espaço
disponível no disco irá se fragmentar em áreas menores e isoladas (fragmentos),
diminuindo sua capacidade de acomodar arquivos maiores. As técnicas de aloca-
ção de primeiro/melhor/pior ajuste usadas no gerenciamento de memória também
podem ser usadas para resolver esse problema, no entanto a desfragmentação do
disco é problemática porque pode ser um processo demorado, e os documentos
não devem ser usados durante
​​ a execução.
A flexibilidade limitada dessa estratégia e o potencial de fragmentação ex-
terna restringem severamente seu uso em sistemas operacionais para fins gerais,

90
nos quais os documentos são continuamente criados, alterados e destruídos. Ainda
é possível que ela seja útil em circunstâncias específicas em que são necessários
tempos de resposta rápidos para acesso sequencial e direto aos dados e em que os
documentos subjacentes não são constantemente modificados. Sistemas projeta-
dos especificamente para reproduzir dados multimídia, como áudio e vídeo, são um
exemplo dessa situação.

4.2 ENCADEAMENTO OU ALOCAÇÃO ENCADEADA


DE MEMÓRIA
Este método de alocação foi proposto para reduzir a flexibilidade limitada da
alocação contratual e eliminar a fragmentação externa. Cada bloco do documen-
to no disco contém informações sobre o documento, além de um ponteiro para o
bloco depois dele, ou um campo que indica o número do bloco depois dele. Como
resultado, não é mais necessário manter os blocos de cada documento lado a lado
no disco rígido. Em vez disso, uma lista de blocos enumerados é construída para
cada documento. Essa estratégia permite a criação de documentos sem precisar
especificar seu tamanho final, pois todos os blocos de disco livres são usados ​​livre-
mente, o que elimina a fragmentação externa.
Essa dependência dos blocos anteriores também resulta em problemas de
robustez, pois se um dos blocos anteriores for corroído ou falhar, todos os blocos
posteriores irão se tornar impossíveis de acessar. Por outro lado, essa abordagem
é muito flexível porque não há necessidade de determinar o tamanho máximo de
um artigo durante sua criação e os artigos podem ser expandidos ou reduzidos sem
maiores dificuldades.
Os principais problemas com a alocação enjaulada são o baixo desempenho
dos acessos diretos e a relativa fragilidade em relação a erros de bloco de disco.
Ambos os problemas decorrem do fato de os conectores do bloco serem manti-
dos em seus respectivos blocos com os dados do documento. Os ponteiros podem
ser removidos dos blocos de dados e armazenados em uma tabela separada para
solucionar esse problema. Essa tabela, geralmente conhecida como “tabela de alo-
cação de arquivos FAT”, serve como base para os sistemas de alocação de arquivos
FAT12, FAT16 e FAT32, usados ​​por muitos dispositivos de armazenamento portáteis,
incluindo pendrives, MP3 players, câmeras digitais e sistemas operacionais MS-
-DOS e Windows.
Na abordagem FAT, os ponteiros de cada bloco são mantidos em uma úni-
ca tabela de blocos reservados no início da divisão. Cada entrada nessa tabela
corresponde a um bloco lógico no disco e inclui um ponteiro que indica o próximo
bloco lógico no mesmo documento. As entradas da tabela também podem incluir
valores especiais para mostrar o bloco final de cada artigo, bem como blocos livres,

91
defeituosos e reservados. Durante o uso do sistema, uma cópia da tabela é mantida
em cache na memória para melhorar o desempenho na localização dos blocos de
documentos.

4.3 INDEXAÇÃO OU ALOCAÇÃO INDEXADA DE


MEMÓRIA
A estrutura encadeada em lista da estratégia anterior é substituída por um
vetor que contém um índice dos blocos do artigo. Cada entrada neste índice denota
um bloco específico do documento e indica onde esse bloco está localizado no dis-
co. O índice de bloco de cada documento é mantido em um disco em uma estrutura
conhecida como “nó de índice” ou simplesmente “nó-i” (i-node). O i-node de cada
documento contém, além de seu índice de blocos, suas principais características,
como tamanho, permissões, datas de acesso etc. Todos os i-nodes dos documen-
tos são coletados em uma tabela de i-nodes mantida no disco rígido separadamen-
te dos blocos de dados dos documentos.
O número de entradas no índice de bloco de um documento é limitado, pois
os i-nodes também apresentam tamanhos fixos. Essa estratégia de alocação im-
põe, portanto, um tamanho máximo para os documentos. Por exemplo, se o siste-
ma usa blocos de 4 quilobytes e o índice de blocos suporta 64 entradas, apenas
documentos de 256 quilobytes podem ser armazenados. Além disso, o número
máximo de documentos ou diretórios que podem ser criados em uma partição é
limitado pelo tamanho da tabela de i-nodes, que é fixa e determinada durante a
formatação do sistema de documentos.
Algumas das entradas no índice de bloco podem ser convertidas em pon-
teiros indiretos para aumentar a quantidade máxima de documentos armazenados.
Essas entradas apontam para blocos de disco que também incluem outros pontei-
ros, criando uma estrutura em forma de bolota. Cada bloco lógico em um sistema
com blocos de 4 quilobytes e ponteiros de 32 bits (4 bytes) pode conter 1.024 pon-
teiros, aumentando muito a capacidade do índice de bloco. Ponteiros dupla e tripla-
mente indiretos também podem ser usados ​​em adição aos ponteiros indiretos. Por
exemplo, os sistemas de arquivos Linux Ext2/Ext3 usam i-nodes com 12 conexões
diretas (que apontam para blocos de dados), uma conexão indireta, duas conexões
indiretas e três conexões indiretas. Cada bloco de ponteiros contém 1.024 ponteiros
quando os blocos lógicos são 4 quilobytes e os ponteiros são 4 bytes.
Apesar da aparente complexidade dessa estrutura, é bastante fácil localizar
e acessar um bloco da arte no disco porque a estrutura homogênea dos ponteiros
permite cálculos precisos de localização de bloco.
Em termos de desempenho, pode-se dizer que essa estratégia é bastante
rápida, tanto para acesso sequencial quanto para acesso direto a blocos, devido

92
aos índices de bloco que estão incluídos nos i-nodes. Para localizar o bloco de-
sejado, no entanto, pode ser necessário ter mais três ou quatro acessos ao disco
nos casos em que há blocos no final de documentos muito grandes, por causa do
apontamento indireto. Essa estratégia é robusta, pois ataques em um bloco de da-
dos não afetam os outros blocos de dados, no entanto erros nos metadados (como
aqueles no nó ou nos blocos de ponteiros) podem danificar grandes porções do
arquivo; como resultado, muitos sistemas que utilizam essa estratégia empregam
técnicas de redundância para os nós e os metadados para aumentar sua robustez.
Em termos de flexibilidade, esse método de alocação é tão flexível quanto a aloca-
ção encapsulada, pois não causa fragmentação externa e permite o uso de todo
o disco para armazenar dados, porém há um tamanho máximo para documentos
criados, bem como um número máximo de documentos por divisão.
A capacidade de criar documentos aninhados é um recurso intrigante do
local listado no índice. Somente as áreas que foram mapeadas fisicamente estão
localizadas no disco rígido, pois os ponteiros do i-node que correspondem a essas
áreas apontam para blocos de disco que contêm informações do banco de dados.
A única finalidade dos ponteiros de área não mapeada é indicar que a área do do-
cumento ainda não foi mapeada no disco. Um processo só receberá zeros se ler
uma área não mapeada. As áreas que não foram mapeadas só serão armazenadas
nelas quando um processo escrever nelas. Organizar documentos usando índices
ou tabelas de hash que podem conter longos períodos de inatividade é uma tarefa
comum para gerenciadores de dados de bancos de dados e outros aplicativos.

5 SISTEMA DE ARQUIVOS VIRTUAL


O sistema de gerenciamento de documentos virtuais cuida dos aspectos
do sistema de gerenciamento de documentos físicos mais próximos do usuário,
incluindo verificação de permissões de acesso, controle de conflitos (atribuição e
liberação de travessias) e gerenciamento de informações para documentos abertos
por processos.
Quando um processo abre um documento, ele recebe do núcleo uma refe-
rência ao documento que será utilizado em todas as demais operações que envol-
vam aquele documento. Nos sistemas Unix, as referências a arquivos abertos são
chamadas de “descritores de arquivos” e se correlacionam com as contagens de
entrada em uma tabela de arquivos de processo mantida pelo kernel. Cada entra-
da nessa tabela contém detalhes de como aquele processo utilizou o documento,
por exemplo, a posição atual e o método de acesso ao processo solicitado (leitura,
escrita etc.).
Além disso, cada entrada na tabela de arquivos abertos do processo tem
uma referência a uma entrada correspondente no banco de dados de arquivos glo-
bais do sistema. Cada entrada na tabela global também inclui outras informações,
93
um rastreamento para controle de compartilhamento, uma referência às estruturas
de dados que identificam a entrada no sistema de entradas no qual ela está locali-
zada e uma contagem dos processos que mantêm a entrada aberta.
Essa estrutura organizacional é semelhante em outros sistemas, porém
pode ser simplificada em sistemas mais antigos e simples, como o DOS. Cabe des-
tacar que toda a estrutura é independente do hardware utilizado para armazenar
os dados e da estratégia de alocação empregada, razão pela qual essa camada é
conhecida como sistema de documentos virtuais. Essa transparência permite que
os processos sejam executados de forma consistente, usando a mesma interface,
com documentos armazenados em qualquer meio de armazenamento e alocados
de acordo com qualquer estratégia.

NOTA
Um sistema virtual de documentos é uma camada de abstração sobre um
sistema de documentos mais detalhado. O objetivo de um VFS é fornecer
aos aplicativos-cliente um acesso padrão a vários tipos de sistemas para
determinados tipos de documentos.

94
RESUMO DO TÓPICO 2

Neste tópico, você aprendeu:

• Os componentes primários da geração de documentos estão dispostos em ca-


ddies.
• Os dispositivos de armazenamento de dados e metadados para documentos,
como discos magnéticos ou bancos de memória flash, estão localizados no nível
mais baixo dessa arquitetura.
• A interface entre dispositivos de armazenamento e controladores segue padrões
como SATA, ATAPI, SCSI, USB e outros
• Os blocos do disco rígido são comumente chamados de “blocos físicos”. Devido
ao pequeno tamanho desses blocos, o número de blocos físicos em um disco
rígido moderno pode ser enorme.
• Os sistemas operacionais normalmente trabalham com blocos lógicos ou clus-
ters, que são grupos de dois blocos lógicos consecutivos, para simplificar o ge-
renciamento dessa quantidade de blocos físicos e melhorar o desempenho das
operações de leitura e escrita.
• Conceitos referentes à alocação física de arquivos: alocação contígua, alocação
encadeada e alocação indexada.
• O sistema de gerenciamento de documentos virtuais cuida dos aspectos do sis-
tema de gerenciamento de documentos físicos mais próximos do usuário, in-
cluindo verificação de permissões de acesso, controle de conflitos (atribuição
e liberação de travessias) e gerenciamento de informações para documentos
abertos por processos

95
AUTOATIVIDADE

1. Os dados do documento são dispostos de forma ordenada em um gru-


po de blocos de disco consecutivos na alocação de contingência, sem
“buracos” entre os blocos. Como resultado, a localização do conteúdo do
documento no disco é determinada pelo endereço de seu primeiro bloco.
Assinale a alternativa CORRETA sobre alocação contígua.

a. ( ) Como os blocos de cada documento estão localizados no disco


em ordem, o acesso sequencial aos dados do documento é rápido
e requer pouco movimento da cabeça de leitura do disco.
b. ( ) As camadas superiores podem ver um dispositivo de armaze-
namento como um grande volume de blocos lógicos de tamanho
fixo.
c. ( ) A forma como o conteúdo dos documentos é armazenada no
disco rígido ou em qualquer dispositivo de armazenamento se-
cundário é um dos aspectos mais cruciais dos sistemas de geren-
ciamento de documentos.
d. ( ) Uma camada de gerenciamento de blocos fica acima dos dri-
vers e controla o fluxo de blocos de dados entre a memória e os
dispositivos de armazenamento.

2. O método de alocação encadeada foi proposto para reduzir a flexibilidade


limitada da alocação contratual e eliminar a fragmentação externa. Assi-
nale a alternativa CORRETA acerca desse método de alocação.

a. ( ) Nas camadas superiores, pode-se ver um dispositivo de arma-


zenamento como um grande volume de blocos lógicos de tama-
nho fixo.
b. ( ) Foi proposto para reduzir a flexibilidade limitada da alocação
contratual e eliminar a fragmentação externa.
c. ( ) A forma como o conteúdo dos documentos é armazenada no
disco rígido ou em qualquer dispositivo de armazenamento se-
cundário é um dos aspectos mais cruciais dos sistemas de geren-
ciamento de documentos.
d. ( ) OUma camada de gerenciamento de blocos fica acima dos
drivers e controla o fluxo de blocos de dados entre a memória e os
dispositivos de armazenamento.

96
3. Nesta abordagem, a estrutura encadeada em lista da estratégia anterior
é substituída por um vetor que contém um índice dos blocos do artigo.
Assinale a alternativa CORRETA sobre o método de alocação indexada.

a. ( ) Quando um processo abre um documento, ele recebe do nú-


cleo uma referência ao documento que será utilizado em todas as
demais operações que envolvem aquele índice.
b. ( ) A forma como o conteúdo dos documentos é armazenada no
disco rígido ou em qualquer dispositivo de armazenamento se-
cundário é um dos aspectos mais cruciais dos sistemas de geren-
ciamento de documentos.
c. ( ) Cada entrada denota um bloco específico do documento e
indica onde esse bloco está localizado no disco. O índice de bloco
de cada documento é mantido em um disco, em uma estrutura
conhecida como nó de índice.
d. ( ) Uma camada de gerenciamento de blocos fica acima dos dri-
vers e controla o fluxo de blocos de dados entre a memória e os
dispositivos de armazenamento.

4. Ao construir um sistema de aplicativo para documentos, uma série de


problemas significativos, que vão desde o acesso de baixo nível a dispo-
sitivos de armazenamento físico até a implementação de uma interface
de acesso de programadores a documentos, deve ser resolvida. Disserte
sobre os conceitos que envolvem a arquitetura geral do sistema de ar-
quivos.
5. A forma como o conteúdo dos documentos é armazenada no disco rígi-
do ou em qualquer dispositivo de armazenamento secundário é um dos
aspectos mais cruciais dos sistemas de gerenciamento de documentos.
Disserte sobre os conceitos que envolvem a partição dos sistemas de
arquivos.

97
TÓPICO 3

GERÊNCIA DE
ENTRADA/SAÍDA
1 INTRODUÇÃO
Um computador é composto principalmente de um ou mais processadores,
memória RAM e dispositivos de entrada e saída. Os dispositivos de entrada/saída
permitem que o computador interaja com o mundo exterior de várias maneiras, por
exemplo:

•  interação com usuários via mouse, teclado, display gráfico, touch screen
e joystick;
•  gravação e leitura de dados em discos rígidos, SSDs, CD-ROMs, DVD-
-ROMs e unidades flash;
•  impressão de informações em plotters e impressoras;
•  gravação e reprodução de áudio e vídeo usando dispositivos como câ-
meras, celulares e high-flyers;
•  comunicação com outros computadores via LAN, WLAN, Bluetooth e
redes de telefonia móvel.

Esses exemplos são típicos de computadores pessoais e computadores


menores, como smartphones. Em contraste, é comum ver dispositivos de entrada/
saída projetados especificamente para monitorar e controlar máquinas e processos
de produção em ambientes industriais, como botões de controle computadoriza-
dos, braços robotizados e processos químicos. Por outro lado, o computador de
bordo de um carro possui dispositivos de entrada para coleta de dados sobre o fun-
cionamento do combustível e do motor e dispositivos de saída para gerenciamento,
por exemplo, da injeção elétrica e do controle pneumático. Deve ser bastante óbvio
que um computador é de pouca utilidade sem dispositivos periféricos, uma vez que
a grande maioria das funções básicas dos computadores é receber dados, pro-
cessá-los e, em seguida, devolver os resultados aos seus usuários, que podem ser
seres humanos, outros computadores, ou processos físicos ou químicos externos.

98
Os primeiros sistemas de computador foram construídos na década de 1940
e destinavam-se a cálculos matemáticos. Como resultado, eles tinham dispositivos
simples de entrada e saída que só podiam baixar e descarregar programas e dados
diretamente na memória principal. Em seguida, surgiram os terminais de leitura e
escrita de texto compostos por um teclado e um monitor de texto, além de discos
rígidos como meio de arquivamento de dados e software duráveis. Existem vários
tipos diferentes de dispositivos de entrada/saída que podem ser conectados a um
computador hoje. Um dos maiores desafios no desenvolvimento e na manutenção
de um sistema operacional é a grande variedade de dispositivos periféricos, pois
cada um apresenta características únicas e requer mecanismos de acesso espe-
cíficos.

2 DISPOSITIVOS DE ENTRADA/SAÍDA
Um dispositivo de entrada/saída facilita a comunicação entre os sistemas
internos de um computador (processadores e memória) e o mundo externo.
Idealmente, a entrada de dados em um computador começa com um sensor
que pode transformar informações externas (como informações físicas ou quími-
cas) em um sinal elétrico para análise. Temos o microfone, as saliências internas
de um teclado ou o fotodiodo de um DVD player como exemplos de sensores. O
sinal analógico elétrico do sensor é então aplicado a um conversor analógico-digital
(CAD), que o converte em informação digital (sequências de bits). Essas informa-
ções digitais são armazenadas em um buffer que o processador pode acessar por
meio de um controle de entrada.
Uma troca de dados começa quando os dados de um processador são en-
viados por um barramento para um controlador de troca de dados. Os dados en-
viados pelo processador são armazenados em um buffer dentro do controlador e
posteriormente convertidos em sinal elétrico por um conversor digital-analógico
(CDA). Esse sinal será aplicado de tal modo que o traduzirá em efeitos tangíveis que
o usuário poderá perceber. Exemplos simples de atuadores são a cabeça de im-
pressão e os motores de um impressor, uma ponte rolante, um display gráfico etc.
Inúmeros dispositivos combinam a funcionalidade de entrada e saída como
discos giratórios: o processador pode ler dados armazenados em um disco giratório
(entrada), mas isso requer a ativação do motor que gira o disco e o posicionamento
correto da cabeça do leitor (saída). A mesma coisa acontece com o hardware de
gravação e reprodução de áudio de um PC convencional.
Existem diversos tipos de dispositivos de entrada/venda com várias carac-
terísticas de velocidade de transferência, formato de transferência de dados e mé-
todo de acesso, assim como inúmeras oportunidades de interação do computador
com o mundo exterior. A velocidade do fluxo de dados de um dispositivo pode variar

99
de alguns bytes por segundo para dispositivos simples, como teclado e mouse, até
terabytes por segundo para algumas interfaces gráficas de usuário ou acesso a
discos de alto desempenho.

2.1 BARRAMENTOS
A prática histórica de conectar dispositivos de entrada/saída a computado-
res por meio de barreiras segue o precedente estabelecido pela arquitetura de Von
Neumann. O barramento dos primeiros sistemas era um arranjo simples de fios, mas
os barramentos dos sistemas atuais são estruturas de hardware extremamente
sofisticadas com circuitos de controle únicos. Além disso, a variedade de velocida-
des e quantidades de dados suportadas pelos dispositivos levou à reestruturação
gradual do barramento único dos sistemas iniciais em uma coleção de barramentos
com várias velocidades e comprimentos de dados.
Um barramento é, portanto, um grupo de linhas de comunicação que per-
mitem a interconexão entre dispositivos como CPU, memória e outros periféricos.
Dois controladores de hardware, a ponte norte e a ponte sul, que fazem
parte do chipset da placa-mãe, são responsáveis ​​por controlar as barreiras em um
sistema de desktop contemporâneo. As pontes dedicadas AGP (Accelerated Gra-
phics Port) e PCI-Express (PCI, Peripheral Component Interconnect) fornecem
acesso à memória RAM e a dispositivos de alta velocidade através da ponte norte,
que é conectada diretamente ao processador.
Por outro lado, a ponte sul é o controlador responsável pelas portas de bai-
xa ou média velocidade do computador, como portas seriais e paralelas, além de
barramentos dedicados como padrão PCI, USB e SATA. Além disso, a ponte sul
frequentemente incorpora outras partes importantes do computador, incluindo
controladores de rede e áudio on-board, controladores de interrupção, controlado-
res DMA, relógios em tempo real (que governam os relógios de escalonamento do
processo), gerenciamento de energia e acesso ao BIOS memória. Através da ponte
norte, o processador se comunica indiretamente com a ponte sul.

2.2 INTERFACE DE ACESSO


A característica mais importante de um dispositivo para entrada ou saída é
sua interface de acesso ou, mais especificamente, a abordagem que será utilizada
para acessar o dispositivo, configurá-lo e fornecer dados a ele (ou receber dados
dele). Cada dispositivo normalmente possui uma coleção de gravadores acessíveis
por meio de uma barreira, também conhecida como portas de entrada ou saída,
usadas para facilitar a comunicação entre o dispositivo e o processador. Os pontos

100
de acesso fornecidos para cada dispositivo de entrada/saída podem ser divididos
nos seguintes grupos:

•  portas de entrada (portas de entrada de dados): utilizadas pelo proces-


sador para receber dados provenientes do dispositivo. São escritas pelo
dispositivo e controladas pelo processador;
•  portas de saída (portas de saída de dados): utilizadas pelo processador
para enviar dados ao dispositivo. São escritas pelo processador e fe-
chadas pelo dispositivo;
•  portas de status: utilizadas pelo processador para verificar o estado in-
terno do dispositivo ou determinar se uma operação solicitada foi bem-
-sucedida e sem erros. São escritas pelo dispositivo e controladas pelo
processador;
•  portas de controle: utilizadas ​​pelo processador para enviar comandos
ao dispositivo ou alterar parâmetros de configuração. São escritas pelo
processador e controladas pelo dispositivo.

2.3 ENDEREÇAMENTO
A forma de acessar os registradores que compõem a interface de um dispo-
sitivo varia de acordo com a arquitetura do computador. Alguns sistemas utilizam
entrada/saída mapeada nas portas (port-mapped I/O); o processador acessa as
portas que compõem a interface através de instruções específicas para operações
de entrada/saída. Por exemplo, a família de processadores Intel usa a instrução “IN
reg port” para ler o valor da porta do dispositivo e depositá-lo no registrador do pro-
cessador, e a instrução “OUT port reg” é usada para escrever o valor do registrador
para a porta.
Outro método de acesso a dispositivos para entrada e saída é a E/S ma-
peada na memória, frequentemente usada em interfaces gráficas e de rede. Nessa
abordagem, uma parte do espaço de endereço de memória que não está em uso
no momento é reservada para mapear os pontos de acesso aos dispositivos. Dessa
forma, as portas são vistas como se fossem parte da memória principal e podem
ser abertas e escritas usando as mesmas instruções usadas para acessar o res-
tante da memória, dispensando a necessidade de instruções especiais, como IN
e OUT. Algumas arquiteturas de computador, como o padrão IBM-PC, empregam
uma abordagem híbrida para determinados dispositivos, como interfaces de rede
e de áudio: as portas de controle e de status estão localizadas no espaço de ende-
reço de entrada/saída e podem ser acessadas usando instruções específicas, e a
entrada de dados e as portas de saída estão localizadas na memória (normalmente
no intervalo de endereços de 640 quilobytes a 1 megabyte).

101
O uso de um processador independente de hardware dedicado que se co-
munica com o processador principal através de algum tipo de barramento é uma
abordagem mais sofisticada para controlar os dispositivos de entrada/saída. Essa
abordagem é conhecida como “canais de entrada/saída” (canais IO) em sistemas
de grande porte (mainframes); é frequentemente usado em interfaces de vídeo ou
áudio de alto desempenho em computadores pessoais, como aqueles com acele-
ração, nos quais um processador gráfico (GPU) lida com os aspectos mais exigentes
do processamento de dados de vídeo, como renderização de imagens em três di-
mensões e texturas, deixando o processo para a CPU.

2.4 INTERRUPÇÕES
A capacidade de acessar controladores de dispositivo por meio de seus
registradores é útil para comunicação do processador e controlador ou, mais es-
pecificamente, para interações iniciadas pelo processador, no entanto pode ser
problemático do ponto de vista do controlador se o processador precisar obter in-
formações do controlador em tempo hábil, sem ter que esperar. Nesse cenário, o
controlador pode utilizar uma solicitação de interrupção (IRQ – Interrupt Request)
para informar ao processador algum evento significativo, como a conclusão de uma
operação solicitada, a disponibilidade de uma nova entrada ou a ocorrência de uma
falha com o dispositivo.
Os requisitos para interrupção são sinais elétricos transmitidos através do
painel de controle do computador. A cada interrupção é atribuído um número único,
normalmente na faixa de 0-31 ou 0-63, permitindo a identificação do dispositivo
que a solicitou.
Quando uma solicitação de interrupção é recebida, o processador suspen-
de seu fluxo atual de instruções e redireciona a execução para um endereço pre-
viamente definido, no qual é encontrada uma rotina de tratamento de interrupção
(manipulador de interrupção). Essa rotina é responsável por lidar com a interrupção
ou realizar as ações necessárias para localizar e endereçar o dispositivo que causou
a solicitação. O processador retoma o código que estava sendo executado quando
a operação foi interrompida na conclusão da rotina de tratamento da interrupção.
Vejamos como isso acontece.

•  Qualquer programa está sendo executado pelo processador.


•  O usuário pressiona um botão no teclado.
•  O teclado controlador reconhece o botão que foi pressionado, armazena
seu código em um buffer interno e envia uma solicitação de interrupção
(IRQ) ao processador.
•  O processador recebe a interrupção, salva seu estado atual (o conteúdo

102
de seus registradores) e adia sua execução para uma rotina de trata-
mento da interrupção.
•  Ao ser executada, essa rotina acessa os registradores do teclado con-
trolador para transferir o conteúdo de seu buffer para uma seção da
memória do computador. Depois disso, ela pode realizar outras ações,
como alocar algum processo ou thread que esteja aguardando o pres-
sionamento de teclas do teclado.
•  Após completar a rotina de tratamento da interrupção, o processador
retoma o fluxo de instruções que havia sido interrompido, utilizando as
informações de estado salvas na etapa 4.

Essa série de ações acontece em resposta a cada solicitação de interrupção


que o processador recebe. Cada interrupção corresponde a um evento que ocorre
em um dispositivo periférico (como a chegada de um pacote de rede, movimento
do mouse, conclusão da operação do disco etc.), podendo ocorrer centenas ou
milhares de interrupções por segundo dependendo da carga de trabalho e configu-
ração do sistema (número e tipo de periféricos). Por isso, as rotinas de tratamento
de interrupção devem concluir suas tarefas rapidamente para proteger a funciona-
lidade geral do sistema.
Como diferentes tipos de interrupção podem exigir diferentes tipos de tra-
tamento (porque os dispositivos variam), cada requisito de interrupção deve exigir
uma rotina de tratamento específica. O termo “vetor de interrupções” (IV – Interrupt
Vector) é usado para descrever um conjunto de terminais de função na maioria dos
projetos arquitetônicos atuais; cada entrada nesse vetor identifica o procedimento
apropriado para lidar com uma interrupção. Por exemplo, se a entrada 5 do vetor
contiver o valor 3C20h, então a rotina de tratamento do IRQ 5 começará na posição
3C20h da memória RAM. Dependendo do hardware, o manipulador de interrupção
pode residir em uma posição de RAM fixada pelo fabricante do processador ou
pode ter sua localização especificada pelo conteúdo de um registrador de CPU pro-
jetado especificamente para essa finalidade.
As causas das interrupções que o processador recebe são externas, que
acontecem com dispositivos periféricos e são relatadas por seus controladores.
Eventos gerados pelo próprio processador, no entanto, podem causar desvio de
execução utilizando o mesmo mecanismo de interrupção; são exceções. Eventos
como instruções errôneas (inválidas ou inexistentes), divisão por zero ou outros
erros de software causam exceções internas no processador, que ativam rotinas
de tratamento de exceções registradas no log de interrupção.
Nas arquiteturas de hardware atuais, as interrupções geradas por disposi-
tivos de entrada/saída não são transmitidas diretamente ao processador, mas por
meio de um controlador de interrupção programável (PIC, ou APIC, para programa-
ção avançada), que é um componente do chipset do computador. Os pinos deste
103
dispositivo de controle de interrupção são conectados às linhas dos controladores
de perímetro, e suas chaves são conectadas aos pontos de entrada de interrupção
do processador.
As interrupções dos dispositivos são recebidas pelo controlador de in-
terrupção, que as envia sequencialmente, uma de cada vez, para o processador.
Quando ocorre uma interrupção, o processador deve acessar a interface do PIC
para determinar sua causa e, em seguida, “reconhecê-la” ou informar ao PIC que a
interrupção foi tratada e agora pode ser ignorada pelo controlador. As interrupções
que já ocorreram, mas ainda não foram reconhecidas pelo processador, são conhe-
cidas como “interrupções pendentes”. O PIC pode ser programado para bloquear
ou ignorar algumas das interrupções recebidas, impedindo que elas cheguem ao
processador. Além disso, ele possibilita atribuir prioridades entre as interrupções.
O mecanismo de interrupção torna eficiente a interação entre o processador
e os dispositivos de perímetro. Se não houvesse interrupções, o processador per-
deria muito tempo verificando todos os dispositivos do sistema para ver se havia
algum evento que precisasse ser tratado. Além disso, as interrupções possibilitam
a construção de funções de sincronização de entrada/salvamento; o processador
não precisa aguardar a conclusão de cada operação solicitada, pois o dispositivo
enviará uma interrupção para “avisar” o processador quando a operação for con-
cluída.

3 SOFTWARES DE ENTRADA/SAÍDA
O sistema operacional é responsável por fornecer acesso aos dispositivos
para entrada/saída dos aplicativos e, em última instância, aos usuários do sistema.
É um tremendo desafio fornecer acesso eficaz, rápido e confiável a uma coleção
de periféricos com comportamento, velocidade de transferência, volume de dados
produzidos/consumidos e interfaces de hardware variados. Além disso, como cada
dispositivo especifica sua própria interface e modo de operação, o núcleo do siste-
ma operacional deve implementar código de baixo nível para interagir com milhares
de tipos diferentes de dispositivos. Por exemplo, cerca de 60% das 12 milhões de
linhas de código no kernel Linux 2.6.31 são drivers para dispositivos de entrada/
saída.
O código do sistema operacional é organizado em clusters que movem as
operações de DMA das portas de entrada/saída para interfaces de acesso abstra-
tas, como arquivos e soquetes de rede, a fim de agilizar o acesso e o gerenciamento
de dispositivos de entrada/saída. A ponta de seta acima, que é implementada em
hardware, corresponde ao controlador específico de cada dispositivo (IDE, SCSI,
SATA etc.), bem como aos controladores de DMA e de interrupção que fazem parte
do chipset do computador.

104
As rotinas de tratamento de interrupção (manipuladores de interrupção) e
drivers de entrada/saída compõem o primeiro módulo de software. Os mecanismos
de tratamento de interrupções são acionados por cada interrupção que se origina
do controlador de interrupção e servem principalmente para registrar sua ocorrên-
cia. A execução dessas rotinas deve ser muito breve, pois o processador desabilita a
ocorrência de novas interrupções enquanto trata uma interrupção existente. Como
resultado, quando uma rotina é ativada, ela apenas reconhece a interrupção ocorri-
da junto ao controlador, cria um manipulador de eventos (descrição do evento) que
contém os dados da interrupção, insere-o em uma lista de eventos pendentes que
é mantida pelo driver do dispositivo, notifica o driver e termina.
Os eventos da fila de eventos pendentes mantidos por cada driver são trata-
dos posteriormente, quando o processador estiver livre. A divisão do tratamento da
interrupção em dois níveis de urgência faz com que o código de cada interrupção
seja organizado em dois níveis: a metade inferior, que inclui as ações imediatas a
serem tomadas quando ocorre uma interrupção, e a metade superior, que inclui as
demais ações de tratamento de interrupção.

4 DISCOS RÍGIDOS
Encontrados na grande maioria dos computadores pessoais e servidores.
Um disco rígido permite o arquivamento (não volátil) persistente e razoável, de bai-
xo custo, de grandes volumes de dados. Além disso, ler e gravar dados em um
disco rígido é mais fácil e flexível do que em outras mídias, como fitas magnéticas
ou discos ópticos (CDs, DVDs). Por esses motivos, os discos rígidos são muito utili-
zados em computadores para armazenamento de arquivos do sistema operacional,
arquivos de aplicativos e dados do usuário. Além disso, são frequentemente em-
pregados ​​como local para armazenar páginas em sistemas de memória virtual.
Um disco rígido é formado por um ou mais discos metálicos que giram jun-
tos em alta velocidade (entre 4.200 e 15.000 rpm), acionados por um motor elétrico.
Um cabeçote de leitura está localizado próximo à face de cada disco e é respon-
sável pela leitura e escrita dos dados, magnetizando pequenas áreas da superfície
metálica. Cada face é logicamente dividida em trilhas e setores; a interseção de
uma trilha e um setor em uma face define um bloco físico, que serve como unidade
fundamental para armazenar e transmitir dados em um disco. Os discos rígidos
atuais (a partir de 2010) usam blocos de 512 bytes, no entanto, o padrão da indús-
tria está se movendo para blocos físicos de 4.096 bytes.

105
NOTA
O componente de hardware que armazena o conteúdo digital é um dis-
co rígido. Documentos, fotos, músicas, vídeos, preferências de software
e sistema operacional podem ser armazenados em um disco rígido. Os
discos rígidos podem ser internos ou externos.

106
LEITURA COMPLEMENTAR

O QUE É UM SISTEMA OPERACIONAL? O GUIA


COMPLETO!
Cairo Noleto
[...]

O QUE É UM SISTEMA OPERACIONAL?

Um sistema operacional é uma plataforma que se posiciona entre a pes-


soa usuária e os componentes físicos de um computador – denominados como
Hardwares. Por meio dele, é possível controlar a execução de tarefas e programas,
assim como o gerenciamento da memória, dispositivos e arquivos.
Em outras palavras, o sistema operacional permite que uma pessoa acesse
e controle as partes do computador sem ter conhecimentos técnicos específicos,
tornando o computador acessível.

107
A HISTÓRIA POR TRÁS DOS SISTEMAS OPERACIONAIS!

Conheça agora como os sistemas operacionais surgiram e se desenvolve-


ram até chegar nas versões que conhecemos atualmente.

Primeira geração

Os primeiros computadores eletrônicos foram introduzidos durante as dé-


cadas de 40 e 50. Naquela época, toda a programação era feita em linguagem
de máquina, geralmente ligando fios a placas de ensaio para controlar as funções
básicas já que não existiam sistemas operacionais complexos. Nesse contexto, as
máquinas geralmente tinham como função auxiliar em cálculos simples de mate-
mática.

Segunda geração

No começo da década de 1950, o primeiro sistema operacional foi criado


pela General Motors para a máquina 701 da IBM, chamado GMOS. Nessa época, os
sistemas operacionais eram chamados de sistemas de processamento em lote de
fluxo único, pois os dados eram enviados em grupos que compunham os lotes.
As novas máquinas desenvolvidas com essa tecnologia eram chamadas de
Mainframe e utilizadas por pessoas operadoras em grandes salas. Por conta do alto
custo de aquisição, somente grandes corporações ou governos as utilizavam.

Terceira geração

No final da década de 1960, foi possível desenvolver um sistema de multi-


programação cuja performance era suficientemente alta para lidar com diversas
tarefas simultaneamente. A introdução dessa função foi crucial para o desenvol-
vimento dos sistemas operacionais, já que permitiu que uma CPU – traduzindo do
inglês, unidade central de processamento – conseguisse funcionar por quase todo
o tempo que estivesse em operação.
Outro fator que pesou na revolução dos sistemas operacionais foi o desen-
volvimento de pequenos computadores. O modelo PDP-1, por exemplo, da Digital
Equipment Corporation, era vendido a 120 mil dólares por máquina. O valor parece
alto, mas na época correspondia a apenas 5% do preço dos grandes computadores!
O importante é que, tanto a introdução do sistema multiprogramação quan-
to o desenvolvimento de pequenos computadores levaram à quarta geração de
sistemas operacionais.

Quarta geração

A quarta geração de sistemas operacionais acompanhou o desenvolvimento


e o crescimento de computadores pessoais. Apesar de serem muito semelhantes

108
aos modelos PDP, eles custavam ainda menos e permitiam que pessoas comuns
pudessem adquirir uma máquina para uso pessoal.
Pensando nessa revolução de computadores pessoais, o sistema operacio-
nal Windows foi criado em 1975 após o nascimento da Microsoft. O Windows logo se
tornou o maior e mais utilizado sistema operacional, estendendo sua operação até
os dias de hoje. O sistema já contou com diversas atualizações, como Windows 95,
Windows 98, Windows XP, Windows 7 e Windows 10.
Outra empresa que competiu fortemente com a Microsoft nesse mercado
foi a Apple, com o Apple Macintosh, que fez enorme sucesso devido à sua interface
amigável e atraente para pessoas usuárias.
Atualmente, todos dispositivos eletrônicos utilizam sistemas operacionais,
sejam computadores, smartphones ou tablets, mas esse não é o fim da história dos
sistemas operacionais que, assim como toda a tecnologia, continuam evoluindo e
trazendo uma melhor experiência para as pessoas usuárias.

QUAL A IMPORTÂNCIA DOS SISTEMAS OPERACIONAIS?

Embora os sistemas operacionais funcionem de maneiras exclusivamente


diferentes, os serviços que eles fornecem às pessoas usuárias são relativamente
semelhantes. Com isso em mente, dedicar um tempo para entender a importância
de um sistema operacional pode ajudar a garantir que você tenha as informações
necessárias para encontrar o computador certo para suas necessidades.
O papel principal de um Sistema Operacional é atuar como um gerenciador
dos dispositivos de entrada e saída, memória, CPU, recursos de armazenamento de
arquivos e o alocamento de programas e usuários específicos para a realização de
determinadas tarefas. Dessa forma, o sistema operacional é um gerenciador de re-
cursos, o que significa que ele consegue gerenciar os recursos de um computador
internamente.
Os sistemas operacionais são importantes e podem ser utilizados tanto para
navegar pela internet, como também na área de programação, para criar novos
aplicativos para usuários.
Em um nível fundamental, um sistema operacional gerencia praticamente
todos os aspectos da experiência do usuário. Desde o momento em que você co-
meça a usar o computador até o último segundo antes de desligar, o siste-
ma operacional desempenha um papel fundamental em sua funcionalidade.

QUAIS AS DIFERENÇAS ENTRE SISTEMA OPERACIONAL E INTERFACE?

A interface do usuário é o software que uma pessoa usa para interagir com
o sistema operacional e os aplicativos executados em um computador. O sistema
operacional e os aplicativos são executados sem a necessidade dessa interface.

109
Uma pessoa interage por meio da interface do usuário apenas para fornecer entra-
da e observar a saída do software que está sendo executado.
Podemos entender que o sistema operacional é a base de todo programa
e interface, mesmo os dois sendo executados paralelamente, temos a separação
dessas interfaces.

Quais as funções do Sistema Operacional?

Vamos conhecer agora algumas funções importantes de um sistema ope-


racional.

Gerenciamento de Processos

Por ser um ambiente multitarefas, o sistema operacional decide qual pro-


cesso deve receber prioridade, ser processado primeiro e por quanto tempo. Essa
função ficou conhecida como agendamento de processos e é realizada pelo esca-
lonador da CPU.

Gerenciamento de Memória

Refere-se ao gerenciamento da memória primária ou principal. Para enten-


dermos melhor, a memória primária é um longo conjunto de palavras ou bytes, sen-
do que cada um deles tem seu próprio endereço dentro da máquina.
A memória primária providencia um armazenamento rápido que pode ser
acessado diretamente pela CPU. Logo, para o sistema operacional conseguir exe-
cutar um software qualquer, ele precisa acessar essa memória principal – e é isso
que o gerenciamento de memória permite. Em outras palavras, essa funcionalidade
permite a execução dos softwares pelo computador.

Gerenciamento de Dispositivo

O sistema operacional cria uma comunicação direta por meio de drivers com
os dispositivos conectados no Hardware. Um driver, portanto, é um software que
viabiliza a execução de um dispositivo, que pode ser um pen drive, mouse, teclado
ou até mesmo a placa de vídeo da máquina.

Gerenciamento de Arquivos

O sistema operacional organiza os arquivos armazenados na memória do


computador em diretórios, que podem ser acessados pela pessoa usuária e que
contêm arquivos ou caminhos para outros diretórios. Logo, o sistema operacional
mantém controle sobre toda a organização, informação e status desses arquivos
através da funcionalidade de gerenciamento.

110
Segurança

Um sistema operacional é capaz de evitar acesso de agentes não autoriza-


dos a arquivos ou configurações por meio de senhas e outros métodos de segu-
rança.

Controle da performance do sistema

Sistemas operacionais também são responsáveis por manter registros da


performance do sistema em geral, caso aconteça algum imprevisto e o serviço
demore a receber uma resposta do sistema.

Ajuda de detecção de erros

Produz mensagens de erro e relatórios sempre que um serviço apresenta


um bug, que ajudam no processo de correção do erro no código do sistema – ou
debug.

Administração de serviços

Mantém controle e administra o tempo e os recursos que cada serviço pre-


cisa para seu funcionamento.

CONHEÇA A ESTRUTURA DOS SISTEMAS OPERACIONAIS!


[...]

Um sistema operacional pode ser estruturado de diversas formas. Assim, a


sua complexidade pode ser elevada para altos níveis de programação.
No entanto, conseguimos simplificar as camadas de um sistema tomando
como início a parte da pessoa usuária e os programas que ela tem o controle de
acesso. Também temos as lógicas do sistema operacional e o seu kernel, que são
boa parte dos processos e ficam invisíveis para a pessoa usuária final.

QUAIS SÃO AS CARACTERÍSTICAS DE SISTEMAS OPERACIONAIS?

Como você viu, os sistemas operacionais contam com uma lista extensa de
recursos. Todos eles podem ser resumidos em algumas características. Dentre elas,
podemos destacar que os sistemas:

•  gerenciam tarefas e recursos;


•  controlam a entrada e saída de softwares;
•  são multitarefas;
•  têm núcleo;
•  têm mecanismos para garantir a proteção, administração e realocação
dos recursos;
111
•  contam com kernel.

O que é Kernel?

Kernel é o componente central de um sistema operacional. Ele opera no


núcleo do computador, garantindo que haja comunicação entre os componentes
do Hardware e o terminal no qual o sistema operacional é executado. É considerada
a parte mais interna do sistema operacional.

Monolítico

No kernel monolítico temos todo o código de suporte para execução das ta-
refas empregadas dentro de apenas um núcleo. Ou seja, caso necessário executar
uma ação, o sistema operacional se comunica diretamente com o kernel e realiza
o que é pedido. Todos os módulos necessários para executar o sistema são arma-
zenados dentro do espaço do kernel monolítico. Alguns exemplos de sistemas que
utilizam a arquitetura monolítica:

•  FreeBSD.
•  NetBSD.
•  OpenBSD.
•  Solaris.
•  Linux.
•  DOS.
•  MS-DOS.

Micro kernels

Ao contrário do monolítico, a arquitetura microkernel tem o mínimo neces-


sário para consolidar as ações fundamentais do sistema no armazenamento do
kernel, de modo que o restante das operações lógicas ficam no sistema do usuário
final. Por isso, os códigos de microkernels tendem a ser bem compactos e poucos
ultrapassam a casa de 10.000 caracteres. Alguns exemplos de sistemas que utili-
zam o microkernel são:

•  Família do microkernel L4
•  Horizon
•  Zircon
•  Hurd
•  MINIX
•  QNX
112
[...]
QUAIS AS VANTAGENS DOS SISTEMAS OPERACIONAIS?
Usabilidade

O principal ponto positivo que temos ao utilizar um sistema operacional é a


sua usabilidade, ou seja, o quão amigável o sistema consegue ser para que a
pessoa usuária consiga navegar e utilizá-lo facilmente.

Segurança

Ao contrário da usabilidade, a segurança acaba tornando o software mais


rígido e com mais travas para a pessoa usuária final. Neste aspecto, sistemas ope-
racionais controlados por empresas e administradores de sistemas podem confi-
gurar remotamente as permissões que uma pessoa pode ter ou não na navegação.

Compartilhar recursos

A forma de compartilhar dispositivos e recursos por uma interface simples é


mais um aspecto efetivo em sistemas operacionais. Podemos compartilhar im-
pressoras, modems de internet, fax, etc, rapidamente e caso precise enviar
ou receber algum tipo de arquivo ou programa temos muitas opções dispo-
níveis.

Multitarefas

Multitarefas é um dos principais pontos chave no sistema operacional, a


possibilidade de rodar vários programas ao mesmo tempo com a opção de minimi-
zar e maximizar as janelas que queremos, acaba tornando o uso do sistema muito
mais fluido.

[...]
CONCLUSÃO

Utilizamos vários sistemas operacionais em nosso dia-a-dia, seja no celular,


TV ou computador, todos possuem um sistema inteligente e uma interface amigá-
vel para nós navegarmos e realizar tarefas.
Como todo sistema, os sistemas operacionais tem falhas e atualizações
constantes, contando com uma equipe de diversas pessoas desenvolvedoras,
temos ocasionalmente novos recursos para estes aparelhos. Além disso, com a
chegada de hardwares potentes, temos uma expansão de coisas que os sistemas
conseguem fazer, isto é, carregar cada vez mais programas ao mesmo tempo, pro-
cessar dados e até mesmo renderizar cenários 3D. Além disso, em sistemas ope-
racionais desktop conseguimos criar cada vez mais aplicações com o que há de
último no mercado.

113
Conhecer os sistemas operacionais é muito útil para pessoas desenvolve-
doras e programadoras, ou para aquelas que ainda estão no processo para mudar
para uma carreira no mercado de tecnologia. Isso porque conhecer a fundo o fun-
cionamento das máquinas facilita a compreensão de sua lógica. Já para quem não
faz parte da área de tecnologia, saber mais sobre sistemas operacionais também
é uma boa ideia, uma vez que lidamos com eles diariamente nos mais variados
dispositivos.

Fonte: NOLETO, C. O que é sistema operacional? O guia completo! Trybe, Belo Ho-
rizonte, 2 ago. 2022. Disponível em: https://blog.betrybe.com/tecnologia/sistema-
-operacional-tudo-sobre/. Acesso em: 21 nov. 2022.

114
RESUMO DO TÓPICO 3

Neste tópico, você aprendeu:

• Um dispositivo de entrada/saída facilita a comunicação entre os sistemas inter-


nos de um computador (processadores e memória) e o mundo externo.
• Um barramento é um grupo de linhas de comunicação que permitem a interco-
nexão entre dispositivos como CPU, memória e outros periféricos.
• Conceitos relacionados às interfaces de acesso, endereçamento, interrupções e
softwares de entrada e saída.
• O componente de hardware que armazena o conteúdo digital é um disco rígido.
Documentos, fotos, músicas, vídeos, preferências de software e sistema opera-
cional podem ser armazenados em um disco rígido. Os discos rígidos podem ser
internos ou externos.

115
AUTOATIVIDADE

1. Idealmente, a entrada de dados em um computador começa com um


sensor que pode transformar informações externas (como informações
físicas ou químicas) em um sinal elétrico para análise. A esse respeito,
assinale a alternativa CORRETA:

a. ( ) A característica mais importante de um dispositivo para entra-


da ou saída é sua interface de acesso ou, mais especificamente, a
abordagem que será utilizada para acessar o dispositivo, configu-
rá-lo e fornecer dados a ele (ou receber dados dele).
b. ( ) A forma de acessar os registradores que compõem a interface
de um dispositivo varia de acordo com a arquitetura do computa-
dor. Alguns sistemas utilizam entrada/saída mapeada nas portas
(port-mapped I/O), nas quais o processador acessa as portas que
compõem a interface através de instruções específicas para ope-
rações de entrada/saída.
c. ( ) A capacidade de acessar controladores de dispositivo por meio
de seus registradores é útil para comunicação processador/con-
trolador ou, mais especificamente, para interações iniciadas pelo
processador.
d. ( ) Uma troca de dados começa quando os dados de um proces-
sador são enviados por um barramento para um controlador de
troca de dados. Os dados enviados pelo processador são arma-
zenados em um buffer dentro do controlador e posteriormente
convertidos em sinal elétrico por um conversor digital-analógico
(CDA).

2. A capacidade de acessar controladores de dispositivo por meio de seus


registradores é útil para comunicação processador/controlador ou, mais
especificamente, para interações iniciadas pelo processador. Assinale a
alternativa CORRETA acerca do processo de interrupções.

a. ( ) A característica mais importante de um dispositivo para entra-


da ou saída é sua interface de acesso ou, mais especificamente, a
abordagem que será utilizada para acessar o dispositivo, configu-
rá-lo e fornecer dados a ele (ou receber dados dele).
b. ( ) A forma de acessar os registradores que compõem a interface
de um dispositivo varia de acordo com a arquitetura do computa-
dor. Alguns sistemas utilizam entrada/saída mapeada nas portas
(port-mapped I/O), nas quais o processador acessa as portas que
compõem a interface através de instruções específicas para ope-
rações de entrada/saída.

116
c. ( ) Os requisitos para interrupção são sinais elétricos transmitidos
através do painel de controle do computador. A cada interrupção
é atribuído um número único, normalmente na faixa de 0-31 ou
0-63, permitindo a identificação do dispositivo que a solicitou.
d. ( ) Uma camada de gerenciamento de blocos fica acima dos dri-
vers e controla o fluxo de blocos de dados entre a memória e os
dispositivos de armazenamento.

3. O sistema operacional é responsável por fornecer acesso aos dispo-


sitivos para entrada/saída dos aplicativos e, em última instância, aos
usuários do sistema. Assinale a alternativa CORRETA sobre software de
entrada e saída.

a. ( ) O código do sistema operacional é organizado em clusters que


movem as operações de DMA das portas de entrada/saída para
interfaces de acesso abstratas, como arquivos e soquetes de
rede, a fim de agilizar o acesso e o gerenciamento de dispositivos
de entrada/saída.
b. ( ) A forma de acessar os registradores que compõem a interface
de um dispositivo varia de acordo com a arquitetura do computa-
dor. Alguns sistemas utilizam entrada/saída mapeada nas portas
(port-mapped I/O), nas quais o processador acessa as portas que
compõem a interface através de instruções específicas para ope-
rações de entrada/saída.
c. ( ) A forma de acessar os registradores que compõem a interface
de um dispositivo varia de acordo com a arquitetura do computa-
dor. Alguns sistemas utilizam entrada/saída mapeada nas portas
(port-mapped I/O), nas quais o processador acessa as portas que
compõem a interface através de instruções específicas para ope-
rações de entrada/saída.
d. ( ) Contém as variáveis estáticas globais e locais do programa
(que, na linguagem de programação C, são as variáveis designa-
das como estáticas dentro das funções).

4. Discos rígidos são encontrados na grande maioria dos computadores


pessoais e servidores. Um disco rígido permite o arquivamento (não vo-
látil) persistente e razoável de baixo custo de grandes volumes de dados.
Disserte sobre os conceitos que envolvem os discos rígidos.

117
5. Os requisitos para interrupção são sinais elétricos transmitidos através
do painel de controle do computador. Disserte sobre os conceitos que
envolvem interrupções em um sistema computacional.

118
REFERÊNCIAS

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


UFPR, 2014.

119
120
UNIDADE 3

SISTEMAS
OPERACIONAIS –
SEGURANÇA

OBJETIVOS DE APRENDIZAGEM
A partir do estudo desta unidade, você deverá ser capaz de:
• Compreender os conceitos de deadlock em sistemas operacionais;
• Entender os conceitos de administração de sistemas operacionais;
• Compreender os requisitos de uma rede de computadores sob aspecto
dos sistemas operacionais;
• Entender os conceitos de segurança de sistemas operacionais.

PLANO DE ESTUDOS
A cada tópico desta unidade, você encontrará autoatividades com o objetivo
de reforçar o conteúdo apresentado.
TÓPICO 1 – SEGURANÇA DE SISTEMAS OPERACIONAIS
TÓPICO 2 – VIRTUALIZAÇÃO DE SISTEMAS OPERACIONAIS
TÓPICO 3 – DEADLOCK, SISTEMAS NUMÉRICOS E CONVERSÃO DE BASES
TÓPICO 1

SEGURANÇA
DE SISTEMAS
OPERACIONAIS
1 INTRODUÇÃO
Os conceitos básicos de segurança e criptografia serão apresentados pri-
meiro, seguidos de descrições de aspectos conceituais e mecanismos relacionados
à autenticação de usuários, controle de acesso, integridade do sistema e privaci-
dade, aplicações e dados armazenados. A maioria dos tópicos de segurança abor-
dados neste tópico se aplica a sistemas de computação em geral, e não apenas a
sistemas operacionais.
A segurança de um sistema de computador refere-se à garantia de algumas
propriedades fundamentais relacionadas aos dados e recursos contidos no sistema.
Todos os recursos do sistema, incluindo registros de banco de dados, documentos,
áreas de memória, pontos de entrada/saída, conexões de rede, configurações, den-
tre outros, são chamados de “informações”.
Em português, a palavra “segurança” tem vários significados, muitas vezes
contraditórios. As palavras “segurança” e “confiabilidade” em inglês nos permitem
definir com mais precisão as várias facetas da segurança. Esses termos também
abrangem ameaças que visam prejudicar usuários de um sistema ou o ambiente,
como erros de programação que podem levar a acidentes. O termo “confiabilidade”
é usado para descrever sistemas confiáveis ​​e construídos para resistir a erros co-
metidos por usuários, hardware, software ou outras fontes de erro.
Portanto, neste tópico, serão discutidas apenas questões de segurança re-
lacionadas à palavra inglesa “security”, ou defesa contra ameaças intencionais.

2 PROPRIEDADES E PRINCÍPIOS DE SEGURANÇA


Algumas propriedades fundamentais de um sistema de computador podem
ser usadas para expressar sua segurança. Vejamos:

123
•  confidencialidade: somente usuários devidamente autorizados a fa-
zê-lo podem consultar os recursos do sistema;
•  integridade: os recursos do sistema só podem ser alterados ou des-
truídos por usuários autorizados a realizar tais operações;
•  disponibilidade: os recursos devem ser acessíveis a usuários que te-
nham o direito de usá-los a qualquer momento.

Além dessas, outras características significativas que normalmente estão


ligadas à segurança do sistema incluem:

•  autenticidade: todas as entidades do sistema são autênticas ou ge-


nuínas. Em outras palavras, os dados associados a essas entidades são
precisos e correspondem às informações sobre o mundo real que elas
representam, como identidades de usuários, fonte de dados de um ar-
quivo, dentre outros.;
•  irretratabilidade: todas as ações realizadas dentro do sistema são
conhecidas e não podem ser ocultadas ou negadas por seus criadores.
Essa propriedade também é conhecida como “irrefutabilidade” ou “não
repúdio”.

É responsabilidade do sistema operacional garantir a manutenção das pro-


priedades de segurança para todos os recursos sob seu controle. Esses direitos
podem ser violados como resultado de erros de software ou humanos provocados
por indivíduos mal-intencionados internos ou externos ao sistema.
Além das técnicas padrão de engenharia de software para a criação de sis-
temas corretos, um conjunto de preceitos específicos do projeto do sistema, bem
como do comportamento do usuário e do invasor, orientam o desenvolvimento de
sistemas de computador seguros. Acompanhe:

•  Privilégios mínimos: todos os usuários e programas devem operar


com o mínimo de privilégios ou permissões de acesso possíveis. Dessa
forma, os danos causados ​​por erros ou más ações intencionais serão
minimizados.
•  Mediação completa: todo acesso aos recursos, seja direto ou indireto,
deve ser verificado por mecanismos de segurança.
•  Segurança-padrão: o mecanismo de segurança deve identificar cla-
ramente o acesso autorizado; se um determinado acesso não for expli-
citamente autorizado, ele deve ser negado. Esse princípio evita que os
acessos não previstos inicialmente no projeto do sistema sejam autori-
zados acidentalmente.
•  Economia do mecanismo: para ser fácil e minuciosamente analisado,
124
testado e validado, o projeto de um sistema de proteção deve ser pe-
queno e simples.
•  Separação de funções: os sistemas de proteção construídos em mais
de um controle são mais duráveis porque,
​​ mesmo que um invasor con-
siga desabilitar um dos controles, ele ainda não poderá acessar o re-
curso. Um exemplo típico é o uso de duas formas de autenticação para
acessar o sistema (como cartão e senha em sistemas financeiros).
•  Compartilhamento mínimo: os mecanismos adotados ​​pelos usuários
para compartilhar informações são fontes potenciais de problemas de
segurança, pois podem permitir o fluxo imprevisto de informações en-
tre os usuários. Como resultado, o uso de mecanismos compartilhados
deve ser minimizado, principalmente quando se trata de áreas de me-
mória compartilhada. Por exemplo, se uma funcionalidade específica do
sistema operacional puder ser implementada como uma função de uma
biblioteca ou como uma chamada ao núcleo, o último método deve ser
escolhido porque requer menos compartilhamento.
•  Projeto aberto: a segurança do mecanismo de defesa não deve de-
pender da ignorância dos atacantes. Em vez disso, o projeto deve ser
aberto ao público e contar apenas com o sigilo de um pequeno número
de itens, como listas de chaves secretas ou senhas criptografadas. Um
projeto aberto também permite que terceiros independentes avaliem o
sistema, garantindo ainda mais a segurança.
•  Proteção adequada: cada recurso de computador deve ter um nível
de proteção consistente com seu valor intrínseco. Por exemplo, o nível
de segurança exigido por um provedor de serviços da web para ser-
viços financeiros é muito diferente daquele de um terminal público de
acesso à internet.
•  Usabilidade: a utilização de mecanismos de segurança deve ser sim-
ples e intuitiva, caso contrário, os usuários evitariam usá-los.
•  Eficiência: os mecanismos de segurança devem ser eficazes ao usar
os recursos do computador para evitar prejudicar significativamente o
desempenho do sistema ou as atividades do usuário.
•  Elo mais fraco: a segurança de um sistema é determinada pela segu-
rança de seu componente mais vulnerável, seja o sistema operacional,
os aplicativos, a conexão de rede ou o próprio usuário.

Esses princípios devem orientar desenvolvimento, configuração e operação


de qualquer sistema de computador de acordo com os requisitos de segurança. A
grande maioria dos problemas de segurança com os sistemas atuais são causados​​
por uma falha em aderir a esses princípios.

125
3 AMEAÇAS
Qualquer ação que coloque em risco os recursos de segurança do sistema,
conforme descrito na seção anterior, pode ser considerada uma ameaça. Alguns
exemplos de ameaças aos direitos básicos de propriedade relacionados à seguran-
ça podem ser:

•  Ameaças à confidencialidade: procedimento que pesquisa na me-


mória de outros processos, documentos de outros usuários e tráfego
de rede em áreas do sistema ou interfaces locais em busca de dados
confidenciais, como números de cartão de crédito, senhas secretas e
endereços de e-mail privados;
•  Ameaças à integridade: podem alterar as senhas de outros usuários,
instalar software, drivers ou componentes de hardware mal-intencio-
nados em um esforço para assumir o controle do sistema, roubar dados
ou impedir o acesso de outros usuários;
•  Ameaças à disponibilidade: um usuário pode reservar para si todos
os recursos do sistema, como memória, processador ou espaço em dis-
co, para evitar que outros usuários os usem.

Evidentemente, para qualquer ameaça potencial, deve haver estruturas de


sistema operacional que impeçam sua ocorrência, como restrições de acesso à
memória e às áreas de armazenamento, limites de uso de memória e processador e
verificações de autenticidade de drivers e outros softwares.
A probabilidade de uma ameaça se concretizar depende da existência e da
eficácia dos mecanismos implementados para preveni-la ou frustrá-la. Enquanto
houver fraquezas que permitam sua ocorrência, as ameaças podem se materializar.

4 VULNERABILIDADES
Uma vulnerabilidade é uma falha ou problema que pode ser usado para vio-
lar os recursos de segurança de um software ou sistema, presente em sua especi-
ficação, implementação, configuração ou operação. Alguns exemplos de vulnera-
bilidades são:

•  Um erro de programação no serviço de compartilhamento de do-


cumentos que permite que usuários de fora da área acessem docu-
mentos diferentes dos compartilhados;
•  Uma conta de usuário sem senha ou com senha predefinida pelo
fabricante que permite o acesso de usuários não autorizados ao siste-
ma;

126
•  A ausência de limites de espaço em disco, permitindo que um único
usuário reivindique todo o espaço disponível para si, impedindo que ou-
tros usuários usem o sistema.

A grande maioria das vulnerabilidades são causadas por erros de progra-


mação, por exemplo, não verificar a veracidade dos dados recebidos do usuário
ou da rede. Em um exemplo clássico, o servidor de processo Unix para impressão
de lpd pode ser instruído a imprimir um documento e depois continuar apagando-
-o, o que é útil para imprimir documentos temporários. Esse procedimento requer
permissões administrativas, pois precisa acessar a porta de entrada/saída do im-
pressor, que lhe dá acesso a todos os arquivos do sistema. Devido a um erro de
programação, uma versão anterior do processo lpd não verificou corretamente as
permissões do usuário sobre o documento a ser impresso; como resultado, um
usuário mal-intencionado pode solicitar a impressão (e nomeação) de documentos
do sistema.
Se a área de buffer da memória contiver código executável, o processo po-
derá encontrar erros de execução e terminar. O pior cenário é quando os dados a
serem gravados no buffer são retirados do terminal ou recebidos por uma rede; se
o invasor estiver ciente de como a memória do processo está organizada, ele pode
escrever instruções que fariam com que o processo se comportasse de maneira
diferente ou terminasse completamente. Um vazamento de buffer pode derrubar
o sistema ou fornecer acesso não autorizado a recursos se o buffer estiver dentro
do núcleo, como é o caso de drivers e protocolos de rede TCP/IP. Um bom exemplo
é o conhecido Ping of Death, no qual um pacote de rede usando o protocolo ICMP
é um dado específico que pode derrubar computadores conectados à rede local.
Junto com os erros de buffer e pilha, há vários outros erros de programa-
ção e configuração que podem levar a vulnerabilidades, como o uso descuidado de
strings de formatação para operações de entrada/saída em linguagens C e C++ e
condições conflitantes para lidar com arquivos compartilhados.

5 CONTROLE DE ACESSO
O controle de acesso em um sistema de computador envolve a avaliação de
cada solicitação de acesso de um usuário que foi autenticado para usar um recurso
ou que recebeu acesso do sistema para determinar se essa solicitação deve ser
concedida ou negada. Praticamente todos os recursos operacionais, como docu-
mentos, áreas de memória, computadores de semáforo, portas de rede, dispositi-
vos de entrada/saída, dentre outros, estão sujeitos a controles de acesso. Alguns
conceitos-chave, inclusive como políticas, modelos e mecanismos, são necessá-
rios para entender o controle de acesso, os quais veremos adiante.

127
É costume dividir as entidades do sistema em dois grupos no controle de
acesso: sujeitos e objetos. Todas as entidades que desempenham um papel ativo
no sistema, como processos, threads ou transações, são consideradas sujeitos.
Normalmente, um sujeito opera em nome de um usuário, que pode ser um huma-
no ou outro sistema de computador externo. Objetos são as entidades passivas
que os sujeitos utilizam, como documentos, espaços de memória ou registros de
bancos de dados. Em algumas situações, um sujeito pode ser percebido por outro
sujeito como um objeto (por exemplo, quando um sujeito deve enviar uma mensa-
gem a outro sujeito). Tanto os assuntos quanto os objetos podem ser organizados
em grupos e hierarquias para facilitar o gerenciamento da segurança.

5.1 POLÍTICAS, MODELOS E MECANISMOS DE


CONTROLE DE ACESSO
Uma visão abstrata das possibilidades de usuários do sistema (sujeitos)
acessarem recursos (objetos) é uma política de controle de acesso. Essa política
consiste essencialmente em um conjunto de regras que descrevem os recursos
que podem ser acessados pelos
​​ usuários, bem como quaisquer condições que
possam ser necessárias para fornecer cada acesso. Por exemplo, as diretrizes se-
guintes podem fazer parte da política de segurança de um sistema de informações
médicas:

•  Os profissionais médicos podem falar com os recursos prontos de seus


pacientes;
•  Enquanto seus pacientes estão hospitalizados, os médicos podem mu-
dar os previsíveis de seus pacientes;
•  O supervisor geral poderá falar com os prontuários de cada paciente;
•  Os enfermeiros só podem consultar as listas de prontidão dos doentes
da sua secção e apenas durante os seus turnos agendados;
•  A assistência não pode consultar indivíduos imediatos;
•  Os prontuários dos pacientes de planos de saúde privados podem ser
consultados pelo responsável pelo plano de saúde designado pelo hos-
pital;
•  Os pacientes podem consultar seus próprios médicos (não aceitando
mais de 30 pacientes simultaneamente).

As autorizações são regras ou definições individuais que compõem uma


política. Uma política de controle de acesso pode ter autorizações com base em
identidades (como sujeitos e objetos) ou outras características (como idade, sexo,
tipo, preço etc.). As autorizações podem ser concedidas individualmente a sujeitos
128
ou coletivamente a grupos; podem ser positivas (permitindo acesso) ou negativas
(negando acesso); podem ser com base em condições externas (como o tempo ou
a carga do sistema). Além da política que rege o acesso aos objetos, também deve
ser estabelecida uma política que rege as mudanças administrativas nas regras do
sistema.
O conjunto de autorizações para uma política deve ser abrangente, contem-
plando todos os potenciais pontos de acesso, e consistente, sem regras conflitantes
entre si (por exemplo, uma regra que permita um acesso e outra que negue esse
mesmo acesso). Além disso, todas as decisões sobre políticas devem se esforçar
para manter o princípio do privilégio mínimo, segundo o qual um usuário nunca
deve receber mais permissões do que o necessário para concluir suas tarefas.
As políticas de controle de acesso estabelecem, em termos amplos, como
os objetos do sistema podem ser acessados pelo ​​ sujeito. Existem várias maneiras
de definir uma política, a qual pode ser agrupada em quatro categorias principais:
políticas de definição, políticas obrigatórias, políticas baseadas em domínios e polí-
ticas baseadas em documentos.
Finalmente, os mecanismos de controle de acesso são as estruturas neces-
sárias para implementar um determinado modelo em um sistema do mundo real.
Como se sabe, é crucial manter políticas e mecanismos separados para permitir
a substituição ou modificação das políticas de controle de acesso dentro de um
sistema sem incorrer em custos adicionais para isso. Como resultado, o mecanis-
mo de controle de acesso ideal precisa ser capaz de suportar qualquer política de
controle de acesso.

5.1.1 POLÍTICAS BASEADAS EM PAPÉIS


A administração adequada das políticas de controle de acesso é um dos
principais problemas de segurança dos sistemas computacionais. As políticas de
MAC (Media Access Control ou Controle de Acesso de Mídia) geralmente são consi-
deradas pouco flexíveis, no entanto, gerenciar autorizações à medida que os usuá-
rios mudam de emprego e assumem novas responsabilidades ou à medida que
novos usuários ingressam na empresa e outros usuários saem pode ser uma tarefa
muito difícil e sujeita a erros.
Cada usuário do sistema tem um conjunto definido de obrigações que pode
aceitar. O usuário escolhe os aplicativos que deseja ativar durante sua sessão no
sistema (muitas vezes no início) e recebe as autorizações necessárias, válidas até
desativar os aplicativos ou encerrar sua sessão. Como resultado, um usuário com
acesso pode ativar os formulários “professor” ou “aluno”, dependendo do que de-
seja fazer com o sistema.

129
Os papéis permitem que os usuários removam suas permissões. Como re-
sultado, uma coleção de artigos adequadamente definida é geralmente estável;
tudo o que resta para a administração fazer é atribuir a cada usuário os papéis a
que tem direito.

Figura 1 – Políticas baseadas em papéis

Fonte: Maziero (2014, p. 283)

Existem inúmeros modelos para colocar em prática as políticas baseadas


em papéis. Por exemplo, no modelo hierárquico RBAC (Role-based Access Con-
trol, ou Controle de Acesso Baseado na Função), os papéis são organizados em
uma hierarquia na qual os papéis superiores transmitem as permissões dos papéis
inferiores. É possível especificar limitações na ativação de documentos no modelo
RBAC com restrições, como o número máximo de usuários que podem ativar uma
determinada função simultaneamente ou a designação de dois documentos como
conflitantes e não permitidos para ativação simultânea pelo mesmo usuário.

5.1.2 CONTROLE DE ACESSO EM UNIX


Um determinado documento em Unix pode ser acessado em uma listagem
para leitura e escrita por seu dono (usuário maziero com permissões rw-), para
leitura por membros do grupo prof com permissões r— e para leitura por todos os
outros usuários do sistema com permissões r—. O documento Hello-Unix, no entan-

130
to, só é acessível para leitura, escrita e execução pelo proprietário do documento
(permissões rwx), para leitura e execução por usuários do grupo prof (permissões
r-x); não é acessível para outros usuários (permissões — -). No caso de diretórios,
o alvará de leitura autoriza a listagem da diretoria, o alvará de escrita autoriza sua
modificação (criação, remoção ou substituição de documentos ou subdiretórios) e
o alvará de execução autoriza o uso dessa direção como um local de trabalho ou
como um componente de um caminho.

Figura 2 – Estrutura genérica de uma infraestrutura de controle de acesso

Fonte: Maziero (2014, p. 285)

É vital observar que os controles de acesso geralmente só são implementa-


dos após a abertura de um artigo para permitir a criação de sua descrição de me-
mória. Isso significa que, mesmo que as permissões do arquivo sejam alteradas para
impedir esse acesso, uma vez que um arquivo tenha sido aberto por um processo,
esse processo continuará tendo acesso ao arquivo enquanto estiver aberto. Como
a verificação das permissões de acesso para cada operação de leitura ou escrita

131
teria uma influência negativa significativa no desempenho do sistema, o controle
contínuo de acesso a documentos não é muito utilizado em sistemas operacionais.

5.1.3 CONTROLE DE ACESSO EM WINDOWS


Os sistemas operacionais Windows construídos no kernel NT (NT, 2000, XP,
Vista e sucessores) possuem mecanismos de controle de acesso altamente so-
fisticados. Cada assunto (computador, usuário, grupo ou domínio) em um sistema
Windows é identificado exclusivamente por um ID de segurança (SID – Security
Identifier). Cada assunto do sistema está vinculado a um token de acesso que é
criado quando o usuário correspondente ou sistema externo se autentica no sis-
tema. O LSASS (Local Security Authority Subsystem) gerencia a autenticação e
o início da sessão de um usuário. Ele cria os primeiros processos e os vincula ao
token de acesso criado para aquele usuário. Esse token é normalmente tratado por
processos-filho até que a sessão do usuário termine. Ele contém o SID do usuário,
os grupos aos quais ele pertence, os privilégios vinculados a ele e outros detalhes.
Os privilégios podem ser usados ​​para realizar operações genéricas que não reque-
rem um recurso específico, incluindo reiniciar um computador, instalar um driver ou
limpar um processo.
Por outro lado, cada componente do sistema está vinculado a um descri-
tor de segurança (SD – Security Descriptor). Por exemplo, documentos e diretó-
rios, processos, dispositivos de impressão, serviços e chaves de registro são todos
considerados objetos. Uma descrição de segurança inclui o proprietário e o grupo
principal do objeto, uma lista de controle de acesso ao sistema (SACL – System
ACL), uma lista de controle de acesso discricionário (DACL – ACL discricionária) e
algumas informações de controle.
Uma lista de regulamentos de controle de acesso na forma de ACEs (Ac-
cess Control Lists, ou Listas de Controle de Acesso) está contida no DACL (Access
Control Entries). Cada ACE possui um identificador de usuário ou grupo, um modo
de autorização positivo ou negativo e uma coleção de permissões (leitura, escrita,
edição, execução, remoção etc.) na forma de bitmap. Quando um assunto solicita
acesso a um recurso, o SRM (Security Reference Monitor) compara o token de
acesso do assunto com as entradas DACL do recurso para decidir se concede ou
nega o acesso. Podem surgir conflitos entre os ACEs, pois os sujeitos podem per-
tencer a mais de um grupo e os ACEs podem ser positivos ou negativos. Como
resultado, cada solicitação de acesso ao objeto desencadeia a ativação de um me-
canismo de resolução de conflitos.
A SACL especifica quais tipos de operações em um objeto devem ser re-
gistrados pelo sistema, que é usado principalmente para fins de auditoria. Embora
especifique quais ações sobre o objeto em questão devem ser registradas para
quais assuntos, a estrutura das ACEs de auditoria é idêntica à das ACEs da DACL.
132
Figura 3 – LIstas de controle de acesso no windows

Fonte: Maziero (2014, p. 288)

5.1.4 MUDANÇA DE PRIVILÉGIOS


Os processos de um sistema operacional geralmente estão sujeitos ao
usuário que os iniciou. Quando um novo processo é criado, ele herda as credenciais
de seu processo-pai, ou seja, seus identificadores de usuário e grupo. A maioria dos
mecanismos de controle de acesso usados ​​em sistemas operacionais atribui per-
missões aos processos com base em suas credenciais. Como resultado, cada novo
processo geralmente herda as mesmas permissões de seu processo-pai porque
compartilha suas credenciais.
O uso de privilégios fixos é apropriado para a operação do sistema, pois os
processos de cada usuário devem ter acesso apenas aos recursos que foram au-
torizados para aquele usuário, no entanto em algumas circunstâncias, esse meca-
nismo se mostra inadequado. Por exemplo, se um usuário precisar realizar tarefas
administrativas como instalar um novo programa, alterar uma configuração de rede
ou atualizar sua senha, alguns de seus processos precisam ter permissões para
executar as ações necessárias, como editar documentos de configuração do sis-
tema. Os sistemas operacionais atuais fornecem várias abordagens para resolver
esse problema:

•  usuários administrativos: os usuários com privilégios administrativos


são aqueles que possuem permissões administrativas anexadas às suas
sessões de trabalho. Isso permite que seus processos executem tarefas
administrativas, como instalar software ou alterar configurações. Essa

133
abordagem é usada em alguns sistemas operacionais com ampla apli-
cação. Vários tipos de usuários administrativos são definidos por algu-
mas implementações, cada um com um conjunto único de privilégios,
como a capacidade de acessar dispositivos externos, iniciar máquinas
virtuais, reiniciar o sistema etc. Um software malicioso executado por
um usuário administrativo terá acesso a todas as suas permissões;
•  permissões temporárias: é uma permissão concedida sob demanda
a determinados processos de usuário para realizar ações administrati-
vas; essas permissões podem ser revogadas pelo processo após a con-
clusão das ações. As permissões podem estar conectadas à papelada
administrativa, que seria ativada quando o usuário precisasse delas.
Essa é a estratégia empregada pela infraestrutura UAC (User Access
Control), na qual um usuário administrativo inicia sua sessão de traba-
lho como usuário regular e só ativa sua função administrativa quando é
necessário realizar uma ação administrativa, desativando-a imediata-
mente após a ação estar completa. Um procedimento de reautentica-
ção pode ser afetado pela ativação da função administrativa;
•  alteração de credenciais: permite que alguns processos de usuá-
rios alterem identidades, assumindo as identidades de outros usuários
que possuem as permissões necessárias para realizar a ação desejada.
Essa é uma variação da concessão de permissões temporárias. Os sina-
lizadores setuid e setgid do Unix são o exemplo mais conhecido dessa
abordagem em uso;
•  monitores: os processos definidos com autoridade administrativa são
chamados de monitores ou supervisores e recebem solicitações de
ações administrativas de processos não privilegiados por meio de uma
API previamente definida; solicitações de processos convencionais são
validadas e atendidas. Essa abordagem, conhecida como separação de
privilégios, também é usada na infraestrutura PolicyKit, que é usada
para autorizar tarefas administrativas em ambientes Linux de desktop.

IMPORTANTE
Ao proteger o sistema operacional, você deixa o ambiente estável e ge-
rencia o acesso a recursos e o acesso externo ao ambiente. A segurança
física do sistema é crucial. As ameaças podem ter origem on-line, mas
também podem ter manifestações físicas.

134
RESUMO DO TÓPICO 1

Neste tópico, você aprendeu:

• Ameaças, vulnerabilidades e princípios de segurança.


• Controle de acesso e políticas, modelos e mecanismos de controle de acesso.
• Políticas baseadas em papéis e privilégios.
• Controle de acesso em Unix e Windows.

135
AUTOATIVIDADE

1. Algumas propriedades fundamentais de um sistema de computador


podem ser usadas para expressar sua segurança. Com base no enten-
dimento dessas informações, assinale a alternativa CORRETA acerca da
confidencialidade:

a. ( ) Os recursos do sistema só podem ser alterados ou destruídos


por usuários autorizados a realizar tais operações.
b. ( ) Todas as entidades do sistema são autênticas e genuínas; em
outras palavras, os dados associados a essas entidades são pre-
cisos e correspondem às informações sobre o mundo real que
elas representam, como identidades de usuários e fonte de dados
de um arquivo.
c. ( ) Os recursos devem ser acessíveis a usuários que tenham o
direito de usá-los a qualquer momento.
d. ( ) Somente usuários devidamente autorizados podem consultar
os recursos do sistema.

2. Algumas propriedades fundamentais de um sistema de computador po-


dem ser usadas para expressar sua segurança. Baseado no entendimen-
to dessas informações, assinale a alternativa CORRETA acerca da inte-
gridade:

a. ( ) Os recursos do sistema só podem ser alterados ou destruídos


por usuários autorizados a realizar tais operações.
b. ( ) Somente usuários devidamente autorizados podem consultar
os recursos do sistema.
c. ( ) Os recursos devem ser acessíveis a usuários que tenham o
direito de usá-los a qualquer momento.
d. ( ) Todas as entidades do sistema são autênticas e genuínas; em
outras palavras, os dados associados a essas entidades são pre-
cisos e correspondem às informações sobre o mundo real que
elas representam, como identidades de usuários e fonte de dados
de um arquivo.

3. Algumas propriedades fundamentais de um sistema de computador


podem ser usadas para expressar sua segurança. Com base no enten-
dimento dessas informações, assinale a alternativa CORRETA acerca da
disponibilidade:

136
a. ( ) Somente usuários devidamente autorizados podem consultar
os recursos do sistema.
b. ( ) Os recursos devem ser acessíveis a usuários que tenham o
direito de usá-los a qualquer momento.
c. ( ) Os recursos devem ser acessíveis a usuários que tenham o
direito de usá-los a qualquer momento.
d. ( ) Os recursos devem ser acessíveis a usuários que tenham o
direito de usá-los a qualquer momento.

4. Podemos observar que, além das técnicas padrão de engenharia de


software para a criação de sistemas corretos, um conjunto de preceitos
específicos relacionados ao projeto do sistema, bem como ao compor-
tamento do usuário e do invasor, possibilitam o direcionamento do de-
senvolvimento de sistemas de computador seguros. Disserte acerca dos
conceitos que envolvem os privilégios mínimos.
5. Podemos observar que, além das técnicas padrão de engenharia de
software para a criação de sistemas corretos, um conjunto de preceitos
específicos relacionados ao projeto do sistema, bem como ao compor-
tamento do usuário e do invasor, possibilitam o direcionamento do de-
senvolvimento de sistemas de computador seguros. Disserte acerca dos
conceitos que envolvem a segurança padrão.

137
TÓPICO 2

VIRTUALIZAÇÃO
DE SISTEMAS
OPERACIONAIS
1 INTRODUÇÃO
Um número crescente de pesquisadores, fabricantes de hardware/softwa-
re, administradores de sistema e usuários avançados estão prestando muita aten-
ção às tecnologias que virtualizam o ambiente no qual aplicativos ou plataformas
de hardware são executados. Os avanços mais recentes nesse campo permitem o
uso de máquinas virtuais para a mais ampla gama de objetivos, incluindo seguran-
ça, compatibilidade de aplicativos legados e consolidação de servidores.
Assim, neste tópico, abordaremos conceitos fundamentais, projetos arqui-
tetônicos e implementações de ambientes de trabalho virtuais – como máquinas
virtuais, emuladores e contêineres.

2 UM BREVE HISTÓRICO
A ideia de uma máquina virtual não é nova. Os primeiros passos na cria-
ção de ambientes de máquinas virtuais foram dados na década de 1960, quando a
IBM desenvolveu o sistema operacional experimental M44/44X. A partir dele, essa
empresa desenvolveu vários sistemas comerciais de suporte à virtualização, in-
cluindo o conhecido OS/370. Na época, a tendência predominante em sistemas
de computador era fornecer a cada usuário um ambiente monousuário completo,
completamente independente e desconectado dos ambientes dos outros usuários.
Os primeiros exemplos do mundo real do uso de máquinas virtuais para exe-
cutar aplicativos surgiram nesse momento e envolviam o ambiente UCSD p-Sys-
tem, no qual os programas Pascal são compilados para execução em uma abstra-
ção de hardware conhecida como P-Machine.
A popularidade de plataformas de hardware baratas como o PC na década
de 1980 tornou a virtualização menos significativa. Finalmente, fornecer a cada

138
usuário um computador completo era mais acessível, conveniente e versátil do que
investir em sistemas de grande escala, complicados e caros. Além disso, o hardwa-
re do PC apresentava baixo desempenho e oferecia suporte inadequado à virtuali-
zação, o que impedia o uso de ambientes virtuais nessas plataformas.
Com o aumento de desempenho e funcionalidades do hardware PC e o re-
torno da linguagem Java, no início dos anos 1990 o interesse pelas tecnologias de
virtualização voltou à tona. Atualmente, com soluções de virtualização vêm des-
pertando grande interesse do mercado de máquinas virtuais portáteis.

3 CONSTRUÇÃO DE MÁQUINAS VIRTUAIS


A virtualização consiste em reescrever uma ou mais interfaces do sistema
computacional para fornecer novas interfaces e, assim, possibilitar a execução de
sistemas operacionais ou aplicativos incompatíveis com as interfaces originais.
A construção de máquinas virtuais é muito mais complicada do que pode
parecer à primeira vista. Se os conjuntos de instruções (ISA) para os sistemas reais
e virtuais forem diferentes, é necessário usar as instruções da máquina real para
imitar as da máquina virtual. Além disso, deve-se traduzir recursos de hardwa-
re virtual (periféricos oferecidos ao sistema convidado) em recursos de hardware
reais (periféricos reais).
Por fim, se os sistemas operacionais dos mundos virtual e real forem dife-
rentes, pode ser necessário mapear as chamadas de sistema geradas pelos aplica-
tivos do sistema que está sendo usado para chamadas de sistema corresponden-
tes no mundo real.
A partir de agora, iremos discutir o conceito formal de virtualização, seguido
das principais técnicas envolvidas na construção de máquinas virtuais. Acompa-
nhe.

3.1 DEFINIÇÃO DE MÁQUINA VIRTUAL


O hipervisor deve atender a alguns requisitos fundamentais para operar de
forma correta e eficaz. Por exemplo, ele deve fornecer um ambiente logicamente
idêntico para os programas a serem executados. Na pior das hipóteses, os pro-
gramas executados em uma máquina virtual devem apresentar pequenas degra-
dações de desempenho. Além disso, o hipervisor deve ter total controle sobre os
recursos do sistema de tempo real (sistema hospedeiro). Esses requisitos levaram
ao estabelecimento das seguintes características para um hipervisor ideal:
Equivalência: um hipervisor oferece um ambiente de trabalho quase idên-
tico ao da máquina original genuína. Todo programa executado em uma máquina

139
virtual deve se comportar exatamente da mesma maneira como se estivesse sen-
do executado em uma máquina física; exceções podem surgir apenas de diferen-
ças nos recursos disponíveis (memória, disco, dentre outros.), nas dependências de
tempo e na presença de dispositivos de entrada/saída necessários para o aplica-
tivo;

•  Controle sobre os recursos: o hipervisor deve ter controle total so-


bre os recursos da máquina física. Nenhum programa em execução na
máquina virtual tem permissão para acessar recursos que não tenham
sido especificamente atribuídos a ela pelo hipervisor, que deve atuar
como intermediário para todos os acessos. Além disso, o hipervisor tem
a capacidade de retirar quaisquer recursos que já tenham sido alocados
para a máquina virtual;
•  Eficiência: uma grande parte das instruções do processador virtual
(processador fornecido pelo hipervisor) deve ser executada diretamen-
te pelo processador real da máquina sem a necessidade do envolvimen-
to do hipervisor. As instruções da máquina virtual que não podem ser
executadas por um processador real devem ser traduzidas em ações
equivalentes no processador real pelo hipervisor. Instruções simples
que não interferem em outras máquinas virtuais ou aplicativos podem
ser executadas diretamente no processador físico.

Além dessas três propriedades fundamentais, as propriedades derivadas


são frequentemente vinculadas a hipervisores. Vejamos:

•  Isolamento: os aplicativos dentro de uma máquina virtual não conse-


guem se comunicar diretamente com outras máquinas virtuais, o hiper-
visor ou um sistema de hospedagem do mundo real. Todas as intera-
ções entre entidades dentro de uma máquina virtual e o mundo externo
devem ser mediadas pelo hipervisor;
•  Recursividade: alguns sistemas de máquina virtual também exibem
essa propriedade. Deve ser possível executar um hipervisor dentro de
uma máquina virtual para criar um novo nível de máquinas virtuais.
Nesse caso, a máquina genuína é normalmente chamada de “máquina
de nível 0”;
•  Inspeção: o hipervisor tem acesso e controle sobre todas as informa-
ções internas do estado da máquina, como registros do processador,
conteúdo da memória, eventos, dentre outros.

Essas características fundamentais definem um hipervisor ideal, que nem


sempre pode ser construído em plataformas de hardware existentes.

140
Para entender mais claramente as implicações dessa teoria, os seguintes
conceitos devem ser definidos:

•  Computador convencional de terceira geração: qualquer sistema


de computação convencional que siga os princípios de arquitetura de
Von Neumann e suporte memória virtual, bem como dois modos de
operação para o processador (usuário e privilégios);
•  instruções sensatas: aquelas que permitem que o processador, ou os
registradores que acompanharam o estado atual da execução na má-
quina física, sejam consultados ou alterados;
•  instruções com um escopo limitado: acessíveis apenas por códigos
executados em um nível restrito (um “código núcleo”). Se um código
não privilegiado tentar executar uma instrução restrita, uma exceção
(interrupção) deve ser gerada, ativando um esquema de tratamento
previamente especificado pelo núcleo do sistema real.

De acordo com essa teoria, toda instrução sensata também deve ser prote-
gida. Como resultado, ocorrerá uma interrupção quando uma instrução sensível for
executada por um programa não autorizado (como uma rede confiável ou aplicativo
confiável). Essa interrupção pode ser utilizada para ativar uma rotina de interpre-
tação dentro do hipervisor que irá imitar o efeito da instrução sensível (ou, dito
de outra forma, interpretá-la), dependendo do ambiente em que sua execução foi
solicitada (uma máquina virtual ou um hipervisor). Naturalmente, quanto mais ins-
truções sensatas houver, mais interpretação de código precisará ser feita e menos
eficaz será a máquina virtual.
Quando um programa é carregado na memória, um hipervisor analisa seu
código-fonte e substitui instruções confidenciais por rotinas que o hipervisor inter-
preta. Isso adiciona mais tempo ao lançamento de programas, mas torna possível
a virtualização. Outra técnica para resolver o problema é a virtualização, que se
baseia em reescrever uma parte do sistema convidada para evitar o uso dessas
instruções confidenciais. Ambas as técnicas serão discutidas mais adiante.

3.2 TÉCNICAS DE VIRTUALIZAÇÃO


A criação de hipervisores exige a definição de algumas estratégias de vir-
tualização. As estratégias mais populares incluem a emulação de hardware com-
pleta, a virtualização da interface do usuário, a tradução dinâmica de código e a
para-virtualização. Além disso, certas técnicas complementares são usadas para
melhorar o desempenho dos sistemas de máquinas virtuais.

141
3.2.1 EMULAÇÃO COMPLETA
Nessa abordagem, cada interface de hardware – incluindo as instruções do
processador, memória e dispositivos periféricos – é virtualizada. Isso permite, se
necessário, fornecer ao sistema operacional uma interface de hardware diferente
daquela fornecida pela máquina real que vem a seguir. O custo da virtualização
pode ser muito alto porque cada comando enviado pelo sistema escolhido deve ser
examinado e traduzido em um ou mais comandos que tenham o mesmo significa-
do em um computador real, no entanto essa abordagem permite que os sistemas
operacionais sejam operados em plataformas diferentes daquela para a qual foram
destinados, sem a necessidade de modificações.
Exemplos de abordagens típicas de emulação completa incluem sistemas
de máquina virtual como QEMU, que oferece um processador Intel Pentium II para o
sistema solicitante, Microsoft VirtualPC para MAC, que permite que o Windows seja
executado em uma plataforma de hardware PowerPC, e Hercules, que emula um
IBM System/390 em um PC convencional baseado em Intel.
Um exemplo único de emulação completa são os hipervisores baseados em
hardware (hipervisores coprojetados). Um hipervisor modificado é visto como um
componente integral do hardware e implementa a visão dos sistemas operacio-
nais e de aplicativos da plataforma da interface do sistema (ISA), no entanto as
instruções combinadas do processador real são acessíveis apenas ao hipervisor,
que lida com as instruções executadas pelos sistemas convidados usando técnicas
de tradução dinâmica. O hipervisor reside em uma área de memória separada da
memória principal. Um exemplo típico desse tipo de sistema é o processador Trans-
meta Crusoe/Eceon, que aceita instruções no formato Intel de 32 bits e as converte
internamente em uma coleção de instruções VLIW (Very Large Instruction Word).

3.3 APLICAÇÕES DA VIRTUALIZAÇÃO


A capacidade de conectar componentes do sistema com diferentes interfa-
ces graças à virtualização abre uma ampla gama de aplicações potenciais.
A portabilidade de aplicativos binários é uma área de virtualização bem co-
nhecida. Esse uso de máquinas virtuais começou na década de 1970 com o com-
pilador UCSD Pascal. Esse compilador converteu o código-fonte Pascal em código
P binário para uma máquina virtual chamada P-Machine. A execução do código bi-
nário foi então tratada por uma implementação da P-Machine na máquina de des-
tino. Carregar a implementação da P-Machine era tudo o que era necessário para
rodar a aplicação em outra plataforma. Esse padrão foi posteriormente adotado
pelas linguagens Java, C#, Perl e Python, dentre outras, nas quais o código-fonte
é traduzido em bytecode específico para uma máquina virtual. Como resultado, um

142
aplicativo Java que foi compilado em bytecode pode ser executado em qualquer
plataforma que tenha uma implementação de Java Virtual Machine (JVM).
Outro uso comum da virtualização é o compartilhamento de hardware, que
possibilita executar vários sistemas operacionais ou instâncias do mesmo siste-
ma operacional simultaneamente na mesma plataforma de hardware. Uma área
de aplicação para essa possibilidade é a consolidação de servidores, que envolve a
combinação de vários servidores de rede (como web, e-mail, proxy, bancos de da-
dos etc.) em um computador. Em vez de instalar vários computadores fisicamente
isolados uns dos outros para hospedar cada serviço, é possível instalar um único
computador com mais poder de processamento para dar suporte a várias máqui-
nas virtuais, cada uma executando um sistema operacional diferente e fornecendo
seu próprio serviço. Essa abordagem visa fazer melhor uso do hardware já instala-
do: como a alocação de recursos entre os sistemas convidados pode ser ajustada
dinamicamente, mais recursos podem ser alocados para serviços com maior de-
manda a qualquer momento.
Além desses aplicativos, vários outros usos potenciais para ambientes de
máquina virtual também podem ser descobertos, incluindo os seguintes:

•  Suporte para aplicações legais: é possível manter ambientes virtuais


para execução de aplicações legais sem ter à mão computadores es-
peciais.
•  Experimentação com redes e sistemas distribuídos: é possível
criar uma rede de máquinas virtuais que se comunicam entre si em
um único computador host usando protocolos como TCP/IP. Isso torna
possível desenvolver sistemas distribuídos e serviços de rede sem a ne-
cessidade de uma rede real, o que é particularmente intrigante do ponto
de vista didático e experimental.
•  Educação: nos cursos de ciências de redes e sistemas, os alunos de-
vem ter a opção de alterar a configuração da máquina para realizar seus
experimentos. Para os gestores de laboratórios educacionais, essa pos-
sibilidade é uma verdadeira “dor de cabeça”. Mesmo não tendo acesso
às configurações da máquina real, os alunos ainda podem iniciar máqui-
nas virtuais e ter controle total sobre elas.
•  Segurança: a propriedade de isolamento oferecida pelo hipervisor
torna essa abordagem útil para isolar domínios, usuários e/ou aplicati-
vos não confiáveis. As máquinas de isolamento de sistema operacional
virtual foram desenvolvidas especificamente para isolar subsistemas
particularmente problemáticos, como servidores da web, DNS e e-mail.
Também é possível usar máquinas virtuais como plataforma para a
execução de programas suspeitos, para avaliar como eles funcionam e
quais os efeitos que eles têm no sistema operacional alvo.
143
•  Software de baixo nível: o uso de máquinas de desenvolvimento vir-
tual para o desenvolvimento de software de baixo nível, como partes do
núcleo do sistema operacional, módulos e protocolos de rede, tem vá-
rios benefícios com o uso de máquinas Por exemplo, desenvolvimento
e teste podem ser feitos na mesma plataforma. Outra vantagem é que
instalar e iniciar um nó em uma máquina virtual leva menos tempo do
que em uma máquina física.

Finalmente, a execução em uma máquina virtual pode ser melhor moni-


torada e acompanhada do que a execução comparável em uma máquina física.
Quanto à tolerância a erros, muitos hipervisores oferecem suporte para pontos de
verificação ou a capacidade de salvar um estado interno de uma máquina virtual e
restaurá-lo posteriormente. Em caso de erros ou incidentes de segurança, a execu-
ção de uma máquina virtual pode retornar a um estado salvo anteriormente usando
pontos de verificação periódicos.

3.4 AMBIENTES DE MÁQUINAS VIRTUAIS


Esta seção fornece alguns exemplos de sistemas de máquinas virtuais
atuais em uso. Entre eles, estão sistemas virtuais e máquinas de aplicativos com
virtualização total ou parcial, bem como abordagens híbridas. Eles foram escolhidos
porque estavam entre as melhores representações de suas respectivas classes.
Atualmente, VMware é a máquina virtual mais utilizada para a plataforma
x86 graças à sua implementação completa da interface x86 para o sistema em
questão. Mesmo que essa interface seja incrivelmente genérica para o sistema
pretendido, ela acaba levando a um hipervisor mais sofisticado. Devido à possi-
bilidade de vários sistemas operacionais serem executados no mesmo hardware,
o hipervisor deve emular instruções específicas para representar com precisão
um processador virtual em cada máquina virtual, ao mesmo tempo em que utiliza
mecanismos de tradução dinâmica. Hoje, a VMware produz vários produtos com
hipervisores nativos e convidados:

•  Hipervisor convidado:
•  VMware Workstation: a primeira versão comercial da máquina virtual,
lançada em 1999 para ambientes desktop;
•  VMware Fusion: uma versão experimental para o sistema operacional
Mac OS com processadores Intel;
•  VMware Player: uma versão gratuita do VMware Workstation que
permite apenas a execução de máquinas virtuais desenvolvidas an-
teriormente em versões comerciais;

144
•  • Servidor VMWare: uma versão paga do VMware Workstation que
oferece diversos recursos;
•  Hipervisor nativo:
•  • VMware ESX Server: para servidores de grande capacidade, possui
um kernel proprietário chamado vmkernel e usa o Red Hat Linux para
fornecer outros serviços, como gerenciamento de usuários.

Quanto a JVM, é uma prática comum fornecer suporte à execução de uma


linguagem de programação por meio de uma máquina virtual. Um bom exemplo
dessa abordagem é visto na linguagem Java, que se mostrou a melhor escolha
para uso na internet, apesar de ter sido inicialmente destinada ao desenvolvimento
de pequenas aplicações e programas para controle de dispositivos eletrônicos. O
fato de que programas escritos em Java podem ser executados em praticamente
qualquer plataforma é que o torna tão atraente. A independência de um programa
Java de hardware e sistemas operacionais é causada pela virtualização. Quando
um programa Java é compilado, ele produz um código binário exclusivo para uma
máquina abstrata chamada “máquina virtual Java” – daí a sigla JVM (Java Virtual
Machine). A linguagem de máquina usada pela máquina virtual Java é conhecida
como bytecode Java e não corresponde a instruções de nenhum processador real.
Portanto, a máquina virtual deve interpretar todas as operações de bytecode e
executar cada uma delas usando as instruções relevantes da máquina do mundo
real.
O benefício mais significativo da abordagem usada pelo Java é a portabili-
dade do código executável; para que uma aplicação Java seja executada em uma
determinada plataforma, apenas a máquina virtual Java precisa estar presente ali
(na forma de um suporte de execução chamado JRE, ou Java Runtime Environ-
ment). Como resultado, a portabilidade dos programas Java depende exclusiva-
mente da portabilidade da máquina virtual Java real. O suporte à execução Java
pode ser conectado a um navegador da Web, permitindo que o código Java seja
vinculado a páginas da web na forma de pequenos aplicativos conhecidos como
“applets”, que são transportados junto com outros componentes da página da web
e executados localmente no navegador.

IMPORTANTE
A virtualização do sistema operacional é uma tecnologia que ganhou po-
pularidade. Seu principal objetivo é dividir os recursos de hardware para
que muitos sistemas operacionais (e aplicativos) possam ser executados
de forma isolada uns dos outros.

145
RESUMO DO TÓPICO 2

Neste tópico, você aprendeu:

• Conceitos básicos acerca de virtualização de sistemas operacionais;


• A virtualização consiste em reescrever uma ou mais interfaces do sistema com-
putacional para fornecer novas interfaces e, assim, possibilitar a execução de
sistemas operacionais ou aplicativos incompatíveis com as interfaces originais.
• conhecimentos acerca das aplicações da virtualização;
• conhecimentos sobre máquinas virtuais, como VMware, hipervisor e JVM.

146
AUTOATIVIDADE

1. Os pesquisadores americanos Gerald Popek (UCLA) e Robert Goldberg


(Harvard) definiram uma máquina virtual em 1974. O hipervisor deve
atender a alguns requisitos fundamentais para operar de forma correta e
eficaz. Com base no entendimento dessas informações, assinale a alter-
nativa CORRETA acerca da equivalência:

a. ( ) O hipervisor deve ter controle total sobre os recursos da má-


quina física. Nenhum programa em execução na máquina virtual
tem permissão para acessar recursos que não tenham sido espe-
cificamente atribuídos a ela pelo hipervisor, que deve atuar como
intermediário para todos os acessos.
b. ( ) Um hipervisor oferece um ambiente de trabalho quase idênti-
co ao da máquina original genuína. Todo programa executado em
uma máquina virtual deve se comportar exatamente da mesma
maneira como se estivesse sendo executado em uma máquina
física.
c. ( ) Uma grande parte das instruções do processador virtual (o
processador fornecido pelo hipervisor) deve ser executada dire-
tamente pelo processador real da máquina sem a necessidade do
envolvimento do hipervisor.
d. ( ) Os aplicativos dentro de uma máquina virtual não conseguem
se comunicar diretamente com outras máquinas virtuais, o hiper-
visor ou um sistema de hospedagem do mundo real.

2. Os pesquisadores americanos Gerald Popek (UCLA) e Robert Goldberg


(Harvard) definiram uma máquina virtual em 1974. O hipervisor deve
atender a alguns requisitos fundamentais para operar de forma correta e
eficaz. Com base no entendimento dessas informações, assinale a alter-
nativa CORRETA acerca do controle sobre recursos.

a. ( ) Um hipervisor oferece um ambiente de trabalho quase idênti-


co ao da máquina original genuína. Todo programa executado em
uma máquina virtual deve se comportar exatamente da mesma
maneira como se estivesse sendo executado em uma máquina
física.
b. ( ) Uma grande parte das instruções do processador virtual (o
processador fornecido pelo hipervisor) deve ser executada dire-
tamente pelo processador real da máquina sem a necessidade do
envolvimento do hipervisor.

147
c. ( ) O hipervisor deve ter controle total sobre os recursos da má-
quina física. Nenhum programa em execução na máquina virtual
tem permissão para acessar recursos que não tenham sido espe-
cificamente atribuídos a ela pelo hipervisor, que deve atuar como
intermediário para todos os acessos.
d. ( ) Os aplicativos dentro de uma máquina virtual não conseguem
se comunicar diretamente com outras máquinas virtuais, o hiper-
visor ou um sistema de hospedagem do mundo real.

3. Os pesquisadores americanos Gerald Popek (UCLA) e Robert Goldberg


(Harvard) definiram uma máquina virtual em 1974. O hipervisor deve
atender a alguns requisitos fundamentais para operar de forma correta
e eficaz. Com base no entendimento dessas informações, assinale a al-
ternativa CORRETA acerca da eficiência.

a. ( ) Uma grande parte das instruções do processador virtual (o


processador fornecido pelo hipervisor) deve ser executada dire-
tamente pelo processador real da máquina sem a necessidade do
envolvimento do hipervisor.
b. ( ) O hipervisor deve ter controle total sobre os recursos da má-
quina física. Nenhum programa em execução na máquina virtual
tem permissão para acessar recursos que não tenham sido espe-
cificamente atribuídos a ela pelo hipervisor, que deve atuar como
intermediário para todos os acessos.
c. ( ) Um hipervisor oferece um ambiente de trabalho quase idênti-
co ao da máquina original genuína. Todo programa executado em
uma máquina virtual deve se comportar exatamente da mesma
maneira como se estivesse sendo executado em uma máquina
física.
d. ( ) Os aplicativos dentro de uma máquina virtual não conseguem
se comunicar diretamente com outras máquinas virtuais, o hiper-
visor ou um sistema de hospedagem do mundo real.

4. Além das três propriedades fundamentais, a saber, equivalência, controle


sobre os recursos e eficiência, há mais três derivadas que são vinculadas
frequentemente a hipervisores. Disserte acerca dos conceitos que envol-
vem o isolamento.
5. 5 Além das três propriedades fundamentais, a saber, equivalência, con-
trole sobre os recursos e eficiência, há mais três derivadas que são vincu-
ladas frequentemente a hipervisores. Disserte acerca dos conceitos que
envolvem a recursividade.

148
TÓPICO 3

DEADLOCK,
SISTEMAS
NUMÉRICOS E
CONVERSÃO DE
BASES
1 INTRODUÇÃO
Existem inúmeros recursos em sistemas computacionais que são apropria-
dos para o uso de apenas um processo por vez, como impressoras, unidades de
fita e entradas nas tabelas internas do sistema. Haverá um impasse se dois ou mais
processos tentaram gravar simultaneamente no mesmo dispositivo de impressão.
Dessa forma, todos os sistemas operacionais devem ser capazes de garantir que
um processo tenha acesso exclusivo a determinados recursos, mesmo que apenas
temporariamente.
Em muitos casos, um processo requer acesso a vários recursos em vez de
apenas acesso exclusivo a um. Por exemplo, dois processos podem querer gravar
um documento obtido através de um scanner em um CD. Enquanto o processo
B, programado de forma diferente, está usando um gravador de CD, o processo
A está usando um scanner. Assim, o processo A solicita o uso do gravador de CD,
mas o pedido é negado até que o processo B o libere, no entanto o procedimento B
solicita o uso do scanner em vez de liberar o gravador de CD. Ambos os processos
estão atualmente bloqueados e assim permanecerão para sempre. Essa situação é
conhecida como deadlock.

149
2 DEFINIÇÃO DE DEADLOCK
Deadlock pode ser definido como um grupo de processos estará em uma
situação de deadlock se todos os processos dentro do grupo estiverem esperando
por um evento que somente outro processo dentro do grupo pode fazer ocorrer.
Para colocar de forma mais simples, podemos dizer que deadlock é uma fra-
se usada para descrever um problema que surge quando vários processos compe-
tem entre si. A ocorrência de deadlock depende das características de dois ou mais
programas distintos e dos processos individuais executados simultaneamente por
esses programas. Embora seja possível executar repetidamente esses processos
usando vários processos sem ocorrer um deadlock, basta um procedimento parti-
cularmente difícil para alcançar uma situação de deadlock.
Mesmo que não tenha nada a ver com computadores, podemos usar uma
situação de impasse para ajudar as pessoas a entenderem esse conceito. Em uma
estrada que só permite a passagem de um veículo, dois carros trafegam em dire-
ções opostas, um perseguindo o outro. Nessa situação, os dois se tornam incapa-
zes de continuar sua jornada.
Existem quatro condições para a ocorrência de deadlock:

•  Exclusão mútua: cada recurso está em uma de duas situações em um


determinado momento – associado a um único processo ou disponível;
•  Possibilidade e esperança: processos que, em um momento especí-
fico, ainda possuem recursos concedidos anteriormente podem preci-
sar de novos;
•  Não preempção: recursos concedidos anteriormente a um processo
não podem ser usados a
​​ pedido desse processo; em vez disso, eles
devem ser expressamente liberados pelo processo que os retém;
•  espera cíclica: deve haver uma cadeia circular de dois ou mais proces-
sos, cada um aguardando um recurso sendo usado pelo membro depois
deles na cadeia.

Para que haja uma paralisação, cada uma dessas circunstâncias deve se
manifestar ao mesmo tempo. Não haverá um impasse se uma dessas condições
não for verdadeira.
Qualquer sistema operacional pode enfrentar um impasse. Deadlock ocorre
quando dois ou mais processos estão esperando interminavelmente por um evento
que só pode acontecer em um dos processos que estão esperando. Existem várias
estratégias para lidar com deadlocks, por exemplo, detecção e recuperação ou pre-
venção de deadlocks. Uma das estratégias mais simples é ignorar a ocorrência de
deadlock; essa estratégia funciona se não houver realmente um impasse, mas para

150
determinar se as estratégias de tratamento de impasses devem ou não ser imple-
mentadas, é necessário analisar as necessidades do negócio e pesar os custos e
benefícios que podem produzir.

3 SISTEMAS DE NUMERAÇÃO
Na vida cotidiana, as pessoas se comunicam tanto do ponto de vista algé-
brico, usando o sistema decimal, quanto do ponto de vista alfabético, usando uma
linguagem específica. Semelhante a isso, o computador, por suas características
físicas, lida com o sistema binário de ambos os lados, empregando um conjunto de
códigos que possibilitam seu funcionamento impecável.
Os sistemas decimal e binário são estruturados com base nos mesmos prin-
cípios fundamentais. Por meio do uso do símbolo cadeia, tanto um quanto os outros
números são representados. Cada símbolo representa uma quantidade específica
de acordo com sua posição dentro da cadeia.
Por motivos técnicos, a maioria dos circuitos eletrônicos de computador são
projetados para reconhecer sinais elétricos digitais; como resultado, os métodos de
codificação interna devem ser realizados com base no sistema binário, permitindo a
representação de todos os tipos de informações e instruções que um computador
processa.
Do ponto de vista lógico, em circuitos eletrônicos, a presença de tensão em
um determinado ponto do circuito é representada pela álgebra 1, e a ausência de
tensão é representada pela álgebra 0.

3.1 SISTEMA DECIMAL


O ser humano vem anotando pontos usando o sistema decimal há muitos
anos. O sistema decimal desenvolveu-se a partir do sistema indo-árabe, provavel-
mente como resultado do uso dos 12 dedos de cada mão para marcar a pontuação.
O sistema decimal é um dos chamados sistemas posicionais, empregando
uma coleção de símbolos cujos significados são determinados principalmente por
sua relação com o símbolo utilizado na vírgula, conhecido como vírgula decimal,
que, na ausência de um, está implicitamente localizado para a direita.
O número base do sistema decimal é 10, que corresponde ao número de
símbolos usados ​​para representar quantidades. Esses símbolos, também conheci-
dos como dígitos, são:

0123456789

151
Uma quantidade específica, referida como um número decimal, pode ser
expressa da seguinte forma:

N° = (dígito)i x (base)i

Em que:

•  base = 10
•  i = posição em relação à vírgula
•  d = número de dígitos à direita da vírgula
•  n = número de dígitos à esquerda da vírgula
•  dígito = cada um dos dígitos que compõem o número

Vejamos um exemplo em que temos a representação das quantidades 1992


e 3,1416:

1992 = 1 x 103 + 1 x 102 + 1 x 101 + 2 x 100


3,1416 = 3 x 100 + 1 x 10-1 + 4 x 10-2 + 1 x 10-3 + 6 x 10-4

3.2 SISTEMA BINÁRIO


O sistema numérico binário ou de base 2 é um sistema numérico no qual to-
das as quantidades são representadas por dois números, 0 e 1. Como os computa-
dores digitais funcionam com dois níveis de tensão internos, seu sistema numérico
natural é o sistema binário.
Nesse sistema, utilizamos os dígitos 1 e 0 para a representação de suas
quantidades. Desse modo, cada dígito de um determinado número é chamado de
“bit” (uma contração de “binary digit”).
As nomenclaturas utilizadas são:

•  quatro bits é quarteto (exemplo: 1002);


•  oito bits é octeto ou byte (exemplo: 10010111);
•  conjunto de 1024 bytes é kilobyte ou K;
•  conjunto de 1024 kilobytes é megabyte;
•  conjunto de 1024 megabytes é gigabyte.

152
3.3 SISTEMA OCTAL
É um sistema de numeração com base de 8 símbolos, ou seja, são usados
8 símbolos para representar quantidade. Esses símbolos representam algarismos
árabes em todo o Oriente. O sistema octal foi amplamente utilizado na tecnologia
da informação como uma alternativa mais compacta ao sistema binário na progra-
mação de linguagem de máquina. Os símbolos desse sistema são:

01234567

Esse sistema também é posicional, e a posição de seus algarismos é de-


terminada em relação ao ponto decimal. Caso esta não ocorra, supõe-se que está
colocada implicitamente à direita do número.
O processo para realizarmos a aritmética do sistema octal é muito parecido
com os sistemas binários e decimais.
Neste exemplo, observamos um determinado número (decimal) sendo re-
presentado pelo seu equivalente em octal:

4 x 83 + 7 x 82 + 0 x 81 + 1 x 80
2048 + 448 + 0 + 1 = 2497

3.4 SISTEMA HEXADECIMAL


É um sistema de representação numérica que usa 16 símbolos para repre-
sentar números na base 16. Observe:

0123456789ABCDEF

Vejamos, no Quadro 1, a representação:

Quadro 1 – Representação do sistema hexadecimal

SÍMBOLO VALOR ABSOLUTO

A 10

B 11

C 12

D 13

153
E 14

F 15

Fonte: O autor

Neste exemplo, podemos observar a representação de um número em he-


xadecimal:

2 x 162 + C x 81 + A x 80
2 x 162 + 12 x 81 + 10 x 80
512 + 192 + 10 = 714

3.5 CONVERSÃO ENTRE SISTEMAS DE


NUMERAÇÃO
O nome para a transformação de uma quantidade específica em um sistema
numérico em seu equivalente em outro sistema é “conversão”.

3.5.1 CONVERSÃO DECIMAL-BINÁRIO


Para converter números decimais em números binários, divida o número
decimal por 2 e multiplique os resultados até que o quociente em uma das divisões
seja igual a 0. A sequência de todas as pausas obtidas na ordem inversa é o número
inicial expresso no sistema binário. Vejamos a conversão do número decimal 10
para o seu equivalente em binário:

154
Figura 4 – Conversão do número 10 em binário

10(10) = 1010(2)
Fonte: O autor

3.5.2 CONVERSÃO BINÁRIO-DECIMAL


O processo para conversão de sistema binário para decimal consiste da
aplicação direta do Teorema Fundamental de Numeração (TFN). Vejamos:

... X4 x 104 + X3 x 103 + X2 x 102 + X1 x 101 + X0 x 100 + X-1 x 10-1 + X-2 x 10-2…

Observe este exemplo de conversão do número binário 101011 para o seu


equivalente em decimal:

101011 = 1 x 25 + 0 x 24 + 1 x 23 + 0 x 22 + 1 x 21 + 1 x 20 = 32 + 0 + 8 + 0 + 2 + 1 = 43
101011(2) = 43(10)

Vejamos outro modo para realizar a conversão:

Figura 5 – Exemplo de conversão para decimal

Fonte: O autor

Desse modo, para efetuarmos o processo de conversão, basta somarmos o


valor dos bits ligados, e assim o total obtido será o número convertido.
Temos outro exemplo, de conversão do número 101010(2) para o seu equiva-
lente em decimal:

155
Figura 6 – CONVERSÃO DO NÚMERO 101010(2) EM DECIMAL

Fonte: O autor

Observe:

32 + 0 + 8 +0+2+0 = 42
Portanto 101010(2) = 42(10).

3.5.3 CONVERSÃO DECIMAL-OCTAL


É usado para converter números inteiros para o sistema octal. Consiste em
dividir o número por 8 e os quocientes obtidos em cada divisão até que o quociente
seja 0. O número octal desejado é formado pelas divisões restantes na ordem in-
versa de sua aquisição.
Vejamos o exemplo da conversão do número decimal 500 para o seu equi-
valente em octal:

Figura 7 – Conversão do número decimal 500 em octal

500(10) = 764(2)
Fonte: O autor

3.5.4 CONVERSÃO OCTAL-DECIMAL


Existem diversos métodos para conversão de um número octal para o seu
equivalente em decimal. O método mais comum é a utilização do modelo TFN, com

156
a conversão de forma direta. Vejamos este exemplo, da conversão do número octal
764 para o seu equivalente em decimal:

764 = 7 x 82 + 6 x 81 + 4 x 80 = 448 + 48 + 4 = 500


764(8) = 500(10)

3.5.5 CONVERSÃO DECIMAL-HEXADECIMAL


Serve para converter números decimais inteiros para o sistema hexadeci-
mal. Consiste em dividir sucessivamente por 16 o número decimal e os quocientes
obtidos até que o quociente seja igual a 0. O número hexadecimal desejado é for-
mado pelos restos obtidos, escritos na ordem inversa da sua obtenção. Vejamos o
exemplo da conversão do número decimal 1000 para hexadecimal:

Figura 8 – Conversão do número decimal 1000 em hexadecimal

Fonte: O autor

Observação: o número 14 em hexadecimal deve ser convertido para E –


1000(10) = 3E8(16)
.

3.5.6 CONVERSÃO HEXADECIMAL-DECIMAL


Consiste da aplicação direta do TFN. Acompanhe o exemplo da conversão
do número binário 3E8 para decimal:

3E8 = 3 x 162 + E x 161 + 8 x 160 = 768 + 224 + 8 =


3E8 (16) = 1000(10)

157
3.5.7 CONVERSÃO OCTAL-BINÁRIO
Trata-se de uma conversão muito simples; pode-se utilizar a regra prática
descrita a seguir
Vamos utilizar um número octal qualquer, por exemplo, o número 27(8). A
regra consiste em transformar cada algarismo diretamente no correspondente em
binário, respeitando-se o número padrão de bits do sistema, que para o octal é igual
a três (23 = 8 → base do sistema octal). Assim, temos:

Figura 9 – Conversão do número 27 em binário

Fonte: O autor

3.5.8 CONVERSÃO BINÁRIO-OCTAL


Nesse caso, basta aplicar o processo inverso ao utilizado na conversão de
octal para binário. Como exemplo, será utilizado o número 110010(2). Para transfor-
mar esse número em octal, vamos primeiro separá-lo em grupo de 3 bits da direita
para a esquerda:

110 010

Efetuando a conversão de cada grupo de bits diretamente para o sistema


octal, teremos:

Figura 10 – Conversão do número binário 110010 em octal

Fonte: O autor

158
3.5.9 CONVERSÃO BINÁRIO-HEXADECIMAL
É análoga à conversão octal para o sistema binário, mas, nesse caso, neces-
sita-se de 4 bits para representar cada algarismo hexadecimal (24 = 16 → base do
sistema hexadecimal).
Como exemplo, vamos converter o número C13(16) para o sistema binário:

Figura 11 – Conversão do número c13 em binário

Fonte: O autor

3.5.10 CONVERSÃO HEXADECIMAL-BINÁRIO


É análoga à conversão do sistema binário para octal, mas, nesse caso, agru-
pa-se de 4 em 4 bits da direita para esquerda. Vejamos o exemplo:

Figura 12 – Conversão do número binário para hexadecimal

Fonte: O autor

NOTA
Um sistema de numeração é uma coleção de regras para classificar as uni-
dades que compõem os números em grupos e subgrupos, as quais devem
se combinar para formar uma unidade superior como base de um sistema
numérico.

159
LEITURA COMPLEMENTAR

DEADLOCK EM SISTEMAS OPERACIONAIS


Alex Coletta
DEADLOCK
1. Recursos: é qualquer objeto ao qual deva ser dado acesso exclusivo para cada
processo. Recursos podem ser dispositivos de hardware ou trechos de informação.
Para a utilização de um recurso, o processo deve realizar a seguinte sequência:
requisitar o recurso; utilizar o recurso e liberar o recurso. Se um recurso não estiver
disponível quando for requisitado, o processo que o requisitou é forçado a aguar-
dar, sendo dois métodos utilizados: 1) o processo é bloqueado e acordado quando
o recurso estiver disponível; 2) é enviado um código de erro ao processo indicando
que a requisição falhou sendo, então, que o próprio processo deve decidir a ação a
tomar (ex: aguardar algum tempo e pedir novamente).
2. Modelamento de Deadlock: o deadlock ocorre quando cada processo de um
conjunto de processos está esperando por um evento que apenas outro processo
do mesmo conjunto pode causar. Em muitos casos, o evento esperado é a liberação
de um recurso qualquer, isto é, cada membro do conjunto está esperando pela libe-
ração de um recurso que apenas outro membro do conjunto pode liberar. Condições
para que ocorra um deadlock: 1) Exclusão Mútua: cada recurso ou está associado a
exatamente um processo ou está disponível; 2) Posse e espera: um processo que
já possui algum recurso pode requisitar outros e aguardar por sua liberação; 3) Não
existe preempção: recursos dados a um processo não podem ser tomados de volta,
precisam ser liberados pelo processo; 4) Espera Circular: deve haver uma cadeia
circular de dois ou mais processos, cada um dos quais aguardando um recurso em
posse do próximo membro da cadeia. Para modelar a distribuição dos recursos e
das requisições vamos utilizar um grafo com dois tipos de nós: circular (processos)
e retangular (recursos).
Suponhamos a existência de 3 processos (A B C) e 3 recursos (R S T). Supor a se-
guinte ordem:
A: pede R, pede S, libera R, libera S;
B: pede S, pede T, libera S, libera T;
C: pede T, pede R, libera T, libera R.
Se o SO executa cada um dos processos por vez, esperando um terminar antes de
executar o outro, não haverá deadlock (não há paralelismo). Se quisermos realizar o

160
escalonamento dos processos no método de round-robin, as requisições poderão
ocorrer da seguinte forma:
A pede R; B pede S; C pede T; A pede S; B pede T; C pede R.
Então ocorre uma cadeia circular de processos e recursos, indicando um deadlock.
Vamos ver agora as quatro estratégias para se tratar um deadlock:
1. O Algoritmo da Avestruz (ignorar o problema): mais simples estratégia, con-
siste em fazer como se faz uma avestruz diante a uma situação de perigo: colocar
a cabeça num buraco e fingir que o problema inexiste. É a solução mais utilizada,
pois há baixa probabilidade de ocorrência de deadlock e baixo custo. O UNIX utiliza
este método.
2. Detecção e Recuperação: o SO apenas monitora as requisições e liberações de
recursos, através da manutenção de um grafo de recursos, que é constantemente
atualizado e onde se verifica a ocorrência de ciclos, se houver algum ciclo, um dos
processos deve ser morto. Se o ciclo ainda permanecer, outro processo deve ser
morto e assim sucessivamente, até que o ciclo seja quebrado. Técnica utilizada em
computadores grandes geralmente em batch, onde um processo pode ser morto e
mais tarde reinicializado. Deve-se ter o cuidado de que qualquer arquivo modificado
pelo processo morto deve ser restaurado ao seu estado original antes de iniciar o
processo novamente.
3. Prevenção de Deadlock (negando uma das quatro condições necessárias):
consiste em impor restrições aos processos de forma que o deadlock seja impossí-
vel. Possibilidades de eliminar as condições:

1. Exclusão Mútua: para alguns recursos é necessária a exclusão mútua,


pois não pode haver acesso por dois processos simultaneamente e nem
sempre a técnica de spool pode ser empregada. Portanto esta condição
não pode ser eliminada.
2. Posse e Espera: uma forma de negar essa condição é fazer com que
cada processo requisite todos os recursos que irá necessitar antes de
iniciar a execução, Se todos os recursos estiverem disponíveis então ele
é executado, senão, o processo deve aguardar. O problema é que mui-
tos processos não sabem com antecedência quais os recursos de que
irão necessitar até começar a execução e também se os recursos não
serão utilizados otimamente. Uma outra forma de quebrar essa condi-
ção é fazer com que, para pedir um novo recurso, o processo deva libe-
rar temporariamente todos aqueles que possui e somente se conseguir
o novo recurso é que pode pegar os anteriores de volta.
3. Não preempção: essa condição não pode ser quebrada, pois tomar um
recurso de um processo para entregá-lo a outro gera confusão.
4. Espera circular: para evitar que se formem ciclos fechados no grafo de

161
recursos devemos fazer com que cada processo só possa ter um re-
curso por vez e se desejar outro, deve liberar o que possui (isto impos-
sibilitaria coisas simples como cópia de uma fita para outra) ou senão
podemos dar uma numeração global a todos os recursos e os processos
só podem requisitar recursos em ordem numérica crescente. O proble-
ma é que é difícil encontrar uma numeração que satisfaça a maioria das
possíveis condições de acesso.

4. Evitação Dinâmica de Deadlock: procura-se evitar o deadlock sem impor res-


trições aos processos, isto é possível desde que alguma informação sobre a utili-
zação de recursos pelo processo seja disponível antecipadamente ao SO. Vamos
analisar maneiras de se conseguir isso:
1. Algoritmo do Banqueiro para um único recurso: usado para evitar deadlocks con-
siste em simular as decisões de um banqueiro no empréstimo de certa quantia de
dinheiro sujeita a certas condições. No exemplo a seguir temos quatro clientes (A
B C D) cada um especificou o número máximo de crédito que precisará, mas eles
não precisam de todas elas imediatamente, de forma que o banqueiro reservou 10
unidades para atender todos os pedidos (totalizando 32 unidades).

Cada cliente pode em cada momento realizar um pedido desde que não ultrapasse
seu limite de crédito e o banqueiro pode escolher o momento de atendimento dos
pedidos realizados. Após o recebimento de todo o crédito que especificou inicial-

162
mente o cliente se compromete a devolver tudo. O banqueiro deve analisar para
que não entre numa situação difícil.
Chamamos de estado, a situação dos empréstimos e dos recursos ainda disponí-
veis em um dado momento.

O exemplo anterior demonstra um estado seguro, pois existe uma sequência de ou-
tros estados que leva a que todos os clientes recebam seus empréstimos até seus
limites de crédito. O banqueiro pode emprestar duas unidades à C pegar a devolu-
ção da mesma (4) emprestar à B, pegar as cinco unidades de volta e emprestar à A,
pegar as seis unidades de volta e emprestar três delas à D, pegando então as sete
unidades de volta, garantindo o atendimento a todos os clientes. Se por exemplo o
cliente B fizesse um pedido de mais uma unidade (2) teríamos um estado não se-
guro, pois não há forma do banqueiro garantir o atendimento de todos os pedidos,
podendo vir a gerar um deadlock. Ainda não haverá um deadlock, pois os valores de
máximo não precisam necessariamente ser atingido. Por exemplo, o cliente D pode
decidir que não precisa mais de novos recursos e devolver os quatro que pediu,
voltando novamente a uma situação segura, mas o banqueiro não pode contar com
isso, então para cada pedido que chega, o banqueiro deve verificar se conceder o
mesmo leva a uma situação segura, verificando se o disponível é suficiente para
atender o cliente mais próximo de seu máximo. Se for, finge que esse cliente já
devolveu tudo que possuía, marca o mesmo como terminado e verifica se pode
atender o cliente mais próximo do máximo entre os que restam. Se ele puder levar
a bom termo esse processo, atendendo todos os clientes então o estado é seguro.

163
2. Algoritmo do Banqueiro para Vários Recursos: montamos duas matrizes, uma
dos recursos entregue e outra de recursos ainda necessários, sendo que cada linha
das matrizes corresponde a um processo e cada coluna a um tipo de recurso:

Temos também 3 vetores E, P e D que indicam:


E (recursos existentes) = [ 6 3 4 2 ]
P (recursos possuídos por algum processo) = [ 5 3 2 2 ]
D (recursos disponíveis) = [ 1 0 2 0 ]
Então os processos precisam avisar com antecedência as suas necessidades de
recursos e para descobrir se o estado é seguro devemos: 1) procurar uma linha L
cujos recursos ainda necessários sejam todos menores que os correspondentes
valores no vetor D. Se não existir essa linha, o sistema entrará em deadlock e o
sistema não é seguro; 2) Assumir que o processo da linha L requereu todos os
recursos e terminou, liberando todos os recursos que estava ocupando; 3) repetir
os dois passos anteriores até que todos os processos sejam marcados como termi-
nados. Se isto for conseguido, o estado é seguro. O problema com este algoritmo
é que os processo raramente sabem com antecedência a quantidade máxima de
recursos que necessitarão e, além disso, o número de processo no sistema varia
dinamicamente, o que invalida as análises realizadas.
FONTE: https://alexcoletta.eng.br/artigos/deadlock-em-sistemas-operacionais/.
Acesso em: 24 nov. 2022.

164
RESUMO DO TÓPICO 3

Neste tópico, você aprendeu:

• Deadlock pode ser definido como um grupo de processos estará em uma situa-
ção de deadlock se todos os processos dentro do grupo estiverem esperando
por um evento que somente outro processo dentro do grupo pode fazer ocorrer.
• Existem quatro condições para a ocorrência de deadlock: exclusão mútua; pos-
sibilidade e esperança; não preempção; e espera cíclica.
• O computador, por suas características físicas, lida com o sistema binário de
ambos os lados, empregando um conjunto de códigos que possibilitam seu fun-
cionamento impecável.
• O nome para a transformação de uma quantidade específica em um sistema
numérico em seu equivalente em outro sistema é “conversão”.

165
AUTOATIVIDADE

1. Um deadlock pode ser definido como um grupo de processos em que


todos os processos dentro do grupo estão esperando por um evento que
somente outro processo dentro do grupo pode fazer ocorrer. Baseado no
entendimento dessas informações, assinale a alternativa CORRETA acer-
ca das condições para que ocorram deadlock:

a. ( ) Devem existir uma condição para exclusão mútua, uma condi-


ção de não preempção é uma condição de espera cíclica.
b. ( ) Deve existir uma condição para exclusão mútua, uma condição
de preempção é uma condição de espera cíclica.
c. ( ) Deve existir uma condição para exclusão mútua, existir uma
condição de não preempção e não existir uma condição de espera
cíclica.
d. ( ) Deve existir uma condição para exclusão mútua, existir uma
condição de não preempção e não existir uma condição de espera
cíclica.

2. No sistema binário, são utilizados os dígitos 1 e 0 para a representação de


quantidades. Portanto, a sua base é 2. Baseado no entendimento dessa
informação, assinale a alternativa CORRETA:

a. ( ) O sistema binário é um sistema de numeração cuja base é 8,


ou seja, utiliza 8 símbolos para a representação de quantidade. No
Ocidente, esses símbolos são os algarismos arábicos.
b. ( ) O sistema binário é o sistema de numeração muito utilizado
na programação de microprocessadores, em especial nos equi-
pamentos e máquinas de estudo e nos sistemas de desenvol-
vimento. Trata-se de um sistema de numeração posicional que
representa os números em base 16, logo, utilizando 16 símbolos.
c. ( ) O sistema binário é usado pelos computadores e é constituído
de dois dígitos, 0 e 1. A combinação desses dígitos leva o compu-
tador a criar várias informações: letras, palavras, textos, cálculos.
d. ( ) O sistema de numeração decimal é de base 10, ou seja, utili-
za 10 algarismos (símbolos) diferentes para representar todos os
números. Formado pelos algarismos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, é
um sistema posicional, ou seja, a posição do algarismo no número
modifica o seu valor.

166
3. O sistema de numeração decimal é de base 10, ou seja, utiliza 10 algaris-
mos (símbolos) diferentes para representar todos os números. Baseado
no entendimento dessa informação, assinale a alternativa CORRETA:

a. ( ) O sistema binário é usado pelos computadores e é constituído


de dois dígitos, 0 e 1. A combinação desses dígitos leva o compu-
tador a criar várias informações: letras, palavras, textos, cálculos.
b. ( ) O sistema binário é um sistema de numeração cuja base é 8,
ou seja, utiliza 8 símbolos para a representação de quantidade. No
Ocidente, esses símbolos são os algarismos arábicos.
c. ( ) O sistema binário é um sistema de numeração cuja base é 8,
ou seja, utiliza 8 símbolos para a representação de quantidade. No
Ocidente, esses símbolos são os algarismos arábicos.
d. ( ) O sistema de numeração decimal é formado pelos algarismos
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, é um sistema posicional, ou seja, a posição
do algarismo no número modifica o seu valor.

4. Como sabemos, um deadlock ocorre quando dois ou mais processos es-


tão esperando interminavelmente por um evento que só pode acontecer
em um dos processos que estão esperando. Disserte acerca dos concei-
tos que envolvem estratégias para lidar com deadlocks.
5. O hexadecimal é o sistema de numeração muito utilizado na programa-
ção de microprocessadores, em especial nos equipamentos e máquinas
de estudo e nos sistemas de desenvolvimento. Disserte acerca dos con-
ceitos que envolvem o sistema hexadecimal.

167
REFERÊNCIAS

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


2014.

168

Você também pode gostar