You are on page 1of 222

Sistemas Operacionais

O Que é Um Sistema Operacional


Para entendermos o que é um sistema operacional, precisamos
entender dois conceitos básicos :

Hardware : Hardware é a parte física do computador, ou seja, o


equipamento em si ;

Software: Software é uma sequência de instruções escritas para


serem interpretadas por um computador com o objetivo de
executar tarefas específicas.
Sistemas Operacionais

Todo o conjunto de programas que compõem o software pode


ser dividido em dois grupos bem diferenciados:

1) Software básico: conjunto de programas imprescindíveis para


o funcionamento do sistema. (Drivers controladores de
hardware) ;

2) Software aplicativo. Conjunto de programas a serem utilizados


pelo usuário(Word, Internet Explorer, Excel).

À esse software, dá-se o nome de Sistema Operacional.


Sistemas Operacionais

Um sistema operacional, por mais complexo que possa parecer,


é apenas um conjunto de rotinas executado pelo processador, de
forma semelhante aos programas dos usuários. 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.
Sistemas Operacionais

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.

O sistema operacional tem como objetivo funcionar como uma


interface entre o usuário e o computador, tornando sua
utilização mais simples, rápida e segura.
Sistemas Operacionais

O sistema operacional tem duas funções distintas: estender a máquina


e gerenciar recursos.

Como máquina estendida, o sistema operacional oculta a ‘verdade’ do


usuário sobre o hardware e apresenta uma visão simples e agradável.
Ele evita, por exemplo, que o usuário tenha que gerenciar o HD para
gravar dados, e apresenta uma interface orientada a arquivos simples,
geralmente em estrutura de pastas e diretórios.

O sistema operacional também é responsável por fornecer uma


variedade de serviços que os programas podem obter usando
instruções especiais conhecidas como chamadas ao sistema, isso sem
que o usuário tenha que interagir diretamente com a máquina.
Sistemas Operacionais

Como gerenciador de recursos, o sistema operacional controla


de forma ordenada o uso dos dispositivos físicos entre os vários
programas que competem por eles. Esse gerenciamento é feito
através de compartilhamento no tempo e no espaço. Quando
um dispositivo é compartilhado no tempo, cada programa ou
usuário aguarda a sua vez de usar o recurso(Processador).

Quando um dispositivo é compartilhado no espaço, cada


programa ou usuário ocupa uma parte do recurso (Memória
RAM).
Sistemas Operacionais

Tipos de Sistema Operacional


• Sistema operacional de tempo real (RTOS)- Utilizado para
controlar máquinas, instrumentos científicos e sistemas
industriais.
São sistemas que possuem forte vínculo com o tempo. O
resultado só é considerado correto se a execução acontecer no
tempo previsto. Geralmente um RTOS não tem uma interface para
o usuário muito simples e não é destinado para o usuário final. A
função do RTOS é gerenciar os recursos do computador para que
uma operação específica seja sempre executada durante um
mesmo período de tempo.
Sistemas Operacionais

Tipos de Sistema Operacional


• Monousuário Monotarefa. Esse tipo de sistema operacional foi
criado para que um único usuário possa fazer uma coisa por vez.
Exemplos : DOS (Disk Operating System) e Palm OS;
• Monousuário Multitarefa. Este tipo de sistema operacional é o
mais utilizado em computadores de mesa e laptops. As plataformas
Microsoft Windows e Apple MacOS são exemplos de sistemas
operacionais que permitem que um único usuário utilize diversos
programas ao mesmo tempo. Por exemplo, é perfeitamente
possível para um usuário de Windows escrever uma nota em um
processador de texto ao mesmo tempo em que faz download de
um arquivo da Internet e imprime um e-mail.
Sistemas Operacionais

Tipos de Sistema Operacional


• Multiusuário - O sistema operacional multiusuário permite
que diversos usuários utilizem simultaneamente os recursos
do computador. O sistema operacional deve se certificar de
que as solicitações de vários usuários estejam balanceadas.
Cada um dos programas utilizados deve dispor de recursos
suficientes e separados, de forma que o problema de um
usuário não afete toda a comunidade de usuários. Unix, VMS
e sistemas operacionais mainframe como o MVS são
exemplos de sistemas operacionais multiusuário.
Sistemas Operacionais

Kernel

O Kernel é o núcleo do sistema. É responsável pelas operações


de baixo nível tais como: gerenciamento de memória,
gerenciamento de processos, suporte ao sistema de arquivos,
periféricos e dispositivos. Pode ser compilado para se adequar
melhor a um determinado tipo de máquina.
É no Kernel que estão definidas funções para operação com
periféricos (mouse, disco, impressora, interface serial / interface
paralela) entre outros. Resumidamente, o kernel é um conjunto
de programas que fornece para os programas de usuário
(aplicativos) uma interface para utilizar os recursos do sistema.
Sistemas Operacionais

Kernel

Quanto à sua arquitetura, o kernel pode ser monolítico - em um


único bloco, com todas as funcionalidades carregadas na
memória - ou modular (micro-kernel) - com os módulos
específicos para cada tarefa carregados opcionalmente,
dinamicamente e híbrido.
Sistemas Operacionais

Kernel
O kernel é a parte mais importante do sistema operacional, pois,
sem ele, a cada programa novo que se criasse seria necessário
que o programador se preocupasse em escrever as funções de
entrada/saída, de impressão, entre outras, em baixo nível,
causando uma duplicação de trabalho e uma perda enorme de
tempo. Como o kernel já fornece a interface para que os
programas possam acessar os recursos do sistema de um nível
mais alto e de forma transparente, fica resolvido o problema da
duplicação do trabalho.
Sistemas Operacionais

• Kernel monolítico
Kernel monolítico ou mono-bloco é um kernel que implementa
um interface de alto nível para possibilitar chamadas de sistema
específicas para gestão de processos, concorrência por parte de
módulos dedicados que são executados com privilégios
especiais. Alguns exemplos deste tipo de kernel:

 Linux;
 Unix;
 BSD
 MS-DOS; e
 Windows 95, Windows 98 e Windows ME.
Sistemas Operacionais

Shell

O Shell é o elo entre o usuário e o sistema. Imagine o Shell como


sendo um intérprete entre pessoas que falam linguas diferentes.
Ele traduz os comandos digitados pelo usuário para a linguagem
usada pelo kernel e vice-versa.

Sem o Shell a interação entre usuário e o kernel seria bastante


complexa. Ele também é uma linguagem de programação
completa.
Sistemas Operacionais

Script

Script é um arquivo que contém comandos do shell que em uma


situação normal poderiam ser executados a partir do prompt.
Esses comandos são executados sequencialmente dependendo
de condições estruturais e d laço como “ if ... then” (se ... então)
e “ do while” (faça enquanto). Um script também pode usar
variáveis. A entrada pode ser recebida através do prompt de
comando ou de outros arquivos.
Sistemas Operacionais

Existem diversos tipos de Sistemas Operacionais:

• No topo da lista estão os sistemas operacionais para


computadores de grande porte. Esses computadores exigem
grande capacidade de recursos de entrada/saída de dados.
Seus sistemas operacionais são orientados para o
processamento simultâneo de muitos trabalhos (jobs). Eles
oferecem normalmente três tipos de serviços: em lote,
processamento de transações e tempo compartilhado.
Sistemas Operacionais

• Um nível abaixo estão os sistemas operacionais de servidores.


Eles são executados em servidores, em estações de trabalho
ou em computadores de grande porte. Eles servem múltiplos
usuários de uma vez em uma rede e permitem-lhes
compartilhar recursos de hardware e software. Exemplos
incluem Linux e Windows 2003 Sever.
Sistemas Operacionais

Há também os sistemas operacionais de multiprocessadores.


Esse sistema consiste em conectar várias CPUs em um único
sistema para ganhar potência computacional.

O nível seguinte é o sistema de computadores pessoais. Sua


função é oferecer uma boa interface para um único usuário.
Exemplos comuns são o Windows 7, Windows Vista e XP, o
MacOS e o Linux.
Sistemas Operacionais

O próximo nível é o de sistemas de tempo real. O tempo é um


parâmetro fundamental. Eles são divididos em sistemas de
tempo real crítico e de tempo real não crítico. Os sistemas de
tempo real crítico possuem determinados instantes em que as
ações devem ocorrer. Os sistemas de tempo real não crítico
aceita um descumprimento ocasional de um prazo. VxWorks e
QNX são exemplos bem conhecidos.
Sistemas Operacionais

Descendo na escala, vemos os sistemas operacionais móveis e


embarcados. Os sistemas móveis estão presentes em
computadores de mão que são computadores muito pequenos.

Os sistemas embarcados são computadores que controlam


eletrodomésticos ou sistemas de comunicação e de orientação
por gps em veículos.

Os menores sistemas operacionais são executados em cartões


inteligentes. São dispositivos do tamanho de cartões de crédito
que contêm uma CPU. Possuem restrições severas de consumo
de energia e memória.
Sistemas Operacionais

Exemplos de sistemas operacionais comuns:

● Microsoft Windows 8.1, 8, 7, Windows Vista e XP – Sistema


operacional para estações de trabalho, sejam elas domésticas ou
em ambiente corporativo;

● Microsoft Windows Server 2008/2008R2 – Sistema


operacional para servidores, com recursos para gerenciamento
de usuários e estações de trabalho;
Sistemas Operacionais

Exemplos de sistemas operacionais comuns:

● Linux (CentOS, Fedora, Debian, Suse, Slackware, Kurumin)–


Sistema operacional utilizado tanto em servidores quanto
estações de trabalho. Possui uma ampla disponibilidade de
aplicativos compatíveis, como servidores de rede, aplicativos
multimídia, entre outros.
Sistemas Operacionais

Exemplos de sistemas operacionais comuns:

Apple
• Mac OS X v10.7 "Lion“
• OS X v10.8 "Mountain Lion"
• OS X v10.9 "Mavericks"
História dos Sistemas Operacionais

Os sistemas operacionais têm sido historicamente amarrados à


arquitetura dos computadores nos quais iriam rodar. Por isso,
veremos como eles evoluiram nas sucessivas gerações de
computadores.
1 - A Primeira Geração (1945-1955): Válvulas e Painéis com
Plugs

Os computadores gigantes que ocupavam salas inteiras e


necessitavam do auxílio de humanos nasceram lá pela década de
1950. Nessas primeiras máquinas, as tarefas eram realizadas por
técnicos, os quais ditavam o que seria realizado através do
próprio hardware.
História dos Sistemas Operacionais
História dos Sistemas Operacionais

Toda a programação era feita em linguagem de máquina, sempre


se conectando fios com plugs em painéis para controlar as
funções básicas da máquina.

As linguagens de programação não eram conhecidas. Nem se


ouvia falar em sistemas operacionais.

O modo usual de operação consistia no programador elaborar o


programa numa folha e então ir à sala da máquina, inserir os
plugs nos painéis do computador e gastar as próximas horas
apelando para que nenhuma das 20.000 ou mais válvulas se
queimasse durante a execução do programa.
História dos Sistemas Operacionais

2 - A Segunda Geração (1955 - 1965): Transistores e Sistemas


Batch

A partir da introdução do transistor em meados dos anos os


computadores tornaram-se bastante confiáveis para que
pudessem ser produzidos e vendidos comercialmente na
expectativa de que eles continuassem a funcionar por bastante
tempo para realizar algumas tarefas usuais

A princípio havia uma clara separação entre projetistas,


construtores, operadores, programadores e o pessoal de
manutenção.
História dos Sistemas Operacionais

2 - A Segunda Geração (1955 - 1965): Transistores e Sistemas


