Arquitetura de Computadores
Prof. Dr. Saulo Amui
O que é um Sistema Operacional?
• Um programa que atua como um intermediário entre um usuário de um computador e o hardware do
computador.
• Objetivos do sistema operacional:
– Executar programas do usuário e facilitar a solução dos problemas do usuário.
– Tornar conveniente o uso do sistema de computação.
• Possibilita o uso do hardware do computador de maneira eficiente.
Estrutura do Sistema de Computação
• Hardware – oferece recursos de computação básicos
– CPU, memória, dispositivos de E/S
• Sistema operacional
– Controla e coordena o uso do hardware entre diversas aplicações e usuários
• Programas de aplicação – definem as formas como os recursos do sistema são usados para solucionar os
problemas de computação dos usuários
– Processadores de textos, compiladores, navegadores Web, sistemas de banco de dados, jogos
• Usuários
Componentes de um Sistema de
Computação
Usuário 1 Usuário 2 Usuário 3 Usuário n ...Programas de Sistema e Aplicativos
Sistema Operacional
Hardware
Compilador Montador Editor de Texto Sistema de Banco de Dados ...
Definição do Sistema Operacional
• SO é um escalonador de recursos
– Gerencia todos os recursos
– Decide entre solicitações em conflito para uso eficaz e justo dos recursos
• SO é um programa de controle
– Controla a execução dos programas para impedir erros e uso indevido do computador
Entendendo o Sistema Operacional
• É o Sistema Operacional que controla todos os recursos do computador, e fornece a base sobre a qual os
programas aplicativos são escritos.
• SO pode ser definido como um gerenciador dos
recursos que compõem o computador (processador, memória, I/O, arquivos, etc).
Entendendo o Sistema Operacional
• Os problemas centrais que o sistema operacional deve resolver são:
– o compartilhamento ordenado,
– a proteção dos recursos a serem usados pelas aplicações do usuário
Entendendo o Sistema Operacional
• A função do Sistema Operacional é a de fornecer um esquema de alocação dos recursos: processadores,
memórias, dispositivos de entrada e saída entre os vários processos que competem pela utilização de tais recursos:
Entendendo o Sistema Operacional
• Um processo é basicamente um programa em execução divididos em etapas:
– 1.Código executável e dados referentes ao código; – 2. Pilha de execução;
– 3. Valor dos registradores do hardware;
– 4. E o conjunto de informações necessárias a execução do programa.
Entendendo o Sistema Operacional
• Esses processos competem aos recursos, e o SO deve garantir a cada processo:
– 1. Uma quantidade de memória; – 2. O uso da CPU;
– 3. O acesso aos dispositivos; – 4. O controle do fluxo de dados;
Entendendo o Sistema Operacional
• O SO não permite que um processo altere os dados de um outro arquivo. Um SO deve ter:
– Consistência - tempo necessário para realizar as tarefas; – Flexibilidade - permite a inclusão de novos periféricos;
– Portabilidade - pode ser executado em vários computadores.
A seleção do SO a ser usado varia de acordo com o ambiente para o qual foi projetado.
Entendendo o Sistema Operacional
• O Sistema Operacional deve ser adaptado às
características do hardware assim como as linguagens de programação e as ferramentas do usuário final
devem ser adaptados ao Sistema Operacional.
• Conhecer o Sistema Operacional pode ajudar a resolver alguns problemas que a princípio nos parecem
complicados. Além disso, possui utilitários especiais para a formatação de discos, listagens em vídeo/
impressora, cria- ção/copia/exclusão e alterações de arquivos.
Tipos
de
serviços
oferecidos
• A maioria dos Sistemas Operacionais oferece um conjunto básico de serviços, sempre necessários:
° sistema de arquivos: criar, escrever, ler, apagar e renomear arquivos ° carregar um programa na memória principal e executá-lo / abortá-lo ° acesso aos periféricos: alocação, leitura, escrita e liberação
° monitoração do uso de recursos
• ex.: identificação de gargalos como pouca memória ou disco muito lento
° contabilização de recursos
• ex.: quanto tempo foi gasto na CPU por um programa, qual o espaço em disco ocupado por determinado usuário, quantas páginas foram impressas no mês por determinado usuário
° fornecer informações sobre o estado do sistema
Tipo
de
serviços
oferecidos
• Para melhor aproveitar o hardware, diversos usuários e programas podem compartilhar o computador, mas deve haver uma proteção entre eles, senão:
° um usuário envie dados pra impressora no meio da impressão de outro ° apagar arquivos ou cancelar programas de outros usuários
• Se não houver segurança na manutenção dos dados e
execução dos programas, os usuários não utilização o SO!
° o SO deve garantir que cada usuário possa trabalhar sem sofrer interferência danosa dos demais
° o SO deve prover mecanismos de proteção entre os usuários e programas
SO
na
Visão
do
Usuário
• A visão que o usuário tem do SO é a forma como ele percebe o sistema
• Essa imagem é definida pela interface através da qual o usuário acessa os serviços do SO
• Esta interface é formada por ° chamadas de sistema
Chamadas
de
Sistema
• Programas solicitam serviços ao SO através das
chamadas de sistema, semelhantes a sub-rotinas
• Uma chamada de sistema:
° recebe parâmetros passados pelo programa ° transfere a execução para o SO
° seu retorno retoma a execução do programa a partir da instrução que segue a chamada
Chamadas
de
Sistema
• Em uma linguagem de alto nível, elas ficam
“escondidas” dentro da biblioteca utilizada pelo compilador (API)
• As sub-rotinas da biblioteca é que chamam o sistema:
° ex.: uma função que acesse o terminal, ex.: printf(), exige uma chamada de sistema
→ lembre-se que o acesso aos periféricos é feito (normalmente) pelo SO
O
núcleo
(kernel)
do
SO
• Kernel é a parte do SO responsável por implementar as chamadas de sistema
• Os principais componentes do kernel são:
° Gerência de processador ° Gerência de memória ° Sistema de arquivos
A
complexidade
do
kernel
SO
implementado
em
camadas
• Por conta desta complexidade, muitos Sistemas Operacionais são implementados em camadas:
° o microkernel implementa os serviços mais básicos
associados ao SO
• ex.: gerência de processador, alocação de memória, drivers
° o kernel propriamente dito implementa os demais serviços em cima do microkernel
• ex.: sistema de arquivos, memoria virtual, protocolos de comunicação
Os
utilitários
do
SO
• São programas de sistema, providos pelo SO mas executados fora (em cima) do kernel
• Implementam tarefas básicas para a utilização do sistema e são confundidos com o próprio SO
• Exemplos de utilitários:
° para manipulação de arquivos: listar, copiar, renomear, imprimir ° para obter informações do sistema: hora, data, temperatura,
usuários logados, espaço de armazenamento livre
° historicamente, editores de texto e compiladores também eram
utilitários do SO, mas como existem muitas alternativas, hoje em dia são distribuídos separadamente
• Os utilitários utilizam chamadas de sistema (do kernel) para efetuar a operação solicitada pelo usuário
Interpretador
de
Comandos
• É o utilitário mais importante do SO
° é ativado sempre que o usuário inicia sua sessão de trabalho (quando ele “loga” no sistema)
• Sua tarefa:
° receber comandos do usuário e executá-los
° recebe as linhas tecladas, analisa seu conteúdo e executa o comando teclado
• Exemplo de comando: “listar diretório”
° no Linux o comando é ls
° no Windows o comando é dir
→ mesmo que “listar diretório” seja feito por meio de uma GUI, ele envolve as mesmas chamadas de sistema
Comandos
do
Interpretador
• É uma questão de projeto decidir quais comandos serão aceitos pelo interpretador, exemplos:
° ls, cd, find, cat, touch, rm, mkdir ° grep, sed, awk
• Em geral, estes comandos são executados mais
rapidamente, pois não exigem a carga e execução de outro programa
→ OBS.: demais comandos (não inclusos no
interpretador) podem ser implementados através de
Outros
Interpretadores
de
Comandos
• Porém, o interpretador de comandos não precisa ser um
programa de sistema
• Pode-se construir outros interpretadores e instalar
aquele que preferir, exemplos: ° Linux: bash, shell, ksh, csh ° Windows: cmd, cygwin, putty
→ cada usuário utilizaria aquele que for mais apropriado à sua experiência ou ao trabalho a ser desenvolvido
Interface
de
Linha
de
Comando
(CLI)
• O interpretador, acessado via uma Interface de Linha de Comando (no inglês, CLI), consiste numa espécie de tradutor entre o sistema operacional e o usuário • Permite a execução de
comandos direto no prompt do sistema ou através de scripts (arquivos de texto, contendo uma sequência de comandos)
Interface
Gráfica
com
o
Usuário
(GUI)
• Tudo o que foi dito sobre CLI é igualmente válido quando o Sistema
Operacional oferece uma GUI
• A única diferença está na comodidade para o
usuário, que passa a usar ícones, menus e mouse no lugar de digitar comandos textuais
Interface
Gráfica
com
o
Usuário
(GUI)
• Na maioria das vezes a GUI é o que as pessoas entendem por “sistema operacional”
→ mas não se esqueça: um SO possui um kernel e um
interpretador de comandos (CLI ou GUI)
• No dia a dia, o usuário trabalha com programas
distantes do SO, como editores de texto, compiladores, aplicativos, jogos
° assim, o SO propriamente dito fica escondido, longe da percepção do usuário
GUI
ou
CLI?
• À medida que o usuário ganha experiência com o
sistema, passa a julgar as interfaces pela sua
flexibilidade e capacidade de realizar tarefas mais complexas
• Tarefas repetitivas comumente são melhor
desempenhadas na CLI, com a construção de um script para automatizar a tarefa, exs.:
° converter vários arquivos para PDF
° obter uma grande lista de arquivos da Internet
° gerar gráficos a partir de centenas de arquivos