Você está na página 1de 38

Ambientes computacionais e conectividade

1 - FUNDAMENTOS DOS SISTEMAS OPERACIONAIS MODERNOS (DL)

TÓPICO 01

FUNDAMENTOS DE SISTEMAS OPERACIONAIS MODERNOS

Olá, Estudante!

Seja bem-vindo(a) à unidade de estudo fundamentos de sistemas operacionais modernos.


Nesta unidade, apresentaremos os sistemas operacionais quanto à sua definição, seus
objetivos, um breve histórico de sua evolução e seus principais tipos. Vamos também propor
uma forma simples de classificá-los, além de fornecermos outros conceitos importantes.

Você já se perguntou o que acontece quando o seu equipamento microcomputador é


ligado? O que 'administra' todo o seu funcionamento prioriza tarefas e gerencia as suas
mais diferentes atividades? Como um aplicativo consegue executar as suas diferentes
rotinas? Essas são algumas das funções do Sistema Operacional (SO) e essa história e seus
desdobramentos passamos a contar a partir de agora.

Para iniciar nossos estudos relativos aos fundamentos de sistemas operacionais modernos,
convido você a refletir a respeito da importância que os Sistemas Operacionais (SO) possuem
nas atividades relacionadas ao processamento das mais diferentes tecnologias atuais.

NOTÍCIA:

Um sistema operacional (SO) é o coração de um dispositivo eletrônico inteligente,


fundamental para o seu funcionamento. Entre celulares e computadores, há muitas opções
para o usuário escolher, mas algumas se destacam pela imensa base de pessoas utilizando
todos os dias.

Você tem alguma ideia de qual SO é o mais usado na atualidade? Quais os softwares que
completam o pódio do top 3?
Um pequeno spoiler: Microsoft, Apple e Google estão entre as empresas com soluções mais
populares do mundo. Vamos conhecer quais os Sistemas Operacionais mais utilizados no
mercado atualmente? Leia a reportagem abaixo e descubra!

SAIBA MAIS

Qual é o sistema operacional mais usado do mundo?

Link de acesso: https://canaltech.com.br/software/qual-e-o-sistema-operacional-


mais-usado-do-mundo-223507/

Fonte: LISBOA, Alveni. Qual é o sistema operacional mais usado do mundo? Disponível em:
https://canaltech.com.br/software/qual-e-o-sistema-operacional-mais-usado-do-mundo-
223507/. Acesso: 20 set. 2022.

Nessa leitura, vimos os sistemas operacionais mais usados no mundo, que são responsáveis
pela execução e gerenciamento das atividades associadas ao processamento de um
microcomputador.

Ao final deste conteúdo, você será capaz de:

 Entender as relações de sincronização de processos em sistemas operacionais e redes;

 Conhecer as técnicas de alocação e memória no sistema operacional;

 Gerenciar o consumo de memória pelos processos no sistema operacional;

 Diferenciar a multiprogramação com processos e threads;

 Identificar os serviços de administração de sistemas operacionais de rede.

Os Sistemas Operacionais são essenciais para o funcionamento de microcomputadores, pois


priorizam tarefas e gerenciam suas atividades, sendo assim, vamos estudar na sequência os
principais conceitos a eles relacionados.
Definição dos sistemas operacionais

Os sistemas operacionais são responsáveis por executarem diferentes funções dos


microcomputadores, impactando diretamente em seu desempenho, conforme ilustra a
seguinte figura.

Nessa figura, temas uma charge na qual aparece uma jovem diante de um computador. A tela
está em evidência, e nela há vários programas abertos ao mesmo tempo. Então, surge um
rapaz na cena, que pergunta: Nossa! Seu computador não trava com tanta coisa aberta ao
mesmo tempo? A jovem responde: Não, ele tem bastante memória e um ótimo sistema
operacional.

Vamos aprofundar nossos conhecimentos a respeito dos sistemas operacionais por meio do
seguinte vídeo.

VÍDEO AULA (DEFINIÇÃO DE SISTEMA OPERACIONAL)

Definição de sistema operacional

https://player.vimeo.com/video/509770559
Podemos observar que um sistema operacional é um programa, ou conjunto de programas,
especialmente desenvolvido para oferecer, da forma mais simples e transparente possível, os
recursos de um sistema computacional aos seus usuários, controlando e organizando o uso
desses recursos de maneira que se obtenha um sistema eficiente e seguro, ajudando, inclusive,
para não deixar a máquina travar.

De acordo com Stallings (1992), ao tratar dos objetivos e funções dos sistemas operacionais:

Um sistema operacional é um programa que controla a execução dos programas de


aplicação e atua como uma interface entre o usuário do computador e o hardware do
computador.
Um sistema operacional pode ser pensado como tendo dois objetivos ou desempenhando
duas funções: conveniência, pois faz o sistema computacional mais conveniente de usar; e
eficiência, pois permite que os recursos do sistema computacional sejam usados de
maneira eficiente (STALLINGS, 1992, p. 222).

Segundo Silberschatz et al. (2001), que utiliza praticamente a mesma definição dada por
Stallings (1992), um sistema operacional é um ambiente intermediário entre o usuário e o
hardware do computador, no qual os programas podem ser executados de forma conveniente
e eficiente. Davis (1991), Shay (1996) e outros autores apresentam ideias semelhantes.

Tanenbaum (1995, p. 1), por sua vez, define o sistema operacional por meio de uma visão um
pouco diferente:

o mais fundamental de todos os programas do sistema é o sistema operacional que


controla todos os recursos computacionais e provê uma base sobre a qual programas de
aplicação podem ser escritos.

Os sistemas operacionais são uma...

Camada de software que envolve os componentes físicos do computador, intermediando as


interações entre esses componentes e os usuários ou seus programas. Nesse sentido, esses
sistemas podem ser vistos como uma extensão do próprio computador ou como gerenciadores
dos recursos existentes nele.

Em vez de lidar com a complexidade inerente ao hardware, o sistema operacional oferece a


funcionalidade disponível no hardware, por meio de uma interface de programação orientada
à operação de cada tipo de recurso, proporcionando não apenas transparência, mas também
isolando o hardware das aplicações.

ATENÇÃO!

O comportamento do sistema operacional é como uma extensão do próprio hardware, ou


como uma máquina virtual, que possui características diferentes da máquina física real.
Caso múltiplos programas em execução desejem fazer uso dos diversos recursos do hardware,
não é razoável que o controle de tais recursos seja transferido para os programadores, pois
isso acrescentaria uma sobrecarga desnecessária a cada programa, sem que fosse possível
otimizar a utilização dos recursos.

Além disso, falhas ou omissões, mesmo que involuntárias, poderiam provocar erros de
dimensões catastróficas, acarretando perda de grandes quantidades de dados, violações
importantes de segurança etc.

O sistema operacional deve, portanto,...

Encarregar-se de controlar os recursos do computador, garantindo seu uso adequado,


buscando otimizar a utilização e objetivando uma melhor eficiência. Ele se comporta como o
gerente dos recursos do computador.
É importante observar que, em virtude do constante avanço dos recursos tecnológicos,
determinados sistemas operacionais já deixaram de ser utilizados.

SAIBA MAIS

Para conhecer alguns deles, acesse o link a seguir:

10 sistemas operacionais esquecidos pelo tempo.

CANALTECH. 10 sistemas operacionais esquecidos pelo tempo. Redação. 30 ago. 2013.


Disponível em: https://canaltech.com.br/curiosidades/Sistemas-operacionais-esquecidos-pelo-
tempo/. Acesso em: 21 set. 2022.

Após entendermos a função geral de um sistema operacional, o que implica a compreensão da


relação entre software e hardware, que acabamos de conferir, aprofundaremos nossos
estudos sobre o sistema operacional. Vejamos, portanto, seus objetivos.

Objetivos de um sistema operacional

Considerando o tipo, a sofisticação ou as capacidades do computador, um sistema operacional


deve atender a três princípios, expostos a seguir.

