aula
Entender, analisar e recomendar a evolução dos sistemas operacionais, gerenciamento de:
1. Processos;
2. Memória (hierarquia de memória, modos de endereçamento, estrutura de controle,
memória virtual);
3. Arquivos;
4. Entrada e saída.
Hardware X Software
Durante o processo da transformação do produto bruto até a saída e entrega do produto final
existem componentes físicos e lógicos trabalhando nesta produção.
Os componentes físicos no nosso mundo computacional são conhecidos como Hardware e a parte
lógica como Software.
Estes e outros diversos termos e nomes utilizados são palavras de origem inglesa.
O hardware de um computador pode incluir:
a) Computador em si;
b) Discos e a unidade de discos;
c) Impressora;
d) Mouse
O software
O software corresponde a qualquer programa ou grupo de programas que instrui o hardware sobre a
maneira como ele deve executar uma tarefa, inclusive sistemas operacionais, processadores de textos
e programas de aplicação.
Todo o procedimento, no período do ENIAC era bem inflexível e grosseiro, demorando horas e
caso qualquer válvula queimasse durante o processo para iniciar a utilização do computador, o
processo deveria ser reiniciado.
Características da 4° geração:
Introdução dos microprocessadores;
Desenvolvimento dos computadores;
Pessoais (Personal computer, ou PC)
Escala de integração:
VLSI: Very large scale integration
Além dessas características, esta geração foi marcada pelo surgimento dos processadores, os
sistemas operacionais como o MS-DOS, UNIX e Marcintosh, linguagem de programação
orientadas a objetos como o C++ e o smalltalk.
Impressoras matriciais, e os teclados com os layouts atuais também foram criados nessa época.
Enquanto nas primeiras gerações era necessário o uso de cartões magnéticos que continham as
instruções, em que deveríamos implementar qual seria o processo, gerar o cartão e colocar o cartão
para que ele pudesse ser processado.
Ao longo da história da computação, máquinas totalmente mecânicas foram, aos poucos, sendo
substituídas por equipamentos que mesmo os mais otimistas dos cientistas da época dos primeiros
computadores do mundo jamais poderiam acreditar ou afirmar ser possíveis.
Para a computação atual se tornar realidade, muitas quebras de paradigmas e diversas
transformações no hardware e software foram necessárias. A pluralidade dos equipamentos foi
durante muitos anos um grande benefício para o modelo que temos hoje, que ainda não é o
definitivo e muito menos o mais eficiente.
Fundamentos de sistemas operacionais - 2° Unidade - 1° Vídeo
Aula Zzz
Tipos de sistemas operacionais
Podemos classificar os sistemas operacionais com base referencial em diversos parâmetros e
perspectivas, velocidade, suporte a recursos específicos, acesso à rede, etc.
Nesta unidade são apresentados alguns tipos de sistemas operacionais típicos (muitos dos sistemas
operacionais estão enquadrados em mais de uma das categorias apresentadas).
Memória
Na teoria, a memória deveria ser mais performática do que a execução de uma instrução processada
por uma CPU, pois, com isso, a CPU jamais teria que esperar pela resposta da memória; entretanto,
na prática isso não é verdade.
Para tentar resolver este problema, a abordagem contemporânea é construir o sistema de memória
seguindo uma hierarquia de camadas, conforme se demonstra na próxima figura.
No topo da pirâmide, temos os registradores que estão contidos nas CPUs. Esses são feitos do
mesmo material que as CPUs e são tão rápidos quanto elas. Desta forma, o tempo do registrador
para a memória é desprezível e a capacidade de memória disponível nos registradores é de 32x32
bits para CPU de 32 bits e de 64x64 bits para CPU de 64 bits, sendo menos de 1kb mesmo no caso
das CPUs de 64 bits.
Seguindo, no segundo nível, vem a memória cache, que é controlada principalmente pelo hardware.
Atualmente vários dispositivos, como processadores, discos rígidos, placas mãe,
placas controladoras e outros, possuem cache. A memória cache é mais usada para
armazenar informações frequentemente mais utilizadas, porém memória cache é
muito cara e não é tão abundante nos sistemas.
No próximo nível, é possível identificar a memória principal, também conhecida como memória RAM
(Random acess memory - Memória de acesso aleatório).
Todas as solicitações vindas da CPU e que não estão na memória cache são encaminhadas para a
memória principal.
ROM (Read only memory) e CMOS são outros tipos de memória também presentes nos sistemas
computacionais.
A memória ROM é normalmente usada pelos fabricantes para gravar códigos controladores de
hardware e são previamente programadas em fábricas, não sendo possível sua alteração, a não ser
que se usem equipamentos específicos para essa finalidade.
A memória CMOS é tipicamente usada para manter data e hora atualizada e parâmetros de
configuração do hardware, como sequência de boot e outros, mesmo que o computador esteja
desligado.
A memória CMOS necessita de uma bateria para manter seu conteúdo.
Discos magnéticos
Os discos magnéticos estão na camada logo abaixo da memória principal, sendo conhecidos como
discos rígidos ou, em inglês hard disks, e também, de forma abreviada como HD.
O grande atrativo dos discos magnéticos em relação à memória é o preço bem menor se comparado
R$/GB, entretanto, o contraponto é a velocidade de acesso que é muito mais lenta por ser um
dispositivo mecânico.
Na estrutura de um disco magnético, temos como uma das principais partes o grupo de discos
metálicos em que são gravadas as informações. Tipicamente, esses discos rodam a velocidade de
5400 a 10000 rpm (rotação por minuto) e tem uma média de transferência de 0,5 Gbit/s
Em ambientes projetados com servidores de rede e, principalmente, servidores de
banco de dados transacional, normalmente são instalados discos com velocidade de
15000 rpm, podendo-se atingir a média de transferência acima de 1,6 Gbit/s. Os
discos de 10000 ou 15000 rpm usam discos menores para mitigar grandes demandas
de energia, entretanto, isso acarreta que esses discos com maior capacidade de
rotação por minuto possuem menos capacidade de que os discos magnéticos de
menos rpm.
As informações são escritas no disco em uma série de círculos que têm o mesmo centro. Cada cabeça
pode ler e gravar uma região circular chamada trilha. Juntas, as trilhas de uma posição do braço
formam um cilindro.
Mover o braço entre cilindros próximos leva aproximadamente 1ms e mover o braço de um
determinado cilindro para outro distante leva em torno de 5 a 10ms.
Fitas
A fita magnética é o último tipo de memória na pirâmide ilustrada lá em cima. Esse meio é muito
utilizado como mídia de cópias de segurança (backup), transportando uma cópia daquilo que está
nos discos magnéticos para fitas magnéticas.
Com base nas normas de segurança ISO 27001, e até mesmo do banco central brasileiro, é
obrigatório o uso de sistemas de backup para garantir que a informação esteja disponível em caso de
o sistema principal apresentar problema.
Grandes sistemas utilizam robôs que controlam a troca de fitas, bem como softwares
especiais para backups, como o Veritas Backup Exec, Data Protector, ARCserve,
Tivoli Storage Management e outros.
Dispositiviso de E/S
Os dispositivos de E/S são geralmente os controladores e os dispositivos
O controlador é formado por um ou mais chips numa placa, esses controladores possuem a
função de receber os comandos do sistema operacional e gerar as instruções mais adequadas
para os dispositivos, fornecendo orientação exatamente de como o disco rígido armazena e
acessa os dados, por exemplo.
Os dispositivos possuem interfaces bastante padronizadas. Isso ajuda porque a controladora
IDE pode controlar qualquer disco IDE.
Entre o sistema operacional e o controlador, há outro software chamado driver de
dispositivo.
o É função do driver de dispositivo se comunicar com o controlador, emitindo
comandos e recebendo respostas.
Os fabricantes de controladores devem fornecer drivers específicos para cada sistema operacional a
que dão suporte.
Existem três maneiras diferentes para entrada e saída (E/S): O método mais simples é quando o
programa de um usuário emite uma chamada de sistema, então o núcleo do sistema operacional a
traduz em uma chamada ao driver relacionado, em seguida, o driver inicia a entrada e saída e fica
em constante checagem se o dispositivo terminou a operação, quando a operação é finalizada, o
driver coloca os dados onde são necessários; o sistema operacional, então, remete o controle para
quem originou a chamada.
Nesse processo, a CPU fica ocupada durante a monitoração se a operação de E/S terminou
ou não.
No segundo método, o driver inicia o dispositivo e instrui que ele o informe quando terminar, durante
esse período de intervalo, o sistema operacional retoma o controle da CPU para executar outra
tarefa. Assim que o controlador recebe a sinalização do final da transferência, ele gerará uma
interrupção para sinalizar o término.
O DMA (Direct memory acess) é o terceiro método para a implementação de entrada e saída. Nesse
cenário, é utilizado um chip especial de acesso direto à memória, controlando o fluxo de bits entre a
memória e algum controlador sem intervenção constante da CPU. Nesse processo, a CPU configura
o chip DMA informando a quantidade de bytes que devem ser transferidos, os endereços do
dispositivo e de memória empregados, e a direção. Então, a execução fica a cargo do DMA. Assim
que o DMA finaliza a tarefa haverá uma interrupção.
O termo barramento é definido como elos de comunicação que consistem em um conjunto de vias.
Ao longo da evolução da arquitetura computacional, os barramentos foram tomando forma mais
heterogênea e estruturada para as necessidades modernas.
Os processadores e memória foram ficando cada vez mais velozes, e o computador antigo, que
inicialmente tinha somente um barramento, passou a não mais dar conta.
Barramento
A CPU se comunica com o barramento PCI por meio do barramento local que, por sua vez, se
comunica com a memória por intermédio de um barramento dedicado. Usando, por exemplo, um
sistema Pentium com uma cache de nível 1 dentro do chip e uma cache de nível 2 muito maior que
fica na parte externa do chip e é conectado à CPU pelo barramento cache.
Esse sistema contém também três barramentos específicos: IDE, USB e SCSI. O barramento IDE,
como descrito anteriormente, pode ser usado para conectar discos físicos e unidade de CD-ROM.
O padrão USB foi desenvolvido por um consórcio de empresas, entre as quais podem citar:
Microsoft, apple, NEC, Intel e etc.
Uma das características fundamentais para o sucesso do USB, principalmente pela demanda de
agilidade de interoperabilidade, é que esta tecnologia compartilha o mesmo driver entre seus
dispositivos, tornando dispensável instalar um novo driver para cada novo dispositivo USB.
Isso traz como benefício maior o fato de podermos instalar dispositivos USB no computador sem
precisar reinicia-lo. Ou seja plug and play.
Resumo
No modelo abstrato de sistema operacional, temos que ter alguns entendimentos a respeito de
processadores, memórias e dispositivos de entrada e saída que são conectados por barramentos.
Além da estrutura de hardware em que está montado o sistema operacional, os
conceitos típicos sobre os quais todos os sistemas operacionais são construídos são:
Processos;
Gerenciamento de memória;
Gerenciamento de E/S;
Sistema de arquivos;
Segurança.
Os sistemas operacionais podem ser vistos por dois prismas:
Dispositivo gerenciador de recursos;
Maquina estendida.
Todos os sistemas operacionais possuem, na sua essência, o conjunto de chamadas de sistema com
que eles podem lidar. Dentre elas, destacamos:
a. Criação e finalização de processos;
b. Leitura e escrita de arquivos;
c. Gerenciamento de diretórios;
d. Chamadas diversas.
- Todos os computadores são capazes de executar diversas atividades “ao mesmo tempo”,
esse mecanismo de trocas rápidas é chamado de Multiprogramação.
Os softwares de computador são organizados em processos sequenciais.
Um processo é um programa em execução, acompanhado dos valores correntes do contador de
programa, dos registradores e das variáveis.
Uma CPU pode executar um processo por vez.
Observe a próxima ilustração de um sistema com dois cores, que equivale a termos de duas CPUs,
porém, ainda temos a mesma afirmativa. - Todas as CPUs podem executar um processo por vez.
Vale destacar que um processo e um programa possuem conceitos distintos, sendo que o processo
constitui uma atividade, possuindo programa, entrada, saída e um estado.
Os processos podem conter mais de uma tarefa, conceituando, então, que processo e tarefa são
distintos.
Processos são criados e destruídos constantemente nos sistemas. Essas operações disponibilizam
aplicações por meio de chamadas de sistemas que diferem entre sistemas operacionais. Para os
sistemas de propósitos gerais, é necessário algum mecanismo para criar e terminar processos
durante a operação quando for necessário.
Teremos nos sistemas quatro eventos que fazem que processos sejam criados: No início do sistema,
um processo em execução procedendo a uma chamada de sistema de criação de um processo,
requisição do usuário para criar um novo processo e gerenciar a tarefa em lote (bacth job), que está
sendo iniciada.
Ao iniciar o sistema operacional, tipicamente vários processos são criados. Entre esses processos
temos aqueles em primeiro plano, e interligados com o usuário e outros que estão em segundo plano.
Para exemplificar um processo em segundo plano podemos pegar o caso de um servidor de FTP
(File transfer protocol) que fica inativo durante boa parte do tempo, sendo ativado somente quando
um cliente FTP solicita a abertura de uma nova conexão. Daemons é o termo que geralmente
utilizamos para nos referirmos a um processo em segundo plano.
Processos que estão em execução podem fazer chamadas de sistema (system calls) para criar um ou
mais processos.
Criar processos é indicado quando a tarefa a ser executada puder ser facilmente dividida em vários
processos relacionados, interagindo, entretanto, de maneira independente. Os usuários podem
iniciar um novo processo começando um programa no ambiente GUI ou no ambiente Shell.
No caso de sistema em lote, tipicamente encontrados em computadores de grande porte, o usuário,
administrador ou até mesmo um alinhamento prévio, pode submeter tarefas em lote para o sistema.
O sistema operacional criará um novo processo e o executará quando tiver recurso
disponível e/ou redefinindo prioridades e executando o processo no momento
determinado.
Processos que trabalham juntos podem compartilhar algum armazenamento comum e serem capazes
de ler e escrever
O armazenamento compartilhado pode estar na memória principal ou em um arquivo compartilhado
Para entendermos o processo de condição da corrida, vamos considerar como exemplo um spool de
impressão.
Para imprimir um arquivo, um processo entra com o nome do arquivo numa posição da fila em um
diretório de spool. Em paralelo e de forma constante, o deamon de impressão verifica na fila se há
algum arquivo para imprimir. Se houver algum arquivo para imprimir, ele será impresso e, em
seguida seu, seu nome será removido da lista.
Ambos os processos passam a ocupar a posição 1 como variável, indicando a vaga 1 da fila de
impressão.
O processo Y continua sua execução armazenando o nome ArquivoY na vaga 1, então, atualiza a
variável In para conter o valor 2
De forma fortuita, o processo X volta a executar suas tarefas da posição em que havia parado, após
verificar sua variável vaga_impressão_disponível e encontrar o valor 1, então, escreve o ArquivoX
na vaga 1
Semáforos
Como vimos anteriormente, quando um processo estivesse ativo e executando tarefas na região
crítica, então, outros deveriam ficar “dormindo” até o término dessa tarefa.
O semáforo é o conceito proposto por E.W. Dijkstra para um tipo de variável inteira, objetivando
contar o número de sinais de “acordar” salvos para o uso futuro.
Um semáforo poderia conter o valor 0, indicando que nenhum sinal de acordar foi salvo, ou algum
valor positivo, sinalizando que um ou mais sinais de acordar estivessem pendentes.
Dijkstra propôs a existência de duas operações para os semáforos: P (Down)
e V (Up), que são mnemônicos e fazem alusão a sleep e wake up (Dormir e
acordar).
Monitores
Hoare e Brinch Hansen propuseram uma unidade básica de sincronização de alto nível chamada de
monitor. Podemos definir monitor como uma coleção de rotinas, variáveis e estruturas de dados,
todos agrupados em um tipo especial de pacote.
O Monitor tem um papel fundamental para realizar a exclusão mútua pelo fato de que somente um
processo pode estar ativo em um monitor num determinado tempo X.
Tipicamente, quando um processo executa uma chamada a uma determinada rotina de monitor,
algumas das principais instruções da rotina deverão verificar se existe outro processo ativo dentro
do monitor.
Caso confirme que outro processo se encontra ativo dentro do monitor,
então, o processo que realizou a chamada ficará suspenso até que o processo
que estava previamente ativo saia do monitor.
Além da maneira simples que o monitor consegue tratar as exclusões mútuas, ele também apresenta
variáveis condicionais que possibilitam bloquear processos quando não puderem continuar.
Linguagens como C, Pascal e outras diversas não possuem monitores. Entretanto, o monitor foi
projetado para resolver o problema de exclusão mútua em CPU, acessando memória comum, porém
quando estamos usando um sistema distribuído formado por múltiplas CPUs e cada uma com sua
própria memória privada e conectada por uma rede, os monitores passam a não ter efeito.
Escalonamento
Devemos escalonar os processos em quatro situações:
1) Quando temos os processos pai e filho para serem executados. A definição de qual deve ser
priorizado, em muitos casos, é essencial para o perfeito funcionamento das tarefas e do
resultado correto.
2) Quando temos um processo que terminou e já não está mais no sistema, há a necessidade de
escolha de um novo processo e, portanto, o estacionamento, nessa situação, faz-se
necessário.
3) Quando um processo é bloqueado por alguma razão, então outro processo deve ser
selecionado para ser executado no lugar. Processos predecessores podem ser priorizados,
pois, se forem executados os sucessores, pode haver dependências que irão gerar resultados
inconsistente.
4) Ao ocorrer uma interrupção de E/S, pode ser necessária uma decisão de escalonamento. Os
algoritmos de escalonamento podem trabalhar tipicamente de duas formas: Não antecipado
e antecipado.
No primeiro caso, o processo “não antecipado” pode ficar executando pelo tempo que for
necessário, ou seja, por horas até que seja bloqueado ou até que libere a CPU.
No segundo, o algoritmo de escalonamento antecipado escolhe um processo
e o deixa em execução por tempo máximo fixado.
Observações:
Nos sistemas precursores não era possível mais que um programa ocupando a memória. Se isso
ocorresse, causaria problemas aos dois programas, ao que estava na memória e àquele que tentasse
fazer uso.
Com o avanço e a necessidade de múltiplas aplicações em funcionamento simultaneamente, a opção
encontrada foi o uso do Swapping, ou seja, troca de processos.
Isso consiste no sistema operacional pegar o conteúdo completo da memória e mover
ele para um arquivo na memória em disco rígido e, subsequentemente, liberar a
memória para o próximo processo.
Entretanto no hardware também houve avanço que não demanda somente a troca de processos
executada por software (pelo sistema operacional).
Esse processo consiste em dividir a memória principal em blocos de 2KB com chave de proteção de
4 bits para cada bloco e mantidas em registradores especiais dentro da CPU. Porém, nesse caso da
divisão da memória em blocos, há “um problema quando se usa mais de um programa”.
Os dois programas referenciam a memória física absoluta, enquanto, na realidade, queríamos que
cada programa referenciasse um conjunto de endereços. Portanto, a solução é a realocação estática
ou, em outras palavras, esse mecanismo de rotação visa a rotular blocos da memória com uma chave
de proteção e comparar a chave do processo em execução com a de cada palavra da memória
recuperada.
Observação: Se um processo maior que a área livre, ou um processo, mesmo que pequena, porém,
sem nenhuma área de memória, estiver disponível, então esse processo deverá ser transferido para
disco e ficará por lá até que memória suficiente seja liberada.
Memória Virtual
Diante da elevada demanda por memória, os programas eram criados em módulos. Dessa forma, ao
carregar um programa, o gerenciador de módulo era quem, na realidade, seria carregado e em
seguida, a sobreposição zero. Quando necessário, era carregado à próxima sobreposição desse
programa ou de outros. Todas as as preposições ficam gravadas em disco.
A memória virtual possui dois aspectos importantes: O primeiro é a quantidade de memória
fisicamente instalada no equipamento que chamamos de memória real.
O outro tem muito mais capacidade que o primeiro e chamamos de espaço de
memória virtual. No Hardware, temos um componente de extrema
importância que é a unidade de gerenciamento de memória (MMU)
O MMU suporta o sistema operacional na execução do mapeamento dos endereços da memória
física e endereços de memória virtual, permitindo, assim, a eficaz maestria de mover as partes dos
programas da memória virtual para o disco ou vice-versa.
Paginação:
A técnica chamada de paginação é usada na maioria dos sistemas de memória virtual. A memória
virtual é dividida em unidades de espaçamento de endereços adjacentes chamadas de páginas. Estas
correspondem a unidades das memórias chamadas de frames. Enquanto o espaço de endereçamento
virtual é dividido em unidades chamadas páginas (pages), temos as unidades correspondentes na
memória física que são denominadas molduras de páginas (frames). Tanto as páginas quanto as
molduras possuem o mesmo tamanho.
Segmentação:
Além da paginação, a segmentação de memória é uma das formas simples para se obter a proteção
da memória.
Resumo
Os processos são oferecidos pelos sistemas operacionais, ocupando cada qual o seu próprio espaço
de endereçamento. Eles podem ser criados e terminados de maneira dinâmica, de forma a evitar que
dois processos estejam em suas regiões críticas simultaneamente. Os semáforos, os monitores e as
mensagens são as formas nas quais os processos comunicam-se entre si.
Estados dos processos:
- Executando;
- Passível de ser executado;
- Bloqueado
É possível que o processo troque de estado quando ele, ou um outro processo,
executar uma das unidades básicas (semáforos, monitores ou mensagens).
Algoritmos de escalonamento são importantes para o ambiente e alguns sistemas fazem distinção
entre mecanismo de escalonamento e política de escalonamento, permitindo aos usuários controle
sobre o algoritmo de escalonamento. Algoritmo de escalonamento é a escolha feita pelo sistema
operacional de qual dos processos será privilegiado quando há uma única CPU, ou uma única CPU
disponível entre as diversas existentes no sistema, e mais de um processo estiver competindo para ser
executado.
Nos sistemas mais triviais, quando um programa é carregado em memória, ele ficará ocupando a
memória necessária até que sua finalização aconteça.
Alguns sistemas permitem somente um processo por vez carregado da
memória principal, enquanto outros suportam a multiprogramação.
Quando é necessário que o sistema operacional use mais memória principal (RAM), que realmente
existe fisicamente na máquina, então, é necessária a troca de processos entre as memórias principais
e o disco. Os espaços de endereçamento de cada processo são divididos em bloco e são chamados de
páginas.
Na memória fica a moldura de página que recebe os blocos dos processos. O sistema de paginação
ajuda no tratamento de estrutura de dados que alteram seus tamanhos durante a execução,
simplificando a ligação, o compartilhamento e facilitando a proteção customizada para cada
segmento.
Segmentação e paginação são tipicamente combinadas para fornecer uma
memória virtual bidimensional.