Você está na página 1de 128

Sistemas Operacionais

Abertos

Material de apoio ao 6to Semestre do


Curso de Ciências da Computação
do ICEC
Contexto da disciplina
Contexto da disciplina
I – OBJETIVOS GERAIS

Possibilitar ao aluno o entendimento das funções que um sistema operacional deve


desempenhar em um sistema de computação: Gerenciamento de Memória, Memória Virtual,
Sistemas de Arquivos e Sistemas de E/S.

II – OBJETIVOS ESPECÍFICOS

Mostrar ao aluno: as principais características que um sistema operacional deve possuir,


formas de organização, algoritmos envolvidos e formas de implementação.
Conteúdos
 Módulo 1 – Revisão Geral: somente os conceitos: Gerência de Processos,
Escalonamento de CPU, Threads e Deadlocks
 Módulo 2 – Gerência de Memória: Conceitos Básicos, Swapping, Alocação de
memória contígua e Fragmentação.
 Módulo 3 – Gerência de Memória: Paginação, Segmentação, Segmentação com
paginação.
 Módulo 4 – Memória Virtual: Aspectos básicos, Paginação por demanda, Substituição
de Página, Algorítmos FIFO, Otimo e LRU.
 Módulo 5 – Segmentação
 Módulo 6 – Alocação de Quadros, Thrashing.
 Módulo 7 – Sistemas de E/S – Hardware de E/S
 Módulo 8 – Sistemas de E/S – Software de E/S
 Módulo 9 – Impasses
 Módulo 10 – Sistemas de E/S: Visão Geral, Hardware de E/S, Interface de E/S da
aplicação,Subsistema de E/S do kernel.
 Módulo 11 – Proteção e Segurança
 Módulo 12 – Sistemas Distribuidos: Conceitos
Módulo 1 – Gerência de Processos,
Escalonamento de CPU, Threads e
Deadlocks
Revisão

 Este módulo visa em trazer à tona os conceitos da disciplina


Sistemas Operacionais onde o Universitário poderá firmar seus
conceitos. Se estes conceitos não estão claros, inútil será
continuar.

 A revisão que será feita a continuação não vai entrar em detalhes.


Se não acha que compreendeu o conteúdo de sistemas
operacionais, tome um tempo e leia o material fornecido na
disciplina anterior.
Revisão

Para que a CPU não fique muito tempo sem executar tarefa alguma, os sistemas
operacionais utilizam técnicas para escalonar os processos que estão em execução ao
mesmo tempo na maquina.
O escalonamento de processos é uma tarefa complicada, pois nenhum algoritmo é
totalmente eficiente e a prova de falhas, principalmente em se tratando de sistemas
interativos, como o Windows, pois a interação com o usuário é fundamental para este
sistema onde quem o utiliza procura respostas rápidas e a todo o
momento processos são interrompidos pelo usuário.
O escalonador do SO utiliza alguns critérios de escalonamento, como: a taxa de
utilização de CPU, que é a fração de tempo durante a qual ela está sendo
ocupada; throughput que são números de processos terminados por unidade de
tempo; turnaround que é o tempo transcorrido desde o momento em que o software
entra e o instante em que termina sua execução; tempo de resposta: intervalo entre a
chegada ao sistema e inicio de sua execução; tempo de espera: soma dos períodos em
que o programa estava no seu estado pronto.
Revisão
O projeto de um escalonador adequado deve levar em conta uma série de diferentes necessidades, ou
seja, o projeto de uma política de escalonamento deve contemplar os seguintes objetivos:
Ser justo: Todos os processos devem ser tratados igualmentE, tendo possibilidades idênticas de uso do
processador, devendo ser evitado o adiamento indefinido.
Maximizar a produtividade (throughput): Procurar maximizar o número de tarefas processadas por
unidade de tempo.
Ser previsível: Uma tarefa deveria ser sempre executada com aproximadamentE o mesmo tempo e custo
computacional.
Minimizar o tempo de resposta para usuários interativos.
Maximizar o número possível de usuário interativos.
Minimizar a sobrecarga (overhead): Recursos não devem ser desperdiçados embora algum investimento
em termos de recursos para o sistema pode permitir maior eficiência.
Favorecer processos "bem comportados": Processos que tenham comportamento adequado poderiam
receber um serviço melhor.
Balancear o uso de recursos: o escalonador deve manter todos os recursos ocupados, ou seja, processos
que usam recursos sub- utilizados deveriam ser favorecidos.
Exibir degradação previsível e progressiva em situações de intensa carga de trabalho.
Revisão

O escalonamento de processos ou agendador de tarefas (em


inglês scheduling) é uma atividade organizacional feita pelo escalonador
(scheduler) da CPU ou de um sistema distribuído, possibilitando executar
os processos mais viáveis e concorrentes, priorizando determinados tipos de
processos, como os de I/O Bound e os computacionalmente intensivos.
Gerência de Processos,
Escalonamento de CPU,Threads e
Deadlocks
 Um sistema operacional é quem gerencia os recursos
computacionais num sistema. Isto é, organiza para que
todos os recursos não tenham conflitos uns com os
outros.
 Da mesma forma que uma rodovia um sistema
computacional fornece ordens entre seus componentes
de forma organizada para não existirem conflitos.

 Dentro do sistema computacional podemos


ver, de forma macro, as atividades como
conjuntos de funções.
 Estes conjuntos podem ser denominados
como Processos.
Escalonamento de CPU

 Como foi citado, o tráfego de


ordens tem que manter uma
organização da mesma maneira
que uma estrada mantêm um o
transito de forma harmônica.

Para manter essa harmonia são aplicadas técnicas


onde os processos são atendidos numa ordem
determinada. Esta organização é conhecida como
escalonamento de processos ou da CPU
Escalonamento de CPU
 Escalonamentos podem ser catalogados por:
 Prioridade de uso

 Tempo de uso

 Seqüência organizada

Seja lá a condição necessária do escalonamento, o fim


é ter uma otimização do fluxo de ordens

 Na ausência de escalonamentos, obviamente,


haverá um engarrafamento de processos.

 Dependendo do quanto seja critico pode chegar a


bloquear o andamento dos processos e
consequentemente do sistema operacional
DeadLock
 É o conceito de confronto de ordens
onde trava toda possibilidade de ir
diante alguma coisa.

 Condições necessárias para a


ocorrência de Deadlock:

 Condição de não-preempção: recursos já alocados a processos não podem ser tomados a força.
Eles precisam ser liberados explicitamente pelo processo que detém a sua posse;
 Condição de exclusão mútua: cada recurso ou está alocado a exatamente um processo ou está
disponível;
 Condição de posse-e-espera: cada processo pode solicitar um recurso, ter esse recurso alocado
para si e ficar bloqueado esperando por um outro recurso;
 Condição de espera circular: deve existir uma cadeia circular de dois ou mais processos, cada
um dos quais esperando por um recurso que está com o próximo membro da cadeia.
Observação

As transparências que serão apresentadas


dizem respeito de comandos em terminal ou
na denominada CLI (Command Line
Interface).

Para acessar esta área pode clicar em


Aplicativos / acessórios / Terminal OU com o
atalho Alt-F2 aparecerá uma tela de
comandos ao qual tem que solicitar o
aplicativo gnome-terminal.

Ainda que esteja logado com um usuário que


tenha direitos de administrador, tem
comandos que deverão ser feitos com o
prefixo sudo.
Administração de processos
top
top, Verifica processos, memoria e processadores

htop, Idem top porem interativo com o usuário


htop

ps,
ps mostra os processos em andamento

kill, killall
kill killall, Mata um ou todos os processos

renice, altera uma prioridade de funcionamento


renice

time roda um programa e informa o tempo que


time,
usou para tal fim

nohup, roda comandos independente de logouts


nohup

Strace mostra as chamadas realizadas por um


Strace,
comando
Administração de processos
Top
Permite que sejam visualizadas as informações dos
processos e estados de memorias e processadores.

É uma ferramenta de tempo real e portanto nao


precisa ser atualizada para ver os diferentes
momentos de leitura.

Permite a verificação de trabalho de cada um dos


processadores em forma opcional