1 - Recursos do sistema
2 - Gerenciamento dos recursos existentes
3 - Integridade e a segurança dos dados

Oferecer os recursos do sistema de forma simples e transparente para o usuário;

Atenção!

Além de atender a estes princípios, um sistema operacional deve proporcionar uma interface
para que ele possa ser utilizado por seus usuários.
Historicamente, as primeiras interfaces dos sistemas operacionais eram baseadas em um
conjunto de palavras-chave (comandos) e mensagens de diálogo, que permitiam a execução
de tarefas e a comunicação entre o ser humano (operador) e a máquina (TANENBAUM, 1995).
A figura a seguir ilustra isso.

FIGURA 2 | EXEMPLO DE COMO SE MUDAVA A COR DO TEXTO EM UM ANTIGO SISTEMA


OPERACIONAL

Nessa figura, podemos observar que nos sistemas operacionais pioneiros era necessário entrar
no sistema operacional do programa e inserir um comando específico de programação para
realizar a alteração de cor da fonte no programa de texto e, assim, haver modificação de cor
no texto.

REFLITA

Os comandos e mensagens apresentados definiam a Interação Humano-Computador (IHC)


desse sistema. Atualmente, as interfaces baseadas em modo texto estão em desuso, sendo
substituídas por interfaces gráficas mais modernas e simples que buscam facilitar a utilização
do computador, por meio de sua aparência atraente e seu uso intuitivo.

O desenvolvimento dos sistemas operacionais pode ser melhor observado e compreendido


quando acompanhamos a história do computador. Clique nas datas presentes na linha do
tempo a seguir e confira os principais eventos e movimentos relacionados ao desenvolvimento
dessas máquinas.
1934 – Máquina eletrônica programável do engenheiro Konrad Zuse.
1935 – Início do projeto da máquina eletrônica ABC, baseada em válvulas, para resolução de
sistemas, proposta pelo físico John Vincent Atanasoff
1937 – John Von Neumann, matemático húngaro, propõe uma arquitetura genérica para o
computador, utilizada até hoje.
1939 – Desenvolvida a primeira calculadora eletrônica dos laboratórios Bell.
1943 – O inglês Alan Turing constrói a primeira geração de computadores modernos, que
utilizam válvulas.
1944 – O norte-americano Howard Aiken termina o Mark I, o primeiro computador
eletromecânico.
1946 – O Eletronic Numerical Integrator and Computer (Eniac), primeiro computador
eletrônico, é criado nos EUA.
1947 – Criação do transistor, substituto da válvula, que permite máquinas mais rápidas.
1957 – Primeiros modelos de computadores transistorizados chegam ao mercado.
1958 – Criação do chip: circuito integrado que permite a miniaturização dos equipamentos
eletrônicos.

1969 – Criação da Arpanet, rede de informações do departamento de defesa norte-americano,


interligando universidades e empresas, que dará origem à internet.
1974 – A Intel projeta o microprocessador 8080, que origina os microcomputadores.
1975 – Os norte-americanos Bill Gates e Paul Allen fundam a Microsoft
1976 – Lançamento do Apple I, primeiro microcomputador comercial, inventado por Steve
Jobs e por Steve Wozniak.
1981 – A IBM lança seu microcomputador – o PC – com o sistema operacional MS-DOS,
elaborado pela Microsoft.

1983 – A IBM lança o PC-XT, com disco rígido.


1984 – A National Science Foundation, nos Estados Unidos, cria a Internet, rede mundial de
computadores que conecta governos, universidades e companhias.
1984 – A Apple lança o Macintosh, primeiro computador a utilizar ícones e mouse.
1985 – A Microsoft lança o Windows para PC, que só obtém sucesso com a versão 3.0 (1990).
1993 – A Intel lança o Pentium.
1998 – A Intel lança o Pentium II.

1999 – A Intel lança o Pentium III.


2000 – Criação do pen drive.
2001 – Criação do primeiro iPOD.
2002 – O primeiro smartphone BlackBerry
2007 – A Apple lança o iPhone 7 e novos laptops de pouca espessura, e o sucesso dos iPods.
2010 – Era da conectividade via inteligência artificial, IoT (Internet das Coisas), produtos smart
(TVs, relógios, tomadas, entre outros).
2012 – O marco da cultura maker, o Raspberry Pi. Um PC minúsculo e de baixo custo, o que o
torna mais atrativo para quem quer criar e desenvolver conhecimentos práticos da
ciência da computação, até mesmo a criação de um videogame só seu.
2013 – O carro elétrico que dirige por você, da Tesla.
2014 – A famosa caixinha inteligente da Amazon, que chegou ao Brasil, representou a
materialização dos assinantes de voz em gadgets inteligentes para casas, tornando-se
uma das mais populares do mundo.
2015 – Surge a alta qualidade dos recursos do Apple Watch, que trouxe para o seguimento dos
smartwatches uma performance completa com o gadget pela primeira vez.
2018 até 2020 – Hiperautomação, machine learning, realidade aumentada, realidade virtual,
cibersegurança, reconhecimento facial. O que será que o futuro reserva?

Conforme é possível acompanhar na linha do tempo acima, as descobertas da década de 1930


foram fundamentais para o surgimento da programação que levou aos computadores do
século XXI. Isso porque elas motivaram cientistas de diversas especialidades a trabalharem no
desenvolvimento dos chamados "cérebros eletrônicos" (FERREIRA, 2017).

CURIOSIDADE

No início da computação, não havia o conceito de programa...

No início da computação, não havia o conceito de programa armazenado, isto é, um


computador com vários programas, e sim uma máquina que era projetada para executar
determinada função. A partir da necessidade de armazenar e executar programas em uma
única máquina, foi desenvolvida uma arquitetura de máquina capaz de fazer isso, a qual,
posteriormente, seria conhecida como Arquitetura de Von Neumann.

Vejamos a seguir mais detalhes desse incrível desenvolvimento tecnológico na história da


humanidade.
FIGURA 3 | A IMPORTÂNCIA DO PROJETO DO COMPUTADOR IAS PARA A COMPUTAÇÃO

Em 1942, foi iniciado o projeto do computador IAS, que tinha como local de desenvolvimento
o Instituto de Estudos Avançados de Princeton. Seu objetivo era construir o primeiro
computador eletrônico do mundo.

FIGURA 4 | O PROJETO DO COMPUTADOR IAS E UM PROFESSOR DE MATEMÁTICA CHAMADO


JOHN VON NEUMANN

Foto de John Von Neumann.

O diretor do projeto era o professor de matemática John Von Neumann, um notável


acadêmico que nasceu em 1903, em Washington, D.C., e contribuiu em diversas áreas da
matemática, como na teoria dos conjuntos e na mecânica quântica. Um ano após o término da
Segunda Guerra Mundial, ele escreveu um relatório sobre o computador IAS, que, depois, seria
chamado de Arquitetura de Von Neumann.
A criação do primeiro computador eletrônico teve como base a definição de sua arquitetura.
Arquitetura de um computador

A arquitetura de um computador é composta de três sistemas:

Unidade de Processamento Central


Unidade de Processamento Central (CPU) é a composição de registradores, Unidade de
Controle (UC), Unidade Lógica Aritmética (ULA) e contador de programa.

 Registradores: são memórias temporárias que existem dentro da CPU de altíssima


velocidade;
 Unidade de Controle (UC): é responsável por buscar as instruções na memória
principal e classificar o seu tipo;
 Unidade Lógica Aritmética (ULA): é responsável por fazer as operações booleanas e
aritméticas;
 Contador de programa (PC): é responsável por avisar à UC qual será a próxima
instrução a ser buscada e executada.

Sistema de memória principal


Sistema de memória principal é a unidade que armazena os dados e os códigos do programa.

Sistema de entrada e saída


Sistema de entrada e saída é a unidade responsável por pegar os dados de entradas e mostrar
os resultados de saída do programa. Ciclo dessa execução compreende:

1 - O contador de programa é utilizado pela UC para determinar qual e onde está a próxima
instrução;
2 - A UC busca a instrução do programa na memória principal;
3 - A decodificação da instrução será feita para uma linguagem que a ULA possa interpretar;
4 - Os dados requeridos são transferidos da memória e alocados nos registradores da CPU;
5 - A ULA executa a instrução e coloca os resultados na memória ou nos próprios registradores.

Na sequência, vamos analisar uma das características de processamento dos Sistemas


Operacionais (SO), conhecido como Gargalo de Von Neumann.

Gargalo de Von Neumann

O gargalo de Von Neumann é o atrofiamento que está no canal de transmissão entre a CPU e a
memória, pois essa não consegue trabalhar em frequências tão altas quanto a CPU, que fica
ociosa por um certo tempo.
CURIOSIDADE

Alguns computadores ainda utilizam a arquitetura antiga de processamento de...

Alguns computadores ainda utilizam a arquitetura antiga de processamento de instruções, por


exemplo, a maioria das calculadoras de mesa. Ela é feita apenas para calcular números, e não
podemos instalar outro tipo de programa nela, exceto se estivermos diante de uma
calculadora científica programável.

Todavia, os computadores desktop, notebooks, smartphones, smartTVs etc. utilizam


arquiteturas derivadas da de Von Neumann. Todos eles possuem CPU, memória e I/O, mas
com algumas diferenças da projetada por esse matemático, como a separação da memória
RAM e a do HD (uma para carregar os programas em execução, e outra para salvar os dados e
os programas), além de trabalharem em frequências altíssimas comparadas às da época de
Neumann. A seguinte figura ilustra a arquitetura Von Neumann.

FIGURA 5 | ARQUITETURA DE VON NEUMANN

Essa figura mostra na arquitetura Von Neumann há uma dependência de todas as ações da
CPU de uma memória principal.
ESTUDO GUIADO

Leia a página 13 do livro 'Sistemas operacionais' e entenda de que forma os sistemas


operacionais têm sido importantes a partir do ano 2000.

DEITEL, H. M. ET AL. SISTEMAS OPERACIONAIS. 3. ED. SÃO PAULO: PEARSON, 2005.

CLIQUE NO LINK E LEIA O LIVRO

Essa leitura nos traz elementos importantes para compressão da importância de um Sistema
Operacional (SO). Já a próxima leitura trata dos processos de segurança nos sistemas
operacionais.

ESTUDO GUIADO

Leia da página 415 a 417 do livro ' Sistemas operacionais modernos ', que trata da importância
dos processos de segurança nos sistemas operacionais.

TANENBAUM, A. S.; BOS, H. Sistemas operacionais modernos. 4. ed. São Paulo: Pearson, 2016.

Vimos, na leitura acima, aspectos importantes sobre como proceder com a segurança nos
sistemas operacionais. Para ampliar seus conhecimentos relativos a código aberto, efetue a
próxima leitura.

HSM

Leia a entrevista 'O egoísmo e o Linux', com Linus Torvalds. Nela, Linus, criador inicial do
sistema operacional, destaca uma motivação inesperada para o código aberto.

O egoísmo e o Linux

Em 1991, aos 21 anos de idade, o finlandês Linus Torvalds era estudante na University of
Helsinki e um hackerautodidata. Eles se interessavam por sistemas de computação, fazia
programação na linguagem assembly e se divertia com o assunto. Em seu PC novo em folha,
em vez de escolher o DOS ou o Windows como sistema operacional, queria colocar o Unix, que
usava na universidade. Mas por questões financeiras optou pelo Minix, específico para
projetos educacionais, que era mais limitado. Então, resolveu aprender tudo o que fosse
possível sobre sistemas, e assim começou a surgir a primeira versão do Linux.

Torvalds conta, contudo, que teria ficado entediado com a criação do Linux se não tivesse
tomado a decisão de convidar outros participantes para desenvolvê-lo conjuntamente. Seu
impulso inicial para tornar público o código-fonte do Linux não era o desejo de ter ajuda para
desenvolver o sistema, e sim o fato de se sentir orgulhoso pelo que havia feito e querer
sugestões sobre os rumos a seguir. E as primeiras colaborações tinham menos a ver com a
participação no desenvolvimento; eram sobretudo consultas sobre o que os outros achavam
necessário. “Quando as pessoas começaram a me mandar mudanças, estas se converteram em
uma extensão natural do projeto”, relembra Torvalds.

Nesta entrevista, passados 21 anos, ele revê os desafios do código aberto e observa que sua
motivação para a cocriação, assim como a dos colaboradores, é basicamente egoísta:
interesses diversos são satisfeitos com esse tipo de trabalho colaborativo. E mostra-se convicto
de que sistemas centralizados nunca funcionarão tão bem quanto ambientes distribuídos.
Dizem que o Linux é uma realização mais interessante do ponto de vista social que do técnico.
Você concorda?

Não discordo, porém acho que o aspecto técnico também foi interessante. Não por ser um
produto radicalmente novo, o que o Linux não é, e sim porque a tecnologia é estimulante por
si só; isso explica ter atraído tantos colaboradores. O que o Linux tinha de realmente novo era
o modelo de desenvolvimento social. Não foi o primeiro projeto com código-fonte aberto,
porém foi o primeiro em larga escala a ter um desenvolvimento tão amplo e aberto.

Na época, a maioria dos projetos era liderada por um grupo de pessoas reunidas fisicamente; o
Linux desde o início foi desenvolvido por meio de trocas de e-mail entre colaboradores que
não se conheciam. Como eu disse, nunca senti que havia perdido o controle do resultado final.
É claro que fui criterioso e não incorporei uma contribuição qualquer, mas, ao mesmo tempo,
desde o começo do projeto era crucial aceitar não apenas um código novo, como também
rumos e ideias vindos de fora.

Seu desejo de progredir supera a vontade de você mesmo criar?

Sou meio preguiçoso e preciso admitir que sim. O que me moveu nunca foi o desejo de mudar
o mundo: eu queria desenvolver o código porque me interessava pelo assunto e acharia chato
fazer outra coisa. Atualmente não participo muito da elaboração do código, pois meu papel
passou de criador para o de líder técnico, responsável por administrar e reunir as
contribuições. O impulso fundamental, no entanto, não se alterou: o mesmo desafio técnico
ainda existe, apenas com roupagem diferente. Permanece o desejo de fazer algo que me
estimule e me dê orgulho.

Sinceramente, tenho motivos bastante egoístas; isso vale para todo mundo e é o que explica o
sucesso do Linux. As empresas que atuam no projeto também não são movidas por razões
altruístas —elas querem obter algo com isso. O código-fonte aberto é uma ótima ocasião para
reunir interesses diversos, aproveitando as motivações individuais de cada colaborador.

Você disse que preferia não ter uma ideia definida do que fazer em seguida, mas ser
surpreendido com o que as pessoas faziam. Continua assim?

Sim, é o que faz sentido para mim. Se tivesse uma ideia rígida do rumo que queria para o
Linux, seria uma empreitada dura, uma meta que exigiria anos de trabalho. Além disso, teria
de dedicar todo o tempo tentando convencer as pessoas de que estava certo. Gosto de uma
dose de debate, por isso dedico bom tempo para convencer as pessoas a seguir em
determinada direção, porém não me estresso. Algumas discussões ficam bastante intensas,
acho que faz parte.

Quando estou errado, não considero um fracasso, apenas concluo que outra pessoa teve
argumentos melhores. Isso me torna eficiente no papel de líder técnico. As pessoas sabem que
às vezes sou teimoso e, quando temos discussões acaloradas, podem não gostar muito de
mim, mas não ocorrem conflitos prolongados. E isso acontece porque não tenho projeto de
longo prazo que entre em confronto com os rumos que os colaboradores podem querer dar ao
projeto. Essa é a verdadeira importância do Linux; é o que permite que um grupo trabalhe com
soluções para celulares enquanto outro se dedica à aplicação em supercomputadores.
“Eu via mais exemplos do que não fazer do que modelos a seguir”

