Você está na página 1de 107

SISTEMA OPERACIONAL

PROF. ROQUE MAITINO NETO

SISTEMA OPERACIONAL

PROF. ROQUE MAITINO NETO

FACULDADE CATÓLICA PAULISTA | 1


Diretor Geral | Valdir Carrenho Junior


A Faculdade Católica Paulista tem por missão exercer uma
ação integrada de suas atividades educacionais, visando à
geração, sistematização e disseminação do conhecimento,
para formar profissionais empreendedores que promovam
a transformação e o desenvolvimento social, econômico e
cultural da comunidade em que está inserida.

Missão da Faculdade Católica Paulista

Av. Cristo Rei, 305 - Banzato, CEP 17515-200 Marília - São Paulo.
www.uca.edu.br

Nenhuma parte desta publicação poderá ser reproduzida por qualquer meio ou forma
sem autorização. Todos os gráficos, tabelas e elementos são creditados à autoria,
salvo quando indicada a referência, sendo de inteira responsabilidade da autoria a
emissão de conceitos.
SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

SUMÁRIO
AULA 01 CONCEITOS, FUNÇÕES E HISTÓRICO DOS 05
SISTEMAS OPERACIONAIS

AULA 02 TIPOS DE SISTEMAS OPERACIONAIS 13

AULA 03 GERENCIAMENTO DE PROCESSOS 19

AULA 04 GERENCIAMENTO DE MEMÓRIA 24

AULA 05 GERENCIAMENTO DE ARQUIVOS 32

AULA 06 GERENCIAMENTO DE ENTRADA E SAÍDA 37

AULA 07 GERENCIAMENTO DE PROTEÇÃO E SEGURANÇA 43

AULA 08 THREADS 49

AULA 09 UTILIZANDO THREADS 55

AULA 10 SISTEMAS OPERACIONAL COM VÁRIOS 60


PROCESSADORES

AULA 11 ESCALONADOR DA CPU 66

AULA 12 ALGORITMOS AVANÇADOS DE ESCALONAMENTO 73

AULA 13 INTRODUÇÃO A DEADLOCKS 79

AULA 14 VIRTUALIZAÇÃO E MÁQUINAS VIRTUAIS 85

AULA 15 SISTEMAS OPERACIONAIS MULTIMÍDIA 91

AULA 16 SISTEMAS OPERACIONAIS PARA DISPOSITIVOS 97


MÓVEIS
FACULDADE CATÓLICA PAULISTA | 3
SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

INTRODUÇÃO

Antes de ter acesso às casas de milhões de pessoas, os computadores passaram


por considerável evolução e por muitas adaptações: de artefatos enormes, lentos e
pouco confiáveis para dispositivos leves, rápidos e absolutamente precisos; de má-
quinas em trabalho isolado a componentes ativos de uma enorme rede mundial e,
por fim, de executores de tarefas simples a sofisticadas plataformas científicas e de
multimídia. Fica difícil imaginar o que os computadores não sejam capazes de fazer
em nossos dias e essa variedade de funções contribuiu para que todos nós desenvol-
vêssemos a necessidade de ter um deles por perto.
Embora sejam muito importantes, as transformações visíveis e palpáveis não fo-
ram as únicas que nos impulsionaram até aqui. A evolução do software contribuiu de
forma decisiva para tornar simples a utilização da máquina e, neste contexto, o papel
mais importante cabe aos Sistemas Operacionais. Afinal, são eles que gerenciam
todos os recursos de um sistema computacional e que constituem a ponte entre o
hardware e o usuário comum, possibilitando que a experiência de uso de um compu-
tador seja agradável e produtiva.
Foi justamente para esclarecer os meios pelos quais um Sistema Operacional atua
que criamos este material. Com um viés objetivo e de fácil compreensão, os encon-
tros se iniciam com a abordagem histórica do nosso tema principal, avança na direção
dos seus tipos e chega até o conceito de processos, elemento essencial na constru-
ção de um Sistema Operacional e que será recorrente em nossas abordagens. Nosso
conteúdo segue tratando das formas de gerenciamento que um SO exerce sobre os
recursos do computador e é finalizado com threads, multiprogramação, virtualização
e Sistemas Operacionais multimídia e mobile.
Esperamos que esta aventura pelos caminhos dos Sistemas Operacionais seja
muito proveitosa a você e que o conteúdo que por aqui será conhecido seja decisivo
no restante da sua vida acadêmica, além de te credenciar a uma jornada profissional
de muito sucesso.

Seja muito bem-vinda e seja muito bem-vindo!

FACULDADE CATÓLICA PAULISTA | 4


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 1
CONCEITOS, FUNÇÕES E
HISTÓRICO DOS SISTEMAS
OPERACIONAIS
De todos os recursos que um sistema de computação possui, o Sistema Operacional
talvez seja aquele que ofereça as funções mais desconhecidas para o usuário comum.
Ainda que sua interface gráfica seja a porta de entrada para o uso de qualquer aplicação,
a utilidade de um Sistema Operacional vai muito além da conveniência dos ícones, das
teclas de atalho e uso do mouse. Embora silenciosas e independentes de alguma
ação do usuário, são essas “funções desconhecidas” que viabilizam interações que,
de outra forma, seriam extremamente trabalhosas e comprometeriam seriamente a
experiência de uso de um computador.
Para que nosso conhecimento sobre Sistemas Operacionais comece a ser
construído pela base e de forma bem gradativa, trataremos neste nosso encontro
dos conceitos introdutórios e das suas principais funções, sem nos esquecermos do
necessário resgate histórico dos fatos e das circunstâncias que contribuíram para
que nosso objeto de estudo alcançasse o atual estado da arte em que se encontra, e
o habilitaram à franca evolução nos anos que se seguirão. Sigamos em frente e bom
estudo!

1.1 Conceitos e principais funções dos Sistemas Operacionais

Definitivamente, um Sistema Operacional não é um programa comum. Em um


ambiente complexo e formado por dispositivos com diversas funções é dele a missão
de exercer a coordenação entre esses elementos e de viabilizar a criação de outras
aplicações para o computador. Sem o Sistema Operacional, um desenvolvedor
deveria, por exemplo, criar mecanismos de gerenciamento de todos os periféricos e
outros dispositivos que a sua aplicação utilizaria, antes de aventurar-se a efetivamente
desenvolvê-la. Inviável, para dizer o mínimo.
O Sistema Operacional é um programa que gerencia o hardware de um

FACULDADE CATÓLICA PAULISTA | 5


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

computador. Ele também fornece uma base para os programas aplicativos e atua
como intermediário entre o usuário e o hardware do computador. Considerando que
um sistema computacional pode ser mais facilmente entendido através da separação
entre componentes, o Sistema Operacional exerce o papel de intermediário entre
aplicativos de usuário e o hardware da máquina, possibilitando a comunicação entre
estas partes e viabilizado o trabalho do desenvolvedor, conforme já mencionado
(SILBERSCHATZ, GALVIN, GAGNE, 2015). A figura 1 nos oferece visão de um sistema
computacional típico que inclui usuários fazendo uso de aplicativos, que se conectam
ao hardware por meio do Sistema Operacional.

Figura 1: Visão de um sistema computacional


Fonte: (SILBERSCHATZ; GALVIN; GAGNE, 2015)

Embora pareça simples na figura, a atuação de um Sistema Operacional é bastante


complexa e inclui funções não exatamente afins, conforme logo examinaremos. Essa
multiplicidade de funções acaba, inclusive, dificultando sua própria conceituação.
Tanenbaum e Bos (2016) afirmam ser difícil dizer com absoluta precisão o que é
um Sistema operacional, em parte por realizarem duas funções essencialmente não

FACULDADE CATÓLICA PAULISTA | 6


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

relacionadas: (i) fornecer aos programadores de aplicativos (e aos próprios aplicativos,


naturalmente) um conjunto de recursos claros e fáceis de serem utilizados, ao invés
de recursos confusos de hardware, e (ii) gerenciar esses recursos de hardware. Este
cenário nos impele a observar os Sistemas Operacionais considerando duas grandes
funções (TANENBAUM; BOS, 2016):

• Sistema Operacional como uma máquina estendida: neste contexto, o Sistema


Operacional é tido como um fornecedor de abstrações que viabilizará a utilização da
máquina para fins de desenvolvimento de aplicações. As abstrações criadas tornam
tarefas extremamente complexas em atividades viáveis para o desenvolvedor e, por
consequência, para o usuário comum. Uma interface gráfica de usuário é um exemplo
clássico dessas abstrações.

• Sistema Operacional como um gerenciador de recursos: é neste item que um


Sistema Operacional assume o papel de gerenciador de todos os recursos de um
sistema computacional, incluindo a memória da máquina. Conforme investigaremos
em aulas seguintes, o controle da memória permitirá que vários programas a ocupem
simultaneamente, e que o usuário tenha a sensação de que estão sendo executados
também ao mesmo tempo.

Feitas essas considerações, avançamos agora para a abordagem histórica dos


Sistemas Operacionais.

1.2 Histórico dos Sistemas Operacionais

Ao fazermos o resgate histórico de um tema é comum que uma consideração


importante deva ser feita antes: a divisão das fases resultantes da evolução de um
objeto de estudo são quase sempre produto de análise posterior dos fatos e nunca
resultado de um registro ou apontamento feito no calor dos acontecimentos. Em
outras palavras, a organização dos períodos evolutivos é fruto de convenções de datas
criadas por observadores que podem sequer ter participado do evento que motivou a
virada de fase do objeto de estudo.
Bons exemplos para ilustrar essa realidade não faltam. Em 1789, a Revolução

FACULDADE CATÓLICA PAULISTA | 7


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Francesa inaugurou um novo período histórico, que hoje chamamos Idade


Contemporânea. No entanto, não é difícil de imaginar que essa divisão tenha sido
convencionada anos depois, e não quando o fato ocorria. Quando se trata de datas,
sempre devemos considerar certa imprecisão e eventuais sobreposições de fatos, o
que não exclui a importância do estudo histórico.
Em nosso contexto é muito comum que a evolução dos Sistemas Operacionais
esteja relacionada diretamente à evolução do próprio hardware dos computadores,
tamanho o grau de interdependência entre ambos. Autores diferentes costumam expor
esta evolução de formas diferentes, mas alguns valem mais a menção. Tanenbaum e
Bos (2016) usam o histórico de evolução dos computadores para explicarem a própria
evolução dos Sistemas Operacionais e dividem a trajetória de ambos em gerações,
como segue:

• Primeira Geração (1945 a 1955): na década de 1940 os computadores operavam


sem Sistemas Operacionais e se caracterizavam pelo seu funcionamento com válvulas.
Foi a Segunda Guerra Mundial (1939 a 1945) que deu motivos para a evolução dos
computadores, justamente pela necessidade de criar um artefato que pudesse fazer
cálculos balísticos com maior precisão e decifrar o código usado nas transmissões
feitas entre os alemães. Contam os autores que, no começo da década de 1940, o
professor John Atanasoff e seu aluno de graduação, Clifford Berry, construíram o que
hoje é tido como o primeiro computador digital funcional do mundo. Pouco tempo
depois, outras criações se sucederam, todas muito rudimentares e que não usavam
linguagem de programação, pois elas simplesmente não existiam. Como você pode
imaginar, os Sistemas Operacionais também era algo de que nunca se tinha ouvido
falar.

ISTO ESTÁ NA REDE

O filme chamado O Jogo da Imitação (2015) retrata parte da história de Alan Turing
e sua busca por construir uma máquina que pudesse decifrar o código nazista
usado para comunicação durante a Segunda Guerra Mundial. Esta máquina foi a
base para o que hoje conhecemos como computador. O trailer oficial do filme está
disponível em: https://www.youtube.com/watch?v=YIkKbMcJL_4. Acesso em: 1 de
jun. de 2021.

FACULDADE CATÓLICA PAULISTA | 8


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

• Segunda Geração (1955 a 1965): esta geração é caracterizada pelo uso de


transistores na construção dos computadores e pelo processamento em lotes (ou
batch). Além disso, foi nesta época que os computadores se tornaram confiáveis
o suficiente para serem fabricados e vendidos a clientes com muitos recursos
financeiros e com uma equipe técnica altamente capacitada para operar a máquina.
Um procedimento comum de entrada de dados nestes computadores incluía a
presença de um cartão perfurado que continha o tempo máximo de processamento
para aquela tarefa e o nome do programador. Após a leitura destes dados iniciais,
um outro cartão perfurado transmitia ao computador o comando para carregar
o compilador FORTRAN a partir da fita magnética do sistema, e o programa a ser
compilado era também carregado para o computador. Por fim, um cartão com o
comando de execução do programa era carregado e só então a tarefa terminava.
Por primitivo que possa parecer, este procedimento realizado por cartões foi o
precursor das linguagens de controle de tarefas e dos interpretadores de comando
modernos, bases para os nossos Sistemas Operacionais. Completam Tanenbaum e
Bos (2016) que os grandes computadores de segunda geração eram usados na maior
parte para cálculos científicos e comumente programados FORTRAN. Os Sistemas
Operacionais mais comuns eram o FMS (Fortran Monitor System) e o IBSYS, da IBM.

Terceira Geração (1965 a 1980): a possibilidade de se implementar a


multiprogramação foi uma das características mais importantes desta geração. Foi
nessa época também que os fabricantes resolveram criar famílias de computadores
compatíveis com o trabalho científico e com processamento de dados e rotinas
comerciais. Antes dessa tendência, os fabricantes costumavam manter linhas
distintas e quase sempre incompatíveis entre sim. Com a intenção de permitir
o funcionamento de programas de múltiplas naturezas, a IBM lançou um Sistema
Operacional que deveria funcionar em toda as suas famílias de computadores, tanto
os de pequeno porte quanto os de grande porte. Há que se registrar que, naquela
época, essa premissa fez surgir um Sistema Operacional extremamente grande,
complexo e cheio de bugs, batizado de OS/360.
Apesar do tamanho enorme e dos problemas, o OS/360 e os Sistemas Operacionais
de terceira geração similares proporcionaram um grau de satisfação relativamente
bom para a maioria de seus clientes. Eles também popularizaram várias técnicas-chave
ausentes nos sistemas operacionais de segunda geração. Talvez a mais importante

FACULDADE CATÓLICA PAULISTA | 9


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

dessas técnicas tenha sido a multiprogramação (TANENBAUM, BOS, 2016). Foi pela
multiprogramação que os projetistas da época conseguiram minimizar o tempo de
espera ociosa entre os procedimentos de entrada e de processamento próprios de um
programa. A implementação desta solução veio com a divisão da memória em várias
partes, cada uma responsável por armazenar uma tarefa distinta, conforme exibido
na figura 2.

Figura 2: Um sistema de multiprogramação com três tarefas na memória


Fonte: (TANENBAUM; BOS, 2016, p.8)

Enquanto uma tarefa aguardava pela finalização do processo de entrada ou saída,


outra tarefa poderia fazer uso da CPU o que tornava sua ocupação muito mais
otimizada. Outra evolução importante foi a possibilidade de se transferir tarefas
contidas em cartões perfurados para discos rígidos, o que, por sua vez, facilitada a
transferência da tarefa para a partição de memória disponível. Oliveira (2010) contribui
com essa discussão ao afirmar que o surgimento dos discos magnéticos foi, de fato,
muito importante para a viabilização do conceito da multiprogramação. Segundo o
autor, a velocidade de resposta do meio magnético favoreceu a diminuição do tempo
para a realização de operações de entrada e saída, diminuindo assim o tempo ocioso
dos processadores.
Como consequência natural da evolução dos meios de fabricação dos computadores,
era natural esperar que eles também tivessem seu tamanho e complexidade estrutura
diminuídos. Foi assim que a família PDP, formadas por minicomputadores, tornou-se
um absoluto sucesso de vendas desta terceira geração.

FACULDADE CATÓLICA PAULISTA | 10


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

ANOTE ISSO

Foi em um computador PDP-7 que o Cientista da Computação Ken Thompson


desenvolveu uma versão do Sistema Operacional MULTICS para um único usuário.
Mais tarde, essa versão foi aprimorada e então batizada como UNIX.

Quarta Geração (1980 a 1990): esta geração é marcada pelo surgimento dos
computadores pessoais, em grande parte impulsionado pelo extraordinário progresso
obtido nos processos de miniaturização dos circuitos integrados. A possibilidade de
que um usuário comum pudesse ter um computador em casa era algo impensável em
gerações anteriores. Antes, porém, que os computadores pessoais invadissem a casa
das pessoas, muita criação e evolução foram aplicadas nos Sistemas Operacionais.
O lançamento do processador 8080, da Intel, deu oportunidade para que o primeiro
microcomputador com um disco fosse produzido. Neste cenário, era natural que
um novo Sistema Operacional tivesse que ser criado e assim surgiu o CP/M (Control
Program for Microcomputers ou programa de controle para microcomputadores). O
contexto de negócios que se originou da criação do CP/M foi bastante curioso, para
dizer o mínimo, e é assim contada por Tanenbaum e Bos (2016): no início da década de
1980, a IBM projetou o IBM PC e, por causa da necessidade de encontrar um software
para ser executado nele, seu pessoal contatou Bill Gates, na esperança de que ele
pudesse indicar um sistema operacional para ser executado no PC.
Gates, então, sugeriu que a IBM contatasse a Digital Research, então a empresa de
Sistemas Operacionais dominante e proprietária do CP/M. Ocorre que os dirigentes da
Digital Research se recusaram a receber a IBM, e novamente Bill Gates foi acionado.
Quando a IBM voltou Gates lembrou-se que um fabricante de computadores local,
a Seattle Computer Products tinha um Sistema Operacional adequado, o DOS (Disk
Operating System ou Sistema Operacional de Disco). Ele os procurou e pediu para
comprar o DOS e, por US$ 75.000, iniciou a história de maior sucesso da Computação.

Quinta Geração (1990 até o presente): esta geração incorpora toda a evolução das
anteriores e é fortemente caracterizada pelos dispositivos móveis. A incorporação de
um Sistema Operacional nestes dispositivos (junto com os aplicativos adequados)
foi o que possibilitou que usássemos nosso telefone para enviar e receber e-mails e
mensagens instantâneas, além de encontrarmos o melhor caminho entre dois pontos

FACULDADE CATÓLICA PAULISTA | 11


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

e, claro, acessarmos nossas redes sociais. Empresas como a Apple, Samsung e


Windows (este último por um período curto) desenvolveram ou aprimoraram Sistemas
Operacionais para seus dispositivos e os tornaram um absoluto sucesso de vendas.

Bem, este foi o conteúdo que queríamos compartilhar com você neste nosso
primeiro encontro. Desejamos que este tenha sido um bom início em sua caminhada
para se tornar uma verdadeira referência em Sistemas Operacionais. Não se esqueça
de aprimorar seus conhecimentos com leituras de fontes diversas em com o zelo nas
atividades que se seguirão. Obrigado e até a próxima!

FACULDADE CATÓLICA PAULISTA | 12


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 2
TIPOS DE SISTEMAS
OPERACIONAIS
Olá! Seja bem-vinda e seja bem-vindo ao nosso segundo encontro!
Conforme abordamos na primeira aula, Sistemas Operacionais são artefatos
sofisticados de software construídos para exercer gerenciamento do hardware e
estabelecer uma conexão amigável entre ele e os programas criados para os usuários
finais. Dada a variedade de tipos e perfis de aplicações com as quais um Sistema
Operacional lida é natural imaginarmos que existam também tipos distintos destes
sistemas, a fim de que sejam contempladas as mais diversas finalidades de uso.
Por isso, nesta segunda aula trataremos dos tipos de Sistemas Operacionais,
considerando as mais diversas plataformas de hardware e a variedade de aplicações
que deles se utilizarão. O Sistema Operacional que gerencia um servidor, por exemplo,
deve oferecer ao administrador recursos diferentes daqueles disponíveis em um
sistema de computador pessoal. Da mesma forma, um Sistema Operacional sendo
executado em um televisor moderno será diferente daquele que se presta a gerenciar
um sistema de tempo real.
Sigamos adiante e bons estudos!

2.1 Classificação dos Sistemas Operacionais

O principal objetivo a ser alcançado neste estudo é a familiarização com os diversos


tipos de Sistemas Operacionais, com suas especificidades e com os aspectos
diferenciais entre eles. Nossa primeira abordagem investigará as características
dos Sistemas Operacionais para computadores de grande porte, situado no topo da
hierarquia da capacidade de processamento entre todas as máquinas que aqui serão
mencionadas.

FACULDADE CATÓLICA PAULISTA | 13


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

2.1.1 Sistemas Operacionais para Computadores de Grande Porte

Imagine uma instituição bancária com 100 milhões de clientes. Agora imagine o
aparato computacional que este banco deve possuir para fornecer serviços de qualidade
a todos eles! Tanto no caso dos bancos, como no caso de uma operadora de telefonia
celular ou de um órgão federal, os computadores que dão suporte às operações destas
instituições devem ser de grande porte e com recursos extraordinários de entrada e
saída. Certamente o Sistema Operacional que suporta tais máquinas deve ser capaz
de controlar o processamento simultâneo de muitas tarefas e de dar conta da alta
carga de transações de entrada e de saída de dados.
Segundo Tanenbaum e Bos (2016), estes sistemas oferecem geralmente três tipos
de serviços: em lote (batch), processamento de transações e tempo compartilhado
(timesharing). Embora o detalhamento destes serviços não seja parte do nosso
objetivo aqui, vale uma rápida apresentação de cada um. O suporte ao processamento
em lote ocupa-se das tarefas rotineiras sem qualquer interação de usuário e seu
funcionamento se baseia no enfileiramento de tarefas dispostas em lotes (daí o termo
batch), que serão executadas uma após outra. Um exemplo típico de uso do batch
está relacionado ao processamento das transações bancárias.
Ainda conforme a lição de Tanenbaum e Bos (2016), os sistemas de processamento
de transações lidam com grandes números operações comerciais ou que envolvem
baixa complexidade computacional, por exemplo, de forma muito rápida e eficiente. Já
o sistema de tempo compartilhado permite que múltiplos usuários remotos executem
tarefas no computador ao mesmo tempo, como na realização de consultas a um
grande banco de dados. Os Sistemas Operacionais que atendem a computadores de
grande porte atuais são capazes de executar todos estes tipos de processamentos
de forma eficiente. Um exemplo de sistema operacional de computadores de grande
porte é o OS/390, uma derivação do OS/360.

2.1.2 Sistemas Operacionais para Servidores

Antes de tratarmos especificamente deste tipo de Sistema Operacional, vale


o resgate dos conceitos relacionados a servidores: trata-se de um computador
dotado de hardware com alto poder de processamento e adequado para centralizar o
armazenamento de dados e de aplicações, de modo que possa distribui-los aos seus

FACULDADE CATÓLICA PAULISTA | 14


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

clientes da rede. O conceito de servidor pode se estender também para serviços de


impressão: por meio de uma aplicação específica sendo executada em um hardware
servidor é possível controlar todas as tarefas de impressão originadas das estações
da rede. Além disso, servidores podem fornecer serviços de arquivo ou de acesso à
internet.
Um Sistema Operacional projetado para servidores tem a capacidade de servir a
múltiplos usuários ao mesmo tempo, possibilitando, inclusive, que estes usuários
compartilhem recursos de hardware e de software. Sistemas operacionais típicos de
servidores são Solaris, FreeBSD, Linux e Windows Server 201x (TANENBAUM; BOS,
2016). E quais seriam os Sistemas Operacionais próprios para servidores mais
utilizados em todo o mundo? O site statista.com, uma grande plataforma de dados de
negócios, nos oferece levantamento que responde a esta questão. Ao apresentar três
conjuntos de dados, a figura 3 exibe o market share (ou a fatia de mercado) de cada um
dos mais importantes Sistemas Operacionais entre os anos de 2018 e 2019.

Figura 3: Divisão de mercado de Sistemas Operacionais para servidores.


Fonte: https://www.statista.com/statistics/915085/global-server-share-by-os/

Como se pode observar, o Windows detém larga vantagem na liderança, seguido


de longe pelo Linux. O OS/390, classificado como um Sistema Operacional para
computadores de grande porte, também aparece na lista, com uma fatia em torno de
2%.

FACULDADE CATÓLICA PAULISTA | 15


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

