Escolar Documentos
Profissional Documentos
Cultura Documentos
TÓPICO 01
Olá, Estudante!
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:
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
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.
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.
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:
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:
ATENÇÃO!
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.
SAIBA MAIS
1 - Recursos do sistema
2 - Gerenciamento dos recursos existentes
3 - Integridade e a segurança dos dados
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.
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
CURIOSIDADE
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.
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.
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
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
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.
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?
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
ATENÇÃO!
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
MULTIUSUÁRIO
DESKTOP
EMBARCADO
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.
Exemplo:
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.
Exemplo:
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:
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.
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.
ESTUDO DE CASO
Exclusão mútua
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.
Soluções de hardware
Exemplo:
Agora, considere:
Processo 1: A = B + 1
Processo 2: B = 2 × B
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.
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
Gerência de memória
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).
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).
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.
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.
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).
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.
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.
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.
https://player.vimeo.com/video/507095699
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).
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.
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
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).
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.
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.
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
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
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:
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:
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:
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:
Imagem:
Imagem:
TÓPICO 02
REFERÊNCIAS BIBLIOGRÁFICAS
DASGUPTA, P.; LEBLANC, R. J. et al. The clouds distributed operating system. Computer, [s.l.],
v. 24, n. 11, p. 34-44, 1991.
DAVIS, W. S. Sistemas operacionais: uma visão sistemática. Rio de Janeiro: Campus, 1991.
Disponível em:
https://bdm.unb.br/bitstream/10483/19395/1/2017_FernandoGomesFerreira.pdf.
LUCAS, M. A arquitetura de Von Neumann: uma breve explicação sem complicação. Medium,
[s.l.], 18 jul. 2019.
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.
TANENBAUM, A. S. Distributed operating systems. Upper Saddle River, NJ: Prentice Hall, 1995.
TANENBAUM, A. S.; BOS, H. Sistemas operacionais modernos. 4. ed. São Paulo: Pearson, 2016.