Este comando contêm um alto numero de parametros


que é aconselhavel consultar com man top.

Os parametros mais importantes são:


-p id so visualiza os dados desse processo
-H mostra as threads vinculadas com tal processo
Administração de processos
HTop
Possui recursos similares aos que o comando top
contêm.

O comando htop pode nao estar disponivel nas


instalações padrao do linux.

O uso de aplicativos como apt-get (para distribuições


debian e derivadas) ou yum (para red-hat ou
derivadas) podem fazer a instalação do item em
questão de poucos minutos.
Administração de processos
HTop Uso do processador 1
Uso do processador 2

Uso de memória swap

Um dos recursos mais práticos encontrados no htop é o que fornece a tecla F5, isto é, a árvore de
processos vinculados em andamento.
Administração de processos
ps
Permite a visualização de um ou todos os processos
em andamento. A variedade de parâmetros faz
ipossivel a reprodução dos mesmos aqui. Os que se
destacam sao -e para a visualização de todos os
parâmetros, H para a visualização em forma de
árvore hierarquica de processos e F para
visualização de threads
Administração de processos
kill, killall
São comandos que acabam
com processos em andamento.

O comando kill mata um unico


processo informado pelo id.

O comando killall matará todos


os comandos que obedeçam
um nome determinado.
Administração de processos
renice

Altera a prioridade de funcionamento de um determinado processo.

Os processos podem ser individuais, de um usuário ou de um grupo.


Administração de processos
strace
strace [ -dffhiqrtttTvxx ] [ -acolumn ] [ -eexpr ] ...
[ -ofile ] [ -ppid ] ... [ -sstrsize ]
[ -uusername ] [ -Evar=val ] ... [ -Evar ] ...
[ command [ arg ... ] ]

strace -c [ -eexpr ] ... [ -Ooverhead ] [ -Ssortby ] [ command [ arg ... ] ]

Este comando realiza o trace (roteamento) de todas as chamadas de sistema que sao feitas num
determinado comando.

A saida deste comando pode ser realizada a um arquivo.

Os dados resultantes são a sequencia de chamadas de threads, com sua posição de memória, id de
processos e um conjunto de dados vinculados.
Administração de processos
strace
Administração de Hardware
Monitor de sistema
Este recurso é encontrado na
instalação padrão de
distribuições como Ubuntu. Está
disponível no menu atraves de
Sistema / Administração / Monitor
de sistema.

Na aba inicial podem ser


encontradas as informações do
equipamento que está sendo
usado, versão de Ubuntu e
espaço de disco.
Administração de Hardware
Monitor de sistema
Na aba seguinte será encontrado
um gerenciador de processos.
Nele podem ser vistos ids de
processos e os estados que os
mesmos se encontram.

Dois dados interessantes para o


administrador é o da situação de
nice ou prioridade de
processamento e o percentual de
CPU que o processo usa.

Possui recursos na opção ver do


menu principal no sentido de
visualização de dependências ou
de processos próprios do usuário
logado.
Administração de Hardware
Monitor de sistema
Na aba recursos mostra o estado
que a máquina se encontra com
dados de CPU, Memoria e Rede
Administração de Hardware
Monitor de sistema
Na aba Sistema de Arquivos
mostra dados de Discos Rígidos
e partições.
Módulo 2 – Gerência de Memória:
Conceitos Básicos, Swapping,
Alocação de memória contígua e
Fragmentação.
Gerenciamento de Memoria
 Em todo processamento de informações,
seja por um ser vivo ou por um
equipamento computacional são ativados
procedimentos e dados que
convenientemente acessados resultarão
nas soluções procuradas.
 O ser humano, quando jovem possui alta
capacidade de aprendizado e de lembrar
dados. Com a passagem do tempo vai complicando a situação.
 Com um sistema computacional acontecem coisas similares. Com a
evolução tecnológica o volume de informações tem crescido de forma
considerável. Os processadores computacionais permitem tratar volumes
de informações onde tem que fazer uso de vários recursos computacionais
para tratar tanta informação.
Gerenciamento de Memória
Quando um aplicativo, seja
pelo seu andamento ou pelos
dados manipulados, atinge um
certo nível de informações, tem
que fazer uso das diferentes
memórias e repositórios de
mídia para poder administrar
confiavelmente os dados
manipulados.
 Segundo Tabenbaum (Sistemas Operacionais Modernos, Pag 139):

“A memória é um recurso importante que deve ser gerenciado com muito cuidado. Apesar de
atualmente os computadores pessoais possuírem milhares de vezes mais memória do que
um IBM 7094 ( o maior computador do mundo no inicio da década de ’60), os programas
crescem muito mais rapidamente do que as memórias”
Gerenciamento de Memória
Como já foi visto em disciplinas anteriores, existem três grupos básicos de
sistemas operacionais:

 Mono programados e mono tarefas


 Multi programados e multi tarefas
 Multi processados

 Os sistemas multi processados na sua versão de processadores de vários


núcleos (forte acoplamento) são avaliados no seu gerenciamento de memória
de forma similar aos multi tarefas e multi programados.

No caso de multi processados de acoplamento fraco são estudados por cada
sistema operacional de cada nó da configuração
Gerenciamento de Memória
Nos sistemas operacionais mono -
programáveis o sistema de Sistema Operacional
gerenciamento de memória é mais mono Programável
simples.

O fato desta afirmação é que a


memória processa um programa de Memória
cada vez e somente tem que
partilhar espaço com atividades de
gerenciamento do sistema
operacional. Gerenciamento de memória

SO Programas
Gerenciamento de Memória
Na figura ao lado,
Tanenbaum apresenta a
idéia de três tipos de
gerenciamento de memória.
Nos três casos a
convivência entre programas
de usuário e de sistema
estão presentes.

As necessidades de administração de recursos computacionais por parte do sistema


operacional faz uso de memórias ROM (read only memory) onde o sistema operacional
usa hardware não volátil (BIOS) e Memórias RAM (Random access memory) que são,
particularmente. as memórias cache e primarias.

 Exemplo de gerenciamento básico de memória em sistemas operacionais mono - programados.


Fonte: Sistemas Operacionais Modernos, Tanenbaum, Pág. 140
Gerenciamento de Memória
Multi - programação com partições fixas

A maioria dos sistemas modernos permite que


múltiplos processos estejam em execução
simultaneamente, o que significa que quando
um processo for bloqueado - por exemplo,
para esperar que uma operação de E/S seja
finalizada – Outro processo use a CPU.
A maneira mais comum de realizar a multi –
programação consiste em simplesmente
dividir a memória em n partições
(provavelmente de tamanhos diferentes).
Essa partição pode, por exemplo, ser feita
de modo manual quando o sistema for inicializado.
Ao chegar um job pode ser colocado em filas de entrada associada à menor partição,
grande o suficiente como para armazená-lo.
Gerenciamento de Memória
Multi - programação com partições fixas

A desvantagem da ordenação em filas separadas


dos jobs que estão chegando torna-se evidente
quando a fila para uma grande partição está vazia,
mas a fila para uma pequena partição está cheia
– como as partições 1 e 3 na figura ao lado. Nesse
caso, jobs pequenos tem de esperar pela libertação
de memória, embora exista muita memória
disponível. Uma organização alternativa é manter
uma única fila, como se vê no lado direito da figura
ao lado. Então, sempre que uma partição se torna
disponível, o job mais próximo ao inicio da fila e que caiba nessa partição pode ser nela
carregado e executado. Como é indesejável desperdiçar uma grande partição com um
job pequeno, outra estratégia seria pesquisar em toda a fila de entrada e alocar a
partição disponível ao maior job que possa nela ser carregado.
Gerenciamento de Memória
Relocação

Na figura ao lado fica claro que diferentes processos serão


