SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
1
DISCIPLINA: SISTEMA OPERACIONAL
Muitos conceitos são encontrados em livros, artigos e trabalhos científicos para Sistemas Operacionais de
Computadores, mas entendemos que Sistema é um conjunto de partes e Operacional aquilo que se
realiza.
Sistema Operacional: Camada de Software que opera entre hardware e os programas aplicativos voltados
aos usuários do Sistema. Estrutura de software ampla e complexa que incorpora aspectos de baixo nível
com o propósito de transformar o sistema computacional acessível e gerindo os recursos computacionais
de maneira eficiente.
Mais para entendermos o que o Sistema Operacional gerencia analise a arquitetura abaixo.
ARQUITETURA CONCEITUAL DE UM COMPUTADOR
2
a unidade lógica e aritmética, onde são executados todos os cálculos aritméticos e qualquer
manipulação de dados;
a unidade de controle, onde ocorre o “transporte” dos dados, é responsável pelo controle da
transferência de informações pelas outras unidades;
a memória, onde são armazenadas as informações, que pode ser tanto os dados que serão
manipulados, como também as instruções (programas) que serão executadas;
os unidades de entrada e saída, periféricos que conectados às demais unidades servirão de elo de
comunicação entre o usuário e o computador, traduzindo qualquer tipo de informação (textos,
imagens, áudio) em um código capaz de ser entendido pelo computador ou convertendo dados
processados pelo computador em saídas que podem ser interpretadas por um ser humano ou outro
computador. Lembrando que um mesmo dispositivo pode assumir a função de unidade entrada e
saída (por exemplo: um monitor sensível ao toque).
ARQUITETURA DE UM SISTEMA OPERACIONAL
3
Um sistema operacional não é um bloco único e fechado de software executando sobre o hardware. Na
verdade, ele é composto de diversos componentes com objetivos e funcionalidades complementares.
Alguns dos componentes mais relevantes de um sistema operacional típico são:
Núcleo : é o coração do sistema operacional, responsável pela gerência dos recursos do hardware usados
pelas aplicações. Ele também implementa as principais abstrações utilizadas pelos programas aplicativos.
Drivers : módulos de código específicos para acessar os dispositivos físicos. Existe um driver para cada
tipo de dispositivo, como discos rígidos IDE, SCSI, portas USB, placas de vídeo, etc. Muitas vezes o
driver é construído pelo próprio fabricante do hardware e fornecido em forma compilada (em linguagem
de máquina) para ser acoplado ao restante do sistema operacional.
Código de inicialização : a inicialização do hardware requer uma série de tarefas complexas, como
reconhecer os dispositivos instalados, testá-los e configurá-los adequadamente para seu uso posterior.
Outra tarefa importante é carregar o núcleo do sistema operacional em memória e iniciar sua execução.
Programas utilitários : são programas que facilitam o uso do sistema computacional, fornecendo
funcionalidades complementares ao núcleo, como formatação de discos e mídias, configuração de
dispositivos, manipulação de arquivos (mover, copiar, apagar), interpretador de comandos, terminal,
interface gráfica, gerência de janelas, etc.
As diversas partes do sistema operacional estão relacionadas entre si conforme apresentado, a forma
como esses diversos componentes são interligados e se relacionam varia de sistema para sistema.
Sistema Operacional: o gerente
Quando instalamos um Sistema Operacional, estamos de certa forma definindo um gerente para os
recursos do nosso computador. E o que é preciso gerenciar em um computador? Um dos itens que
precisam ser gerenciados são os programas (softwares) que você costuma utilizar quase ao mesmo tempo.
Programa é basicamente um conjunto de instruções que, ao serem executadas pelo computador, com a
supervisão de um Sistema Operacional, realizam determinadas tarefas.
Para que um programa qualquer possa ser executado no seu computador, nos bastidores o Sistema
Operacional realizará um conjunto de funções básicas e fundamentais como:
4
Gerenciamento dos processos;
Gerenciamento da memória;
Gerenciamento dos arquivos;
Gerenciamento dos dispositivos.
Cabe ao Sistema Operacional definir políticas para gerenciar os recursos computacionais e resolver
possíveis disputas e conflitos como uso de processador, memórias e acesso a dispositivos de
armazenamento, entrada e saída.
Gerenciador de Processos
O conceito mais importante em sistemas operacionais é o de processos, e entendê-los é fundamental para
todo estudante interessado em conhecer como os sistemas operacionais funcionam realmente.
Todas as ações que ocorrem no seu computador giram em torno de processos, pois, como dissemos antes:
processos são programas em execução e, sendo assim, todos os aplicativos que usamos são na verdade
processos.
Para entender melhor estes conceitos, vamos fazer a seguinte comparação do que ocorre no computador
com um exemplo bem simples: uma mesa de estudos. Você deve ter muitas atividades escolares que
precisam de sua dedicação e esforço para serem realizadas. Vamos considerar que você tenha uma mesa
de estudos própria com gavetas onde é guardado todo seu material escolar e nela são feitos todos os seus
trabalhos das mais diversas disciplinas (matemática, português, física, química etc.).
Vamos dizer que exista para cada disciplina uma lista de exercícios a ser resolvida. Então para estarmos
prontos, qual o primeiro passo a ser realizado? Poderíamos considerar a ação de pegar das gavetas e
colocar sobre a mesa as listas de exercícios que serão resolvidas, assim você terá acesso direto às questões
para resolvê-los um de cada vez.
Se considerarmos que nossa mesa de estudos é a memória do computador, e que nós somos o
processador, então, os programas são as listas de exercícios e quando a colocamos sobre a mesa, estamos
deixando elas prontas para serem resolvidas, ou seja, neste momento, cada lista deixa de ser apenas uma
folha guardada na gaveta (ou HD, se considerarmos os programas) para se tornar parte de uma atividade,
ou seja, de um processo.
5
Process Control Block – PCB
Bloco de controle do processo (Process Control Block – PCB) – Estrutura onde o SO guarda todas as
informações do processo, contendo sua identificação, prioridade, estado corrente, recursos alocados por
ele e informações sobre o programa em execução
O Sistema Operacional gerencia os processos através de System Calls.
Contexto de Hardware
Constitui-se do conteúdo de registradores
A troca de um processo por outro na CPU, pelo sistema operacional, é denominada mudança de
contexto.
Mudança de Contexto - salva o conteúdo dos registradores da CPU e carregá-los com os valores
referente ao do processo que está ganhando a utilização do processador.
Contexto de Software
Características do processo incluídas na execução de um programa, divididas em:
Identificação – Principalmente número (PID) de identificação e identificação do processo ou usuário
(UID) que o criou.
Quotas – Limites de cada recurso do sistema que um processo pode alocar
Privilégios – o que o processo pode ou não fazer em relação ao sistema e aos outros processos.
Estados do processo
Embora cada processo seja uma entidade independente, muitas vezes os processos precisam
interagir com os outros. Para gerenciar esta interação e o escalonamento dos processos é necessário
definir os possíveis estados que um processo pode ficar:
1. Em execução, realmente utilizando a CPU
2. Pronto, capaz de executar a qualquer instante, mas não tem CPU
3. Bloqueado, incapaz de executar
Mudança de Estado do Processo
Mudança de estado por eventos do próprio processo (eventos voluntários) ou causados pelo sistema
operacional (eventos involuntários). Dividido em 4 mudanças:
6
Pronto -> Execução = Quando um processo é criado, é colocado em uma lista de processos no
estado pronto. Então é escolhido pelo sistema para ser executado.
Execução -> Espera = O processo passa para espera quando aguarda a conclusão de um evento
solicitado.
Espera -> Pronto = O processo passa para pronto quando a operação solicitada é atendida ou o
recurso esperado é concedido.
Execução -> Pronto = O processo passa de execução para pronto por eventos gerados pelo sistema.
Ciclo de vida de um processo
Assim como o ser humano tem um ciclo de vida – o homem nasce, cresce, reproduz e morre – os
processos também têm seu ciclo de vida. Para gerenciar os processos e seus estados, o Sistema
Operacional mantém guardado dados sobre todos os processos presentes na memória. Dessa forma, o
agendador de processos pode saber informações úteis na hora de decidir qual processo terá acesso ao
processador. Lembre-se do exemplo dos amigos que estão jogando vídeo-game, é necessário guardar os
nomes e horários de cada jogador em uma tabela.
De forma parecida, o Sistema Operacional gerencia uma tabela de processos, na qual mantém dados como
o estado atual do processo, um apontador que indica qual próxima instrução deve ser executada e tudo
mais sobre o processo.
Comunicação interprocessos
Como visto acima, freqüentemente os processos precisam se comunicar com outros processos,
preferencialmente sem interrupções (nem sempre é possível). Neste tópico devemos nos preocupar com 3
pontos: a troca de informações entre processos; a garantia de que um processo não invada o espaço físico
do outro; e a garantia de que um processo não altere os dados que estão sendo trabalhados por outro (que
deve estar no estado pronto neste momento).
O Sistema Operacional deve então evitar que quando dois ou mais processos que acessam dados
compartilhados o resultado destes processos não dependa do escalonamento, ou seja, um processo não
interferiu no outro. Isto é chamado de condição de corrida.
Uma forma de se isolar este problema é a definição e tratamento das regiões que possam levar à
condições de corrida, tais regiões são chamadas de regiões críticas. Para tal 4 regras foram definidas:
1. Nunca 2 processos podem entrar ao mesmo tempo
2. A velocidade ou quantidade de CPUs não interfere
3. Nenhum processo executando fora da região crítica pode bloquear outros processos
4. Nenhum processo deve esperar eternamente para entrar numa região crítica
Alternativas para a exclusão mútua
Exclusão mútua (também conhecida pelo acrônimo mutex para mutual exclusion, o termo em inglês) é
uma técnica usada em programação concorrente para evitar que dois processos ou threads tenham acesso
simultaneamente a um recurso compartilhado, acesso esse denominado por seção crítica.
Existem várias alternativas para tratar este problema como: inibição das interrupções, utilização de
variáveis de travamento e alternância obrigatória. Porém a solução em software de maior sucesso é o
7
algoritmo de Peterson que combina a utilização de variáveis de travamento com a alternância obrigatória.
Existe também a solução em hardware chamada de instrução TSL. Porém ambas as soluções apresentam
o problema de prioridade invertida, ou seja, um processo de menor prioridade nunca terá acesso a CPU,
logo sua prioridade deveria ser maior. Estas soluções também não tratam o problema do Produtor-
consumidor (buffer compartilhado)
O problema do produtor e consumidor é resolvido através de semáforos (contadores de eventos) e mutex
(variável de dois estados). A utilização de monitores (unidade de sincronização de alto nível) para estas
soluções facilita a comunicação interprocessos.
Escalonamento
Quando um computador é multiprogramado, ele muitas vezes possui diversos processos que competem
pela CPU, surgindo assim a necessidade de alguma entidade para escalonar a CPU entre os processos, que
é chamada de escalonador.
Um escalonador deve possuir um algoritmo de escalonamento que se preocupe com 5 regras:
1. Justiça – Todos processos devem ter acesso a CPU
2. Eficiência – A meta do escalonador é chegar mais perto dos 100% de utilização da CPU
3. Minimizar o Tempo de Resposta
4. Turnaround – Minimiza os usuários batch
5. Throughput – Maximizar o número de jobs processados
Escalonamento
Quando um computador é multiprogramado, ele muitas vezes possui diversos processos que competem
pela CPU, surgindo assim a necessidade de alguma entidade para escalonar a CPU entre os processos, que
é chamada de escalonador.
Um escalonador deve possuir um algoritmo de escalonamento que se preocupe com 5 regras:
1. Justiça – Todos processos devem ter acesso a CPU
2. Eficiência – A meta do escalonador é chegar mais perto dos 100% de utilização da CPU
3. Minimizar o Tempo de Resposta
4. Turnaround – Minimiza os usuários batch
5. Throughput – Maximizar o número de jobs processados
O conceito básico que gerou a implementação de sistemas multiprogramáveis foi a possibilidade da UCP
ser compartilhada por vários processos. A fim de possibilitar isto, os sistemas multiprogramáveis devem
possuir critérios determinados pelo Sistema Operacional para determinar a ordem de execução dos vários
processos que concorrem pela utilização do processador. O procedimento de seleção da ordem em que os
processos serão atendidos pelo sistema é conhecido como Escalonamento.
Como principais objetivos do Escalonamento podemos citar, entre outros, os seguintes:
· manter a UCP ocupada o maior intervalo de tempo possível, otimizando sua utilização
· manter a utilização do processador balanceada entre os vários processos
· oferecer tempos de resposta razoáveis aos usuários
A fim de atender alguns destes objetivos, muitas vezes conflitantes os Sistemas Operacionais devem levar
em cosideração características dos processos (tipo batch, interativo, tempo real, tempo compartilhado, ...).
São estas caracterísitcas que vão possibilitar uma política adequada de escalonamento.
8
A partir de agora vamos ver algumas das diversas políticas de escalonamento utilizadas, em uma ordem
praticamente histórica, descrevendo o uso do principal recursode um sistema, o Processador.
ESCALONAMENTOS NÃO-PREEMPTIVOS
São aqueles em que quando um processo recebe a atenção do processador nenhum outro processo pode
lhe tirar este recurso e eram utilizados nos primeiros sistemas multiprogramáveis, onde predominava
tipicamente o processamento do tipo batch.
ESCALONAMENTO First-In-First-Out (FIFO)
Nesse escalonamento, o primeiro processo a chegar é o primeiro a ser executado. Seu algoritmo de
implementação é bastante simples já que com uma fila pode-se controlar facilmente a ordem de chegada
dos processos, colocando-se sempre os que entram no estado de pronto no final da fila. Por se tratar de
um método não preemptivo, os processos, ao receberem a atenção do processador, utilizarão a UCP sem
interrupções.
Como inconvenientes deste tipo de escalonamento podemos citar:
· impossibilidade de se prever quando um processo terá sua execução iniciada, já que isto é função dos
processos que estão a sua frente.
· possibilidade de processos CPU-bound (aqueles que consomem a maior parte do tempo em estado de
execução, realizando poucas operações de E/S) de menor importância prejudicarem processos I/O-bound
(aqueles que passam a maior parte do tempo em estado de espera, pois realizam um grande número de
operações de E/S) mais prioritários.
Esta política foi inicialmente implementada em sistemas do tipo batch e se mostrou ineficiente em
sistemas de tempo compartilhado quando implementada na forma original.
ESCALONAMENTO Shortest-Job-First (SJF)
Neste algoritmo de escalonamento, o processo em estado de pronto que necessitar do menos tempo de
processador para finalizar será escolhido para ser executado.
Este escalonamento favorece os processos que executam programas menores e reduz o tempo de espera
médio em relação ao FIFO. Apesar disto tem o inconveniente da dificuldade de se determinar com
exatidão quanto tempo de processador cada processo necessita para ser finalizado. Em sistemas que temos
os mesmos processos sendo executados constantemente, é possível estimar este tempo. Já em ambientes
de desenvolvimento isto é uma tarefa difícil.
Em sistemas onde um tempo de resposta razoável deve ser garantido, não são aplicáveis nem o SJF nem o
FIFO.
ESCALONAMENTO PREEMPTIVOS
Os sistemas em que processos em execução podem ser interrompidos para que outros possam ser
executados denominam-se Sistemas Preemptivos, e necessitam, portanto, de um algoritmo de
escalonamento preemptivo.
9
Este tipo de escalonamento permite que o sistema dê atenção imediata a processos prioritários como no
caso de processos de tempo real, proporcionando melhores tempos de resposta a sistemas de tempo
compartilhado.
Esta técnica permite também um compartilhamento maior e mais uniforme do processador.
ESCALONAMENTO Circular (Round Robin)
É implementado através de um algoritmo projetado especialmente para sistemas de tempo compartilhado.
Bastante similar Sistema ao FIFO, utiliza a técnica do time-slicing a fim de melhor distribuir o tempo de
processador entre os diversos processos. Desta maneira, ao passar ao estado de execução um processo terá
um tempo limite de alguns milisegundos (100 a 500) para utilizar de forma contínua a UCP. Quando este
intervalo de tempo se esgota, o processo em execução passa para o final da fila onde espera sua vez de ser
executado novamente. Esta fila, então, pode ser considerada como circular. Daí o nome de escalonamento
circular.
Através deste escalonamento circular, nenhum processo poderá monopolizar o uso do processador,
aumentando o tempo de resposta de outros processos. Desta maneira podemos concluir que este tipo de
escalonamento é bastante adequado a sistemas de tempo compartilhado. Mesmo assim os processos I/O-
bound continuam em desvantagem neste tipo de escalonamento.
ESCALONAMENTO por Prioridades
Devido ao fato do escalonamento circular tratar todos os processos de forma igual, ele não consegue
implementar um compartilhamento igual entre diferentes tipos de processos. Novamente processos do
tipo CPU-bound levam vantagem sobre os I/O-bound, já que este passa a maior parte do tempo em estado
de espera e aquele tem, então, maiores chances de ser executado.
A fim de amenizar este tipo de inconveniente, pode-se trabalhar com prioridades de processos, onde
determinados processos podem ter prioridades de execução sobre outros, aumentando suas chances de
serem executados, processos de maior prioridade são escalonados preferencialmente. Toda a vez que um
processo prioritário for colocado em estado de pronto, o Sistema Operacional deverá interromper o
processo em execução, caso ele seja de prioridade menor que será colocado em estado de pronto, e
selecionar o processo prioritário para execução.
Este tipo de preempção é implementado através de um clock que interrompe o procesador em intervalos
de tempo regulares, permitindo que a rotina de escalonamento reavalie as prioridades.
Voltando a nossa discussão anterior, podemos dar a um processo I/O-bound prioridade maior que a um
processo CPU-bound. Desta maneira, toda vez que o I/O-bound entrar em estado de pronto ele será
executado, aumentando o compartilhamento da UCP. Observe que isto não significa que o CPU-bound
será prejudicado, já que ele estará sendo executado nos intervalos de tempo em que o I/O-bound estiver
esperando uma operação de I/O (E/S).
· O Windows especifica prioridades para as thread que as permite utilizar recursos do sistema e utiliza o
time slice. As prioridades variam de 0 a 31(maior prioridade). As threads do próprio Sistema Operacional
tem as maiores prioridades (16-31) enquanto as threads tem as menores (0-15). Na hora de escrever os
programas pode-se multithreading pode-se especificar a prioridade das threads.
10
ESCALONAMENTO por Múltiplas Filas
Devido ao fato de que os vários processos de um sistema possuem características de processamento
diferentes torna-se interessante classificar os processos em função do tipo de processamento realizado
dividindo-os em grupos e aplicando a cada um deles mecanismos de escalonamento diferentes.
Partindo deste princípio o escalonamento por filas múltiplas implementa diversas filas de processos em
estado de pronto cada uma adotando um mecanismo próprio de escalonamento e uma prioridade
associada que estabelece quais filas são prioritárias em relação às outras. Aqui, cada processo é associado
a apenas uma das filas.
Como exemplo, poderíamos citar um sistema onde temos os processos divididos em 3 filas, sendo elas:
1. fila de processos do sistema
2. fila de processos interativos
3. fila de processos do tipo batch
sendo a ordem de prioridades 1, 2, 3. Aqui, o sistema só poderá escalonar processos de uma fila quando
todas as outras de maior prioridade estiverem vazias.
OBS: Temos também o escalonamento por filas múltiplas com realimentação, onde os processos não
necessariamente permanecem em uma mesma fila todo o tempo. Desta maneira, o Sistema Operacional
tem um mecanismo de ajuste dinâmico a fim de ajustar os processos de acordo com o desempenho do
sistema.
Deadlock: impasse entre processos
Quando dois ou mais processos ficam impedidos de continuar suas execuções, ou seja, estão bloqueados
por estarem aguardando a liberação de recursos que estão alocados entre eles, essa situação é conhecida
como Deadlock.
É difícil de identificar a ocorrência de deadlocks, basicamente essa situação de impasse pode ser
representada pelo seguinte grafo(3):
(3) Diagrama composto de pontos, alguns dos quais são ligados entre si por linhas, e que é geralmente
usado para representar graficamente conjuntos de elementos inter-relacionados.
Processos A e B em deadlock devido os recursos R1 e R2
11
Fonte: autoria própria.
Observe que quanto mais recursos compartilhados são necessários para execução de um processo, há mais
riscos desse processo passar por uma situação de impasse com outros processos. Um exemplo simples é
processos de manipulação de banco de dados, onde as diferentes tabelas podem ser consideradas como
recursos compartilhados, veja um exemplo no qual pode ocorre um deadlock:
Para efetuar uma venda, um processo é criado no computador do banco de dados que precisa alocar as
tabelas de estoque dos produtos e de clientes. Como vários vendedores podem registrar vendas ao mesmo
tempo, dois processos podem receber o acesso de uma das tabelas em questão e ficarem aguardando a
liberação da outra, assim, tanto os processos ficam bloqueados como os recursos ficam indisponíveis até
que essa situação de impasse seja resolvida, mais quais as estratégias de tratamento de deadlocks?
Deadlocks: métodos de tratamento
Existem três estratégias básicas para o tratamento de deadlocks, veja-as a seguir.
1 – Definir métodos de comunicação interprocessos que evitem o surgimento de deadlocks.
2 – Detectar situações de deadlock e definir uma forma de restaurar o sistema, resolvendo o
impasse.
3 – Ignorar o problema e torcer que ele não ocorra. Conhecido como algoritmo do avestruz.
Por incrível que pareça, a estratégia mais usada nos sistemas operacionais é a de ignorar os
problemas de deadlock, pois os possíveis tratamentos desse tipo de situação podem acarretar em perdas
de desempenho do sistema, comprometendo a execução dos processos. Assim, é mais comum que os
próprios softwares procurem evitar situações de deadlock na lógica em seus códigos e, no caso de ocorrer
alguma situação de impasse, é preferível encerrar a execução de um processo ou até reiniciar o
computador em casos mais extremos.
Tipos de processos
CPU-bound (Ligado à CPU)
O processo passa a maior parte do tempo no estado de execução.Realiza poucas operações de I/O
Encontrado em aplicações que efetuam muitos cálculos.
I/O-bound (Ligado à E/S) O processo passa a maior parte do tempo no estado de espera.
Encontrado em aplicações comerciais com bastante leitura, processamento e gravação.
Encontrado também em aplicações interativas.
Gerenciamento de Memória
Mesmo com a evolução da tecnologia, que faz com que hoje tenhamos memórias muito superiores às de
alguns anos atrás - as memórias utilizadas no início da década de 80 eram as memórias SIMM de 30 pinos
de 256KB, hoje existem os novos modelos de memória como a DDR3 com capacidade de 16GB – o
12
Sistema Operacional precisa gerenciar a memória disponível, pois com a evolução da tecnologia os
processos tendem a evoluir também e utilizar toda a memória disponível.
Na verdade, os sistemas operacionais possuem estratégias de gerenciamento não só para utilizar a
memória, mas também procuram utilizar de outras fontes de armazenamento, como o HD.
Memória RAM e a hierarquia da memória
O gerenciamento de memória realizado pelo Sistema Operacional está diretamente voltado para o
controle do hardware, conhecido como memória RAM. A sigla RAM deriva da expressão Random
Access Memory, que significa memória de acesso aleatório. Os dados armazenados nessa memória podem
ser lidos, escritos e apagados pelo processador. Como vimos nas primeiras aulas, existem diversos
dispositivos de armazenamento de dados e as características que os diferencia são as seguintes: a
velocidade de acesso, a capacidade de armazenamento, e o fato de conseguir ou não manter os dados
gravados mesmo quando o computador é desligado.
Para relacionar essas características com os diversos dispositivos de armazenamento de dados, foi criada
uma hierarquia para facilitar a nossa compreensão. A Figura mostra essa classificação para os diferentes
recursos de memória disponíveis no computador.
De acordo com a hierarquia, vemos que só os registradores e memória cache dos processadores são mais
rápidos que a memória RAM. Eles são de uso exclusivo da CPU para execução das instruções de baixo
nível (linguagem de máquina).
Dessa forma, o Sistema Operacional e os programas utilizam-se da memória RAM, que também é rápida,
para poderem executar. Já imaginou se a CPU de seu computador precisasse acessar constantemente o
HD para manipulação dos dados de um processo, certamente a execução dos programas seria bastante
lenta!! Quando a informação é mantida na memória, a CPU pode acessar os dados com mais rapidez.
Mas, como a memória RAM é bem mais cara que o HD e é uma memória do tipo volátil, ou seja, que os
dados não permanecem gravados quando o computador é desligado, ainda precisaremos dos outros tipos
de dispositivos para armazenamento.
Mesmo com a contínua evolução do computador, que faz com que esse tenha uma sua capacidade de
armazenamento cada vez maior, existirá sempre uma demanda crescente por mais memória,
13
principalmente da memória RAM, dado que é nela que os processos são executados.
Navegando pela memória
Sabemos que todos os componentes de hardware do computador e o Sistema Operacional trabalham
juntos para que programas possam ser executados. Dentre todos os componentes, a memória desempenha
uma das funções essenciais à execução de um programa. Desde o momento em que o computador é
ligado até a hora em que é desligado, a CPU está constantemente usando a memória.
Vamos ver os passos que são seguidos quando ligamos um computador. Primeiramente, no momento que
ligamos o computador, a CPU tenta executar a primeira instrução. Como o Sistema Operacional ainda não
está carregado na memória, ele não pode fornecer as instruções a serem executadas. Neste momento, um
programa especial chamado de BIOS (do inglês: Basic Input/Output System - Sistema Básico de
Entrada/Saída) presente na memória ROM (do inglês: Read Only Memory) - tipo de memória especial
existente na placa mãe que permite apenas a leitura - fornece a sequência de instruções de inicialização do
computador. Essas primeiras instruções verificam se os principais componentes do computador, inclusive
da memória, estão funcionando corretamente. Esses testes são chamados POST (do inglês: Power-On Self
Test – Auto-Teste Após Ligação). Dessa forma, essas instruções garantem que tudo está funcionando
corretamente logo após o computador ser ligado.
Após essa análise, o Sistema Operacional (SO) é copiado do disco rígido para a memória. Uma vez que o
Sistema Operacional foi “carregado”(1) na memória, outros programas poderão também ser carregados na
memória e executados. Além de armazenar os programas em execução na memória, também conterá os
dados (ou arquivos) acessados por esses programas.
Quando você abre um arquivo no editor de texto como o Microsoft Word, edita e salva o arquivo e depois
disso fecha o programa, o arquivo que foi salvo é gravado no disco de armazenamento e o programa e o
arquivo são removidos da memória.
Agora que você já sabe como o Sistema Operacional é carregado na memória durante a inicialização do
computador, você vai entender como é de fato realizado o papel de um gerenciador de memória,
controlando não apenas a memória RAM, como toda a hierarquia de memória.
(1) Esse é o termo que usamos quando um programa é copiado para a memória RAM.
Os esquemas de gerenciamento de memória evoluíram juntamente com os dispositivos e o próprio
Sistema Operacional. Existem diversas estratégias de organizar os processos que são colocados na
memória, e algumas delas serão apresentadas para que você compreenda o que está por trás de cada
programa que executamos, inclusive do próprio Sistema Operacional.
Monoprogramação sem troca ou paginação
Este é o esquema mais simples de gerenciamento de memória, consiste basicamente no compartilhamento
da memória entre o Sistema Operacional e apenas um programa. Assim, a cada nova solicitação de
execução de um programa, o Sistema Operacional carrega-o para memória e caso já tenha um processo
14
presente, este será sobrescrito.
De acordo com a Figura, observamos que a memória permanece vazia (1), até que o Sistema Operacional
é carregado primeiramente na memória, criando o processo (2) do sistema. Então, o SO reserva o restante
do espaço de memória para o primeiro programa a ser carregado (3) e caso seja solicitado a execução de
um novo programa, o sistema sobrescreve o processo anterior pelo novo (4).
Gerencia de memória em SO que gerenciam apenas um programa por vez
.
Para atender a necessidade da multiprogramação presente na CPU que possibilitava a execução de mais
de um programa por vez, foram desenvolvidos novos esquemas de gerenciamento.
Multiprogramação com partições fixas
Se queremos que vários processos sejam executados ao mesmo tempo, teremos que mantê-los na
memória, mas como isso será possível? Dividindo a memória em pequenos lotes, como os lotes de um
condomínio de casas. O Sistema Operacional poderá ocupar essas partições com os processos que serão
criados, teremos então na mesma memória diversos programas em execução, bastando gerenciar os
endereços de memória de cada um desses lotes de bytes.
15
Como os processos variam muito de tamanho, os Sistemas Operacionais que se utilizam da
multiprogramação com partições fixas procura variar no tamanho dos lotes de memória, tentando otimizar
o uso da memória, observe a Figura 3 e você terá uma ideia desse esquema.
Gerenciamento de memória com partições fixas.
Lembre-se de que, como estamos falando de partições fixas, os processos tem que ser compatíveis com os
tamanhos dos lotes e, portanto, existem maneiras diferentes de reservar as partições. Por exemplo, o
Sistema Operacional pode sempre reservar aos processos de partições de tamanho mais próximo ao que
eles necessitam, assim, uma partição grande nunca será ocupada por processos menores, para que não seja
subutilizada, porém, a espera por uma partição menor pode prejudicar processos menores que ficaram em
filas aguardando, tal situação está presente na figura abaixo.
16
Quando a memória não é suficiente
Às vezes, a memória não é suficiente para manter todos os processos atualmente ativos, sendo assim,
foram desenvolvidos técnicas de gerenciamento de memória RAM com auxílio de uma memória
secundária (geralmente o HD do computador), vamos apresentar dois esquemas que se utilizam de mais
memória do que a RAM disponível. São o esquema de troca e o esquema de memória virtual.
Troca
O esquema de troca consiste em trazer o processo inteiro do disco para a memória e executá-lo
temporariamente e então devolvê-lo para o disco novamente para que outro processo possa ter sua vez. A
mostra como esse esquema funciona.
17
Paginação de processos no HD
Neste esquema, a alocação da memória não segue a ideia de partições fixas, variando seu tamanho de
acordo com o processo que for sendo carregado. Dessa forma, estaremos otimizando o uso da memória,
mas tornando ainda mais complexo o seu gerenciamento.
Por exemplo, de acordo com a Figura 6 , vemos que com o tempo e a liberação de memória, lacunas vão
aparecendo, tornando ineficiente o uso da memória, então, métodos de compactação da memória podem
ser utilizados para juntar os processos presentes e eliminar as lacunas entre processos, aumentando áreas
livres que poderiam ser utilizadas, mas essa ação consome bastante tempo de CPU.
Problema no gerenciamento das áreas livres que vão surgindo
Para gerenciar as trocas e quais áreas da memória estão ocupadas ou livres, dois esquemas básicos são
utilizados, veja-os a seguir.
18
Gerenciamento de memória com mapas de Bits
Pense no mapa de sua cidade, lá deve estar representado as áreas ocupadas (urbanas) e áreas livres
(terrenos, áreas ambientais e zonas rurais), se dividimos a memória em pequenos lotes e criamos um
mapa de ocupação, podemos com o custo de uma pequena área da memória saber quais áreas estão livres
e ocupadas. A Figura 7 representa essa forma de gerenciamento.
Mapeamento da memória com mapa de bits
Gerenciamento de memória com lista encadeada
Para esse esquema, uma lista de lotes da memória indica quais estão ocupados com processos e quais são
áreas livres. Como a lista é encadeada, cada elemento além das informações sobre sua partição da
memória também aponta para a próxima área. É como se pegássemos um bloco de notas e
19
descrevêssemos cada cômodo de nossa casa em uma das folhas informando quem está no cômodo e
realizando qual atividade.
A Figura abaixo explica melhor a relação da lista encadeada com as partições da memória.
Lista encadeada para mapear processos e áreas livres
Observe que, na Figura , no momento em que um processo é finalizado e sua partição é liberada, caso
exista uma ou duas partições vizinhas livres, ocorre uma fusão, gerando uma partição livre maior,
conforme verificado nas áreas 1 e 2 em destaque na figura.
Memória virtual
Quando a memória restante não é suficiente para executar um processo realmente grande, o Sistema
Operacional estabelece uma estratégia de manter partes do programa na memória e parte no disco. Esse
método gerou o conceito de memória virtual, dado que aumenta a capacidade de gerenciamento para um
tamanho maior que a memória existente.
Muitos esquemas de memória virtual utilizam a técnica de paginação, então, iremos demonstrar como ela
funciona como uma possível demonstração de memória virtual.
Paginação
Nos computadores que se utilizam de memória virtual, existe um componente de hardware especial
chamado de MMU (Memory Management Unit – Unidade de Gerenciamento de Memória) que mapeia
áreas do disco, expandindo a capacidade da memória. De acordo com a Figura, podemos observar que se
trechos do programa não presentes na memória real forem acessados, eles serão copiados do disco para a
memória através de uma troca de páginas.
20
Esquema de paginação da memória no disco
Vale lembrar que os dados do segmento da memória serão guardados no HD para preservar a integridade
completa do processo. Essas partições da memória são conhecidas como molduras de páginas e os trechos
do processo no HD é conhecido como páginas. De acordo com nosso exemplo, temos 6 páginas e apenas
4 delas estão mapeadas na memória física.
Alguns sistemas operacionais mais simples não trabalham com multiprogramação, ou seja, alocam um
processo na memória o executam até que seja terminado. Porém a troca de processos entre memória e
disco para sistemas multiprogramados é uma realidade. Para este caso, em que a soma dos espaços de
memória requeridos por todos os processos é maior que a memória primária, é necessário levar os dados
não utilizados para o disco, sendo necessário um controle através de mapa de bits.
A utilização de memorial virtual é recomendada, mas o algoritmo de substituição de páginas deve ser
eficiente para garantir o desempenho do processo. Recomenda-se o uso do algoritmo do envelhecimento
(aging) e o WSClock. Um resumo dos algoritmos de substituição de páginas segue abaixo:
NUR (não usada recentemente) • Muito rudimentar
FIFO • Pode descartar páginas importantes
21
FIFO com segunda chance • Melhoria do FIFO
Relógio • Realista
MRU (menos recentemente usada)
• Excelente, mas difícil implementação
NFU (não frequentemente usada)
• Método similar ao MRU, mas rudimentar
Envelhecimento (aging) • Ótimo desempenho e se aproxima do MRU
SWAPPING
O conceito de swapping continua válido ao se tratar de memória virtual.
Ao existir novos processos que necessitem serem processados e não existir espaço suficiente na memória
principal o Sistema Operacional deve selecionar aqueles segmentos e ou páginas que deverão ser
removidos para abrir espaço na memória. Existem vários procedimentos para se fazer a escolha. Podemos
citar aqui o critério da prioridade (os de menor prioridade dao imediatamente retirados) e o do estado
(aqueles em estado de espera são imediatamente retirados).
TRASHING
Trashing pode ser definido como sendo a alta taxa de paginação devido ao grande page fault que pode
ocorrer devido a pequenas áreas de working set em vista das que realmente seriam necessárias para
acomodar as páginas e ou segmentos constantemente acessados pelos processos e ou quando existem
muitos processos competindo por espaço na memória principal.
PAGE FAULT
Uma falta de página1 ou falha de página (page fault em inglês), no contexto da tecnologia da memória
dos computadores, é uma interrupção (ou exceção) disparada pelo hardware quando um programa acessa
uma página mapeada no espaço de memória virtual, mas que não foi carregada na memória física do
computador. Uma página é um bloco de memória de tamanho fixo, utilizada como uma unidade de
transferência entre a memória física e um dispositivo de armazenagem externo como, por exemplo, um
disco rígido.
O dispositivo de hardware que detecta esta situação é a unidade de gerenciamento de memória do
processador. O software de tratamento de exceção, que trata a ocorrência de falta de página, é geralmente
parte do sistema operacional. O sistema operacional tenta tratar esta ocorrência fazendo a página acessível
em uma locação da memória física ou interrompendo a execução do processo em caso de acesso ilegal.
Faltas de página não são fatais
As faltas de página além de não serem fatais são ocorrências comuns e necessárias para possibilitar o
aumento da memória disponível para os programas em qualquer sistema operacional que utiliza memória
virtual, como o Microsoft Windows e o Linux.
O hardware gera interrupções de falta de página quando:
a página correspondente ao endereço requisitado não está carregada na memória;
22
a página correspondente ao endereço de memória acessado está carregada, mas o seu estado corrente não
foi atualizado no hardware.
Uma exceção relacionada com a falta de página é conhecida como falha de proteção (protection fault em
inglês) e é gerada para acessos de página quando:
a página não é parte do programa, e portanto não é mapeada na memória do programa;
o programa não tem privilégios suficientes para ler ou escrever a página;
o acesso à página é legal, mas está mapeada como página sob demanda.
Gerenciamento de Arquivos
Sabemos que os programas são carregados na memória na forma de processos, e que esses recebem uma
determinada quantidade de memória principal para armazenar os dados que receberão dos diversos
dispositivos de entrada de dados. Porém, podemos logo perceber que a memória não é suficiente para
armazenar toda a massa de dados que pode ser manipulada por um processo. Imagine a quantidade de
informação de todas as aulas de todas as disciplinas da Metrópole Digital, agora imagine que quiséssemos
abrir todas as aulas de uma única vez, o processo responsável por apresentar estas aulas, dependendo do
computador utilizado, não teria como ter acesso à memória para armazenar toda essa informação.
Além disso, aprendemos que a memória de um computador é liberada quando o processo é encerrado e
toda a informação presente na área que foi reservada será perdida, então, você pode perguntar: como fazer
para manter os dados após o computador ser desligado? E outra questão que surge é a seguinte: se o
espaço de memória dedicado a um processo é protegido dos demais processos, então, como informações
poderiam ser acessadas por diversos processos ao mesmo tempo?
Para atender as necessidades levantadas acima, são utilizados discos e outras mídias digitais externas para
armazenamento de dados que permaneceram salvos mesmo que o processo seja encerrado e até mesmo
que o computador seja desligado. O gerenciamento desse “depósito” de informações será o foco desta
nossa aula.
Gavetas na mesa de estudos
Para entender como os dados são armazenados e salvos, vamos voltar para o exemplo da mesa de estudos
que usamos nas aulas anteriores, sabemos que todo o material de estudo, nossos livros, nossas listas de
exercícios permanecem guardados. No caso da mesa representada na Figura 1, esse material está
guardado nas gavetas. Fazendo um paralelo com o computador, podemos dizer que essas gavetas atuam
como os discos rígidos de um computador.
23
As gavetas servem para guardarmos todo o material de estudo, incluindo tudo que foi feito durante nossas
horas de estudo, além disso, elas servem para que possamos ter a mesa livre para realizar tarefas de
disciplinas diferentes sem misturar livros e apostilas de cada uma. Além disso, se nossa mesa de estudos
for suficientemente grande para ser compartilhada com outra pessoa, essas duas pessoas podem
compartilhar o mesmo material guardado nas gavetas.
Quando usamos as gavetas para armazenar nosso material de estudo, precisamos nos lembrar de manter
sempre todo o material organizado para que todas as pessoas que se utilizam da mesa (inclusive nós
mesmos) possam ter acesso fácil à informação armazenada nas gavetas.
Podemos dizer que o Sistema Operacional gerencia o armazenamento de dados de forma parecida com o
exemplo das gavetas na mesa de estudos. Basicamente, é preciso que ele procure atender a três requisitos.
1 – Poder armazenar uma grande quantidade de dados.
2 – A informação deve permanecer guardada, mesmo com o processo finalizado.
3 – Devem existir mecanismos de acesso da informação por mais de um processo.
Para facilitar a organização dos dados nos discos rígidos, o Sistema Operacional armazena os dados em
unidades chamadas arquivos (mesmo conceito dos documentos de papel utilizados nas empresas para
guardar informações de suas atividades). Assim, para permitir o gerenciamento desses dados, o Sistema
Operacional oferece aos processos a capacidade de criar, ler, mover, alterar e arquivos
Arquivo
A parte do Sistema Operacional responsável pelo gerenciamento (criação, remoção, alteração) dos
arquivos é conhecida como Sistema de Arquivos. É ele o responsável por identificar cada arquivo com
um nome único. Por exemplo, todos os seus livros possuem o título na lateral do livro para facilitar sua
identificação e, assim, caso você precise retirar um livro de uma estante ou gaveta, basta procurar pelo
nome do livro sem ter que abri-lo.
Da mesma forma que numa estante de livros, no sistema de arquivos de um Sistema Operacional o nome
do arquivo armazenado no disco rígido é uma informação importante e necessária para sua localização no
disco rígido do computador.
Cada sistema de arquivos possui regras específicas de nomear um arquivo, dentre essas regras podemos
citar, por exemplo: a quantidade máxima de caracteres que podem ser usadas para formar os nomes dos
24
arquivos, e os tipos de caracteres que podem ser usados (geralmente, você não pode usar os seguintes
caracteres em um nome de arquivo:  / ? : * " > < | .). O Windows geralmente limita os nomes de arquivos
em 260 caracteres. Mas, o nome do arquivo, na verdade, deve ser mais curto que isso, já que o caminho
completo (como C:Arquivos de Programanome_do_arquivo.txt) está incluído nessa contagem de
caracteres. É por isso que você pode, ocasionalmente, encontrar um erro ao copiar um arquivo com um
nome muito longo para um local que possua um caminho mais curto que o local atual. Nos sistemas
UNIX, os nomes podem ter até 255 caracteres.
Tanto no Linux quanto no Windows os arquivos possuem extensões. “As extensões funcionam apenas
como uma indicação do tipo de programa que pode manipular aquele arquivo, separado do nome por um
ponto “.”. Por exemplo, a extensão .jpg indica que o arquivo casa.jpg se trata de uma imagem e um
programa de edição de imagens (GIMP, por exemplo) pode abri-lo para ser exibido na tela de seu
computador.
Estrutura dos arquivos
A informação contida em nossos livros e apostilas é um conjunto de letras e palavras impresso nas folhas.
Mas, você sabe dizer como são estruturados os dados nos arquivos do computador? Sabemos que os
dados no computador são codificados em bits (unidades binárias com valores 1 ou 0) e que o tráfego entre
os diversos componentes é baseado em conjuntos de bits na potência de 2 (4, 8, 16, 32, 64 etc.).
Então, para os sistemas operacionais, os arquivos são apenas um conjunto de bytes (unidade composta de
8 bits) e que é de responsabilidade de cada programa converter esses bytes em letras, números, sinais de
pontuação, ou seja, alguma representação que nós humanos possamos entender. Fazendo um paralelo com
nossa estante de livros, é como a estante de livros só pudesse armazenar livros, apostilas e documentos
em uma língua comum, formada apenas por seqüências de zeros e uns (bits), e caberá, portanto a quem
for ler este material, interpretar o que significa a seqüência de bits presentes em cada livro (por exemplo,
a seqüência de 8 bits “00011000” pode representar a letra “A”).
Apesar dos arquivos serem basicamente um conjunto de bytes (8 bits), eles podem ser de tipos diferentes
de acordo com a sua finalidade. Podemos ter arquivos que servem apenas para armazenar os dados
(arquivos com extensão .txt), arquivos que armazenam imagens (arquivos com extensão .bmp), ou até
mesmo arquivos de sistema onde mantemos informações sobre outros arquivos, os quais chamamos de
diretórios e que servem como uma forma de organização das informações.
Existe também um tipo especial de arquivo que serve para termos acesso direto a diferentes dispositivos.
Como vimos na aula anterior (Aula 8), para enviarmos comandos para uma impressora, basta abrir o
arquivo correspondente a esse dispositivo e escrever a informação que será impressa. O sistema de
arquivos ficará então responsável por enviar as requisições para o “driver” da impressora para solicitar a
impressão do documento que já foi escrito no arquivo correspondente a esse dispositivo.
Acessando os arquivos
Há algum tempo atrás, as informações do computador não eram armazenadas em discos rígidos, elas
eram armazenadas em fitas magnéticas (similares às fitas cassetes usadas para escutar música da década
de 80, e nas fitas VHS usadas para armazenar filmes). A forma de acessar a informação nesse tipo de
mídia era sequencial, ou seja, para acessar informações no meio da fita tínhamos que re-bobinar a fita
25
até o ponto desejado.
Hoje em dia, como utilizamos discos, os dados podem ser acessados fora da ordem (assim como num
CD, podemos ir direto para a música 10 sem precisar passar por todas as outras, em um HD podemos
acessar os arquivos armazenados em qualquer ordem). Portanto, o acesso à informação se tornou mais
rápido. Os sistemas operacionais modernos se utilizam apenas dessa forma de acesso e os arquivos que
podem ter seus dados acessados em qualquer ordem são chamados de arquivos de acesso aleatório. Uma
comparação interessante que podemos fazer com relação a essa evolução é comparar os antigos Papiros,
rolos de papel utilizados na antiguidade para registrar os documentos, com os livros que podemos
selecionar um determinado capitulo saltando as suas páginas (veja a Figura 4).
Papiro (acesso sequencial) x Livro (acesso aleatório).
Atributos de um arquivo
Na capa de um livro ou documento, normalmente temos informações básicas sobre o mesmo. Dados
como autor, edição, título, editora são encontrados para auxiliar nas nossas consultas.
O Sistema Operacional também guarda informações sobre os arquivos que vão além do seu nome e dos
dados armazenados. Data e hora de criação, acesso e alteração, tamanho do arquivo e códigos de
segurança para restrição de acesso são exemplos de atributos que são armazenados pelo Sistema
Operacional para cada arquivo criado.
26
Informação de alguns atributos do arquivo no Windows.
Operações com arquivos
Os sistemas de arquivos possuem conjunto de operações diferentes, mas basicamente eles
disponibilizam os seguintes recursos de acesso e manipulação de arquivos.
Diretórios
Mesmo tendo uma estante, e algumas gavetas para guardar nosso material de estudo, isso não garante que
conseguiremos encontrar facilmente nosso material quando desejarmos. Para isso, precisamos de uma
27
certa organização!!! Diferentes tipos de livros, apostilas e documentos devem ser organizados de tal
forma que eu possa encontrá-los facilmente quando eu precisar deles.
Por exemplo, seria interessante que todos os questionários estivessem organizados em pastas que
indicassem à qual disciplina pertence, assim, caso você queira revisar as questões para uma prova, você
saberia exatamente onde encontrar. Veja na Figura 6 um exemplo de organização de documentos em
pastas.
Organizando documentos em pastas
Para organizar os arquivos, o Sistema Operacional utiliza uma técnica parecida: os diretórios. Os
diretórios funcionam como pastas, armazenando informações sobre um conjunto de arquivos e facilitando
a localização dos mesmos.
Localizando diretórios e arquivos
Como os arquivos nos Sistemas Operacionais estão organizados em diretórios, é fundamental que exista
uma forma de localizá-los. Para isso, não basta termos o seu nome, mas precisamos do nome do diretório
onde ele se encontra e, caso esse diretório esteja também em algum outro, devemos saber a sequência de
diretórios até chegar ao arquivo, formando uma árvore de diretórios representada pela Figura 7.
28
Árvore de diretórios e arquivos. Fonte: autoria própria.
Dependendo do sistema de arquivos adotado pelo Sistema Operacional, a estrutura da árvore de diretórios
e até sua representação podem mudar. Por exemplo, no Windows o sistema de arquivo utilizado
atualmente é o NTFS (New Technology File System) que diferencia as unidades de armazenamento
(discos, drivers de CD, pendrivers, etc) por letras (C:, D:, E:, etc) e, a partir de cada unidade dessa,
temos uma árvore de diretórios.
Já o sistema de arquivos EXT3 (Third Extended file system), presente em muitas distribuições do Sistema
Operacional Linux, não representa as unidades de armazenamento através de letras, apenas existe um
diretório padrão conhecido como diretório-raiz representado pela barra “ / ”. Caso seja necessário acessar
uma unidade diferente, deve ser feito uma associação com um diretório conhecido como montagem de
unidade. A Figura 8 apresenta a árvore de diretórios no Windows e no Linux.
Formas diferentes de acesso para um arquivo nos diferentes Sistemas Operacionais
Sistemas de arquivos
Diferentes Sistemas Operacionais usam diferentes sistemas de arquivos. Dependendo da capacidade dos
discos e do volume de arquivos e acessos, as ações de manipulação de arquivos tornam-se mais
complexas, exigindo constantes evoluções nos sistemas de arquivos. Existem diversos sistemas de
arquivos, que vão desde sistemas simples, como o FAT16, que utilizamos em cartões de memória, até
sistemas como o NTFS, EXT3 e ReiserFS, que incorporam recursos muito mais avançados.
No ambiente Windows, temos apenas três sistemas de arquivos: FAT16, FAT32 e NTFS. O FAT16 é o
mais antigo, usado desde os tempos do MS-DOS, enquanto o NTFS é o mais complexo e atual. Para o
Linux (e outros sistemas Unix), temos uma variedade muito grande de sistemas de arquivos diferentes,
29
que incluem o EXT2, EXT3, ReiserFS, XFS, JFS e muitos outros que podem parecer estranhos para você,
mas não para os usuários do Linux.
Apesar das diferenças existentes nos sistemas de arquivos, alguns conceitos básicos sempre estarão
presentes. Por exemplo, para determinar o caminho para um dado arquivo, basta informar a todos os
diretórios que são necessários percorrer da base da árvore até o arquivo, então, como vimos na Figura 8, o
caminho do arquivo processos.txt é:
1. no Windows: C:SOaulasprocessos.txt;
2. no Linux: /SO/aulas/processos.txt.
Esse nome é conhecido como nome de caminho absoluto, pois indica todo o percurso desde o diretório-
raiz até o arquivo.
Além do conceito de caminho absoluto, existe também o caminho relativo. Quando estamos em um dado
diretório (também chamado de diretório atual ou diretório de trabalho), podemos acessar um arquivo
como se o diretório atual fosse o diretório-raiz. No exemplo anterior, se o diretório de trabalho fosse
C:SOaulas (ou /SO/aulas no Linux), poderíamos acessar o mesmo arquivo processos.txt de duas
formas:
Formas de como acessar o arquivo processos.txt
Operações com diretórios
Um diretório é um tipo de arquivo especial, pois pode armazenar outros arquivos dentro dele. Existe um
conjunto específico de operações para a manipulação de diretórios, são elas:
30
Gerenciamento de Dispositivos
A gerência de dispositivos é o meio através do qual todos os dispositivos de E/S são controlados a fim de
se obter o maior compartilhamento possível entre os diversos usuários de forma estável e segura. Alguns
dispositivos, tal como os discos, podem ser compartilhados simultaneamente por diversos usuários, sendo
o Sistema Operacional responsável pela integridade dos dados. Já dispositivos como impressoras, por
exemplo, devem ter acesso exclusivo, sendo dever do sistema controlar seu compartilhamento de forma
organizada.
A fim de facilitar a gerência de dispositivos, o Sistema Operacional implementa diversas camadas de
software sendo que as de mais baixo nível tentam tornar transparentes as caracterísitcas do hardware dos
dispositivos das camadas superiores até chegar a uma interface simples ao usuário. Nesta estrutura,
existem rotinas que se comunicam diretamente com o controlador enquanto outras apresentam interfaces
ao usuário.
As camadas de software são divididas em dois grupos, um que visualiza os diversos tipos de dispositivos
de maneira única e outro que é específico para cada dispositivo.
ROTINAS DE ENTRADA E SAÍDA
O sistema operacional deve tornar as operações de entrada e saída o mais simples possível aos usuários.
Desta maneira ele deve ser projetado de forma a poder se comunicar com qualquer dispositivo que possa
ser conectado ao hardware do computador. Para que haja independência de dispositivos, todas as
operações realizadas com diferentes dispositivos de E/S devem ser realizadas de uma mesma forma
através de rotinas do sistema. Isto possibilita escrever um programa que manipule arquivos em disquetes,
discos rígidos ou fitas magnéticas de uma mesma maneira sem que haja necessidade de rotinas especiais
no programa para cada tipo de periférico.
As rotinas do sistema responsáveis por esta comunicação são denominadas rotinas de E/S e estão
presentes nas camadas implementadas pelo SO de mais alto nível, permitindo ao usuário realizar
operações de E/S sem se preocupar com detalhes de operação do dispositivo que está sendo acessado.
Assim, ao gravar um arquivo em disco, não interessa ao usuário como é a formatação do disco ou as
trilhas e setores em que o arquivo será gravado.
Estas rotinas também são responsáveis por implementar mecanismos de proteção de acesso a dispositivos
e arquivos e possuem a função principal de criar uma interface simples entre as aplicações e os
dispositivos e entre estes dispositivos e o restante do sistema operacional. Com isto, elimina-se a
necessidade de duplicação de rotinas idênticas nos diversos programas aplicativos, escondendo do
programador características específicas associadas à programação dos diversos dispositivos.
DEVICE DRIVERS
Os devices drivers, ou simplesmente drivers, são todas as rotinas do sistema operacional que têm como
função se comunicar com os dispositivos de E/S em nível de hardware. Eles são softwares tradutores que
recebem comandos do Sistema Operacional para um hardware específico. Eles permitem aos
desenvolvedores de softwares desenvolverem programas sem saber qual hardware os usuários possuem.
Os usuários, por sua vez, podem trocar de hw sem necessitar trocar os programas. Cada device driver
manipula somente um tipo de dispositivo ou grupo de dispositivos semelhantes, tendo como função
receber comandos gerais de acesso aos dispositivos e traduzi-los para comandos específicos que poderão
ser executados pelos controladores. Normalmente, um sistema possui diversos drivers, comos os para
disco, fitas magnéticas e terminais.
31
O driver está integrado diretamente nas funções do controlador. Ele é o componente do sistema que
reconhece o hardware do sistema. Sua função principal é receber comandos abstratos, geralmente de
rotinas de E/S, e traduzi-los para comandos que o controlador do dispositivo possa entender e executar.
Um exemplo é na leitura de um arquivo em disco. O disk driver recebe o comando de leitura de um
determinado bloco e passa para o controlador em qual disco, cilindro, trilha, setor o bloco se localiza.
Dessa forma, a leitura é realizada.
CONTROLADORES
São componentes eletrônicos responsáveis por manipular diretamente os dispositivos de E/S.
Normalmente o SO se comunica com os controladores e não com os dispositivos.
O controlador geralmente possui memória e registradores próprios para poder executar instruções de
baixo nível enviadas pelo driver que são responsáveis pela interface entre o controlador e o dispositivo. O
SO, através do driver, armazena comandos de E/S nos registradores e/ou memória do controlador,
possibilitando a UCP permanecer livre para executar outras tarefas.
DISPOSITIVOS DE ENTRADA E SAÍDA
São responsáveis pela comunicação entre o computador e o mundo externo. A transferência de dados,
realizada nesta comunicação, pode ser efetuada através de blocos de informações (discos magnéticos, por
exemplo) ou palavra a palavra (imporessora, termninais, ...). A transferência é realizada através de
controladores de dispositivos supervisionada pelo SO.
Biliografia
ALECRIM, Emerson. Sistema de arquivos NTFS. Disponível em:
<http://www.infowester.com/ntfs.php>.
SILVA, Roberto Rodrigues da. Sistemas de arquivos suportado pelo Linux. Disponível em:
<http://www.vivaolinux.com.br/artigo/Linux-Sistema-de-arquivos/>.
TANEMBAUM, Andrew S.; WOODHULL, Albert S. Sistemas operacionais: projeto e implementação.
Trad. Edson Furmankiewicz. 2. ed. Porto Alegre: Bookman, 2000.
TERMOS técnicos sobre sistema de arquivos. Disponível em:
<http://www.guiadohardware.net/termos/sistema-de-arquivos>.
SILVA, Luiz. Evolução da Memória RAM. Disponível em:
<http://igri01.blogspot.com/2009/02/evolucao-da-memoria-ram.html>
TYSON, Jeff. Como funciona a memória do computador. Disponível em:
<http://informatica.hsw.uol.com.br/memoria-do-computador1.htm>
<http://www.metropoledigital.ufrn.br/aulas/disciplinas/sist_operacional>
<http://www.cybertechcse.com.br/sistOperacionais/Frame.htm>

Contenu connexe

Tendances

2009 1 - sistemas operacionais - aula 3 - processos
2009 1 - sistemas operacionais - aula 3 - processos2009 1 - sistemas operacionais - aula 3 - processos
2009 1 - sistemas operacionais - aula 3 - processosComputação Depressão
 
Arquitectura Interna Do Computador
Arquitectura Interna Do ComputadorArquitectura Interna Do Computador
Arquitectura Interna Do Computadoraerc
 
Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)Leinylson Fontinele
 
