O sistema operacional é dividido em dois modos básicos, sendo estes o modo Kernel e o modo Usuário. Esta divisão permite que os aplicativos sejam executados com segurança.

Kernel - imagem do wikipedia

Em uma divisão de camadas do sistema em auto-nível seria uma sequência como:

Modos de acesso

Os modos de acesso, referem-se aos privilégios de execução de um processo.

modo usuário

O processador, entende um conjunto de instruções. Cada instrução pode fica no modo Kernel ou no modo Usuário. Do lado do aplicativo, é possível apenas trabalhar com o conjunto de instruções que está do modo usuário.

modo Kernel

O modo Kernel, é composto pelo modo usuário e também por outro conjunto de comandos que são restritos apenas ao uso interno. Os processos, quando são executados, consultam o Kernel e verificam se o comando pertence ao modo usuário e não tem privilégios, comparado a um estagiário.

A linguagem de programação Assembly, é a linguagem que interpreta uma série de comandos e envia os comandos para o processador.

As rotinas do sistema operacional, podem fazer chamadas a respeito de x comandos.

Veja como é a definição do kernel do linux.

Questões sobre a arquitetura do Sistema Operacional

1. o que é um núcleo do sistema e quais são suas principais funções?

O núcleo do sistema é composto por um conjunto de rotinas, que estão disponíveis para ser usado pelo usuário e às suas aplicações. este núcleo, também recebe um outro nome: kernel, e as suas principais funções são:

2. o que são instrucões privilegiadas e não privilegiadas? qual a relação entre as instruções e seus modos de acesso?

O processador se comunica com o sistema operacional através de funções, que podem ser executadas básicamente em dois modos: kernel e usuário.

O modo kernel é conhecido como privilegiado por ter acesso completo ao computador, a todas as partes do hardware. Já o modo usuário, que limita as ações para garantir a segurança e não comprometer nenhuma parte do próprio sistema. neste modo, é mais difícil de um aplicativo violar a privacidade de outro.

Este mecanismo, garante que nenhuma parte da memória será violada por outro aplicativo.

3. como se faz uso deste mecanismo

O processador executa todas as operações em modo kernel, mas para isso, é necessário que as rotinas enviadas em modo usuário sejam carregadas e validadas e consideradas seguras. se algum dos passos falhar, o sistema envia uma excessão e nega a execução da operação.

Por exemplo, se desejo salvar um arquivo, uso uma linguagem de alto-nível como java, ruby e mando salvar, o sistema, em modo usuário tenta salvar, se o arquivo comprometer a integridade do so de alguma forma, então o sistema lançara uma excessão, e não permitirá a alteração. A linguagem que programou esta execução também receberá uma excessão mapeada para linguagem, que é resultado da excessão lançada pelo modo kernel.

Desta forma, foi enviado um comando do modo usuário, passado para o kernel, o qual se recusa a executar, e responde para a linguagem que deve tratar o erro.

As chamadas ao sistema são chamadas de "system calls" ou seja, chamada ao sistema.

4. como o kernel do sistema operacional pode ser protegido pelos mecanismos e modos de acesso?

Através do modo usuário. Neste modo, todos os comandos não privilegiados podem ser executados. Todos os aplicativos são executados no modo usuário, e enviam as instruções para o modo kernel que avaliam a segurança e garantia da execução protegida de cada "system call".

Este forma de chamadas identifica se o aplicativo possúi permissão para executar o comando.

5. por que as rotinas do sistema operacional possuem instruções privilegiadas?

Como é o sistema operacional que controla tudo, apenas ele tem o poder de dizer o que está certo ou errado. Assim ele mesmo é responsável por qualquer situação de risco para o hardware ou software. Usar o modo kernel, o sistema pode administrar a memória de forma transparente, e também deve saber a hora de cada evento acontecer. No modo kernel, ações delicadas são realizadas e é seguro ao máximo para não falhar.

para gerenciar uma memória, liberar o espaço de memória utilizado por um aplicativo, não deve ser uma tarefa realizada pela programação do programador, mas sim pela observação do sistema operacional. operações deste tipo, são delicadas e devem ser executadas com segurança. para evitar erros e intenções maliciosas, apenas o sistema operacional consegue fazer isso, e só realmente faz se estiver seguro.