2.1.3 Sistemas Operacionais para multiprocessadores

Em certo dia, um projetista de hardware pensou: “E se colocássemos para trabalhar


em conjunto dois ou mais processadores?”. Uma vez viabilizada a ideia, surgiram
os computadores com várias unidades de processamento em um único hardware.
Com isso, seria natural que o Sistema Operacional tivesse que ser adaptado para
esta nova realidade. Segundo Tanenbaum e Bos (2016), computadores com vários
processadores precisam de Sistemas Operacionais especiais. No entanto, muitas
vezes eles são variações dos Sistemas Operacionais de servidores, com aspectos
especiais para comunicação, conectividade e consistência.
Embora os efeitos benéficos da presença de múltiplos processadores tenham
sido mais perceptíveis de início nos servidores, logo a tendência se espalhou para
computadores pessoais e os Sistemas Operacionais destas máquinas também
passaram a dar suporte a essa tecnologia. No momento em que lê este texto em seu
computador é possível que você esteja também escutando uma música ou, quem
sabe, aguardando a chegada de uma mensagem importante por e-mail. A execução
simultânea de várias tarefas é possível graças também ao Sistema Operacional do
seu computador, seja ele Windows, Linux ou MacOs.
Parece bem lógico que dois ou mais processadores são capazes de obter um
desempenho melhor do que apenas um, consideradas as similaridades técnicas entre
eles. No entanto, a lista de benefícios vai além: sistemas multiprocessados tendem a
ser mais confiáveis, já que a falha em um dos processadores não levaria o sistema todo
ao colapso. Como consequência desta característica, será perceptível o aumento da
disponibilidade. Por fim, sempre haverá a possibilidade de se aumentar a quantidade
de processadores no caso de se desejar aumentar o desempenho do sistema. Com
isso, evita-se a troca de um equipamento por outro de maior desempenho.

2.1.4 Sistemas Operacionais embarcados

Não é de hoje que dispositivos que guardamos na cozinha, na sala ou na garagem


de nossas casas são dotados de capacidade de processamento. E se o seu forno
de micro-ondas, sua TV e seu carro são capazes de processar dados, isso se dá
em boa medida por causa do Sistema Operacional que dá suporte a eles. Neste
cenário, algumas características devem ser mencionadas. Em primeiro lugar, estes

FACULDADE CATÓLICA PAULISTA | 16


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

dispositivos citados não costumam aceitar programas instalados pelo usuário.


Ensinam Tanenbaum e Bos (2016) que a principal propriedade que distingue sistemas
embarcados dos portáteis é a certeza de que nenhum software não confiável vá
ser executado nele um dia. Não é possível para um usuário comum, por exemplo,
atualizar o aplicativo do forno de micro-ondas, pois todo o software está na ROM
(Read-Only Memory). Essa característica leva à simplificação do projeto, já que não há
necessidade de se prever mecanismos de proteção para o software.

2.1.5 Sistemas Operacionais de nós sensores (sensor-node)

Este tipo de Sistema Operacional reúne características de sistemas embarcados


e sistemas de uso geral e os dispositivos por eles servidos são geralmente são
pequenos computadores que se comunicam entre si e com uma estação-base usando
comunicação sem fio. Por causa da sua utilização em locais possivelmente sem
alimentação elétrica e com condições climáticas adversas, esses dispositivos devem
usar pouca energia e serem resistentes às condições ambientais. De acordo com
Tanenbaum e Bos (2016), redes de sensores são usadas para proteger os perímetros
de prédios, guardar fronteiras nacionais, detectar incêndios em florestas, medir a
temperatura e a precipitação para a previsão de tempo e muito mais.
Um dos Sistemas Operacionais mais utilizados para dispositivos que requerem
baixo consumo de energia e se comunicam sem a utilização de fios (incluídos os
nós sensores) é o TinyOS. Segundo Han et. al. (2005), no TinyOS os componentes
reutilizáveis implementam serviços comuns, mas cada nó executa uma única imagem
de sistema vinculada estaticamente, tornando difícil executar vários aplicativos ou
atualizar aplicativos de forma incremental. Este Sistema Operacional foi escrito
usando em NesC, uma linguagem orientada a eventos.

Bem, o critério de separação de tipos de Sistemas Operacionais que acabamos


utilizar está relacionado a algumas variedades de plataformas de hardware em que
esses sistemas são executados. No entanto, há outro tipo de classificação muito
comum, e que leva em consideração a quantidade de atendimentos simultâneos
a usuários e a tarefas, mais do que o ambiente de hardware em que o sistema é
executado. Neste tipo de classificação é comum que os Sistemas Operacionais

FACULDADE CATÓLICA PAULISTA | 17


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

em Batch apareçam como o primeiro tipo, seguido pelos Sistemas que suportam
multiprogramação. Depois, a classificação apresenta os sistemas multitarefa, os
sistemas multiprocessados e, por fim, os Sistemas Operacionais de tempo real.
Como observação final vale pontuar que, ao procurar por tipos de sistemas na web,
você poderá encontrar uma terceira classificação, com menção aos seus respectivos
desenvolvedores, como Windows, Linux, Unix, Android e Apple, entre outros. De
qualquer maneira, o conhecimento de todas essas classificações ajudará você tomar a
decisão correta quando for chamado a escolher por um tipo ou por um desenvolvedor,
com base nas características e funcionalidade de cada um.
Este, portanto, era o conteúdo que queríamos compartilhar com você. Bom estudo
e até a próxima.

FACULDADE CATÓLICA PAULISTA | 18


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 3
GERENCIAMENTO
DE PROCESSOS
Uma abordagem adequada de Sistemas Operacionais deve resgatar conceitos
elementares sempre que precisar introduzir um novo tema que a eles esteja relacionado.
Neste nosso encontro trataremos do gerenciamento de processos e, antes de nos
aprofundarmos neste assunto, vale a pena voltarmos nosso foco novamente para
o que estudamos em nossa primeira aula. Com isso, estaremos preparados para
trilharmos novos caminhos rumo à excelência em Sistemas Operacionais. Sigamos
adiante, pois!

3.1 Processos
De maneira didática e objetiva, Flynn e Mchoes (2002) nos ensinam que o
sistema operacional é uma espécie de gerente executivo que administra todos os
componentes de hardware e software de um sistema de computador. Usando termos
mais específicos, ele controla cada arquivo, dispositivo, seção de memória principal
e tempo de processamento. O sistema operacional controla quem pode utilizar o
sistema e de que maneira. Resumindo, ele é o chefe!
Já Deitel et al. (2005), usando abordagem mais técnica, conceituam Sistema
Operacional como um software que habilita as aplicações a interagir com o hardware
de um computador. Em alto nível de abstração, os autores descrevem assim seu
funcionamento: um usuário requisita ao computador que realize uma ação (imprimir
um documento ou tocar uma música, por exemplo), e o sistema operacional gerencia
o software e o hardware necessários para que o resultado desejado seja produzido.
Os sistemas operacionais são compostos por partes distintas e, por ora, seus
componentes centrais são objetos de nosso interesse. De acordo com Deitel (2005),
alguns dos componentes centrais de um sistema operacional incluem:
• Gerenciador de entrada e saída: componente que atende às solicitações de
E/S de e para os dispositivos de hardware.
• Gerenciador de memória: ele determina quando e como a memória será
alocada aos processos.

FACULDADE CATÓLICA PAULISTA | 19


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

• Escalonador de processo: componente que determina quando e por quanto


tempo um processo será executado no processador da máquina.
Pois bem, são justamente os processos os objetos do nosso interesse agora. O que
são? Como são criados? Eles duram para sempre? Que estados podem assumir?
Antes de respondermos a estas questões, vale investirmos alguns parágrafos na
definição de thread, como parte integrante do conteúdo aqui desenvolvido.
De fato, os processos são fundamentais para que a concorrência seja possível
nas aplicações. De acordo com MACHADO e MAIA (2013), os sistemas operacionais
utilizam três maneiras diferentes para implementá-la: processos independentes,
subprocessos e threads. Embora importantes, as duas últimas maneiras não serão
tratadas aqui, mas faremos uma breve menção aos threads. Da mesma forma que
os processos, eles também assumem estados diferentes entre seu ciclo de vida e
são essenciais para a execução paralela de rotinas em aplicações de usuários. Além
disso, eles se distinguem dos processos tradicionais pelo modo como os espaços
de endereçamento são alocados. Em encontros futuros trataremos dos threads com
maior detalhamento. Feitas essas considerações, passamos da criação, finalização e
estados de um processo.

3.1.1 Criação e finalização de um processo


É provável que você já tenha se deparado com algumas expressões que fizeram
menção ao conceito de processo. “Controle de um programa em execução” e “atividade
assíncrona” talvez tenham sido as mais comuns. Embora não estejam incorretas,
estas definições carecem de um complemento, de um “algo a mais” para se tornarem
compreensíveis em si. A primeira definição que Deitel et al. (2005) dão para processo
é a de uma entidade que possui seu próprio espaço de endereço, que normalmente
consiste em uma porção de texto, uma de dados e outra de pilha. A porção de texto
armazena o código que o processador executa. A porção dos dados armazena
variáveis que o processo usa durante a execução. A porção de pilha – completam os
autores – armazena instruções e variáveis locais a para chamadas ao procedimento.
A segunda é a de um programa em execução.
Uma das principais funções do sistema operacional é fazer a gerência dos processos
(MACHADO; MAIA, 2013) e parte fundamental dessa tarefa é controlar o ciclo de
execução de um processo. Ele começa quando o processador busca a instrução
que está na memória para ser executada, armazena-a no registrador de instruções,

FACULDADE CATÓLICA PAULISTA | 20


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

decodifica seus bits e, enfim, executa a instrução. No entanto, o ciclo de execução


das instruções não distingue de qual programa ela se origina, fato que gera duas
situações: (i) como normalmente haverá mais de um programa para ser executado,
o acesso de suas instruções ao processador causará concorrência entre elas e (ii) o
sistema operacional será o responsável por controlar a alternância da execução das
instruções no processador.
Assim, conforme sustentam Machado e Maia (2013), o conceito de processo torna-
se essencial para que os sistemas multiprogramáveis implementem a concorrência
provocada por diversos programas. Segundo os autores, um processo é formado por
três partes: software, hardware e endereçamento. A figura 4 ilustra a ideia.

Figura 4: estrutura de um processo


Fonte: adaptado de (MACHADO; MAIA, 2013)

ISTO ESTÁ NA REDE

Um bom vídeo relacionado ao assunto de processos pode ser encontrado em


https://www.youtube.com/watch?v=JmNxFf_96xY (Acesso em: 19 jun. 2021). Nele
o autor trata do conceito de processo e simula a alternância entre quatro processos
sequenciais, com abordagem do que ocorre na memória e na CPU.

Como já conhecemos o conceito de processos, além do tratamento que o sistema


operacional deve dispensar a ele e dos contextos em que são inseridos, devemos

FACULDADE CATÓLICA PAULISTA | 21


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

tratar agora pontualmente de sua criação e finalização. De acordo com Machado e


Maia (2013), um processo é criado a partir da inclusão de um novo bloco de controle
do processo (Process Control Block – PCB) em sua própria estrutura e da alocação
de espaço de endereçamento de memória. Neste instante, o sistema operacional
já reconhece o processo e pode gerenciá-lo. Depois que assume vários estados
(trataremos deles na sequência) e passa pela execução, um processo é finalizado. A
finalização se dá quando todos os recursos associados ao processo são desalocados
e o PCB é eliminado pelo Sistema Operacional.

3.1.2 Estados de um processo


Conforme citado, um processo passa por diferentes estados ao longo do seu
processamento (MACHADO; MAIA, 2013). Quando chega a vez de um processo ser
remetido à CPU, diz-se que ele fez uma transição de estado, passando de pronto para
o estado de execução. O terceiro estado que um processo pode assumir é o de espera,
que se efetiva quando o prosseguimento do processamento depende de algum evento
externo ou da disponibilização de algum recurso. As mudanças de estado de um
processo são mostradas na figura 5.

Figura 5: mudanças de estado de um processo.


Fonte: adaptado de (MACHADO; MAIA, 2013)

FACULDADE CATÓLICA PAULISTA | 22


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

A melhor maneira de entendermos os processos é colocando-os em perspectiva


prática e inserindo-os no contexto da multiprogramação. Imagine-se como um usuário
que escolhe um programa para converter em outro formato um vídeo longo e gravado
em alta definição. Enquanto este programa é executado, você resolve navegar na web
e, em algum momento, seu programa de e-mail desperta um processo em segundo
plano verificar a chegada de mensagens na caixa de entrada. Assim, podemos
identificar três processos em atividade: o editor de vídeo, o navegador e o programa
de e-mail.
Os Sistemas Operacionais que usamos em computadores pessoais e/ou servidores
mantêm as informações sobre processos em uma tabela mantida pelo próprio
sistema. Nesta tabela – chamada Tabela de Processos – fica armazenado, entre
outros dados, o conteúdo do espaço de endereçamento do processo. Tanenbaum
e Bos (2016) ensinam que as principais chamadas de sistema de gerenciamento de
processos são as que lidam com a criação e o término de processos. Por exemplo, o
processo do shell (ou interpretador de comandos) do sistema recebe uma requisição
do usuário para que um programa seja compilado. Ele (o shell) cria um processo para
executar o compilador e, ao término da compilação, ele próprio executa uma chamada
de sistema para finalizar a si próprio.

Este foi o conteúdo que queríamos compartilhar com você. Para que a abordagem
deste tema não pare por aqui, não deixe de ler nas referências bibliográficas indicadas
o conteúdo que abordamos no texto. Bom estudo!

FACULDADE CATÓLICA PAULISTA | 23


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 4
GERENCIAMENTO DE MEMÓRIA
Olá! Aqui estamos para mais uma aula de Sistemas Operacionais. Em nosso último
encontro tratamos dos processos e os posicionamos como uma parte elementar
de um programa em execução. Descobrimos também que o Sistema Operacional
mantém informações de espaço de endereço, dados do programa e o estado em que
se encontra o processo guardadas em uma tabela de processo. Como cada processo
concorre com outro processo para execução, é necessário que seja implementado
um eficiente gerenciamento da memória ocupada pelos processos, a fim de que
o máximo desempenho seja alcançado com a máxima segurança. É por isso que
neste encontro estudaremos juntos os meios usados pelo Sistema Operacional para
gerenciar a memória principal da máquina. Vamos nessa?

4.1 Introdução
O gerenciamento de memória é a funcionalidade de um sistema operacional que
manipula ou gerencia a memória primária e move os processos entre a memória
principal e o disco durante a execução de um programa. O gerenciamento de memória
mantém o controle de cada local de memória, independentemente de estar alocado
para algum processo ou de estar livre. Ele verifica quanta memória deve ser alocada
aos processos e decide qual processo obterá memória em que momento. Além disso,
o gerenciamento de memória é capaz de identificar quando uma parte da memória é
liberada ou não está alocada e, instantaneamente, atualiza o status daquela porção de
memória. Na sequência, trataremos de elementos que compõem esse gerenciamento.

4.2 Espaço de Endereçamento


O tema que abordaremos nesta seção está relacionado à organização dos
processos na memória do computador. Um sistema computacional usa sua RAM
(Random Access Memory) para armazenar, de forma temporária, os programas em
execução na máquina. Considerando que vários programas estarão em execução de
forma simultânea, algum tipo de organização desses programas na memória deve
ser implementado. Usando termos mais próximos da realidade dos processos, este

FACULDADE CATÓLICA PAULISTA | 24


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

mecanismo está relacionado ao gerenciamento de espaços de endereçamento dos


processos.
Conforme Tanenbaum e Bos (2016), cada processo tem geralmente algum conjunto
de endereços que ele pode usar, tipicamente indo de 0 até algum máximo previamente
definido. Quando um processo precisa ocupar a memória, algumas situações podem
ocorrer. Na situação mais simples, a quantidade máxima de espaço de endereços
que um processo tem é menor do que o espaço disponível na memória da máquina.
Quando isso acontece, o processo poderá ocupar todo o espaço que necessita e não
será necessária nova alocação.
No entanto, nos computadores atuais os endereços são de 32 ou de 64 bits, o que
implica em um espaço de endereçamento de 232 e 264, respectivamente. Com este
cenário, uma pergunta em especial se coloca na frente das outras: qual a providência
tomada pelo Sistema Operacional para resolver o caso de um processo que tem mais
espaço de endereçamento do que o computador tem de memória principal? A resposta,
dada por Tanenbaum e Bos (2016), inclui o conceito de memória virtual, técnica por
meio da qual o sistema operacional mantém parte do espaço de endereçamento na
memória principal e parte no disco, enviando trechos entre um e outro conforme a
necessidade. Para implementar essa técnica, o Sistema Operacional cria a abstração
de um espaço de endereçamento como o conjunto de endereços ao qual um processo
pode se referir. O espaço de endereçamento é desacoplado da memória física da
máquina e pode ser maior ou menor do que a memória física.
O sistema operacional se encarrega de mapear os endereços lógicos para endereços
físicos no momento da alocação de memória para o programa. Existem três tipos de
endereços usados em um programa antes e depois de a memória ser alocada. A
Tabela 1 dá nome e sintetiza estes tipos de endereços.

Nome Descrição
Endereços simbólicos Trata-se dos endereços usados em um código-fonte. Os nomes
de variáveis, constantes e rótulos de instrução são os elemen-
tos básicos do espaço de endereço simbólico.
Endereços relativos Em tempo de compilação, o compilador converte endereços
simbólicos em endereços relativos.
Endereços físicos O processo de carregamento gera estes endereços quando um
programa é carregado na memória principal da máquina.
Tabela 1 – Tipos de endereços de memória e suas descrições
Fonte: Tutorials Point (s.a.)

FACULDADE CATÓLICA PAULISTA | 25


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Os endereços virtuais e físicos são os mesmos em esquemas de vinculação de


endereços em tempo de compilação e tempo de carregamento. Os endereços virtuais
e físicos diferem no esquema de vinculação de endereço em tempo de execução. O
conjunto de todos os endereços lógicos gerados por um programa é conhecido como
espaço de endereço lógico. O conjunto de todos os endereços físicos correspondentes
a esses endereços lógicos é conhecido como espaço de endereço físico.
O mapeamento de tempo de execução do endereço virtual para o físico é feito
pela unidade de gerenciamento de memória (MMU), que é um dispositivo de hardware.
A MMU usa o seguinte mecanismo para converter o endereço virtual em endereço
físico. O valor no registro base é adicionado a cada endereço gerado por um processo
do usuário, que é tratado como deslocamento quando é enviado para a memória. Por
exemplo, se o valor do registro base for 10000, uma tentativa do usuário de usar a
localização de endereço 100 será realocada dinamicamente para a localização 10100.
O programa do usuário lida com endereços virtuais; ele nunca vê os endereços físicos
reais (TUTORIALS POINT, s. a.).

4.3 Carregamento estático e dinâmico


A escolha entre Carregamento Estático ou Dinâmico deve ser feita no momento do
desenvolvimento do programa de computador. Se você tiver que carregar seu programa
estaticamente, então, no momento da compilação, os programas completos serão
compilados e vinculados sem deixar nenhum programa externo ou dependência de
módulo. O vinculador combina o programa de objeto com outros módulos de objeto
necessários em um programa absoluto, que também inclui endereços lógicos.
Se você estiver escrevendo um programa carregado dinamicamente, então seu
compilador irá compilar o programa e para todos os módulos que você deseja incluir
dinamicamente, apenas referências serão fornecidas e o resto do trabalho será feito no
momento da execução. No momento do carregamento, com o carregamento estático,
o programa absoluto (e os dados) são carregados na memória para que a execução
comece. Se você estiver usando o carregamento dinâmico, as rotinas dinâmicas
da biblioteca serão armazenadas em um disco de forma realocável e carregadas na
memória apenas quando forem necessárias para o programa.

4.4 Swapping
O swapping – cuja tradução deve ser entendida como troca - é um mecanismo

FACULDADE CATÓLICA PAULISTA | 26


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

no qual um processo pode ser movido temporariamente da memória principal para


o armazenamento secundário (disco) e disponibilizar essa memória para outros
processos. Mais tarde, o sistema volta o processo do armazenamento secundário para
a memória principal. Embora o desempenho geralmente seja afetado pelo processo
de swapping, ele ajuda a executar quantidades maiores de processos em paralelo e
essa é a razão pela qual este mecanismo também é conhecido como uma técnica de
compactação de memória. A figura 6 ilustra a ideia.

Figura 6: Exemplo de aplicação da técnica de Swapping


Fonte: adaptado de Tutorials Point (s. a.).

O tempo total gasto pelo processo de swapping inclui o tempo que leva para mover
todo o processo para a memória secundária e, em seguida, para copiar o processo de
volta para a memória principal. Vamos supor que o processo do usuário tenha 2048

FACULDADE CATÓLICA PAULISTA | 27


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

KB e um disco rígido padrão onde a troca ocorrerá tenha uma taxa de transferência
de dados em torno de 1 MB por segundo. A transferência real do processo de 1000K
para ou da memória levará:

2048 KB / 1024 KB por segundo


= 2 segundos
= 2.000 milissegundos
Assim, considerando o tempo de entrada e saída serão necessários 4.000
milissegundos completos para a conclusão da operação.

4.5 Alocação de Memória


A memória principal geralmente tem duas partições:
Memória baixa (Low Memory): o Sistema Operacional reside nesta memória.
Memória alta (High Memory): os processos do usuário são mantidos nesta
partição.

O sistema operacional usa o seguinte mecanismo de alocação de memória.


Alocação de partição única: neste tipo de alocação, o esquema de registro de
relocação é usado para proteger os processos do usuário uns dos outros e de alterar o
código e os dados do sistema operacional. O registro de relocação contém o valor do
menor endereço físico, enquanto o registro de limite contém o intervalo de endereços
lógicos. Cada endereço lógico deve ser menor que o registro de limite.
Alocação de múltiplas partições: neste tipo de alocação, a memória principal é
dividida em várias partições de tamanho fixo, onde cada partição deve conter apenas
um processo. Quando uma partição está livre, um processo é selecionado da fila de
entrada e carregado na partição livre. Quando o processo termina, a partição fica
disponível para outro processo.

4.6 Fragmentação
Conforme os processos são carregados e removidos da memória, o espaço livre da
memória é dividido em pequenos pedaços. Às vezes acontece que os processos não
podem ser alocados aos blocos de memória, considerando seu pequeno tamanho,
e os blocos de memória permanecem sem uso. Esse problema é conhecido como
fragmentação. A fragmentação ocorre de duas maneiras:

FACULDADE CATÓLICA PAULISTA | 28


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Fragmentação externa: o espaço total da memória é suficiente para satisfazer


uma solicitação ou para residir um processo nela, mas não é contíguo, portanto, não
pode ser usado.
Fragmentação interna: o bloco de memória atribuído ao processo é maior.
Parte da memória é deixada sem uso, pois não pode ser usada por outro processo.
As figuras 7a e 7b ilustram como a fragmentação pode causar desperdício de
memória e uma técnica de compactação pode ser usada para criar mais memória
livre a partir da memória fragmentada.

Figura 7a: Memória fragmentada antes da compactação


Fonte: adaptado de Tutorials Point (s. a.)

Figura 7b: Aspecto da memória após a compactação


Fonte: adaptado de Tutorials Point (s. a.)

A fragmentação externa pode ser reduzida pela compactação do conteúdo da


memória para colocar toda a memória livre em um grande bloco. Para viabilizar a
compactação, a realocação deve ser dinâmica. Já a fragmentação interna pode ser
reduzida atribuindo efetivamente a menor partição, mas grande o suficiente para o
processo.

4.6 Paginação de Memória


Um computador pode endereçar mais memória do que a quantidade fisicamente
instalada no sistema. Essa memória extra é, na verdade, chamada de memória virtual e
é uma seção de um disco rígido que é configurado para emular a RAM do computador.
A técnica de paginação desempenha um papel importante na implementação da
memória virtual.
Paginação é uma técnica de gerenciamento de memória na qual o espaço de

FACULDADE CATÓLICA PAULISTA | 29


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

endereço do processo é dividido em blocos do mesmo tamanho chamados de páginas