Informática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsInformática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsJoeldson Costa Damasceno
 
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplinaFundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplinaHelder Lopes
 
Aula07 - Arquitetura e Manutenção de Computadores
Aula07 - Arquitetura e Manutenção de ComputadoresAula07 - Arquitetura e Manutenção de Computadores
Aula07 - Arquitetura e Manutenção de ComputadoresJorge Ávila Miranda
 
Sistema operacional introdução
Sistema operacional introduçãoSistema operacional introdução
Sistema operacional introduçãoCleber Ramos
 
Arquitetura Interna do Computador
Arquitetura Interna do ComputadorArquitetura Interna do Computador
Arquitetura Interna do ComputadorSara Gonçalves
 
Curso de Informatica Básica - Noções básicas de um computador
Curso de Informatica Básica - Noções básicas de um computadorCurso de Informatica Básica - Noções básicas de um computador
Curso de Informatica Básica - Noções básicas de um computadorPerondi15
 
Apostila 6 gerência de memória
Apostila 6   gerência de memóriaApostila 6   gerência de memória
Apostila 6 gerência de memóriaPaulo Fonseca
 

Tendances (20)

2009 1 - sistemas operacionais - aula 3 - processos
2009 1 - sistemas operacionais - aula 3 - processos2009 1 - sistemas operacionais - aula 3 - processos
2009 1 - sistemas operacionais - aula 3 - processos
 
