terça-feira, 27 de janeiro de 2015

Aula 2 - Visão Geral


Visão Geral

Histórico

Década de 1940

·       Surgimento dos primeiros computadores movidos a válvulas.
·       Computadores gigantes, de baixo processamento.
·       Não havia Sistema Operacional
·       Operados manualmente.

Década de 1950

·       Substituição de válvulas por transistores;
·       Criação das memórias magnéticas (fitas);
·       Surgimento das primeiras linguagens de programação: Fortran e Assembly;
·       Programas deixaram de serem feitos no hardware, facilitando o desenvolvimento de programas;
·       Execução de Jobs (tarefas) em cartões perfurados;
·       Posteriormente iniciou-se o sistema em lote para executar vários Jobs (Sistema Batch).

Figura 1 -  Sistema Btach



Estrutura de um Job


Figura 2 - Estrutura de um job.

Década de 1960

·       Surgem os microprocessadores, minicomputadores;
·       O circuito integrado substitui o transistor;
·       Criação dos discos magnéticos para gravação de dados, substituindo as fitas magnéticas;
·       Criação do Sistema Operacional OS/360, da IBM;
·       Surgimento do Sistema Operacional UNIX.
·       Surgimento das técnicas utilizadas até hoje nos SOs tais como:
o   Multiprogramação: Execução de vários programas.
o   Spooling: Alteração na ordem de execução das tarefas;
o   Time-Sharing: (Tempo Compartilhado) utilização de cada programa em pequenos intervalos de tempo.


Figura 3 - Multiprogramação

Década de 1970

·       Componentes LSI e VLSI barateiam o custo dos equipamentos.
·       Em 1971 a INTEL produz o primeiro microprocessador, o Intel 4004. Três anos depois, fabrica o Intel 8080 utilizado no Altair.
·       Em 1976 são fundadas as empresas Apple e Microsoft.
·       O Multiprocessamento possibilitou a execução de mais de um programa simultaneamente.
·       Difusão das redes WANs.

Década de 1980

·       Microcomputadores e minicomputadores se firmam no mercado.
·       Criação do PC e do SO MS-DOS. O primeiro PC utilizava o processador Intel 8088 de 16 bits e o sistema operacional DOS.
·       No final da década de 80, surgem os protocolos de rede e as primeiras redes locais (LAN).
·       Em virtude do surgimento das LANs, são criados os primeiros SOs de rede.

Década de 1990

·       Evolução dos componentes VLSI para tecnologia ULSI. Com isso os processadores e memórias ficam cada vez mais velozes e baratos, além de serem memores;
·       Sistemas multimídia, sistemas especialistas, inteligência artificial e redes neurais fazem com que aumente cada vez mais o processamento e armazenamento de dados;
·       Consolidação dos SOs baseados em interfaces gráficas.

Década de 2000

·       Arquiteturas paralelas.
·       Sistemas Operacionais mais intuitivos e com novas interfaces.
·       Linguagens naturais com sons e imagens;
·       Sistemas Operacionais proativos.
·       Processamento distribuído.
·       Evolução e consolidação das redes sem fio – wireless.
·       Novas arquiteturas de processadores de 64 bits.

Tipos de Sistemas Operacionais

Os tipos de sistemas operacionais, de maneira geral são definidos como monoprogramáveis ou monotarefa, multiprogramáveis ou multitarefa e sistemas com múltiplos processadores.
Classificação
·       Aplicativos
o   Monotarefa
o   Multitarefa
·       Usuários
o   Monousuário
o   Multiusuário
·       Processadores
o   Monoprocessador
o   Multiprocessadores
·       Política de Escalonamento
o   Lote
o   Tempo Compartilhado
o   Tempo Real
·       Rede
o   Gerencia o compartilhamento dos recursos na rede.
o   Usuário deve saber a localização da rede.
·       Distribuído
o   Ambiente computacional virtual
o   Usuário não precisa saber da localização do recurso na rede.
·       Embarcados
o   Inseridos em hardware com recursos limitados.
·       PC
o   Uso doméstico.
·       Servidor
o   Maior robustez
Sistemas Operacionais de Grande Porte
Estão ressurgindo como sofisticados servidores WEB, como servidores para sites de comércio eletrônico e, ainda, como servidores para transações entre empresas.
São orientados para o processamento simultâneo de muitos Jobs que precisam de grandes quantidades de E/S.
Oferecem três tipos de serviços:
·       Em lote (batch).
·       Processamento de transações
·       Tempo compartilhado.
Sistemas Operacionais de Rede
Permitem que um host compartilhe seus recursos, como uma impressora ou diretório, com os demais hosts da rede. Um exemplo deste sistema são as redes locais, onde uma estação pode oferecer serviços de arquivos e impressão para as demais estações da rede, dentre outros serviços.
Sistemas Operacionais de Servidores
        Servem a múltiplos usuários de uma vez em uma rede e permitem-lhes compartilhar recursos de hardware e de software.
        Podem fornecer serviços de impressão, serviços de arquivo ou serviços de Web.
        Provedores de acesso à Internet utilizam várias máquinas servidoras para dar suporte a seus clientes.
        Sites Web usam servidores para armazenar páginas Web e tratar requisições que chegam.