Batch
Essas máquinas eram alocadas em salas especialmente
preparadas com refrigeração e com apoio de operadores
profissionais. Apenas grandes companhias, agências
governamentais, ou universidades, dispunham de condições
para pagar um preço de milhões de dólares por essas máquinas.
Para rodar um programa ou um conjunto de programas,
primeiro o programador escrevia o programa no papel
(FORTRAN ou linguagem Assembly), e então perfurava-o em
cartões. Daí, ele levava o conjunto de cartões chamado de
"deck", à sala de recepção e o entregava a um dos operadores.
História dos Sistemas Operacionais
2 - A Segunda Geração (1955 - 1965): Transistores e Sistemas
Batch

Devido ao alto custo do equipamento, era de se esperar que as


pessoas tentassem reduzir o tempo desperdiçado. A solução
geralmente adotada era o sistema em "batch".

A idéia original era colecionar uma bandeja completa de jobs na


sala de recepção e então lê-los para uma fita magnética usando
um computador pequeno e relativamente barato, por exemplo o
IBM 1401. Outros computadores, máquinas mais caras, tais
como o IBM 7094, eram usados para a computação real.
História dos Sistemas Operacionais
2 - A Segunda Geração (1955 - 1965): Transistores e
Sistemas Batch
História dos Sistemas Operacionais
2 - A Segunda Geração (1955 - 1965): Transistores e Sistemas
Batch

Muitos computadores da segunda geração foram usados


principalmente para cálculos científicos e de engenharia, tais
como em solução de equações diferenciais parciais. Eles foram
vastamente programados em FORTRAN e em linguagem
Assembly. Sistemas operacionais típicos eram o FMS (Sistema
Monitor FORTRAN) e IBSYS (Sistema Operacional da IBM para o
7094).
História dos Sistemas Operacionais
3 - A Terceira Geração (1965 - 1980): CIs e Multiprogramação
A maioria dos fabricantes de computadores tinham duas linhas
de produto distintas e totalmente incompatíveis. Haviam os
computadores científicos, como o 7094, usado para cálculos
numéricos em ciência e engenharia. E também os computadores
comerciais, como o 1401, que era usado para classificação em
fita e impressão, por bancos e companhias de seguros.

Os clientes em potencial para aquisição de novos computadores


necessitavam inicialmente de uma máquina pequena, para mais
tarde, com o crescimento, terem uma máquina maior em que
pudessem rodar todos os seus programas mais rapidamente.
História dos Sistemas Operacionais
3 - A Terceira Geração (1965 - 1980): CIs e Multiprogramação
A IBM, introduziu então o sistema /360. O 360 era uma série de
máquinas compatíveis por software, variando de tamanho a
partir do 1401 até o mais potente 7094. As máquinas diferiam
apenas em preço e performance (capacidade de memória,
velocidade do processador, número de periféricos I/O
permitidos, etc).
Já que todas as máquinas tinham a mesma arquitetura e o
mesmo conjunto de instruções, pelo menos em teoria,
programas escritos para uma máquina poderiam rodar em todas
as outras. Além disso, o 360 foi projetado para manusear tanto
computação comercial como computação científica.
História dos Sistemas Operacionais
3 - A Terceira Geração (1965 - 1980): CIs e Multiprogramação
O 360 foi a primeira linha de computadores a usar circuitos integrados
(CIs) .
A maior força da idéia de "uma família" era ao mesmo tempo sua
maior fraqueza. a intenção era que todo software, incluindo o SO,
tinha que trabalhar em todos os modelos. Ele tinha que ser bom em
sitemas com poucos e com muitos periféricos, funcionar bem em
ambientes comerciais e cientíticos.
Não havia como a IBM ou qualquer outro fabricante conseguir
escrever um software para atender a todos estes requisitos
contraditórios. O resultado era um SO extraordinariamente complexo e
grande. Consistia de milhões de linhas de linguagem assembler,
escritas por milhares de programadores e com milhares de "bugs".
História dos Sistemas Operacionais
3 - A Terceira Geração (1965 - 1980): CIs e Multiprogramação

Apesar disto o SO/360 e os sistemas operacionais semelhantes


de terceira geração produzidos por outros fabricantes de
computador realmente satisfizeram a maioria dos seus clientes.
Eles também popularizaram várias técnicas-chaves em SO de
segunda geração como a multiprogramação
Para evitar a ociosidade da CPU quando se fazia uma pausa para
troca de fitas ou outra operação, dividia-se a memoria em varias
particões , com um job diferente em cada uma delas. Assim
quando se pausava a execução de um job outro entrava em
operação, ocupando o tempo ocioso da CPU.
História dos Sistemas Operacionais
3 - A Terceira Geração (1965 - 1980): CIs e
Multiprogramação
História dos Sistemas Operacionais
3 - A Terceira Geração (1965 - 1980): CIs e Multiprogramação
Nos sistemas da terceira geração, o tempo entre a submissão do job e a obtenção
da saída era frequentemente de várias horas, uma falha na compilação fazia o
programador desperdiçar quase um dia. A necessidade de ter um tempo de
resposta menor abriu espaço para o "timesharing“.

Em um sistema "time-sharing", se 20 usuários estão conectados e 17 deles estão


pensando, falando ou tomando café, a CPU pode ser alocada para os três jobs que
querem serviço. Como as pessoas que depuram programas usualmente editam
poucos comandos em vez de programas longos (como classificar mil registros em
fita), o computador pode fornecer mais rápido, serviço interativo a um número
maior de usuários e talvez também trabalhar com grandes jobs em "batch"
paralelamente.

Embora a primeira série de sistemas em time-sharing (CTSS) foi desenvolvido no


MIT num IBM 7094 especialmente modificado, ele não se tornou verdadeiramente
popular até que a necessidade de proteção de hardware ficasse mais difundida
durante a terceira geração.
História dos Sistemas Operacionais
3 - A Terceira Geração (1965 - 1980): CIs e Multiprogramação
Após o sucesso do sistema CTSS, o MIT, o Laboratório Bell e a General Electric
decidiram embarcar no desenvolvimento de um "computador utilitário", uma
máquina que suportasse milhares de usuários em "time-sharing"
simultaneamente.

O seu modelo era baseado no sistema de distribuição de eletricidade. Surgia


então o MULTICS (MULTiplexed Information and Computing Service).

O MULTICS introduziu muitas idéias inovadoras na literatura da computação,


mas a sua construção foi mais difícil do que se esperava. O Laboratório Bell saiu
do projeto e a General Electric continuou sozinha. Eventualmente o MULTICS
rodava o suficientemente bem para ser usado num ambiente de produção no
MIT e em poucas outros lugares, mas a idéia de um computador
utilitáriofalhou. Mesmo assim, o MULTICS teve uma enorme influência nos
sistemas subsequentes.
História dos Sistemas Operacionais
3 - A Terceira Geração (1965 - 1980): CIs e Multiprogramação
Outro importante desenvolvimento durante a terceira geração foi o
crescimento fenomenal de mini-computadores, começando com o DEC
PDP-1 em 1961.=, para certos tipos de trabalhos não-numéricos era
quase tão rápido quanto o 7094 e fez surgir uma nova indústria.

Foi rapidamente seguido por uma série de outros PDPs (que diferentes
da família IBM, eram todos incompatíveis) culminando com o PDP-11.

Um dos cientistas do Laboratório Bell que trabalhou no MULTICS, Ken


Thompson, logo depois encontrou um pequeno PDP-7 que ninguém
usava e começou a escrever uma versão simplificada mono-usuário do
MULTICS. Brian Kernighan apelidou esse sistema de UNICS (UNiplexed
Information and Computing Service), mas sua grafia foi mais tarde
trocada para UNIX.
História dos Sistemas Operacionais
3 - A Terceira Geração (1965 - 1980): CIs e Multiprogramação
Posteriormente foi levado para um PDP-11/20, onde funcionou bem o bastante
para convencer a gerência do Laboratório Bell em investir no PDP-11/45 para
continuar o trabalho.

Outro cientista do Laboratório Bell, Dennis Ritchie, juntou-se a Thompson para


reescrever o sistema numa linguagem de alto nível chamada C, projetada e
implementada por Ritchie. O Laboratorio Bell licensiava o UNIX para
Universidades quase de graça e dentro de poucos anos, centenas delas
estavam usando-o. O UNIX logo estendeu-se para o Interdata 7/32, para o VAX,
para o MOTOROLA 68000, e para muitos outros computadores. O UNIX tinha
sido transportado para mais computadores do que qualquer outro sistema
operacional da história e seu uso está ainda aumentando rapidamente.
História dos Sistemas Operacionais
3 - A Terceira Geração (1965 - 1980): CIs e
Multiprogramação
História dos Sistemas Operacionais
4 - A Quarta Geração (1980-1990): Computadores Pessoais

Com o desenvolvimento de circuitos, chips , transistores, etc, a


era do computador pessoal começava. Em termos de arquitetura,
os computadores pessoais não eram diferentes de
minicomputadores da classe do PDP-11, mas em termos de preço
eles eram certamente bem diferentes.

Enquanto o minicomputador tornou possível um departamento


de uma companhia ou uma universidade ter o seu próprio
computador, o chip micropocessador tornou possível um indivíduo
ter o seu próprio computador.
História dos Sistemas Operacionais
4 - A Quarta Geração (1980-1990): Computadores Pessoais

A capacidade de computação altamente interativa com excelentes


facilidades gráficas, fizeram crescer a indústria de produção de software
para computadores pessoais. Muitos desses softwares eram "amigáveis
ao usuário", significando que eles foram projetados para usuários que
não tinham conhecimento algum sobre computadores e além do mais
não tinha outra intenção a não ser a de orientá-los no uso.

Dois sistemas operacionais dominaram a utilização do computador


pessoal: o MS-DOS, escrito pela Microsoft para o IBM PC e para outras
máquinas que usavam a CPU Intel 8088 e seus sucessores, e UNIX, que é
predominante em máquinas que usam a CPU da família Motorola
68000.
História dos Sistemas Operacionais
4 - A Quarta Geração (1980-1990): Computadores Pessoais

Apesar da primeira versão do MS-DOS ser primitiva, em versões


subsequentes foram incluidas diversas facilidades do UNIX.

Um interessante desenvolvimento que começou em meados dos


anos 80 foi o crescimento de redes de computadores pessoais
rodando sistemas operacionais para rede e sistemas operacionais
distribuidos. Num sistema operacional para rede, os usuários têm
consciência da existência de múltiploscomputadores e podem se
conectar com máquinas remotas e copiar arquivos de uma
máquina para outra. Cada máquina roda o seu próprio sistema
operacional local e tem o seu próprio usuário (ou usuários).
História dos Sistemas Operacionais
5 - 1990/97: Era Windows
Em maio de 1990, a Microsoft lançou o Windows 3.0.

O Windows 3.0 era executado sobre o DOS e, portanto, oferecia


compatibilidade com os programas DOS. Ele se beneficiava do processador 386,
podendo fazer a multitarefa com programas DOS e também com programas
Windows. A interface com o usuário trazia um Gerenciador de Programas
baseado em ícones e um Gerenciador de Arquivos em estilo árvore, incluindo
avanços como ícones sombreados.

O Windows 3.0 exigiu revisões mínimas de praticamente todos os programas,


após sua introdução começaram a aparecer os aplicativos, liderados pela
divisão de aplicativos da própria Microsoft e seguidos por praticamente todos
os outros grandes desenvolvedores.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

Mesmo depois do anúncio do Windows 3.0, a Microsoft e a IBM