Arquitectura Interna Do Computador
Arquitectura Interna Do ComputadorArquitectura Interna Do Computador
Arquitectura Interna Do Computador
 
Sistemas Operacionais e Mercado de Trabalho
Sistemas Operacionais e Mercado de TrabalhoSistemas Operacionais e Mercado de Trabalho
Sistemas Operacionais e Mercado de Trabalho
 
Escalonamento de processos
Escalonamento de processosEscalonamento de processos
Escalonamento de processos
 
Pseudoparalelismo
PseudoparalelismoPseudoparalelismo
Pseudoparalelismo
 
SO-04 Escalonamento de Processos
SO-04 Escalonamento de ProcessosSO-04 Escalonamento de Processos
SO-04 Escalonamento de Processos
 
Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Informática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional WindowsInformática Básica - Aula 05 - Sistema Operacional Windows
Informática Básica - Aula 05 - Sistema Operacional Windows
 
Sistema Operacional Android
Sistema Operacional AndroidSistema Operacional Android
Sistema Operacional Android
 
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplinaFundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
 
Aula07 - Arquitetura e Manutenção de Computadores
Aula07 - Arquitetura e Manutenção de ComputadoresAula07 - Arquitetura e Manutenção de Computadores
Aula07 - Arquitetura e Manutenção de Computadores
 