Você declarou que o Linux nasceu de um conjunto de erros. Como você lida com os erros e
acertos?

Não digo que errar é uma coisa boa, mas as falhas são inevitáveis e acho importante tentar
reagir de maneira positiva e aprender algo. Alguns quase desastres fortaleceram o Linux. Um
erro importante lá do começo, que hoje me faz rir, quase me levou a perder o ambiente
original do programa. Eu estava tentando configurar o modem e apaguei o disco onde estava o
material. Foram alguns momentos de pânico, porém isso aconteceu em um momento em que
o Linux estava quase configurado, mas ainda não pronto. Em vez de tentar ressuscitar meu
projeto, acabei mudando de ideia e dando autonomia ao programa. Aquele erro foi uma
oportunidade importante e me forçou a cortar o cordão umbilical.

Outros erros foram mais prejudiciais e menos divertidos. Conforme o projeto se expandiu, em
várias ocasiões o fluxo de trabalho não teve a eficiência que poderia ter, e então uns
começaram a culpar os outros pela falta de resultados. Mudar o modo de trabalhar costuma
ser difícil. Tivemos falhas técnicas, momentos em que agimos errado, mas o importante é
admitir publicamente que pisamos na bola e perdemos boa parte do trabalho. Honestidade é
chave.

Você falou certa ocasião que o Linux era comandado por uma mão invisível...

É uma expressão do economista Adam Smith que eu usei no mesmo sentido que ele: uma
espécie de mecanismo natural de equilíbrio que existe quando há um ambiente independente
e distinção entre os interesses. Reflete como a auto-organização tende a acontecer em vez de
ser conduzida intencionalmente. Muitos objetivos individuais egoístas podem nem parecer tão
egoístas assim vistos no conjunto; as pessoas e as comunidades agem de maneira altruísta,
mesmo quando movidas por razões egoístas. Não usei a expressão para desculpar o mau
comportamento, dizendo que egoísmo e bondade são a mesma coisa.

No entanto, muitas vezes faz sentido ser altruísta; no final, você também se beneficia. Não é
preciso contar necessariamente com um projeto definido, porque os colaboradores
comprometidos acabam fazendo a coisa certa. É a mão invisível em ação.

Sua empresa foi uma das primeiras a adotar um ambiente aberto, hoje comum em vários
setores. Quais as lições desse processo?

Uma lição importante está em não tentar controlar demais o resultado final. Um grande
número de projetos era tecnicamente de código aberto, mas os líderes na verdade agiam
como se tudo se resumisse a dar retorno ao grupo de origem. Quando se faz isso, perde-se o
panorama geral, além de desperdiçar talentos. Não se dá acesso a quem realmente está
comprometido.

Você defende que sistemas centralizados nunca poderiam funcionar tão bem como um
ambiente distribuído. Por quê?

O planejamento centralizado que costumamos ver é uma abordagem errada. É preciso evoluir
com um retorno muito próximo dos usuários, e esse retorno dificilmente consegue atingir o
grupo ou pessoa responsável pela criação. Todo sistema centralizado tem um viés para uma
meta específica. Isso pode ser bom se o objetivo for bem definido e compreendido, porque é
possível ser eficiente com metas claras. No entanto, a maioria dos problemas do mundo real
não é simples, mesmo nos casos de uso específico. As pessoas envolvidas em uma etapa do
problema podem conhecer essa parte, mas ninguém entende tudo em detalhe.

Além disso, poucos dos problemas atuais são do tipo caso único; sempre há diversos usuários
que desejam coisas distintas. As áreas problemáticas podem se sobrepor, porém em geral as
diferenças são maiores do que as semelhanças. Nesse caso, se um núcleo determina os rumos
do projeto, inevitavelmente ele adotará um viés voltado para uma área problemática
particular, em detrimento de outras. Acho que o projeto de criação centralizado não funciona
a não ser em casos muito simples; considero a centralização ruim no sentido técnico.
Supervisiono um produto chamado Git, um dos sistemas de controle de revisão distribuída
mais bem-sucedidos, e acho que o uso de modelos distribuídos para desenvolver código-fonte
é crucial para o sucesso, por razões sociais e técnicas.

Você disse que, quando trabalha em novos produtos, em vez de olhar para o que a
concorrência faz, prefere pensar no que ela jamais faria. Como é isso?

Não acho muito útil ver como alguém resolve um problema, porque quase sempre o segredo
está nos detalhes e seria perda de tempo tentar decifrar detalhes. Acho que o certo é dar um
passo atrás e tentar apreciar o todo, entender a razão para alguns recursos do ponto de vista
do usuário, e não do da implementação. É muito difícil ter uma visão ampliada quando se olha
para a solução alheia.

Não me interprete mal, não estou defendendo a reinvenção da roda. O Linux se baseia em
conceitos de alto nível do Unix, por exemplo, mas não era identificável a partir da
implementação do Unix. Quando começamos a desenvolver o Git, optamos por fazer as coisas
de um jeito diferente, em parte porque não admirava muito o modo como o controle de fonte
era feito; eu via mais exemplos do que não fazer do que modelos a seguir.

O Linux em aparelhos móveis ganhou novos caminhos nos últimos dois anos, graças
sobretudo ao sistema operacional Android. A popularização é boa?

Sim! E aconteceu porque as pessoas conseguiram expandir suas atribuições e usá-lo da


maneira que queriam.

O Linux tem uma ideologia?

Não tem e não creio que deva ter. O importante do código aberto não é a ideologia, mas o fato
de qualquer um poder usá-la para suas necessidades.

Nesta entrevista, Linus Torvalds, criador inicial do sistema operacional, destaca uma
motivação inesperada para o código aberto

HSM Experience, 2012.


ESSA LEITURA TRAZ UMA ABORDAGEM SOBRE LINUS TORVALDS, UM DOS PERCURSORES DO
CÓDIGO ABERTO E A SUA VISÃO SOBRE O ASSUNTO.

TIPOS DE SISTEMAS OPERACIONAIS

Os sistemas operacionais podem ser classificados de acordo com diversos parâmetros e


perspectivas, como, por exemplo, tamanho, velocidade, suporte a recursos específicos, acesso
à rede etc. Segundo Maziero (2006), existem alguns tipos de sistemas operacionais usuais.

ATENÇÃO!

Muitos sistemas operacionais se encaixam bem em mais de uma das categorias de


classificação apresentadas a seguir.

BATCH

Os sistemas operacionais Batch (de lote) mais antigos trabalhavam “por lote”, ou seja, todos os
programas a serem executados eram colocados em uma fila, com seus dados e demais
informações para a execução. O processador recebia os programas e os processava sem
interagir com os usuários, o que permitia um alto grau de utilização do sistema.

DE REDE

Um sistema operacional de rede precisa ter suporte à operação dos dispositivos em rede, ou
seja, a capacidade de oferecer às aplicações locais os recursos que estejam localizados em
outros computadores pertencentes à rede, como arquivos e impressoras. Ele deve
disponibilizar seus recursos locais aos demais computadores de forma controlada. A maioria
dos sistemas operacionais atuais oferece essa funcionalidade.

DISTRIBUÍDO

Em um sistema operacional distribuído, os recursos de cada máquina estão disponíveis de


forma transparente aos usuários. Ao lançar uma aplicação, o usuário interage com sua janela,
mas não sabe onde ela está executando ou armazenando seus arquivos: é o sistema que
decide, de modo transparente. Esses sistemas já existem há muito tempo, segundo
Tanenbaum (1995) e Dasgupta et al. (1991), mas ainda não são uma realidade por completo no
mercado.

MULTIUSUÁRIO

Um sistema operacional multiusuário deve suportar a identificação do “dono” de cada recurso


dentro dele (arquivos, processos, áreas de memória, conexões de rede) e impor regras de
controle de acesso para impedir o uso desses recursos por usuários não autorizados. Essa
funcionalidade é fundamental para a segurança dos sistemas operacionais de rede e
distribuídos. Grande parte dos sistemas atuais é multiusuário.