(o tamanho é a potência de 2, entre 512 bytes e 8192 bytes). O tamanho do processo é
medido pelo número de páginas. Da mesma forma, a memória principal é dividida em
pequenos blocos de memória (física) de tamanho fixo chamados frames e o tamanho
de um frame é mantido igual ao de uma página para ter uma utilização ótima da
memória principal e evitar fragmentação externa.
Quando o sistema aloca um quadro para qualquer página, ele traduz esse endereço
lógico em um endereço físico e cria uma entrada na tabela de páginas para ser usada
durante a execução do programa. Quando um processo deve ser executado, suas
páginas correspondentes são carregadas em qualquer quadro de memória disponível.
Suponha que você tenha um programa de 8KB, mas sua memória possa acomodar
apenas 5 KB em um determinado momento, então o conceito de paginação aparecerá.
Quando um computador fica sem RAM, o Sistema Operacional move páginas ociosas
ou indesejadas de memória para a memória secundária para liberar RAM para outros
processos e trazê-los de volta quando necessário para o programa. Este processo
continua durante toda a execução do programa: o Sistema Operacional continua
removendo páginas ociosas da memória principal e as grava na memória secundária
e as traz de volta quando exigido pelo programa.
A paginação reduz a fragmentação externa, mas ainda sofre de fragmentação
interna. Além disso, a paginação é simples de implementar e considerada uma técnica
de gerenciamento de memória eficiente. Devido ao tamanho igual das páginas e
frames, a troca torna-se muito fácil. Por fim, a tabela de páginas requer espaço de
memória extra, portanto pode não ser boa para um sistema com pouca RAM.

4.7 Segmentação de Memória


A segmentação é uma técnica de gerenciamento de memória na qual cada trabalho
é dividido em vários segmentos de tamanhos diferentes, um para cada módulo que
contém peças que executam funções relacionadas. Cada segmento é, na verdade,
um espaço de endereço lógico diferente do programa. Quando um processo deve ser
executado, sua segmentação correspondente é carregada na memória não contígua,
embora cada segmento seja carregado em um bloco contíguo de memória disponível.
O gerenciamento de memória de segmentação funciona de forma muito semelhante
à paginação, mas aqui os segmentos são de comprimento variável, enquanto na
paginação as páginas são de tamanho fixo. Um segmento de programa contém a

FACULDADE CATÓLICA PAULISTA | 30


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

função principal do programa, funções de utilidade, estruturas de dados e assim por


diante. O sistema operacional mantém uma tabela de mapa de segmento para cada
processo e uma lista de blocos de memória livres junto com números de segmento,
seu tamanho e localizações de memória correspondentes na memória principal. Para
cada segmento, a tabela armazena o endereço inicial do segmento e o comprimento
do segmento. Uma referência a um local de memória inclui um valor que identifica um
segmento e um deslocamento.

Este foi o conteúdo que queríamos compartilhar com você. Bons estudos e até a
próxima!

FACULDADE CATÓLICA PAULISTA | 31


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 5
GERENCIAMENTO DE ARQUIVOS
Seja-bem-vinda e seja bem-vindo a mais um encontro de Sistemas Operacionais!
Iniciamos aqui nossa quinta aula e, neste ponto, vale pena voltarmos brevemente nossa
atenção para o que já foi abordado em nossos encontros anteriores. A aula 1 abordou
conceitos fundamentais do tema e posicionou os Sistemas Operacionais como uma
espécie de “gerente” de um sistema computacional. Na segunda aula foram colocados
os tipos mais comuns de Sistemas Operacionais, utilizando o critério de classificação
de hardware em que eles atuavam. Na sequência, os processos foram conceituados
e seus estados foram apresentados. Por fim, tratamos de gerenciamento de memória
e seus mecanismos em nosso último encontro.

5.1 Arquivos
O tema que agora se apresenta está relacionado aos meios pelos quais um Sistema
Operacional gerencia os arquivos e torna transparentes aos usuários as complexas
operações que a eles se aplicam. Conforme pontuam Tanenbaum e Bos (2016), uma
função importante do sistema operacional é esconder as peculiaridades dos discos e
outros dispositivos de E/S e apresentar ao programador um modelo agradável e claro
de arquivos que sejam independentes dos dispositivos.
Um arquivo é uma coleção nomeada de informações relacionadas que são
gravadas no armazenamento secundário, como os discos rígidos ou os SSD (Solid-
State Drive ou Unidade de Estado Sólido). Em geral, um arquivo é uma sequência de
bits, bytes, linhas ou registros cujo significado é definido pelo criador e usuário do
arquivo (TUTORIALSPOINT, S. A.).
A estrutura de arquivo deve estar de acordo com um formato necessário que o
sistema operacional possa entender. Neste sentido, alguns pontos merecem destaque:
um arquivo possui uma determinada estrutura definida de acordo com seu tipo.

5.2 Tipos de arquivos

Neste sentido, é possível destacar três tipos de arquivos:


• Um arquivo de texto é uma sequência de caracteres organizados em linhas.
• Um arquivo-fonte é uma sequência de procedimentos e funções.

FACULDADE CATÓLICA PAULISTA | 32


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

• Um arquivo-objeto é uma sequência de bytes organizados em blocos que são


compreensíveis pela máquina.

O tipo de arquivo refere-se à capacidade do sistema operacional de distinguir


diferentes tipos de arquivo, como arquivos de texto, arquivos-fonte e arquivos binários,
por exemplo. Muitos sistemas operacionais suportam muitos tipos de arquivos.
Sistemas operacionais como MS-DOS e UNIX possuem os seguintes tipos de arquivos:
Arquivos comuns: estes são os arquivos que contêm informações do usuário.
Podem conter texto, bases de dados ou programa executável. O usuário pode aplicar
várias operações em tais arquivos, como adicionar, modificar ou até mesmo remover
o arquivo inteiro.
Arquivos de diretório: estes arquivos contêm uma lista de nomes de arquivos e
outras informações relacionadas a esses arquivos.
Arquivos especiais: estes arquivos também são conhecidos como arquivos
de dispositivo. Eles oferecem configuração a dispositivos físicos como discos,
impressoras, redes e unidade de backup, entre outros.

5.3 Mecanismos de acesso a arquivos


O mecanismo de acesso a arquivos refere-se à maneira como os registros de
um arquivo podem ser acessados. Existem várias maneiras de acessar arquivos e
algumas serão abordadas na sequência:
Acesso sequencial: o acesso sequencial é aquele em que os registros são
acessados em alguma sequência, ou seja, as informações do arquivo são processadas
em ordem, um registro após o outro. Este método de acesso é o mais primitivo.
Compiladores geralmente acessam arquivos desta maneira.
Acesso direto ou aleatório: a organização dos arquivos em disco deve ser
adequada para fornecer acesso aleatório, ou seja, com acesso direto ao registro
desejado. Cada registro tem seu próprio endereço no arquivo, o que possibilita ser
acessado diretamente para leitura ou escrita. Os registros não precisam estar em
nenhuma sequência dentro do arquivo e não precisam estar em locais adjacentes na
mídia de armazenamento.
Acesso sequencial indexado: este mecanismo é construído com base no
acesso sequencial e um índice é criado para cada arquivo que contém ponteiros para
vários blocos. O índice é pesquisado sequencialmente e seu ponteiro é usado para
acessar o arquivo diretamente.

FACULDADE CATÓLICA PAULISTA | 33


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

5.4 Alocação de espaço


Outra forma de enxergarmos os arquivos é na forma de espaços em disco alocados
pelo Sistema Operacional. Eles (os Sistemas Operacionais) implementam três
maneiras principais de alocar espaço em disco para arquivos:

Alocação Contígua: neste tipo de alocação, cada arquivo ocupa um espaço


de endereço contíguo no disco. O endereço de disco atribuído está em ordem linear
e, embora sua implementação seja pouco complexa, a fragmentação externa é um
grande problema com esse tipo de técnica de alocação.
Alocação vinculada (linked allocation): neste caso, cada arquivo carrega uma
lista de links para blocos de disco e um diretório guarda o link (ou ponteiro) para o
primeiro bloco de um arquivo. Apenas de não provocar fragmentação externa, essa
modalidade de alocação apresenta-se ineficiente em caso de arquivo de acesso direto.
Alocação Indexada: o terceiro modo de alocação fornece soluções para
problemas de alocação contígua e vinculada, por meio da utilização de um bloco de
índices que contêm todos os ponteiros para arquivos. Cada arquivo tem seu próprio
bloco de índice que armazena os endereços do espaço em disco ocupado pelo arquivo
e o diretório contém os endereços dos blocos de índice de arquivos.

5.4 Diretório
O principal elemento – e possivelmente o mais conhecido entre os usuários – do
gerenciamento de arquivos executado pelo Sistema Operacional é a organização de
arquivos em diretórios. Para organizar e localizar arquivos de forma rápida e eficiente,
sistemas de arquivos usam diretórios, que são arquivos que contém os nomes e as
localizações de outros arquivos do sistema de arquivos. Diferentemente de outros
arquivos, um diretório não armazena dados de usuários.

ISTO ESTÁ NA REDE

Neste vídeo de pouco mais de 23 minutos é possível ter contato com uma
abordagem interessante de sistemas de arquivos mantidos pelos Sistemas
Operacionais. Assista ao vídeo disponível em: https://www.youtube.com/
watch?v=PKox6AlVTT8. Acesso em: 23 jun. 2021.

De acordo com Deitel (2005), a organização mais simples de sistemas de arquivo


consiste em uma estrutura de diretório de um único nível, o que faz com que todos os

FACULDADE CATÓLICA PAULISTA | 34


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

arquivos sejam armazenados em um único diretório. Esta característica torna essa


estruturação bastante incomum, já que dois arquivos não poderiam ter o mesmo nome
e a organização dos arquivos seria bastante precária. Um sistema de arquivo mais
apropriado é aquele hierarquicamente organizado e que se inicia com um diretório-
raiz e dele se estendem diversos outros subdiretórios.
Um bom meio de abordar uma possível organização de diretório é fornecer exemplo
relacionado ao meio acadêmico, conforme ilustrado na figura 8. Todo arquivo dentro
de uma hierarquia de diretório pode ser identificado e encontrado por meio do seu
nome de caminho a partir do topo da hierarquia do diretório, que é o diretório-raiz.
Os nomes de caminho absolutos efetivam-se pela lista de diretórios que precisam
ser percorridos a partir do diretório-raiz para se chegar ao arquivo, com uma barra
separando cada elemento da hierarquia. A primeira barra indica que o caminho é
absoluto, isto é, começando no diretório-raiz. Como nota, no Windows, o caractere
barra invertida (\) é usado como o separador em vez do caractere da barra (/) por
razões históricas, então o caminho do arquivo acima seria escrito como \Professores\
Prof.Brown\Cursos\CS101.

Figura 8: Um sistema de arquivos para um departamento universitário


Fonte: Tanenbaum e Bos (2016).

FACULDADE CATÓLICA PAULISTA | 35


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Conforme podemos observar na figura 8, as entradas de diretório podem ser de


arquivos ou de outros diretórios, e a organização de arquivos e diretórios é baseada
em uma estrutura hierárquica, conforme já mencionamos. Apenas para fins de
comparação os processos também assumem uma organização hierárquica, mas
a estrutura formada dificilmente apresenta mais do que três níveis e a hierarquia
sempre tem um ciclo muito curto, de alguns poucos minutos, no máximo. Por sua
vez, hierarquias de diretório podem existir por anos e apresentam condições ideais
para a composição em muitos níveis.
O entendimento de como um Sistema Operacional organiza os arquivos e a
necessidade de tornar essa organização semelhante a uma árvore hierárquica é
essencial para a compreensão dos nossos próximos assuntos, especialmente o
gerenciamento de Entrada e Saída feito por um Sistema Operacional. Bons estudos
e até a próxima!

FACULDADE CATÓLICA PAULISTA | 36


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 6
GERENCIAMENTO
DE ENTRADA E SAÍDA
Ao mencionarmos entrada e saída no contexto dos Sistemas Operacionais, a
expressão poderia se tornar vaga se não houvesse a devida especificação dos
seus tipos. A fim de permitir que os usuários possam interagir com o sistema, os
computadores implementam meios para que sejam informadas entradas e obtidas
saídas através de dispositivos apropriados, incluindo teclados, monitores, impressoras
e alguns outros. Como o gerenciamento destes dispositivos é de responsabilidade
do Sistema Operacional, tornou-se necessária a implementação de um subsistema
de E/S, que contêm softwares de uso geral entre vários dispositivos e outros que
gerenciam dispositivos específicos. Sigamos adiante!

6.1 Software de Entrada e Saída


O software de E/S é usado para interação com dispositivos de como mouse,
teclado, dispositivos USB e impressoras, entre outros. Sua organização é feita como
segue (TUTORIALSPOINT, s.a.):
Bibliotecas de nível de usuário: fornecem uma interface simples para que o
programa de usuário execute entradas e saídas. Se você estudou (ou está estudando)
a linguagem C, sabe que a biblioteca stdio fornece recursos para entradas e saídas
nesta linguagem e constitui, portanto, exemplo de biblioteca utilizada pelo usuário.
Módulos de nível de kernel: fornece drivers de dispositivo para interagir com
o controlador de dispositivo e módulos de E/S, independentes de dispositivo usados
pelos drivers de dispositivo.
Hardware: esta camada inclui hardware real e controlador de hardware que
interage com os drivers de dispositivo e promove a possibilidade de interação com o
hardware.

Um conceito bastante importante no projeto de software de E/S é que ele deve


ser independente do dispositivo, o que torna possível escrever programas que podem

FACULDADE CATÓLICA PAULISTA | 37


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

acessar qualquer dispositivo de entrada e saída sem ter que especificar o dispositivo
com antecedência. Por exemplo, um programa que lê um arquivo como entrada deve
ser capaz de ler um arquivo em um disco rígido convencional ou em um SSD (Solid-
State Drive ou Drive de Estado Sólido), sem que seja necessário modificar o programa
para cada dispositivo diferente. A representação da organização do software de
Entrada e Saída é ilustrada na figura 9.

Figura 9: Representação da organização de um software de E/S


Fonte: TUTORIALSPOINT (s. a.).

Ainda no contexto dos elementos da figura 9, três deles devem ser detalhados,
como segue:

6.1.1 Device Driver (Driver de dispositivo)


Device Drivers (ou Drivers de Dispositivo) são módulos de software que podem ser
conectados a um sistema operacional para lidar com um dispositivo específico. O
sistema operacional recebe ajuda de drivers de dispositivo para lidar com todos os
dispositivos de E/S. Os drivers de dispositivo encapsulam o código dependente do
dispositivo e implementam uma interface padrão de tal forma que o código contém

FACULDADE CATÓLICA PAULISTA | 38


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

leituras / gravações de registro específicas do dispositivo. O driver do dispositivo é


geralmente escrito pelo fabricante do dispositivo e entregue junto com o dispositivo
em um CD-ROM.
Tipicamente, um device driver interage com o controlador do dispositivo para
viabilizar entradas e saídas via dispositivo e para realizar o adequado tratamento de
erros. Além disso, ele lida com requisições do dispositivo e o faz da seguinte maneira:
suponha que uma solicitação venha a ler um bloco N. Se o driver estiver ocioso
quando uma solicitação chega, ele começa a executá-la imediatamente. Caso o driver
já estiver ocupado com alguma outra solicitação, ele coloca a nova solicitação na fila
de solicitações pendentes.

6.1.2 Software independente de dispositivo


A função básica do software independente de dispositivo é realizar as funções de
entrada e saída que são comuns a todos os dispositivos e fornecer uma interface
uniforme para o software em nível de usuário. Embora seja difícil escrever um software
totalmente independente do dispositivo, podemos escrever alguns módulos que são
comuns a todos eles. TutorialsPoint (s.a.) fornece uma lista de funções de software de
E/S independente de dispositivo:
- Estabelecimento de uma interface uniforme para drivers de dispositivo.
- Padronização de nomenclatura de dispositivos por meio do estabelecimento
de nomes mnemônicos mapeados para números de dispositivos principais e
secundários.
- Disponibilização de proteção ao dispositivo.
- Fornecimento de um tamanho de bloco independente de dispositivo.
- Oferecimento de uma memória temporária para os dispositivos (também
chamada buffer), já que os dados que saem de um dispositivo não podem ser
armazenados no destino.
- Alocação de armazenamento em dispositivos de bloco.
- Oferecimento de relatório comum de erros.

6.1.3 Bibliotecas de Usuário de Entrada e Saída


Estas são as bibliotecas que fornecem uma interface mais rica, simplificada
e interativa para acesso às funcionalidades dos drivers de dispositivo. A maior parte
dos softwares de E/S de nível de usuário consiste em procedimentos de biblioteca,

FACULDADE CATÓLICA PAULISTA | 39


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

com algumas exceções, como sistema de spool, que é uma maneira de lidar com
dispositivos de E / S dedicados em um sistema de multiprogramação.
Bibliotecas de entrada e saída (por exemplo, stdio) estão no espaço do usuário
para fornecer uma interface para o software de E/S, independentemente de dispositivo.
Por exemplo, putchar(), getchar(), printf() e scanf() são exemplos de biblioteca de E/S
de nível de usuário stdio disponível em programação C e que não estão vinculadas a
nenhuma marca ou configuração de periférico.

6.2 Hardware de entrada e saída


Uma das tarefas mais importantes de um Sistema Operacional é a de gerenciar
vários dispositivos de E/S, incluindo mouse, teclado, unidades de disco, adaptadores
de vídeo, impressoras e dispositivos USB, entre outros.
Um sistema de E/S é necessário para receber solicitações do aplicativo e enviá-la
ao dispositivo físico. Em seguida, ele deve capturar qualquer resposta que vier do
dispositivo e enviá-la para o aplicativo. Os dispositivos de entrada e saída podem ser
divididos em duas categorias:
Dispositivos de bloco: um dispositivo de bloco é aquele com o qual o driver se
comunica enviando blocos inteiros de dados. Por exemplo, discos rígidos, câmeras e
USB, entre outros.
Dispositivos de caracteres: um dispositivo de caracteres é aquele com o qual
o driver se comunica enviando e recebendo caracteres únicos (bytes, octetos). Por
exemplo, portas seriais, portas paralelas, placas de som etc.

6.2.1 Controladores de dispositivo


Controladores de dispositivo são módulos de software que podem ser conectados a
um Sistema Operacional para lidar com um dispositivo específico. O sistema operacional
recebe ajuda de drivers de dispositivo para lidar com todos os dispositivos de E/S. O
Controlador de dispositivo funciona como uma interface entre um dispositivo e um
driver de dispositivo. As unidades de E/S (teclado, mouse, impressora, por exemplo)
geralmente consistem em um componente mecânico e um componente eletrônico,
onde o componente eletrônico é chamado de controlador de dispositivo.
Sempre há um controlador de dispositivo e um driver de dispositivo para cada
dispositivo para se comunicar com os Sistemas Operacionais. Um controlador de
dispositivo pode ser capaz de lidar com vários dispositivos. Como interface, sua

FACULDADE CATÓLICA PAULISTA | 40


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

principal tarefa é converter o fluxo de bits serial em bloco de bytes, realizar a correção
de erros conforme necessário. Qualquer dispositivo conectado ao computador é
conectado por um plugue e soquete, e o soquete é conectado a um controlador de
dispositivo. A figura 10 ilustra um modelo para conectar a CPU, memória, controladores
e dispositivos de entrada e saída.

Figura 10: Conexão entre dispositivos e seus controladores


Fonte: TUTORIALSPOINT (s. a.)

Embora a ilustração nos faça imaginar que a comunicação da CPU com os


dispositivos seja simples, há alguma diversidade de abordagens que precisaram ser
implementadas e que serão abordadas na sequência. O ponto central aqui é que a
CPU deve ter uma maneira de passar informações para um dispositivo de entrada e
saída.
Instrução especial: esta abordagem usa instruções de CPU que são feitas
especificamente para controlar dispositivos de entrada e saída. Essas instruções
normalmente permitem que os dados sejam enviados a um dispositivo de E/S ou
lidos de um dispositivo de E/S.
Entrada e saída mapeada em memória: a abordagem de E/S mapeada em
memória, o mesmo espaço de endereço é compartilhado entre a memória e os
dispositivos de entrada e saída. O dispositivo é conectado diretamente a determinados
locais da memória principal para que seja possível a ele transferir blocos de dados a
partir da memória (ou para ela) sem passar pela CPU.
Ao usar esta técnica, o sistema operacional aloca o buffer na memória e informa o
dispositivo de entrada e saída para usá-lo ao enviar dados à CPU. O dispositivo de E/S

FACULDADE CATÓLICA PAULISTA | 41


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

opera de forma assíncrona com a CPU, ocorrerá uma interrupção na CPU quando o
processo estiver concluído. A vantagem desse método é que cada instrução que pode
acessar a memória pode ser usada para manipular um dispositivo de entrada e saída,
o que viabiliza seu uso na maioria dos dispositivos de alta velocidade, como discos e
interfaces de comunicação.
Direct Access Memory (DMA ou Acesso Direto à Memória): dispositivos lentos
(como teclados, por exemplo) irão gerar uma interrupção na CPU após cada byte
ser transferido. Se um dispositivo rápido, como um disco, gerasse uma interrupção
para cada byte, o Sistema Operacional gastaria a maior parte do tempo tratando
dessas interrupções. Portanto, um computador típico usa hardware de acesso direto à
memória (DMA) para reduzir essa sobrecarga.
O mecanismo de acesso direto à memória (DMA) implica que a CPU concede
autoridade ao módulo de E/S para ler ou gravar na memória sem que ela (a CPU)
participe do processo. O próprio módulo DMA controla a troca de dados entre a
memória principal e o dispositivo. A CPU está envolvida apenas no início e no final da
transferência e é interrompida apenas após a transferência do bloco inteiro.
O acesso direto à memória precisa de um hardware especial denominado
controlador DMA (DMAC) que gerencia as transferências de dados e controla o
acesso ao barramento do sistema. Os controladores são programados com ponteiros
de origem e de destino, ou seja, que apontam onde ler e onde gravar os dados, mais
os contadores para rastrear o número de bytes transferidos.
Este foi, portanto, o conteúdo a ser compartilhado. Mantenha-se firme nos estudos
e até a próxima!

FACULDADE CATÓLICA PAULISTA | 42


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 7
GERENCIAMENTO DE
PROTEÇÃO E SEGURANÇA
Vai longe o tempo em que desenvolver e implantar medidas de segurança aos
computadores e seus dispositivos periféricos eram providências secundárias e restritas
a atuação de alguns poucos profissionais. Com a crescente valorização de um ativo
chamado informação, intensificaram-se os esforços para o aumento da segurança da
CPU, memória principal, disco e programas. Como não poderia deixar de ser, o Sistema
Operacional exerce importante função neste contexto. Seja bem-vinda e seja bem-vindo
a este encontro em que trataremos dos meios e dos objetivos de segurança e proteção
aplicados aos Sistemas Operacionais e das principais ameaças que podem comprometer
a segurança de todo um sistema computacional.

7.1 Proteção
Embora a necessidade de proteção direcionada a um sistema de computação possa
parecer óbvia é conveniente investirmos tempo para investigarmos com mais detalhes
algumas razões. A primeira – e mais imediata – é que preciso impedir a violação maldosa
e intencional de uma restrição de acesso por um usuário. Como sabemos, nem todos os
usuários atendidos por um Sistema Operacional podem ter acesso irrestrito aos recursos
por ele oferecidos e uma violação dos limites impostos pode comprometer seriamente o
sistema.
Ocorre que a questão da proteção envolve um objetivo mais genérico, de elevada
importância e que deve ser perseguido pelos projetistas: a garantia de que os programas
executados no computador usem os recursos do sistema em estrito acordo com as
políticas estabelecidas e este requisito é fundamental para um sistema confiável e, ainda
neste sentido, medidas adequadas de proteção irão aumentar a confiabilidade geral do
sistema ao detectarem eventuais erros nas interfaces dos subsistemas que também
interagem neste contexto.
Conforme nos ensinam Silberschatz, Baer e Gagne (2015), um recurso desprotegido
não pode se defender contra a sua incorreta utilização por um usuário não autorizado.
De forma oposta, um sistema orientado à proteção está preparado para diferenciar o
uso autorizado do não autorizado e, neste contexto, vale diferenciarmos mecanismos de
proteção de políticas de proteção: o papel da proteção em um sistema de computação é