Sistema operacional introdução
Sistema operacional introduçãoSistema operacional introdução
Sistema operacional introdução
 
Arquitetura Interna do Computador
Arquitetura Interna do ComputadorArquitetura Interna do Computador
Arquitetura Interna do Computador
 
Processos e threads cap 02 (i unidade)
Processos e threads   cap 02 (i unidade)Processos e threads   cap 02 (i unidade)
Processos e threads cap 02 (i unidade)
 
Curso de Informatica Básica - Noções básicas de um computador
Curso de Informatica Básica - Noções básicas de um computadorCurso de Informatica Básica - Noções básicas de um computador
Curso de Informatica Básica - Noções básicas de um computador
 
Apostila 6 gerência de memória
Apostila 6   gerência de memóriaApostila 6   gerência de memória
Apostila 6 gerência de memória
 
Aula de Informática Básica
Aula de Informática BásicaAula de Informática Básica
Aula de Informática Básica
 
Manutenção de computadores
Manutenção de computadoresManutenção de computadores
Manutenção de computadores
 
Hardware e software
Hardware e softwareHardware e software
Hardware e software
 

Similaire à Sistema operacional

sistema operativo
sistema operativosistema operativo
sistema operativothelonius
 
03 - Ferramentas administrativas - v1.0
03 - Ferramentas administrativas - v1.003 - Ferramentas administrativas - v1.0
03 - Ferramentas administrativas - v1.0César Augusto Pessôa
 