DESKTOP

Um sistema operacional Desktop “de mesa” é voltado ao atendimento do usuário doméstico e


corporativo, para a realização de atividades corriqueiras, como edição de textos e gráficos,
navegação na internet e reprodução de mídias simples. Suas principais características são a
interface gráfica, o suporte à interatividade e a operação em rede. Seus exemplos são os vários
sistemas Windows (XP, Vista, 7, 8 e 10), o MacOS X e o Linux.
SERVIDOR

Um sistema operacional servidor deve permitir o gerenciamento eficiente de grandes


quantidades de recursos (disco, memória, processadores), impondo prioridades e limites ao
uso dos recursos pelos usuários e seus aplicativos. Em geral, ele tem suporte à rede e
multiusuários.

EMBARCADO

Um sistema operacional é embarcado (embutido ou embedded) quando for construído para


operar sobre um hardware com poucos recursos de processamento, armazenamento e
energia. Aplicações típicas dele aparecem em telefones celulares, sistemas de automação
industrial e controladores automotivos, equipamentos eletrônicos de uso doméstico (leitores
de DVD, TVs, fornos micro-ondas, centrais de alarme etc.).

TEMPO REAL

Ao contrário da concepção usual, um sistema operacional de tempo real não precisa ser
necessariamente ultrarrápido. Sua característica essencial é ter um comportamento temporal
previsível (ou seja, seu tempo de resposta deve ser conhecido no melhor e pior caso de
operação). Sua estrutura interna deve ser construída de forma a minimizar esperas e latências
imprevisíveis, como tempos de acesso ao disco e sincronizações excessivas. Existem duas
classificações: soft real time systems, nos quais a perda de prazos implica a degradação do
serviço prestado; e hard real time systems, em que a perda de prazos pelo sistema pode
perturbar o objeto controlado, com graves consequências humanas, econômicas ou
ambientais.

Na sequência, apresentaremos exemplos para alguns dos tipos de sistemas operacionais


mencionados acima.

Exemplo:

Sistemas operacionais embarcados

Para controle e automação, seus exemplos são LynxOS, μC/OS, Xylinx e VxWorks. Já para
telefones celulares inteligentes (smartphones), eles incluem Symbian, Android, entre outros.

Muitas vezes, um sistema operacional embarcado se apresenta na forma de uma biblioteca a


ser ligada ao programa da aplicação (que é fixa).

Exemplo:

Sistema operacional Batch (de lote)

Na era atual, esse conceito se aplica a sistemas que processam tarefas sem interação direta
com os usuários, como os de processamento de transações em bancos de dados.

Além disso, o termo “em lote” é usado para designar um conjunto de comandos que devem
ser executados em sequência, sem interferência do usuário. Seus exemplos incluem OS/360,
VMS, entre outros.

Exemplo:

Sistema operacional de tempo real


Existem duas classificações: soft real time systems e hard real time systems.

Nos soft real time systems, a perda de prazos implica a degradação do serviço prestado. Um
exemplo é o suporte à gravação de CDs ou reprodução de músicas. Caso o sistema se atrase,
podem ocorrer a perda da mídia em gravação ou falhas na música que está sendo tocada.

Nos hard real time systems, a perda de prazos pelo sistema pode perturbar o objeto
controlado, com graves consequências humanas, econômicas ou ambientais. Um exemplo é o
controle de funcionamento de uma turbina de avião a jato ou de uma caldeira industrial.
Exemplos de sistemas de tempo real incluem QNX, RT-Linux e VxWorks. Muitos sistemas
embarcados têm características de tempo real, e vice-versa.

Sincronização e comunicação de processos

Foi na década de 1960, quando surgiram os primeiros sistemas operacionais


multiprogramados, que os programadores iniciaram as estruturas dos programas, de forma
que suas partes diferentes pudessem executar de forma concorrente.
Assim, surgiu a programação concorrente, que tem como base a
execução, de forma colaborativa, de múltiplos processos ou
threads que trabalham na mesma tarefa.

Faz diferença para a programação concorrente ter um ou mais processadores disponíveis?

Faz diferença para a programação concorrente ter um ou mais processadores disponíveis?

Acompanhe nos slides a seguir.

Em sistemas multiprogramados com apenas um processador, os processos se alternam no uso


do processador e demais recursos, de acordo com os critérios de escalonamento de processos,
que são estabelecidos pelo sistema operacional (TANENBAUM, 1995).

Em sistemas dotados de múltiplos processadores, a possibilidade de paralelismo é real e


amplia as vantagens que a programação concorrente proporciona, com várias tarefas sendo
executadas em paralelo – cada tarefa em um processador diferente, normalmente.

Desse modo, é comum que os processos de uma aplicação concorrente compartilhem


recursos. Entretanto, esse compartilhamento gera problemas que podem comprometer a
execução da aplicação. Por isso, é necessário que os processos da aplicação concorrente sejam
sincronizados pelo sistema operacional, com o objetivo de garantir o processamento correto
dos programas.

Se não tivermos um gerenciamento no uso concorrente dos recursos compartilhados,


podem ocorrer inconsistências nos dados (TANENBAUM, 1995).

Normalmente, os processos de uma aplicação concorrente precisam se comunicar para a troca


de informações. Essa comunicação pode ser implementada de várias formas, por exemplo,
com o uso de memória compartilhada entre os processos ou por meio da troca de mensagens
entre processos em execução (TANENBAUM, 1995).
Comunicação por compartilhamento de memória
O compartilhamento de memória é um mecanismo de comunicação
entre processos, que usa uma área da memória, um buffer
compartilhado entre os vários processos de uma aplicação
concorrente.

Os processos compartilham informações em operações de escrita e de leitura por meio do


buffer de memória.

Exemplo:

Em operações de escrita, um processo só poderá gravar dados no buffer caso esse não esteja
cheio. Já em operações de leitura, um processo somente poderá ler dados do buffer se existir
algum dado para ser lido. Em ambos os casos, o processo fica em estado de espera até que o
buffer esteja pronto para a operação de escrita ou de leitura dos dados (TANENBAUM, 1995).

Cabe destacar que o mecanismo que coloca os processos aguardando o recurso para
prosseguir sua execução chama-se sincronização.

Em sistemas operacionais multiprogramados, esse mecanismo é importante para garantir a


integridade e confiabilidade na execução de aplicações concorrentes. A figura seguinte, ilustra
a descrição desse processo.

FIGURA 6 | COMUNICAÇÃO POR COMPARTILHAMENTO DE MEMÓRIA

Nessa figura, temos a comunicação por compartilhamento de memória. O compartilhamento


de memória é um mecanismo de comunicação entre processos, que usa uma área de
memória, um buffer compartilhado entre os vários processos de uma aplicação concorrente.
Os processos compartilham informações em operações de escrita e de leitura, por meio do
buffer de memória.

Problemas de compartilhamento de recursos


Com o intuito de demonstrar como a sincronização entre processos concorrentes é
fundamental para a confiabilidade dos sistemas multiprogramados, serão apresentados, a
seguir, alguns problemas de compartilhamento de recursos.

ESTUDO DE CASO

A primeira situação de problema de compartilhamento de recurso é o compartilhamento de


um arquivo em disco para atualização do saldo de conta corrente, por exemplo (TANENBAUM,
1995). Como garantir que os processos em execução leiam e atualizem o mesmo arquivo de
forma correta para evitar dados inconsistentes?

A segunda situação é o compartilhamento de uma variável de memória por dois processos


concorrentes. Como garantir que um processo não altere o valor da variável utilizada pelo
outro processo em execução?

Exclusão mútua

É o mecanismo mais simples para evitar compartilhamentos problemáticos. A ideia é impedir


que dois ou mais processos acessem o mesmo recurso de forma simultânea.

Nesse caso, quando um processo estiver usando um recurso, todos os demais devem ser
colocados no estado de espera. Esse acesso exclusivo do recurso pelo processo é chamado de
exclusão mútua.