FACULDADE CATÓLICA PAULISTA | 43


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

fornecer um mecanismo para a imposição das políticas que governam o uso de recurso
e que podem ser estabelecidas durante o projeto do sistema, ou pelos próprios usuários
individuais, a fim de protegerem seus arquivos e programas.
Completam os autores que a proteção não é uma preocupação apenas do projetista de
um sistema operacional. O programador de aplicações também precisa usar mecanismos
de proteção para proteger os recursos criados e suportados por um subsistema de
aplicação contra a má utilização. As políticas podem (e devem) ser alteradas com o
tempo e em função de determinadas situações e elas se diferem dos mecanismos de
segurança nos seguintes termos: os mecanismos determinam como algo será feito; as
políticas decidem o que será feito.
Para que o entendimento do conceito de proteção e do seu alcance seja mais
abrangente, podemos posicionar os elementos de um sistema de computação como uma
coleção de processos e de objetos. Blocos de memória, periféricos, discos, programas,
drivers de dispositivo e tudo mais que se puder identificar no contexto podem fazer parte
desta coleção e cada um deles possui um nome que o diferencia dos demais. Feita essa
separação é possível então estabelecer de forma rigorosa as operações que se aplicam
a cada objeto. Alguns exemplos nos ajudam a esclarecer a prática: em uma CPU pode-
se apenas executar programas; em trechos da memória principal pode-se ler dou gravar
dados e arquivos podem ser criados, abertos, lidos, gravados, fechados e excluídos.
Ainda no contexto do domínio de uma política de proteção, um processo deve ter
permissão para acessar os recursos computacionais para os quais lhe foi dada a
permissão de acesso. No mesmo sentido, um processo deve ter acesso aos recursos de
que necessita para executar sua tarefa e a nenhum mais. A este princípio dá-se o nome
de “conhecer-o-necessário” e seu objetivo é o de limitar eventuais danos que um processo
incorreto pode ocasionar.

ISTO ACONTECE NA PRÁTICA


Silberschatz, Baer e Gagne (2015) nos dão o seguinte exemplo prático da limitação
de acesso de recursos: quando o processo p invoca o procedimento A(), o
procedimento deve ser autorizado a acessar somente suas próprias variáveis e
os parâmetros formais passados a ele. Assim, ele não deve ser capaz de acessar
todas as variáveis do processo p. Da mesma forma, considere o caso em que
o processo p invoca um compilador para compilar um arquivo específico. O
compilador não deve ser capaz de acessar arquivos arbitrariamente, mas deve ter
acesso apenas a um subconjunto bem definido de arquivos (tais como o arquivo-
fonte, o arquivo de listagem, e assim por diante) relacionado com o arquivo a ser
compilado. Inversamente, o compilador pode ter arquivos privados usados para fins
de contabilização ou otimização que o processo p não deve ser capaz de acessar.

FACULDADE CATÓLICA PAULISTA | 44


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Como o próprio título desta nossa aula sugere, o conceito e as práticas de proteção
estão profundamente associados às questões de segurança do sistema e este será o
próximo tema que abordaremos. Sigamos adiante!

7.2 Segurança
A segurança de um Sistema Operacional está relacionada ao fornecimento de um
sistema de proteção aos recursos do sistema do computador, como CPU, memória,
disco, programas e, mais importante, os dados armazenados. Se um programa de
computador for executado por um usuário não autorizado, ele poderá causar danos
graves ao computador ou aos dados nele armazenados. Portanto, um sistema de
computador deve ser protegido contra acesso não autorizado, acesso malicioso à
memória do sistema e vírus, entre outras ameaças. Na sequência serão investigados
alguns elementos relacionados à segurança do sistema e ameaças que podem colocar
em risco esta segurança.
Um grande problema a ser resolvido pelo Sistema Operacional é a autenticação de
usuários e todo o sistema de proteção irá depender do sucesso deste procedimento. A
autenticação se refere à identificação de cada usuário do sistema e à associação dos
programas em execução a esses usuários. É responsabilidade do Sistema Operacional
criar um sistema de proteção que garanta que um usuário que está executando um
determinado programa seja autêntico. Mas como determinar se uma identidade de
usuário é autêntica? Sistemas operacionais geralmente identificam / autenticam
usuários usando três maneiras, conforme segue:
• Nome de usuário / senha: o usuário precisa inserir um nome de usuário e
uma senha registrados no sistema operacional para fazer o login no sistema. Esta
modalidade requer, portanto, que o usuário conheça algo.
• Cartão / chave do usuário – aqui o usuário precisa perfurar o cartão no slot
de cartão ou inserir a chave gerada pelo gerador de chave na opção fornecida pelo
sistema operacional para fazer login no sistema. Essa modalidade requer, portanto,
que o usuário tenha posse de algo.
• Atributo do usuário: o usuário precisa se identificar com sua impressão digital
ou imagem da retina por meio do dispositivo de entrada designado pelo sistema
operacional para fazer acesso ao sistema.

A forma mais comum para autenticar um usuário é pelo uso de senhas e o

FACULDADE CATÓLICA PAULISTA | 45


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

procedimento é tão simples quanto conhecido: quando o usuário se identifica pelo


ID de usuário ou nome da conta, uma senha é solicitada. Se a senha fornecida pelo
usuário coincidir com a senha armazenada no sistema, ele assumirá que a conta está
sendo acessada pelo seu proprietário (SILBERSCHATZ; BAER; GAGNE, 2015).

ISTO ESTÁ NA REDE

Existem dicas para criação de senhas e ferramentas para seu armazenamento que
nos ajudam a gerenciar a infinidade de códigos que acumulamos no decorrer da
vida. Em pouco mais de 10 minutos, o vídeo aqui sugerido aponta caminhos para
guardar senhas de forma segura e eficiente. Disponível em: https://www.youtube.
com/watch?v=JzXCNSFVtXw. Acesso em: 28 jun. 2021.

Um incremento de segurança pode ser obtido pelas senhas de uso único (one time
password), que fornecem segurança adicional junto com a autenticação normal. Em
um procedimento de senha descartável, uma senha exclusiva é exigida toda vez que
o usuário tenta fazer o login no sistema. Depois que uma senha descartável é usada,
ela não pode ser usada novamente. As senhas de uso único são implementadas
basicamente de três maneiras:
Números aleatórios: neste caso, os usuários recebem cartões com números
impressos junto com os alfabetos correspondentes. O sistema solicita números
correspondentes a alguns alfabetos escolhidos aleatoriamente.
Chave secreta: aqui o usuário recebe um dispositivo de hardware que pode
criar uma identidade secreta mapeada com a identidade do usuário. O sistema pede
essa ID secreta que deve ser gerada todas as vezes antes do login.
Senha de rede: alguns aplicativos comerciais enviam senhas de uso único para
o usuário no celular ou e-mail registrado, que devem ser inseridas antes do login.

FACULDADE CATÓLICA PAULISTA | 46


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

ANOTE ISSO

Dada a relevância do tema e o elevado nível de atenção dirigida a ele, foram criadas
classificações de segurança em sistemas de computador. Essas classificações
foram desenvolvidas de acordo com os Critérios de Avaliação do Departamento de
Defesa dos EUA e dividem-se em A, B, C e D. Tais especificações são amplamente
utilizadas para determinar e modelar a segurança de sistemas e de soluções de
segurança. A seguir está uma breve descrição da maior e da menor classificação,
segundo a TutorialsPoint (s.a.):
- Tipo A: nível mais alto. Usa especificações de projeto formais e técnicas de
verificação. Concede alto grau de garantia de segurança do processo.
- Tipo D: nível mais baixo. Oferece proteção mínima. O MS-DOS e o Windows 3.1
encontram-se nesta categoria.

7.2.1 Ameaças
Os processos e o kernel do sistema operacional realizam a tarefa designada conforme
as instruções. Se um programa de usuário fizer com que esses processos executem
tarefas maliciosas, isso será conhecido como ameaças de programa. Um exemplo
comum de ameaça de programa é um programa instalado em um computador que
pode armazenar e enviar credenciais de usuário através da rede para algum hacker. A
seguir está a lista de algumas ameaças de programas bem conhecidas.
Cavalo de Tróia: esse programa captura as credenciais de login do usuário e
as armazena para enviá-las a usuários mal-intencionados, que podem fazer login no
computador posteriormente e acessar recursos do sistema.
Alçapão (Trap Door): se um programa projetado para funcionar corretamente
possui uma falha de segurança em seu código e executa ações ilegais sem o
conhecimento do usuário, então este programa é chamado para ser um alçapão. Na
lição de Silberschatz, Baer e Gagne (2015), um alçapão inteligente poderia ser incluído
em um compilador. O compilador poderia gerar um código-objeto padrão assim como
um alçapão, independentemente do código-fonte que estivesse sendo compilado. Essa
atividade é particularmente ardilosa, já que uma busca no código-fonte do programa
não revelará nenhum problema. Apenas o código-fonte do compilador conteria as
informações.
Bomba lógica: a bomba lógica remete a uma situação em que um programa se
comporta mal apenas quando certas condições são encontradas, caso contrário, ele
funciona como um programa genuíno. Segundo Silberschatz, Baer e Gagne (2015),

FACULDADE CATÓLICA PAULISTA | 47


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

trata-se de um programa que inicia um incidente de segurança apenas sob certas


circunstâncias. Quando um conjunto predefinido de parâmetros é encontrado, a brecha
de segurança é então criada. Esse modo de operação torna essa ameaça de difícil
detecção. Um programador, por exemplo, pode escrever um código para detectar se
ele ainda está empregado; se essa verificação fornecer resposta negativa, poderia ser
gerado um procedimento para permitir acesso remoto, ou poderia ser lançado um
código para causar danos ao site.
Vírus: um vírus é um fragmento de código embutido em um programa legítimo.
Como o nome sugere, ele pode se replicar no sistema do computador. Os vírus são
altamente perigosos e podem modificar / excluir arquivos do usuário, além de travar
sistemas. Conforme o usuário acessa o programa, o vírus começa a ser incorporado
em outros arquivos / programas e pode tornar o sistema inutilizável para o usuário.
Vírus de arquivo, de inicialização, de macro e de código-fonte são alguns dos principais
tipos existentes.

O conteúdo teórico deste encontro fica por aqui, mas há muito mais a ser descoberto
na literatura indicada. Até a próxima!

FACULDADE CATÓLICA PAULISTA | 48


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 8
THREADS
Olá! Aqui estamos para mais um encontro da disciplina de Sistemas Operacionais.
Conforme já tivemos oportunidade de abordar em aulas anteriores, o processo
é o elemento mais significativo em qualquer Sistema Operacional. Embora seu
conceito tenha sido apresentado de forma mais abrangente, podemos entendê-lo
como um programa em execução e sua existência fornece suporte para operações
aparentemente concorrentes quando uma CPU apenas está disponível. Nosso estudo
agora se volta para os threads, um elemento intimamente relacionado aos processos
e que são tratados como processo dentro de um processo. Instigante, não acha?

8.1 Conceituação
É sempre bom lembrarmos que os processos são fundamentais para que a
concorrência seja possível nas aplicações. De acordo com Machado e Maia (2013),
os sistemas operacionais utilizam três maneiras diferentes para implementá-la:
processos independentes, subprocessos e threads. Embora importantes, as duas
primeiras maneiras não serão tratadas aqui.
Construiremos o conceito de thread em partes. Deitel et al (2005) distinguem os
processos tradicionais dos threads pelo modo como os espaços de endereçamento
são alocados. Segundo os autores, quando um processo é criado, recebe um espaço
de endereçamento alocado exclusivamente a ele. Quando um thread é criado ele
compartilha o espaço do endereçamento do processo (DEITEL et. al., 2005).
O fato de um thread compartilhar o espaço de memória (entre outros atributos) de
um processo o torna mais “leve” e mais eficiente na realização das suas tarefas, daí
serem chamados de processo leve (Lightweight Process ou LWP). Por depender do
compartilhamento dos atributos de um processo, a existência de um thread não faz
sentido de maneira isolada; eles normalmente pertencem a processos tradicionais,
também chamados processos pesados (Heavyweight Process ou HWP).
A construção do conceito de threads passa agora pela abordagem do estreito
relacionamento deles com a concorrência e paralelismo. Linguagens de programação
atuais – incluindo Java e produtos .NET - disponibilizam primitivas de concorrência

FACULDADE CATÓLICA PAULISTA | 49


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

para o programador. Esta tecnologia, suportada por sistemas operacionais modernos


e denominada multithreading, dá a ele capacidade para criar segmentos de código que
podem ser executados de forma independente do restante da aplicação (DEITEL et al.,
2005).
Em um ambiente de múltiplos threads (multithread), os programas estão associados
não a processos, mas a threads. Neste ambiente, o processo pode compartilhar seu
espaço de compartilhamento com vários outros threads, conforme já tratamos. A
figura 11 exibe representação de um ambiente multithread.

Figura 11: representação de um ambiente de multithread


Fonte: (MACHADO; MAIA, 2013, p. 84).

Isto posto, a definição de thread pode ser compreendida.

De forma simplificada, um thread pode ser definido como uma sub-


rotina de um programa que pode ser executada de forma assíncrona,
ou seja, executada concorrentemente ao programa chamador. O
programador deve especificar os threads, associando-os às sub-
rotinas assíncronas (MACHADO; MAIA, 2013).

FACULDADE CATÓLICA PAULISTA | 50


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Feita a conceituação do termo, passamos agora a analisar a utilização dos threads


em aplicações comuns. De maneira sucinta, também trataremos do ciclo de vida de
um thread.

8.2 O ciclo de vida de um thread


O conteúdo que estudamos até agora nos sugere que a efetiva implantação do
multithreading – seja nos sistemas operacionais, seja nas aplicações - não é tarefa
simples. No entanto, sua aplicação pode melhorar sensivelmente a interatividade e o
desempenho das aplicações. Deitel et al. (2005) nos fornecem como exemplo deste
ganho o funcionamento de um servidor web. Como estes servidores recebem muitas
requisições de aplicações remotas, cada uma delas é atendida com um thread próprio.
Para cada requisição recebida, um novo thread é gerado. Ele é capaz de interpretar a
requisição, recuperar a página e transmiti-la ao cliente. Muito conveniente, não acha?
Outra questão diretamente ligada ao desempenho da aplicação relaciona-se às
aplicações monothread comparadas às multithread. Na primeira modalidade, atividades
que poderiam ser tratadas de forma independente não podem ser escalonadas para
execução em mais de um processador, o que afasta a possibilidade de se implantar
paralelismo entre execuções. Em oposição, em um ambiente multithread é possível
que os threads compartilhem o processador (ou um conjunto deles) a fim de que várias
tarefas sejam executadas ao mesmo tempo e não em sequência. Você já imaginou o
quanto isso significa em ganho de desempenho?
Assim como os processos, os threads também têm seu ciclo de vida. A criação
de um thread guarda semelhanças com a criação de um processo. Tomando como
exemplo uma aplicação em Java, um thread recém-criado inicia seu ciclo no estado
nascido (born) e assim permanece até que a aplicação o inicie, fazendo-o passar para
o estado pronto (runnable). Após sua execução, o thread assume o estado morto (dead)
e nesta situação seus recursos são liberados e ele é removido do sistema (DEITEL et
al., 2005). Os outros estados possíveis incluem:
Bloqueado: ocorre quando o thread deve aguardar pela conclusão de um pedido
de entrada/saída.
Espera: algum outro evento que demande que o thread aguarde pela sua
conclusão o coloca em estado de espera.
Adormecido: um thread pode entrar no estado adormecido por um tempo
determinado. Quando este tempo expira, ele volta ao estado de pronto.

FACULDADE CATÓLICA PAULISTA | 51


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

ISTO ESTÁ NA REDE

Conheça elementos práticos do assunto assistindo ao vídeo disponível em https://


www.youtube.com/watch?v=gILOMDm1xxk. (Acesso em: 30 de jun. de 2021).
Neste vídeo, o professor Isidro explica, na prática, como criar um programa simples
em Java que manipula threads. Imperdível!

8.3 Modelos de threads


A implementação dos threads não é feita de maneira única. A depender dos
níveis de desempenho e de paralelismo desejados para a aplicação, uma das três
implementações dos pacotes de thread será adotada. O grau de vinculação entre o
sistema operacional e a criação das aplicações multithread também será decisivo para
a escolha de um dos modelos. Três das mais comuns implementações de threads
incluem:

Threads em modo usuário: os TMU são implementados pela aplicação e não


pelo sistema operacional (MACHADO; MAIA, 2013). Em outras palavras, eles executam
operações no espaço do usuário e são transparentes para o sistema operacional.
Deitel et al. (2005) nos ensinam que quando um processo emprega threads de usuário,
são as bibliotecas de nível de usuário que realizam as operações de escalonamento
nos threads, já que o sistema operacional não está ciente de que o processo contém
vários threads.
A desvinculação entre a execução dos threads e o controle do sistema
operacional acarreta algumas vantagens relacionadas a esta implementação. A
primeira decorre desnecessidade de o sistema operacional suportar threads. Outra
vantagem está relacionada com o escalonamento dos threads: já que o suporte
aos threads é dado por uma biblioteca de funções, os desenvolvedores podem
promover o escalonamento conforme necessidades específicas de desempenho
das aplicações. O desempenho, aliás, é a terceira vantagem que podemos relacionar
a este modelo: os TMU são rápidos e eficientes por dispensarem acessos ao kernel
do sistema operacional, evitando assim a mudança de modo de acesso (usuário-
kernel-usuário) (MACHADO; MAIA, 2013). A figura 12 ilustra que, com a utilização
de bibliotecas, múltiplos threads podem ser criados, compartilhando o mesmo
espaço de endereçamento do processo.

FACULDADE CATÓLICA PAULISTA | 52


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Figura 12: Threads em modo usuário


Fonte: adaptado de (MACHADO; MAIA, 2013)

E se os threads pudessem ser controlados pelo sistema operacional? O programador


obteria alguma vantagem nisso?

Threads em modo Kernel: este termo é utilizado para descrever threads


pertencentes às aplicações, mas gerenciadas pelo kernel. Da perspectiva do sistema
operacional, a unidade de escalonamento é a thread, em vez do processo. (STUART,
2011). Os TMK (Threads em modo kernel ou threads do kernel) são implementados
diretamente pelo núcleo do sistema operacional, por meio de chamadas a rotinas
do sistema que oferecem todas as funções de gerenciamento e sincronização
(MACHADO; MAIA, 2013).
A forma de implementação dos TMK feita pelo Linux pode ser tomada como um
caso particular: o termo é utilizado para descrever threads que atuam no espaço de
memória do kernel, ao invés de atuarem no espaço de memória reservado ao usuário.
Por isso, essa implementação permite ao usuário escrever no próprio kernel como um
programa multithread. Como esta implementação exige que o sistema operacional
forneça, para cada thread de usuário, um thread de núcleo, ela é conhecida como
mapeamento um-para-um.
Deste tipo de implementação podemos extrair ao menos uma vantagem evidente
em relação ao modo usuário: como os threads são implementados diretamente pelo
kernel, o sistema operacional pode escalonar vários threads simultaneamente em um
ou mais processadores. Em caso de múltiplos processadores disponíveis, os threads
de um mesmo processo podem ser executados simultaneamente (MACHADO; MAIA,
2013).
No entanto, a interferência direta do sistema operacional no processamento e a

FACULDADE CATÓLICA PAULISTA | 53


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

necessidade de gerenciamento de todos os threads têm um custo: o tempo despendido


nas chamadas de rotinas do sistema. Este fato acaba baixando o desempenho das
aplicações em execução neste modelo.
Isto posto, cabe a pergunta: seria possível unir as melhores características das
implementações de núcleo e de usuário em um só modelo? Os projetistas dos sistemas
operacionais Windows e Solaris responderam “sim” a esta pergunta. Sigamos adiante.
Combinação de usuário e de kernel: a combinação de implementação de threads de
usuário e de núcleo (ou kernel) é também conhecida como mapeamento de threads
muitos-para-muitos, pois mapeia muitos threads de usuário para um conjunto de threads
de núcleo. Uma de suas vantagens relaciona-se com o aumento de desempenho que
as aplicações conseguem ao personalizar o algoritmo de escalonamento da biblioteca
de suporte a threads (DEITEL et al., 2005).
Tendo colocado em foco as três implementações dos threads, que tal criarmos
agora um resumo das principais vantagens e características de cada uma delas? A
tabela 2 exibe este resumo.

Implementação Característica Vantagens Desvantagem


Threads criados Maior portabilidade; Não escalam bem para
por bibliotecas maior liberdade para sistemas com multipro-
Modo usuário
em tempo de exe- o desenvolvedor. cessadores.
cução
O sistema opera- O kernel pode despa- Menor portabilidade;
cional fornece to- char os threads de sobrecarga nas opera-
das as rotinas de um processo para ções de escalonamen-
Modo kernel
gerenciamento e diversos processado- to, pois elas envolvem o
sincronização res, simultaneamen- núcleo.
te.
Mapeamento de Melhora no desem- Adição de complexida-
muitos threads penho das aplicações de no projeto do siste-
Híbrido de usuário para por meio da persona- ma operacional.
um conjunto de lização do algoritmo
threads de núcleo. de escalonamento.
Tabela 2 – resumo das características das implementações
Fonte: elaborado pelo autor (2021).

Este foi o conteúdo que planejamos compartilhar com você neste encontro.
Esperamos que o aproveitamento seja ótimo e que você persevere nas demais
atividades propostas. Até breve!

FACULDADE CATÓLICA PAULISTA | 54


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 9
UTILIZANDO THREADS
Em nosso último encontro tivemos a oportunidade de conhecer itens fundamentais
dos threads, incluindo seu ciclo de vida e seus modelos. Agora, nossa missão é a
de explorarmos as diversas possibilidades de utilização deste recurso, incluindo as
razões para sua utilização. Antes, porém, vale resgatarmos rapidamente alguns
elementos estudados na aula passada. Os sistemas operacionais utilizam três
maneiras diferentes para implementar concorrência entre aplicações: processos
independentes, subprocessos e threads. Os processos tradicionais distinguem-se dos
threads pelo modo como os espaços de endereçamento são alocados: quando um
processo é criado, recebe um espaço de endereçamento alocado exclusivamente a
ele.
Em oposição, quando um thread é criado ele compartilha o espaço do
endereçamento do processo. Linguagens de programação atuais disponibilizam meios
de implementação de concorrência para o programador. Esta tecnologia dá a ele
(programador) capacidade para criar segmentos de código que podem ser executados
de forma independente do restante da aplicação. De forma simplificada, um thread
pode ser definido como uma sub-rotina de um programa que pode ser executada de
forma assíncrona, ou seja, executada concorrentemente ao programa chamador. A
utilização de threads nas aplicações normalmente aumenta seu desempenho. Um
exemplo disso pode ser observado no funcionamento de servidores web. O ciclo de
vida de um thread inclui os estados nascido, pronto para execução, morto, bloqueado,
em espera e adormecido.
Em relação à implementação, vale recordar que, em modo usuário, os threads
são implementados pela aplicação e não pelo sistema operacional. Eles executam
operações no espaço do usuário e são transparentes para o sistema operacional.
As vantagens dessa implementação incluem a desnecessidade de o sistema
operacional suportar threads, o escalonamento conforme necessidades específicas
de desempenho das aplicações e bom desempenho.
Os threads em modo Kernel são implementados diretamente pelo núcleo do
sistema operacional, por meio de chamadas a rotinas do sistema que oferecem

FACULDADE CATÓLICA PAULISTA | 55


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

todas as funções de gerenciamento e sincronização. Destaca-se como vantagem a


possibilidade de se promover o escalonamento de vários threads simultaneamente
em um ou mais processadores. Por fim, a combinação de implementação de usuário
e de Kernel mapeia muitos threads de usuário para um conjunto de threads de núcleo.
Uma de suas vantagens está relacionada com o aumento de desempenho que as
aplicações conseguem ao personalizar o algoritmo de escalonamento da biblioteca de
suporte a threads. Feitas essas considerações, iniciamos esta aula pela investigação
dos motivos para a existência dos threads. Sigamos juntos!