Sistemas Operacionais de Multiprocessadores
        É a conexão de múltiplas CPUs em um único sistema.
        Podem ser:
       computadores paralelos,
       multicomputadores
       multiprocessadores.
        Possuem aspectos especiais de comunicação e conectividade.
Sistemas Operacionais de PC
        Seu trabalho é oferecer uma boa interface para um único usuário.
        São amplamente usados para processadores de texto, planilhas e acesso à Internet.
        Exemplos: Windows,  Mac e Linux.
Sistemas Operacionais de Tempo Real
        Esses sistemas são caracterizados por terem o tempo como um parâmetro fundamental.
        Robôs em uma linha de produção.
        Foguetes ou usinas nucleares
Sistemas Operacionais Embarcados
        São os sistemas para os aparelhos de mão.
        Possuem restrições de tamanho, memória e consumo de energia.
Sistemas Operacionais de Cartões Inteligentes
        Dispositivos do tamanho de cartões de crédito que contêm um chip de CPU.
        Possuem restrições severas de consumo de energia e de memória.
        A ROM do cartão inteligente contém um interpretador para a máquina virtual Java (Java Virtual Machine - JVM).
        Algumas aplicações java são carregadas no cartão e interpretadas pelo JVM.

Sistemas Monoprogramáveis / Monotarefa

·       Voltados para execução de um único programa por vez..
·       Permitem que o processador, a memória e os periféricos permaneçam exclusivamente dedicados à execução de um único programa.
·       O sistema monotarefa permite que todos os recursos do sistema fiquem exclusivamente dedicados a uma única tarefa.
Pontos negativos
·       Ociosidade da CPU
·       Subutilização da memória
·       Periféricos dedicados.

Sistemas Multiprogramáveis / Multitarefa

·       Recursos computacionais são compartilhados entre diversos usuários e aplicações.
·       O Sistema Operacional precisa gerenciar o acesso concorrente aos recursos.
·       Redução de custos proporcionada pelo compartilhamento de recursos.

Sistemas Batch

·       Não exige a interação do usuário.
·       Todas as entradas e saídas da aplicação são implementadas por algum tipo de memória secundária, geralmente arquivos em disco.

Sistemas de tempo Compartilhado

·       Diversos programas são executados a partir da divisão do tempo do processador em pequenos intervalos, denominados, fatia de tempo (time-slice).
·       O sistema cria para cada usuário um ambiente de trabalho próprio, dando a impressão de que todo o sistema está dedicado exclusivamente a ele.
·       Permitem a interação dos usuários com o sistema através de terminais que incluem vídeo, teclado e mouse.

Sistemas de Tempo Real

·       O tempo de processamento deve estar dentro de limites rígidos, que devem ser obedecidos, caso contrário poderão ocorrer problemas irreparáveis.
·       Não existe a ideia de fatia de tempo. Um programa utiliza o processador o tempo que for necessário ou até que apareça outro mais prioritário.
·       Estes sistemas são aplicados em aplicações de controle de processos, como no monitoramento de refinarias de petróleo, controle de tráfego aéreo, de usinas termoelétricas e nucleares ou em qualquer aplicação onde o tempo de processamento é fator fundamental.

Sistemas com Múltiplos Processadores

·       Possuem dois ou mais processadores interligados e trabalhando em conjunto.
·       Permite que vários programas sejam executados ao mesmo tempo ou que um mesmo programa seja subdividido em partes para serem executadas simultaneamente em mais de processador.
·       Benefícios são a Escalabilidade, Disponibilidade e balanceamento de carga.
Escalabilidade: é a capacidade de ampliar o poder computacional do sistema apenas adicionando novos processadores.
Disponibilidade: É a capacidade de manter o sistema em operação mesmo em casos de falhas.
Balanceamento de carga: É a possibilidade de distribuir o processamento entre os diversos processadores da configuração a partir da carga de trabalho de cada processador, melhorando assim, o desempenho do sistema como um todo.