A exclusão mútua afeta apenas os processos concorrentes quando eles acessam um recurso
compartilhado. O trecho de código que acessa o recurso compartilhado é chamado de região
crítica (TANENBAUM, 1995).

Em ambos os casos, em toda situação que houver dois ou mais processos compartilhando o
mesmo recurso, seja um arquivo ou uma área de memória, deve existir um mecanismo de
controle para evitar esses conflitos de concorrência.

Esse mecanismo de controle é conhecido como condição de corrida (TANENBAUM, 1995).

A exclusão mútua pode ser implementada por meio do hardware.

Soluções de hardware

Neste caso, são apresentadas as soluções de desabilitação de interrupções e instruções test


and-set. Sabemos que os processos se comunicam, isto é, cooperam por meio do
compartilhamento de posições de memória. Analogamente, threads compartilham o mesmo
espaço de endereçamento, ou seja, têm as mesmas variáveis globais (TANENBAUM, 1995).

Acompanhe a seguir um exemplo de compartilhamento de recursos.

Exemplo:

Vamos considerar dois processos que compartilham as variáveis A e B.

Um está executando A = 1; e o outro, B = 2.

Qual será o resultado? Importa a ordem na qual os processos executam?

Agora, considere:
Processo 1: A = B + 1

Processo 2: B = 2 × B

Se o processo 1 for executado primeiro, A = 3; e logo a seguir, o processo 2 for realizado, B = 4.

E no seguinte caso?

Processo 1: A = 1

Processo 2: A = 2

A variável A terá o valor atribuído pelo último processo executado. Em um sistema multitarefa,
é possível ter vários processos concorrendo entre si. Assim, observe que A é uma variável ou
uma posição de memória que está sendo compartilhada – isso pode ser visualizado na figura a
seguir.

Dessa forma, é necessário colocar ordem nas interações entre processos, bem como prover
algumas abstrações para garantir o que acontece e quando.

Para colocar esta ordem nas interações entre os processos, é importante considerar que
existem operações atômicas, as quais não podem ser interrompidas. Não é possível ver as
“partes” de uma operação atômica, mas apenas seu efeito final, ou seja, não se consegue vê-la
“em progresso” (TANENBAUM, 1995).

A seguir, apresentaremos exemplos dos dois tipos de operações presentes no dia a dia.

QUADRO 1 | EXEMPLOS DE OPERAÇÕES ATÔMICAS E NÃO ATÔMICAS

Operações atômicas Operações não atômicas

Tocar uma campainha Encher um copo de refrigerante

Desligar o interruptor de uma luz Caminhar até a porta de saída

Dar a ignição em um veículo Tomar uma xícara de café


ELABORAÇÃO DOS AUTORES, 2020.

Por meio desse quadro podemos compreender melhor a diferença entre os tipos de operações
presentes no dia a dia. A partir dessa apresentação, nosso entendimento sobre elas se tornará
mais fácil quando o universo for o sistema operacional de um computador.
As operações atômicas são relevantes não só na área de sistemas
operacionais, mas também em outras, por exemplo, na área de
banco de dados.

As operações do dia a dia são a base para as transações atômicas, que, por sua vez, formam a
base para uma área chamada processamento de transações. Essa área trata de problemas de
coordenação de acessos múltiplos e concorrentes a bancos de dados. Já os bancos eletrônicos
são uma de suas aplicações importantes.

As operações atômicas devem ser muito confiáveis; e, em geral, o hardware provê algumas
delas (TANENBAUM, 1995).

Mecanismo de sincronização

Segundo Tanenbaum (2013), os mecanismos que garantem a comunicação entre processos


concorrentes e o acesso a recursos compartilhados são chamados de sincronização.

Em sistemas multitarefas, eles são mecanismos fundamentais para garantir a confiabilidade na


execução de aplicações concorrentes.

A sincronização fundamenta-se na utilização de operações atômicas, para garantir o


funcionamento correto de processos concorrentes.

A figura na sequência mostra um esquema de mecanismo de sincronização (TANENBAUM,


1995).

FIGURA 7 | MECANISMO DE SINCRONIZAÇÃO


Conforme podemos ver na figura acima, o compartilhamento de memória é um mecanismo de
comunicação entre processos, que usa uma área de memória, um buffer que é compartilhado
entre os vários processos de uma aplicação concorrente. O mecanismo que coloca os
processos aguardando o recurso para prosseguir sua execução chama-se sincronização.

Gerência de memória

Os computadores utilizam o conceito de hierarquia de memória em sua organização,


combinando memórias voláteis (aquelas cujos dados são perdidos ao final do processo) e não
voláteis (aquelas cujos dados não são perdidos ao final do processo), como memória cache,
memória principal e memória secundária. O sistema operacional tem a função de coordenar e
gerenciar a utilização dessas memórias, de forma eficiente. Esse serviço é implementado pelo
sistema operacional por meio do gerenciador de memória. Entre as funções do gerenciador de
memória destacam-se:

 Controle das partes da memória estão sendo utilizadas e quais não estão;
 É responsável por alocar espaços em memória para os processos que serão executados
e liberar as posições de memória ocupadas quando os processos são finalizados;
 Controle do swapping de informação, constante na execução das aplicações
(TANENBAUM, 1995).

Unidade de Gerência de Memória

A Memory Management Unit (MMU) é um módulo de hardware que faz o mapeamento entre
os endereços lógicos (da memória virtual) e os endereços físicos da memória (RAM), ou seja,
trata-se de um dispositivo que transforma endereços virtuais em físicos. Para isso, geralmente,
a MMU traduz o número de páginas virtuais para o número de páginas físicas, utilizando um
cache chamado Translation Lookaside Buffer (TLB). A figura a seguir ilustra o mecanismo de
tradução de endereços (TANENBAUM, 1995).

FIGURA 8 | MECANISMO DE TRADUÇÃO DE ENDEREÇOS

Essa figura mostra o mecanismo de tradução de endereços. O mecanismo de tradução do


endereço virtual para o endereço físico é denominado de mapeamento. O dispositivo de
hardware responsável por essa tradução é conhecido como unidade de gerência de memória
(Memory Management Unit [MMU]), sendo acionado sempre que se faz referência a um
endereço virtual.
Atenção!

Na maioria dos casos, os programas precisam ser compilados para que possam ser executados
no sistema computacional. Várias atividades ocorrem entre o instante em que ele é compilado
e o momento em que inicia sua execução: geração do código objeto, código executável,
alocação em memória, nova entrada, inserção da referência do processo na fila etc.

O mecanismo tradicional de transformação de programas em processos está exposto na figura


a seguir.

FIGURA 9 | MECANISMO TRADICIONAL

Na figura acima, podemos observar as fases que ocorrem desde o programa até a memória
RAM, que são: a fase de compilação, envolvendo o compilador; a fase de ligação, que engloba
o ligador, entre o objeto e o executável; e a fase de carga, na qual está o carregador, entre o
executável e a memória RAM.

Gerenciamento básico de memória

Com relação aos gerenciadores de memória, existem dois tipos: os que permitem as trocas de
processos entre a memória principal e o disco (troca de processos e paginação – mais
complexos), e aqueles que não permitem (muito mais simplificados e limitados).

A necessidade da troca de processos e paginação acontece devido à quantidade


insuficiente de memória principal para armazenar vários programas ao mesmo tempo.

Atualmente, as máquinas adotam um modelo chamado multiprogramação, portanto, os


algoritmos precisam gerenciar várias aplicações que concorrem com o uso das unidades de
processamento e armazenamento de dados (TANENBAUM, 1995).

Monoprogramação sem troca de processos ou paginação

Consiste no esquema mais simples de gerenciamento de memória. Nesse caso, a memória é


compartilhada entre o sistema operacional e o programa de usuário utilizado naquele
momento. É importante observar que a monoprogramação indica que somente um programa
de usuário é carregado na memória e executado por vez.
Algumas formas de organizar a memória com um operacional e um programa de usuário serão
apresentadas a seguir. Clique em cada parte para conferir os exemplos de aplicação de cada
uma.