9.1 A existência dos threads


Existem algumas razões para a existência dos threads e todas elas são muito bem
fundamentadas. Tanenbaum e Bos (2016) nos ajudam a compreender este fato por
meio da exposição de quatro motivos:
- Multiplicidade de atividades: esta é a principal razão para a existência dos
threads e ela se baseia no fato de que nas diversas aplicações em execução em dado
momento, múltiplas atividades estão ocorrendo simultaneamente e algumas delas
podem bloquear em intervalos regulares. Ao decompormos uma aplicação dessas
em múltiplos threads sequenciais que são executados quase que paralelamente, o
modelo de programação torna-se mais simples.
- Mais leves que os processos: no contexto da Computação é muito comum
usarmos os termos “leve” e “pesado” para referenciar tempo de processamento e
utilização de recursos de hardware em menor ou maior grau. No caso dos threads,
eles são criados e destruídos mais rapidamente do que os processos. Em muitos
sistemas, criar um thread é algo de 10 a 100 vezes mais rápido do que criar um
processo, o que é um ganho que não pode ser ignorado.
- Ganho de desempenho: embora esta terceira razão esteja fortemente
relacionada à segunda, ainda assim é possível colocarmos esse ganho de desempenho
em uma determinada circunstância: de fato, o uso de threads não resulta em ganho
de desempenho quando todos eles são limitados pela CPU. No entanto, a execução
de uma aplicação será notadamente acelerada quando houver grande carga de
processamento computacional ou grande quantidade de operações de entrada/
saída, já que os threads possibilitarão sobreposição dessas atividades. Além disso, a
utilização dos threads é especialmente útil em sistemas com múltiplas CPUs, em que
o paralelismo real é possível.

FACULDADE CATÓLICA PAULISTA | 56


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

9.2 Exemplo de utilização de threads: processador de textos


Para nossa adequada compreensão das vantagens dos threads, vamos considerar
o funcionamento de um processador de textos, ainda segundo Tanenbaum e Bos
(2016). Você está escrevendo um livro e resolve compô-lo em um só arquivo, já que
uma mudança global em um estilo, por exemplo, seria aplicada muito mais facilmente
do que se a obra estivesse dividida em diversos arquivos. Agora imagine o que
acontece quando você apaga um parágrafo da primeira página do seu livro (que já
está com 500 páginas!) e, em seguida, emite um comando ao programa para ir até a
página 320: o processador de texto deverá reformatar o livro todo até chegar à página
desejada, o que pode provocar demora no processamento da ação.
É nesta circunstância que os threads serão decisivos. Vamos imaginar que o
processador de texto tenha sido implementado com apenas dois threads: um que
interage com o usuário e o outro que trata da reformatação que mencionamos.
Assim que o parágrafo da primeira página é apagado, o thread interativo comunica
ao thread de reformatação que ele deve reformatar o livro todo. Efetivada essa ação
de comunicação, o thread interativo volta a atender ao teclado em operações simples
e rápidas, como rolar a página. Enquanto isso, o thread de reformatação estará
“trabalhando” intensamente.
Esta configuração não chega a ser precária ou prejudicial ao bom andamento da
atividade, mas será que o projeto do processador não poderia prever a atuação de
mais um thread? A resposta é sim e a atuação deste terceiro elemento em nosso
exemplo seria voltada ao armazenamento dos dados – ou ao disco, conforme ilustra
a figura 13.

Figura 13: um processador de texto com três threads


Fonte: adaptado de Tanenbaum e Bos (2016, p. 58)

FACULDADE CATÓLICA PAULISTA | 57


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Mesmo os processadores de texto mais simples têm a capacidade de salvar


automaticamente o arquivo inteiro para o disco em intervalos regulares (frequentemente
ajustados para poucos minutos), a fim de proteger o usuário contra o perigo de perder
um dia de trabalho caso o programa trave ou falte energia elétrica. Assim, o terceiro
thread pode fazer backups de disco sem interferir nos outros dois. Se considerarmos
três threads, o modelo de programação certamente ficará mais simples e a tabela 3
resume esta situação:

Thread Função Situações típicas


Interação Relacionamento (ou interação) Solicitação de rolagem de página, apli-
com o usuário. cação de zoom e acesso a um recurso
de formatação de fonte.
Reformatação Aplica reformatação em todo o Rearranjo de todas as linhas após
texto. operação de inclusão ou exclusão de
trechos do texto.
Gravação Executa a transferência do con- Gravações em disco periódicas auto-
teúdo da RAM para o disco rígido. máticas ou solicitadas pelo usuário.
Tabela 3 – Síntese do funcionamento do processador de textos com três threads
Fonte: elaborado pelo autor.

Não é difícil percebermos, portanto, que a utilização dos threads provoca benefícios
na execução dos programas de usuários, normalmente relacionados ao aumento
da velocidade de execução. Mas será que apenas um perfil de aplicação pode se
beneficiar das caraterísticas dos threads? A resposta está nas próximas linhas.

9.3 Exemplo de utilização de threads: servidor web


Servidores web fazer parte de um tipo de recurso que usamos a todo momento,
mas que raramente nos damos conta dele, justamente pelo fato de sua atuação ser
transparente. Suas funções incluem o recebimento de solicitações para fornecimento
de páginas e o posterior envio desta página de volta para quem a solicitou. Embora o
funcionamento de servidor web seja aparentemente simples, ele precisa lidar com o
fato de que algumas páginas em um site são muito mais acessadas do que outras e
o site do seu banco pode nos servir como exemplo: a página em que os correntistas
consultam o saldo bancário tende a ser muito mais acessada do que a página que
conta a história do banco...
De acordo com Tanenbaum e Bos (2016), servidores web mantêm na memória

FACULDADE CATÓLICA PAULISTA | 58


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

principal uma coleção de páginas mais frequentemente usadas, visando eliminar a


necessidade de fazer acessos constantes ao disco para exibi-las ao usuário. Esta
coleção de páginas, usadas também em vários outros contextos, é chamada de cache
e servem para ajudar a melhorar o desempenho geral do sistema de forma bastante
interessante. Observemos o processo ilustrado na figura 14: o thread identificado
como despachante recebe as solicitações que entram pela rede e, depois de examinar
e classificar a solicitação, ele escolhe um thread operário ocioso (ou seja, bloqueado).
Na sequência, o despachante transfere ao operário a solicitação e, ato contínuo,
acorda o operário adormecido, movendo-o do estado bloqueado para o estado pronto.

Figura 14: um servidor web com vários threads.


Fonte: Tanenbaum e Bos (2016, p. 59)

Assim que desperta, o thread operário certifica-se de que a solicitação pode ser
atendida a partir do cache de páginas da web, local acessível a todos os threads. Caso
a solicitação inclua uma página fora do cache, uma operação de leitura no disco é
iniciada, a fim de que o sistema possa à página solicitada. Durante essa operação,
o thread envolvido permanece bloqueado até que a leitura seja concluída. Quando o
thread é bloqueado na operação de disco, outro thread é escolhido para ser executado,
a fim de cumprir outras etapas do processo. Com esse modelo é possível que o
servidor seja escrito como uma coleção de threads sequenciais.
Esperamos que estes dois exemplos tenham tornado mais clara a real função
de um thread e dado a você a dimensão da sua importância para a viabilização da
computação moderna. Boa sorte, bons estudos e até a próxima.

FACULDADE CATÓLICA PAULISTA | 59


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 10
SISTEMAS OPERACIONAL
COM VÁRIOS PROCESSADORES
Desde que o primeiro artefato computacional foi concebido, a busca pela superação
dos limites de desempenho e eficiência nessas máquinas nunca mais parou. A
miniaturização proporcionada pela microeletrônica e o aprimoramento global dos
meios de fabricação dos componentes do computador foram movimentos decisivos
na elevação do nível de desempenho dos nossos sistemas computacionais. A despeito
da importância destes avanços, uma providência em especial tem ajudado a viabilizar
a computação moderna, justamente por ter proporcionado um salto extraordinário
no processamento de dados: o advento dos sistemas com múltiplos processadores.
Seja bem-vinda e seja bem-vindo a este encontro de Sistemas Operacionais e prepare-
se para subir mais um nível em seu conhecimento. Boa leitura!

10.1 Fundamentos
O termo Sistema operacional com vários processadores nos remete ao uso de duas
ou mais CPUs em um único sistema de computador. Essas CPUs múltiplas mantêm
uma comunicação próxima, compartilhando o barramento do computador, memória
e outros dispositivos periféricos. Por causa desta característica, esses sistemas
são chamados de sistemas fortemente acoplados e são usados em aplicações que
demandam velocidade muito alta para processar um grande volume de dados. Uma
possível organização de um sistema multiprocessado é ilustrada na figura 15:

Figura 15: Organização de um sistema com mais de um processador


Fonte: https://ecomputernotes.com/fundamental/disk-operating-system/multiprocessor-operating-system. Acesso em: 6 jul. 2021.

FACULDADE CATÓLICA PAULISTA | 60


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

A figura 15 nos mostra duas CPUs compartilhando acesso à memória principal


e, de fato, esta é a estrutura que dá base para o conceito de sistema com múltiplos
processadores. Conforme Tanenbaum e Bos (2016), um programa em execução
em qualquer uma das CPUs consegue ter acesso a um espaço de endereçamento
virtual normal, ou seja, da mesma forma que seria em um arranjo com apenas um
processador. A única propriedade incomum que o sistema multiprocessado tem,
segundo os autores, é que a CPU poderá escrever determinado valor em um espaço
de memória e, ao recuperar este valor, receber outro em seu lugar, pois outra CPU o
teria alterado. Há, contudo, mecanismos implementados para que isso não ocorra.
Um sistema de que conta com múltiplos processadores é baseado no modelo
de multiprocessamento simétrico, no qual cada processador executa uma cópia
idêntica do sistema operacional e essas cópias se comunicam entre si. Neste
sistema, o processador é atribuído a uma tarefa específica. Um processador mestre
controla o sistema e este esquema define um relacionamento mestre-escravo. Esses
sistemas podem economizar recursos financeiros em comparação com sistemas de
processador único porque os processadores podem compartilhar periféricos, fontes
de alimentação e outros dispositivos.
A principal vantagem do sistema multiprocessador é fazer mais trabalho em um
período de tempo mais curto. Além disso, os sistemas multiprocessadores se mostram
mais confiáveis nas situações de falha de um processador. Nesta situação, o sistema
com multiprocessador não irá parar o sistema. Ao invés disso, o sistema apenas
perderá desempenho. Para viabilizar o funcionamento de um Sistema Operacional de
multiprocessamento de forma eficaz, o sistema de computador deve contar com os
seguintes recursos:
- Suporte para placa-mãe: uma placa-mãe capaz de lidar com vários
processadores deve compor o hardware do computador. Isso implica na disponibilidade
de slots adicionais para as CPUs extras e um conjunto de componentes capazes de
lidar com o arranjo de multiprocessamento.
- Processadores apropriados: os processadores que equipam o sistema devem
estar habilitados para serem usados em um ambiente de multiprocessamento.

Toda a tarefa de multiprocessamento é gerenciada pelo Sistema Operacional, que


aloca diferentes tarefas a serem realizadas pelos vários processadores do sistema.
Aplicativos projetados para o uso em multiprocessamento é chamado de encadeado,

FACULDADE CATÓLICA PAULISTA | 61


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

o que significa que é dividido em rotinas menores que podem ser executadas de forma
independente. Isso permite que o Sistema Operacional para permitir que esses threads
sejam executados em mais de um processador simultaneamente, o que resulta em
um desempenho bastante superior.

ISTO ACONTECE NA PRÁTICA

Imagine um Sistema Operacional de processador único executando um


aplicativo que requer três tarefas a serem executadas: a primeira levando quatro
milissegundos, a segunda levando sete milissegundos e a última levando oito
milissegundos. Neste caso, o processador executaria cada tarefa em ordem,
uma por vez e a execução de todas as tarefas exigiria dezenove milissegundos.
Se um Sistema Operacional de multiprocessamento estivesse executando o
mesmo aplicativo, as três tarefas seriam atribuídas a processadores separados
e sendo assim, o primeiro processador completaria a primeira tarefa em quatro
milissegundos, o segundo faria a segunda tarefa em sete milissegundos e o terceiro
terminaria sua tarefa em oito milissegundos. Assim, o sistema operacional de
multiprocessamento completaria a tarefa inteira em oito milissegundos, que é o
tempo requerido pela tarefa mais demorada.
Fonte: elaborado pelo autor.

O sistema de múltiplos processadores suporta que os processos sejam


executados em paralelo e este tipo de computação é especialmente útil em áreas como
inteligência artificial, processamento de imagens e previsão do tempo, entre outras. No
entanto, apesar das evidentes vantagens deste tipo de arranjo, há potenciais gargalos
em seu funcionamento. Existem três fontes principais de possíveis problemas que
podem surgir em um sistema operacional com multiprocessador:

- Sistema de bloqueio: para fornecer acesso seguro aos recursos compartilhados


entre vários processadores, eles precisam ser protegidos por um esquema de
bloqueio. O objetivo de um bloqueio é serializar os acessos ao recurso protegido por
vários processadores. O uso indisciplinado de bloqueio pode degradar gravemente
o desempenho do sistema. Essa forma de contenção pode ser reduzida usando o
esquema de bloqueio, evitando longas seções críticas, substituindo os bloqueios por
algoritmos livres de bloqueio ou, sempre que possível, evitando o compartilhamento
por completo.

FACULDADE CATÓLICA PAULISTA | 62


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

- Dados compartilhados: os acessos contínuos aos itens de dados


compartilhados por vários processadores (com um ou mais deles com gravação de
dados) são serializados pelo protocolo de coerência de cache. Mesmo em um sistema
de escala moderada, os atrasos de serialização podem ter um impacto significativo no
desempenho do sistema. Além disso, rajadas de tráfego de coerência de cache saturam
o barramento de memória ou a rede de interconexão, o que também retarda todo o
sistema. Essa forma de contenção pode ser eliminada evitando o compartilhamento
ou, quando isso não for possível, usando técnicas de replicação para reduzir a taxa de
acessos de gravação aos dados compartilhados.
- Compartilhamento falso: esta forma de contenção surge quando itens de
dados não relacionados usados por diferentes processadores estão localizados
próximos uns dos outros na memória e, portanto, compartilham uma única linha de
cache: O efeito do compartilhamento falso é o mesmo do compartilhamento regular
de a linha de cache entre vários processadores. Felizmente, uma vez identificado,
o falso compartilhamento pode ser facilmente eliminado configurando o layout de
memória de dados não compartilhados.

Além de eliminar gargalos no sistema, um desenvolvedor de sistema operacional


com multiprocessador deve fornecer suporte para a execução eficiente de aplicativos
de usuário deste arranjo. Alguns dos aspectos de tal suporte incluem mecanismos
para colocação de tarefas e migração entre processadores, colocação de memória
física garantindo que a maioria das páginas de memória usadas por um aplicativo
está localizada na memória local e primitivas de sincronização multiprocessador
escaláveis.

10.2 Tipos de Sistemas Operacionais para multiprocessadores


Ao contrário do que pode parecer em primeira análise, os Sistemas Operacionais
de multiprocessadores não são sistemas muito diferentes daqueles feitos para um
processador apenas, pois eles também gerenciam memória, controlam sistemas de
arquivos e as dão suporte às operações de entrada e saída normalmente. A diferença
mais significativa é que os Sistemas Operacionais para vários processadores
dividem o trabalho em várias subtarefas e, em seguida, atribuem essas subtarefas
a diferentes unidades de processamento, ou CPUs. Um sistema operacional de
multiprocessamento precisa de um mecanismo para que os processadores interajam

FACULDADE CATÓLICA PAULISTA | 63


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

uns com os outros à medida que agendam tarefas e coordenam a execução de todas
elas.
Como os Sistemas Operacionais de multiprocessamento dependem do
processamento paralelo, cada CPU envolvida em uma tarefa deve ser capaz de
informar os outros sobre o andamento daquilo que está cumprindo. Isso permite que
o trabalho dos processadores seja integrado quando os cálculos são feitos de forma
que atrasos e outras ineficiências sejam minimizados. Por causa das especificidades
deste tipo de operação foram desenvolvidos alguns tipos de implementações para
que o trabalho de vários processadores em paralelo fosse viabilizado. Nesta seção
trataremos, portanto, de dois tipos de Sistemas Operacionais para multiprocessadores.

10.2.1 Um Sistema Operacional para cada CPU


Esta é a maneira mais simples e imediata de organizar um Sistema Operacional de
multiprocessadores. Ela consiste em dividir a memória em um número de partições
igual ao de CPUs atuantes no sistema e dar a cada CPU sua própria memória
particular e sua própria cópia privada do sistema operacional, o que faz com que os
processadores atuem como computadores independentes. Alguma otimização pode
ser obtida ao permitir que as CPUs compartilhem o código do Sistema Operacional,
mas que mantenham cópias exclusivas de sua estrutura de dados (TANENBAUM;
BOS, 2016).
Uma análise mais atenta poderia sugerir que ter vários computadores distintos
(na mesma quantidade de CPUs do arranjo) seria mais vantajoso em termos de
otimização de recursos. No entanto, isso não é verdade na maioria dos casos, já que
a configuração de várias CPUs permite que todas as máquinas compartilhem discos
e outros dispositivos de entrada e saída. Além disso, ela permite que a memória seja
compartilhada de maneira flexível.
Como os projetistas buscam constantemente maneiras de melhorar os processos
relacionados ao uso das CPUs nesta configuração de múltiplos processadores,
o arranjo de um Sistema Operacional para cada processador não constitui a única
opção existente. A configuração em que apenas uma das CPUs mantém uma cópia
do Sistema Operacional pode ser uma boa solução para eventuais problemas do
modelo anterior e isso é o que constataremos a seguir.

10.2.1 Multiprocessadores mestre-escravo

FACULDADE CATÓLICA PAULISTA | 64


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Este segundo modelo é ilustrado na figura 16 e seu funcionamento é baseado na


presença de uma cópia do Sistema Operacional em apenas uma das CPUs (a CPU
de número 1, no caso). Com essa configuração, toda a carga de processamento é
direcionada para a CPU mestre, que coordena o trabalho das CPUs chamadas escravo.

Figura 16: Modelo de multiprocessadores mestre-escravo.


Fonte: (TANENBAUM; BOS, 2016, p. 368).

Este modelo reduz ocorrências de sobrecarga em uma CPU enquanto a outra (ou
as outras) fica ociosa. Aqui, quando uma CPU fica ociosa, ela solicita processos ao
Sistema Operacional da CPU mestre para que possa executá-los. Como há apenas um
cache de buffer, então eventuais inconsistências no acesso aos dados não ocorrerão.
No entanto, ainda há algo a ser considerado: quando o mestre precisar coordenar
muitas CPUs, ele próprio (o mestre) será o gargalo do sistema, pois terá de lidar com
todas as chamadas de sistema de todas as CPUs.
Se, digamos, 10% de todo o tempo for gasto lidando com chamadas do sistema, então
10 CPUs praticamente saturarão o mestre, e com 20 CPUs ele estará completamente
sobrecarregado. Assim, esse modelo é simples e executável para um ambiente com
poucos processadores apenas.

Este foi o conteúdo que queríamos compartilhar com você. Esmere-se na execução
das demais atividades e aumente cada vez mais seu conhecimento em Sistemas
Operacionais. Até a próxima!

FACULDADE CATÓLICA PAULISTA | 65


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 11
ESCALONADOR DA CPU
Olá! Seja bem-vinda e seja bem-vindo a mais uma aula de Sistemas Operacionais!
Você bem se lembra que em nosso último encontro fizemos a conceituação e a
caracterização do perfil de um Sistema Operacional para ambientes de múltiplos
processadores. Na ocasião, inclusive, abordamos dois tipos de arranjo: o de um
Sistema Operacional para cada CPU e o mestre-escravo. Embora tudo aquilo tenho
nos parecido muito lógico e factível, faltou tratarmos de um elemento crítico em todo
esse contexto: o escalonador, ou scheduler, na língua Inglesa. Em poucas palavras,
trata-se de uma função do Sistema Operacional que decidirá o momento em que cada
processo poderá ocupar a CPU, o que o torna uma espécie de “organizador da fila” dos
processos prontos para serem executados. Instigante, não é mesmo? Fique conosco
para avançarmos juntos mais uma etapa em nosso estudo.

11.1 Conceitos básicos


Se estivéssemos tratando de sistemas com um único processador, a atuação de um
escalonador não seria necessária, já que apenas um processo poderia ser executado
por vez. Em um ambiente de “monoprogramação”, os processos que demandam por
execução devem aguardar sua vez de ocupar a CPU quando ela estiver livre e esse
tempo de espera é desperdiçado, já que nenhum processamento útil é realizado.
Conforme tratamos em encontros passados, vários processos são mantidos na
memória ao mesmo tempo em um ambiente de multiprogramação e, quando um
processo precisa esperar, o Sistema Operacional desvincula a CPU desse processo
e a designa a outro processo. Esse padrão de processamento é de ocorrência
continuada e constitui o princípio básico do escalonamento. Antes de tratamos de
alguns conceitos que baseiam o processo de escalonamento, vale a pena tratarmos
de picos de CPU e de preempção, como meio de nos prepararmos para temas que
serão desenvolvidos na sequência.
A execução de um processo está baseada na alternância entre seu efetivo
processamento na CPU e a espera por operações de entrada e saída. Uma forma
de descrevermos este ciclo é ilustrada na figura 17. Ela nos permite observar que os

FACULDADE CATÓLICA PAULISTA | 66


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

processos se alternam entre picos de CPU e picos de I/O (Input/Output ou Entrada/


Saída) e que o último pico de CPU termina com o sistema solicitando o encerramento
da execução.

Figura 17: alternância entre picos de CPU e picos de entrada e saída


Fonte: Silberschatz, Baer e Gagne (2015, p. 141).

Outro conceito importante em nosso contexto é a preempção e para tratarmos


dele será necessário observamos que as decisões relativas ao escalonamento de
processos são tomadas segundo as seguintes circunstâncias:
1. Quando um processo passa do estado de execução para o estado de espera.
2. Quando um processo passa do estado de execução para o estado de pronto
mediante uma interrupção, por exemplo.
3. Quando um processo passa do estado de espera para o estado de pronto
mediante a conclusão de uma entrada/saída, por exemplo.
4. Quando um processo termina.

FACULDADE CATÓLICA PAULISTA | 67


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Nas circunstâncias 1 e 4 o escalonador não pode tomar outra ação que não a de
selecionar um novo processo para execução a partir da fila de processos prontos.
Há uma alternativa, no entanto, nas circunstâncias 2 e 3: quando o escalonamento
acontece apenas sob as circunstâncias 1 e 4, dizemos que o esquema de scheduling é
sem preempção ou cooperativo. Em qualquer outro caso, ele tem preempção.
Uma explicação mais detalhada cabe aqui: o escalonamento com preempção
é uma técnica que se baseia na divisão de tempo de CPU para um determinado
processo. O intervalo estabelecido pode ser capaz de concluir todo o processo ou
não. Quando o tempo de execução do processo é maior do que o ciclo da CPU, ele é
colocado de volta na fila de pronto e será executado na próxima oportunidade. Este
escalonamento é usado, portanto, quando o processo muda para o estado pronto,
conforme a circunstância 2. Já o escalonamento sem preempção é uma técnica de
escalonamento da CPU em que o processo assume a CPU e a retém até que seu
encerramento ou até que seja colocado em estado de espera. Nenhum processo é
interrompido até que seja concluído e, depois disso, o processador muda para outro
processo.

ISTO ACONTECE NA PRÁTICA

O método de escalonamento sem preempção era usado pelo Microsoft Windows


3.x. O Windows 95 introduziu o escalonamento com preempção, e todas as versões
subsequentes dos sistemas operacionais Windows o têm usado. O sistema
operacional Mac OS X também usa o escalonamento com preempção.
Fonte: Silberschatz, Baer e Gagne (2015).

Feitas estas considerações, partimos para a abordagem dos critérios utilizados


para o algoritmo de escalonamento.

11.2 Critérios para escolha do algoritmo de escalonamento