executados em diferentes endereços de memória. Quando
um programa é ligado (isto é, quando se combinam o
programa principal, procedimentos escritos pelo usuário e
procedimentos de biblioteca num único espaço de
endereçamento), o ligador (linker) tem de saber em que
endereço o programa deve começar na memória.
Suponha, por exemplo, que a primeira instrução seja
chamada a um procedimento situado no endereço absoluto
100, dentro do arquivo binário produzido pelo ligador. Se esse
programa fosse carregado na parttição 1 ( a partir do endereço 100k), essa instrução de
chamada fgaria saltar para o endereço absoluto 100 que está dentro do sistema
operacional, enquanto o correto seria saltar para o endereço 100K + 100, dentro da
partição 1. Se o programa for carregado na partição 2 , ele deverá ser executado por
meio de uma chamada ao endereço 200K + 100, e assim por diante. Isso é conhecido
como problema de Relocação.
Gerenciamento de Memória
Proteção

Se a relocação de memória for absoluta partido da posição


inicial mais a posição absoluta em cada partição, podem ser
usados softwares mal intencionados onde o inicio do programa
está garantido, mas, poderá ser desviado para outro endereço
absoluto em outro local da memoria desviando seu fluxo de
processo.
Para garantir o fluxo, alguns sistemas operacionais associam
uma chave de proteção a cada bloco de informação. O caso
do IBM 360 interrompia qualquer tentativa de um processo em
execução de acessar um código de memória cujo código diferisse da sua chave
denominada de PSW ou Program Status Word.
Gerenciamento de Memória
Relocação e Proteção

Uma solução alternativa para ambos os problemas, de


relocação e proteção, é fornecer o processador com dois
registradores especiais em hardware denominados
registrador-base e registrador-limite.
Quando um processo é escalonado – ou seja, escolhido
para ser executado -, o registrador-base é carregado como
o endereço de inicio da partição alocada a esse processo e
o registrador-limite é carregado com o tamanho dessa
partição. Cada endereço de memória gerado é
automaticamente somado ao conteúdo do registrador-base
antes de ser enviado à memória. Assim, se o registrador-base contiver 100K, uma
instrução CALL 100 funcionará como se fosse uma função CALL 100K + 100, sem que a
instrução em si tenha sido modificada.
Gerenciamento de Memória
Swapping

Dois métodos gerais para gerenciamento de


memória podem ser usados, dependendo
(em partes) dos recursos de hardware
disponíveis. A estratégia mais simples,
denominada troca de processos ( swapping),
consiste em trazer totalmente cada processo
para a memória, executá-lo durante um certo
tempo e então devolvé-lo ao disco.
Na figura ao lado pode ser visto o processo A na memória. Em seguida os processos B e
C são criados e trazidos do disco. Na seqüência o processo A é devolvido ao disco.
Então o processo D entra na memória e em seguida o processo B é retirado. Por fim, o
processo A é novamente trazido do disco para a memória. Como o processo A está
agora numa diferente localização de memória, os endereços dele contidos devem ser re-
alocados via software durante a carga na memória ou, mais provavelmente, via
hardware durante a execução do programa.
Gerenciamento de Memória
Garbage Collector

É o gerenciamento automático de memória, também conhecido como coletores


Este serviço libera os blocos de memória que não sejam mais usados por um programa
automaticamente.
Algumas linguagens de programação possuem recursos que permitem a limpeza de
memória alocada quando não existam mais vinculos entre objetos que alocaram
memória.
Quando deixam de existir referências a um objeto, este passa a ser considerado apto a
ser "coletado" pelo garbage collector, que significa dizer que será removido da memória,
deixando-a livre para uso por outros
objetos.
Os algoritmos de garbage collection operam de um modo que permite classificá-los em
duas grandes famílias:
identificação direta: por contagem de referências (reference counting);
identificação indireta: por varrimento (tracing), que pode incluir também compactação da
memória livre; cópia; ou geracional (utilizado nas máquinas virtuais Java e .Net)
Fonte : Wikipédia
Gerenciamento de Memória
Garbage Collector

É o gerenciamento automático de memória, também conhecido como coletores