Sistemas fortemente acoplados

Existe apenas uma memória principal sendo compartilhada por todos os processadores e dispositivos de entrada/saída.

Sistemas fracamente acoplados

Caracterizam-se por possuir dois ou mais sistemas computacionais conectados através de linhas de comunicação. Cada sistema funciona de forma independente, possuindo seu próprio sistema operacional e gerenciando seus próprios recursos como CPU, memória e dispositivos de entrada/saída.



ATIVIDADES

1.     Quais os tipos de sistemas operacionais existentes?
2.     Por que dizemos que existe uma subutilização de recursos em sistemas monoprogramaveis?
3.     Qual a grande diferença entre sistemas monoprogramáveis e sistemas multiprogramáveis?
4.     Quais as vantagens dos sistemas multiprogramáveis?
5.     Um sistema monousuário pode ser um sistema multiprogramável? Dê um exemplo.
6.     Quais são os tipos de sistemas multiprogramáveis?
7.     O que caracteriza o processamento batch? Quais aplicações podem ser processadas neste tipo de ambiente?
8.     Como funcionam os sistemas de tempo compartilhado? Quais as vantagens em utilizá-los?
9.     Qual a grande diferença entre sistemas de tempo compartilhado e tempo real? Quais aplicações são indicadas para sistemas de tempo real?
10. O que são sistemas com múltiplos processadores e quais as vantagens em utilizá-los?
11. Qual a grande diferença entre sistemas fortemente acoplados e fracamente acoplados?
12. O que é um sistema fracamente acoplado? Qual a diferença entre sistemas operacionais de rede e sistemas operacionais distribuídos?
13. Quais os benefícios de um sistema com múltiplos processadores em um computador pessoal?
14. Qual seria o tipo de sistema operacional recomendável para uso como servidor de aplicações em um ambiente corporativo?

15. Qual seria o tipo de sistema operacional recomendável para executar uma aplicação que manipula grande volume de dados e necessita de um baixo tempo de processamento?

quinta-feira, 8 de janeiro de 2015

Aula 1 - Apresentação da Disciplina



Apresentação da Disciplina


·       Apresentação Individual / Expectativa
·       Motivação por um Curso Superior
·       Os 5%
·       O Valor do Conhecimento
·       O Trem
·       Dificuldades
·       PEA
·       ATPS
·       O Motor de um Carro

Ementa

·       Conceitos Básicos de Sistemas Operacionais: Processos, Organizações de Sistemas Operacionais, Chamadas de Sistema.
·       Gerência do Processador: Estados do Processo, Escalonamento
·       Entrada/Saída: Dispositivos controladores, Softwares de E/S, Interrupções, dependência e independência.
·       Gerência de Memória: Partições fixas e variáveis, paginação, segmentação, memória virtual.

Objetivo

·       Compreender a Estrutura de um Sistema Operacional e seus principais subsistemas. Conhecer o conceito de processos e threads,
·       Organização e Gerenciamento de memória, processador e sistemas de arquivos

Conteúdo Programático

·       Conceitos Básicos de sistemas Operacionais, uma visão geral;
·       Sistemas Monoprogramáveis / Monotarefa;
·       Sistemas Monoprogramáveis / Multitarefa.
·       Sistemas com Múltiplos processadores
·       Sistemas Fortemente acoplados
·       Sistemas fracamente acoplados
·       Estrutura do Sistema Operacional
·       Processo
·       Modelo de processo, estados, mudanças de Estados,
·       Subprocesso e Thread
·       Tipos de processos
·       Comunicação entre processos
·       Especificação de concorrência em programas
·       Problemas de compartilhamento de recursos
·       Problemas de sincronização
·       Deadlock
·       Gerência de Processador
·       Critérios de Escalonamento
·       Escalonamento Não-preemptivo
·       Escalonamento preemptivo
·       Escalonamento com múltiplos processadores
·       Gerência de Memória
·       Alocação Contígua Simples
·       Alocação Particionada
·       Memória Virtual
·       Segmentação, segmentação com paginação
·       Proteção
·       Compartilhamento de Memória
·       Sistema de Arquivos
·       Organização de Arquivos
·       Métodos de Acesso, operações de I/O e Atributos
·       Diretórios
·       Alocação de espaço em disco
·       Proteção de acesso
·       Implementação de Cachês
·       Gerência de dispositivos
·       Operações de I/O
·       Subsistemas de I/O
·       Device Drivers
·       Controladores
·       Dispositivos de Entrada e Saída.