O escalonamento de processos desempenhado pelo Sistema Operacional se efetiva
por meio de um algoritmo implementado por ele. No ensinamento de Silberschatz,
Baer e Gagne (2015), os diversos algoritmos de escalonamento da CPU possuem
diferentes propriedades, o que torna possível favorecer uma classe específica de
processos ao invés da outra, a depender da escolha de um tipo algoritmo específico de
algoritmo. Essa diversidade de tipos induziu a criação de critérios para comparação

FACULDADE CATÓLICA PAULISTA | 68


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

de algoritmos de escalonamento, o que tem possibilitado escolhas acertadas do


melhor tipo de algoritmo para cada ocasião. Ainda segundo Silberschatz, Baer e
Gagne (2015), os critérios são:
• Utilização da CPU: a lógica que baseia esse critério é a de manter a CPU
tão ocupada quanto possível. Embora na teoria a utilização da CPU possa variar
de 0 a 100%, na prática esta utilização deve variar de 40% - para um baixo nível de
processamento – até 90%, para um sistema com carga elevada de processamento.
• Throughput: este termo refere-se ao número de processos concluídos em uma
determinada unidade de tempo e reflete a quantidade de trabalho executado pela CPU.
Se um processo tem sua conclusão demorada, o throughput será baixo. No entanto,
determinadas transações realizadas pelos processos forem de ciclo curto, a medida
de throughput será elevada. Neste caso, poderemos ter, por exemplo, 100 processos
executados em um segundo.
• Tempo de turnaround: em determinadas decisões de projeto é necessário ter
o conhecimento de quanto tempo um determinado processo leva para ser executado.
O turnaround refere-se justamente ao intervalo entre o momento em que o processo
é submetido à CPU e o momento de sua conclusão. O tempo de turnaround é a soma
dos períodos gastos em espera para entrar na memória, em espera na fila de prontos,
em execução na CPU, e executando I/O.
• Tempo de espera: este critério refere-se o tempo de espera de um processo
na fila em que foi colocado e não ao tempo em que o processo na CPU é executado
na CPU. Seja qual for o critério de escalonamento adotado e seja qual for a qualidade
deste escalonamento, ele não interferirá na velocidade com que a CPU executará
o processo. Da mesma forma, as operações de entrada e saída associadas a um
processo não terão sua velocidade alterada pelo critério ou pela qualidade do
escalonamento. Assim, o tempo de espera é a soma dos períodos gastos em espera
na fila de processos prontos para a execução.
• Tempo de resposta: em um sistema com alta carga de interatividade (ou seja,
em um sistema com alta dependência de respostas do usuário), o tempo de turnaround
pode não ser o melhor critério para a escolha do tipo de algoritmo de escalonamento.
É comum que um processo seja capaz de gerar uma saída para o usuário com rapidez
suficiente para que novas saídas estejam prontas para exibição antes que as saídas
anteriores tenham sido consumidas. Esta é, portanto, a base do critério do tempo de
resposta: o tempo que vai da submissão de uma solicitação até a primeira resposta

FACULDADE CATÓLICA PAULISTA | 69


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

ser produzida. Em outras palavras, o tempo de resposta é o tempo necessário para


que comece o envio de respostas e não o tempo necessário à exibição da resposta.
Por fim, é necessário pontuar que o tempo de turnaround é limitado pela velocidade do
dispositivo de saída.

Postos estes critérios, podemos concluir que o throughput e a utilização da CPU


devem ser maximizados pelo escalonamento, ao passo que o turnaround, o tempo
de espera e o tempo de resposta devem ser minimizados. Na maioria das situações
de uso, a busca pelo atingimento de valores médios nestes critérios torna o sistema
rápido o suficiente. No entanto, mediante algumas circunstâncias específicas, é
preferível otimizar os valores mínimo ou máximo em vez da média, conforme pontuam
Silberschatz, Baer e Gagne (2015). A fim de garantir, por exemplo, que todos os
usuários obtenham um serviço satisfatório, é plausível querer minimizar o tempo de
resposta máximo.
Agora que conhecemos os critérios que devem ser considerados em um algoritmo
de escalonamento, passaremos a abordagem alguns desses algoritmos, incluindo
suas características e principais aplicações.

11.3 Algoritmos de Escalonamento


Como sabemos, o recurso de escalonamento da CPU resolve o problema de decidir
qual dos processos da fila de prontos para a execução a CPU deverá atender. Há
vários algoritmos de escalonamento de processos que os Sistemas Operacionais
implementam e, nesta seção, trataremos de dois deles, de acordo com Silberschatz,
Baer e Gagne (2015). Sigamos adiante!

• Escalonamento “Primeiro-a-Chegar, Primeiro-a-Ser-Atendido”: trata-se do


algoritmo mais simples de escalonamento da CPU e seu procedimento consiste em
dar prioridade ao primeiro processo que solicita atendimento. A efetivação do first-
come, first-served (FCFS) se dá por meio de uma estrutura FIFO (First in-First Out, ou “o
primeiro a ser inserido é o primeiro a ser retirado”). O código do escalonamento FCFS
é bastante simples de escrever, mas sua implementação tende a tornar longo o tempo
médio de espera dos processos. Considere o conjunto de processos mostrados na
tabela 4 e imagine que eles que chegam no tempo 0, com o intervalo de CPU dado em
milissegundos:

FACULDADE CATÓLICA PAULISTA | 70


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Processo Duração do pico


P1 24
P2 3
P3 3
Tabela 4 – Processos agrupados para fins de exemplificação do FCFS
Fonte: Silberschatz, Baer, Gagne (2015, p. 142)

Considerando a chegada dos processos à CPU na ordem P1, P2 e P3, eles também
serão atendidos nesta ordem, conforme ilustrado na figura 18.

Figura 18: Ilustração de um escalonamento específico


Fonte: adaptado de Silberschatz, Baer, Gagne (2015, p. 142).

Neste caso, o tempo de espera é de 0 milissegundo para o processo P1, 24


milissegundos para o processo P2, e 27 milissegundos para o processo P3, valores
que resultam em um tempo médio de espera de 17 milissegundos (0+24+27)/3. Se,
no entanto, os processos chegarem na ordem P2, P3, P1, no entanto, a média será de
3 milissegundos (6+0+3)/3. Essa redução é bastante considerável, o que torna esse
algoritmo suscetível a variações grandes se os intervalos da CPU variarem muito.

ISTO ESTÁ NA REDE

Que tal assistir a um vídeo que trate de escalonamento de processos de uma forma
bem didática e objetiva? Acesse a URL indicada logo abaixo.
Sistemas operacionais: Parte 2 - Escalonamento de processos. Disponível em:
https://www.youtube.com/watch?v=fUNf-pZLUMQ. Acesso em: 9 jul. 2021.

• Escalonamento Menor-Job-Primeiro: a segunda abordagem de algoritmo


para escalonamento dos processos na CPU é o menor-job-primeiro ou SJF (shortest-
job-first). Ela segue o critério do algoritmo sem preempção. Neste caso, o escalonador

FACULDADE CATÓLICA PAULISTA | 71


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

seleciona o processo da fila de espera com o menor tempo de conclusão e aloca a


CPU para aquele processo. Com isso haverá diminuição no tempo médio de espera
(e o consequente aumento de desempenho), o que torna esta técnica vantajosa em
relação a FCFS.
Outra forma de abordar o funcionamento deste algoritmo associando-o à duração
do próximo pico de CPU. Quando disponível, a CPU é alocada ao processo que tem
o próximo pico de CPU mais curto. Caso os tempos relacionados aos picos forem o
mesmo, o critério de “o primeiro a chegar é o primeiro a ser atendido” será utilizado.

Isto é o que temos para este encontro. Uma boa leitura do material indicado nas
referências ajudará a complementar seu conhecimento teórico sobre o assunto. Fique
conosco e até a próxima!

FACULDADE CATÓLICA PAULISTA | 72


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 12
ALGORITMOS AVANÇADOS
DE ESCALONAMENTO
O caminho pelo conhecimento das características e funcionalidades dos Sistemas
Operacionais já nos levou a muitos lugares: começamos pelos seus fundamentos,
visitamos momentos históricos que marcaram seu desenvolvimento, passamos
pelas formas com que eles gerenciam recursos do sistema computacional, tivemos
contato com processos, threads, ambientes de múltiplo processamento e, em nosso
encontro anterior, desfrutamos da companhia do organizador de fila de processos,
que nos foi apresentado como escalonador. Nada mal, mas ainda temos um bom
trecho a percorrer.
Por causa da grande variedade de algoritmos capazes de selecionar o processo mais
apto a ocupar a CPU em dado momento, abordaremos nesta aula mais alguns destes
algoritmos, os quais classificaremos como algoritmos avançados. Nesta categoria,
serão incluídos o escalonamento por prioridades, Round-Robin, Filas Multiníveis e Filas
Multiníveis com Retroalimentação. Vamos nessa? Fique conosco e boa leitura!

12.1 Escalonamento por prioridades


Antes de tratarmos deste algoritmo de forma específica, vale recordarmos o
conceito que dá suporte ao algoritmo que chamamos Menor-Job-Primeiro (Shortest-
Job-First ou SJF). Esta solução de escalonamento aloca o recurso de processamento
ao próximo pico de CPU mais curto entre os processos elegíveis para ocuparem a
CPU. Desta forma, o escalonamento depende da duração (em alguma unidade de
tempo) do próximo pico de um processo.
Conforme nos ensinam Silberschatz, Baer e Gagne (2015), o algoritmo SJF é um
caso especial do algoritmo geral de escalonamento por prioridades, que aloca a CPU ao
processo que tem associado a ele a prioridade mais alta. Mais uma vez, os processos
que têm prioridades iguais são escolhidos pelo critério de “o primeiro a chegar será o
primeiro a ser atendido”. O critério de atribuição de níveis de prioridade é simples e se
baseia no pico de CPU previsto de cada processo: quanto maior o pico de CPU, menor
a prioridade; quanto menor o pico de CPU, maior a prioridade.

FACULDADE CATÓLICA PAULISTA | 73


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Para fins de estabelecimento de critérios para o desenvolvimento de nosso exemplo,


consideraremos que os níveis de prioridade serão representados por números e quanto
mais baixo o número, maior a prioridade atribuída ao processo. Vamos assumir, então,
que o conjunto de processos expressos na tabela 5 tenham chegado no tempo 0, na
ordem P1, P2, …, P5, com a duração do pico de CPU dada em milissegundos.

Processo Duração do Pico Prioridades


P1 10 3
P2 1 1
P3 2 4
P4 1 5
P5 5 2
Tabela 5 – Processos que serão priorizados de acordo com o escalonamento por prioridades
Fonte: Silberschatz, Baer e Gagne (2015, p. 144)

Se o algoritmo de escalonamento por prioridades estivesse controlando o acesso


destes processos à CPU, eles seriam organizados conforme ilustrado na figura19:

Figura 19: Organização dos processos segundo o escalonamento por prioridade


Fonte: Silberschatz, Baer e Gagne (2015, p. 144)

Neste caso, o tempo médio de espera é de 8,2 milissegundos, assim calculado:


(0+1+6+16+18)/5.
O procedimento relacionado à prioridade ainda nos expõe mais um critério: a
definição interna e a definição externa, que serão assim conceituadas:
- Prioridades definidas internamente: utilizam-se de uma ou de mais
quantidades passíveis de medição para calcular a prioridade de um processo, incluídos
limites de tempo, requisitos de memória e número de arquivos abertos, por exemplo.
- Prioridades definidas externamente: baseiam-se em critérios externos
ao Sistema Operacional. Um exemplo apropriado nos leva à seguinte situação:
um servidor é compartilhado entre vários usuários pagantes e, quanto mais cara a
assinatura, maior prioridade o processo do assinante terá sobre outros. Em outra

FACULDADE CATÓLICA PAULISTA | 74


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

situação, outro servidor que adote esse tipo de escalonamento pode dar prioridade
maior a processos de um setor da empresa e baixa prioridade para processos de
outro setor.

Com todos esses recursos para definição de prioridades, este tipo de algoritmo
parece perfeito, não é mesmo? Infelizmente não é bem assim. Um problema
relacionado a ele é conhecido por bloqueio indefinido ou inanição, especialmente em
sistemas com alta carga de processamento. Nesta situação, alguns processos de mais
baixa prioridade podem ficar aguardando indefinidamente para serem processados,
enquanto processo de alta prioridade tomam seus lugares na CPU. É comum, então,
que esses processos bloqueados indefinidamente tenham vez em algum momento de
baixa carga de processamento (na madrugada de sábado, por exemplo) ou que esses
processos se percam quando a máquina é desligada. Para evitar que um processo
simplesmente se perca em situação como essa, projetistas criaram um mecanismo
conhecido como envelhecimento, que consiste no aumento gradual da prioridade dos
processos que aguardam a CPU por muito tempo.

12.2 Escalonamento Round-Robin


O algoritmo de escalonamento conhecido como Round-Robin (RR) adequa-se
com precisão a sistemas de time sharing (ou tempo compartilhado). Embora guarde
semelhança com o primeiro algoritmo que estudamos (o FCFS), o RR conta com
preempção para que seja possível alternar um processo entre diversos estados
possíveis, sem que o tempo atribuído para seu processamento precise ser usado na
totalidade.

ANOTE ISSO

O escalonamento preventivo é uma técnica que se baseia na divisão de frações de


tempo de CPU para um determinado processo, sendo que este intervalo atribuído
pode ser capaz de concluir todo o processo ou não. Quando o tempo de pico do
processo é maior do que o ciclo da CPU, ele é colocado de volta na fila de pronto
e será executado na próxima chance. Já o escalonamento não preemptivo é uma
técnica em que o processo assume a CPU e a retém até que seu processamento
seja encerrado ou colocado no estado de espera.

FACULDADE CATÓLICA PAULISTA | 75


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Além disso, a fila de processos prontos é tratada como uma fila circular, daí o nome
do algoritmo conter a expressão “round”. O escalonador verifica a fila de prontos,
alocando a CPU para cada processo por um intervalo de até uma fração (ou quantum)
de tempo e novos processos são adicionados à cauda da fila de prontos, assim que
nela chegam. O processo que não puder ser executado antes que seu quantum
termine será alocado também na cauda da fila e, na sequência, o escalonador da CPU
selecionará o próximo processo na fila de prontos.
Antes de terminarmos a abordagem deste algoritmo, vale a menção de que o
desempenho dele está fortemente relacionado à quantidade de tempo (ou quantum)
designada para a resolução do processo na CPU. Por causa disto, uma necessária
ponderação deve ser feita: se o quantum for demasiadamente longo, o critério de
processamento relacionado ao Round-Robin torna-se muito semelhante (ou até
mesmo igual) à política do “Primeiro-a-Chegar, Primeiro-a-Ser-Atendido”. Mas se,
por acaso, o quantum de tempo for demasiadamente curto, o funcionamento do
RR pode resultar em muitas mudanças de contexto, necessárias para interromper o
processamento e colocar o processo na cauda da lista circular.

12.3 Escalonamento de Filas Multiníveis


Até o momento tratamos os processos como pertencentes a uma só categoria e
nenhuma distinção fizemos entre eles. Há, no entanto, a possibilidade de classificarmos
os processos em diferentes grupos, de acordo com critérios definidos previamente.
Dois desses grupos são os processos de foreground e de background e, para que não
haja confusão entre eles, faça o seguinte: associe o prefixo “fore” a algo como “de
frente” e “back” deve ser associado a algo que está sendo executado “por trás”. Neste
sentido, os processos foreground são aqueles ditos interativos e que geralmente estão
acessíveis ao usuário. Já os processos background estão associados a processamento
em lotes (batch) e com eles o usuário não pode exercer interações.
Esta categorização que fizemos já é suficiente para nos mostrar que estamos
diante de processos que possuem diferentes demandas de escalonamento e que,
normalmente, os processos de foreground podem ter prioridade maior (definida
externamente) sobre os processos de background. Por isso, o algoritmo sob análise
separa a fila de prontos em filas específicas, o que viabiliza o tratamento prioritário
àqueles processos escolhidos pela organização. Tomemos como exemplo uma
instituição de ensino superior que disponibiliza ao seu corpo acadêmico um servidor

FACULDADE CATÓLICA PAULISTA | 76


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

para uso comum. Por critérios próprios, as prioridades de processos foram assim
definidas:
1. Processos de Sistema
2. Processos interativos da Secretaria
3. Processos interativos dos Professores
4. Processos em lotes (batch)
5. Processos dos alunos

A figura 20 ilustra as filas de prioridades, nas quais os processos são atribuídos


de forma permanente. O fato interessante é que cada fila tem seu próprio algoritmo
de escalonamento, de modo que as filas de foreground podem ser organizadas, por
exemplo, por um algoritmo Round-Robin (RR). Já as filas de background podem
ser controladas por um algoritmo “Primeiro-a-Chegar, Primeiro-a-Ser-Atendido”
(FCFS). Essa separação entre meios de controle, por si só, já pode definir diferenças
consideráveis entre os tempos reservados a cada fila.

Figura 20: Escalonamento de filas multiníveis


Fonte: Adaptado de Silberschatz, Baer e Gagne (2015, p. 145).

Há, no entanto, mais uma forma de priorizar processos: pela distribuição explícita
do tempo de CPU entre as filas. Neste caso, cada fila recebe certa fatia de tempo
FACULDADE CATÓLICA PAULISTA | 77
SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

de CPU, que será distribuída entre os seus processos em estado de pronto. Uma
situação possível seria a distribuição de 70% de tempo da CPU entre as filas de
processos foreground e 30% para os processos de background. Embora essa seja
uma boa solução, há ainda uma questão a ser superada: a atribuição permanente
dos processos a uma determinada fila, o que confere um viés de inflexibilidade ao
algoritmo. Nosso próximo meio de escalonamento aborda este problema.

12.4 Escalonamento de Filas Multiníveis com Retroalimentação


Conforme mencionado, o algoritmo de Filas Multiníveis original não permite que
um processo que, por exemplo, tenha sido colocado na fila de baixa prioridade, seja
promovido para uma fila de alta prioridade. Esta solução é marcada, portanto, pela
inflexibilidade na movimentação entre as filas. De acordo com Silberschatz, Baer e
Gagne (2015), o algoritmo de escalonamento de Filas Multiníveis com Retroalimentação
permite a alternância de um processo entre as filas, justamente por separá-los de
acordo com as características de seus picos de CPU.
Se um processo usar tempo demasiado da CPU, ele será passado para uma fila
de prioridade mais baixa. Essa solução tende a deixar os processos interativos e
limitados por operações de entrada/saída nas filas de prioridade mais alta. Além
disso, um processo que esperar demais em uma fila de prioridade mais baixa pode
ser movido para uma fila de maior prioridade. Esse tipo de envelhecimento evita a
inanição.

Este foi o conteúdo que queríamos compartilhar com você neste encontro. Bom
estudo e até a próxima!

FACULDADE CATÓLICA PAULISTA | 78


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 13
INTRODUÇÃO A DEADLOCKS
É inegável que o desenvolvimento de ambientes computacionais de
multiprocessamento trouxe ótimos resultados relacionados ao desempenho das
nossas aplicações e viabilizou a computação como hoje a conhecemos. Como
sabemos, os Sistemas Operacionais para vários processadores executam as mesmas
funções que os Sistemas Operacionais para processador único, mas são capazes de
dividir o trabalho global em várias subtarefas e, em seguida, conseguem atribuir essas
subtarefas a diferentes CPUs.
O multiprocessamento usa uma arquitetura de comunicação específica para
obter esse resultado. Um Sistema Operacional de vários processadores carece de
um mecanismo para que estes recursos interajam uns com os outros à medida que
agendam tarefas e coordenam sua conclusão. Muito conveniente, não é mesmo?
Ocorre que algumas situações próprias do ambiente de multiprogramação podem
fazer com que processos disputem um número limitado de recursos e que, em
consequência, um impasse aconteça. Neste encontro trataremos dos deadlocks,
situação típica que ocorre na quando dois ou mais processos precisam de algum
recurso para concluir sua execução, mas que é mantido por outro processo.

13.1 Conceituação
Já que – como dizem - uma imagem vale mais do que mil palavras, iniciamos
nossa seção de conceitos com a ilustração do que é um deadlock em um Sistema
Operacional. Na figura 21, o processo 1 possui o recurso 1 e precisa adquirir o recurso
2. Da mesma forma, o processo 2 tem o recurso 2 e precisa adquirir o recurso 1. O
processo 1 e o processo 2 estão em impasse, pois cada um deles precisa do recurso
do outro para completar seus execução, mas nenhum deles está disposto a renunciar
a seus recursos.

FACULDADE CATÓLICA PAULISTA | 79


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Figura 21: Ilustração de um deadlock em um Sistema Operacional


Fonte: Disponível em https://www.tutorialspoint.com/process-deadlocks-in-operating-system. Acesso em: 10 de jul. 2021

O mesmo conceito é assim explicado por Silberschatz, Baer e Gagne (2015):

Em um ambiente de multiprogramação, vários processos podem


competir por um número finito de recursos. Um processo solicita
recursos; se os recursos não estão disponíveis naquele momento, o
processo entra em estado de espera. Em alguns casos, um processo
em espera não consegue mais mudar de estado novamente porque os
recursos que ele solicitou estão reservados para outros processos em
espera. Essa situação é chamada deadlock (SILBERSCHATZ; BAER;
GAGNE, 2015, p. 169).

Evitar os deadlocks – ou colocar em prática formas de manipulá-los adequadamente


- é um dos objetivos de uma aplicação, em conjunto com o Sistema Operacional e
esta será nossa principal abordagem neste encontro. Se considerarmos que nossos
programas usam muitos recursos do sistema e que ambientes de multiprogramação
são a base das nossas soluções computacionais atuais, podemos então concluir que
os problemas de deadlock tendem a crescer em nossas aplicações.
Antes de tratarmos especificamente das características de um deadlock será
necessário investir algum tempo na abordagem de modelo de sistema, a fim de
contextualizarmos o que chamaremos de recursos. Podemos imaginar um sistema
computacional como uma entidade constituída por uma quantidade finita de
recursos, que deverão atender a vários processos que competirão por eles. Situações
semelhantes ocorrem em nosso cotidiano e o orçamento anual de marketing que será
disputado por diversas ações pode ser exemplo de uma delas.
Voltando aos sistemas computacionais, os recursos dos quais estamos tratando
podem ser divididos em vários tipos e todos eles são nossos conhecidos: tempo de

FACULDADE CATÓLICA PAULISTA | 80


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

CPU, arquivos de configuração e dispositivos de entrada e saída (como impressoras


e SSDs, entre outros) são exemplos de recursos. A depender da quantidade destes
recursos oferecidos no sistema, podemos contar com mais de uma instância deles. Se
o sistema conta com duas impressoras, teremos duas instâncias da impressora. Da
mesma forma, se o sistema conta com quatro CPUs, então teremos quatro instâncias
deste recurso.
Há, no entanto, uma consideração a ser feita nesta questão: se um processo
solicitar uma instância de um tipo de recurso, o mecanismo de alocação deve
selecionar qualquer uma das instâncias para satisfazer este pedido. Caso isso não
ocorra haverá a indicação clara de que algo de errado aconteceu na definição das
classes de recursos disponíveis e que as instâncias não são idênticas.

13.2 Considerações sobre utilização de recursos


Em relação ao procedimento de uso do recurso, um processo deve solicitar uma
instância de um recurso antes de utilizá-lo e, ao concluir seu uso, deve liberar tal
recurso.
Conforme Silberschatz, Baer e Gagne (2015), sob condições normais de operação,
um processo pode utilizar um recurso obedecendo somente à seguinte sequência:
1. Solicitação: o processo solicita o recurso. Se a solicitação não puder ser
atendida imediatamente (por exemplo, se o recurso estiver sendo usado por outro
processo), o processo solicitante deve esperar até que possa adquirir o recurso.
2. Uso: o processo pode operar sobre o recurso (por exemplo, se o recurso for
uma impressora, o processo pode imprimir na impressora).
3. Liberação: o processo libera o recurso.

O Sistema Operacional exerce papel importante na confirmação do uso de um