6. o que é uma system calll e qual a sua importância para a segurança do sistema?

system call é uma chamada do sistema, como sua própria tradução indica. em uma chamada ao sistema, o sistema operacional recebe um comando e possíveis parâmetros. como resposta, recebe um outro código, que pode indicar sucesso, falha ou até mesmo o resultado do próprio comando.

no processo de receber o comando, o sistema identifica o aplicativo que fez a chamada e verifica a sua permissão para execução do comando. dada a permissão executa e retorna o resultado.

7. quais das instruções abaixo devem ser executadas apenas no modo kernel?

8. pesquise comandos disponíveis em linguagens de controle do sistema operacional.

unix

ms-dos

Um pouco mais sobre comandos

Sou um fã de comandos interativos. Eles são eficientes e auxiliam muito no desenvolvimento de software. Porém a interface de comandos com o linux é muito mais fácil e compreensível que o cmd default do windows. Para estudar e conhecer mais os comandos no linux, existe um comando chamando "man" que abre o manual de um determinado comando. Por exemplo: "man ls" vai abrir a especificação do funcionamento do comando "ls".

9. explique o processo de ativação do sistema operacional:

Quando o computador é ligado, não existe nada na memória, então o primeiro programa a ser chamado, é chamado boot, que fica gravado na memória rom.

Este programa chama um programa que testa a existência dos recursos mínimos para inicializar o sistema e se comunicar com o hardware. este sistema se chama post (power on self test), que identifica possíveis erros do hardware, como falta de memória, teclado etc. Se tudo estiver ok, é verificado a existência de algum sistema operacional instalado em algum dispositivo. Quando encontrado ele chama procura por um espaço chamado boot sector, que contém as informações iniciais para carregar o sistema operacional na memória.

compare as arquiteturas monolítica e de camadas. quais as vantagens e desvantagens?

A primeira, é composta por módulos que se comunicam livremente e a segunda é arquitetada em camadas, classificando as funções em cada uma destas camadas.

A arquitetura monolítica funcionou muito bem até o sistema operacional se tornar complexo. Como foi evoluindo muito rápido, também se tornou complexo e de difícil manutenção.

Em 1968 foi programado o primeiro sistema operacional em camadas implementando este conceito. E como vantagem, este sistema consegue isolar as funções do sistema operacional e cria uma hierarquia dos modos de acesso. isso é segurança.

quais as vantagens do modelo de máquina virtual?

Permite executar uma instrução sobre um computador virtual, desta forma não prejudica o hardware real. Sendo que uma computador real pode conter várias máquinas virtuais, qualquer comando não prejudica as outras máquinas virtuais, apenas a que está em execução.

como funciona o modelo cliente-servidor na arquitetura micro-kernel? quais as vantagens e desvantagens?

Funciona como um sistema de chamadas cliente-servidor. o cliente, que pode ser um usuário ou recurso do sistema, faz uma chamada e o sistema verifica a possibilidade de execução ou não do comando.

Como vantagem, o sistema desabilita e recusa as chamadas comprometedoras e disponibiliza mais recursos para as que possuem.

Como desvantagem, o sistema têm problemas com acesso a certas partes diretas do hardware, que seriam necessárias.

Por que a programação orientada a objetos é o caminho natural para o projeto de sistemas operacionais?

Por que a vida é orientada a objetos. O hardware e o software também serão. Em outras palavras, todas as coisas podem ser representadas através de objetos e suas propriedades, atributos, família, tipo, escala, recurso etc. Através deste tipo de programação é possível simplificar os módulos programaveis e reutilizar os recursos existentes.

ps: As aulas foram ministradas pelo professor Marcelo Riedi e as considerações são minhas usando a apostila do professor como base.

blog comments powered by Disqus
Compartilhar → Twitter Facebook Google+


Olá, sou o Jônatas Davi Paganini e esse é meu blog. Sou programador, tenho alguns projetos no github e escrevo livremente aqui no ideia.me.

Veja minhas talks ou conecte-se via twitter / github / instagram / facebook / linkedin / soundcloud / strava / meetup.