Procedimentos Metodológicos

·       Aulas Expositivas
·       Exercícios Práticos
·       Estudos em Grupo
·       Seminários
·       Atividades em laboratório de hardware

Bibliografia

MACHADO, Francis Berenger; MAIA, Luiz Paulo. Arquitetura de Sistemas Operacionais. 1ª ed. Rio de Janeiro: LTC – Livros Técnicos e Científicos, 2008
TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 2ª Ed. São Paulo: Pearson – Prentice Hall, 2008
SILBERSCHATZ, Abraham. Fundamentos de Sistemas Operacionais. 6ª ed. Rio de Janeiro: LTC – Livros Técnicos e Científicos, 2004



INTRODUÇÃO

“Não basta ensinar ao homem uma especialidade, porque se tornará assim uma máquina utilizável, mas não uma personalidade. É necessário que adquira um sentimento, um senso prático daquilo que vale a pena ser aprendido, daquilo que é belo, do que é moralmente correto. A não ser assim, ele se assemelhará, com seus conhecimentos profissionais, mais a um cão ensinado do que a uma criatura harmoniosamente desenvolvida. Deve aprender a compreender as motivações dos homens, suas quimeras e suas angústias, para determinar com exatidão seu lugar preciso em relação a seus próximos e à comunidade.”
Albert Einstein (1879-1955)

Visão Geral

Um Sistema Operacional é um conjunto de rotinas executado pelo processador.
Sua principal função é controlar o funcionamento de um computador, gerenciando a utilização e o compartilhamento dos seus diversos recursos, como processadores, memórias e dispositivos de entrada e saída.
Sem o sistema operacional, um usuário para interagir com o computador deveria conhecer profundamente diversos detalhes sobre hardware do equipamento, o que tornaria seu trabalho lento e com grandes possibilidades de erros. As duas principais funções são “facilidade de acesso aos recursos do sistema” e “compartilhamento de recursos de forma organizada e protegida”.
Portanto, o Sistema Operacional tem como objetivo funcionar como uma interface entre o usuário e o computador, tornando a sua utilização mais simples, rápida e segura.
Suas rotinas são executadas concorrentemente em função de eventos assíncronos, ou seja, eventos que podem ocorrer a qualquer momento.

Funções Básicas

·       Facilidade de acesso aos recursos do sistema. Cabe ao Sistema Operacional servir de interface entre os usuários e os recursos disponíveis no sistema computacional, tornando esta comunicação transparente. 

·       Compartilhamento de recursos de forma organizada e protegida. Em sistema onde diversos usuários compartilham recursos do sistema computacional, é necessário controlar o uso concorrente desses recursos. Se pensarmos que um computador pessoal nos permite executar diversas tarefas ao mesmo tempo, como imprimir um documento, copiar um arquivo pela Internet ou processar uma planilha, o sistema operacional deve ser capaz de controlar a execução concorrente de todas essas atividades.

Máquina de Camadas


O computador pode ser visualizado como uma máquina de camadas, onde inicialmente existem duas camadas: Hardware (nível 0) e sistema operacional (nível 1). Desta forma, o usuário pode enxergar a máquina como sendo apenas o sistema operacional, ou seja, como se o hardware não existisse. Esta visão modular e abstrata é chamada máquina virtual. A vantagem desse conceito é tornar a interação entre o usuário e computador mais simples, confiável e eficiente.

Desta forma o computador pode ser visualizado como uma máquina de níveis ou máquina de camadas, possuindo tantos níveis quantos forem necessários para adequar o usuário às suas diversas aplicações. Quando o usuário está trabalhando em um desses níveis, não necessita saber da existência das outras camadas. Com isso a interação entre o usuário e computador apresenta-se mais simples.

Atividade 1

1.     O que é um Sistema Operacional?
2.     Como seria utilizar um computador sem um sistema operacional?
3.     Quais são suas duas principais funções?
4.     Quais as principais dificuldades que um programador teria no desenvolvimento de uma aplicação em um ambiente sem um sistema operacional?
5.     O que é uma máquina virtual?
6.     Qual a grande vantagem em utilizar o conceito de máquina virtual?
      O que significa o conceito de "Maquina de Camadas" ?