recurso. Quando um processo solicita um recurso, o SO verifica se, efetivamente, o
recurso foi disponibilizado e recebido pelo recurso. O controle de recursos livres e
alocados é feito por meio de uma tabela na qual o sistema guarda essas informações
e associa o recurso utilizado a um determinado processo. Para exemplificarmos,
imagine um serviço de locação de bicicletas: haverá um registro das que estão
disponíveis e, além disso, todas as ocupadas estarão associadas ao nome de quem
as utiliza no momento. E o que acontece quando um processo solicita um recurso
que, no momento, está alocado a outro processo? Neste caso, o processo solicitante

FACULDADE CATÓLICA PAULISTA | 81


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

deverá aguardar sua vez em uma fila. Um conjunto de processos está em estado de
deadlock quando cada processo do conjunto está esperando por um evento que pode
ser causado apenas por outro processo no conjunto.

ISTO ACONTECE NA PRÁTICA

Para ilustrar um estado de deadlock considere um sistema com três SSDs e


considere também que cada um dos processos mantenha um dos drives. Se
cada processo solicitar outro drive para gravar ou fazer leitura de dados, os três
processos entrarão em estado de deadlock. Cada processo está esperando pelo
evento “O SSD está liberado”, que pode ser causado apenas por um dos outros
processos em espera. Esse exemplo ilustra um deadlock envolvendo o mesmo tipo
de recurso e devem ser fonte de preocupação dos desenvolvedores para que seja
evitado.
Fonte: adaptado de (SILBERSCHATZ; BAER; GAGNE, 2015).

É essencial, portanto, evitar um deadlock antes que ele ocorra. Para isso, o sistema
deve verificar cada transação antes de ser executada para certificar-se de que ela não
leva a um deadlock. Se houver uma pequena chance de que uma transação possa levar
a um impasse no futuro, ela nunca deverá ter permissão para ser executada. Para
que a prevenção seja feita de forma eficiente, é necessário conhecer as condições
necessárias para que um deadlock ocorra.

13.3 Condições para ocorrência de um Deadlock


A ocorrência de um deadlock está vinculada a ocorrência simultânea destas quatro
situações:

13.1.1 Exclusão Mútua


A exclusão mútua - do ponto de vista do recurso – decorre do fato de que um
recurso nunca pode ser usado por mais de um processo simultaneamente, e este é o
principal provocador de impasses. Se um recurso pudesse ser usado por mais de um
processo ao mesmo tempo, o processo nunca estaria esperando por nenhum recurso.

13.1.2 Retenção e Espera


A condição de retenção e espera ocorre quando um processo retém um recurso
e espera por algum outro recurso para concluir sua tarefa. O deadlock ocorre porque

FACULDADE CATÓLICA PAULISTA | 82


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

pode haver mais de um processo que está mantendo um recurso e aguardando por
outro. É necessária, portanto, a implementação de algum mecanismo pelo qual
um processo não detenha nenhum recurso ou não espere. Isso significa que um
processo deve receber todos os recursos necessários antes do início da execução.
Em outras palavras, um processo não deve esperar por nenhum recurso depois de
iniciada a execução. Isso poderia ser implementado de forma prática se um processo
declarasse todos os recursos inicialmente. No entanto, essa “reserva” não pode ser
feita no sistema de computacional, já que um processo não pode determinar os
recursos necessários previamente.

13.1.3 Inexistência de preempção


O deadlock surge também devido ao fato de que um processo não pode ser
interrompido depois de iniciado seu processamento. No entanto, se retirarmos o
recurso do processo que está causando o deadlock, podemos evitá-lo. Esta certamente
não é uma boa abordagem, pois se retirarmos um recurso que está sendo usado pelo
processo, todo o trabalho que feito até o momento pode se tornar inconsistente.
Considere que uma impressora está sendo usada por qualquer processo. Se retirarmos
a impressora desse processo e atribuí-la a algum outro processo, então todos os
dados que foram impressos podem se tornar pouco úteis.

13.1.4 Espera circular


Para implementar a espera circular podemos atribuir um número de prioridade
a cada um dos recursos e um processo não pode solicitar um recurso de menor
prioridade. Isso garante que nenhum processo poderá solicitar um recurso que está
sendo utilizado por algum outro processo e que nenhum ciclo seja formado. Nas
palavras de Silberschatz, Baer e Gagne (2015), deve haver um conjunto {P0, P1, …, Pn}
de processos em espera, tal que P0 esteja esperando por um recurso retido por P1, P1
esteja esperando por um recurso retido por P2, …, Pn-1 esteja esperando por um recurso
retido por Pn, e Pn esteja esperando por um recurso retido por P0.

FACULDADE CATÓLICA PAULISTA | 83


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

ISTO ESTÁ NA REDE

O vídeo abaixo indicado trata de forma lúdica e agradável a caracterização de um


deadlock.
Como caracterizar Deadlocks? - Sistemas Operacionais. Disponível em: https://www.
youtube.com/watch?v=UwC9csiMU0E. Acesso em: 11 jul. 2021.

Antes de terminarmos este encontro, uma questão deve ser abordada: de que forma
os Sistemas Operacionais lidam com o problema do deadlock? Existem basicamente
três abordagens, mas a resposta pode ser surpreendente. O Sistema Operacional pode
utilizar um protocolo de ações que impedem os deadlocks. A segunda abordagem
consiste em permitir que o sistema entre em deadlock, mas que um mecanismo de
recuperação entre em ação sempre que isso aconteça. Por fim, a terceira maneira é
aquela adotada pela maioria dos Sistemas Operacionais, incluindo provavelmente o
que você está usando neste momento: ignorar que deadlocks podem ocorrer e deixar
que o desenvolvedor do aplicativo assuma a responsabilidade por evitá-los.
Não deixe de fazer leituras adicionais e de cumprir com as atividades recomendadas.
Bom estudo e até a próxima!

FACULDADE CATÓLICA PAULISTA | 84


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 14
VIRTUALIZAÇÃO E
MÁQUINAS VIRTUAIS
Caso você tenha sido tomada ou tomado por uma súbita curiosidade para
conhecer os vários significados que podem ser relacionados ao termo “virtual” deve
ter encontrado no dicionário coisas como “elemento existente apenas potencialmente,
mas sem efeito real” ou “que poderá vir a ser, existir, acontecer ou praticar-se; possível,
factível”. Ainda sem conseguir relacionar com perfeição o termo ao que encontrou
como significado pode ter encontrado a expressão “aquilo que constitui uma
simulação criada por meios eletrônicos como, por exemplo, uma imagem do cosmos”.
Embora estas definições sejam absolutamente úteis para o entendimento do termo,
algumas adaptações e especificações precisam ser feitas em nosso contexto. De
qualquer forma, o resultado que obtemos das máquinas virtuais e do processo de
virtualização é absolutamente indispensável para a ótima utilização dos nossos
recursos computacionais. Permaneça conosco e boa leitura!

14.1 Conceito
Em termos mais formais, a virtualização é o processo de execução de uma instância
virtual de um sistema de computador em uma camada abstraída do hardware
real. Por enquanto, esta definição pode soar nada esclarecedora, mas aos poucos
abordaremos elementos que tornarão seu entendimento mais claro. Podemos
afirmar, por exemplo, que a virtualização se refere à execução de vários Sistemas
Operacionais simultaneamente em um único computador e, para os aplicativos em
execução na máquina virtualizada, pode parecer como se estivessem em sua própria
máquina dedicada, o que torna toda a estrutura transparente para o usuário.
Existem muitos motivos pelos quais as pessoas utilizam a virtualização na
computação. Para usuários de desktop, a utilidade deste recurso nasce do fato de
que será possível executar aplicativos destinados a um sistema operacional diferente,
sem ter que trocar de computador. Para administradores de servidores, a virtualização
também oferece a capacidade de executar diferentes sistemas operacionais, além de
oferecer uma maneira de segmentar um grande sistema em muitas partes menores,

FACULDADE CATÓLICA PAULISTA | 85


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

permitindo que o servidor seja usado de forma mais eficiente por vários usuários
diferentes ou aplicativos com necessidades diferentes. Outro motivo está relacionado
ao isolamento de dados e de programas, pois os mantêm dentro de uma máquina
virtual protegidos dos processos que ocorrem em outra máquina virtual no mesmo
servidor.

14.2 Hypervisor
Um conceito bastante importante no escopo do nosso estudo é o hypervisor. Trata-
se de um programa capaz de criar, executar e manter máquinas virtuais. De acordo
com VMware (2021), existem dois tipos principais de hypervisors, chamados de
“Tipo 1” (ou “bare metal”) e “Tipo 2” (ou “hosted”). Um hypervisor tipo 1 atua como um
Sistema Operacional, que é executado diretamente no hardware do host, enquanto
um hypervisor tipo 2 é executado como uma camada de software em um sistema
operacional, como outros programas de computador.

ANOTE ISSO

Em uma definição de dicionário, o termo host significa hospedeiro. No contexto


computacional, este termo identifica um computador que oferece dados, programas
e serviços aos usuários conectados a ele por meio de uma rede. Um host também
é identificado como um servidor.

O tipo de hypervisor mais comumente implantado é o tipo 1 ou bare-metal. Neste


caso, o software de virtualização é instalado diretamente no hardware onde o sistema
operacional é normalmente instalado. Como os hypervisors bare-metal são isolados do
sistema operacional sujeito a ataques, eles são extremamente seguros. Além disso,
eles geralmente têm um desempenho melhor e mais eficiente do que de outros tipos.
Por essas razões, a maioria das empresas escolhem hypervisors bare-metal para as
necessidades de computação do data center.
Enquanto os hypervisors bare-metal são executados diretamente no hardware do
sistema de computação, os hypervisors hospedados são executados no sistema
operacional (SO) da máquina hospedeira. Embora os hypervisors hospedados sejam
executados no sistema operacional, sistemas operacionais adicionais (e diferentes)
podem ser instalados na parte superior do hypervisor. A desvantagem dos hypervisors
hospedados é que a latência é maior do que os hypervisors do tipo 1. Isso ocorre

FACULDADE CATÓLICA PAULISTA | 86


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

porque a comunicação entre o hardware e o hypervisor deve passar pela camada


extra do sistema operacional. Os hypervisors hospedados às vezes são conhecidos
como hypervisors de cliente porque são usados com mais frequência com usuários
finais e testes de software, onde a latência mais alta é menos preocupante.

14.3 Benefícios relacionados à virtualização


Apesar das aparentes vantagens em se adotar um esquema de virtualização, será
mesmo possível identificar elementos objetivos que auxiliem a decisão dos gestores
de TI a favor da adoção destes recursos? VMWare (2021) nos ajuda nesta missão de
descrever benefícios em usar um hypervisor que hospeda várias máquinas virtuais:
• Velocidade: os hypervisors permitem que as máquinas virtuais sejam criadas
instantaneamente, o que torna mais fácil provisionar recursos conforme necessário
para cargas de trabalho dinâmicas.
• Eficiência: os hypervisors que executam várias máquinas virtuais nos
recursos de uma máquina física também permitem uma utilização mais eficiente de
um servidor físico. É mais econômico em termos de custo e energia executar várias
máquinas virtuais em uma máquina física do que executar várias máquinas físicas
subutilizadas para a mesma tarefa.
• Flexibilidade: os hypervisors bare-metal permitem que os sistemas
operacionais e seus aplicativos associados sejam executados em uma variedade
de tipos de hardware porque o hypervisor separa o sistema operacional do hardware
subjacente, de modo que o software não depende mais de dispositivos ou drivers de
hardware específicos.
• Portabilidade: os hypervisors permitem que vários sistemas operacionais
residam no mesmo servidor físico (máquina host). Como as máquinas virtuais que
o hypervisor executa são independentes da máquina física, elas são portáteis. As
equipes de TI podem mudar as cargas de trabalho e alocar recursos de rede, memória,
armazenamento e processamento em vários servidores conforme necessário,
passando de máquina para máquina ou de plataforma para plataforma. Quando
um aplicativo precisa de mais poder de processamento, o software de virtualização
permite que ele acesse máquinas adicionais sem problemas.

Se fosse preciso concentrar as vantagens da virtualização em poucas palavras,


talvez a expressão ideal seria: “a virtualização nos dá a capacidade de compartilhar

FACULDADE CATÓLICA PAULISTA | 87


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

o mesmo hardware e ainda assim executar vários ambientes de execução diferentes


(isto é, diferentes sistemas operacionais) concorrentemente (SILBERSCHATZ; BAER;
GAGNE, 2015). Os autores ainda pontuam um aspecto relacionado à segurança como
benefício: o sistema hospedeiro é protegido das máquinas virtuais, da mesma forma
que as máquinas virtuais são protegidas umas das outras. Um programa invasor
que eventualmente fosse instalado no Sistema Operacional virtualizado não afetaria o
servidor físico, nem as outras máquinas virtuais.
Esta situação remete a ideia de que há isolamento entre máquinas virtuais, o que
sugere que o compartilhamento de recursos pode não ocorrer. No entanto, duas
técnicas vêm sendo implementadas, uma mais abrangente que a outra. Na primeira
abordagem é possível compartilhar arquivos. Na segunda, uma rede de máquinas
virtuais é implementada e, por meio desta rede, todo o tipo de recurso poderá ser
compartilhado.

ISTO ACONTECE NA PRÁTICA

A Computação em Nuvem (ou Cloud Computing) vem expandindo os horizontes


da computação moderna ao possibilitar que usuários corporativos obtenham, por
exemplo, condições de locar hardware remoto mediante o pagamento de valor
mensal a corporações que oferecem esse tipo de serviço. Esta prática é viabilizada
justamente pelas máquinas virtuais configuradas em grandes servidores, que dão a
sensação a estes usuários de terem um computador de uso exclusivo quando, na
verdade, este computador está sendo compartilhado por vários inquilinos.

Em se tratando de computadores pessoais, a virtualização permite a usuários


comuns efetivarem conexões remotas a máquinas virtuais e acessarem suas
aplicações como se estivessem diante do computador hospedeiro. Naturalmente que
este usuário deverá contar com conexão de internet, mas o computador que utilizará
para este acesso poderá contar com uma configuração muito menos sofisticada do
que se ele precisasse executar os programas localmente. Esse fato, naturalmente,
acaba tornando a operação toda menos dispendiosa.

14.4 Tipos de virtualização


Embora o centro das nossas abordagens sejam os Sistemas Operacionais, vale a
menção aos outros os componentes de um data center tradicional (ou da infraestrutura

FACULDADE CATÓLICA PAULISTA | 88


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

de TI) que podem ser virtualizados, com vários tipos específicos de virtualização
(VMWARE, 2021):

• Virtualização de hardware: ao virtualizar hardware, versões virtuais de


computadores e sistemas operacionais são criadas e consolidadas em um único
servidor físico primário. Um hypervisor se comunica diretamente com o espaço em
disco e CPU de um servidor físico para gerenciar as máquinas virtuais. A virtualização
de hardware, também conhecida como virtualização de servidor, permite que os
recursos de hardware sejam utilizados de forma mais eficiente e que uma máquina
execute simultaneamente diferentes Sistemas Operacionais.
• Virtualização de software: a virtualização de software cria um sistema
de computador completo com hardware, que permite que um ou mais sistemas
operacionais sejam executados em uma máquina hospedeira física. Por exemplo, o
sistema operacional Android pode ser executado em uma máquina hospedeira que
usa nativamente um sistema operacional Microsoft Windows, utilizando o mesmo
hardware. Além disso, os aplicativos podem ser virtualizados e entregues de um
servidor para o dispositivo de um usuário final, como um laptop ou smartphone. Isso
permite que os funcionários de uma organização acessem aplicativos hospedados
remotamente.
• Virtualização de armazenamento: o armazenamento pode ser virtualizado
através da consolidação de vários dispositivos de armazenamento físico para
aparecer como um único dispositivo de armazenamento. Os benefícios incluem maior
desempenho e velocidade, balanceamento de carga e custos reduzidos. A virtualização
de armazenamento também ajuda no planejamento de recuperação de desastres, pois
os dados de armazenamento virtual podem ser duplicados e rapidamente transferidos
para outro local, reduzindo o tempo de inatividade.

ISTO ESTÁ NA REDE

Neste vídeo de pouco mais de 11 minutos você terá contato com itens introdutórios
relacionados à virtualização, com abordagem especial para Hypervisor.
Disponível em: https://www.youtube.com/watch?v=QUDS8a1KaA4. Acesso em: 13 jul. 2021.

• Virtualização de rede: várias subredes podem ser criadas na mesma rede


física combinando equipamentos em um único recurso de rede virtual baseado em

FACULDADE CATÓLICA PAULISTA | 89


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

software. A virtualização de rede também divide a largura de banda disponível em


vários canais independentes, cada um dos quais pode ser atribuído a servidores e
dispositivos em tempo real. As vantagens incluem maior confiabilidade, velocidade
da rede, segurança e melhor monitoramento do uso de dados. A virtualização de rede
pode ser uma boa escolha para empresas com um grande volume de usuários que
precisam de acesso o tempo todo.

Antes de encerrarmos este encontro, vale um registro. Embora as máquinas virtuais


tenham várias vantagens sobre as máquinas físicas, também existem algumas
desvantagens potenciais: executar várias máquinas virtuais em uma máquina física
pode resultar em desempenho instável se os requisitos de infraestrutura não forem
atendidos. Além disso, as máquinas virtuais são menos eficientes e funcionam mais
lentamente do que um computador físico completo. Uma saída para esta característica
é a de usar uma combinação de infraestrutura física e virtual para equilibrar as vantagens
e desvantagens correspondentes. Feitas estas considerações, resta apenas reafirmar
que a utilização de máquinas virtuais é revertida em os inúmeros benefícios para uma
organização e este fato não perde a importância mediante alguns pequenos pontos
de atenção que este recurso pode sugerir aos gerentes de TI.
Mantenha-se firme nas atividades propostas e não deixe de procurar leitura
adicional. Até a próxima!

FACULDADE CATÓLICA PAULISTA | 90


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 15
SISTEMAS OPERACIONAIS
MULTIMÍDIA
Em um passado não tão distante, a utilização dos computadores estava restrita à
grandes corporações, órgãos governamentais e instituições de ensino. No entanto,
algo aconteceu que mudou este cenário e uma das razões que mais contribuiu para
que os computadores deixassem de ser recurso exclusivo destes ambientes para
se tornar presença frequente na casa das pessoas foi o aspecto amigável que as
interfaces de usuário assumiram, ao mesmo tempo que os Sistemas Operacionais
viabilizavam a interação com som, imagens em movimento e toda a espécie de
entretenimento capaz de cativar os usuários comuns. Nesta aula trataremos das
definições relacionadas à multimídia e das características necessárias para que um
Sistema Operacional possa lidar com conteúdo composto por animações, sons e
imagens. Boa leitura!

15.1 Introdução
A importância dos Sistemas Operacionais Multimídia nasce da criticidade dos
seus dois componentes. Em relação aos Sistemas Operacionais, esmiuçamos suas
características e aplicações ao longo dos nossos encontros anteriores e, portanto, já
conhecemos seu papel no contexto de um sistema computacional. A multimídia, por
sua vez, é um dos aspectos mais importantes da área da Tecnologia da Informação.
Atualmente, a multimídia geralmente indica uma rica interação sensorial entre
humanos e computadores (ou dispositivos semelhantes a computadores), por meio
de interfaces que na maioria dos casos dá ao usuário controle sobre o ritmo e a
sequência das informações.
Embora todos nós sejamos capazes de reconhecer um elemento multimídia
quando o vemos ou ouvimos, ainda assim se faz necessária uma conceituação mais
formal do tópico. O termo multimídia descreve uma grande variedade de aplicações
que são de uso popular em nossos dias. Este termo cobre uma grande categoria de
mídias, que inclui arquivos de áudio e vídeo, incluindo arquivos de áudio MP3, filmes,
videoclipes curtos e arquivos de animação e até mesmo notícias que podem ser lidas

FACULDADE CATÓLICA PAULISTA | 91


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

ou ouvidas pela internet.

ANOTE ISSO

Multimídia é a comunicação entre homem e o computador utilizando diversos


meios de apresentação da informação, tais como áudio, vídeos, imagens e realidade
virtual. A multimídia está presente em várias atividades do cotidiano, incluindo o
comércio eletrônico, na publicidade, na televisão e no cinema (GALLOTI, 2017).

A multimídia tem duas características principais que devem ser bem compreendidas
para que sua abordagem seja feita com sucesso:
A multimídia tem duas características principais que devem ser bem compreendidas
para lidar com ela com sucesso:

1. Elementos de multimídia usa taxas de dados extremamente altas.


2. A multimídia requer reprodução em tempo real. As altas taxas de dados
originam-se da natureza das informações visuais e acústicas. O olho e o ouvido
podem processar enormes quantidades de informações por segundo e precisam ser
alimentados nessa taxa para produzir uma experiência de visualização aceitável.

Por exemplo, a taxa de dados de um vídeo de alta definição não compactado é


de 288GB / h, o que significa que 2 horas desse tipo de filme preenche um arquivo
de 570GB. Um servidor que armazena 1.000 desses filmes precisa de 570TB de
espaço em disco. A segunda demanda que a multimídia coloca em um sistema é a
necessidade de entrega de dados em tempo real. Se esta condição não for satisfeita,
teremos alguns problemas que poderão comprometer a experiência do usuário.
Os quadros de um filme devem ser entregues a uma determinada taxa (25 quadros
por segundo, por exemplo) ou o filme ficará instável. O ouvido é mais sensível do que
o olho, portanto, uma variação de até mesmo alguns milissegundos nos tempos de
entrega será perceptível. As propriedades em tempo real necessárias para reproduzir
multimídia de maneira aceitável são frequentemente descritas por parâmetros
de qualidade de serviço (QoS ou Quality of Service). Eles incluem largura de banda
média disponível, largura de banda de pico disponível, atraso mínimo e máximo e
probabilidade de perda de bits.
15.2 Sistema Operacional Multimídia

FACULDADE CATÓLICA PAULISTA | 92


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

Para o processamento de áudio e vídeo, a aplicação multimídia exige que os


humanos percebam essas mídias de uma forma natural e sem erros. Dados de
mídia contínua se originam em fontes como microfones, câmeras e arquivos. A partir
dessas fontes, os dados são transferidos para destinos como alto-falantes, janelas de
vídeo e arquivos localizados no mesmo computador ou em uma estação remota. No
caminho da fonte para o destino, os dados digitais são processados por pelo menos
algum tipo de operação de movimentação, cópia ou transmissão. Neste processo de
manipulação de dados sempre existem muitos recursos que estão sob o controle do
sistema operacional.
A integração de dados de multimídia discretos e contínuos exige serviços adicionais
de muitos componentes do Sistema Operacional e, se o seu trabalho principal for
atender a multimídia, então o identificamos como Sistema Operacional Multimídia, que
se difere dos tradicionais de três maneiras principais: escalonamento de processos,
sistema de arquivos e escalonamento de disco. Discutiremos estas especificidades
nas seções seguintes.

15.2.1 Escalonamento de processos multimídia


O que chamamos de Sistema Operacional Multimídia é, antes de tudo, um sistema
em tempo real e o aspecto principal neste contexto é o processamento em tempo real
de dados de mídia contínua. O gerenciamento de processos deve levar em consideração
os requisitos de tempo impostos pelo manuseio de dados multimídia, conforme já
discutimos em seção anterior. Por isso, métodos de escalonamento apropriados
devem ser aplicados. Na condição de um sistema de tempo real flexível, os Sistemas
Operacionais Multimídia também devem considerar as tarefas sem restrições severas
de tempo. A comunicação e sincronização entre processos únicos deve atender às
restrições de requisitos de tempo real e relações de tempo entre diferentes meios. A
memória principal está disponível como um recurso compartilhado para processos
únicos.
Para o escalonamento de tarefas de multimídia, dois objetivos aparentemente
conflitantes devem ser considerados:
• Um processo não crítico não deve sofrer de inanição por causa da execução
de processos críticos. Os aplicativos multimídia dependem tanto de texto e gráficos
quanto de áudio e vídeo. Portanto, nem todos os recursos do sistema devem ser
ocupados pelos processos de tempo crítico e seus processos de gerenciamento.
• Por outro lado, um processo crítico em termos de tempo nunca deve estar
sujeito à inversão de prioridade. O escalonador deve garantir que qualquer inversão de

FACULDADE CATÓLICA PAULISTA | 93


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

