sistema operacional

31
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

Upload: michael-soto

Post on 09-Jun-2015

2.024 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Sistema operacional

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

Page 2: Sistema operacional

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

Page 3: 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:

Page 4: Sistema operacional

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.

Page 5: Sistema operacional

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:

Page 6: Sistema operacional

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

Page 7: Sistema operacional

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.

Page 8: Sistema operacional

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.

Page 9: Sistema operacional

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.

Page 10: Sistema operacional

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

Page 11: Sistema operacional

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

Page 12: Sistema operacional

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,

Page 13: Sistema operacional

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

Page 14: Sistema operacional

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.

Page 15: Sistema operacional

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.

Page 16: Sistema operacional

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.

Page 17: Sistema operacional

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.

Page 18: Sistema operacional

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

Page 19: Sistema operacional

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.

Page 20: Sistema operacional

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

Page 21: Sistema operacional

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;

Page 22: Sistema operacional

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.

Page 23: Sistema operacional

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

Page 24: Sistema operacional

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 Programa\nome_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

Page 25: Sistema operacional

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.

Page 26: Sistema operacional

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

Page 27: Sistema operacional

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.

Page 28: Sistema operacional

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,

Page 29: Sistema operacional

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:\SO\aulas\processos.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:\SO\aulas\ (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:

Page 30: Sistema operacional

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.

Page 31: Sistema operacional

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>