Dessa forma, pelo fato de permitir que apenas um único programa de usuário seja carregado
em memória a cada instante, a monoprogramação raramente é usada atualmente, a não ser
em sistemas embarcados simples.

Multiprogramação com partições fixas

Atualmente, os sistemas operacionais permitem que mais de um processo seja carregado em


memória, de modo que, quando um fica bloqueado esperando por uma operação de E/S,
outro, que esteja carregado em memória, possa usar a CPU.

Dessa forma, a multiprogramação ajuda a melhorar a utilização da CPU, evitando


desperdícios no ciclo de processamento (TANENBAUM, 1995).

Para que seja possível a multiprogramação, podemos dividir a memória em n partições (muitas
vezes, de tamanhos diferentes e ajustáveis).
Os jobs serão colocados em filas de entrada associadas a menor partição capaz de armazená-
los. Pelo fato de usarmos partições de tamanho fixo, o restante do espaço de memória não
utilizado pelo job será perdido.

Esse desperdício de memória é chamado de fragmentação interna (espaço de memória


perdido dentro da área alocada ao processo).

REFLITA

Vamos imaginar que existam duas partições livres, uma de 25 kbytes e outra de 100 kbytes,
não contíguas. Nesse instante, é criado um processo de 110 kbytes que não poderá ser
carregado na memória pela forma como ela é gerenciada. Esse problema ocasiona a
fragmentação externa (memória perdida fora da área ocupada por um processo)
(TANENBAUM, 1995).

Agora, convido você a profundar seus conhecimentos sobre multiprogramação com partições
fixas por meio do vídeo a seguir, em especial, as possibilidades e os limites quando se utiliza: a)
partições fixas com filas de entrada separadas; e b) partições fixas com uma única fila.

VÍDEO AULA (COMO REALIZAR A MULTIPROGRAMAÇÃO)

Como realizar a multiprogramação

https://player.vimeo.com/video/507095699

Nessa videoaula, entendemos melhor como realizar a multiprogramação compartilhando a


memória do computador de maneira fixa. Entretanto, há uma limitação.

Qual a limitação desta solução? Qual a solução?

A limitação dessa solução de particionamento fixo de memória é discriminar jobs pequenos. Já


a solução é ter, pelo menos, uma partição pequena.
Multiprogramação com partições variáveis

Nesse esquema de organização, a quantidade e o tamanho dos processos na memória podem


variar dinamicamente com o passar do tempo; e o tamanho das partições é ajustado
dinamicamente às necessidades exatas dos processos.

A figura a seguir ilustra o funcionamento desse algoritmo, considerando a ocorrência de


swapping: trazer um processo do disco para a memória [swap in], executá-lo durante um
intervalo de tempo e, depois, devolvê-lo ao disco [swap out].

FIGURA 10 | ALOCAÇÃO COM PARTIÇÕES VARIÁVEIS

Podemos observar que, inicialmente, só o processo A está alocado na memória e, com o passar
do tempo, os processos B, C, D e E também são carregados nela. Diferentemente do esquema
de partição fixa, na multiprogramação com partições variáveis, o tamanho e a localização dos
processos variam à medida que eles deixam e voltam à memória (TANENBAUM, 1995).

Destacamos, na sequência, respectivamente, uma grande vantagem, os desafios e a estratégia


do sistema operacional nesse tipo de alocação na memória.

Uma das vantagens desse sistema é que a flexibilidade obtida melhora a utilização da
memória, evitando desperdícios de espaço.

Contudo, a gerência dos espaços vazios é mais complicada, bem como a alocação e liberação
das partições.

O sistema operacional mantém uma lista de espaços livres na memória física. Sempre que um
novo processo for criado, essa lista será percorrida, e uma lacuna, maior ou igual ao tamanho
do processo em questão, usada. O espaço que ultrapassar o tamanho do processo pode dar
origem a uma nova partição.

Há algumas formas (algoritmos) de percorrer essa lista, a saber:


First-fit

Inicia a procura a partir da primeira página de memória (parte baixa) e varre a memória até
encontrar a primeira lacuna suficientemente grande para armazenar o processo.

Best-fit

Varre toda a memória e escolhe a página mais ajustada ao tamanho do processo


necessário.Worst-fit

Next-fit

Segue a mesma ideia do first-fit, mas somente a primeira busca é iniciada na parte baixa da
memória (primeira página), as outras se iniciam onde terminou a última. Usa-se uma lista
circular para permitir que, eventualmente, toda a memória seja percorrida.

Existe a possibilidade de formar “buracos” por toda a memória ao longo da execução dos
processos, o que não é viável. Assim, para eliminar esses buracos, podemos mover todos os
processos para a parte mais baixa da memória – uma técnica conhecida como compactação de
memória.

Reflita

No entanto, perde-se muito tempo de processamento para promover essa organização; logo,
não é adequado realizar esta tarefa constantemente (TANENBAUM, 1995).

Algumas linguagens de programação permitem que a área de dados alocadas em um processo


cresça ao longo de sua execução. Com isso, ocorrerão alguns problemas sempre que um
processo necessitar crescer e sua partição não permitir nenhuma expansão. Se houver algum
espaço nas proximidades do processo que puder ser alocado a ele, o crescimento será
permitido sem que seja necessário movê-lo para outra partição maior, conforme ilustra a
figura a seguir.

FIGURA 11 | ALOCAÇÃO DE ESPAÇO COM POSSIBILIDADE DE EXPANSÃO


Essa figura mostra a alocação de espaço com possibilidade de expansão. Caso não haja espaço
para aumentar o tamanho da partição ou não tenha uma partição grande o suficiente para
realocar o processo, então, um ou mais processos deverão ser removidos para o disco
(swapping). Se não for possível realizar o swapping (área de swapping cheia), o processo que
deseja “crescer” deverá esperar ou ser eliminado (TANENBAUM, 1995).

Gerência de memória com mapeamento de bits

Quando se trata de gerenciar o uso das memórias, existem dois modos: com mapa de bits ou
uma lista encadeada indicando os espaços ocupados e os disponíveis (lista ligada).

No primeiro modo (mapa de bits), a cada unidade de alocação da memória, é atribuído um bit
para dizer se a posição está livre ou ocupada. Assim, o conjunto de todos os bits é
representado em uma tabela, chamada mapa de bits, que mapeia todas as posições de
memória dizendo o estado de cada uma. O tamanho da unidade de alocação é muito
importante, assim, quanto menor as unidades forem, maior será o mapa de bits.

Atenção!

Como o mapa de bits também é armazenado em memória, seu tamanho ocupará espaço útil e,
consequentemente, uma parte da memória será desperdiçada para esse armazenamento
(TANENBAUM, 1995).

Quando um processo de kbits precisar ser armazenado em uma memória, a MMU deverá
procurar no mapa os kbits consecutivos, indicando que a posição está vazia (pode ser o bit 0
ou 1).

Em virtude do processo de percorrer o mapa de bits ser lento, este método quase não é
usado.

A próxima figura mostra a representação dos espaços de memória com mapa de bits e lista
ligada.

FIGURA 12 | REPRESENTAÇÃO DOS ESPAÇOS DE MEMÓRIA COM MAPA DE BITS E LISTA


LIGADA
Conforme podemos perceber nessa figura, o segmento representado por (a) possui cinco
segmentos alocados a processos e três livres; o segmento (b) traz o mapa de bits; e o
segmento (c) traz a lista ligada.

Gerência de memória com lista ligada

Os espaços livres e ocupados são feitos por meio de uma lista ligada, em que P indica uma
região ocupada por um processo e H um espaço livre de memória, conforme segue na figura
anterior, representação dos espaços de memória com mapa de bits e lista ligada.