prioridade (também entre processos de tempo crítico com prioridades diferentes) seja
evitada ou reduzida tanto quanto possível.

O perfil dos processos que compõem uma aplicação multimídia também são
determinantes para a escolha do algoritmo adequado de escalonamento. Imaginemos
que os processos sejam todos homogêneos. O tipo mais simples de configuração
de servidor é a que pode suportar a exibição de um número fixo de filmes, todos
usando a mesma taxa de quadros, resolução de vídeo, taxa de dados e outros
parâmetros. Nestas circunstâncias, uma estratégia de escalonamento simples, mas
eficaz, seria a seguinte: para cada filme, há um único processo cujo trabalho é ler
o filme do disco um quadro por vez e transmitir o quadro ao usuário. Como todos
os processos são igualmente importantes (ou homogêneos, como os chamamos
antes), têm a mesma quantidade de trabalho a fazer por quadro e bloqueiam quando
concluem o processamento do quadro atual, o escalonamento Round-Robin (RR)
cumpriria o trabalho perfeitamente bem. A única adição necessária aos algoritmos
de escalonamento padrão é o mecanismo de temporização para garantir que cada
processo seja executado na frequência correta.
Infelizmente, o modelo que descrevemos raramente é aplicável na realidade. Os
tamanhos dos quadros variam amplamente devido à natureza da compressão do
vídeo e filmes diferentes podem ter resoluções diferentes. Como uma sequência,
diferentes processos podem ter que ser executados em diferentes frequências, com
diferentes quantidades de trabalho e com diferentes prazos nos quais o trabalho deve
ser concluído. Isso leva a vários processos competindo pela CPU, cada um com seu
próprio perfil e tempo para execução.

15.2.2 Sistemas de Arquivos para Multimídia


O modelo do sistema de arquivos convencional que conhecemos precisa de
adaptações para aproveitamento em ambiente multimídia, devido à necessidade de
comportamento em tempo real. Um problema é que o usuário deve fazer as chamadas
de leitura com espaçamento relativamente preciso no tempo. Um segundo problema
é que o servidor de vídeo deve ser capaz de fornecer os blocos de dados sem demora,
algo que é difícil para ele fazer quando as solicitações chegam não planejadas e
nenhum recurso foi reservado com antecedência.
Para resolver essas questões, os servidores de arquivos multimídia implementam
um mecanismo interessante. Para ler um arquivo multimídia, um processo do usuário
emite uma chamada de sistema especificando o arquivo a ser lido e vários outros

FACULDADE CATÓLICA PAULISTA | 94


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

parâmetros, como as faixas de som e legendas. O servidor começa a enviar os quadros


até que o usuário envie uma chamada de sistema de parada. Como a experiência do
usuário inclui pausas, avanços e retrocessos no arquivo multimídia, tais operações
devem estar acessíveis e previstas.
A pausa é bastante direta: o usuário envia uma mensagem de volta ao servidor
de vídeo para solicitar que ele interrompa o fluxo. O servidor deve saber apenas qual
quadro sai em seguida, para continuar a partir do momento em que o usuário o instruir
a iniciar novamente. A operação de retrocesso lento também é simples: o Sistema
Operacional do servidor deve ser comunicado que o próximo quadro a ser enviado é
zero. No entanto, avançar e retroceder rapidamente são muito mais complicados. Se
não fosse pela compressão, uma maneira de avançar a k vezes a velocidade normal
exigiria a exibição de cada k-ésimo quadro.
A localização dos arquivos é outra questão a ser abordada. Os arquivos multimídia
são muito grandes, geralmente são gravados apenas uma vez, mas lidos muitas vezes,
e tendem a ser acessados sequencialmente. Sua reprodução também deve atender a
critérios estritos de qualidade de serviço. Juntos, esses requisitos sugerem layouts de
sistema de arquivos diferentes do uso tradicional do Sistema Operacional.
Uma maneira de eliminar buscas em arquivos distribuídos em vários locais no disco
é usar arquivos contíguos. Quando esta providência se mostrar de difícil aplicação,
um arranjo de armazenamento possível é aquele que intercala arquivos de vídeo, áudio
e texto em quadro (ou frames), conforme mostrado na figura 22.

Figura 22: Intercalando vídeo, áudio e texto em um arquivo de filme


Fonte: adaptado de (RAHMAN, 2005).

Neste caso, o arquivo inteiro ainda é contíguo. No entanto, o vídeo do quadro 1 é


seguido diretamente pelas várias trilhas de áudio do quadro 1 e, em seguida, pelas
várias trilhas de texto do mesmo quadro 1. Embora estejamos a disponibilização de
um único filme no servidor, o sistema deverá conter muitos outros filmes. A ideia é
encontrar uma maneira de colocar os arquivos a fim de minimizar o tempo perdido ao
mover a cabeça do disco de um filme para outro.
A solução mais eficiente, no entanto, é outra. Ter muitos discos em execução em

FACULDADE CATÓLICA PAULISTA | 95


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

paralelo é uma boa maneira de aumentar o desempenho global do sistema. Uma


configuração comum é simplesmente um grande número de discos que não giram
de forma síncrona e não contêm bits de paridade, como o RAID. Uma configuração
possível é colocar o filme A no disco 1, B no disco 2 e assim por diante. Esta organização
é simples, mas o correto balanceamento da carga deve ser buscado.

15.2.3 Escalonamento de discos


A terceira diferença entre os Sistemas Operacionais Multimídia e o tradicional é
o escalonamento de disco e isso se deve às taxas de dados extremamente altas de
multimídia e à entrega de dados em tempo real. Cada transmissão ativa coloca uma
carga bem definida em um sistema que também é altamente previsível. Por exemplo,
em uma reprodução feita a cada 33,3ms, o sistema deve fornecer quadros nessa
velocidade, cuidando de colocar ao menos um quadro em memória temporária (buffer)
por transmissão, para a busca do quadro k+1 possa prosseguir em paralelo com a
reprodução do quadro k.
Essa carga previsível pode ser usada para escalonar o disco usando algoritmos
modificados para operação multimídia. Suponha que haja 10 usuários, cada um
visualizando um filme diferente. Além disso, assumiremos que todos os filmes têm a
mesma resolução e taxa de quadros, entre outras características comuns. Dependendo
do resto do sistema, o computador pode ter 10 processos, um por transmissão (ou
stream) de vídeo ou um processo com 10 threads, ou mesmo um processo com um
thread que lida com os 10 streams, segundo o algoritmo Round-Robin (RR).
Neste contexto, o importante é que o atendimento a cada transmissão seja dividido
em frações de tempo de, por exemplo, 33,3ms. No início de cada divisão de tempo,
uma solicitação de disco é gerada em nome de cada usuário. Após todos os pedidos
terem chegado no início do atendimento, o disco saberá como proceder. Assim, o
disco poderá classificar e processar as solicitações da maneira mais eficiente.

Como vimos, algumas características do Sistema Operacional devem ser adaptadas


para tratar arquivos de natureza multimídia, mas nada que o torne extremamente
complexo. Esperamos que este conteúdo tenha sido bem aproveitado. A gente se vê
na próxima aula. Até logo!

FACULDADE CATÓLICA PAULISTA | 96


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

AULA 16
SISTEMAS OPERACIONAIS
PARA DISPOSITIVOS MÓVEIS
Não há como negar: os dispositivos móveis – principalmente os smartphones –
são artefatos que fazem parte das nossas vidas e, sem eles, perderíamos bastante do
nosso contato com o mundo. Foi-se o tempo em que o telefone que carregávamos no
bolso servia apenas para recebermos (raras) ligações ou para enviarmos mensagens de
texto curtas. Em nossos dias, aparelhos celulares possuem poder de processamento
muitas vezes maior do que grandes computadores em um passado não tão remoto
e tanto avanço pode ser atribuído às melhorias aplicadas em seu hardware, mas
também (e sobretudo) aos Sistemas Operacionais que os equipam.
Cada dispositivo móvel de comunicação precisa de um Sistema Operacional
para executar seus serviços, seja a conexão com a internet, o uso da câmera ou a
execução da aplicação de rede social que nos entretém. Chegamos assim ao nosso
último encontro e usaremos o tempo que nos resta para tratarmos de Sistemas
Operacionais para dispositivos móveis, seja das suas características comuns, seja
das especificidades de cada principal fabricante que conhecemos. Fique conosco e
boa leitura!

16.1 Introdução
Um Sistema Operacional para dispositivos móveis (ou simplesmente Sistema
Operacional móvel) é uma plataforma de software sobre a qual outros programas,
chamados de programas de aplicativos, podem ser executados em dispositivos
móveis, como tablets e smartphones. Ao longo dos anos, o projeto do Sistema
Operacional móvel passou por uma evolução de três fases: do Sistema Operacional
baseado em nossos computadores pessoais para um sistema operacional integrado,
e dele para Sistemas Operacionais orientados ao modelo móvel de operação.
Ao longo do processo, a arquitetura do Sistema Operacional móvel passou de
complexa a simples. O processo de evolução é naturalmente impulsionado pelos
avanços da tecnologia em hardware, software e na Internet, conforme detalharemos
na sequência:
• Hardware: a indústria ocupou-se em reduzir o tamanho dos microprocessadores

FACULDADE CATÓLICA PAULISTA | 97


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

e periféricos para projetar dispositivos móveis de fato. Antes dessa redução, o


dispositivo móvel não conseguia atingir o tamanho pequeno e uma capacidade elevada
de processamento ao mesmo tempo. Caso você não se lembre, tínhamos telefones
“móveis” bem grandes e com baixa capacidade de processamento há poucos anos.
Recursos como sensores, acelerômetros e telas sensíveis ao toque não estavam
disponíveis nos Sistemas Operacionais móveis anteriores.
• Software: em um notebook ou computador de mesa, o software é focado
principalmente na produtividade do usuário, e o suporte para teclado e mouse com
entradas precisas são essenciais. O software para os antigos assistentes de dados
pessoais (PDA), como o próprio nome indica, ajuda o usuário a gerenciar dados
pessoais, como informações de contatos, e-mail etc. Os Sistemas Operacionais
móveis, por sua vez, precisaram ser projetados para boa capacidade de resposta em
um ambiente de interface com o usuário bastante completa, incluídos aí recursos de
tela de toque e outros sensores.
• Internet: junto com o desenvolvimento da Internet, especialmente após a
Web 2.0, há informações abundantes na rede esperando para serem pesquisadas,
organizadas, exploradas e levadas aos usuários. Já faz algum tempo que as pessoas
vivem de forma crescente com a Internet, em vez de apenas navegar na web. Mais e
mais pessoas estão envolvidas no desenvolvimento de aplicações, incluindo os de troca
de informações, desenvolvimento de aplicativos e interações sociais. Naturalmente,
os Sistemas Operacionais móveis não poderiam ficar à margem deste movimento.

As mudanças nas feições do hardware, software e da internet resultaram em uma


variedade de soluções de Sistemas Operacionais móveis concorrentes no mercado,
impulsionadas por diferentes atores. Atualmente, nossos celulares são dominados
por Android (Google) e iOS (Apple), mas houve tempo em que havia boa variedade de
Sistemas Operacionais para serem escolhidos, incluindo Windows Phone, Symbian e
BlackBerry.

16.2 Alguns recursos dos Sistemas Operacionais móveis


Os Sistemas operacionais móveis oferecem vários recursos aos usuários e, talvez
o mais significativo deles seja a capacidade de se conectar à Internet por meio do
modem embutido no smartphone e de um provedor de serviços de conexão móvel.
Esta é a grande diferença entre os Sistemas Operacionais móveis e a maioria dos
SO de desktop, que dependem de uma rede Wi-Fi ou conexão Ethernet para acessar

FACULDADE CATÓLICA PAULISTA | 98


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

a Internet. Os Sistemas Operacionais móveis oferecem um aplicativo de navegador


da web nativo (Safari no iOS, por exemplo), que permite aos usuários pesquisar na
Internet e visitar páginas da web.
Estes sistemas também oferecem lojas de aplicativos que permitem aos usuários
fazer download e interagir com aplicativos móveis. Os Sistemas Operacionais móveis
também possuem aplicativos nativos de GPS (sistema de posicionamento global)
que permitem aos usuários pesquisar locais, seguir instruções passo a passo e
compartilhar a localização com diferentes dispositivos. O recurso GPS, é claro, depende
do hardware do dispositivo móvel e não pode ser executado sem esse suporte.

Como sabemos, as lojas de aplicativos móveis abriram novas possibilidades para


os usuários. Em muitos casos, as empresas desenvolveram aplicativos de vendas que
adicionam novos recursos e interface de usuário aprimorada, com vantagens sobre os
recursos possibilitados pelos sites. Outros recursos comuns do Sistema Operacional
móvel incluem aplicativos de e-mail nativos que permitem aos usuários vincular suas
contas de e-mail pessoais e profissionais, um aplicativo de calendário que permite
aos usuários controlar tarefas, reuniões e eventos e uma biblioteca de contatos para
organizar e pesquisar informações de contato.

16.3 Análise de Sistemas Operacionais Móveis


Nesta seção abordaremos características específicas dos dois Sistemas
Operacionais para dispositivos móveis que dominam o mercado em nossos dias.

16.3.1 Android
O sistema operacional Android para dispositivos móveis é desenvolvido pela Open
Handset Alliance, liderada pelo Google, que revelou a distribuição do Android em
novembro de 2007. A maior parte do núcleo do Android é lançada sob a licença Apache
de código aberto, mas uma grande quantidade de software em dispositivos Android
(como Play Store, Google Search, Google Play Services e Google Music, entre outros)
são proprietários e licenciados. Em 2011, o Android tinha a maior base instalada de
qualquer sistema operacional móvel e, a partir de 2013, seus dispositivos também
vendiam mais do que dispositivos Windows, iOS e Mac OS juntos. Em julho de 2013, a
Google Play Store teve mais de 1 milhão de aplicativos Android publicados e mais de
50 bilhões de aplicativos baixados.
Uma pesquisa com desenvolvedores realizada entre abril e maio de 2013 descobriu

FACULDADE CATÓLICA PAULISTA | 99


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

que 71% dos desenvolvedores de aplicativos móveis desenvolvem para Android. Este
Sistema Operacional usa um kernel Linux com APIs escritas em C e os aplicativos
são normalmente programados em Java e executados com a máquina virtual
Dalvik (DVM). Essa combinação traz alguns recursos seguros, como gerenciamento
eficiente de memória compartilhada, multitarefa preemptiva, identificadores de
usuário Unix (UIDs) e permissões de arquivo com o conceito de tipo seguro de Java.
Cada aplicativo Android é executado em um processo separado sob um UID exclusivo
com permissões distintas, o que significa que os aplicativos normalmente não podem
ler ou gravar os dados ou códigos uns dos outros. O kernel protege os aplicativos
uns dos outros, de modo que os recursos e os dados devem ser compartilhados
explicitamente. Para possibilitar o compartilhamento de recursos entre os aplicativos,
as permissões necessárias devem ser declaradas estaticamente no momento da
instalação do aplicativo.
A plataforma Android contém as seguintes camadas:

1. Kernel do Linux: o Android depende do Linux para os principais serviços do


sistema, como segurança, gerenciamento de memória, gerenciamento de processos
e assim por diante.
2. Android Runtime: fornece um conjunto de bibliotecas principais que dão
suporte à maioria das funcionalidades das bibliotecas principais do Java. A máquina
virtual Android - conhecida como Dalvik VM - depende do kernel Linux para algumas
funcionalidades subjacentes.
3. Bibliotecas: o Android inclui um conjunto de bibliotecas C/C++. Essas
bibliotecas são expostas aos desenvolvedores por meio da estrutura do aplicativo
Android. Eles incluem bibliotecas de mídia, bibliotecas da linguagem C, bibliotecas 3D
e SQLite, entre outras.
4. Framework de aplicação: fornece uma camada de acesso às APIs de
framework usadas pelos aplicativos principais. Ele permite que os componentes
sejam usados pelos desenvolvedores.

16.3.2 iOS
O iOS - anteriormente chamado iPhone OS - é um sistema operacional móvel
desenvolvido pela Apple e distribuído exclusivamente para o hardware Apple. É o
sistema operacional que alimenta o iPhone, iPad, iPod Touch e Apple TV. Trata-se

FACULDADE CATÓLICA PAULISTA | 100


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

de um Sistema Operacional de código fechado, proprietário e construído no sistema


operacional central Darwin, de código aberto. O iOS promoveu um novo estilo de
interação do usuário para telas pequenas em dispositivos de entrada limitados. Gestos
baseados em toque, como deslizar, tocar, tocar e segurar e “beliscar” são usados para
controlar os elementos da interface na tela e para realizar as operações da interface.
Os acelerômetros oferecem suporte a gestos físicos adicionais, como sacudir e
girar a orientação do dispositivo. iOS é derivado do Mac OS X e compartilha sua base
Darwin básica, um sistema operacional UNIX compatível com POSIX de código aberto.
Nesse sentido, o iOS pode ser considerado uma variante do UNIX. O iOS é composto
de quatro camadas de abstração: Core OS, Core Services, Camada de Mídia e Cocoa
Touch, elementos que serão descritos na sequência.
1. Core OS: trata-se do kernel do Sistema Operacional, que inclui recursos
básicos de baixo nível: threads de suporte do sistema, soquetes, suporte para entrada e
saída, DNS, certificados de serviços de segurança geral de memória, chaves privadas /
públicas, criptografia, gerenciamento de hardware externo, Bluetooth e processamento
de som e imagem.
2. Core Services (ou Serviços principais): serviços de sistema fundamentais,
que são subdivididos em diferentes estruturas e baseados em C e Objective-C. Inclui
serviços de aplicativos básicos, incluindo contas, contatos, rede, gerenciamento de
dados, localização, eventos de calendário, lojas virtuais, SQLite, e suporte a XML.
3. Camada de Mídia: considera os frameworks de alto nível, responsáveis pelo
uso de tecnologias gráficas (suporte para gráficos 2D e 3D), áudio e vídeo.
4. Cocoa Touch: o UIKIT é um framework baseado em Objective-C e que fornece
uma série de funcionalidades, que são necessárias para o desenvolvimento de um
aplicativo iOS, tal como gerenciamento da interface de usuário. Ele também inclui
APIs para construir aplicativos multitarefa, entrada por meio de toque, notificações,
visualizações de interface e acesso aos dados do dispositivo.

O iOS também usa um modelo que obriga que as aplicações sejam assinadas com
um certificado. Isso garante que o aplicativo não foi manipulado antes ou depois de
sua execução.

Chegamos ao fim das nossas aulas. Esperamos que todo o conteúdo que
discutimos tenha sido útil em seu crescimento nos assuntos relacionados aos
Sistemas Operacionais. Não deixe de cumprir as atividades propostas e de sempre
procurar leituras adicionais. Boa sorte!

FACULDADE CATÓLICA PAULISTA | 101


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

CONCLUSÃO
Os Sistemas Operacionais fazem parte da lista daqueles assuntos que se tornam
mais interessantes na medida que avançamos em conhecimento. Com a devida
licença literária para atribuir características humanas aos elementos destes sistemas
é muito difícil não se interessar pela sua evolução histórica, pela engenhosidade
dos processos e dos threads, pela esperteza dos algoritmos de escalonamento de
processos e pelas soluções criativas aplicadas no gerenciamento dos recursos de um
arranjo computacional, tais como memória, sistemas de arquivos e dispositivos de
entrada e saída.
Durante nossos encontros, a abordagem dos temas caracterizou-se por um viés
mais teórico, com textos objetivos e de fácil compreensão, e esta forma de tratar
Sistemas Operacionais não foi adotada por acaso: o objetivo sempre foi o de encorajar
você a procurar por novas fontes, diferentes pontos e vista e – por que não – dar a
você bons motivos para se interessar cada vez mais pelo tema. Ficaremos muito
satisfeitos se alcançarmos esta meta.
Por fim, desejamos que você tenha pleno sucesso na conclusão do seu curso e
que, no final, você se torne um profissional que honre a Ciência da Computação e que
ajude a tornar melhor e mais divertida a vida das pessoas por meio dos seus projetos
profissionais.

Até a próxima!

FACULDADE CATÓLICA PAULISTA | 102


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

ELEMENTOS COMPLEMENTARES

LIVRO

Título: Sistema Operacionais Modernos


Autor: Andrew Tanenbaum e Herbert Bos
Editora: Editora Pearson
Sinopse: Esta obra aborda em detalhes muitos dos
temas desenvolvidos durante as aulas, incluindo
processos, threads, gerenciamento de recursos,
deadlocks, sistemas com múltiplos processadores
e virtualização.

FILME

Título: O Jogo da Imitação


Ano: 2014
Sinopse: Alan Turing, interpretado por Benedict
Cumberbatch, é designado pelos aliados para
decifrar o código criado pelos alemães para
comunicação durante a Segunda Guerra Mundial.
Certo de que apenas uma máquina seria capaz de
decifrar o código criado por outra máquina, Turin e
sua equipe desenvolvem um artefato que mudaria
os rumos da guerra.

FACULDADE CATÓLICA PAULISTA | 103


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

WEB

De forma lúdica, objetiva e totalmente ilustrada, o vídeo indicado nos apresenta


personagens que explicam os estados de um processo. Acesse-o em:
https://www.youtube.com/watch?v=a2q60IgXMmw.

FACULDADE CATÓLICA PAULISTA | 104


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

REFERÊNCIAS

DEITEL, H. M., DEITEL, P. J., CHOFFNES, D. R.; Sistemas Operacionais. 3.ed. São
Paulo: Pearson Prentice Hall, 2005.

FLYNN, I. M.; McHOES, A. C., Introdução aos Sistemas Operacionais. São Paulo:
Pioneira Thomson Learning, 2002.

GALLOTTI, G. M. A.; Sistemas Multimídia. São Paulo: Pearson Education do Brasil,


2017.

HAN, C. C, KUMAR, R., SHEA, R., Eddie KOHLER, E., SRIVASTAVA, M.; A
dynamic operating system for sensor nodes. MobiSys ‘05: Proceedings of the 3rd
international conference on Mobile systems, applications, and services. June 2005, pp
163–176https://doi.org/10.1145/1067170.1067188.

LANHELLAS, R.; Trabalhando com Threads em Java. Disponível em http://www.


devmedia.com.br/trabalhando-com-threads-em-java/28780. Acesso em: 5 de jun. de
2017.

MACHADO, F. B., MAIA, L.P.; Arquitetura de Sistemas Operacionais. 5.ed. Rio de


Janeiro: LTC, 2013.

OKEDIRAN, O. O. Mobile Operating Systems and Application Development


Platforms: A Survey. Int. J. Advanced Networking and Applications. Volume: 6 Issue:
1 Pages: 2195-2201 (2014) ISSN: 0975-0290.

OLIVEIRA, R. S.; Sistemas Operacionais. 4. ed. Porto Alegre: Bookman: Instituto de


Informática da UFRGS, 2010.

RAHMAN, A. E. Overview of Multimedia Operating Systems. Disponível em:


http://41.67.20.41/bitstream/handle/123456789/18518/OVERVIEW%20OF%20
MULTIMEDIA%20OPERATING.pdf?sequence=1&isAllowed=y. . Acesso em: 13 jul.

FACULDADE CATÓLICA PAULISTA | 105


SISTEMA OPERACIONAL
PROF. ROQUE MAITINO NETO

2021.

SILBERSCHATZ, A., GALVIN, P. B., GAGNE, G.; Fundamentos de Sistemas


Operacionais. 9. ed. Rio de Janeiro: LTC, 2015.

STUART, L. S. Princípios de Sistemas Operacionais: Projetos e Aplicações. São


Paulo: Cengage Learning, 2011.

TANENBAUM, A. S., BOS, H.; Sistemas Operacionais Modernos. 4. ed. São Paulo:
Pearson Education do Brasil, 2016.

TUTORIALS POINT. Operating System - Memory Management. Disponível em:


https://www.tutorialspoint.com/operating_system/os_memory_management.htm.
Acesso em 21 jun. 21.

WMWARE. What is a virtual machine? Disponível em: https://www.vmware.com/


topics/glossary/content/virtual-machine. Acesso em: 13 jul. 2021.

FACULDADE CATÓLICA PAULISTA | 106

Você também pode gostar