Sistemas Operacionais
Last updated
Last updated
Sistema Operacional (SO): Programa ou conjunto de programas do sistema que gerencia recursos de hardware e atua como intermediário (interface) entre usuário e hardware
Buffer: Utilização de uma área da RAM para auxiliar a transferência de dados entre I/O e a memória; armazenamento temporário para mitigar diferenças de velocidade em I/O Reentrância: Capacidade de um código executável ser compartilhado por várias tarefas exigindo apenas uma cópia em memória (guias em um mesmo programa ao invés de uma nova janela) Program Counter: Ponteiro que aponta para a próxima instrução a ser processada
Hyper-Threading: tecnologia onde o processador se apresenta para o SO como possuindo o dobro de núcleos que possui fisicamente; divisão do processamento entre dois ou mais processadores lógicos
BIOS/UEFI: Software de baixo nível que inicializa o hardware do computador UEFI (Unified Extensible Firmware Interface): Versão moderna de inicialização, mais compatível POST (Power On Self Test): Testes diagnósticos para verificar o funcionamento do computador Boot Device
Respeita a ordem de boot
Bootloader - Programa pequeno que carrega o sistema operacional
Primeiros sistemas operacionais
Recursos computacionais são dedicados para apenas um programa
Para execução de novo programa, aguarda término de programa concorrente
Implementação simples
jobs - programas
MS-DOS
Escalonamento / concorrência de programas
Recursos computacionais são compartilhados entre aplicações
Reduz tempo de resposta e custo
Implementação complexa
Podem ser classificados pela forma como gerencia suas aplicações:
Sistemas BATCH: Primeiros sistemas multiprogramáveis (década de 60); execução por cartões perfurados, armazenados em disco ou fita; processamento sem interação humana
Real-Time: Tempo de execução dentro de limites rígidos; programa ocupa o processador o tempo que for necessário ou até surgir um programa de maior prioridade (definida pela aplicação); utilizados em controle de processos (refinarias de petróleo, tráfego aéreo, usinas etc)
Time Sharing: Compartilhamento de diversos recursos do sistema; permite execução de diversos programas a partir da divisão do tempo do processador em pequenos intervalos (time-slice); a maioria das aplicações comerciais atuais utiliza, pois oferece menos tempo de resposta ao usuário e menos custo
Cluster de processamento
Possuem duas ou mais CPU's interligadas trabalhando em conjunto
Permite a execução simultânea de programas ou a subdivisão do programa para execução em mais de um processador
Permitiu criação de sistemas para processamento científico, simulações, processamento de imagem etc
Fortemente Acoplado: Uma memória é compartilhada pelo cluster de processadores e dispositivos I/O são gerenciados por um único SO; maior taxa de transferência e memória
Multiprocessamento Simétrico (SMP): cada CPU executa uma cópia idêntica do SO
Assimético: quando processadores são diferentes; resposta não é em tempo real
Fracamente Acoplado: Processadores estão em arquiteturas diferentes, somente unidos por cabos de interconexão; cada CPU é uma máquina independente, com SO próprio e possui sua própria memória individual
Redes: Dois ou mais sistemas independentes (hosts) interligados por linhas telefônicas, permitindo que um host compartilhe seus recursos (impressora, diretórios)
Distribuídos: Também compartilha recursos, porém neste modelo o SO omite detalhes dos hosts individuais e trata como se fossem um conjunto único (fortemente acoplado)
Núcleo do SO
Conjunto de rotinas que oferecem serviços essenciais aos usuários, aplicações e ao próprio sistema
Gerencia os recursos do sistema
O usuário entra em contato com o sistema operacional por meio do shell que envia para o kernel o que foi solicitado
Shell: Interpretador de comandos; "casca", parte externa responsável pela comunicação (interface CLI ou GUI) com o usuário
CLI - Command-Line Interface
GUI - Graphic User Interface
Camadas: Sistema é dividido em níveis sobrepostos onde cada camada fornece funções que podem ser utilizadas apenas pelas camadas superiores; isolamento das funções do sistema; compromete desempenho dadas as mudanças de camadas
Microkernel - Client/Server: Cada função/serviço do SO é disponibilizada através de processos; cliente (aplicação/usuário) solicita ao servidor (processo) responsável; permite que servidores operem como modo usuário acessando componentes limitados, pois apenas o núcleo opera em modo kernel
Ambiente onde um programa é executado / "programa em execução"
Contém quantidade de recursos que o processo pode utilizar
Estrutura de dados que compõe o processo
Contexto de Software: Especificação de limites e recursos
Identificação - infos sobre o usuário, áreas de atuação no sistema
Quotas - limites de recursos; área utilizada em disco/memória; limite de linhas impressas; nº máx de arquivos abertos; nº máx de I/O pendentes e tempo limíte de CPU
Privilégios - prioridades assumidas pelo processo durante sua execução
Contexto de Hardware: Conteúdo dos registradores da CPU, uso geral e específico; troca de contexto
Espaço de Endereçamento: Área da memória p/ armazenar instruções e dados de um programa; cada processo possui seu próprio espaço de endereçamento isolado de outros processos
New Processo está sendo alocado na memória; recursos necessários são reservados; mais de um processo ao mesmo tempo READY: Aguarda liberação da CPU (depois de criado ou após retorno da execução); "fila" gerenciada pelo SO RUN: Utilização da CPU; permanece no processador até sua interrupção ou término da execução; um processo por vez WAIT: Todos os processos que sofreram interrupção I/O; mais de um processo ao mesmo tempo (está em execução, aguarda periférico) Terminated: Final; término de processamento; mais de um processo ao mesmo tempo
CPU executa processos do sistema com certa prioridade concorrendo com processos do usuário
CPU-bound: Processo que utiliza muito a CPU; utiliza a time-slice por inteiro; pouca entrada e muito processamento (programas científicos, cálculo estatístico) I/O-bound: Utiliza mais I/O que CPU; permanece mais tempo em espera do que em execução (aplicações em BD, consultas e atualizações em arquivos em disco)
Linha de execução; sequência de instruções que faz parte de um processo principal
Possui contexto de hardware próprio, porém compartilha contexto de software e espaço de endereçamento com as demais threads
Processo é dividido em threads, que formam tarefas independentes, mas relacionadas entre si
Gerenciamento de Processador
Gerenciamento de Memória
Sistema de Arquivos
Gerenciamento de I/O
Suporte a redes
Contabilização de uso do sistema
Segurança
Eventos inesperados que causam um desvio forçado no fluxo normal de execução; é armazenado o contexto da execução de um programa, para então posteriormente retornar do ponto onde parou
Interrupção: Gerada por um evento externo; permitiu a implementação da concorrência nos computadores; fundamento básico de sistemas multitarefa
Exceção: Execução de instrução dentro do programa (divisão por 0, overflow)
Troca de mensagens entre cliente (aplicação/usuário) e servidor (processo)
Porta de entrada p/ acesso ao kernel e aos serviços
Necessária para execução de serviços através da chamada de rotinas
Cada serviço disponível possui sua system call
Cada SO possui conjunto específico de system call
Gerenciamento de Processos:
Criação / Eliminação ➡ Alocação em memória dos recursos necessários junto do contexto
Escalonamento / Controle ➡ Organiza fila de acesso ao processador baseado nos parâmetros do sistema e do perfil o usuário
Funções:
Manter CPU ocupada
Balancear uso da CPU entre processos
Privilegiar aplicações críticas
Maximizar throughput
Oferecer tempo de resposta razoável
Política de Escalonamento: Critérios para fila de processamento; cada SO possui uma própria
Critérios de Escalonamento
Utilização do Processador
Throughput: número de tarefas executadas em função do tempo
Tempo de processador: tempo que um processo leva em RUN
Tempo de espera (pela CPU): tempo que um processo fica em READY
Tempo de turnaround: tempo total do processo no sistema, de CREATE até EXIT
Tempo de Resposta: do momento da requisição até o início da resposta
Não-Preeptivo
SO não pode interromper os processos, a não ser que haja instrução para tal ou seja desviado para WAIT (operações I/O)
FIFO / FCFS (First-Come-First-Served): First in, first out; primeiro processo que chega na fila permanece utilizando o processador até o fim de sua execução; obedece a ordem de chegada á fila de READY; inicialmente implementado em sistemas monoprogramáveis
SJF: Escalonamento seleciona o processo que tiver menor tempo de CPU; parâmetro passado via contexto de software; se baseia em estatísticas de execuções anteriores
Cooperativo: Um processo em execução voluntariamente retorna à fila de pronto e libera a CPU para um novo processo; aumenta concorrência no processador; melhor distribuição do tempo do processador
Preeptivo
Possibilidade de interrupção pelo SO (retorna para READY), permite priorização de processos
Circular: Preepção por tempo; projetado para sistemas time-sharing; semelhante ao FIFO, obedece ordem de chegada, porém respeita limite de time-slice Prioridade: Funcionamento com base na prioridade de execução (valor atribuído a cada processo), no caso processos com prioridades iguais é processado o primeiro a chegar (critério FIFO)
Circular com Prioridade: Conceito de time-slice e prioridade de execução; processo permanece em execução até que termine seu processamento, ou voluntariamente passe para o estado de espera (interrupção por E/S), ou sofra uma preempção por tempo ou prioridade; possibilidade de diferenciar grau de importância através da prioridade
Múltiplas Filas: Várias filas com processos em estado de pronto, cada uma com prioridade específica; a fila detém a prioridade, não o processo; processos sempre voltam para a mesma fila de onde saíram
Múltiplas Filas com Realimentação: Semelhante ao anterior, mas permite ao processo voltar para uma outra fila de maior ou menor prioridade; SO identifica dinamicamente o comportamento de cada processo e o redireciona para a fila mais conveniente
Memória principal sempre foi vista como um recurso escasso e caro
Gerência de sistemas multiprogramáveis é bem mais complexa do que em monoprogramáveis; alto número de usuários e aplicações enquanto deve utilizar espaço da MP eficientemente
Programas são armazenados em memórias secundárias não voláteis Como o processador somente executa o que está na MP, o SO deve sempre transferir programas da memória secundária para a principal antes de serem executados
Alocação Contígua Simples: Primeiros SO sistemas monoprogramáveis; MP dividia em parte do SO e parte do usuário; limitado a apenas 1 usuário; gerenciamento não eficiente
Segmentação de Programas - Overlay: Divisão do programa em módulos independentes que utilizam a mesma área de memória; módulo principal ocupa a memória durante todo tempo de execução; permite execução de programas maiores que a memória física disponível
Alocação Particionada Estática: Código realocável, referências a endereços no programa são relativas ao início do código e não a endereços fixos; programas podem ser realocados em qualquer partição livre; tanto em sistemas de alocação absoluta como nas realocáveis, programas deixam espaço livre na partição (fragmentação interna)
Alocação particionada estática absoluta: Antigamente quando programas só podiam ser carregados/executados em uma partição específica, mesmo com outras disponíveis; referências a endereços são posições fixas na memória (código absoluto)
Alocação Particionada Dinâmica: Eliminado o conceito de partições de tamanho fixo; tamanho da partição é definido de acordo com o espaço necessário à execução de tal programa; eliminação da fragmentação interna, porém, dada a variação de tamanho utilizado pelos programas, restam blocos de memórias cada vez menores impedindo o ingresso de novos programas (fragmentação externa) Soluções para problema de fragmentação externa:
União dos blocos livres adjacentes em uma grande área livre (nova partição)
Realocação das partições ocupadas para a parte inicial da memória, eliminando blocos livres entre elas, grande área livre no final da memória (alocação particionada dinâmica com realocação)
Estratégias de Alocação de Partição: Estratégias para determinar em qual área livre um programa será alocado para execução
Best-fit: Partição que deixa o menor espaço sem utilização; deixa pequenos blocos, fragmentação aparece mais rápido
Worst-fit: A que deixa maior espaço livre; aproveita primeiro partições maiores e deixa grandes espaços livres, retarda fragmentação
First-fit: Primeira partição que couber, independente do espaço livre que vai deixar; estratégia mais rápida, menos consumo de recursos
Swapping: Técnica que visa dar maior taxa de utilização à memória principal e melhorar compartilhamento; quando não há espaço na MP, o SO escolhe os processos com menor previsão de utilizar a CPU e "descarrega" em uma área reservada no disco, chamada arquivo de swap
Combina memória principal e secundária, permitindo que os programas acessem mais memória do que a capacidade real da memória principal
Elimina a limitação do tamanho dos programas e suas estruturas de dados; permite um número maior de processos compartilhando a memória principal, minimizando o problema da fragmentação
Técnica utilizada para gerenciar memória física de forma eficiente
Divide o programa em blocos de tamanho fixo chamados páginas, facilitando o controle do acesso à memória e melhorando o desempenho geral do sistema
Cada página tem um número único de página (PAN) que identifica sua localização na memória física
Páginas do espaço virtual são chamadas páginas virtuais, enquanto as páginas do espaço real são chamadas páginas reais ou frames
Espaço de Endereçamento
Espaço de endereçamento real: Espaço de endereçamento que um programa ocupa na memória física; limitado pela quantidade total de memória disponível
Espaço de endereçamento virtual: Conceito abstrato que permite aos programas acreditar que têm acesso contínuo e ilimitado à memória, mesmo quando essa não está disponível fisicamente; SO mapeia automaticamente as referências virtuais para endereços reais na memória física
Mapeamento: Processo pelo qual o SO traduz os endereços virtuais em endereços físicos Tabela de Endereçamento de Páginas: Estrutura de dados usada para armazenar informações sobre cada página na memória, inclui o endereço físico correspondente, status da página (se está em uso ou livre), e outras informações relevantes
Page Fault: Ocorre quando o SO tenta acessar uma página que não está atualmente na memória física; para resolver isso, o sistema deve buscar a página na unidade de armazenamento secundário (como disco rígido), o que pode causar um atraso significativo conhecido como latência de página
Working Set: Conjunto de páginas que um programa precisa ter na memória para executar corretamente durante um período de tempo; gerenciar eficientemente o working set é crucial para evitar o thrashing
Thrashing: Acontece quando o SO passa muito tempo buscando páginas na unidade de armazenamento secundário, em vez de executar programas; isso ocorre quando há muitas trocas de página, indicando que a memória física está sobrecarregada
Tamanho da Página: Deve estar entre 512 bytes e 128 KB, aproximadamente
Política de Busca de Páginas: Definem como as páginas serão carregadas da memória virtual para a memória real
Política por Demanda: Estabelece que uma página somente será carregada quando for referenciada
Paginação Antecipada: Funciona carregando antecipadamente várias páginas da memória virtual para a principal, na tentativa de economizar tempo de E/S
Política de Alocação de Páginas: Determinam quantos frames cada processo pode manter na memória real; algumas políticas comuns incluem best fit, first fit e worst fit
Política de Alocação Fixa: Determina um limite de working-set igual para todos os processos, e pode ser vista como uma política "injusta", na medida em que processos maiores normalmente necessitam de um working-set maior
Política Variável: Define um limite de working-set diferente e variável para cada processo, em função de seu tamanho, taxa de paginação ou até mesmo da taxa de ocupação da memória principal
Política de Substituição de Páginas: Decide qual página será removida da memória quando ela está cheia e uma nova página precisa ser carregada. Métodos populares incluem LRU e FIFO.
Política Local: Somente as páginas do processo que gerou o page fault são candidatas a serem substituídas
Política Global: Todas as páginas alocadas na memória principal são candidatas à substituição independente do processo que gerou o page fault
Algoritmos de substituição de páginas
Têm o objetivo de selecionar os frames que tenham as menores chances de serem referenciados num futuro próximo. Caso contrário, o frame poderia retornar diversas vezes para a memória real, provocando excesso de page faults
Algoritmo Aleatório: Escolhe qualquer página, entre as alocadas na memória, para fazer a substituição; em função de sua baixa eficiência, este algoritmo não muito utilizado, embora consuma poucos recursos do sistema
FIFO (First In, First Out): Escolhe a página que está há mais tempo na memória principal para fazer a troca; algoritmo de simples implementação, mas corre o risco de retirar uma página que, embora tenha sido carregada há mais tempo, esteja sendo muito utilizada
LFU (Least Frequently Used): Escolhe a página menos frequentemente usada para efetuar a troca; através de um contador, armazenado na tabela de endereçamento de páginas, o sistema identifica quantas referências cada página teve e utiliza esta informação para escolher a página
LRU (Least Recently Used): Escolhe a página menos recentemente usada para fazer a troca; o sistema mantém na tabela de endereçamento de páginas um campo onde são armazenadas a data e a hora da última referência de cada página, e com base nestas informações faz a seleção
NRU (Not Recently Used): NÃO elege a página mais recentemente usada para efetuar a troca; o sistema exclui da decisão a página mais recente e escolhe entre as outras, pelo método FIFO, qual página deve sair
FAT32
4 GB
Sim
Sim
exFAT
16 EB
Sim
Sim (Kernel 5.4+)
NTFS
16 TB
Sim
Leitura (Drivers p/ gravação)
ext3
2 TB
Não (Requer drivers)
Sim
ext4
16 TB
Não (Requer drivers)
Sim
UDF
Depende da implementação
Sim
Sim