continuavam falando sobre o OS/2 e, especialmente, sobre o OS/2
2.0, a primeira versão 32 bits real que viria a aparecer, finalmente,
em 1992.

A IBM posicionava o OS/2 como o futuro sistema operacional para


todos os usuários, e a Microsoft posicionava o OS/2 como um
topo de linha, apenas para os aplicativos missão crítica e baseados
em servidor.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows
As duas companhias finalmente separaram suas estratégias no início de
1991, com a briga entre Jim Cannavino da IBM, e Bill Gates, da
Microsoft.

O OS/2 conquistou um forte nicho em algumas grandes aplicações


corporativas, auxiliado por sua estabilidade e robustez, comparadas ao
Windows 3.x.

Mais tarde, a IBM faria uma última tentativa de fazer do OS/2 o principal
sistema operacional com seu OS/2 Warp 3.0, mais orientado ao
consumidor comum e lançado no final de 1994. Ele venderia milhões de
cópias mas não diminuiria a grande inclinação da indústria pelo
Windows.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

Microsoft viria a transformar seu antigo "OS/2 3.0" no Windows NT


3. 1, que foi lançado em 1993 e recebido, inicialmente, como um
sistema operacional para servidores de aplicativos,concorrendo,
principalmente, com o OS/2 da IBM.

Em 1991, a Microsoft ofereceu o Windows 3.1 , que adicionava


uma melhor integração de aplicativos, recursos arrastar-e-soltar e
uma maior estabilidade. Ele se se tornou o padrão dominante para
os aplicativos para PC e a Microsoft ocupou o papel de líder na
definição das especificações multimídia.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

A Microsoft viria a dominar muitas áreas mais na computação por


esta mesma época. Seus produtos Visual Basic e Visual C++
venceram a grande concorrência da Borland no domínio de
linguagens de programação.

Os aplicativos Microsoft liderados pelo pacote Office, mais tarde, o


Access tomaram grande parte do mercado de programas aplicativos
História dos Sistemas Operacionais
5 - 1990/97: Era Windows
O Macintosh (Apple), continuava a crescer e expandir-se e encontrou
nichos nas artes gráficas, na multimídia e na educação. O termo
compatível com IBM “já tinha saído de moda, para ser substituído pelo
Processador como a principal peça descritiva de hardware.
A era do 286 terminou no final de 1988, após a introdução do 386SX da
Intel, um Processador que possuía os componentes internos de 32 bits do
386 e um barramento de dados 16 bits como o 286, o que o tornava
barato. Este e o 386 (rebatizado como 386DX) dominaram as vendas de
computadores durante anos.
Em abril de 1989, a Intel apareceu com seus processadores 486. Com 1,2
milhões de transistores, que era, efetivamente, uma versão mais rápida e
mais refinada do 386 somada a um co-processador matemático que
executava todos os aplicativos escritos para o 386 sem quaisquer
problemas.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

Em março de 1993 a Intel introduziu seu Processador Pentium de 60 MHz.

Os discos rígidos ficavam cada vez maiores e mais velozes. A tecnologia de


exibição gráfica progrediu para as aceleradores gráficas.

Neste período, as redes locais corporativas realmente começaram a


decolar. A IBM promovia o Office Vision, que deveria ser executado em
todas as plataformas SAA, inclusive sobre o OS/2.

Todos os gigantes do Desenvolvimento de sistemas tinham suas


estratégias multiplataforma para a automação de escritórios, porém
quase todos fracassariam dentro de um espaço de tempo relativamente
curto.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows
Quem realmente alcançou o sucesso foram os servidores de PC,
que abrigavam seus próprios dados e podiam fazer ligações com
grandes bases de dados corporativas.
Quanto ao hardware, o Compaq Systempro, introduzido em 1989,
liderava os grandes aplicativos que antes viviam em
minicomputadores e outros grandes sistemas.
Chegava ao mercado o SQL, e companhias como a Oracle e a
Sybase começavam a ter como alvos os desenvolvedores para PC.
As ferramentas de desenvolvimento rápido de aplicativos, ou RAD,
logo facilitaram a criação de boas interfaces com o usuário para o
acesso a dados corporativos.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

A Internet, já existia desde o início dos anos 60, quando o órgão de


Defesa de Projetos de Pesquisa Avançada (DARPA) do Pentágono
estabeleceu as conexões com muitos computadores de
universidades. Mas em 1990, Tim Berners-Lee, então no laboratório
de física CERN, (Genebra, Suíça) criou a Linguagem de Marcação de
Hipertexto (HTML), uma maneira simples de ligar informações
entre sites da Internet. Isto, por sua vez, gerou a World Wide Web
(www), que apenas aguardava por um paginador gráfico para
começar a crescer.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

Após o lançamento do Mosaic ao público, no final de 1993,


repentinamente, a Internet - e, em particular, a Web - podiam ser
acessadas por qualquer pessoa que tivesse um computador
pessoal, fato auxiliado, em parte, nela possibilidade de transferir
livremente a versão mais recente de vários paginadores diferentes

E, dentro de pouco tempo, parecia que em todo o mundo, as


companhias estariam inaugurando seu site na Web.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

Novas versões de paginadores da Web chegaram rapidamente. A


Netscape Corp. logo começou a dominar o ramo de paginadores
Web.

O Netscape Navigator acrescentou vários recursos, inclusive o


suporte a extensões (o que, por sua vez, levou a diversas extensões
multimídia) e a máquina virtual Java (que permitia aos
desenvolvedores elaborar aplicativos Java que podiam ser
executados dentro do paginador).
História dos Sistemas Operacionais
5 - 1990/97: Era Windows
O correio eletrônico (email) é aceito no dia-a-dia das corporações
com produtos, como o cc:Mail, mais tarde adquirido pela Lotus, e
mais um alguns concorrentes menores. Em dezembro de 1989, a
Lotus mudou a fórmula com o Lotus Notes, o primeiro aplicativo de
"groupware".
Em 1994, a Microsoft e a Intel estavam na liderança da indústria do
PC, o Windows tinha-se estabelecido como o padrão para
aplicativos e as redes estavam definitivamente no mercado comum.
Em agosto de 1995 foi lançado o Windows 95, acompanhado por
um entusiasmo maior do que qualquer outro anúncio de
computação da era.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

O Windows 95 era compatível com Plug-and-Play,suportava novos


padrões de e-mail e comunicações e trazia uma nova interface com
o usuário que incluía um menu "Iniciar" e uma área de trabalho de
programas com pastas e ícones.
Uma vez lançado, o Windows 95 rapidamente tornou-se o padrão
para a computação de usuário final, fazendo com que muitos
desenvolvedores tivessem suas versões de aplicativos 32 bits
prontas no lançamento do SO ou imediatamente após.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

A Microsoft fez seguir ao Windows 95:


- Windows NT 4.0 (bem aceito em ambientes corporativos);
- Windows 98 – substituto do Windows 95;
- Windows 98 SE - segunda edição do Windows 98 veio para
corrigir as falhas do antecessor. As melhorias foram realizadas na
comunicação de rede, no suporte para drivers e na atualização
do DirectX;
- Windows 2000 - desenvolvido especialmente para servidores e
clientes de rede
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

A Microsoft fez seguir ao Windows 95:

- Windows ME : o Windows ME foi o sistema com a maior


quantidade de bugs que a empresa lançou;
- Windows XP : lançado em 2001 , este foi, provavelmente, o
sistema mais usado por todos. Ele teve sua interface
completamente remodelada, trouxe uma série de novos
recursos para redes, DirectX 8.1, suporte avançado para
múltiplos usuários, novos recursos de segurança e muito mais.
Esse sistema ganhou muitas atualizações.
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

A Microsoft fez seguir ao Windows 95:


- Windows Vista : O Windows Vista veio para criar uma nova
experiência e atrair os usuários do Windows XP. Por conta de
uma série de problemas de desempenho, o sistema não obteve
sucesso na missão. Apesar disso, alguns recursos (como o
Windows Search e o Windows Aero) foram inovações que
ajudaram no desenvolvimento do sistema sucessor.
- Windows 7: Lançado em 2009 , veio para corrigir todos os
problemas do antecessor e oferecer desempenho acima de
tudo. O sistema não alcançou a apreciação que o Windows XP
teve, mas conseguiu conquistar o público.
-
História dos Sistemas Operacionais
5 - 1990/97: Era Windows

A Microsoft fez seguir ao Windows 95:


- Windows Phone : Depois de insistir longos anos no Windows
Mobile (que era apenas uma versão mal-adaptada do sistema
para desktop), em 2010 a Microsoft remodelou seu sistema
para portáteis.
- Windows 8: Lançado em 2012 , Pensando em migrar para o
setor dos tablets e revolucionar a forma como as pessoas usam
os PCs, a Microsoft apostou em uma reformulação de seu
sistema. Trouxe um novo Menu Iniciar e mantendo a
compatibilidade com os antigos programas e trazendo suporte
para novos apps
História dos Sistemas Operacionais
Resumo geral da história dos sistemas operacionais:

Válvulas e Painéis de Conexão (1945-1955)

Transístores e Sistemas de Lote (batch) (1955-1965)

Circuitos Integrados e Multiprogramação (1965-1980)

Computadores Pessoais e Redes (1980 - 1990)


História dos Sistemas Operacionais

Note que até então falamos da era Windows, paralelamente a era


Windows temos na história o surgimento de muitos outros
sistemas operacionais, a seguir trazemos um gráfico,
demonstrando toda a evolução do SO e trazendo os demais
Sistemas Operacionais lançados.
Conceitos sobre sistemas operacionais
Processo
Define-se um processo como um programa em execução, sendo
que para sua especificação completa, deve-se incluir tanto o
programa propriamente dito como os valores de variáveis,
registradores, contador de programa (Program Counter, PC), e
outros dados necessários à definição completa de seu estado.
Conceitos sobre sistemas operacionais
Processo
Cada processo trabalha como se possuísse para si uma UCP
(unidade central de processamento, o processador principal do
computador) própria, chamada UCP virtual. Na realidade, na
grande maioria dos casos uma única UCP é compartilhada entre
todos os processos. Isto é , existe apenas uma UCP real, mas tantas
UCP virtuais quantos forem os processos.
Podemos dizer que cada processo é um módulo executável único,
que corre concorrentemente com outros módulos executáveis. Por
exemplo, em um ambiente multi-tarefa (como o Unix) que suporta
processos, um processador de texto, um navegador e um sistema
de banco de dados são processos separados que podem rodar
concomitantemente.
Conceitos sobre sistemas operacionais
Processo
Cada processo trabalha como se possuísse para si uma UCP
(unidade central de processamento, o processador principal do
computador) própria, chamada UCP virtual. Na realidade, na
grande maioria dos casos uma única UCP é compartilhada entre
todos os processos. Isto é , existe apenas uma UCP real, mas tantas
UCP virtuais quantos forem os processos.
Podemos dizer que cada processo é um módulo executável único,
que corre concorrentemente com outros módulos executáveis. Por
exemplo, em um ambiente multi-tarefa (como o Unix) que suporta
processos, um processador de texto, um navegador e um sistema
de banco de dados são processos separados que podem rodar
concomitantemente.
Conceitos sobre sistemas operacionais
Processo

Processos são módulos separados e carregáveis, ao contrário de


threads, que não podem ser carregadas. Múltiplas threads de
execução podem ocorrer dentro de um mesmo processo. Além das
threads, o processo também inclui certos recursos, como arquivos
e alocações dinâmicas de memória e espaços de endereçamento.
Conceitos sobre sistemas operacionais