M1_Sistemas Operativos.pptx
M1_Sistemas Operativos.pptxM1_Sistemas Operativos.pptx
M1_Sistemas Operativos.pptxDoraestevao
 
Visão Geral: Introdução
Visão Geral: IntroduçãoVisão Geral: Introdução
Visão Geral: IntroduçãoAlexandre Duarte
 
Sistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoSistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoLuiz Arthur
 
Sistemas Operacionais parte 2
Sistemas Operacionais  parte 2Sistemas Operacionais  parte 2
Sistemas Operacionais parte 2Matheus Brito
 
Aula 3 sistema computacional (hardware e software)
Aula 3   sistema computacional (hardware e software)Aula 3   sistema computacional (hardware e software)
Aula 3 sistema computacional (hardware e software)Vitor Hugo Melo Araújo
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionaisAbnel Junior
 
Componentes do Sistema operacional
Componentes do Sistema operacional Componentes do Sistema operacional
Componentes do Sistema operacional Rodrigo Rodrigues
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelPablo Mariano
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelPablo Mariano
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelPablo Mariano
 
Conceitos básicos de sistemas operacionais
Conceitos básicos de sistemas operacionaisConceitos básicos de sistemas operacionais
Conceitos básicos de sistemas operacionaisRonildo Oliveira
 
Questões de Sistemas Operacionais
Questões de Sistemas Operacionais Questões de Sistemas Operacionais
Questões de Sistemas Operacionais Joicy Souza
 

Similaire à Sistema operacional (20)

sistema operativo
sistema operativosistema operativo
sistema operativo
 
Sistema operacional
Sistema operacionalSistema operacional
Sistema operacional
 
03 - Ferramentas administrativas - v1.0
03 - Ferramentas administrativas - v1.003 - Ferramentas administrativas - v1.0
03 - Ferramentas administrativas - v1.0
 
M1_Sistemas Operativos.pptx
M1_Sistemas Operativos.pptxM1_Sistemas Operativos.pptx
M1_Sistemas Operativos.pptx
 
Visão Geral: Introdução
Visão Geral: IntroduçãoVisão Geral: Introdução
Visão Geral: Introdução
 
Sistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoSistemas Operacionais - Introducao
Sistemas Operacionais - Introducao
 
Sistemas Operacionais parte 2
Sistemas Operacionais  parte 2Sistemas Operacionais  parte 2
Sistemas Operacionais parte 2
 
Aula 3 sistema computacional (hardware e software)
Aula 3   sistema computacional (hardware e software)Aula 3   sistema computacional (hardware e software)
Aula 3 sistema computacional (hardware e software)
 
S.o aula 5678
S.o aula 5678S.o aula 5678
S.o aula 5678
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
 
Componentes do Sistema operacional
Componentes do Sistema operacional Componentes do Sistema operacional
Componentes do Sistema operacional
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgel
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgel
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgel
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
 
Conceitos básicos de sistemas operacionais
Conceitos básicos de sistemas operacionaisConceitos básicos de sistemas operacionais
Conceitos básicos de sistemas operacionais
 
Hardware e sistemas operacionais
Hardware e sistemas operacionaisHardware e sistemas operacionais
Hardware e sistemas operacionais
 
Aula 03
Aula 03Aula 03
Aula 03
 
Aula 6 semana
Aula 6 semanaAula 6 semana
Aula 6 semana
 
Questões de Sistemas Operacionais
Questões de Sistemas Operacionais Questões de Sistemas Operacionais
Questões de Sistemas Operacionais
 