A lista pode estar ordenada por endereços de memória, conforme também ilustrado na figura
anterior. Assim como no mapa de bits, qualquer alteração nas posições de memória deve gerar
uma alteração no mapeamento realizado pela lista ligada.

Se a lista estiver ordenada...

Por endereço, uma atualização mais rápida é permitida sempre que um processo terminar de
executar suas instruções ou for retirado da memória. A utilização de uma lista duplamente
encadeada facilita seu processo de atualização (TANENBAUM, 1995).

Por fim, cabe destacar que existem, ainda, alguns algoritmos que podem ser utilizados para
alocar as informações na memória, conforme vimos anteriormente.

Síntese

Chegamos ao final do estudo do tópico Fundamentos de sistemas operacionais modernos.


Apresentamos a definição usual de sistemas operacionais e, em seguida, a importância dos
hardwares, softwares e firmwares em relação a esses sistemas. Abordamos, também, os
objetivos de ter um sistema operacional em um dispositivo. Trouxemos, depois, um breve
histórico a respeito dos sistemas operacionais, desde os primórdios até a atualidade. Tratamos
dos tipos de sistemas operacionais, de suas características, utilizações e exemplos. Por fim,
apresentamos o conceito de operações ou processos concorrentes e como podemos resolver
alguns desafios presentes nesses processos.

Esperamos que todos os conteúdos abordados estejam claros para você. Lembre-se de que os
estudos exigem rever conteúdos; elaborar esquemas, sejam mentais ou anotados; fazer
relações entre os conteúdos estudados com os objetivos de aprendizagem (por exemplo,
problemas/questões da sua área profissional que serão resolvidos com eles) etc. Portanto,
realize seus estudos considerando esses direcionamentos.

Chegamos, assim, ao final dos estudos desta unidade. Veja a seguir o webstorie como os
principais pontos abordados.
Tutorial

01

Síntese

Elaborando o webstorie

Tema #1: [Sistemas operacionais]

Assunto do tema: [Um sistema operacional é um programa que controla a execução dos
programas de aplicação e atua como uma interface entre o usuário do computador e o
hardware do computador.]

Imagem:

Tema #2: [Objetivos de um sistema operacional]

Assunto do tema: [Os sistemas operacionais devem atender aos princípios que devem ser
atendidos por um sistema operacional: (1) oferecer os recursos do sistema de forma simples;
(2) gerenciar a utilização dos recursos existentes e (3) garantir a integridade e a segurança dos
dados.]

Imagem:

Tema #3: [Arquitetura de um computador]

Assunto do tema: [A arquitetura de um computador é composta de três sistemas: (1) Unidade


de Processamento Central (CPU); (2) Sistema de memória e (3) Sistema de entrada e saída.]
Imagem:

Tema #4: [Gargalo de Von Neumann]

Assunto do tema: [O gargalo de Von Neumann está no canal de transmissão entre a CPU e a
memória, pois essa não consegue trabalhar em frequências tão altas quanto a CPU, que fica
ociosa por um certo tempo.]

Imagem:

Tema #5: [Tipos de sistemas operacionais]

Assunto do tema: [Os sistemas operacionais podem ser classificados de acordo com diversos
parâmetros e perspectivas, como tamanho, velocidade, suporte a recursos específicos, acesso
à rede etc. Segundo Maziero (2006), existem alguns tipos de sistemas operacionais usuais.]

Imagem:

Tema #6: [Solução de hardware]

Assunto do tema: [Nesse caso, são apresentadas as soluções de desabilitação de interrupções


e instruções test-and-set. Sabemos que os processos se comunicam, isto é, cooperam por meio
do compartilhamento de posições de memória (TANENBAUM, 1995).]
Imagem:

Tema #7: [Gerência de memória]

Assunto do tema: [Os computadores utilizam o conceito de hierarquia de memória em sua


organização, combinando memórias voláteis e não voláteis, como memória cache, memória
principal e memória secundária.]

Imagem:

Tema #8: [Multiprogramação]

Assunto do tema: [Atualmente, as máquinas adotam um modelo chamado multiprogramação,


portanto, os algoritmos precisam gerenciar várias aplicações que concorrem com o uso das
unidades de processamento e armazenamento de dados (TANENBAUM, 1995).]

Imagem:
TÓPICO 02

REFERÊNCIAS BIBLIOGRÁFICAS

CANALTECH. 10 sistemas operacionais esquecidos pelo tempo. [s.l.], [s.d.].

Disponível em: https://canaltech.com.br/curiosidades/Sistemas-operacionais-esquecidos-pelo-


tempo/.

Acesso em: 20 jan. 2021.

DASGUPTA, P.; LEBLANC, R. J. et al. The clouds distributed operating system. Computer, [s.l.],
v. 24, n. 11, p. 34-44, 1991.

Disponível em: https://www.computer.org/csdl/magazine/co/1991/11/ry034/13rRUx0xPOQ.

Acesso em: 20 jan. 2021.

DAVIS, W. S. Sistemas operacionais: uma visão sistemática. Rio de Janeiro: Campus, 1991.

DEITEL, H. M. An introduction to operating systems. 2. ed. Reading, MA: Addison-Wesley,


1992.

DEITEL, H. M. et al. Sistemas operacionais. 3. ed. São Paulo: Pearson, 2005.

FERREIRA, F. G. Estudo de caso da disciplina de Introdução à Ciência da Computação da


Universidade de Brasília. 2017. 109 f. Trabalho de Conclusão de Curso (Licenciatura em
Computação) – Universidade de Brasília, Brasília, 2017.

Disponível em:
https://bdm.unb.br/bitstream/10483/19395/1/2017_FernandoGomesFerreira.pdf.

Acesso em: 20 jan. 2021.

HSM EXPERIENCE. O egoísmo e o Linux. [s.l.], 01 set. 2012. Disponível em:


https://experience.hsm.com.br/posts/o-egoismo-e-o-linux?
utm_medium=search&utm_term=Sistema+operacional.

Acesso em: 20 jan. 2021.

LUCAS, M. A arquitetura de Von Neumann: uma breve explicação sem complicação. Medium,
[s.l.], 18 jul. 2019.

Disponível em: https://medium.com/trainingcenter/a-arquitetura-de-von-neumann-


121489873fd4.

Acesso em: 20 jan. 2021.

MACHADO, F. B.; MAIA, L. P. Arquitetura de sistemas operacionais. 5. ed. Rio de Janeiro: LTC,
2013. E-book. Disponível em: https://integrada.minhabiblioteca.com.br/books/978-85-216-
2288-8. Acesso em: 20 jan. 2021.

MAZIERO, C. A. Sistemas operacionais de redes: conceitos básicos. [s.l.]: Instituto Federal do


Pará – IFPA, 2006.

Disponível em: http://www.ricardojcsouza.com.br/download/SOR_Conceitos_Básicos.pdf.

Acesso em: 20 jan. 2021.


MULTIPROGRAMAÇÃO com partições fixas da memória. Postado por Ânima Digital.

(2min. 11s.). son. color. port.

Disponível em: https://player.vimeo.com/video/507095699.

Acesso em: 20 jan. 2021.

SHAY, W. A. Sistemas operacionais. São Paulo: Makron Books, 1996.

SILBERSCHATZ, A. GALVIN, P. B.; GAGNE, G. Sistemas operacionais: conceitos e aplicações. 8.


ed. Rio de Janeiro: Campus, 2001.

SIQUEIRA, F. de. Sistemas operacionais. [s.l.], [s.d.].

Disponível em: https://sites.google.com/site/proffernandosiqueiraso/aulas.

Acesso em: 09 nov. 2020.

STALLINGS, W. Operating systems. New York: Macmillan, 1992.

TANENBAUM, A. S. Distributed operating systems. Upper Saddle River, NJ: Prentice Hall, 1995.

TANENBAUM, A. S. Organização estruturada de computadores. 6. ed. Prentice Hall Brasil, 2013

TANENBAUM, A. S.; BOS, H. Sistemas operacionais modernos. 4. ed. São Paulo: Pearson, 2016.

Você também pode gostar