Processo
Os processos, em uma mesma UCP real executam um por vez, mas
essa execução é realizada de forma a criar a ilusão de que os
mesmos estão executando em paralelo.
Conceitos sobre sistemas operacionais
Em geral um Processo é formado pelos seguintes recursos :

• Um imagem do código de máquina executável associado com


um programa;
• Memória, que inclui o código executável, dados específicos do
processo (dados da entra e saída), uma chamada de pilha (para
manter a pilha de subrotinas ativas e/ou outros eventos, e um
heap (alocação dinâmica de memória) para manter a
computação intermediária gerada durante o tempo de
execução;
Conceitos sobre sistemas operacionais
Em geral um Processo é formado pelos seguintes recursos :

• Descritores de sistema operacional que são alocados aos


processo, como os descritores de arquivo (UNIX) ou handles
(Windows) e os códigos e sinks.
• Atributos de segurança, tais como conjunto de permissões para
o usuário que criou o processo, são as operações permitidas.
• Contexto de estado do processador, tal como o conteúdo dos
registradores, memória física de endereçamento. O estado é
normalmente guardado nos registradores quando o processo
está em execução, e na memória principal caso contrário.
Conceitos sobre sistemas operacionais
Hierárquia de Processos
Em todos os S.O. de multiprogramação deve haver alguma forma
de criar e terminar processos conforme o necessário à execução
dos pedidos de usuários. Por isso, um processo tem a possibilidade
de gerar outros processos, que por sua vez podem gerar outros, e
assim sucessivamente, gerando uma hierarquia de processos.
Na geração de um novo processo, o processo gerado recebe o
nome de filho, e o que pediu a geração recebe o nome de pai. Um
pai pode apresentar diversos filhos, mas cada filho só pode ter um
pai.
Conceitos sobre sistemas operacionais
Conceitos sobre sistemas operacionais
Estados dos Processos
A comunicação entre processos é o grupo de mecanismos que
permite aos processos transferirem informação entre si. A
capacidade de um sistema operacional executar simultaneamente
dois ou mais processos é chamada multiprocessamento.

Se existirem dois ou mais processos executados em simultâneo e


disputam o acesso a recursos partilhados, problemas de
concorrência podem ocorrer. Estes problemas podem ser
resolvidos pelogerenciamento adequado de múltiplas linhas de
execução ou processos através da sincronização (multitarefa) ou
por outros recursos (como a troca de contexto).
Conceitos sobre sistemas operacionais
Estados dos Processos
Durante a sua existência, os processos podem se apresentar,
do ponto de vista do sistema, em diferentes estados. São eles:
 Não-Submetido
 Suspenso
 Pronto
 Executando
 Espera
 Completo
Conceitos sobre sistemas operacionais
Estado 1 - Não-Submetido
É o processo que ainda não está submetido a CPU, está nas mãos
do usuário. Até onde interessa ao sistemas ele não existe, porque o
usuário ainda não o submeteu. Ele é simplesmente apresentado
como sendo o primeiro passo na vida de um processo.
O Sistema Operacional, naturalmente, não reconhece esse estado.
Pode por exemplo, ser um arquivo executável que está
armazenado no HD.
Conceitos sobre sistemas operacionais
Estado 2 – Suspenso

É o processo que já foi submetido, porém permanece suspenso até


que o horário ou evento programado ao usuário venha acontecer.
Temos como exemplo o agendamento de uma varredura
programada no anti-vírus por um usuário.
Conceitos sobre sistemas operacionais
Estado 3 – Pronto

O processo já foi submetido e está pronto para receber a CPU,


porém ainda guarda o escalonador de processos para ter controle
da CPU. Processos que estão esperando E/S não se aplicam a esse
estado.
Conceitos sobre sistemas operacionais
Estado 4 – Executando
A execução propriamente dita. O código está sendo processado. Se
ocorrer durante a execução uma requisição de E/S o processo é
colocado no estado de espera e outro processo da fila de prontos
poderá então concorrer a CPU.
Conceitos sobre sistemas operacionais
Estado 5 – Espera

É o processo que foi colocado na fila de espera de E/S devido ao


processador de E/S ser mais lento que a CPU principal. O processo
tornaria a CPU mais escrava dele se não houvesse esse estado, pois
como ele não está concorrendo à CPU ao executar um E/S, pode-se
então colocá-lo no estado de espera para que os demais processos
do estado pronto possam concorrer a CPU.
Conceitos sobre sistemas operacionais
Estado 5 – Espera
Ex: parte de um código em C :

scanf(“%d”, VALOR);
SOMA=VALOR+JUROS;
Como podemos notar, a instrução scanf (uma requisição de
entrada e saída) é gerada se não fosse possível colocar o processo
em estado de espera; caso o usuário não entrasse com nenhum
valor, o programa ficaria suspenso e não liberaria a CPU para
outros processos.
Conceitos sobre sistemas operacionais
Estado 6 – Completo

Neste estado temos a finalização do processo.


Conceitos sobre sistemas operacionais

`
Conceitos sobre sistemas operacionais
Escalonamento de Processos
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.
Conceitos sobre sistemas operacionais
Escalonamento de Processos

O escalonador do SO utiliza alguns critérios de escalonamento,


como:

Taxa de utilização de CPU: fração de tempo durante a qual ela


está sendo ocupada;

Throughput : números de processos terminados por unidade de


tempo;
Turnaround : tempo transcorrido desde o momento em que o
software entra e o instante em que termina sua execução;
Conceitos sobre sistemas operacionais
Escalonamento de Processos

O escalonador do SO utiliza alguns critérios de escalonamento,


como:
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.

Responsáveis por essa tarefa são algoritmos que são entendidos


mais facilmente, estudados separadamente, mas na prática os
sistemas operacionais utilizam combinações deles para melhor
escalonar os processos.
Conceitos sobre sistemas operacionais
Atividade Proposta :

Pesquisa a ser realizada : Algoritmos escalonadores - Tipos mais


comuns e suas definições.
Conceitos sobre sistemas operacionais
Escalonamento
O algoritmo de execução não é o único responsável pelo tempo
de execução de um processo. Outros fatores, como o tempo de
processamento (tempo de CPU) e de espera em operações de
E/S devem ser considerados no tempo total da execução (tempo
de parede ou elapsed time ou wall clock time).
O escalonamento somente afeta o tempo de espera de
processos na fila de pronto.
Conceitos sobre sistemas operacionais
Escalonamentos Não Preemptivos
Nos primeiros Sistemas Operacionais Multiprogramáveis, onde
predominava tipicamente o processo batch, o escalonamento
implementado era do tipo Não Preemptivo .
Neste tipo de escalonamento, quando um processo ganha o
direito de utilizar a CPU nenhum outro processo pode lhe tirar
este recurso.
Podem ser:
• Escalonamento Circular Simples - FIFO
• Escalonamento Shortest Job First - SJF
• Escalonamento Cooperativo

89
Conceitos sobre sistemas operacionais

Escalonamento Circular Simples – FIFO


Há uma fila única de processos prontos, o primeiro processo da
fila (first-in) é o primeiro a ser selecionado para execução (first-
out)
O processo selecionado pode usar a CPU indefinidamente, novos
jobs são encaminhados para o fim da fila.
Quando um processo bloqueia, o próximo da fila é selecionado
Processos que passaram do estado bloqueado para pronto são
colocados no fim da fila.
Conceitos sobre sistemas operacionais
Escalonamento Shortest Job First – SJF
Neste escalonamento cada processo tem associado o seu tempo
de execução. Desta forma quando a CPU está livre o processo em
estado de pronto que tiver menor tempo de execução será
selecionado para execução.
O escalonamento SJF favorece os processos que executam
processos menores, além de reduzir o tempo médio de espera
(na fila de processos prontos) em relação ao escalonamento
FIFO.
A dificuldade é determinar, exatamente, quanto tempo de CPU
cada processo necessita para terminar seu processamento.
Conceitos sobre sistemas operacionais
Escalonamento Cooperativo
Neste escalonamento alguma política não-preemptiva deve ser
adotada. A partir do momento que um processo está em
execução, este voluntariamente libera o processador, retornando
para a fila de pronto.
Este tipo de escalonamento permite a implementação de
sistemas multiprogramáveis com uma melhor distribuição do uso
do processador entre os processos.
Sua principal característica está no fato de a liberação do
processador ser uma tarefa realizada exclusivamente pelo
processo em execução, que de maneira cooperativa libera a CPU
para um outro processo.
Conceitos sobre sistemas operacionais
Escalonamento Cooperativo
No escalonamento cooperativo, não existe nenhuma intervenção
do SO na execução do processo. Isto pode ocasionar sérios
problemas na medida em que um programa pode não liberar o
processador ou um programa mal escrito pode entrar em
looping, monopolizando dessa forma o processados.
Um exemplo deste tipo de escalonamento pode ser encontrado
nos sistemas Windows 3.1 e 3.11, sendo conhecido como
Multitarefa Cooperativa . Nestes sistemas as aplicações verificam
uma fila de mensagens periodicamente para determinar se
existem outras aplicações que desejam usar a UCP. Caso uma
aplicação não verifique a fila de mensagens as outras tarefas não
terão chance de ser executadas até o término do programa.
Conceitos sobre sistemas operacionais
Escalonamentos Preemptivos
Um algoritmo de escalonamento é dito preemptivo quando o
sistema pode interromper um processo em execução, para que
outro utilize o processador.
O escalonamento preemptivo permite que o sistema dê atenção
imediata a processos mais prioritários, como no caso de sistemas
de tempo real, além de proporcionar melhores tempos de
resposta em sistemas de tempo compartilhado.
Outro benefício deste tipo de escalonamento é o
compartilhamento do processador de uma maneira mais
uniforme entre os processos.
Conceitos sobre sistemas operacionais
Escalonamentos Preemptivos

A troca de um processo por outro na CPU (troca de contexto),


causada pela preempção, gera um overhead ao sistema.

Para isto não se tornar crítico, o sistema deve estabelecer


corretamente os critérios de preempção.
Conceitos sobre sistemas operacionais
Escalonamentos Preemptivos
Podem ser:
• Round-Robin
• Prioridades
• Filas Múltiplas
• Múltiplos Processadores
Conceitos sobre sistemas operacionais
Escalonamento Circular - Round Robin
Um dos algoritmos mais simples, mais antigo e mais amplamente
utilizado. A cada processo á atribuido um intervalo de tempo,
chamado de quantum durante o qual lhe é permitido executar.
Caso o processo ainda esteja executando ao final do quantum, é
feita a troca do mesmo por outro processo que esteja pronto
para a fase de execução.
Se o processo bloqueou ou terminou antes de o quantum ter
acabado, a troca por outro processo é realizada no exato
momento do bloqueio ou do término da operação do processo.
Conceitos sobre sistemas operacionais
TIME-SLICING ou QUANTUM

Para evitar que um processo monopolize o sistema, a técnica


de TIME-SLICING ou QUANTUM divide o tempo de
processamento de cada um em fatias (slice). Quantum é o
tempo limite de uso da CPU pelo processo.
Um processo do usuário, uma vez interrompido por término do
seu quantum, volta à fila de pronto para executar e permite o
escalonamento de outro processo.
Conceitos sobre sistemas operacionais
Escalonamento Circular - Round Robin
A única coisa que pode dar um pouco de trabalho na
implementação do Round Robin é a determinação do tamanho
do quantum.
Um quantum de tamanho muito pequeno, causa sucessivas troca
de contexto, baixando a eficiência do processador.
Um quantum de tamanho muito grande pode levar a um tempo
de resposta não aceitável para usuários interativos.
Conceitos sobre sistemas operacionais
Escalonamento Circular - Round Robin
O algoritmo é semelhante ao FIFO, porém, quando um processo
passa para o estado de execução, existe um tempo limite para a
sua utilização de forma contínua. Quando este tempo (time-slice
ou quantum) expira sem que antes a CPU seja liberada pelo
processo, este volta ao estado de pronto (preempção por
tempo), dando a vez a outro processo.
A fila de processos é tratada como uma fila circular.
Conceitos sobre sistemas operacionais
Escalonamento por Prioridades
O escalonamento Round Robin assume de forma implícita que
todos os processos são igualmente importantes.
A necessidade de se considerar fatores externos para a escolha
do próximo processo que vai ganha o processador é denominada
escalonamento por prioridade.
Cada processo é associado uma prioridade, e o processo pronto
com maior prioridade será aquele que vai rodar primeiro.
Conceitos sobre sistemas operacionais
Escalonamento por Prioridades
A prioridade é uma característica do contexto de SW do
processo, podendo ser estática ou dinâmica .
A prioridade é dita estática quando não é modificada durante a
existência do processo.
Na prioridade dinâmica a prioridade do processo pode ser
ajustada de acordo com o tipo de processamento realizado pelo
processo e/ou pela carga do sistema.
Conceitos sobre sistemas operacionais
Escalonamento por Prioridades
Toda vez que um processo for para a fila de processos prontos com
prioridade superior ao processo em execução, o SO deverá interromper
o processo corrente, colocá-lo como pronto e escalonar o processo de
maior prioridade para execução ( preempção por prioridade )
Assim como na preempção por tempo a preempção por prioridade é
implementada mediante um clock, que interrompe o processador em
determinados intervalos de tempo, para que a rotina de
Escalonamento reavalie as prioridades e, possivelmente, escalone
outro processo.
Para evitar que processos com alta prioridade monopolizem o
processador (evitando o starvation), o escalonador deverá
decrementar a prioridade do processo que esta monopolizando a CPU,
a cada interrupção de tempo.
Conceitos sobre sistemas operacionais
Escalonamento por Prioridades
Os processos poderão ser agrupados em classes de prioridade e
usar o escalonamento de prioridades entre as classes e o Round
Robin dentro de cada classe. Conforme figura abaixo:
Conceitos sobre sistemas operacionais
Escalonamento por Prioridades
Algoritmo: enquanto houver processos com prioridade 4: round-
robin na classe (processos em outras classes não são escolhidos).
Se prioridade 4 vazia, round-robin na prioridade 3 e assim por
diante. Cada vez que o processo recebe o tempo para executar, a
sua prioridade é decrementada. Quando todos os processos se
encontrarem no mesmo nível, as prioridades iniciais são
restauradas.
Conceitos sobre sistemas operacionais
Escalonamento por Filas Múltiplas
Processos não permanecem numa mesma classe de prioridade
até o fim de sua execução, quando seu quantum expira, ele vai
para uma fila de prioridade mais baixa/quantum mais alto.
Filas de prioridades diferentes têm quantum diferentes.
Diminuição de prioridade X aumento de quantum .
Reduzir a quantidade de trocas de contexto para processos
grandes.

106
Conceitos sobre sistemas operacionais
Escalonamento Filas Múltiplas
Conceitos sobre sistemas operacionais
Escalonamento Garantido
Cada processo tem direito a 1/n tempo da CPU, sendo n o
número de processos.
Para isso a CPU deve saber quanto tempo cada processo já usou.
Dividindo o tempo que já usou pelo tempo que deveria ter para
completar a operação (Tempo prometido), obtém-se uma razão
entre ambos, onde:
 Se essa razão for menor do que 1, então o processo
terá direito a mais tempo de CPU;
 Se essa razão for maior do que 1, então o processo
terá menos tempo de CPU do que os outros processos.
Conceitos sobre sistemas operacionais
Escalonamento em 2 níveis
Caso não haja memória disponível para todos os processos,
alguns destes deverão ser mantidos em disco.
Esta situação tem grande impacto sobre o escalonamento, uma
vez que o tempo gasto na troca de contexto envolvendo o disco é
algumas ordens de magnitude maior do que quando ambos os
processos estão na memória principal.
Conceitos sobre sistemas operacionais
Escalonamento em 2 níveis
Uma forma mais prática de tratar com o swap de processos é
usando um escalonador de 2 níveis.
Um subconjunto de processos prontos é carregado na memória
principal, e outro subconjunto é mantido em disco.
Um escalonador, denominado escalonador de nível mais baixo,
se restringe a escolher processos somente da memória,
utilizando qualquer uma das políticas de escalonamento.
Conceitos sobre sistemas operacionais
Escalonamento em 2 níveis
Um outro escalonador de nível mais alto é invocado para
remover processos que estão na memória há bastante tempo, e
trazer para a memória aqueles processos que estão em disco há
muito tempo.
Quando esta troca for feita, o escalonador de nível mais baixo se
restringe, novamente, a escolher processos que estão na
memória para serem executados.
Esta solução faz com que o escalonador de baixo nível se
preocupe em escalar os processos que estão na memória
enquanto que o de alto nível em trazer e levar processos entre a
memória e o disco (swap).
Conceitos sobre sistemas operacionais
Escalonamento em 2 níveis
O escalonador de alto nível pode usar um dos seguintes critérios
de escolha de processos:
 Qual o tempo decorrido desde que o processo foi
trazido para a memória e levado de volta para o disco;
 Quando tempo de CPU o processo teve;
 Qual o tamanho do processo;
 Qual a prioridade do processo.
Poderemos utilizar o Round Robin, prioridade, ou qualquer outro
método de escalonamento, para programar o escalonador de
alto nível.
Conceitos sobre sistemas operacionais
Escalonamento de Sistemas de Tempo Real
Nestes sistemas o fator tempo é crítico.
Diferentemente dos sistemas de tempo compartilhado, onde um
pequeno tempo de resposta é desejado porém não obrigatório,
todo processamento em tempo real deve ser realizado dentro de
limites rígidos de tempo ou, caso contrário, todo sistema pode
ficar comprometido.
Conceitos sobre sistemas operacionais
• Threads

Thread (Linha ou Encadeamento de execução), é uma forma de


um processo dividir a si mesmo em duas ou mais tarefas que
podem ser executadas concorrentemente. O suporte à thread é
fornecido pelo próprio sistema operacional, no caso da linha de
execução ao nível do núcleo (Kernel-Level Thread (KLT)), ou
implementada através de uma biblioteca de uma determinada
linguagem, no caso de uma User-Level Thread (ULT).
Conceitos sobre sistemas operacionais
Escalonamento de Threads
Da mesma forma que os processos sofrem escalonamento as
threads também tem a mesma necessidade. O escalonamento de
threads é variável dependedo do tipo da thread que são Kernel-
Level Thread e User-Level Thread.
Da mesma forma que quando vários processos são executados em
apenas uma CPU eles sofrem escalonamento e parecem que todos
são executados ao mesmo tempo, quando um processo tem
threads elas esperam a sua vez para ser executadas, como esta
alternância é muito rápida há impressão de que todos os processos
e as thread destes processos são executadas paralelamente.
Conceitos sobre sistemas operacionais
Escalonamento de Threads

Geralmente quando iniciamos um processo com múltiplas threads


existe um thread principal que é responsável por gerenciar criar
novas threads , quando uma thread finaliza seu trabalho ela entra
em thread_yield, que sinaliza que a thread encerrou seu trabalho
e esta liberando a CPU para outra thread ou processo.
Conceitos sobre sistemas operacionais
User-Level Thread

As ULT(User-Level Thread) são escalonadas pelo programador,


tendo a grande vantagem de cada processo ter como usar um
algoritmo de escalonamento que melhor se adapte a situação, o
SO não tem a obrigação de fazer o escalonamento destas threads,
em geral ele nem sabe que as threads existem, estas threads são
geralmente mais rápidas que as KLT, pois dispensam a chamada ao
SO para escalonar evitando assim uma mudança total de contexto
do processador memória e diversas outros níveis para alternar os
processos. Neste modo o programador é responsável por criar,
executar, escalonar e destruir a thread.
Conceitos sobre sistemas operacionais
User-Level Thread

Vamos a um exemplo prático, um processo chamado P1, este


processo pode ter varias threads, neste exemplo ele tem P1T1,
P1T2, P1T3, então quando o SO da o CPU para o processo P1 cabe
a ele destinar qual thread será executada, caso esta thread use
todo processo do quantum, o SO chamara outro processo, e
quando o processo P1 voltar a executar P1T1 voltará a ser
executada e continuará executando até seu término ou
intervenção de P1, este comportamento não afetará outros
processos pois o SO continua escalonando os processos
normalmente.
Conceitos sobre sistemas operacionais
Kernel-Level Thread

As KLT são escalonadas diretamente pelo SO, comumente são mais


lentas que as Threads ULT pois a cada chamada elas necessitam
consultar o SO, exigindo assim a mudança total do contexto do
processador, memória e outros níveis necessários para alternar um
processo.
Conceitos sobre sistemas operacionais
Kernel-Level Thread
• Um exemplo prático sobre Kernel – Level Thread: Um processo
chamado P2 com as threads P2T1, P2T2, P2T3, e outro processo
chamado P3 com as threads P3T1, P3T2, P3T3. SO não
entregara a CPU ao processo e sim a uma thread deste processo,
note agora que o SO é responsável por escalonar as threads e
este SO tem que suportar Threads, a cada interupção de thread
é necessário mudar todo o contexto de CPU e memória porém
as threads são independentes dos processos, podemos executar
então P3T2, P2T1, P2T2, P2T1, P3T1,P2T3,P3T3, ou seja a
ordem em que o escalonador do SO determinar.
Conceitos sobre sistemas operacionais
Um escalonamento típico do SO é onde o escalonador sempre
escolhe a thread de maior prioridade. As threads são divididas em
duas classes Real Time e Normal, cada thread ganha uma
prioridade ao ser criada que varia de 0 a 31, sendo 0 a de menor
prioridade e 31 a de maior prioridade.
• Processos com prioridade 0 a 15(RealTime) tem prioridade
ajustada no tempo de execução como nos processos de E/S que
tem a prioridade aumentada variando o periférico.
• Processos com prioridade 16 a 31 são executados até terminar e
não tem prioridade alterada.
Conceitos sobre sistemas operacionais
Deadlocks
Deadlock (bloqueio, impasse), em uma definição simples
caracteriza uma situação em que ocorre um impasse, onde dois ou
mais processos ficam impedidos de continuar suas execuções, ou
seja, ficam bloqueados.
O deadlock ocorre com um conjunto de processos e recursos não
preemptíveis, onde um ou mais processos desse conjunto está
aguardando a liberação de um recurso por um outro processo que,
por sua vez, aguarda a liberação de outro recurso alocado ou
dependente do primeiro processo.
Conceitos sobre sistemas operacionais
Deadlocks
• O deadlock pode ocorrer mesmo que haja somente um
processo no SO, considerando que este processo utilize
múltiplos threads e que tais threads requisitem os recursos
alocados a outros threads no mesmo processo;
• O deadlock independe da quantidade de recursos disponíveis
no sistema;
• Normalmente o deadlock ocorre com recursos como
dispositivos, arquivos, memória etc. Apesar da CPU também ser
um recurso para o SO, em geral é um recurso facilmente
preemptível, pois existem os escalonadores para compartilhar o
processador entre os diversos processos, quando trata-se de um
ambiente multitarefa.
Conceitos sobre sistemas operacionais
Deadlocks
Condições necessárias para a ocorrência de deadlock :
1 – Condição de exclusão mútua: Cada recurso ou está
alocado a exatamente um processo ou está disponível;
2 - Condição de posse-e-espera: Processos que estejam de
posse de recursos obtidos anteriormente podem solicitar
novos recursos;
Conceitos sobre sistemas operacionais
Deadlocks
Condições necessárias para a ocorrência de deadlock :
3 - 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;

4 - 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.
Conceitos sobre sistemas operacionais
Deadlocks - Representação de deadlock em grafos

O deadlock também pode ser representado na forma de grafos


dirigidos, onde o processo é representado por um círculo e o
recurso, por um quadrado. Quando um processo solicita um
recurso, uma seta é dirigida do círculo ao quadrado. Quando um
recurso é alocado a um processo, uma seta é dirigida do quadrado
ao círculo.
Na figura seguinte, podem-se ver dois processos diferentes (A e B),
cada um com um recurso diferente alocado (R1 e R2). Nesse
exemplo clássico de deadlock, é facilmente visível a condição de
espera circular em que os processos se encontram, onde cada um
solicita o recurso que está alocado ao outro processo.
Conceitos sobre sistemas operacionais
Deadlocks - Representação de deadlock em grafos
Conceitos sobre sistemas operacionais

Deadlock

Exemplo 1

Ou seja, o Processo 1 reserva para si o Recurso 1, por sua vez o Processo 2 e o


Processo 3 reservam respectivamente para si o Recurso 2 e o Recurso 3. Por
exemplo se um dos outros processos necessitar de um dos recursos
anteriormente reservados por outros processos, como acontece no diagrama da
figura anterior entramos numa situação de Deadlock.
128
Conceitos sobre sistemas operacionais
Deadlocks - Tratamento de deadlock
As situações de deadlock podem ser tratadas ou não em um
sistema, e cabe aos desenvolvedores avaliar o custo/benefício que
essas implementações podem trazer.

Normalmente, as estratégias usadas para detectar e tratar as


situações de deadlocks geram grande sobrecarga, podendo até
causar um dano maior que a própria ocorrência do deadlock,
sendo, às vezes, melhor ignorar a situação.
Conceitos sobre sistemas operacionais
Deadlocks - Tratamento de deadlock

Existem três estratégias para tratamento de deadlocks:


1) Ignorar a situação;
2) Detectar o deadlock e recuperar o sistema;
3) Evitar o deadlock;
Conceitos sobre sistemas operacionais
Os recursos são de 2 tipos :

– Preemptíveis e;
– Não-preemptíveis.
Um recurso preemptível é aquele que pode ser tomado do
processo que estiver usando o recurso, sem nenhum prejuízo para
o processo.
A memória é um exemplo de recurso preemptível
Conceitos sobre sistemas operacionais
RECURSO PREEMPTÍVEL:

Considere um sistema com 512 Kb de memória disponível para


usuários, uma impressora e 2 processos de 512 Kb (P1 e P2) cada.
Estes processos desejam imprimir alguma coisa.
O processo P1 é carregado na memória e requisita e obtém acesso
a impressora, este então inicia o processamento de impressão
(cálculos,lay-out etc), porém antes de terminar P1 excede o seu
tempo (time slice) e é retirado da memória (sai de EXECUTANDO e
vai para PRONTO).
O processo P2 começa então o seu processamento e tenta
obviamente sem sucesso, garantir para si o uso da impressora.
Conceitos sobre sistemas operacionais
RECURSO PREEMPTÍVEL:

Potencialmente temos configurado uma situação de DEADLOCK,


pois P1 tem a impressora e P2 tem a memória, e nenhum dos dois
pode prosseguir sem o recurso que esta com o outro.

Felizmente é possível tomar a memória de P2 (vai para BLOCKED),


copiando P1 (swapp) do disco para a memória agora P1 pode
executar, realizar a impressão e liberar a impressora, que quando
liberada será entregue a P2 (sai de BLOCKED e vai para PRONTO),
para que este termine o seu processamento.

Neste caso não vai ocorrer DEADLOCK.


Conceitos sobre sistemas operacionais
RECURSO NÃO-PREEMPTÍVEL:

Em contrapartida um recurso não-preemptível é aquele que


não pode ser tomado de seu proprietário atual sem causar
problemas no processamento corrente.

Por exemplo se um processo iniciou a impressão de


resultados, a impressora não poderá ser tomada dele e
entregue a outro processo, sem que haja um prejuízo
considerável no processo.

Para recurso não-preemptível ocorrerá DEADLOCK.


Conceitos sobre sistemas operacionais

Sistema Operacional como Gerenciador de


Recursos
Conceitos sobre sistemas operacionais
SISTEMA OPERACIONAL COMO GERENCIADOR DE RECURSOS

Normalmente os SOs são encarados como gerenciadores de


recursos, responsáveis principalmente pela atualização
permanente do estado de cada recurso, definição da política de
alocação de recursos (quem recebe, quanto e o que) e a liberação
dos mesmos.
Os SOs podem ser divididos em quatro gerências:

 gerência de memória
 gerência de processador
 gerência de periféricos
 gerência de informações.
Conceitos sobre sistemas operacionais
Gerência de Memória
A Gerência de Memória tem como função primordial manter
atualizado o estado de memória, isto é, controlar as partes de
memórias que estão sendo utilizadas, identificar quem as está
usando e supervisionar as áreas disponíveis.

Além disso, determina a alocação de mais memória (quando


e quanto), garante a integridade das áreas de programa,
impedindo que outro processo acesse posições de memórias
reservadas para um determinado programa, e libera com
facilidade as áreas de memórias quando um processo não
mais delas precisa.
Conceitos sobre sistemas operacionais
Gerenciamento de Memória:

O tratamento necessário da memória utilizada não é uma tarefa


fácil de ser implementada. Existem vários requisitos que devem ser
observados para o correto funcionamento, tais como, Segurança,
Isolamento, Performance, entre outros. Para isto a função de
gerenciar a memória passa a ser do sistema operacional e não mais
do aplicativo.
Conceitos sobre sistemas operacionais
Gerenciamento de Memória:

Em sua forma mais simples, está relacionado em duas tarefas


essenciais:

• Alocação: Quando o programa requisita um bloco de


memória, ogerenciador o disponibiliza para a alocação;

• Reciclagem: Quando um bloco de memória foi alocado,


mas os dados não foram requisitados por um determinado
numero de ciclos, esse é liberado e pode ser reutilizado
para outra requisição.
Conceitos sobre sistemas operacionais
Gerenciamento de Memória:

A alocação de memória pode ser:


· Alocação estática: Decisão tomada quando o programa é
compilado.
· Alocação dinâmica: Decisão é adiada até a execução. (Permite
swapping)
Conceitos sobre sistemas operacionais
Gerenciamento de Memória : Fragmentação

Desperdício de páginas de memória alocadas. Pode ser de dois


tipos: interna e externa:
Interna: Ocorre quando o processo não ocupa inteiramente os
blocos de memória (páginas) reservados para ele. Geralmente
acontece pois o tamanho do processo não é um múltiplo do
tamanho da página de memória, o que acarreta sobra de espaço
na última página alocada.
Externa: Ocorre à medida que os programas vão terminando e
deixando lacunas cada vez menores de espaços, o que os torna
inutilizáveis.
Estratégias para “atacar” o problema com o algoritmos First-fit,
Best-fit, Worstfit e Next-fit.
Conceitos sobre sistemas operacionais
Gerenciamento de Memória:
Paginação : “Quebra” a memória do processo permitindo espaços
de endereçamento não contíguos.

TLB : A Translation Lookaside Buffer (TLB) é um conjunto de


registradores especiais que são super rápidos. Cada registrador
tem duas partes: chave e valor. Dada uma chave, busca-se o valor
correspondente. Geralmente, 64 entradas, no máximo, e a busca é
feita em todos os registradores simultaneamente.
Conceitos sobre sistemas operacionais
Gerenciamento de Memória:
Memória Virtual : é uma ténica poderosa e sofisticada de gerência
de memória, onde as memórias principal e secudária são
combinadas, dando ao usuário a ilusão de existir uma memória
muito maior que a capacidade real da memória principal. O
conceito desta técnica fundamenta-se em não vincular o
endereçamento feito pelo programa aos endereços físicos da
memória principal. Desta forma, programas e suas estruturas de
dados deixam de estar limitados ao tamanho da memória física
disponível, pois podem possuir endereços associados à memória
secundária.
Conceitos sobre sistemas operacionais
Gerenciamento de Memória
Algoritmos de Substituição de Página:
• Algoritmo Ótimo
• Algoritmo Não Usada Recentemente
• Algoritmo FIFO
• Algoritmo Segunda Chance
• Algoritmo do relógio
• Menos Recentemente Usada
• WSClock
Conceitos sobre sistemas operacionais
Gerenciamento manual de memória
Em modelos de gerenciamento manual, podem ocorrer os
problemas conhecidos como vazamento de memória, que
acontece quando uma quantidade de memória é alocada e não é
liberada ainda que nunca seja utilizada. Isto ocorre quando objetos
perdem a referência sem terem sido liberados, mantendo o uso do
espaço de memória.
Conceitos sobre sistemas operacionais
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.
As vantagens desse tipo de gerenciamento são:
· Liberdade do programador: Não é obrigado ficar atento aos
detalhes da memória;
· Menos bugs de gerenciamento de memória: Por se tratar de uma
técnica
mais confiável;
· Gerenciamento automático: Mais eficiente que o manual;
Conceitos sobre sistemas operacionais
Gerenciamento de Memória: Garbage Collector

E entre as desvantagens, podemos citar:


· O desenvolvedor tende a estar mais desatento em relação a
detalhes de memória;
· O gerenciador automático ainda apresenta limitações.
Conceitos sobre sistemas operacionais
Gerenciamento de Memória: Garbage Collector

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
nasmáquinas virtuais Java e .Net).
Conceitos sobre sistemas operacionais

Gerenciamento de Entrada e Saída


Uma das principais funções de um sistema operacional é
controlar todos os dispositivos de E/S.
Ele deve enviar comandos para os dispositivos, capturar
interrupções e tratar erros.
Também deve oferecer uma interface entre os dispositivos e o
restante do sistema que seja simples e fácil de usar.
Na medida do possível, a interface deve ser a mesma para
todos os dispositivos. (Tanenbaum)
Conceitos sobre sistemas operacionais

Gerenciamento de Entrada e Saída


Nos primeiros sistemas computacionais, a comunicação entre o
processador e os periféricos era controlada por um conjunto de
instruções especiais, denominadas instruções de entrada/saída,
executadas pelo próprio processador. O surgimento do controlador
de interface permitiu ao processador agir de maneira independente
dos dispositivos de E/S. Com esse novo elemento, o processador não
mais se comunicava diretamente com os periféricos, mas sim através
do controlador. Isso simplificou as instruções de E/S, por não mais
ser necessário especificar detalhes de operação dos periféricos,
tarefa esta realizada pelo controlador.
Conceitos sobre sistemas operacionais
Conceitos sobre sistemas operacionais
Dispositivos de E/S

Os dispositivos de E/S podem ser divididos em duas categorias:

 Dispositivos de Blocos; e
 Dispositivos de Caractere.
Conceitos sobre sistemas operacionais
Dispositivo de Bloco

Um dispositivo de bloco, armazena as informações em blocos de


tamanho fixo, cada um com seu próprio endereço. A propriedade
essencial de um dispositivo de bloco é que é possível ler ou gravar
cada bloco independente de todos os outros. Os Discos são os
dispositivos de blocos mais comuns.

É endereçável e possui operações de busca (Exemplo: Busca de um


dado no disco rígido).
Conceitos sobre sistemas operacionais
Dispositivo de Caractere
É o dispositivo que entrega ou aceita um fluxo de caracteres sem
considerar qualquer estrutura de bloco. Ele não é endereçável e
tampouco tem qualquer operação de busca.
Exemplos: Impressoras, interfaces de rede, mouse.
Conceitos sobre sistemas operacionais
Não é dispositivo Bloco ou Caractere

Os relógios não são endereçáveis por bloco, tampouco aceitam fluxo


de caracteres.
Tudo que fazem é gerar interrupções em intervalos bem definidos.
Conceitos sobre sistemas operacionais

Controle das Operações de Entrada e Saída:

 E/S controlada por programa;

 E/S controlada por Pooling;

 E/S Controlada por Interrupção;

156
Conceitos sobre sistemas operacionais
E/S controlada por programa
Neste tipo de operação, o processador sincronizava-se com o
periférico para o início da transferência de dados e, após iniciada
a transferência, o sistema ficava permanentemente testando o
estado do periférico para saber quando a operação chegaria ao
seu final.
Este controle, chamado e E/S controlada por programa,
mantinha o processador ocupado até o término da operação de
E/S (busy wait).
Como o processador executa uma instrução muito mais
rapidamente que a realização de uma operação de E/S pelo
controlador, havia um enorme desperdício de tempo da UCP.
Conceitos sobre sistemas operacionais
E/S controlada por Pooling
A evolução do modelo anterior foi permitir que, após o início da
transferência dos dados, o processador permanecesse livre para
realizar outras tarefas. Assim, em determinados intervalos de
tempo, o sistema operacional deveria testar cada dispositivo
para saber do término da operação de E/S (polling). Esse tipo de
operação introduziu certo grau de paralelismo, visto que um
programa poderia ser processado, enquanto outro esperava pelo
término de uma operação de E/S. Isso permitiu o surgimento dos
primeiros sistemas multiprogramáveis, onde vários programas
poderiam ser executados concorrentemente, já que o tempo de
uma operação de E/S é relativamente grande.
Conceitos sobre sistemas operacionais
E/S Controlada por Interrupção

Com a implementação do mecanismo de interrupção, as


operações de E/S puderam ser realizadas de uma forma mais
eficiente. Em vez de o sistema periodicamente verificar o estado
de uma operação pendente, o próprio controlador interrompia o
processador para avisar do término da operação. Com esse
mecanismo, denominado E/S controlada por interrupção, o
processador, após a execução de um comando de leitura ou
gravação, permanece livre para o processamento de outras
tarefas.
Conceitos sobre sistemas operacionais
E/S Controlada por Interrupção
A operação de E/S controlada por interrupção é muito mais
eficiente que a controlada por programa, já que elimina a
necessidade de o processador esperar pelo término da
operação, além de permitir que várias operações de E/S sejam
executadas simultaneamente. Apesar disso, a transferência de
grande volume de dados exige muitas intervenções do
processador, reduzindo sua eficiência. A solução para esse
problema foi a implementação de uma técnica de transferência
de dados denominada DMA (Direct Memory Access).
Conceitos sobre sistemas operacionais
Controladora
Uma placa controladora é uma parte do hardware de
computadores que comanda outras partes da máquina.
Normalmente é conectada na placa-mãe através de slots
apropriados de acordo com o barramento relativo à placa.
Conceitos sobre sistemas operacionais
Device driver
Device driver (Controlador de Dispositivo) é uma camada de
software que implementa um conjunto de funções que realiza a
comunicação com o dispositivo.
Device driver é o comando de um dispositivo ou programa. É a
forma a partir da qual uma unidade periférica cria uma interface
com o sistema operacional para se conectar com o dispositivo do
hardware.
Conceitos sobre sistemas operacionais
DMA
Está técnica permite que um bloco de dados seja transferido
entre a memória principal e dispositivos de E/S; sem a
intervenção do processador, exceto no início e o final da
transferência.
Quando o sistema deseja ler ou gravar um bloco de dados, o
processador informa ao controlador sua localização, o dispositivo
de E/S, a posição inicial da memória de onde os dados serão
lidos ou gravados e o tamanho do bloco.
Conceitos sobre sistemas operacionais
DMA
Com estas informações, o controlador realiza a transferência
entre o periférico e a memória principal, e o processador é
interrompido somente no início e no final da operação. A área de
memória utilizada pelo controlador na técnica de DMA é
chamada de buffer de entrada/saída.

No momento em que uma transferência de dados através da


técnica de DMA é realizada, o controlador deve assumir,
momentaneamente, o controle do barramento.
Conceitos sobre sistemas operacionais
Canal de Entrada e Saída
A extensão do conceito de DMA possibilitou o surgimento do
canal de entrada/saída.
O canal é um processador com capacidade de executar
programas de E/S, permitindo o controle total sobre operações
de E/S. As instruções de E/S são armazenadas na memória
principal pelo processador, porém o canal é responsável pela sua
execução.
Assim, o processador realiza uma operação de E/S, instruindo o
canal para executar um programa localizado na memória
(programa de canal).

166
Conceitos sobre sistemas operacionais

Canal de Entrada e Saída

Este programa especifica os dispositivos para transferência,


buffers e ações a serem tomadas em caso de erros.
O canal de E/S realiza a transferência e, ao final, gera uma
interrupção, avisando do término da operação. Um canal de
E/S pode controlar múltiplos dispositivos através de diversos
controladores.
Cada dispositivo, ou conjunto de dispositivos, é manipulado
por um único controlador. O canal atua como um elo de ligação
entre o processador e o controlador.

167
Conceitos sobre sistemas operacionais
Conceitos sobre sistemas operacionais
Canal de Entrada e Saída

A evolução do canal permitiu que este possuísse sua própria memória,


eliminando a necessidade de os programas de E/S serem carregados
para a memória principal. Com essa nova arquitetura, varias funções
de E/S puderam ser controladas com mínima intervenção da UCP. Esse
estágio do canal é também denominado processador de
entrada/saída.
Conceitos sobre sistemas operacionais
Buffering

A técnica de buffering consiste na utilização de uma área na memória


principal, denominada buffer, para a transferência de dados entre os
dispositivos de E/S e a memória. Essa técnica permite que uma
operação de leitura o dado seja transferido primeiramente para o
buffer, liberando imediatamente o dispositivo de entrada para realizar
uma nova leitura.

O objetivo principal desta técnica é minimizar o problema da


disparidade da velocidade de processamento existente entre a UCP e
os dispositivos de E/S, mantendo-os ocupados na maior parte do
tempo.
Conceitos sobre sistemas operacionais

Buffering
Conceitos sobre sistemas operacionais
Spooling
A técnica de spooling (simultaneous peripheral operation on-line), é
semelhante à técnica de buffering, utiliza uma área em disco como se
fosse um grande buffer. Neste caso, dados podem ser lidos ou
gravados em disco, enquanto programas são executados
concorrentemente.

Atualmente essa técnica está presente na maioria dos sistemas


operacionais, sendo utilizada no gerenciamento de impressão.
Conceitos sobre sistemas operacionais
Spooling
No momento em que um comando de impressão é executado, as
informações que serão impressas são gravadas antes em um
arquivo em disco, conhecido como arquivo de spool, liberando
imediatamente o programa para outras atividades.
Posteriormente, o sistema operacional encarrega-se de
direcionar o conteúdo do arquivo de spool para a impressora.
Conceitos sobre sistemas operacionais

Spooling
Conceitos sobre sistemas operacionais
Reentrância
É a capacidade de um código executável (código reentrante) ser
compartilhado por diversos usuários, exigindo que apenas uma
cópia do programa esteja na memória.
A reentrância permite que cada usuário possa estar em um
ponto diferente do código reentrante, manipulando dados
próprios, exclusivos de cada usuário.
Conceitos sobre sistemas operacionais

Reentrância
Conceitos sobre sistemas operacionais

Pipeline
Pipeline é uma técnica de hardware que permite que a CPU
realize a busca de uma ou mais instruções além da próxima a
ser executada. Estas instruções são colocadas em uma fila de
memória (dentro da CPU) onde aguardam o momento de
serem executadas.
A técnica de pipeline é utilizada para acelerar a velocidade de
operação da CPU, uma vez que a próxima instrução a ser
executada está normalmente armazenada dentro da CPU e não
precisa ser buscada da memória, normalmente muito mais
lenta que a CPU.
Conceitos sobre sistemas operacionais
Chamadas de Sistemas

É a interface entre o Sistema operacional e seus programas aplicativos.

Em computação, uma chamada de sistema (system call) é o


mecanismo usado pelo programa para requisitar um serviço do
sistema operacional, ou mais especificamente, do kernel do sistema
operacional.
Conceitos sobre sistemas operacionais
Chamadas de Sistemas

Podem ser:

 Gerenciamento de Processos;
 Gerenciamento de Sinalização;
 Gerenciamento de Arquivos;
 Gerenciamento de Diretórios e Sistemas de Arquivos;
 Gerenciamento de Tempo.
Conceitos sobre sistemas operacionais
Gerenciamento de Processo

Trata os estados que o processo passa, deste a sua criação


(running, ready, wait, blocked).

Subprocesso e Thread.
Conceitos sobre sistemas operacionais

181
Conceitos sobre sistemas operacionais
Gerenciamento de Sinalização
Em alguns casos é necessário intervir na execução de um
processo, seja por motivos planejados ou por instruções ilegais
passadas ao sistema (falhas).
Por exemplo se um usuário instrui um editor de texto a
imprimir o conteúdo deste arquivo, e então verifica que não
quer mais imprimir, deverá haver uma maneira de interromper
o editor e eliminar o processo, neste caso é utilizado a
chamada kill.
Conceitos sobre sistemas operacionais
Conceitos sobre sistemas operacionais
Gerenciamento de Arquivo

Muitas chamadas de sistemas estão relacionadas com o


sistema de arquivos e os seus métodos de acesso, como por
exemplo, solicitações de: criação, leitura e exclusão de
arquivos.
A criação de um arquivo pode ser definida como uma chamada
creat(“abc”,751), assim um novo arquivo denominado abc seria
gerado com permissões 7 – ler, gravar e executar para o
proprietário; 5 – ler e executar para o grupo e 1 – apenas
executar para os outros. (RWX).
Conceitos sobre sistemas operacionais

185
Conceitos sobre sistemas operacionais
Gerenciamento de Diretórios e Sistemas de Arquivos

São as chamadas que se relacionam com diretórios ou com o


sistema de arquivos, como um todo, em vez de um arquivo
específico.
Em se tratando de gerenciamento de diretórios, as duas
chamadas mais importantes seriam: mkdir e rmdir, que
permitem a criação e remoção de diretórios.
Outra chamada importante neste grupo são aquelas que tratam
“montar” um dispositivo para permitir o acesso aos seus
diretórios e arquivos, como exemplo o comando “mount” para
disponibilizar e “umount” para interromper o seu uso.
Conceitos sobre sistemas operacionais

187
Conceitos sobre sistemas operacionais
Gerenciamento de Tempo
Basicamente trata-se de chamadas de sistema que envolvem o
tempo de relógio convencional. Entre as possibilidades estão,
exemplo:
 Time: que retorna a hora do sistema;
 Stime: Relógio possa ser configurado pelo Superusuário;
 Utime: Permite que o arquivo tenha definido os atributos
de data e hora de criação e modificação; e
 TimeS: Retorne o tempo de utilização da CPU.

188
Conceitos sobre sistemas operacionais

189
Conceitos sobre sistemas operacionais
Multiprogramação

Num sistema multiprogramado, mesmo que só exista um


processador é possível vários processos estarem ativos
simultaneamente. Contudo, em cada instante temporal,
apenas um deles pode utilizar o processador
A esta ilusão de vários processos correrem aparentemente em
paralelo, dá-se o nome de pseudo-paralelismo
Conceitos sobre sistemas operacionais
Multiprogramação
Depois de uma comutação do processador, o próximo processo
a utilizá-lo é escolhido pelo sequenciador de processos do SO
(Escalonador).

Concorrência
Os vários processos “competem” entre si pela atenção do
processador.
Conceitos sobre sistemas operacionais
Multiprogramação

Cooperação
– Processos podem trabalhar em conjunto para a
realização de tarefas mais complexas.
– Esta cooperação exige ao SO a existência de mecanismos
de sincronização e comunicação entre processos.
Conceitos sobre sistemas operacionais
Multiprogramação

Comunicação Interprocessos

A comunicação entre processos, em inglês Inter-Process


Communication (IPC), é o grupo de mecanismos que permite
aos processos transferirem informação entre si.
Conceitos sobre sistemas operacionais
Multiprogramação - Comunicação Interprocessos
Deveremos verificar 3 questões envolvidas neste processo de
comunicação (Regras para programação concorrente):
1 – Como um processo pode passar informações para outro
processo;
2 – Deverá ser certificado que dois ou mais processos não
interfiram um com outro quando envolvidos em atividades
críticas;
3 – O seqüenciamento adequado quando estão presentes
dependências: Se o processo A produz dados e o processo B os
imprime, B tem de esperar ate que A tenha produzido alguns
dados antes de começar a imprimir.
Conceitos sobre sistemas operacionais
Condições de Corrida

Situação onde dois ou mais processos estão acessando dados


compartilhados e o resultado do processamento depende de
quem roda quando.

Quando um processo quer imprimir um arquivo, ele insere o


nome deste arquivo em um diretório de spooler. O servidor de
impressão verifica periodicamente se há qualquer arquivo a ser
impresso e, se houver ele os imprime e, então remove seus
nomes do diretório de spooler.
Conceitos sobre sistemas operacionais
Condições de Corrida

Imagine que nosso diretório de spooler esteja vazio, com


números de entradas seqüenciais 0,1,2..., cada uma capaz de
armazenar um arquivo a ser impresso, imagine também que
existem 2 variáveis OUT que aponta para o próximo arquivo a
ser impresso e IN que aponta para a próxima entrada livre no
diretório de spooler.
Em nosso exemplo OUT = IN = 0 (zero), ou seja, não, existem
arquivos no spooler.
Conceitos sobre sistemas operacionais
Condições de Corrida

Mais ou menos simultaneamente os processos A e B, decidem


que querem colocar um arquivo na fila de impressão (spooler).
O processo A lê a variável IN e armazena o valor 0 (zero), em
uma variável local de controle (next_free_slot), só que
acontece uma interrupção de relógio, e a CPU decide que o
processo A executou por tempo suficiente (Time Slice) e então
alterna para o processo B .
Conceitos sobre sistemas operacionais
Conceitos sobre sistemas operacionais
Condições de Corrida
O processo B também lê a variável IN e também recebe 0 (zero)
e escreve o nome do seu arquivo na posição 0 (zero) do
spooler.
Conceitos sobre sistemas operacionais
Condições de Corrida

Por fim o processo executa novamente, iniciando do lugar que


parou, ela examina a sua variável de controle (next_free_slot) e
encontra o valor 0 (zero), então escreve o nome do arquivo na
posição zero do spooler, sobrescrevendo o nome do arquivo
que o processo B acabou de colocar ali.
Ele então calcula next_free_slot+1 e armazena em IN (1).
O processo B nunca realizará qualquer saída, após esta
situação.
Conceitos sobre sistemas operacionais
Condições de Corrida

Para evitar as condições de corrida, precisamos implementar


algoritmos de exclusão mútua de execução e, para tanto,
definimos as regiões críticas do processo.
Conceitos sobre sistemas operacionais
Condições de Corrida
Conceitos sobre sistemas operacionais
Condições de Corrida - Seções Criticas ou Regiões Críticas

Como evitamos a condição de corrida ?

A chave para prevenir problemas aqui e em muitas outras


situações envolvendo memória compartilhada, arquivos
compartilhados e tudo mais compartilhado é encontrar alguma
maneira de proibir que mais de um processo leia e grave os
dados compartilhados ao mesmo tempo.

Dito em outras palavras precisamos de uma exclusão mútua –


é uma maneira de certificarmo-nos de que se um processo esta
utilizando um arquivo ou uma variável compartilhada, ou
outros processos serão impedidos de fazer a mesma coisa.
Conceitos sobre sistemas operacionais
Seções Criticas

A dificuldade do exemplo anterior ocorria porque o processo B


começava utilizando uma das variáveis compartilhadas antes
de o processo A ter acabado de ter trabalhado com ela.
A parte do programa cujo processamento, por manipular dados
compartilhados, pode levar à ocorrência de condições de
corrida é chamada REGIÃO CRÍTICA.
Conceitos sobre sistemas operacionais
Seções Criticas

A dificuldade do exemplo anterior ocorria porque o processo B


começava utilizando uma das variáveis compartilhadas antes
de o processo A ter acabado de ter trabalhado com ela.
A parte do programa cujo processamento, por manipular dados
compartilhados, pode levar à ocorrência de condições de
corrida é chamada REGIÃO CRÍTICA.
Conceitos sobre sistemas operacionais
Seções Criticas
Objetivo: nunca permitir que dois processos entrem
simultaneamente em suas regiões críticas correspondentes (i.e.
referentes à mesma variável compartilhada).

Condições para uma boa solução ao problema:

1) Dois ou mais processos não podem estar simultaneamente


dentro de suas regiões críticas correspondentes.

2) Nenhum processo rodando fora de sua região crítica pode


bloquear a execução de outro processo.
Conceitos sobre sistemas operacionais
Seções Criticas
Condições para uma boa solução ao problema:
3) Nenhum processo pode ser obrigado a esperar
indefinidamente para entrar em sua região crítica.
4) Nenhuma consideração pode ser feita a respeito da
velocidade relativa dos processos, ou a respeito do número de
processadores do sistema.
Conceitos sobre sistemas operacionais
Seções Criticas ou Regiões Críticas

 Resumo:

– seção do programa onde são efetuados acessos (para


leitura e escrita) a recursos partilhados por dois ou
mais processos.
– É necessário assegurar que dois ou mais processos não
se encontrem simultaneamente na região crítica.
Conceitos sobre sistemas operacionais
Seções Criticas ou Regiões Críticas

 Resumo:

– seção do programa onde são efetuados acessos (para


leitura e escrita) a recursos partilhados por dois ou
mais processos.
– É necessário assegurar que dois ou mais processos não
se encontrem simultaneamente na região crítica.
Conceitos sobre sistemas operacionais
Exclusão Mútua

Exclusão mútua - é uma técnica usada em programação


concorrente para evitar que dois processos ou threads tenham
acesso simultaneamente a um recurso compartilhado, acesso
esse denominado por seção crítica.
Conceitos sobre sistemas operacionais
Exclusão Mútua - Desativando as Interrupções

O processo desativa todas as interrupções logo após entrar em


uma região crítica, e as habilita ao sair. Assim, o processo não
poderá ser interrompido mesmo após acabar o seu tempo de
execução.

Com as interrupções desativadas, nenhuma interrupção de


relógio pode ocorrer, com isso a CPU não poderá alternar de
um processo para outro.

Sendo assim após o processo desativar as interrupções, ele


pode examinar e atualizar a memória compartilhada, sem
medo de outro processo intervir.
Conceitos sobre sistemas operacionais
Exclusão Mútua - Desativando as Interrupções
Problemas:
• Não é boa prática dar ao usuário a capacidade de ativar
interrupções;
• O processo pode desativar as interrupções e nunca mais
ativá-las;
• Se o sistema é multiprocessado (com 2 ou mais CPUs),
desativar as interrupções afeta apenas a CPU que executou
a instrução de desativamento.
Conceitos sobre sistemas operacionais
Exclusão Mútua - Desativando as Interrupções
Conclusão:

Desativar interrupções é freqüentemente uma técnica útil


dentro do sistema operacional em si, mas não é apropriada
como um mecanismo geral de exclusão mútua para processos
de usuário.
Conceitos sobre sistemas operacionais
Variáveis de Bloqueio
Como uma segunda tentativa, vamos procurar uma solução de
software. Considere ter uma variável única compartilhada de
nome bloqueio (inicialmente com o valor Zero) que pode
assumir os seguintes valores/situação:

Variável compartilhada:

0: ninguém está na região crítica;


1: existe alguém na região crítica.
Conceitos sobre sistemas operacionais
Variáveis de Bloqueio
Como uma segunda tentativa, vamos procurar uma solução de
software. Considere ter uma variável única compartilhada de
nome bloqueio (inicialmente com o valor Zero) que pode
assumir os seguintes valores/situação:

Variável compartilhada:

0: ninguém está na região crítica;


1: existe alguém na região crítica.
Conceitos sobre sistemas operacionais
Variáveis de Bloqueio
Quando um processo quer entrar na sua região crítica, ele
primeiro testa o bloqueio. Se o bloqueio for 0, o processo passa
o bloqueio para 1 e entra na região crítica.

Se o bloqueio já for 1, ele espera até o bloqueio ir para 0.


Conceitos sobre sistemas operacionais
Variáveis de Bloqueio
• Problema:

Contém o mesmo erro fatal, visto no spooler. Suponha que o


processo P1 leia o bloqueio e veja que ele é 0, porém antes de
ele poder definir o bloqueio como 1, outro processo P2 é
agendado, executa e define o bloqueio como 1, quando P1
executa novamente, ele também definirá o bloqueio igual a 1,
e os dois processos estarão em suas regiões críticas ao mesmo
tempo.
Conceitos sobre sistemas operacionais
Alternância Estrita ou Turno

•"vez": variável compartilhada, inicialmente valendo 0. Se há


dois processos (A) e (B), sendo que vez==0 indica a vez do
processo (A) entrar em sua região crítica e vez==1, a vez do
processo (B).
Conceitos sobre sistemas operacionais
Alternância Estrita
• Problema:
Espera ocupada (teste contínuo da variável compartilhada
"vez"): consumo desnecessário do tempo do processador
(espera ativa).

Um processo só terá vez se o outro entrar e sair da sua região


crítica. Isto representa uma violação da condição 2 acima.
(Nenhum processo rodando fora de sua região crítica pode
bloquear a execução de outro processo. )

Este esquema para exclusão mútua é muito inadequado


quando um dos processos é mais lento que o outro.
Conceitos sobre sistemas operacionais
ATENÇÃO
Testar continuamente uma variável até que algum valor
apareça é chamado de espera ativa. Normalmente deve ser
evitado, uma vez que desperdiça tempo de CPU.

Somente quando existe uma expectativa de que a espera será


curta é que a espera ativa será utilizada.
Conceitos sobre sistemas operacionais
ATENÇÃO
Testar continuamente uma variável até que algum valor
apareça é chamado de espera ativa. Normalmente deve ser
evitado, uma vez que desperdiça tempo de CPU.

Somente quando existe uma expectativa de que a espera será


curta é que a espera ativa será utilizada.
Referências

www.infowester.com
www.cdi.org.br
www.socid.org.br
http://www.guiadatecnologia.com
http://www.tecmundo.com.br
http://pt.wikipedia.org