Operating Systems Protection Mechanisms Flashcards
Objetos vs Sujeitos
Objetos → memória, dispositivos de I/O (discos, redes, impressoras, monitores), ficheiros, bibliotecas dinâmicas,
entre outros.
Sujeitos → Utilizam os objetos, são constituídos pelos: processos, utilizadores, entre outros.
dois mecanismos de proteção
- Separação → impedir o acesso arbitrário de sujeitos a objetos;
- Mediação → controlar o acesso de sujeitos a objetos.
Separação - o que consiste?
Existe uma cooperação entre o sistema operativo e o hardware para garantir a separação.
De forma a impedir o acesso arbitrário é preciso separar os objetos dos sujeitos! Para isto, os processadores funcionam
em dois modos:
1. Modo núcleo (kernel mode) → é o modo no qual corre o núcleo do SO. Tem acesso a todos os objetos ou
recursos do sistema, ou seja, pode executar todas as instruções do processador sem restrições.
2. Modo utilizador (user mode) → Neste modo, o software não pode aceder arbitrariamente a objetos ou
recursos do sistema. O acesso aos recursos é controlado pelo SO. Quando o processador está em modo de
utilizador, este ignora ou lança uma exceção se instruções privilegiadas forem chamadas (in/out, sti/cli, hlt).
Para que servem System Calls?
No entanto, programas a correr em modo de utilizador precisam de comunicar com recursos privilegiados (escrever
monitor, ler do teclado e rato). Para isso o software utiliza System Calls, que consiste em chamar um procedimento do
núcleo que executa a funcionalidade pretendida.
Para que servem as Interrupção de Software e porque precisamos delas?
Surgem duas dificuldades:
1. O código do núcleo corre num modo diferente e mais privilegiado, logo uma chamada ao sistema tem de
forçar o processador a mudar de modo;
2. A memoria usada pelo núcleo é invisível para o processo em causa, logo sob o ponto de vista do processo que
faz a chamada ao sistema não existem endereços de procedimentos do núcleo para onde ele possa executar um
salto.
A solução:
Interrupção de Software → Força o processador a mudar para o modo núcleo e a executar uma rotina de tratamento
de interrupção.
Proteção de memória (faz parte de que mecanismo?)
proteção.
Algumas ideias chaves:
a. Acessos à memória não podem ser realizados através de system calls devido a problemas de performance
b. Como é que um processo em user mode não altera a memoria de outros processos?
c. Processo pode alterar o código e assim alterar o comportamento do kernel ou de outro processo.
Vários tipos de separação?
- Separação física → Diferentes processos usam dispositivos distintos. (impressoras para diferentes níveis de
segurança, bases de dados separadas de acordo com as sua tabelas) - Separação temporal → Processo com requisitos de segurança diferente são executados em intervalos de tempo
diferentes. - Separação lógica → Os processos correm sob a ilusão de que estão sozinhos na máquina
- Separação criptográfica → A informação é cifrada de modo a ficar inacessível a quem não tem permissão para
ler.
Explicar Segmentação
Explicar Segmentação
A memória (ou espaço de endereçamento) de um programa é dividida em partes lógicas denominadas por segmentos.
Isto permite que os segmentos sejam guardados em qualquer ponto da memória física e sejam realocados para outras
áreas (até mesmo em disco).
Sendo os tipos de segmentos:
- Segmentos de código ou texto → que contem o código binário;
- Segmento de dados → contém variáveis e estruturas de dados globais;
- Segmento de pilha → contém a pilha/stack, que inclui variáveis locais, parâmetros e funções
- Segmento de heap → contém a heap, ou seja, memória reservada dinamicamente pelo programa.
Qualquer espaço de memória pode ser considerado abstratamente como uma tabela.
Em que cada posição (byte) é acedida através de um endereço.
Endereço → dois componentes (nome do segmento e o deslocamento)
Exemplo: endereço [dados:546] diz respeito à 547º posição de memória do segmento de dados.
Este formato permite que os segmentos sejam colocados em qualquer posição da memória RAM.
O nome do segmento é uma abstração que implica a tradução para um endereço de memória física (que é um número)
sempre que o segmento esteja aí colocado.
A abstração do endereço composto exige uma tabela em memória física que guarde informação sobre onde está cada
segmento em cada momento:
a. O seu inico em memória;
b. A sua localização em memória secundária.
Existe então, a Tabela de Tradução de Segmentos (translation table) que é gerida pelo SO e pela unidade de gestão
de memória (MMU). Que garante:
a. Permite que um processo aceda a um segmento apenas se esse segmento estiver na sua tabela.
b. Mantem informações dos access rights (rwx) para o segmento
c. Cada acesso a memória tem de passar pelo SO/MMu para que os access rights sejam confirmados.
d. Pode existir diversos segmentos com diferentes access rights
Isto garante que um processo:
1. Não pode aceder (ler,escrever,executar) à memória de outros processos ou SO;
2. Só pode aceder a um segmento de memória no modo indicado na tabela de tradução de segmentos, que é
controlada pelo SO.
Problemas Segmentação
A segmentação apresenta as seguintes dificuldades:
a. Sempre que há um acesso à memória é preciso verificar se este ultrapassa o fim do segmento, o que constitui
uma operação relativamente ineficiente dado o tamanho do segmento ser variável.
b. A heterogeneidade dos tamanhos dos segmentos causa fragmentação da memória.
Paginação o que é?
Cada parte do programa é denominada por página e todas as páginas têm o mesmo tamanho. (valor típico 4KB).
Os endereços de têm o seguinte formato [página,deslocamento].
As páginas não têm unidade lógica
Resolve os problemas da segmentação da seguinte forma:
a. A verificação do fim de página é trivial, porque todas as páginas têm o mesmo tamanho e este é uma potência
de 2. Logo a verificação faz se com um simples e-lógico.
b. As páginas são homogéneas, a memória física pode ser dividida num conjunto de molduras de página (page
frames)
A tradução entre endereços compostos e endereços de memória física é feita pela MMU com recurso à tabela de
tradução de páginas mantidas pelo SO. Existe uma tabela por cada processo, que contem informação sobre como a
página pode acedida (r,w,x).
Segmentação + Paginação
- Um programa (binário ou assembly) usa endereços lógicos compostos por um seletor de segmento e um
deslocamento. - Quando existe um acesso a memória, os endereços lógicos são convertidos pela MMU para endereços
lineares, que são endereços da memória virtual dividida em páginas de 4 KB - Os endereços lineares são convertidos pela MMU para endereços físicos, ou seja, endereços da RAM. O
que gera uma exceção denominada por page fault, caso a página esteja em memória secundária, estando a
rotina de tratamento da exceção correspondente encarregada de carregar a página em memória física.
CPL (current privilegie level) e tables
Os seletores de segmentos contêm 2 bits para indicar o CPL (current privilegie level) do CPU, apenas são usadas:
0 → kernel mode
3 → User mode
A informação sobre os segmentos é guardada em duas tabelas:
- GDT (Global descriptor table) → para o sistema todo
- LDT (Local descriptor table) → Para cada processo
Controlo de acesso
Objetos são acedidos por sujeitos (users, groups, processos)
Depois da separação ainda precisamos de garantir que apenas as ações autorizadas são realizadas nos objetos, para
isso surgiu o access control.
Access control está preocupado com a validação dos access rights dos sujeitos quando realizam operações nos
recursos do sistema.
Monitor de referência
Componente abstrato.
Com os seguintes cores:
1. O acesso dos sujeitos aos objetos é mediado pelo monitor. Que aplica a política de controlo de acessos.
2. As decisões são baseadas nas bases de dados de controlo de acesso. Esta base de dados contém informação
sobre sujeitos, objetos e permissões de acesso.
3. Dados sobre as decisões tomadas são guardados para auditoria futura.