Sistema operacional

  • 1. 1 DISCIPLINA: SISTEMA OPERACIONAL Muitos conceitos são encontrados em livros, artigos e trabalhos científicos para Sistemas Operacionais de Computadores, mas entendemos que Sistema é um conjunto de partes e Operacional aquilo que se realiza. Sistema Operacional: Camada de Software que opera entre hardware e os programas aplicativos voltados aos usuários do Sistema. Estrutura de software ampla e complexa que incorpora aspectos de baixo nível com o propósito de transformar o sistema computacional acessível e gerindo os recursos computacionais de maneira eficiente. Mais para entendermos o que o Sistema Operacional gerencia analise a arquitetura abaixo. ARQUITETURA CONCEITUAL DE UM COMPUTADOR
  • 2. 2 a unidade lógica e aritmética, onde são executados todos os cálculos aritméticos e qualquer manipulação de dados; a unidade de controle, onde ocorre o “transporte” dos dados, é responsável pelo controle da transferência de informações pelas outras unidades; a memória, onde são armazenadas as informações, que pode ser tanto os dados que serão manipulados, como também as instruções (programas) que serão executadas; os unidades de entrada e saída, periféricos que conectados às demais unidades servirão de elo de comunicação entre o usuário e o computador, traduzindo qualquer tipo de informação (textos, imagens, áudio) em um código capaz de ser entendido pelo computador ou convertendo dados processados pelo computador em saídas que podem ser interpretadas por um ser humano ou outro computador. Lembrando que um mesmo dispositivo pode assumir a função de unidade entrada e saída (por exemplo: um monitor sensível ao toque). ARQUITETURA DE UM SISTEMA OPERACIONAL
  • 3. 3 Um sistema operacional não é um bloco único e fechado de software executando sobre o hardware. Na verdade, ele é composto de diversos componentes com objetivos e funcionalidades complementares. Alguns dos componentes mais relevantes de um sistema operacional típico são: Núcleo : é o coração do sistema operacional, responsável pela gerência dos recursos do hardware usados pelas aplicações. Ele também implementa as principais abstrações utilizadas pelos programas aplicativos. Drivers : módulos de código específicos para acessar os dispositivos físicos. Existe um driver para cada tipo de dispositivo, como discos rígidos IDE, SCSI, portas USB, placas de vídeo, etc. Muitas vezes o driver é construído pelo próprio fabricante do hardware e fornecido em forma compilada (em linguagem de máquina) para ser acoplado ao restante do sistema operacional. Código de inicialização : a inicialização do hardware requer uma série de tarefas complexas, como reconhecer os dispositivos instalados, testá-los e configurá-los adequadamente para seu uso posterior. Outra tarefa importante é carregar o núcleo do sistema operacional em memória e iniciar sua execução. Programas utilitários : são programas que facilitam o uso do sistema computacional, fornecendo funcionalidades complementares ao núcleo, como formatação de discos e mídias, configuração de dispositivos, manipulação de arquivos (mover, copiar, apagar), interpretador de comandos, terminal, interface gráfica, gerência de janelas, etc. As diversas partes do sistema operacional estão relacionadas entre si conforme apresentado, a forma como esses diversos componentes são interligados e se relacionam varia de sistema para sistema. Sistema Operacional: o gerente Quando instalamos um Sistema Operacional, estamos de certa forma definindo um gerente para os recursos do nosso computador. E o que é preciso gerenciar em um computador? Um dos itens que precisam ser gerenciados são os programas (softwares) que você costuma utilizar quase ao mesmo tempo. Programa é basicamente um conjunto de instruções que, ao serem executadas pelo computador, com a supervisão de um Sistema Operacional, realizam determinadas tarefas. Para que um programa qualquer possa ser executado no seu computador, nos bastidores o Sistema Operacional realizará um conjunto de funções básicas e fundamentais como:
  • 4. 4 Gerenciamento dos processos; Gerenciamento da memória; Gerenciamento dos arquivos; Gerenciamento dos dispositivos. Cabe ao Sistema Operacional definir políticas para gerenciar os recursos computacionais e resolver possíveis disputas e conflitos como uso de processador, memórias e acesso a dispositivos de armazenamento, entrada e saída. Gerenciador de Processos O conceito mais importante em sistemas operacionais é o de processos, e entendê-los é fundamental para todo estudante interessado em conhecer como os sistemas operacionais funcionam realmente. Todas as ações que ocorrem no seu computador giram em torno de processos, pois, como dissemos antes: processos são programas em execução e, sendo assim, todos os aplicativos que usamos são na verdade processos. Para entender melhor estes conceitos, vamos fazer a seguinte comparação do que ocorre no computador com um exemplo bem simples: uma mesa de estudos. Você deve ter muitas atividades escolares que precisam de sua dedicação e esforço para serem realizadas. Vamos considerar que você tenha uma mesa de estudos própria com gavetas onde é guardado todo seu material escolar e nela são feitos todos os seus trabalhos das mais diversas disciplinas (matemática, português, física, química etc.). Vamos dizer que exista para cada disciplina uma lista de exercícios a ser resolvida. Então para estarmos prontos, qual o primeiro passo a ser realizado? Poderíamos considerar a ação de pegar das gavetas e colocar sobre a mesa as listas de exercícios que serão resolvidas, assim você terá acesso direto às questões para resolvê-los um de cada vez. Se considerarmos que nossa mesa de estudos é a memória do computador, e que nós somos o processador, então, os programas são as listas de exercícios e quando a colocamos sobre a mesa, estamos deixando elas prontas para serem resolvidas, ou seja, neste momento, cada lista deixa de ser apenas uma folha guardada na gaveta (ou HD, se considerarmos os programas) para se tornar parte de uma atividade, ou seja, de um processo.
  • 5. 5 Process Control Block – PCB Bloco de controle do processo (Process Control Block – PCB) – Estrutura onde o SO guarda todas as informações do processo, contendo sua identificação, prioridade, estado corrente, recursos alocados por ele e informações sobre o programa em execução O Sistema Operacional gerencia os processos através de System Calls. Contexto de Hardware Constitui-se do conteúdo de registradores A troca de um processo por outro na CPU, pelo sistema operacional, é denominada mudança de contexto. Mudança de Contexto - salva o conteúdo dos registradores da CPU e carregá-los com os valores referente ao do processo que está ganhando a utilização do processador. Contexto de Software Características do processo incluídas na execução de um programa, divididas em: Identificação – Principalmente número (PID) de identificação e identificação do processo ou usuário (UID) que o criou. Quotas – Limites de cada recurso do sistema que um processo pode alocar Privilégios – o que o processo pode ou não fazer em relação ao sistema e aos outros processos. Estados do processo Embora cada processo seja uma entidade independente, muitas vezes os processos precisam interagir com os outros. Para gerenciar esta interação e o escalonamento dos processos é necessário definir os possíveis estados que um processo pode ficar: 1. Em execução, realmente utilizando a CPU 2. Pronto, capaz de executar a qualquer instante, mas não tem CPU 3. Bloqueado, incapaz de executar Mudança de Estado do Processo Mudança de estado por eventos do próprio processo (eventos voluntários) ou causados pelo sistema operacional (eventos involuntários). Dividido em 4 mudanças:
  • 6. 6 Pronto -> Execução = Quando um processo é criado, é colocado em uma lista de processos no estado pronto. Então é escolhido pelo sistema para ser executado. Execução -> Espera = O processo passa para espera quando aguarda a conclusão de um evento solicitado. Espera -> Pronto = O processo passa para pronto quando a operação solicitada é atendida ou o recurso esperado é concedido. Execução -> Pronto = O processo passa de execução para pronto por eventos gerados pelo sistema. Ciclo de vida de um processo Assim como o ser humano tem um ciclo de vida – o homem nasce, cresce, reproduz e morre – os processos também têm seu ciclo de vida. Para gerenciar os processos e seus estados, o Sistema Operacional mantém guardado dados sobre todos os processos presentes na memória. Dessa forma, o agendador de processos pode saber informações úteis na hora de decidir qual processo terá acesso ao processador. Lembre-se do exemplo dos amigos que estão jogando vídeo-game, é necessário guardar os nomes e horários de cada jogador em uma tabela. De forma parecida, o Sistema Operacional gerencia uma tabela de processos, na qual mantém dados como o estado atual do processo, um apontador que indica qual próxima instrução deve ser executada e tudo mais sobre o processo. Comunicação interprocessos Como visto acima, freqüentemente os processos precisam se comunicar com outros processos, preferencialmente sem interrupções (nem sempre é possível). Neste tópico devemos nos preocupar com 3 pontos: a troca de informações entre processos; a garantia de que um processo não invada o espaço físico do outro; e a garantia de que um processo não altere os dados que estão sendo trabalhados por outro (que deve estar no estado pronto neste momento). O Sistema Operacional deve então evitar que quando dois ou mais processos que acessam dados compartilhados o resultado destes processos não dependa do escalonamento, ou seja, um processo não interferiu no outro. Isto é chamado de condição de corrida. Uma forma de se isolar este problema é a definição e tratamento das regiões que possam levar à condições de corrida, tais regiões são chamadas de regiões críticas. Para tal 4 regras foram definidas: 1. Nunca 2 processos podem entrar ao mesmo tempo 2. A velocidade ou quantidade de CPUs não interfere 3. Nenhum processo executando fora da região crítica pode bloquear outros processos 4. Nenhum processo deve esperar eternamente para entrar numa região crítica Alternativas para a exclusão mútua Exclusão mútua (também conhecida pelo acrônimo mutex para mutual exclusion, o termo em inglês) é uma técnica usada em programação concorrente para evitar que dois processos ou threads tenham acesso simultaneamente a um recurso compartilhado, acesso esse denominado por seção crítica. Existem várias alternativas para tratar este problema como: inibição das interrupções, utilização de variáveis de travamento e alternância obrigatória. Porém a solução em software de maior sucesso é o
  • 7. 7 algoritmo de Peterson que combina a utilização de variáveis de travamento com a alternância obrigatória. Existe também a solução em hardware chamada de instrução TSL. Porém ambas as soluções apresentam o problema de prioridade invertida, ou seja, um processo de menor prioridade nunca terá acesso a CPU, logo sua prioridade deveria ser maior. Estas soluções também não tratam o problema do Produtor- consumidor (buffer compartilhado) O problema do produtor e consumidor é resolvido através de semáforos (contadores de eventos) e mutex (variável de dois estados). A utilização de monitores (unidade de sincronização de alto nível) para estas soluções facilita a comunicação interprocessos. Escalonamento Quando um computador é multiprogramado, ele muitas vezes possui diversos processos que competem pela CPU, surgindo assim a necessidade de alguma entidade para escalonar a CPU entre os processos, que é chamada de escalonador. Um escalonador deve possuir um algoritmo de escalonamento que se preocupe com 5 regras: 1. Justiça – Todos processos devem ter acesso a CPU 2. Eficiência – A meta do escalonador é chegar mais perto dos 100% de utilização da CPU 3. Minimizar o Tempo de Resposta 4. Turnaround – Minimiza os usuários batch 5. Throughput – Maximizar o número de jobs processados Escalonamento Quando um computador é multiprogramado, ele muitas vezes possui diversos processos que competem pela CPU, surgindo assim a necessidade de alguma entidade para escalonar a CPU entre os processos, que é chamada de escalonador. Um escalonador deve possuir um algoritmo de escalonamento que se preocupe com 5 regras: 1. Justiça – Todos processos devem ter acesso a CPU 2. Eficiência – A meta do escalonador é chegar mais perto dos 100% de utilização da CPU 3. Minimizar o Tempo de Resposta 4. Turnaround – Minimiza os usuários batch 5. Throughput – Maximizar o número de jobs processados O conceito básico que gerou a implementação de sistemas multiprogramáveis foi a possibilidade da UCP ser compartilhada por vários processos. A fim de possibilitar isto, os sistemas multiprogramáveis devem possuir critérios determinados pelo Sistema Operacional para determinar a ordem de execução dos vários processos que concorrem pela utilização do processador. O procedimento de seleção da ordem em que os processos serão atendidos pelo sistema é conhecido como Escalonamento. Como principais objetivos do Escalonamento podemos citar, entre outros, os seguintes: · manter a UCP ocupada o maior intervalo de tempo possível, otimizando sua utilização · manter a utilização do processador balanceada entre os vários processos · oferecer tempos de resposta razoáveis aos usuários A fim de atender alguns destes objetivos, muitas vezes conflitantes os Sistemas Operacionais devem levar em cosideração características dos processos (tipo batch, interativo, tempo real, tempo compartilhado, ...). São estas caracterísitcas que vão possibilitar uma política adequada de escalonamento.
  • 8. 8 A partir de agora vamos ver algumas das diversas políticas de escalonamento utilizadas, em uma ordem praticamente histórica, descrevendo o uso do principal recursode um sistema, o Processador. ESCALONAMENTOS NÃO-PREEMPTIVOS São aqueles em que quando um processo recebe a atenção do processador nenhum outro processo pode lhe tirar este recurso e eram utilizados nos primeiros sistemas multiprogramáveis, onde predominava tipicamente o processamento do tipo batch. ESCALONAMENTO First-In-First-Out (FIFO) Nesse escalonamento, o primeiro processo a chegar é o primeiro a ser executado. Seu algoritmo de implementação é bastante simples já que com uma fila pode-se controlar facilmente a ordem de chegada dos processos, colocando-se sempre os que entram no estado de pronto no final da fila. Por se tratar de um método não preemptivo, os processos, ao receberem a atenção do processador, utilizarão a UCP sem interrupções. Como inconvenientes deste tipo de escalonamento podemos citar: · impossibilidade de se prever quando um processo terá sua execução iniciada, já que isto é função dos processos que estão a sua frente. · possibilidade de processos CPU-bound (aqueles que consomem a maior parte do tempo em estado de execução, realizando poucas operações de E/S) de menor importância prejudicarem processos I/O-bound (aqueles que passam a maior parte do tempo em estado de espera, pois realizam um grande número de operações de E/S) mais prioritários. Esta política foi inicialmente implementada em sistemas do tipo batch e se mostrou ineficiente em sistemas de tempo compartilhado quando implementada na forma original. ESCALONAMENTO Shortest-Job-First (SJF) Neste algoritmo de escalonamento, o processo em estado de pronto que necessitar do menos tempo de processador para finalizar será escolhido para ser executado. Este escalonamento favorece os processos que executam programas menores e reduz o tempo de espera médio em relação ao FIFO. Apesar disto tem o inconveniente da dificuldade de se determinar com exatidão quanto tempo de processador cada processo necessita para ser finalizado. Em sistemas que temos os mesmos processos sendo executados constantemente, é possível estimar este tempo. Já em ambientes de desenvolvimento isto é uma tarefa difícil. Em sistemas onde um tempo de resposta razoável deve ser garantido, não são aplicáveis nem o SJF nem o FIFO. ESCALONAMENTO PREEMPTIVOS Os sistemas em que processos em execução podem ser interrompidos para que outros possam ser executados denominam-se Sistemas Preemptivos, e necessitam, portanto, de um algoritmo de escalonamento preemptivo.
  • 9. 9 Este tipo de escalonamento permite que o sistema dê atenção imediata a processos prioritários como no caso de processos de tempo real, proporcionando melhores tempos de resposta a sistemas de tempo compartilhado. Esta técnica permite também um compartilhamento maior e mais uniforme do processador. ESCALONAMENTO Circular (Round Robin) É implementado através de um algoritmo projetado especialmente para sistemas de tempo compartilhado. Bastante similar Sistema ao FIFO, utiliza a técnica do time-slicing a fim de melhor distribuir o tempo de processador entre os diversos processos. Desta maneira, ao passar ao estado de execução um processo terá um tempo limite de alguns milisegundos (100 a 500) para utilizar de forma contínua a UCP. Quando este intervalo de tempo se esgota, o processo em execução passa para o final da fila onde espera sua vez de ser executado novamente. Esta fila, então, pode ser considerada como circular. Daí o nome de escalonamento circular. Através deste escalonamento circular, nenhum processo poderá monopolizar o uso do processador, aumentando o tempo de resposta de outros processos. Desta maneira podemos concluir que este tipo de escalonamento é bastante adequado a sistemas de tempo compartilhado. Mesmo assim os processos I/O- bound continuam em desvantagem neste tipo de escalonamento. ESCALONAMENTO por Prioridades Devido ao fato do escalonamento circular tratar todos os processos de forma igual, ele não consegue implementar um compartilhamento igual entre diferentes tipos de processos. Novamente processos do tipo CPU-bound levam vantagem sobre os I/O-bound, já que este passa a maior parte do tempo em estado de espera e aquele tem, então, maiores chances de ser executado. A fim de amenizar este tipo de inconveniente, pode-se trabalhar com prioridades de processos, onde determinados processos podem ter prioridades de execução sobre outros, aumentando suas chances de serem executados, processos de maior prioridade são escalonados preferencialmente. Toda a vez que um processo prioritário for colocado em estado de pronto, o Sistema Operacional deverá interromper o processo em execução, caso ele seja de prioridade menor que será colocado em estado de pronto, e selecionar o processo prioritário para execução. Este tipo de preempção é implementado através de um clock que interrompe o procesador em intervalos de tempo regulares, permitindo que a rotina de escalonamento reavalie as prioridades. Voltando a nossa discussão anterior, podemos dar a um processo I/O-bound prioridade maior que a um processo CPU-bound. Desta maneira, toda vez que o I/O-bound entrar em estado de pronto ele será executado, aumentando o compartilhamento da UCP. Observe que isto não significa que o CPU-bound será prejudicado, já que ele estará sendo executado nos intervalos de tempo em que o I/O-bound estiver esperando uma operação de I/O (E/S). · O Windows especifica prioridades para as thread que as permite utilizar recursos do sistema e utiliza o time slice. As prioridades variam de 0 a 31(maior prioridade). As threads do próprio Sistema Operacional tem as maiores prioridades (16-31) enquanto as threads tem as menores (0-15). Na hora de escrever os programas pode-se multithreading pode-se especificar a prioridade das threads.
  • 10. 10 ESCALONAMENTO por Múltiplas Filas Devido ao fato de que os vários processos de um sistema possuem características de processamento diferentes torna-se interessante classificar os processos em função do tipo de processamento realizado dividindo-os em grupos e aplicando a cada um deles mecanismos de escalonamento diferentes. Partindo deste princípio o escalonamento por filas múltiplas implementa diversas filas de processos em estado de pronto cada uma adotando um mecanismo próprio de escalonamento e uma prioridade associada que estabelece quais filas são prioritárias em relação às outras. Aqui, cada processo é associado a apenas uma das filas. Como exemplo, poderíamos citar um sistema onde temos os processos divididos em 3 filas, sendo elas: 1. fila de processos do sistema 2. fila de processos interativos 3. fila de processos do tipo batch sendo a ordem de prioridades 1, 2, 3. Aqui, o sistema só poderá escalonar processos de uma fila quando todas as outras de maior prioridade estiverem vazias. OBS: Temos também o escalonamento por filas múltiplas com realimentação, onde os processos não necessariamente permanecem em uma mesma fila todo o tempo. Desta maneira, o Sistema Operacional tem um mecanismo de ajuste dinâmico a fim de ajustar os processos de acordo com o desempenho do sistema. Deadlock: impasse entre processos Quando dois ou mais processos ficam impedidos de continuar suas execuções, ou seja, estão bloqueados por estarem aguardando a liberação de recursos que estão alocados entre eles, essa situação é conhecida como Deadlock. É difícil de identificar a ocorrência de deadlocks, basicamente essa situação de impasse pode ser representada pelo seguinte grafo(3): (3) Diagrama composto de pontos, alguns dos quais são ligados entre si por linhas, e que é geralmente usado para representar graficamente conjuntos de elementos inter-relacionados. Processos A e B em deadlock devido os recursos R1 e R2
  • 11. 11 Fonte: autoria própria. Observe que quanto mais recursos compartilhados são necessários para execução de um processo, há mais riscos desse processo passar por uma situação de impasse com outros processos. Um exemplo simples é processos de manipulação de banco de dados, onde as diferentes tabelas podem ser consideradas como recursos compartilhados, veja um exemplo no qual pode ocorre um deadlock: Para efetuar uma venda, um processo é criado no computador do banco de dados que precisa alocar as tabelas de estoque dos produtos e de clientes. Como vários vendedores podem registrar vendas ao mesmo tempo, dois processos podem receber o acesso de uma das tabelas em questão e ficarem aguardando a liberação da outra, assim, tanto os processos ficam bloqueados como os recursos ficam indisponíveis até que essa situação de impasse seja resolvida, mais quais as estratégias de tratamento de deadlocks? Deadlocks: métodos de tratamento Existem três estratégias básicas para o tratamento de deadlocks, veja-as a seguir. 1 – Definir métodos de comunicação interprocessos que evitem o surgimento de deadlocks. 2 – Detectar situações de deadlock e definir uma forma de restaurar o sistema, resolvendo o impasse. 3 – Ignorar o problema e torcer que ele não ocorra. Conhecido como algoritmo do avestruz. Por incrível que pareça, a estratégia mais usada nos sistemas operacionais é a de ignorar os problemas de deadlock, pois os possíveis tratamentos desse tipo de situação podem acarretar em perdas de desempenho do sistema, comprometendo a execução dos processos. Assim, é mais comum que os próprios softwares procurem evitar situações de deadlock na lógica em seus códigos e, no caso de ocorrer alguma situação de impasse, é preferível encerrar a execução de um processo ou até reiniciar o computador em casos mais extremos. Tipos de processos CPU-bound (Ligado à CPU) O processo passa a maior parte do tempo no estado de execução.Realiza poucas operações de I/O Encontrado em aplicações que efetuam muitos cálculos. I/O-bound (Ligado à E/S) O processo passa a maior parte do tempo no estado de espera. Encontrado em aplicações comerciais com bastante leitura, processamento e gravação. Encontrado também em aplicações interativas. Gerenciamento de Memória Mesmo com a evolução da tecnologia, que faz com que hoje tenhamos memórias muito superiores às de alguns anos atrás - as memórias utilizadas no início da década de 80 eram as memórias SIMM de 30 pinos de 256KB, hoje existem os novos modelos de memória como a DDR3 com capacidade de 16GB – o
  • 12. 12 Sistema Operacional precisa gerenciar a memória disponível, pois com a evolução da tecnologia os processos tendem a evoluir também e utilizar toda a memória disponível. Na verdade, os sistemas operacionais possuem estratégias de gerenciamento não só para utilizar a memória, mas também procuram utilizar de outras fontes de armazenamento, como o HD. Memória RAM e a hierarquia da memória O gerenciamento de memória realizado pelo Sistema Operacional está diretamente voltado para o controle do hardware, conhecido como memória RAM. A sigla RAM deriva da expressão Random Access Memory, que significa memória de acesso aleatório. Os dados armazenados nessa memória podem ser lidos, escritos e apagados pelo processador. Como vimos nas primeiras aulas, existem diversos dispositivos de armazenamento de dados e as características que os diferencia são as seguintes: a velocidade de acesso, a capacidade de armazenamento, e o fato de conseguir ou não manter os dados gravados mesmo quando o computador é desligado. Para relacionar essas características com os diversos dispositivos de armazenamento de dados, foi criada uma hierarquia para facilitar a nossa compreensão. A Figura mostra essa classificação para os diferentes recursos de memória disponíveis no computador. De acordo com a hierarquia, vemos que só os registradores e memória cache dos processadores são mais rápidos que a memória RAM. Eles são de uso exclusivo da CPU para execução das instruções de baixo nível (linguagem de máquina). Dessa forma, o Sistema Operacional e os programas utilizam-se da memória RAM, que também é rápida, para poderem executar. Já imaginou se a CPU de seu computador precisasse acessar constantemente o HD para manipulação dos dados de um processo, certamente a execução dos programas seria bastante lenta!! Quando a informação é mantida na memória, a CPU pode acessar os dados com mais rapidez. Mas, como a memória RAM é bem mais cara que o HD e é uma memória do tipo volátil, ou seja, que os dados não permanecem gravados quando o computador é desligado, ainda precisaremos dos outros tipos de dispositivos para armazenamento. Mesmo com a contínua evolução do computador, que faz com que esse tenha uma sua capacidade de armazenamento cada vez maior, existirá sempre uma demanda crescente por mais memória,
  • 13. 13 principalmente da memória RAM, dado que é nela que os processos são executados. Navegando pela memória Sabemos que todos os componentes de hardware do computador e o Sistema Operacional trabalham juntos para que programas possam ser executados. Dentre todos os componentes, a memória desempenha uma das funções essenciais à execução de um programa. Desde o momento em que o computador é ligado até a hora em que é desligado, a CPU está constantemente usando a memória. Vamos ver os passos que são seguidos quando ligamos um computador. Primeiramente, no momento que ligamos o computador, a CPU tenta executar a primeira instrução. Como o Sistema Operacional ainda não está carregado na memória, ele não pode fornecer as instruções a serem executadas. Neste momento, um programa especial chamado de BIOS (do inglês: Basic Input/Output System - Sistema Básico de Entrada/Saída) presente na memória ROM (do inglês: Read Only Memory) - tipo de memória especial existente na placa mãe que permite apenas a leitura - fornece a sequência de instruções de inicialização do computador. Essas primeiras instruções verificam se os principais componentes do computador, inclusive da memória, estão funcionando corretamente. Esses testes são chamados POST (do inglês: Power-On Self Test – Auto-Teste Após Ligação). Dessa forma, essas instruções garantem que tudo está funcionando corretamente logo após o computador ser ligado. Após essa análise, o Sistema Operacional (SO) é copiado do disco rígido para a memória. Uma vez que o Sistema Operacional foi “carregado”(1) na memória, outros programas poderão também ser carregados na memória e executados. Além de armazenar os programas em execução na memória, também conterá os dados (ou arquivos) acessados por esses programas. Quando você abre um arquivo no editor de texto como o Microsoft Word, edita e salva o arquivo e depois disso fecha o programa, o arquivo que foi salvo é gravado no disco de armazenamento e o programa e o arquivo são removidos da memória. Agora que você já sabe como o Sistema Operacional é carregado na memória durante a inicialização do computador, você vai entender como é de fato realizado o papel de um gerenciador de memória, controlando não apenas a memória RAM, como toda a hierarquia de memória. (1) Esse é o termo que usamos quando um programa é copiado para a memória RAM. Os esquemas de gerenciamento de memória evoluíram juntamente com os dispositivos e o próprio Sistema Operacional. Existem diversas estratégias de organizar os processos que são colocados na memória, e algumas delas serão apresentadas para que você compreenda o que está por trás de cada programa que executamos, inclusive do próprio Sistema Operacional. Monoprogramação sem troca ou paginação Este é o esquema mais simples de gerenciamento de memória, consiste basicamente no compartilhamento da memória entre o Sistema Operacional e apenas um programa. Assim, a cada nova solicitação de execução de um programa, o Sistema Operacional carrega-o para memória e caso já tenha um processo
  • 14. 14 presente, este será sobrescrito. De acordo com a Figura, observamos que a memória permanece vazia (1), até que o Sistema Operacional é carregado primeiramente na memória, criando o processo (2) do sistema. Então, o SO reserva o restante do espaço de memória para o primeiro programa a ser carregado (3) e caso seja solicitado a execução de um novo programa, o sistema sobrescreve o processo anterior pelo novo (4). Gerencia de memória em SO que gerenciam apenas um programa por vez . Para atender a necessidade da multiprogramação presente na CPU que possibilitava a execução de mais de um programa por vez, foram desenvolvidos novos esquemas de gerenciamento. Multiprogramação com partições fixas Se queremos que vários processos sejam executados ao mesmo tempo, teremos que mantê-los na memória, mas como isso será possível? Dividindo a memória em pequenos lotes, como os lotes de um condomínio de casas. O Sistema Operacional poderá ocupar essas partições com os processos que serão criados, teremos então na mesma memória diversos programas em execução, bastando gerenciar os endereços de memória de cada um desses lotes de bytes.
  • 15. 15 Como os processos variam muito de tamanho, os Sistemas Operacionais que se utilizam da multiprogramação com partições fixas procura variar no tamanho dos lotes de memória, tentando otimizar o uso da memória, observe a Figura 3 e você terá uma ideia desse esquema. Gerenciamento de memória com partições fixas. Lembre-se de que, como estamos falando de partições fixas, os processos tem que ser compatíveis com os tamanhos dos lotes e, portanto, existem maneiras diferentes de reservar as partições. Por exemplo, o Sistema Operacional pode sempre reservar aos processos de partições de tamanho mais próximo ao que eles necessitam, assim, uma partição grande nunca será ocupada por processos menores, para que não seja subutilizada, porém, a espera por uma partição menor pode prejudicar processos menores que ficaram em filas aguardando, tal situação está presente na figura abaixo.
  • 16. 16 Quando a memória não é suficiente Às vezes, a memória não é suficiente para manter todos os processos atualmente ativos, sendo assim, foram desenvolvidos técnicas de gerenciamento de memória RAM com auxílio de uma memória secundária (geralmente o HD do computador), vamos apresentar dois esquemas que se utilizam de mais memória do que a RAM disponível. São o esquema de troca e o esquema de memória virtual. Troca O esquema de troca consiste em trazer o processo inteiro do disco para a memória e executá-lo temporariamente e então devolvê-lo para o disco novamente para que outro processo possa ter sua vez. A mostra como esse esquema funciona.
  • 17. 17 Paginação de processos no HD Neste esquema, a alocação da memória não segue a ideia de partições fixas, variando seu tamanho de acordo com o processo que for sendo carregado. Dessa forma, estaremos otimizando o uso da memória, mas tornando ainda mais complexo o seu gerenciamento. Por exemplo, de acordo com a Figura 6 , vemos que com o tempo e a liberação de memória, lacunas vão aparecendo, tornando ineficiente o uso da memória, então, métodos de compactação da memória podem ser utilizados para juntar os processos presentes e eliminar as lacunas entre processos, aumentando áreas livres que poderiam ser utilizadas, mas essa ação consome bastante tempo de CPU. Problema no gerenciamento das áreas livres que vão surgindo Para gerenciar as trocas e quais áreas da memória estão ocupadas ou livres, dois esquemas básicos são utilizados, veja-os a seguir.
  • 18. 18 Gerenciamento de memória com mapas de Bits Pense no mapa de sua cidade, lá deve estar representado as áreas ocupadas (urbanas) e áreas livres (terrenos, áreas ambientais e zonas rurais), se dividimos a memória em pequenos lotes e criamos um mapa de ocupação, podemos com o custo de uma pequena área da memória saber quais áreas estão livres e ocupadas. A Figura 7 representa essa forma de gerenciamento. Mapeamento da memória com mapa de bits Gerenciamento de memória com lista encadeada Para esse esquema, uma lista de lotes da memória indica quais estão ocupados com processos e quais são áreas livres. Como a lista é encadeada, cada elemento além das informações sobre sua partição da memória também aponta para a próxima área. É como se pegássemos um bloco de notas e
  • 19. 19 descrevêssemos cada cômodo de nossa casa em uma das folhas informando quem está no cômodo e realizando qual atividade. A Figura abaixo explica melhor a relação da lista encadeada com as partições da memória. Lista encadeada para mapear processos e áreas livres Observe que, na Figura , no momento em que um processo é finalizado e sua partição é liberada, caso exista uma ou duas partições vizinhas livres, ocorre uma fusão, gerando uma partição livre maior, conforme verificado nas áreas 1 e 2 em destaque na figura. Memória virtual Quando a memória restante não é suficiente para executar um processo realmente grande, o Sistema Operacional estabelece uma estratégia de manter partes do programa na memória e parte no disco. Esse método gerou o conceito de memória virtual, dado que aumenta a capacidade de gerenciamento para um tamanho maior que a memória existente. Muitos esquemas de memória virtual utilizam a técnica de paginação, então, iremos demonstrar como ela funciona como uma possível demonstração de memória virtual. Paginação Nos computadores que se utilizam de memória virtual, existe um componente de hardware especial chamado de MMU (Memory Management Unit – Unidade de Gerenciamento de Memória) que mapeia áreas do disco, expandindo a capacidade da memória. De acordo com a Figura, podemos observar que se trechos do programa não presentes na memória real forem acessados, eles serão copiados do disco para a memória através de uma troca de páginas.
  • 20. 20 Esquema de paginação da memória no disco Vale lembrar que os dados do segmento da memória serão guardados no HD para preservar a integridade completa do processo. Essas partições da memória são conhecidas como molduras de páginas e os trechos do processo no HD é conhecido como páginas. De acordo com nosso exemplo, temos 6 páginas e apenas 4 delas estão mapeadas na memória física. Alguns sistemas operacionais mais simples não trabalham com multiprogramação, ou seja, alocam um processo na memória o executam até que seja terminado. Porém a troca de processos entre memória e disco para sistemas multiprogramados é uma realidade. Para este caso, em que a soma dos espaços de memória requeridos por todos os processos é maior que a memória primária, é necessário levar os dados não utilizados para o disco, sendo necessário um controle através de mapa de bits. A utilização de memorial virtual é recomendada, mas o algoritmo de substituição de páginas deve ser eficiente para garantir o desempenho do processo. Recomenda-se o uso do algoritmo do envelhecimento (aging) e o WSClock. Um resumo dos algoritmos de substituição de páginas segue abaixo: NUR (não usada recentemente) • Muito rudimentar FIFO • Pode descartar páginas importantes
  • 21. 21 FIFO com segunda chance • Melhoria do FIFO Relógio • Realista MRU (menos recentemente usada) • Excelente, mas difícil implementação NFU (não frequentemente usada) • Método similar ao MRU, mas rudimentar Envelhecimento (aging) • Ótimo desempenho e se aproxima do MRU SWAPPING O conceito de swapping continua válido ao se tratar de memória virtual. Ao existir novos processos que necessitem serem processados e não existir espaço suficiente na memória principal o Sistema Operacional deve selecionar aqueles segmentos e ou páginas que deverão ser removidos para abrir espaço na memória. Existem vários procedimentos para se fazer a escolha. Podemos citar aqui o critério da prioridade (os de menor prioridade dao imediatamente retirados) e o do estado (aqueles em estado de espera são imediatamente retirados). TRASHING Trashing pode ser definido como sendo a alta taxa de paginação devido ao grande page fault que pode ocorrer devido a pequenas áreas de working set em vista das que realmente seriam necessárias para acomodar as páginas e ou segmentos constantemente acessados pelos processos e ou quando existem muitos processos competindo por espaço na memória principal. PAGE FAULT Uma falta de página1 ou falha de página (page fault em inglês), no contexto da tecnologia da memória dos computadores, é uma interrupção (ou exceção) disparada pelo hardware quando um programa acessa uma página mapeada no espaço de memória virtual, mas que não foi carregada na memória física do computador. Uma página é um bloco de memória de tamanho fixo, utilizada como uma unidade de transferência entre a memória física e um dispositivo de armazenagem externo como, por exemplo, um disco rígido. O dispositivo de hardware que detecta esta situação é a unidade de gerenciamento de memória do processador. O software de tratamento de exceção, que trata a ocorrência de falta de página, é geralmente parte do sistema operacional. O sistema operacional tenta tratar esta ocorrência fazendo a página acessível em uma locação da memória física ou interrompendo a execução do processo em caso de acesso ilegal. Faltas de página não são fatais As faltas de página além de não serem fatais são ocorrências comuns e necessárias para possibilitar o aumento da memória disponível para os programas em qualquer sistema operacional que utiliza memória virtual, como o Microsoft Windows e o Linux. O hardware gera interrupções de falta de página quando: a página correspondente ao endereço requisitado não está carregada na memória;
  • 22. 22 a página correspondente ao endereço de memória acessado está carregada, mas o seu estado corrente não foi atualizado no hardware. Uma exceção relacionada com a falta de página é conhecida como falha de proteção (protection fault em inglês) e é gerada para acessos de página quando: a página não é parte do programa, e portanto não é mapeada na memória do programa; o programa não tem privilégios suficientes para ler ou escrever a página; o acesso à página é legal, mas está mapeada como página sob demanda. Gerenciamento de Arquivos Sabemos que os programas são carregados na memória na forma de processos, e que esses recebem uma determinada quantidade de memória principal para armazenar os dados que receberão dos diversos dispositivos de entrada de dados. Porém, podemos logo perceber que a memória não é suficiente para armazenar toda a massa de dados que pode ser manipulada por um processo. Imagine a quantidade de informação de todas as aulas de todas as disciplinas da Metrópole Digital, agora imagine que quiséssemos abrir todas as aulas de uma única vez, o processo responsável por apresentar estas aulas, dependendo do computador utilizado, não teria como ter acesso à memória para armazenar toda essa informação. Além disso, aprendemos que a memória de um computador é liberada quando o processo é encerrado e toda a informação presente na área que foi reservada será perdida, então, você pode perguntar: como fazer para manter os dados após o computador ser desligado? E outra questão que surge é a seguinte: se o espaço de memória dedicado a um processo é protegido dos demais processos, então, como informações poderiam ser acessadas por diversos processos ao mesmo tempo? Para atender as necessidades levantadas acima, são utilizados discos e outras mídias digitais externas para armazenamento de dados que permaneceram salvos mesmo que o processo seja encerrado e até mesmo que o computador seja desligado. O gerenciamento desse “depósito” de informações será o foco desta nossa aula. Gavetas na mesa de estudos Para entender como os dados são armazenados e salvos, vamos voltar para o exemplo da mesa de estudos que usamos nas aulas anteriores, sabemos que todo o material de estudo, nossos livros, nossas listas de exercícios permanecem guardados. No caso da mesa representada na Figura 1, esse material está guardado nas gavetas. Fazendo um paralelo com o computador, podemos dizer que essas gavetas atuam como os discos rígidos de um computador.
  • 23. 23 As gavetas servem para guardarmos todo o material de estudo, incluindo tudo que foi feito durante nossas horas de estudo, além disso, elas servem para que possamos ter a mesa livre para realizar tarefas de disciplinas diferentes sem misturar livros e apostilas de cada uma. Além disso, se nossa mesa de estudos for suficientemente grande para ser compartilhada com outra pessoa, essas duas pessoas podem compartilhar o mesmo material guardado nas gavetas. Quando usamos as gavetas para armazenar nosso material de estudo, precisamos nos lembrar de manter sempre todo o material organizado para que todas as pessoas que se utilizam da mesa (inclusive nós mesmos) possam ter acesso fácil à informação armazenada nas gavetas. Podemos dizer que o Sistema Operacional gerencia o armazenamento de dados de forma parecida com o exemplo das gavetas na mesa de estudos. Basicamente, é preciso que ele procure atender a três requisitos. 1 – Poder armazenar uma grande quantidade de dados. 2 – A informação deve permanecer guardada, mesmo com o processo finalizado. 3 – Devem existir mecanismos de acesso da informação por mais de um processo. Para facilitar a organização dos dados nos discos rígidos, o Sistema Operacional armazena os dados em unidades chamadas arquivos (mesmo conceito dos documentos de papel utilizados nas empresas para guardar informações de suas atividades). Assim, para permitir o gerenciamento desses dados, o Sistema Operacional oferece aos processos a capacidade de criar, ler, mover, alterar e arquivos Arquivo A parte do Sistema Operacional responsável pelo gerenciamento (criação, remoção, alteração) dos arquivos é conhecida como Sistema de Arquivos. É ele o responsável por identificar cada arquivo com um nome único. Por exemplo, todos os seus livros possuem o título na lateral do livro para facilitar sua identificação e, assim, caso você precise retirar um livro de uma estante ou gaveta, basta procurar pelo nome do livro sem ter que abri-lo. Da mesma forma que numa estante de livros, no sistema de arquivos de um Sistema Operacional o nome do arquivo armazenado no disco rígido é uma informação importante e necessária para sua localização no disco rígido do computador. Cada sistema de arquivos possui regras específicas de nomear um arquivo, dentre essas regras podemos citar, por exemplo: a quantidade máxima de caracteres que podem ser usadas para formar os nomes dos
  • 24. 24 arquivos, e os tipos de caracteres que podem ser usados (geralmente, você não pode usar os seguintes caracteres em um nome de arquivo: / ? : * " > < | .). O Windows geralmente limita os nomes de arquivos em 260 caracteres. Mas, o nome do arquivo, na verdade, deve ser mais curto que isso, já que o caminho completo (como C:Arquivos de Programanome_do_arquivo.txt) está incluído nessa contagem de caracteres. É por isso que você pode, ocasionalmente, encontrar um erro ao copiar um arquivo com um nome muito longo para um local que possua um caminho mais curto que o local atual. Nos sistemas UNIX, os nomes podem ter até 255 caracteres. Tanto no Linux quanto no Windows os arquivos possuem extensões. “As extensões funcionam apenas como uma indicação do tipo de programa que pode manipular aquele arquivo, separado do nome por um ponto “.”. Por exemplo, a extensão .jpg indica que o arquivo casa.jpg se trata de uma imagem e um programa de edição de imagens (GIMP, por exemplo) pode abri-lo para ser exibido na tela de seu computador. Estrutura dos arquivos A informação contida em nossos livros e apostilas é um conjunto de letras e palavras impresso nas folhas. Mas, você sabe dizer como são estruturados os dados nos arquivos do computador? Sabemos que os dados no computador são codificados em bits (unidades binárias com valores 1 ou 0) e que o tráfego entre os diversos componentes é baseado em conjuntos de bits na potência de 2 (4, 8, 16, 32, 64 etc.). Então, para os sistemas operacionais, os arquivos são apenas um conjunto de bytes (unidade composta de 8 bits) e que é de responsabilidade de cada programa converter esses bytes em letras, números, sinais de pontuação, ou seja, alguma representação que nós humanos possamos entender. Fazendo um paralelo com nossa estante de livros, é como a estante de livros só pudesse armazenar livros, apostilas e documentos em uma língua comum, formada apenas por seqüências de zeros e uns (bits), e caberá, portanto a quem for ler este material, interpretar o que significa a seqüência de bits presentes em cada livro (por exemplo, a seqüência de 8 bits “00011000” pode representar a letra “A”). Apesar dos arquivos serem basicamente um conjunto de bytes (8 bits), eles podem ser de tipos diferentes de acordo com a sua finalidade. Podemos ter arquivos que servem apenas para armazenar os dados (arquivos com extensão .txt), arquivos que armazenam imagens (arquivos com extensão .bmp), ou até mesmo arquivos de sistema onde mantemos informações sobre outros arquivos, os quais chamamos de diretórios e que servem como uma forma de organização das informações. Existe também um tipo especial de arquivo que serve para termos acesso direto a diferentes dispositivos. Como vimos na aula anterior (Aula 8), para enviarmos comandos para uma impressora, basta abrir o arquivo correspondente a esse dispositivo e escrever a informação que será impressa. O sistema de arquivos ficará então responsável por enviar as requisições para o “driver” da impressora para solicitar a impressão do documento que já foi escrito no arquivo correspondente a esse dispositivo. Acessando os arquivos Há algum tempo atrás, as informações do computador não eram armazenadas em discos rígidos, elas eram armazenadas em fitas magnéticas (similares às fitas cassetes usadas para escutar música da década de 80, e nas fitas VHS usadas para armazenar filmes). A forma de acessar a informação nesse tipo de mídia era sequencial, ou seja, para acessar informações no meio da fita tínhamos que re-bobinar a fita
  • 25. 25 até o ponto desejado. Hoje em dia, como utilizamos discos, os dados podem ser acessados fora da ordem (assim como num CD, podemos ir direto para a música 10 sem precisar passar por todas as outras, em um HD podemos acessar os arquivos armazenados em qualquer ordem). Portanto, o acesso à informação se tornou mais rápido. Os sistemas operacionais modernos se utilizam apenas dessa forma de acesso e os arquivos que podem ter seus dados acessados em qualquer ordem são chamados de arquivos de acesso aleatório. Uma comparação interessante que podemos fazer com relação a essa evolução é comparar os antigos Papiros, rolos de papel utilizados na antiguidade para registrar os documentos, com os livros que podemos selecionar um determinado capitulo saltando as suas páginas (veja a Figura 4). Papiro (acesso sequencial) x Livro (acesso aleatório). Atributos de um arquivo Na capa de um livro ou documento, normalmente temos informações básicas sobre o mesmo. Dados como autor, edição, título, editora são encontrados para auxiliar nas nossas consultas. O Sistema Operacional também guarda informações sobre os arquivos que vão além do seu nome e dos dados armazenados. Data e hora de criação, acesso e alteração, tamanho do arquivo e códigos de segurança para restrição de acesso são exemplos de atributos que são armazenados pelo Sistema Operacional para cada arquivo criado.
  • 26. 26 Informação de alguns atributos do arquivo no Windows. Operações com arquivos Os sistemas de arquivos possuem conjunto de operações diferentes, mas basicamente eles disponibilizam os seguintes recursos de acesso e manipulação de arquivos. Diretórios Mesmo tendo uma estante, e algumas gavetas para guardar nosso material de estudo, isso não garante que conseguiremos encontrar facilmente nosso material quando desejarmos. Para isso, precisamos de uma
  • 27. 27 certa organização!!! Diferentes tipos de livros, apostilas e documentos devem ser organizados de tal forma que eu possa encontrá-los facilmente quando eu precisar deles. Por exemplo, seria interessante que todos os questionários estivessem organizados em pastas que indicassem à qual disciplina pertence, assim, caso você queira revisar as questões para uma prova, você saberia exatamente onde encontrar. Veja na Figura 6 um exemplo de organização de documentos em pastas. Organizando documentos em pastas Para organizar os arquivos, o Sistema Operacional utiliza uma técnica parecida: os diretórios. Os diretórios funcionam como pastas, armazenando informações sobre um conjunto de arquivos e facilitando a localização dos mesmos. Localizando diretórios e arquivos Como os arquivos nos Sistemas Operacionais estão organizados em diretórios, é fundamental que exista uma forma de localizá-los. Para isso, não basta termos o seu nome, mas precisamos do nome do diretório onde ele se encontra e, caso esse diretório esteja também em algum outro, devemos saber a sequência de diretórios até chegar ao arquivo, formando uma árvore de diretórios representada pela Figura 7.
  • 28. 28 Árvore de diretórios e arquivos. Fonte: autoria própria. Dependendo do sistema de arquivos adotado pelo Sistema Operacional, a estrutura da árvore de diretórios e até sua representação podem mudar. Por exemplo, no Windows o sistema de arquivo utilizado atualmente é o NTFS (New Technology File System) que diferencia as unidades de armazenamento (discos, drivers de CD, pendrivers, etc) por letras (C:, D:, E:, etc) e, a partir de cada unidade dessa, temos uma árvore de diretórios. Já o sistema de arquivos EXT3 (Third Extended file system), presente em muitas distribuições do Sistema Operacional Linux, não representa as unidades de armazenamento através de letras, apenas existe um diretório padrão conhecido como diretório-raiz representado pela barra “ / ”. Caso seja necessário acessar uma unidade diferente, deve ser feito uma associação com um diretório conhecido como montagem de unidade. A Figura 8 apresenta a árvore de diretórios no Windows e no Linux. Formas diferentes de acesso para um arquivo nos diferentes Sistemas Operacionais Sistemas de arquivos Diferentes Sistemas Operacionais usam diferentes sistemas de arquivos. Dependendo da capacidade dos discos e do volume de arquivos e acessos, as ações de manipulação de arquivos tornam-se mais complexas, exigindo constantes evoluções nos sistemas de arquivos. Existem diversos sistemas de arquivos, que vão desde sistemas simples, como o FAT16, que utilizamos em cartões de memória, até sistemas como o NTFS, EXT3 e ReiserFS, que incorporam recursos muito mais avançados. No ambiente Windows, temos apenas três sistemas de arquivos: FAT16, FAT32 e NTFS. O FAT16 é o mais antigo, usado desde os tempos do MS-DOS, enquanto o NTFS é o mais complexo e atual. Para o Linux (e outros sistemas Unix), temos uma variedade muito grande de sistemas de arquivos diferentes,
  • 29. 29 que incluem o EXT2, EXT3, ReiserFS, XFS, JFS e muitos outros que podem parecer estranhos para você, mas não para os usuários do Linux. Apesar das diferenças existentes nos sistemas de arquivos, alguns conceitos básicos sempre estarão presentes. Por exemplo, para determinar o caminho para um dado arquivo, basta informar a todos os diretórios que são necessários percorrer da base da árvore até o arquivo, então, como vimos na Figura 8, o caminho do arquivo processos.txt é: 1. no Windows: C:SOaulasprocessos.txt; 2. no Linux: /SO/aulas/processos.txt. Esse nome é conhecido como nome de caminho absoluto, pois indica todo o percurso desde o diretório- raiz até o arquivo. Além do conceito de caminho absoluto, existe também o caminho relativo. Quando estamos em um dado diretório (também chamado de diretório atual ou diretório de trabalho), podemos acessar um arquivo como se o diretório atual fosse o diretório-raiz. No exemplo anterior, se o diretório de trabalho fosse C:SOaulas (ou /SO/aulas no Linux), poderíamos acessar o mesmo arquivo processos.txt de duas formas: Formas de como acessar o arquivo processos.txt Operações com diretórios Um diretório é um tipo de arquivo especial, pois pode armazenar outros arquivos dentro dele. Existe um conjunto específico de operações para a manipulação de diretórios, são elas:
  • 30. 30 Gerenciamento de Dispositivos A gerência de dispositivos é o meio através do qual todos os dispositivos de E/S são controlados a fim de se obter o maior compartilhamento possível entre os diversos usuários de forma estável e segura. Alguns dispositivos, tal como os discos, podem ser compartilhados simultaneamente por diversos usuários, sendo o Sistema Operacional responsável pela integridade dos dados. Já dispositivos como impressoras, por exemplo, devem ter acesso exclusivo, sendo dever do sistema controlar seu compartilhamento de forma organizada. A fim de facilitar a gerência de dispositivos, o Sistema Operacional implementa diversas camadas de software sendo que as de mais baixo nível tentam tornar transparentes as caracterísitcas do hardware dos dispositivos das camadas superiores até chegar a uma interface simples ao usuário. Nesta estrutura, existem rotinas que se comunicam diretamente com o controlador enquanto outras apresentam interfaces ao usuário. As camadas de software são divididas em dois grupos, um que visualiza os diversos tipos de dispositivos de maneira única e outro que é específico para cada dispositivo. ROTINAS DE ENTRADA E SAÍDA O sistema operacional deve tornar as operações de entrada e saída o mais simples possível aos usuários. Desta maneira ele deve ser projetado de forma a poder se comunicar com qualquer dispositivo que possa ser conectado ao hardware do computador. Para que haja independência de dispositivos, todas as operações realizadas com diferentes dispositivos de E/S devem ser realizadas de uma mesma forma através de rotinas do sistema. Isto possibilita escrever um programa que manipule arquivos em disquetes, discos rígidos ou fitas magnéticas de uma mesma maneira sem que haja necessidade de rotinas especiais no programa para cada tipo de periférico. As rotinas do sistema responsáveis por esta comunicação são denominadas rotinas de E/S e estão presentes nas camadas implementadas pelo SO de mais alto nível, permitindo ao usuário realizar operações de E/S sem se preocupar com detalhes de operação do dispositivo que está sendo acessado. Assim, ao gravar um arquivo em disco, não interessa ao usuário como é a formatação do disco ou as trilhas e setores em que o arquivo será gravado. Estas rotinas também são responsáveis por implementar mecanismos de proteção de acesso a dispositivos e arquivos e possuem a função principal de criar uma interface simples entre as aplicações e os dispositivos e entre estes dispositivos e o restante do sistema operacional. Com isto, elimina-se a necessidade de duplicação de rotinas idênticas nos diversos programas aplicativos, escondendo do programador características específicas associadas à programação dos diversos dispositivos. DEVICE DRIVERS Os devices drivers, ou simplesmente drivers, são todas as rotinas do sistema operacional que têm como função se comunicar com os dispositivos de E/S em nível de hardware. Eles são softwares tradutores que recebem comandos do Sistema Operacional para um hardware específico. Eles permitem aos desenvolvedores de softwares desenvolverem programas sem saber qual hardware os usuários possuem. Os usuários, por sua vez, podem trocar de hw sem necessitar trocar os programas. Cada device driver manipula somente um tipo de dispositivo ou grupo de dispositivos semelhantes, tendo como função receber comandos gerais de acesso aos dispositivos e traduzi-los para comandos específicos que poderão ser executados pelos controladores. Normalmente, um sistema possui diversos drivers, comos os para disco, fitas magnéticas e terminais.
  • 31. 31 O driver está integrado diretamente nas funções do controlador. Ele é o componente do sistema que reconhece o hardware do sistema. Sua função principal é receber comandos abstratos, geralmente de rotinas de E/S, e traduzi-los para comandos que o controlador do dispositivo possa entender e executar. Um exemplo é na leitura de um arquivo em disco. O disk driver recebe o comando de leitura de um determinado bloco e passa para o controlador em qual disco, cilindro, trilha, setor o bloco se localiza. Dessa forma, a leitura é realizada. CONTROLADORES São componentes eletrônicos responsáveis por manipular diretamente os dispositivos de E/S. Normalmente o SO se comunica com os controladores e não com os dispositivos. O controlador geralmente possui memória e registradores próprios para poder executar instruções de baixo nível enviadas pelo driver que são responsáveis pela interface entre o controlador e o dispositivo. O SO, através do driver, armazena comandos de E/S nos registradores e/ou memória do controlador, possibilitando a UCP permanecer livre para executar outras tarefas. DISPOSITIVOS DE ENTRADA E SAÍDA São responsáveis pela comunicação entre o computador e o mundo externo. A transferência de dados, realizada nesta comunicação, pode ser efetuada através de blocos de informações (discos magnéticos, por exemplo) ou palavra a palavra (imporessora, termninais, ...). A transferência é realizada através de controladores de dispositivos supervisionada pelo SO. Biliografia ALECRIM, Emerson. Sistema de arquivos NTFS. Disponível em: <http://www.infowester.com/ntfs.php>. SILVA, Roberto Rodrigues da. Sistemas de arquivos suportado pelo Linux. Disponível em: <http://www.vivaolinux.com.br/artigo/Linux-Sistema-de-arquivos/>. TANEMBAUM, Andrew S.; WOODHULL, Albert S. Sistemas operacionais: projeto e implementação. Trad. Edson Furmankiewicz. 2. ed. Porto Alegre: Bookman, 2000. TERMOS técnicos sobre sistema de arquivos. Disponível em: <http://www.guiadohardware.net/termos/sistema-de-arquivos>. SILVA, Luiz. Evolução da Memória RAM. Disponível em: <http://igri01.blogspot.com/2009/02/evolucao-da-memoria-ram.html> TYSON, Jeff. Como funciona a memória do computador. Disponível em: <http://informatica.hsw.uol.com.br/memoria-do-computador1.htm> <http://www.metropoledigital.ufrn.br/aulas/disciplinas/sist_operacional> <http://www.cybertechcse.com.br/sistOperacionais/Frame.htm>