Este serviço libera os blocos de memória que não sejam mais usados por um
programa automaticamente.
Algumas linguagens de programação possuem recursos que permitem a limpeza
de memória alocada quando não existam mais vinculos entre objetos que
alocaram memória.
Quando deixam de existir referências a um objeto, este passa a ser considerado
apto a ser "coletado" pelo garbage collector, que significa dizer que será
removido da memória, deixando-a livre para uso por outros
objetos.
Os algoritmos de garbage collection operam de um modo que permite classificá-
los em duas grandes famílias:
identificação direta: por contagem de referências (reference counting);
identificação indireta: por varrimento (tracing), que pode incluir também
compactação da memória livre; cópia; ou geracional (utilizado nas máquinas
virtuais Java e .Net)
Fonte : Wikipédia
Gerenciamento de Memória com
Mapa de Bits
Este tipo de gerenciamento consiste em:
- Dividir a memória em unidades de
alocação (o tamanho desta unidade
pode variar de poucos bytes a
vários kilobytes.
- Associar a cada unidade de
alocação um bit de controle que
diz se aquela unidade está alocada ou não (0 para não alocada e
1 para alocada).
- O conjunto de todos os bits de controle é denominado Mapa de
Bits.

Para alocar a memória para um processo o SO deve, inicialmente,


percorrer o mapa de bits em busca de uma seqüência de 0’s que
represente um espaço de memória capaz de suportar o processo, que
pode ser muito demorado.
Tamanho da unidade de alocação
Quanto menor a unidade de alocação, maior será o mapa de bits e maior o
tempo de procura do SO em busca de espaço disponível para carregar o
processo; Contudo, maior será o aproveitamento da memória. Quanto maior a
unidade de alocação, menor será o mapa de bits e menor será o tempo de
procura do SO em busca de espaço disponível para carregar o processo.
Contudo, menor será o aproveitamento da memória, pois na última posição
sempre poderá sobrar muito espaço da unidade de alocação.
Tamanho da unidade de alocação
Este tipo de gerenciamento consiste em:
- Manter uma lista encadeada que represente a situação da memória;
- Cada nó da lista pode representar um processo na memória ou um
espaço na memória;
- Cada nó vai ter dois vizinhos, que representarão exatamente a
situação da vizinhança daquele nó na memória, ou seja:
- Se o nó representa um espaço em branco os seus vizinhos
deverão representar dois processos, pois na memória, um espaço
em branco sempre é delimitado por processos;
- Se o nó representa um processo, os seus vizinhos poderão ser
espaços em branco ou processos, dependendo da situação da
memória.
Tamanho da unidade de alocação
Firstfit: O gerenciador de memória procura na lista encadeada um nó que
represente um segmento de memória livre suficientemente grande para suportar
o processo que deve ser carregado. Então o segmento de memória é quebrado
em duas partes, uma com o processo e o que sobrar em um novo nó que
representa um segmento livre;

Nextfit: Funciona como o FirstFit, contudo quando encontra um segmento de


memória apto ele guarda a posição e na próxima vez que for chamado começa a
busca a partir daquele ponto;

Bestfit: Este algoritmo vasculha a lista toda à procura de um espaço que se


ajuste o mais perfeitamente possível ao tamanho do processo. É o algoritmo que
mais desperdiça memória dos três até aqui citados;

Worst fit: Vasculha a lista à procura do maior espaço disponível, já que tomando
o maior espaço possível, o restante do espaço ainda é grande o suficiente para
acomodar um novo processo. Na verdade, a simulação mostrou que esta
abordagem não leva a bons resultados.
Módulo 4 – Memória Virtual: Aspectos
básicos, Paginação por demanda,
Substituição de Página, Algorítmos
FIFO, Otimo e LRU
Memória Virtual
“A memória virtual consiste em recursos de hardware e software com
três funções básicas:

(i) relocação (ou recolocação), para assegurar que cada processo


(aplicação) tenha o seu próprio espaço de endereçamento, começando
em zero;

(ii) proteção, para impedir que um processo utilize um endereço de


memória que não lhe pertença;

(iii) paginação (paging) ou troca (swapping), que possibilita a uma


aplicação utilizar mais memória do que a fisicamente existente (essa é a
função mais conhecida). “
Wikipêdia, http://pt.wikipedia.org/wiki/Memória_virtual, acessado em 28/08/2010 às 1650Hs
Memória Virtual
A idéia da memória virtual é que o tamanho combinado do programa e
dos dados podem exceder o tamanho da memória física disponível.

O SO mantém essas partes do programa atualmente em uso na


memória principal e o restante em disco.

A memória virtual pode trabalhar em um sistema multi - programável,


com pedaços de programas na memória simultaneamente.

Enquanto um programa está esperando parte dele próprio ser trazido


para a memória, ele fica esperando a E/S e não pode executar.

Dessa forma a CPU pode ser dada a outro processo, como em qualquer
outro SO.
Memória Virtual
Conceitos Importantes:
Princípio da Localidade: Quando um programa que acessa uma
porção relativamente pequena do espaço endereçável em um instante
qualquer. Por este princípio, uma página acessada provavelmente será
acessada novamente.
Localidade Temporal: Se um item é referenciado, ele tenderá a ser
referenciado novamente. Exemplo: loops (instruções e dados).
Localidade Espacial: Se um item é referenciado, itens cujos endereços
são próximos a este, tenderão a ser referenciados também. Exemplo:
acesso a dados de um array.
Memória Virtual
Existem dois mecanismos principais para implementação da memória virtual: paginação e
segmentação
Na paginação a memória física é dividida em blocos de bytes contíguos
denominados molduras de páginas (page frames), geralmente com tamanho de
4 KB (arquiteturas x86 e x86-64) ou 8 KiB (arquiteturas RISC) de tamanho. Por sua vez, o
espaço de memória de um processo (contendo as instruções e dados do programa) é dividido
em páginas que são fisicamente armazenadas nas molduras e possuem o mesmo tamanho
destas.
Na segmentação existem vários espaços de endereçamento para cada aplicação (os
segmentos). Neste caso, o endereçamento consiste em um par ordenado
[segmento:deslocamento], onde o deslocamento é a posição do byte dentro do segmento.
Na arquitetura x86 (32 e 64 bits), são usadas a segmentação e a paginação[. O espaço de
endereçamento de uma aplicação é dividido em segmentos, onde é determinado um
endereço lógico, que consiste no par [segmento:deslocamento]; o dispositivo de segmentação
converte esse endereço para um endereço linear (virtual); finalmente, o dispositivo de
paginação converte o endereço virtual para físico, localizando a moldura de página que
contém os dados solicitados.
O endereço virtual é encaminhado para a unidade de gerenciamento de memória (MMU -
Memory Management Unit), um dispositivo do processador, cuja função é transformar o
endereço virtual em físico e solicitar este último endereço ao controlador de memória. A
conversão de endereços virtuais em físicos baseia-se em tabelas de páginas, que são
estruturas de dados mantidas pelo sistema operativo.

Wikipêdia, http://pt.wikipedia.org/wiki/Memória_virtual, acessado em 28/08/2010 às


1650Hs
Paginação

Muitos sistemas de memória virtual


utilizam uma técnica chamada
paginação. Em qualquer computador,
existe um conjunto de endereços de
memória que os programas podem
produzir. Um programa ao utilizar
uma instrução como MOVE REG,
1000 ele está copiando o conteúdo
do endereço de memória 1000 para REG. Tais endereços gerados por
programa são chamados endereços virtuais e formam o espaço de
endereçamento virtual. Estes endereços virtuais são guardados na
Unidade de Gerenciamento de Memória (Memory Management Unit
- MMU), um chip ou uma coleção de chips que mapeia os endereços
virtuais para os endereços físicos.
Paginação

O espaço de endereço virtual é


dividido em unidades chamadas
páginas. As unidades
correspondentes na memória
física são chamadas molduras
de páginas. Ambas têm sempre
o mesmo tamanho. No exemplo
elas têm 4Kb, porém é comum
que elas tenham tamanhos entre
512 bytes a 64 Kb.
Paginação

Com 65 Kb de endereço virtual e 32 Kb


de memória física, temos 16 páginas
virtuais e 8 molduras de páginas.
As transferências entre memória e
disco são sempre em unidades de
uma página. Contudo, essa capacidade
de mapear as 16 páginas virtuais para
qualquer uma das 8 molduras de página
não resolve o problema de que o espaço de
endereço virtual é maior que a memória física,
pois os espaços marcados com X na figura
não são mapeados. Caso um programa tente
acessar este espaço marcado com um X,
gerará uma interrupção chamada falha de página (Page Fault)
Tabela de Páginas

O mapeamento de endereços virtuais


para endereços físicos se dá quando
o endereço virtual é dividido em um
número de páginas virtuais e um
deslocamento. O número de página
virtual é usado como um índice na
tabela de páginas para localizar a
entrada para essa página virtual.
A partir da entrada da tabela de
páginas, o número da moldura de páginas é localizado, para assim formar o
endereço físico que pode ser enviado para a memória.
O propósito da tabela de páginas é mapear páginas virtuais em molduras de
páginas.
Duas questões devem ser observadas referentes às tabelas de páginas:
- A tabela de páginas pode ser extremamente grande;
- O mapeamento deve ser rápido.
Tabela de Páginas

O primeiro ponto é devido aos


computadores modernos utilizarem
endereços virtuais de 32 bits.
O segundo ponto é uma conseqüência
do fato de que o mapeamento virtual
para disco deve ser feito em cada
referência de memória. A necessidade
de um mapeamento de páginas rápido
e grande é uma limitação significativa
na maneira como os computadores
são construídos.
Tabela de Páginas

Existem vários projetos de tabela de páginas. Dentre eles destacam-se


dois:
O projeto mais simples consiste em ter uma única tabela de páginas
em uma matriz de rápidos registradores de hardware, com uma entrada
de página para cada página virtual, indexada pelo número de página
virtual. Quando um processo é iniciado, o SO carrega os registradores
com a tabela de páginas do processo. Durante sua execução as
referências não precisam ser mais requeridas. Sua vantagem é que é
simples e direto. Sua desvantagem é que é potencialmente caro se a
tabela de páginas é grande.
Outro projeto, a tabela de páginas pode estar inteiramente na
memória principal. Tudo que o hardware precisa, então, é de um único
registrador que aponta para o início da tabela de páginas, permitindo
que o mapa de memória seja alterado em uma comutação de contexto
recarregando um registrador. Tem a desvantagem de exigir que uma ou
mais referências de memória leiam entradas da tabela de páginas
durante a execução de cada instrução.
Algoritmos de Substituição de
Páginas
O algoritmo de substituição de páginas são políticas definidas para
escolher qual(is) página(s) da memória dará lugar a página que foi
solicitada e que precisa ser carregada.
Isto é necessário quando não há espaço disponível para armazenar a
nova página. Um fato que deve ser observado é que a página enquanto
carregada sofreu atualizações e precisa ser atualizada no disco.
Se ela não foi atualizada não há esta necessidade. As políticas de
substituição devem ser empregadas em sistemas que fazem uso de
memória virtual paginada no objetivo de melhorar o desempenho do
sistema computacional. Os algoritmos podem ser divididos em:
- Algoritmos com espaço fixo;
- Algoritmos de espaço variável.
A diferença está em trabalhar com um endereço fixo de memória e a
capacidade de redimensionar o tamanho da memória alocada
dinamicamente.
FIFO (First-
(First-in, First-
First-out)

É um algoritmo de baixo custo e de fácil implementação consistindo em


substituir a página que foi carregada a mais tempo na memória.
Dessa forma a primeira página a entrar é a primeira página a sair.
Esta utilização não considera a utilização da página, o que não é muito
adequado considerando desempenho do sistema.
Por esta razão apresenta uma anomalia denominada anomalia de
Belady.
Sua principal vantagem é a facilidade de implementação: uma lista de
páginas ordenadas pela idade.
LRU (Least Recently Used)

Apresenta um bom desempenho substituindo as páginas menos


recentemente usadas.
Se a página está sendo intensamente referenciada pelas instruções é
provável que ela seja novamente referenciada pelas instruções
seguintes.
De modo oposto, aquelas que não são acessadas é provável que
continuem não sendo acessadas.
Apesar de apresentar um bom desempenho, apresenta algumas
deficiências quando o padrão de acesso não é seqüencial (lista,
árvores, loops).
Dessa forma existem algumas variações como, por exemplo, o LRU-K.
Sua implementação pode ser realiza através de lista, mantendo as
páginas mais referenciadas no início. No entanto o curso de
manutenção é alto devido as constantes atualizações na lista para
manter as mais acessadas no topo da lista.
MRU (Most Recently Used)

Faz a substituição da última página acessada. Com isso é possível


explorar com mais eficiência o princípio da localidade temporal
apresentada pelos acessos.
LFU (Least Frequently Used)

Escolhe a página que foi menos acessada.


Para isto é mantido um contador de acessos associados a cada página
para que a verificação possa ser realizada.
Esta informação é zerada a cada vez que a página deixa a memória.
MFU (Most Frequently Used)

Substitui a página que tem sido mais referenciada, o oposto do LFU.


O controle também é realizado através de contador de acesso.
Seu maior problema é ignorar o princípio da localidade temporal.
Gerênciamento de memória no Linux

Nesta transparência são apresentados, com intuito de índice, alguns comandos que
permitem a visualização e gerenciamento da memoria
Free
Mostra espaços livres e ocupados
da memoria RAM e SWAP

Memstat
Lista todos os processos,
executáveis e Libraries partilhadas
que usam memoria virtual

PMap
Reporta o mapa de memória de um
determinado processo
Mapa de memória no Linux
Free Tamanho total da memória instalada
Tamanho total da memória usada
Comando free

Tamanho total da memória livre

Permite a visualização de memória RAM e SWAP ocupada e livre. No caso acima


há 249 Mb livres de memória RAM e portanto não há uso de memória SWAP.
Parámetros :
-b Visualiza os dados em bytes
-k Visualiza os dados em kilobytes
-m Visualiza os dados em megabytes
-g Visualiza os dados em gigabytes
Mapa de memória no Linux
memstat
Identifica quem está
usando a memoria
virtual alta.

Segundo o comando
man:
“memstat lists all the
processes,
executables, and
shared libraries that
are using up virtual
memory.”
Este comando tem as seguintes opções de visualização:

-w Mostra os resultados estendidos sem truncar informações em 80 colunas


Mapa de memória no Linux
memstat
A desvantagem experimentada com o comando memstat é a quantidade de
informações que ele retorna. Por este motivo pode ser avaliada a praticidade
de concatenar comandos com filtos especificos.
Por exemplo : memstat -w | grep /var/cache

O resultado obtido mostra o consumo de memoria por módulo, o nome de


cada um deles e os processos ao qual está viculado.
Mapa de memória no Linux
pmap
Este comando é específico de um
processo em particular. Ele poderá
mostrar os módulos que são carregados
nesse processo.
Para obter as informações deverá ser
usado o comando ps para que seja
visualizado o id do processo para depois
fornecé-lo como atributo do pmap.
Módulo 5 – Segmentação
WS (Working Set – Espaço de
Trabalho)
Possui a mesma política do LRU(páginas de memória mais usadas).
No entanto não realiza apenas a substituição de página, mas também
estabelece um tempo máximo que cada página pode permanecer ativa
na memória.
Dessa forma o número de páginas ativas é variável.
O WS assegura que as páginas pertencentes ao working set processo
permaneceram ativas na memória.
Dentro de uma política de busca de páginas o WS é um conjunto de
páginas que um processo está atualmente usando. Verifica-se que, para
intervalos de tempos razoáveis, o espaço de trabalho de um processo
mantém-se constante e menor que o seu espaço de endereçamento.
Se todo WS está presente na memória, o processo será executado em
poucas Page Fault1 até passar para a próxima fase do programa,
quando o WS será atualizado.
Sistemas de E/S

Uma das principais funções dos sistemas operacionais é


controlar os dispositivos de entrada e saída (E/S ou I/O). O
Sistema Operacional (SO) deve ser capaz de enviar comando
para os dispositivos, capturar interrupções e tratar erros. Deve
ainda oferecer uma interface entre os dispositivos e o restante
do sistema. Normalmente os códigos que controlam esses
dispositivos representam uma parte significativa do SO.
Sistemas de E/S

1.1. Princípios de Hardware de E/S


O Hardware é sempre visto de maneiras diferentes: os
engenheiros elétricos vêem em termos de fios, chips, etc;
enquanto os programadores vêem a interface apresentada em
forma de software. No entanto, nossa preocupação é em
entender como o hardware é programado e suas interações.

1.1.1. Dispositivos de E/S


Tais dispositivos podem ser divididos em duas categorias:

a. Dispositivos de Bloco; e
b. Dispositivos de Caractere.
Sistemas de E/S

O dispositivo por blocos


blocos, armazena informações em blocos
de tamanho fixo
fixo, cada um com seu próprio endereço, que
podem variar de 512 à 32768 bytes
bytes. A propriedade essencial
deste tipo de dispositivos é que é possível ler ou gravar
independente de todos os outros, como por exemplos os discos.
O disco é um dispositivo de blocos porque independente de
onde o braço esteja sempre é possível buscar outro cilindro e
esperar o bloco solicitado passar sob o cabeçote.

O dispositivo de caractere entrega ou aceita um fluxo de


caracteres sem considerar qualquer estrutura de bloco. Não é
endereçável, tampouco possui estrutura de busca como no
disco. Exemplos deste tipo de dispositivo são as impressoras,
placas de rede, mouses, dentre outros.
Sistemas de E/S

Este modelo proposto é utilizado como uma base para


construir, de forma independente de dispositivo algumas partes
do SO que tratam de E/S.

O sistema de arquivos
arquivos, por exemplo, lida apenas com
dispositivos de blocos abstratos e deixa a parte dependente
do dispositivo para o software de baixo nível chamado drives
do dispositivo
dispositivo..
Sistemas de E/S

1.1.2. Controladoras de Dispositivos


Os dispositivos de E/S geralmente constituem em um
componente mecânico e outro eletrônico. Assim, é possível
separar as duas partes para oferecer um projeto modular e
genérico.

O componente eletrônico é chamado Controladora ou


Adaptador de Dispositivo.
Dispositivo Nos PC’s normalmente toma a
forma de uma placa de circuito impresso que pode ser inserida
em um slot na placa mãe do computador. O componente
mecânico é o dispositivo em si.
Sistemas de E/S

A maioria dos pequenos computadores trabalha com barramento único


para comunicação entre CPU e controladoras. Grandes computadores,
como os mainframes, utilizam um modelo diferente com múltiplos
barramentos e computadores especializados de E/S chamados de
Canais de E/S que assumem parte da carga da CPU principal.
Sistemas de E/S
Cada controladora possui um conjunto de registradores que são
utilizados para possibilitar a comunicação com a CPU.
Em alguns computadores esses registradores fazem parte do
endereçamento da memória e são chamados de E/S mapeada em
memória.
Esse método ainda é muito utilizado para representar as IRQ (Interrupt
ReQuest), que é uma entrada física para o chip controlador de
instruções. Essas IRQ’s podem ser controladas por jumper’s ou
software. O chip controlador mapeia cada entrada de IRQ (normalmente
limitadas) para um vetor de interrupção que localiza o respectivo
software do serviço de interrupção.
Dessa forma o SO executa E/S gravando comando nos registradores da
controladora. Em geral, muitos dos comandos têm parâmetros que
também são carregados nos registradores das controladoras. Assim,
quando o comando é completado, a controladora gera uma interrupção
para permitir que o SO ganhe o controle da CPU e teste os resultados
da operação. A CPU obtém os resultados e o status do dispositivo lendo
1 ou mais bytes de informação dos registradores da controladora.
Sistemas de E/S

INTERRUPÇÃO
• Sinal gerado por um determinado hardware ou por software (TRAP)
que faz com que a CPU pare aquilo que está fazendo e inicie outra
atividade;

• Controladoras usam interrupções para avisar sobre o término de uma


operação de E/S;
Sistemas de E/S

Quando o DMA não está sendo utilizado, primeiro a controladora lê o


bloco da unidade serialmente, bit a bit, até que o bloco inteiro esteja
no buffer interno da controladora. Em seguida, é calculada a soma de
verificação para certificar-se de que não ocorreram erros de leitura.
Então, a controladora gera uma interrupção. Quando o sistema
operacional começa a executar, ele pode ler o bloco de disco do buffer
da controladora, um byte ou uma palavra por vez executando um laço,
com cada iteração lendo um byte ou uma palavra de um registrador da
controladora de dispositivo e armazenando-o na memória. Dessa
forma o laço programado para ler os bytes, um por vez, a partir da
controladora desperdiça tempo da CPU.
Sistemas de E/S

O DMA foi inventado para liberar a CPU desse trabalho de baixo nível.
Quando é utilizado, a CPU fornece dois itens de informação para a
controladora, além do endereço do bloco no disco: o endereço de memória
para onde o bloco deve ir e o número de bytes a transferir. A controladora
não pode copiar os dados diretamente para a memória, ela deve fazer uso de
um buffer interno, visto que mesmo iniciada a transferência para a memória
principal (MP) outros dados continuam entrando no disco; fazendo a
bufferização desses blocos entrantes é possível liberar o barramento. Quando
um bloco é bufferizado internamente o barramento não é necessário até que o
DMA inicie. Outra razão da
existência de um buffer interno é
a possibilidade de realizar a
verificação no próprio buffer antes
de mandá-lo para a MP.
Sistemas de E/S

No exemplo acima, a controladora DMA está embutida na controladora de disco.


É possível, entretanto, utilizar controladoras DMA independentes.

Depois que a controladora leu o bloco inteiro do dispositivo para seu buffer e
verificou a soma de verificação, a controladora gera uma interrupção. Assim,
quando o SO inicia, ele não precisa copiar o bloco para a memória, pois ele já
está lá.
Sistemas de E/S

• E/S Programada: CPU faz polling para verificar se o dispositivo está pronto;

• E/S orientada à interrupção: Dispositivo avisa que está pronto através de uma
interrupção;

• E/S com DMA: CPU fica livre para fazer outras coisas e trata menos
interrupções;
Princípios de E/S

1. PRINCÍPIOS DE SOFTWARE DE ENTRADA E SAÍDA (E/S)

As metas gerais do software de entrada e saída é organizar o software como


uma série de camadas, com as mais baixas preocupadas em esconder as
peculiaridades do hardware das mais altas e estas últimas preocupadas em
apresentar uma interface amigável, limpa e simples aos usuários.
Princípios de E/S

1.1. Metas do Software de E/S

Um conceito muito importante no projeto de software de E/S é


conhecido por independência de dispositivo. Isso significa que é
possível escrever um programa que faça a leitura em um disquete,
CD-Rom, disco rígido, etc sem que seja necessário modificar os
programas para cada tipo de dispositivo diferente. Cabe ao SO cuidar
dos problemas causados pelo fato de que esses dispositivos
realmente são diferentes e requerem drivers de dispositivo diferentes
para realmente gravar os dados no dispositivo de saída.

Outra meta é a atribuição uniforme de nomes, onde o nome de um


arquivo ou de um dispositivo deve ser simplesmente uma string ou um
número inteiro e não depender do dispositivo de nenhuma maneira.
Princípios de E/S

Outro fator são as transferências síncronas (bloqueio) e assíncronas


(interrupção). Em geral a E/S é assíncrona – a CPU inicia a
transferência e segue adiante para fazer outra coisa até a interrupção
chegar. Os programas dos usuários utilizam muito a transferência
síncrona - depois de um comando READ, por exemplo, o programa é
automaticamente suspenso até que os dados estejam disponíveis no
buffer. O SO tenta fazer com que as operações baseadas em
interrupção pareçam bloqueios para o usuário. Por fim, um último
fator preponderante de software de E/S são os dispositivos
compartilhados e os dedicados que faz com que o SO precise saber
como tratar uns e outros sem causar problemas.
Princípios de E/S

Todas as metas podem ser alcançadas estruturando o software de


E/S em quatro camadas:
Princípios de E/S

1.2. Manipuladores de Interrupções

O manipulador ou tratador de interrupções é uma parte do SO


que cuida do tratamento das interrupções. As interrupções
devem ficar bem ocultas dentro de um SO. Para isso, é preciso
ter cada processo que inicia uma operação de E/S bloqueado
até que a E/S tenha-se completado e a interrupção tenha
ocorrido. Para isso é necessário executar uma rotina de
tratamento de interrupção propriamente dita e chamar o
escalonador para decidir o próximo processo a executar
(Semáforos).
Gerenciamento de Memória no Linux
Muitas são as vezes que um operador de
computador se encontra com a situação de carregar
um aplicativo e este demora muito tempo na primeira
tentativa.
Isso não acontece quando existem outras tentativas.
O fato deste efeito é porque os sistemas
operacionais guardam uma sorte de cache de disco.

Cache de disco são porções da memória RAM usadas por arquivos e bibliotecas
lidos do HD que têm uma maior probabilidade de serem acessados, uma espécie
de Prefetch (usado pelo windows), o que melhora o desempenho do sistema.
Contexto de Memória Cache
A memória cache surgiu quando percebeu-se que as memórias não eram
mais capazes de acompanhar o processador em velocidade, fazendo
com que muitas vezes ele tivesse que ficar “esperando” os dados serem
liberados pela memória RAM para poder concluir suas tarefas, perdendo
muito em desempenho. Se na época do 386 a velocidade das memórias
já era um fator limitante, imagine o quanto este problema não atrapalharia
o desempenho dos processadores que temos atualmente. Para
solucionar este problema, começou a ser usada a memória cache, um
tipo ultra-rápido de memória que serve para armazenar os dados mais
freqüentemente usados pelo processador, evitando na maioria das vezes
que ele tenha que recorrer à comparativamente lenta memória RAM.
Sem ela, o desempenho do sistema ficará limitado à velocidade da
memória, podendo cair em até 95%!.
Contexto de Memória Cache
São usados dois tipos de cache, chamados de cache primário, ou cache
L1 (level 1), e cache secundário, ou cache L2 (level 2).
O cache primário é embutido no próprio processador e é rápido o
bastante para acompanhá-lo em velocidade. Sempre que um novo
processador é desenvolvido, é preciso desenvolver também um tipo mais
rápido de memória cache para acompanhá-lo.
Como este tipo de memória é extremamente caro (chega a ser algumas
centenas de vezes mais cara que a memória RAM convencional) usamos
apenas uma pequena quantidade dela.
Para complementar, usamos também um tipo um pouco mais lento de
memória cache na forma do cache secundário, que por ser muito mais
barato, permite que seja usada uma quantidade muito maior.
Conceito de PreFetch
O pré-fetch (fetch = busca) é uma busca antecipada, ou seja, uma
técnica que deixa os dados disponíveis antes de você precisar deles.
Os processadores usam inúmeras técnicas de prefetch para antecipar
qual o dado será necessário a seguir para armazená-lo na memória
cache interna (L1 e L2) antes que o processo pare aguardando a sua
disponibilidade, e com isso se ganha muito desempenho.

O Windows XP, bem como o Windows Vista, utilizam técnicas de


prefetch para abrir programas ou iniciar a máquina mais rapidamente. O
principio é o mesmo, uma vez que o Windows entendeu que você vai
usar um determinado programa, ele carrega parte desse programa na
memória antecipadamente.

Essas informações são salvas no diretório C:\WINDOWS\PREFETCH


em arquivos com a extensão .pf (de prefetch, obviamente), que são na
verdade partes dos programas principais
Administração de Hardware
dmidecode
É uma ferramenta que esvazia a tabela
DMI ( Desktop Management Information).

Esta tabela contêm todas as informações


do contexto computacional do
equipamento.

O comando citado apresenta a descrição


do hardware que compõe o sistema
computacional em uso de uma forma
humanamente compreensível.

O comando chega em numero de serie das


peças implantadas, portanto, de alguma
maneira serve para um controle de
patrimônio quando usado em redes de
vários usuários.
Administração de Hardware
dmidecode
Este recurso permite ter um raio X do
equipamento em questão. O relatório
completo pode extrapolar o espaço
disponível para mensagens no standard
output.

Por este motivo é aconselhável o uso do


parâmetro -t e o número de tipo de
periférico a ser visualizado. Para consulta
dos tipos consulte man dmidecode.

OBS.: Este comando é usado pelo


administrador portanto é necessário que
seja realizado com o prefixo sudo.
Administração de Hardware
dmidecode
Na imagem ao lado pode ser
observada a informação da Bios do
equipamento.

A imagem é resultado do comando:

sudo dmidecode --type 0


Administração de Hardware
hwinfo
Hwinfo ou hardware info serve
para sondar o hardware
existente no equipamento.

Por default produz um relatório


especifico de todas as partes
do computador, endereços,
fabricante, numero de serie e
um conjunto de informações
bem detalhadas.

Como pode ser visto na


imagem ao lado, se escolhido o
parâmetro short listará de
forma ressumida as mesmas
informações
Segurança
Conceito
Segundo Tanenbaum:

“ Muitas empresas detêm valiosas informações


guardadas cuidadosamente, as quais podem ser de
ordem técnica, comercial, financeira, legal, dentre
muitas possibilidades.”

Algumas pessoas usam os termos “segurança” e


“proteção” como se fosse a mesma coisa.
Conceito
Para evitar confusão, usaremos o termo segurança para o
problema geral e a expressão mecanismos de proteção para
designar mecanismos específicos do sistema operacional para
salvaguardar informações no computador. Contudo, a fronteira
entre esses dois termos não é bem definida. Primeiramente,
estudaremos a segurança para entender qual é a natureza do
problema. Em seguida, os mecanismos de proteção e os
modelos disponíveis que auxiliam na obtenção de segurança.

A segurança tem muitas facetas. Três das mais importantes são


a natureza das ameaças
ameaças, a natureza dos invasores e a perda
acidental de dados.
dados
Ameaças

Objetivos e ameaças à segurança


Ameaças
Confidencialidade dos dados
 A confidencialidade dos dados diz
respeito que eles fiquem disponíveis para
um grupo restrito de pessoas
predeterminado.

 Imagine uma empresa onde disponibiliza


informações com relação à salários e vida
funcional de seus empregados. Estas
informações dizem respeito do
empregado e da empresa, no setor de RH.
Ameaças
Integridade dos dados
A integridade dos dados significa que os
usuários não devem ser capazes de
modificar qualquer dado sem a permissão
do seu proprietário.

No caso da empresa citada não pode


publicar valores de salários que não sejam
os realmente pagos ao funcionário. Seja por
uma questão de publicação errada ou
alterada mal intencionadamente.
Ameaças
Disponibilidade dos dados
A disponibilidade significa que ninguém
pode perturbar o sistema para deixá-lo
inutilizavel.

 No caso da empresa citada o funcionário


deve ter seus comprovantes de salários
disponibilizados para qualquer tramitação
que for realizar.
Ameaças
Disponibilidade dos dados
A cada dia os ataques por recusa de serviço, ou
como popularmente são conhecidos como DOS
(Deny of Service) são mais comuns.

Na internet alguns elementos fazem uso deste tipo


de fraude para atrapalhar as atividades operacionais
ou econômicas de concorrentes nas empresas. Ex.:
inscrições concorrentes em licitações por meio
virtual, enquanto um faz a sua inscrição, depois satura
o local de inscrição para não ter concorrência.
Ameaças
Privacidade
 Um dos aspectos de segurança que afeta
de alguma forma o mundo informático,
porem não de forma frontal, diz respeito
da privacidade das informações.

 Esta, se verifica como proteção de


indivíduos contra o mal uso da informação
sobre eles. Ex.: investimentos das pessoas,
redes sociais com informações do núcleo
familiar, etc.
Ameaças
Invasores
 A maioria das pessoas tem um comportamento
cordial e obedece as leis; portanto, porque a
preocupação com a segurança?

 Porque infelizmente há os não tão cordiais e que


querem causar problemas (provavelmente para seu
próprio beneficio comercial)

 Na literatura sobre segurança, as pessoas que


bisbilhotam em coisas que não lhes dizem respeito
são chamados de invasores ou algumas vezes de
adversários.
adversários
Ameaças
Invasores
Os invasores agem de duas formas diferentes:

– Os invasores passivos querem apenas ler os arquivos que


não lhes estão autorizados a ler

– Os invasores ativos são mais nocivos; querem alterar


dados alheios.

 Durante um projeto de sistema seguro contra


invasores é importante ter em mente que tipo de
invasor se está tentando combater.
Ameaças
Invasores
Categorias comuns:
– Curiosidades casuais de usuários leigos
A natureza humana cria curiosidade ao que lhe é ocultado. Este tipo de
invasão no geral se denota na leitura de mails alheios ou informações dos
outros.
– Espionagem por pessoas internas
Quebras de segurança em sistemas não sempre são determinadas em
brechas descuidadas do projeto. A entrega de informações confidenciais de
dentro da instituição enfraquecem a integridade de informações.
– Tentativas determinadas para ganhar dinheiro
Alguns “profissionais” procuram o lucro alheio aproveitando o descuido
coletivo. Ex.: desvios de arredondamentos em contas bancarias para contas
alheias.
– Espionagem comercial ou militar
Uso de tecnologia para coletar informações ou provas entre partes em
conflito.
Ameaças
Perda acidental de dados
Categorias comuns:
– Defeitos de equipamento
Os equipamentos possuem uma vida útil determinada que pode
provocar a perda de informações quando esta vida útil chega próximo
do fim.
– Sinistros
Terremotos, incêndios e enchentes são elementos indesejados que
provocam a perda de informações vitais
– Mal uso de elementos físicos
A operação ou manipulação indevida destes periféricos impactam em
resultados inesperados e não agradáveis
– Distração de operador
Pode parecer engraçado, porem, não é nada agradável que um
operador corrompa ou, até, elimine informações por distração
Ameaças
Criptografia Básica
 O propósito da criptografia é levar uma mensagem
ou um arquivo, chamado de texto plano, e
criptografá-lo em um texto cifrado de tal modo que
comente a pessoa autorizada saiba convertê-lo
novamente para um texto plano. Para as pessoas
não autorizadas, o texto cifrado é apenas um
monte incompreensível de bits.

 Embora possa parecer estranho aos iniciantes na


área, os algoritmos (funções) criptográficos e de
decriptação devem ser públicos.
Criptografia por chave secreta
Substituição monoalfabética

◦A sua chave é uma cadeia de carateres que


nao se repetem e substituem a cada letra do
abecedario segundo um algoritmo definido. Ex.:

ABCDEFGHIJKLMNOPQRSTUVWYXZ
QWERTYUIOPASDFGHJKLZXCVBNM
Criptografia por chave Publica
 Os sistemas por chave secreta são eficientes, pois a
quantidade de computação necessária para
criptografar ou decriptar uma mensagem é
controlável, porem há uma grande desvantagem: o
emissor e o receptor devem, ambos, possuir a
chave secreta compartilhada. Pode até, mesmo,
obte-la fisicamente, um dando-a ao outro. Para
contornar esse problema, é usada a criptografia
por chave Pública . Esse sistema apresenta a
seguinte propriedade: chaves distintas são usadas
para criptografar e decriptogração e , dada uma
chave criptográfica bem conhecida, é praticamente
impossível descobrir a chave correspondente de
decriptação
Criptografia por chave Publica
 Um sistema de chave pública, chamado RSA, explora
o fato de a multiplicação de grandes números ser
muito mais fácil para um computador que a
fatoração de grandes números, especialmente
quando toda a aritmética está implementada com
base na aritmética de módulo e todos os números
envolvidos tem centenas de dígitos. Esse sistema é
amplamente usado no mundo criptográfico, assim
como sistemas baseados em logaritmos secretos. O
principal problema da criptografia por chave pública
é que ela é milhares de vezes mais lenta que a
criptografia simétrica.
Criptografia por chave Publica
A criptografia por chave pública funciona com todos
escolhendo um par de chaves (pública, privada) e
tornando pública a chave publica. A chave pública é a
chave criptográgica; a chave privada é a de decriptação.
Em geral, a criação da chave é automatizada,
possivelmente com uma senha escolhida pelo usuário
alimentada em um algoritmo como uma semente. Para
enviar uma mensagem secreta para um usuário, um
usuário emissor criptografa a mensagem usando a
chave pública do receptor. Como somente o receptor
tem a chave privada, apenas ele pode decriptar a
mensagem.
Assinaturas digitais
 Muitas vezes é necessário assinar documentos
digitalmente. Por exemplo, suponha que um cliente
de um banco instrua a comprar algumas ações para
ele, enviando ao banco uma mensagem pelo correio
eletrônico. Uma hora depois da ordem ser dada, as
ações despencam. O cliente, então, nega que tenha
enviado a mensagem eletrônica. O banco poderia
produzir uma mensagem eletrônica, é claro, mas o
cliente poderia alegar que o banco a forjou para
obter a comissão. Como um juiz saberia quem está
dizendo a verdade?
Assinaturas digitais
 As assinaturas digitais tornam possível assinar mensagens
eletrônicas e outros documentos digitais de modo que elas não
possam ser depois repudiadas por quem as enviou. Uma
maneira comum é, primeiro, submeter e documento a um
algoritmo de hashing de uma via que seja muito difícil de
inverter. A função hashing produz em geral um resultado de
tamanho fixo e independente do tamanho do documento
original. As funções hashing mais conhecidas e usadas são MD5
( message digest – compêndio de mensagens), que produz um
resultado de 16 bytes, a SHA(secure hash algorithm – algoritmo
seguro de hash), que produz um resultado de 20 bytes.
Assinaturas digitais

O bloco de assinatura composto pelo bloco de hash calculado é


anexado ao documento e entregue junto ao receptor.
Assinaturas digitais
 Quando o documento e o hash chegam, o receptor
primeiro calcula o hash do documento usando MD5
ou SHA, em acordo estabelecido antecipadamente.
O receptor então submete a chave pública do
emissor ao bloco de assinatura para obter o
caminho inverso.
 Desta maneira não será criptografado o documento
por completo e somente a autenticação é
criptografada, portanto o processo de criptografia e
decriptação são muito mais velozes.
Assinaturas digitais
Um método comum de fazer consiste em anexar um certificado da
mensagem, que contém o nome do usuário e a chave pública
digitalmente assinada por um terceiro confiavel.
Este terceiro é chamado de unidade certificadora, onde fazendo as
vezes de cartório publico virtual reconhece a assinatura do emissor.
Uma vez que o usuário tenha adquirido a chave pública do terceiro
confiável, ele pode aceitar certificados de todos os emissores que
empregam esse terceiro confiável para gerar seus certificados
Autoridades Certificadoras
São órgãos autorizados a emitir Certificados Digitais pelo ITI, órgão do Governo
Federal ligado à Presidência da República.
O ITI é a primeira autoridade da cadeia de certificação, a chamada AC Raiz
(Autoridade Certificadora Raiz), que emite e controla a ICP-Brasil (Infra-Estrutura de
Chaves Públicas Brasileira), modelo de Certificação Digital adotado no País.
ACs no Brasil emitem certificados tanto para pessoas físicas quanto jurídicas.
◦Serpro (Serviço Federal de Processamento de Dados);
◦ CertiSign, empresa privada especializada em certificação digital;
◦ Serasa; IMESP (Imprensa Oficial do Estado de São Paulo);
◦ PRODEMG, empresa de tecnologia de informação do Governo de Minas Gerais;
◦ Caixa Econômica Federal
◦ SINCOR (Sindicato dos Corretores de Seguros do Estado de São Paulo).
Autenticação de usuário
 Quando um usuário conecta a um
computador, o sistema operacional
normalmente busca determinar quem é o
usuário, um processo chamado de
autenticação de usuário.
 Das formas de autenticação mais comuns se
destacam:
–Uso de senhas
–Uso de objetos físicos
–Uso de biometria
Autenticação por meio de senhas
 A maneira mais amplamente usada de
autenticação é a de pedir que o usuário
digite um nome de entrada e uma senha.

 A proteção por senha é fácil de entender e


de implementar. A implementação mais
simples, mantém uma lista central de pares
(nome de entrada e de senha). O nome de
entrada é buscado numa lista e é conferida a
senha informada.
Autenticação por meio de senhas
Desvantagens
 A maioria dos crackers invadem apenas se ligando a um
computador alvo e tentando várias combinações
(nome,senha) até que encontrarem uma que funcione.
 É de fato relevante se as senhas são fáceis de adivinhar?
Sim, em 1998, uma reportagem do jornal San José Mercury
News mostrou que um residente em Berkeley havia
configurado vários computadores sem uso como
discadores de guerra,
guerra que discavam os 10.000 números
de telefone de um prefixo determinado, aleatoriamente
para não despertar a atenção da companhia telefônica.
Depois de 2,6 milhões de chamadas, ele localizou 20 mil
computadores na área da Baia, 200 dos quais não
contavam com qualquer segurança.
Autenticação por meio de senhas
Invasões
 Uma alternativa ao uso dos discadores de guerra é o
ataque de computadores pela internet. Todo computador
na internet tem um endereço IP de 32 bits usado para
identifica-lo. Esse endereço também é escrito em notação
pontuada decimal como w.x.y.z, sendo cada um dos quatro
componentes do endereço IP um decimal entre 0 e 255.
Um cracker pode testar facilmente se algum computador
tem um endereço IP e se está ligado e em execução
digitando:

Ping w.x.y.z
Autenticação por meio de senhas
Invasões
Se os endereços citados estiverem ativos e se o
comando ping não estiver desligado pelo dono do
computador de destino, o cracker saberá que tem uma
porta aberta para realizar seus testes com os nomes e
senhas que ele achar que pode combinar como senhas.
Se encontrados IP´s que respondem ao chamado do
cracker poderá ser invadido com:
telnet w.x.y.z
Autenticação por meio de senhas
Invasões
Muitos daemons de telnet derrubam uma conexão TCP depois de
algumas tentativas de accesso ao sistema sem sucesso, para
atrapalhar crackers. Os crackers respondem configurando diferentes
threads em paralelo, a partir de diferentes máquinas,
simultaneamente.
Se o sistema for invadido como superusuário o cracker pode fazer
uso de farejadores de pacotes (package sniffer). Este farejador
examina todos os pacotes de rede no sistema evidenciando
vulnerabilidades.
Autenticação por objeto físico
O segundo método de autenticação de usuários consiste em
verificar a posse de algum objeto físico e não alguma coisa que seja
informada. Para esse fim, as chaves de metal para portas são usadas
hà séculos. Atualmente, um objeto físico bastante empregado é o
cartão de plástico, que inserido em um leitor que faz parte de um
terminal ou de um computador. Em geral, o usuário não deve
somente inserir o cartão, mas, também digitar uma senha, a fim de
impedir que alguém use o cartão de forma indevida.
Autenticação por objeto físico
Existem dois tipos de modalidades de cartões de uso
freqüente:

Banda magnética
Podem abrigar em torno de 140 bytes de informações numa
fita magnética colada no verso do cartao.
Uso de chip
Possuem um circuito integrado que armazena informações que
permitem a identificação do seu dono
Autenticação por objeto físico
Cartões com chips
Os cartões que possuem chips se subdividem em duas categorias:
◦Cartões com valores armazenados
Tem uma pequena quantia de memoria usando tecnologia EEPROM
(normalmente menos de 1Kb) para permitir que o valor permaneça
mesmo depois de retirado do leitor e não tenha alimentação de energia
◦Cartões inteligentes
Nos dias de hoje tem algo como uma CPU de 8 bits a 4Mhz, 16 Kb de
ROM, 4 Kb de EEPROM, 512 bytes de RAM e um canal de comunicação
com o leitor de 9600 bps. Este tipo de cartão que tem custo de 5 à 50
dólares, são destinados para usos bancários ou de crédito.
Autenticação por biometria
Mede as características físicas do usuário, procurando particularmente, as
características únicas de cada ser sem possibilidade de duplicidade entre
dois seres diferentes.
Um sistema biométrico típico é formado por duas partes: cadastramento
e identificação
Durante o cadastramento, as características do usuário são medidas e os
resultados digitalizados. Então, os atributos significativos são extraídos e
armazenados em um registro associado ao usuário.
Durante a identificação são informados os dados do usuário e o sistema
faz as medições fazendo as comparações com os dados armazenados.

Você também pode gostar